3.1 需求分析的任务
3.1.1 需求分析的概念
开发人员要准确的理解用户的要求,进行细致的调查分析,将用户非形式的需求陈述转化为完整的需求定义,再由需求定义装换到相应的形式功能规约(需求规格说明)的过程
需求分析的难点:
(1) 问题的复杂性
(2) 交流障碍
(3) 不完备性和不一致性
(4) 需求易变性
软件需求分析与说明的方法适用的基本原则:
(1) 必须能够表达和理解问题的数据域和功能域
(2) 可以把一个复杂问题按功能进行分解并可逐层细化
(3) 建模
结构化分析方法和面向对象分析方法都遵循以上原则
3.1.2 需求分析的基本任务
要准确的定义新系统的目标,为了满足用户的需要,回答系统必须“做什么”的问题。可行性研究和软件计划阶段对这个问题的回答是概括的、粗略的
本阶段主要进行以下几个方面的工作:
1. 问题识别
双方确定对问题的综合需求,这些需求包括:
(1) 功能需求:所开发的系统必须具备什么样的功能,这是最重要的
(2) 性能需求:待开发的软件的技术性能指标。存储容量,运行时间
(3) 环境需求:软件运行时所需要的软、硬件的要求
(4) 用户界面需求:人机交互方式、输入输出数据格式等等
另外还有可靠性、安全性、保密性、可移植性、可维护性等方面的需求
2. 分析与综合,导出软件的逻辑模型
对获取的需求,进行分析检查,逐步细化软件的功能,划分成各个子功能,以确定系统的构成及主要成分,建立新系统的逻辑模型
3. 编写文档
(1) 编写“需求规格说明书”
(2) 编写初步用户使用手册
(3) 编写确认测试计划
(4) 修改完善软件开发计划
3.1.3 需求规格说明书主要内容
3.2 结构化分析方法
简称SA,是面向数据流进行需求分析的方法
3.2.1 自顶向下逐层分解的分析策略
对一个复杂问题分析人员不可能一开始就考虑到问题的所有方面及全部细节,对此采取的策略是分解,把一个复杂问题划分成若干小问题,然后分别解决,将问题的复杂性降低到人可以掌握的程度
分解可分层进行,先考虑问题最本质的方面,忽略细节形成问题的高层概念,然后逐层添加细节。顶层抽象的概括整个系统,底层具体画出系统的每个细节,中间层是逐步过渡
这种层次分解使分析人员分析问题时不至于一下子陷入细节,而是逐步的去了解更多细节
依照这个策略,对于任何复杂的系统,分析工作都可以有计划、有步骤、有条不紊的进行
3.2.2 描述工具
SA方法的描述工具是:
(1) 数据流图
(2) 数据字典
(3) 描述加工逻辑的结构化语言、判定表、判定树
数据流图描述系统的分解,及系统由哪几部分组成,各部分之间的联系等等
数据字典定义了数据流图中每一个图形元素
结构化语言、判定便或判定树详细描述数据流图中不能被再分解的每一个加工
3.2.3 SA分析步骤
(1) 了解当前系统的工作流程,获得当前系统的物理模型
(2) 抽象出当前系统的逻辑模型
(3) 建立目标系统的逻辑模型
(4) 做进一步补充和优化
3.3 数据流图(DFD)
简称DFD,是SA方法中表示系统逻辑模型的一种工具,只反应系统必须完成的逻辑功能,所以是一种功能模型
3.3.1 基本图形符号
数据流图有四种基本图形符号:
(1) 数据流。是数据在系统内传播的路径,由一组成分固定的数据项组成,必须有流向,除了与数据存储之间的数据流不用命名,其他用名词或名词短语命名
(2) 加工(又称为数据处理)。对数据流进行某些操作或变换。加工用动词短语命名
(3) 数据存储(又称为文件)。指暂时保存的数据,它可以是数据库文件或任何形式的数据组织。流向数据存储的数据流可以理解为写入文件或查询文件,流出的数据可以理解为从文件读取数据或得到查询结果
(4) 数据源点或终点:软件系统外部环境中的实体(包括人员、组织或其他软件系统),统称为外部实体
在一张图上可重复画同名的源/终点,在方框的右下角加斜线则表示是一个实体。有时数据存储也需重复标识
3.3.2 画数据流图的步骤
按问题的层次结构进行逐步分解,并以一套分层的数据流图反应这种结构关系
(1) 首先画系统的输入输出,即先画顶层数据流图。
顶层流图只包含一个加工,用以表示被开发的系统,然后考虑系统的输入输出数据。顶层图的作用在于表明被开发的系统范围以及它与周围化境的数据交换关系
(2) 画系统内部,即画下层数据流图。一般将层号从0开始编号,采用自顶向下,由外向内的原则。
一般沿着输入流的方向,凡数据流的组成或值发生变化的地方则设置一个加工,这样一直进行到输出数据流。知道每一个加工足够简单,不能再分解为止,不能再分解的加工称为基本加工
(3) 注意事项
a) 命名
b) 画数据流而不是控制流
图中不反应加工的执行顺序
c) 一般不画物质流
d) 每个加工至少有一个输入数据流和一个输出数据流,反映出此加工数据的来源与加工的结果
e) 编号
子图的编号就是父图中相应加工的编号,加工的编号由子图号,小数点和局部号组成
f) 父图与子图的平衡
子图的输入输出数据流同父图相应加工的输入输出数据流必须一致
保证了数据流图的一致性
g) 局部数据存储
h) 提高数据流图的易理解性
注意合理分解
为了使数据流图便于在计算机上输入与输出,以下给出了描述数据流图的另一套基本符号
3.3.3 实例——售票管理系统
3.4 数据字典(DD)
简称DD,用来定义数据流图中各个成分的具体含义,它以一种准确的、无二义性的说明方式为系统的分析、设计及维护提供了有关元素的一致的定义和详细的描述
它和数据流图共同构成了系统的逻辑模型,是需求规格说明书的主要组成部分
3.4.1 数据字典的内容及格式
数据字典是为分析人员查找数据流图中有关名字的详细定义而服务的,因此也像普通字典一样,要把所有条目按一定的次序排列起来,以便查阅
数据字典有以下四类条目:
数据流
数据项
数据存数
基本加工
数据项是组成数据流和数据存储的最小元素。源点终点一般不在字典中说明
1. 数据流条目
数据流条目给出了DFD中数据流的定义,通常列出数据流的各组成数据项
在定义数据流或数据存储组成时,使用下表给出的符号:
2. 数据存储条目
数据存储条目是对数据存储的定义,主要内容举例如下:
3. 数据项条目
数据项条目是不可再分解的数据单位,其定义格式及举例如下:
4. 加工条目
加工条目是用来说明DFD中基本加工的处理逻辑的,由于上层的加工是由下层的基本加工分解而来,只要有了基本加工的说明,就可理解其他加工
加工条目的内容及举例如下:
数据字典中的加工逻辑主要描述该加工“做什么”,即实现加工的策略,而不是实现加工的细节,它描述如何把输入数据流变换为输出数据流的加工规则。加工逻辑有几种常用的描述方法,结构化语言、判定表、判定树
3.4.2 数据字典的实现
建立数据字典一般有两种形式:
1. 手工建立:数据字典的内容用卡片形式存放
(1) 按四类条目规范的格式印制卡片
(2) 在卡片上分别填写各类条目的内容
(3) 先按图号顺序排列,同一图号的所有条目按数据流、数据项、数据存储和数据加工的顺序排列
(4) 同一图号中的同一类条目(如数据流卡片)可按名字的字典顺序存放,加工一般按编号顺序存放
(5) 统一成分在父图和子图都出现时,则只在父图上定义
(6) 建立索引目录
2. 利用计算机辅助建立并维护
(1) 编制一个“字典生成与管理程序”,可以按规定的格式输入各类条目,能对字典条目增、删、改,能打印查询报告和清单,能进行完整性一致性检查。美国密执安大学研究的PSL/PSA就是这样一个系统
(2) 利用已有的数据库开发工具,针对数据字典建立一个数据库文件,可将数据流、数据项、数据存储和加工分别以矩阵表的形式来描述各个表项的内容,如数据流的矩阵表为:
有的DBMS本身包含一个数据字典子系统,建库时能自动生成数据字典
计算机辅助开发数据字典比手工建立数据字典有更多的优点,能保证数据的一致性和完整性,使用也方便,但增加了技术难度与积极开销
3.5 加工逻辑的描述
加工逻辑也称为“小说明”,描述加工逻辑一般用一下三种工具:
结构化语言
判定表
判定树
3.5.1 结构化语言
介于自然语言和形式语言之间的一种半形式语言
结构可分为外层和内层两层:
1. 外层:用来描述控制结构,采用顺序、选择、重复三种基本结构
(1) 顺序结构:是一组祈使语句、选择语句、重复语句的顺序排列
(2) 选择结构:一般用IF——THEN——ELSE——ENDIF、
CASE——OF——ENDCASE等关键词
(3) 重复结构:一般用DO——WHILE——ENDDO、REPEAT——UNTIL等关键字
2. 内层:一般是采用祈使语句的自然语言短语,使用数据字典中的名词和有限的自定义词,其动词含义要具体,尽量不用形容词和副词来修饰。还可使用一些简单的算术运算和逻辑运算符号
3.5.2 判定表
在有些情况下,数据流图中的某个加工的一组动作依赖于多个逻辑条件的取值。这时用判定表就能够清楚地表示复杂的条件组合与应作的动作之间的对应关系
判定表由四部分组成,用双线分隔开四个区域:
构造一张判定表,可采取以下步骤:
1. 提取问题中的条件
2. 标出条件的取值
3. 计算所有条件的组合数N
4. 提取可能采取的动作或措施
5. 制作判定表
6. 完善判定表
初始的判定表可能不完善,表现在以下几个方面:
(1) 缺少判定列中应采取的动作
(2) 有冗余的判定列:两个或多个规则中,具有相同的动作,而与它所对应的各个条件组合中有取值无关的条件
判定表能够把在什么条件下系统应做什么动作准确无误的表示出来,但不能描述循环的处理特性,循环处理还需结构化语言
例子:
3.5.3 判定树
判定树是判定表的变形,一般情况下它比判定表更直观,更易于理解和使用
这三种描述加工逻辑的工具各有优缺点
对于顺序执行和循环执行的动作,用结构化语言描述
对于存在多个条件复杂组合的判断问题,用判定表和判定树
判定树较判定表直观易读,判定表进行逻辑验证较严格,能把所有的可能性全部都考虑到,可将两种工具结合起来,先用判定表做底稿,在此基础上产生判定树
经过需求分析,开发人员已经基本上理解了用户的要求,确定了目标系统的功能,定义了系统的数据,描述了处理这些数据的基本策略。将这些共同的理解进行整理,最后形成文档——需求说明书
3.6 IDEF方法
IDEF方法是美国空军在1981年针对集成化计算机辅助制造工程项目中用于进行复杂系统分析和设计的方法。
IDEF方法分为三部分:
IDEF0:用来描述系统的功能活动及其联系,建立系统的功能模型
IDEF1:用来描述系统的信息及其联系,建立系统的信息模型
IDEF2:用来进行系统模拟,建立系统的动态模型
3.6.1 IDEF0的图形表示
该方法中,将系统功能称为活动,将表示系统功能的图形称为活动图形
一个活动可以没有输入,但一定要有控制
3.6.2 建立功能模型的基本方法
1. 确定建模的范围、观点及目的
2. 建立系统的内外关系图——A-0图
3. 建立顶层图——A0图
4. 建立低层次的图形
分解时,应遵循两条原则:
首先,保持在同一水平上分解(宽度优先),如A1,A2,A3等图,而不是A1,A11,A111(深度优先),可避免较高层次的变化影响较低层次,造成可能的重复工作,同时可较早的查出错误及遗漏
其次,对于同一水平层次上的各个方框,选择难度最大的部分往下分解,其后分解较容易的部分
在IDEF0图中几个活动之间无明确的顺序和时间,要注意分解时箭头表示的上下层之间的平衡关系。
3.6.3 IDEF0方法的特点
1. 采用方框和箭头等简单的图形符号描述系统的活动和数据流,描述活动所受到的约束条件及实现机制
IDEF0图宜作为正式文档
2. 采用严格的自顶向下、逐层分解的方式建立系统功能模型
因此,IDEF0是建立系统功能模型的有效方法。在开发CIMS——计算机集成制造系统的管理信息系统(MIS)过程中,大都采用此方法建立软件需求分析的功能模型
3.7 结构化分析方法小结
结构化分析方法是软件需求分析中公认的、有成效的、技术成熟、使用广泛的一种方法,它较适合于开发数据处理型软件的需求分析
SA方法的弱点主要表现在:
(1) 不适合描述实时控制系统
为了解决实时软件的需求分析,提出了控制流图(CFD)的定义,也有用描述系统动态行为的状态转换图(STD)代替CFD
(2) SA方法使用DFD在分析与描述“数据要求”方面是有局限的
数据库技术使许多大型数据处理系统中的数据都组织成数据库的形式,DFD应与数据库技术中的实体联系图(ER图)结合起来
(3) DFD不适合描述人机界面系统的需求
对于一些频繁的人机交互的软件系统,SA方法往往对这一部分用自然语言做补充,对这类系统可采用其它的分析方法(如面向对象分析方法)
(4) 不便于实现自动化
SA方法可与形式化方法结合起来,形式化是软件自动化发展的基础
形式化方法典型的有基于模型的Z语言及VDM开发方法
(5) 需求分析的质量及效率不够高
可以借助需求分析工具提高