需求分析方法
需求分析基础
需求分析的任务
- 建立分析模型,达成开发者和用户对需求信息的共同理解。
- 依据共同的理解,发挥创造性,创建软件系统解决方案。
为何需要需求分析
在需求获取中,需求工程师一般获取的信息都是用户对现实世界的理解与描述,使用的是实际业务的表达方式,而非开发者可以立即实现的解决方案。所以需要通过需求分析来建立与用户间的共同理解,并将用户的描述转换为软件解决方案。
需求分析的模型 重点
常见的结构化方法需求分析模型如下
模型 | 描述 |
---|---|
数据流图 | 从数据传递和加工的视角来描述系统从输入到输出到功能处理过程。 |
实体关系图 | 描述系统中所有数据对象及其关系,定义了系统中使用处理和产生的所有数据。 |
常见的面向对象方法需求分析模型如下
模型 | 描述 |
---|---|
用例图 | 描述用户与系统之间的交互。从交互的角度说明了系统的边界和功能范围。 |
(概念)类图 | 描述应用领域中重要概念以及概念之间的关系,捕获了系统的静态结构。 |
交互图 / 顺序图 | 描述系统中一次交互的行为过程,说明了在交互中的对象协作关系。 |
状态图 | 描述系统、用例或者对象在其整个生命周期中的状态变化。 |
抽象和分解是建立模型最常用的两种手段。
面向对象分析 重点
面向对象的分析方法认为系统是对象的集合,这些对象通过相互协作来共同完成系统的整个任务。面向对象分析方法的优点在于自然性和可复用性,前者指面向对象的分析方法可以与现实中的例子产生映射关系,后者指面向对象的分析方法更容易实现分析到设计的转化。
统一建模语言(
面向对象分析的常见流程如下图
用例图
用例指在系统和外部对象的交互中所执行的行为序列的描述,包括各种不同的序列和错误的序列,它们能够联合提供一种有价值的服务。系统中有些行为序列并不能单独提供价值,因此不应该算作用例,它很可能是某个用例中的一个行为序列。
用例图就是以用例为基本单位的模型。它的基本元素有四种:用例、参与者、系统边界和关系。如下表所示
种类 | 图示 | 说明 |
---|---|---|
用例 | 水平的椭圆 | 代表一个用例 |
参与者 | 小人 | 同系统进行交互的抽象角色,并非真实的参与者 |
系统边界 | 矩形框 | 系统成分和系统外事物的分界线 |
关系 | 直线 | 表示参与者参与的用例 |
用例图的建立
细化用例时,用例粒度合适的判断标准是:用例描述了为应对一个业务事件,由一个用户发起,并在一个连续的时间段完成,且可以增加业务价值的任务。
用例的描述
建立用例图后需要对用例进行描述,用文本的方式来将参与者、目标、场景等信息描述出来。这些用例描述经不断演化后可以放入用例文档。
项目 | 内容描述 |
---|---|
ID | 用例的标识 |
名称 | 对用例内容的精确描述,体现了用例所描述的任务 |
参与者 | 描述系统的参与者和每个参与者的目标 |
触发条件 | 标识启动用例的事件,可能是系统外部的事件,也可能是系统内部的事件,还可能是正常流程的第一个步骤 |
前置条件 | 用例能够正常启动和工作的系统状态条件 |
后置条件 | 用例执行完成后的系统状态条件 |
正常流程 | 在常见和符合预期的条件下,系统与外界的行为交互序列 |
扩展流程 | 用例中可能发生的其他场景 |
特殊需求 | 和用例相关的其他特殊需求,尤其是非功能性需求 |
概念类图 / 领域模型
概念类图的基本元素包括对象、类、链接、关联、组合聚合、继承。如下表所示
种类 | 图示 | 说明 |
---|---|---|
对象 | 矩形框,内部分栏。 | |
类 | 矩形框,内部分栏。 | 包含重要属性。 |
链接 | 直线。 | 对象之间的互相协作关系。 |
关联 | 直线,中央有关联名称,两端可以标注基数;可使用有向箭头表明它是单向的关联。 | 类之间的关系。 |
聚合 | 直线,在整体的关联端使用使用空心菱形。 | 部分与整体之间的关系。 |
组合 | 直线,在整体的关联端使用使用实心菱形。 | 聚合,并且一个部分完全属于整体。 |
继承 | 直线,在父辈的继承端使用空心三角。 |
建立概念类图
对每个用例文本描述,尤其是场景描述,建立局部的概念类图
根据用例的文本描述,识别候选类
筛选候选类,确定概念类(有状态、有行为)
识别关联
识别重要属性
将所有用例产生的局部概念类图进行合并,建立软件系统的整体概念类图
交互图
交互图是描述对象之间协作的模型。它包括顺序图、通信图、交互概述图和时间图四种类型,其中,顺序图是最常用的一种。
顺序图将交互表示成一个二维的图表,其中纵向是向下延伸的时间轴,横向是参与协作的对象。需求分析阶段的系统顺序图横向仅包含两个对象:外部参与者和系统。
下面是一个简单的顺序图
顺序图的消息类型有同步消息、异步消息和返回消息;组合段类型有
状态图
状态图可以用来描述复杂的对象协作与交互行为。
下面是一个简单的状态图
结构化分析
TODO