需求分析
对于架构师来说,需求分类、需求折中以及需求变更是日常工作中遇到的最平常的事情。
什么是软件需求?
需求描述了系统必须满足的情况或提供的能力,它就可以是直接来自客户需要,也可以来自合同、标准、规范或者其他有正规约束力的文档。
需求捕获:获取知识的过程,知识从无到有、从小到多。需求采集者必须理解用户所从事的工作,并且了解用户和客户希望软件系统在哪些方面帮助他们。需求捕获最终会产生一系列的需求采集卡,其中记录了需求类型、需求描述、需求背景、需求提出者以及需求记录者等相关信息。
需求分析:挖掘和整理知识的过程。它在已掌握知识的基础上进行。需求分析最终会产生一份需求规格说明书(SRS),它精确描述了系统必须提供的功能,必须达到的质量属性以及它必须遵守的约束。
系统分析:针对系统所面临的问题,搜集相关资料,以了解产生问题的原因所在,进而提出解决问题的方法与可行的逻辑方案,以满足系统的需求,实现预定的目标。系统分析最终会产生一个系统设计文档。
需求分析关注‘做什么’的问题;系统分析关注‘怎么做’的问题。
架构师必须掌握的需求知识
软件需求的分类:软件需求可以分为功能性需求和非功能性需求两类;其中非功能性需求分为质量属性和约束两种;质量属性分为开发期质量属性和运行期质量属性。
功能性需求描述了开发的软件系统应该做什么,可以通过‘软件系统应提供什么服务’来进行定义。
约束规定了开发软件系统时必须遵守的限制条件。
McCall在1977年对软件的质量属性做以下分类:
1. 产品操作:正确性、可靠性、效率、完整性、易用性
2. 产品修改:可维护性、灵活性、可测试性
3. 产品改型:可移植性、可重用性、互操作性
如果将质量属性分为运行时质量属性和开发期质量属性,可以进行如下分类:
1. 运行时质量属性:性能、安全性、易用性、持续可用性、可伸缩性、互操作性、可靠性、鲁棒性
2. 开发期质量属性:易理解性、可扩展性、可重用性、可测试性、可维护性、可移植性
各类需求对软件架构的影响
功能需求影响架构,但不决定架构。质量属性从根本上影响架构。
面对频繁的需求变更,应该如何面对?
需求变更的来源
1. 我们要解决的问题发生了变化
2. 我们对问题的理解发生了变化
3. 我们理解问题的过程有错误
对于一个软件系统来说,质量属性需求是最小可能发生变化的;其次是各种约束;最容易发生变化的是各种功能需求。
参考文献
《软件架构设计》 温昱