关键需求决定架构
软件架构师没有时间对‘所有需求’进行深入分析,这既是策略,也是现实。
需求是任何促成设计决策的因素,但是很少有开发者可以拥有一个稳定的需求集,所以,关键的第一步就是要缩小范围,范围的标准是具有重要性、可能性并且数量要少。
从需求转向架构的过程中,存在的几个问题:
- 抱怨留给架构的时间太短,而不是接受项目节奏普遍加快的现实。一般来说,新的商业应用的开发周期最多不能超过9个月。
- 认为必须详细分析所有的需求,只有这样才能设计出满足所有需求的软件架构。我们采取的策略是:在架构设计期间,关键需求决定架构,其余需求验证架构。
- 认为软件架构必须是完美的技术解决方案。实际上,由于时间紧张,架构并不是要求完美,而是要求够用。
关键需求决定架构的必要性和影响
- 把所有需求确定后再进行架构设计往往是不现实的。
- 由于项目工期一般不是由开发方来确定,所以时间上也是有限制的。
- 可以用有限的精力深入分析最重要的需求。
- 需求的变更可能会引起架构设计不再合适,因此,我们可以通过所有需求的一个子集来‘驱动’我们的架构决策过程,可以减少需求对架构设计带来的冲击,使架构设计趋于稳定。
什么是软件架构的关键需求?
一般可以从功能需求、质量需求和商业需求三方面来进行分类。
任何功能需求,都是由一条特定的‘模块协作链’完成的。所谓图案件架构就是关于如何构建软件的一些重要决策,这些决策往往是围绕着将系统分为哪些部分、各部分之间如何交互展开的。所以对软件架构关键的功能需求,就是它涉及的模块最多、最典型的功能需求。
要达到高质量属性的要求,是有成本的,而且不同的质量属性之间往往具有相互制约性,使得有些质量属性需求同时达到高要求比较困难。对架构至关重要的质量需求是那些经过权衡取舍、最终决定重点支持的质量属性需求。
商业需求也称业务需求,一般情况下,商业需求是指“组织或客户高层次的目标”,它关注从客户群、企业现状、未来发展、预算、立项、开发、运营、维护在内的整个软件生命周期涉及到的商业因素,包括了商业层面的目标、期望和限制。
如何确定对软件架构关键的需求
可以分为4步:1. 全面整理需求;2. 分析约束性需求;3. 确定关键功能需求;4. 确定关键质量属性需求。
全面整理需求后,可以对需求建立通盘认识。因为大多数情况下需求文档未必有软件架构师所需要的所有信息,例如质量需求一般在需求文档中一带而过,这样,架构师只有通盘理解需求后,才能将缺失的、隐藏的需求找出来。
约束性需求可以通过3种方式影响架构设计:1. 直接制约设计决策;2. 转化为功能需求;3. 转化为质量属性需求。
如何去定关键功能需求
- 作为应用程序的核心或实现了系统的主要接口的功能。
- 必须被实现的功能。
- 覆盖了系统架构的一些方面,但没有被其他重要的用例覆盖到的功能。主要是确保解决了所有的技术风险。
确定关键质量属性需求
- 考虑为了提高开发的软件系统受认可的程度,应着重提高哪些方面的质量属性要求。
- 充分考虑这些质量属性的相互制约或相互促进关系,以调整不同质量属性的要求标准。
- 必须满足各种约束性需求。