需求工程

需求工程

1 阶段划分

软件需求是指用户对系统在功能、行为、性能、设计约束等方面的期望

  • 需求获取
  • 需求分析
  • 形成需求规格【SRS 规格说明书】
  • 需求确认与验证 【形成需求基线(评审过的SRS)】
  • 需求管理:对需求基线进行管理
    1. 变更控制
    2. 版本控制
    3. 需求跟踪
    4. 需求状态跟踪

2 需求获取

2.1 需求层级

  • 业务需求:整体、全局的需求,偏向于目标性的东西。
  • 用户需求:用户视角 和实际用户沟通,了解用户的需求。
  • 功能需求:系统需求,系统要实现的功能、达到哪些性能指标、有哪些设计约束(比如指定技术栈,运行环境)

2.2 获取方法

方法 特点
用户面谈 1对1-3,有代表性的用户,了解主观想法,交互好。成本高要有领域知识支撑
联合需求计划(JRP) 高度组织的群体会议,各方参与,了解想法,消除分歧,交互好,成本高
问卷调查 用户多,无法一一访谈,成本低
现场观察 针对较为复杂的流程和操作。
原型化方法 通过简易系统方式解决早期需求不确定问题。
头脑风暴法 一群人围绕新业务,发散思维,不断产生新的观点。

3 需求分析

3.1 结构化需求分析

数据字典:模型里表述不清的地方,用数据字典解释(比如 实体定义)

3类模型

3.1.1 功能模型

一般用数据流图DFD完成

  • 数据流
  • 加工
  • 数据存储
  • 外部实体

3.1.2 数据模型

E-R图

  • 实体
  • 联系

3.1.3 行为模型

状态转换图

  • 状态(初态、终态)
  • 事件

3.2 面向对象需求分析(UML)

统一建模语言UML:平台无关性、语言无关性

3.2.1 事物

  • 结构事物:静态的部分,包括类,接口、协作、用例、构件和节点
  • 行为事物:代表时间和空间上的动作。消息、动作次序、连接
  • 分组事物:看成是个盒子,如:包,构件
  • 注释事物:UML模型的解释部分。描述、说明等

3.2.2 关系

3.2.3 图

静态图(结构图):

  • 类图:一组类、接口、协作和它们之间的关系
  • 对象图:一组对象和它们之间的关系
  • 构件图:一个封装的类和它的结构
  • 部署图:软硬件之间的映射
  • 制品图:系统物理结构
  • 包图:由模型本身分解而成的组织单元,以及它们之间的依赖古纳西
  • 组合结构图

动态图(行为图):

  • 用例图:系统与外部参与者的交互
  • 顺序图:强调按时间顺序
  • 通信图:协作图
  • 定时图:强调实际时间
  • 交互概览图
  • 活动图:类似程序流程图,并行行为
  • 状态图::状态转换变迁

4 需求定义

即形成需求规格说明书

4.1 严格定义法

适用于清晰的需求,偏向瀑布模型的思想

  • 所有需求都能被预先定义好(预测形,如:瀑布模型)
  • 开发和用户之间能够准确而清晰的交流
  • 采用图形/文字可以充分体现最终系统

4.2 原型法

适用于不清晰的需求,偏原型开发模型的思想

  • 并非所有需求都能在开发前被准确说明
  • 项目参加者之间存在交流上的困难
  • 需要实际、可供用户参与的系统模型
  • 反复是完全需要和值得提倡的,需求一旦确定,就应遵从严格的方法

5 需求确认与验证

需求基线:经过评审的需求规格说明书

SRS通过需求验证后得到需求基线

要求客户参与,签字确认

6 需求跟踪

需求开发跟踪不易,在项目当中获取全面的需求也不容易

正向跟踪:用户原始需求 -> 软件需求 -> 下游工作产品

二维表(原始需求、需求用例)

反向追踪:下游工作产品 -> 软件需求 -> 用户原始需求

7 需求变更管理

项目形成需求基线后,不能随意改动。要先分析再决定要不要做

  1. 识别出问题

  2. 问题分析和变更描述

  3. 变更分析和成本计算

  4. 变更实现