本贴介绍需求分析方法,涉及到诸多实践性的东西,掌握各种图表的绘制是重中之重~
一.需求分析基础
1.原因
需求获取中得到的信息仅仅解释了用户对软件系统的理解与期待,使用的是实际业务的表达方式,还不是开发者能够立即加以实现的解决方案~
需求分析的任务:
- 建立分析模型,达成开发者和用户对需求信息的共同理解~
- 依据共同的理解,发挥创造性,创建软件系统解决方案
2.模型
(1)定义
模型是对事物的抽象,帮助人们在创建一个事物之前有更好的理解~
(2)建模
建立系统的一个表示,这个表示以精确统一的方式描述系统,使得系统的使用更加容易~
- 抽象:一方面要求人们只关注重要的信息,忽略次要的内容;另一方面要求认知保留在适当的层次,屏蔽更深层次的细节~
- 分解:将单个复杂和难以理解的问题分解为多个相对容易得子问题
(3)特点及其常见需求分析模型
需求分析模型是专门用来描述软件解决方案的模型技术。
定位:
常见模型:
二.结构化分析
1.方法
把现实世界描绘为数据在信息系统中的流动,以及在数据流动过程中数据向信息的转化。他帮助开发人员定义系统需要做什么(处理需求),系统需要存储和使用哪些数据需求(数据需求),需要什么样的输入和输出,以及如何把这些功能结合在一起来完成任务。
(常见模型:数据流图、实体关系图、状态转移图、数据字典等)
2.数据流图(DFD图)
将系统看为过程的集合,过程的执行就是对数据的处理,接受数据输入,并进行数据转换,输出数据结果;执行过程中可能涉及到人机交互等外界输入的数值~
(1)基本元素
- 外部实体:处于待构建软件系统之外的人、组织、设备或者其他软件系统
- 过程:施加于数据的动作或者行为
- 数据流:数据的运动(动态)
- 数据存储:软件内部手机的数据集合(静态)
如下是一个DFD图的样例:
(2)语法规则
- 过程是对数据的处理,必须有输入,也必须有输出,而且输入数据集和输出数据集应该存在差异
- 数据流是必须和过程产生关联的,他要么是过程的数据输入,要么是过程的数据输出
- 所有对象都应该有一个可以唯一标识自己的名称,过程使用动词,外部实体、数据流和数据存储使用名词
(3)分层结构
对于复杂的系统,解决的方式是分而治之:即利用过程具有不同抽象层次表达能力的特点,依据过程的功能分解结构,建立层次式的DFD描述:
- 上下文图:最高层次的图,是系统功能的最高抽象,将整个系统看做一个过程,这个过程是实现系统的所有功能,所以上下文图中仅存在一个过程,表示整个系统
- 0层图:上下文图的下面一层,被认为是上下文图中单一过程的细节描述,是对单一过程的第一次分解
- N层图:0层图中的每一个过程都可以进行分解,以展示更多的细节~被分解的过程成为父过程,分解后产生的揭示更多细节的图成为子图(可以持续分解到无法再分解)
(分解过程中要保证平衡性,即不会出现需求偏差的方法,要求DFD子图的输入流、输出流必须和父过程的输入流、输出流保持一致)
3.实体关系图(E-R图)
能够弥补过程建模在数据说明方面的缺陷,描述数据的定义、结构和关系等特性的技术~
3个基本元素:实体、属性、关系
- 实体:需要在系统中收集和存储的显示世界的类别描述
- 关系:实体之间并不是孤立存在的,他们之间相互交互、相互影响
- 属性:可对实体进行描述的特征
标识符/键:可以唯一确定一个实例的一个或者多个属性~
三.面向对象分析
1.方法
认为系统是对象的集合,对象之间相互协作,共同完成系统的任务。(与结构化完全不同,面向对象以对象为基础,而结构化分析以功能和数据为基础)
主要优点:
- 自然性:对人类而言更加自然和直观
- 可复用性
UML(统一建模语言):多种技术的综合体,并非单一的技术——用例图、类图等
2.用例
需求获取和组织的主要手段~
定义:在系统和外部对象的交互中所执行的行为序列的描述——换句话说,用例是对相关场景的集合
一种理解:关于x+y=z的程序,x=1 y=2 z=3即为一个用例
3.用例图
(1)基本元素
- 用例:最重要的元素(椭圆)
- 参与者:发起或者参与一个用例的外部用户及其他软件系统等角色
- 关系
- 系统边界:一个系统所包含的系统成分与系统外界事物的分界线
(2)建立
步骤大致如下:
- 进行目标分析与确定解决方向:进行目标的分析,确定项目的目标,定义高层次解决方案的系统特性。
- 寻找参与者:根据上一步确定的目标系统与系统特性,发现系统功能相关的参与者
- 寻找用例:根据参与者寻找用例
- 细化用例:将用例的粒度调整为更加适宜的存在
用例粒度的判断标准——对应一个业务事件,由一个用户发起,并在一个连续时间段内完成,可以增加业务价值的任务~
4.用例描述
5.概念类图(领域模型)
(1)基本元素
- 对象:分析方法的基础,包含标识符、状态、行为3个方面的内容
- 类:对象分类思想的结果,是共享共同属性的对象的集合
- 链接:对象之间的相互协作的关系
- 关联:类之间的关系
(部分与整体之间的关系被称为聚合,如果整体还拥有对整体的管理职责,则这种聚合称为组合)
- 继承:某类拥有另一类的全部属性和服务~子类也可以认为是父类的特化
(2)建立概念类图
步骤如下:
- 对每个用例文本描述,建立局部概念类图
- 将所有用例产生的局部概念类图进行合并,建立软件系统的整体概念类图
- 识别关联
- 识别重要属性
6.交互图(顺序图)
描述对象协作的技术,描述特定上下文环境中一组对象的交互行为
(1)顺序图
(2)系统顺序图——常用于系统分析阶段
7.状态图
系统总是存在于一定状态之中,有限状态机理论是状态图的基础~
四.使用需求分析方法细化和明确需求
1.细化和明确需求内容
需要强调的是需求分析模型不是简单机械的对已有内容进行转述,而是要细化和明确具体的需求内容~
2.建立系统级需求
基于最后建立的需求分析模型,还可以顺利的将用户需求转换为系统级需求~
tips:理论部分非常枯燥乏味,重点在于掌握图表的绘制,敬请期待专题~