一、需求工程概述
对软件需要提供的服务和需要受到的约束进行理解、分析、验证和管理的过程叫做需求工程。
需求工程是一个不断反复的需求定义、文档记录、需求演进的过程,并最终在验证的基础上冻结需求。
将需求工程分为六个阶段(有不同的划分标准):需求获取、需求分析与协商、系统建模、需求规约、需求验证以及需求管理六个阶段。
1. 需求获取
在此阶段系统分析人员通过 与用户交流(访谈)、研究使用者的工作流程、问卷调查、研究目前存在的系统等方法确定 系统或产品范围的限制性描述、系统环境的描述等。
需求获取的工作结果为需求分析提供了基础。
2. 需求分析与协商
需求获取后需要进行分析,主要是对需求进行分类、分析每个需求与其他需求之间的关系,检查需求的一致性、重叠和遗漏的问题,并对需求进行排序。
协商则是因为可能出现以下问题:①用户提出的要求超出软件系统可以实现的范围和能力。②不同用户提出了相互冲突的需求。因此需要协商。
3. 系统建模
通过合适的工具和符号系统来描述。在用户和系统分析人员之间建立了统一的语言和理解的桥梁。
常用的分析和建模方法有面向数据流方法、面向数据结构方法和面向对象方法。
4. 需求规约
软件需求规约是分析任务的最终产物,建立完整的信息描述、详细的功能和行为描述、性能需求和设计约束的说明等等。
5. 需求验证
作为需求开发阶段工作的复查手段,需求验证对功能的正确性、完整性和清洗性以及其他需求给予评价。
6. 需求管理
软件需求管理是对需求工程所有相关活动的规划和控制。
二、需求的分类
需求分为功能性需求和非功能性需求两大类。
非功能性需求分为:性能需求、质量属性、对外接口、约束。
需求层次:
业务需求
• 系统建立的战略出发点,表现为高层次的目标,它描述了组织为什么要开发系统
• 参与各方必须要对高层次的解决方案达成一致,以建立一个共同的前景
用户需求
• 执行实际工作的用户对系统所能完成的具体任务的期望,描述了系统能够帮助用户做些什么
• 特性
• 模糊、不清晰
• 多特性混杂
• 多逻辑混杂
系统需求
• 用户对系统行为的期望,一系列的系统行为联系在一起可以帮助用户完成任务,满足业务需求
• 系统需求可以直接映射为系统行为,定义了系统中需要实现的功能,描述了开发人员需要实现什么
三、需求获取
1. 软件需求
软件需求是指用户对目标系统在功能、行为、性能、设计约束等方面的期望。包括以下几点:
①功能需求
考虑系统做什么、何时做、何时修改或升级。
②性能需求
考虑软件开发的技术性指标。如存储空间、吞吐量等。
③用户或人的因素
考虑用户类型
④环境需求
考虑未来软件应用的环境,包括硬件和软件。
⑤界面需求
考虑来自其他系统的输入,到其他系统的输出,对数据介质和存储介质的规定。
⑥文档需求
考虑需要哪些文档。
⑦数据需求
考虑输入、输出的格式,接收、发送数据的频率,数据的精确度等。
⑧资源使用需求
考虑软件运行时所需要的数据、其他软件、内存空间等资源;
软件开发、维护所需要的人力、支撑软件、开发设备等。
⑨安全保密需求
⑩可靠性需求
⑪软件成本消耗与进度开发需求
⑫其他非功能性需求
2. 需求获取方法与策略
①面谈
即分析人员与用户面对面交谈,提问问题时应注意:
所提的问题应该循序渐进,从整体方面提问,之后的问题应该有助于对前面问题的理解和细化。
不要限制用户对问题的回答,这可能会引出原先没有注意的问题
提问和回答在汇总后应该能够反映用户需求的全貌
②观察用户操作流程
到用户实际工作环境对用户的工作流程进行观察。
③成立联合小组
由用户和开发者组成小组,参加会议进行讨论。
④问卷调查
⑤原型法
界面原型法:
是指开发方根据自己所了解的用户需求,描画出应用系统的功能界面后与用户进行交流 和沟通,通过“界面原型”这一载体,达到双方逐步明确项目需求的一种需求获取的方法。
可运行原型系统法:
是指开发方根据合同中规定的基本需求,在以往类似项目应用系统的基础上进行少量修 改得出一可运行系统,通过“可运行原型系统”这一载体,达到彻底挖掘项目需求的一种需求 获取的方法。
⑥.........
四、需求分析(协商与建模)
1. 需求分析的任务
需求分析基本任务是准确地回答“系统必须做什么”这个问题。在需求分析阶段,需要确定系统必须完成哪些工作,也就是对目标系统提出完整、准确、清晰、具体的要求。系统分析员应该写出软件需求规格说明书,以书面形式准确地描述软件需求。
具体任务:
1、确定对系统的综合要求
(1)功能需求 (2)性能需求 (3)可靠性和可用性需求 (4)出错处理需求
(5)接口需求 (6)约束 (7)逆向需求 (8)将来可能提出的要求
2、分析系统的数据要求
(1)建立数据模型——ER图
(2)描绘数据结构——层次方框图和Warnier图
(3)数据结构规范化
3、导出系统的逻辑模型
综合上述两项分析的结果可以导出系统的详细的逻辑模型,通常用数据流图、实体-联系图、状态转换图、数据字典和主要的处理算法描述这个逻辑模型。
4、修正系统开发计划
根据在分析过程中获得的对系统的更深入更具体的了解,可以比较准确地估计系统的成本和进度,修正以前制定的开发计划。
2. 建模
观察或研究某一系统时,常常把它抽象成一个模型。
创建模型是需求分析阶段的重要活动。
常见的分析方法:(之后几章将会介绍这几种建模方法)
①面向数据流的结构化分析方法(SA)。
②面向数据结构的分析方法。
③面向对象的分析方法(OOA)。
四、需求规约与验证
1. 需求规约
通过需求分析除了创建分析模型之外,还应该写出软件需求规格说明书,它是需求分析阶段得出的最主要的文档。
通常用自然语言完整、准确、具体地描述系统的数据要求、功能需求、性能需求、可靠性和可用性要求、出错处理需求、接口需求、约束、逆向需求以及将来可能提出的要求。
2. 需求验证
(1)从哪些方面验证软件需求的正确性
一致性:所有需求必须是一致的,任何一条需求不能和其他需求互相矛盾。
完整性:需求必须是完整的,规格说明书应该包括用户需要的每一个功能或性能。
现实性:指定的需求应该是用现有的硬件技术和软件技术基本上可以实现的。
有效性:必须证明需求是正确有效的,确实能解决用户面对的问题。
(2)验证软件需求的方法
1、验证需求的一致性
■人工技术审查
■形式化的描述软件需求的方法
2. 验证需求的现实性
■仿真或性能模拟技术
3. 验证需求的完整性和有效性
■开发原型系统
五、需求管理
需求管理是一种用于查找、记录、组织和跟踪需求变更的系统化方法,可用于获取、组织和记录系统需求并使客户和项目团队在系统变更上达成保持一致。
需求管理主要包括:
1. 需求基线
(1)定义
已经通过正式评审和批准的规格说明或产品可作为进一步开发的基础,而且只有通过正式的变更控制过程才能修改它。
(2)需求基线描述的信息
2. 需求跟踪
(1)概述
需求跟踪的主要意义在于获得需求目前的实现状态,确保用户所有需求得到满足,它的主要目标使维护工作产品间的一致性。
(2)需求跟踪的方式
需求跟踪以软件规格说明文档为基线,在向前和向后两个方向上,描述需求以及跟踪需求变化的能力。
需求跟踪分为向前跟踪和向后跟踪:
①向前跟踪:
指需求被定义到软件需求规格说明文档之前的演化过程,包括向前跟踪到需求和从需求向后回溯两种联系。
②向后跟踪
指需求被定义到软件需求规格说明文档之后的演化过程,包括需求向前跟踪和回溯到需求跟踪两种联系。
(3)需求跟踪常用方法
主要有需求跟踪矩阵、实体联系模型和交叉引用三种。
最常用的是需求跟踪矩阵: