4.1 需求分析
4.1.1 需求分析的任务和原则:
1.任务:
(1)理解需求:
为了开发出真正用户需求的软件产品,明确地了解用户需求是关
键。
在需求中会存在大量的错误,这些错误若未及时发现和更正,会导致软件开发
成本增加,软件质量降低。
(2)确定系统的运行环境要求:
系统运行时的硬件环境要求包括对计算机的中央处理器(CPU)、内存、存储
器、输入输出方式、通信接口和外围设备等的要求;软件环境要求包括操作系统、
数据库管理系统和编程语言等的要求。
(3)确定系统的功能性需求和非功能性需求:
需求可以分为两类:
①功能性需求:是软件系统的最基本的需求表述,包括对系统应该提供的
服务、如何对输入做出反应,以及系统在待定条件下的行为描述。
②非功能性需求:包括对系统提出的性能需求(可靠性和可用性需求)、
系统安全以及系统对开发过程、时间、资源等方面的约束和标准等。
(4)进行有效的需求分析:
一般情况下,用户并不熟悉计算机的相关知识,而软件开发人员对相关的业务
领域也不甚了解,用户与开发人员之间对同一问题理解的差异和习惯用语的不同往
往会为需求分析带来很大的困难。
(5)确定需求分析的两个阶段:
首先,需要确定需求分析的建模阶段,即在充分了解需求的基础上,建立起系
统的分析模型。
其次,需要明确需求分析的描述阶段,即把需求文档化,用软件需求规格说明
书的方式把需求表达出来。
(6)撰写软件需求规格说明书:
软件需求规格说明书是需求分析阶段的输出,它全面、清晰地描述了用户需
求,因此是开发人员进行后续软件设计的重要依据。
2.原则
首先,需求分析是一个过程,它应该贯穿于系统的整个生命周期中,而不是仅仅属
于软件生命周期早期的一项工作。
其次,需求分析的过程应该是一个迭代的过程。
4.1.2 需求分析的步骤:
为了准确获取需求,需求分析必须遵循一系列的步骤。
1.需求获取:
需求获取就是收集并明确用户需求的过程。系统开发人员通过调查研究,要理解当
前系统的工作模型、用户对新系统的设想与要求。
需求获取的方法有多种:
(1)问卷调查:
是采用让用户填写问卷的形式来了解用户对系统的看法。
(2)访谈:
是指开发人员与特定的用户代表进行座谈的需求获取方法。
(3)实地操作:
如果开发人员能够以用户的身份参与现有系统的使用过程中,那么在亲身实践
的基础上,观察用户的工作过程、发现问题并及时提问,开发人员就能直接地体会
到现有系统的弊端以及新系统应该解决的问题。
(4)建立原型系统:
为了进一步挖掘需求,了解用户对目标系统的想法,开发人员有时还采用建立
原型系统的方法。在原型系统中,用户更容易表达自己的需求。所谓原型,就是目
标系统的一个可操作的模型。
针对上述所获取的需求进行归纳并形成软件需求:
软件需求包括:功能需求、性能需求、系统运行环境需求、用户 界面需求、
软件成本消耗与开发进度需求、资源使用需求、可靠性需求、安全保密需求等。
2.分析建模:
获取需求后,下一步就应该对开发的系统建立分析模型。模型就是为了理解事物
而对事物做出的一种抽象,通常由一组符号和组织这些符号的规则组成。
常用的建模方法:
数据流图、实体-联系图、状态转换图、控制流图、用例图、类图、对象图等
3.需求描述:
就是指编制需求分析阶段的文档。对于复杂的软件系统,需求分析阶段会产生3个
文档:系统定义文档(用户需求报告)、系统需求文档(系统需求规格说明书)、软件
需求文档(软件需求规格说明书)。
4.需求验证与评审:
需求分析的第四步是验证与评审以上需求分析的成果。需求分析阶段的工作成果是
后续软件开发的重要基础。
需求评审就是通过将需求规约文档发布给利益相关者进行检查,发现需求规约中是
否存在缺陷(如错误、不完整性、二义性等)的过程。
4.1.3需求管理:
为了更好地进行需求分析并记录需求结果,需要进行需求管理。需求管理是一种查找、
记录、组织和跟踪系统需求变更的系统化方法
可用于:
获取、组织和记录系统需求
是客户和项目团队在系统变更需求上达成并保持一致
有效需求管理的关键在于维护需求的明确阐述、每种需求类型所适用的属性,以及
与其他需求和项目工件之间的可追踪性。
软件需求的变更往往会贯穿软件的整个生命周期中。
4.1.4 需求分析的常用方法:
需求分析的常用方法有多种,下面只简单介绍功能分解方法、结构化分析方法、信息建
模方法、面向对象的分析方法和原型设计。
(1)功能分解方法:
功能分解方法将一个系统看成由若干功能模块组成,每个功能又可分解为若干个子
功能及功能接口,子功能再继续分解,即功能、子功能和功能接口为功能分解方法的3个
要素。
采用的是自顶向下、逐步求精的理念。
(2)结构化分析方法:
是一种从问题空间到某种表示的映射方式,其逻辑模型由数据流图和数据词典构成
并表示。它是一种面向数据流的需求分析方法,主要适用于数据处理方面。
(3)信息建模方法:
模型是用某种媒介来表现相同媒介或其他媒介里的一些事物的一种形式。建模(建
立模型的过程)就是要抓住事物的最重要方面而简化或忽略其他方面。简而言之,模型
就是对现实的简化。
(4)面向对象的分析方法:
面向的分析方法的关键是识别问题域内的对象,分析它们之间的关系,并建立3类
模型,分别是描述系统静态结构的对象模型、描述系统控制结构的动态模型,以及描述
系统计算结构的功能模型。其中,对象模型是最基本、最核心、最重要的。
(5)原型设计:
是指在项目开发的前期,系统分析人员根据对客户需求的理解和客户希望实现的结
果,快速地给出一个翔实的产品雏形,然后与客户反复协商修改。
4.2 结构化分析方法
一种面向数据流的需求分析方法被称为结构化分析(Struct Analysis SA)方法,20世纪70年代由约当、康斯坦丁、德马科等人提出不断发展,最终得到广泛的应用。它基于“分解”和“抽象”的基本思想,逐步建立目标系统的逻辑模型,进而描绘出满足用户要求的软件系统。
4.3 结构化分析建模
结构化分析方法实质上是一种创建模型的方法。
围绕着这个核心由3种图:
数据流图(Dataflow Diagram,DFD)指出当数据在软件系统中移动时怎样被变换,以
及描绘变换数据流的功能和子功能,用与功能建模。
实体-联系(Entity-Relationship,E-R)图描绘数据对象之间的关系,用于数据建模
状态转换图指明了作为外部事件结果的系统行为,用于行为建模。
每种建模方法对应其各自的表达方式和规约,来描述系统某一方面的需求属性。它们基于同一份数据描述,即数据字典。
结构化分析建模必须遵守下述准则:
必须定义软件应完成的功能,这条准则要求建立功能模型
必须理解和表示问题的信息域,这条准则要求建立数据模型
必须表示作为外部事件结果的软件行为,这条准则要求建立行为模型。
必须对描述功能、信息和行为的模型进行分解,用层次的方式展示细节。
分析过程应该从要素信息移向实现细节。
4.3.1 功能建模:
思想就是抽象模型的概念,按照软件内部数据传递和变换的关系,自顶向下、逐层分
解,直到找到满足功能要求的可实现的软件为止。功能模型可用数据流图来描述。
1.数据流图的表示符号:
(1)外部实体:表示数据的源点或终点,它是系统之外的实体,可以是人、物或
者其他系统。
(2)数据流:表示数据流的流动方向。
(3)数据变换:表示对数据进行加工或处理。
(4)数据存储:表示输入或输出文件。
2.环境图
环境图也称为顶层数据流图(或0层数据流图),它仅包括一个数据处理过程。
可以说,数据流图的导出是一个逐步求精的过程,其中要遵守一些原则:
(1)第0层的数据流图应将软件描述为一个泡泡
(2)主要的输入和输出应该被仔细地标记
(3)通过把在一层表示的候选处理过程、数据对象和数据存储分离,开始逐
步求精的过程。
(4)应使用有意义的名称标记所有的箭头和泡泡
(5)当从一个层转移到另一个层时要保持信息流的连续性
(6)一次精化一个泡泡
绘制数据流图的过程中,要注意以下几点:
(1)数据的处理不一定是一个程序或一个模块,也可以是一个连贯的处理过
程
(2)数据存储是指输入或输出文件,但它不仅可以是文件,还可以是数据项
或用来组织数据的中间数据。
(3)数据流和数据存储是不同状态的数据。
(4)当目标系统的规模较大时,为了描述得清晰和易于理解,通常采用自顶
向下、逐层分解的方法,画出分层的数据流图。
(5)数据流图分层细化时必须保持信息的连续性,即细化前后对应功能的输
入和输出数据必须相同。
4.3.2 数据建模:
数据建模的思想是在较高的抽象层次(概念层)上对数据库结构进行建模。数据模型用
实体-联系图来描述。
实体-联系图可以明确描述待开发系统的概念结构模型。
在建模过程中,E-R图以实体、关系和属性3个基本概念概括数据的基本结构。
4.3.3 行为建模:
状态转换图是一种描述系统对内部或外部事件响应的行为模型。它用于描述系统状态和
事件(事件会引发系统在状态间的转换),而不是描述系统中数据的流动。这种模型尤其适
合用来描述实时系统,因为这类系统多是由外部环境的激励而驱动的。
4.3.4 数据字典:
数据字典以一种系统化的方式定义在分析模型中出现的数据对象及控制信息的特征,并
给出它们的准确定义,包括数据流、数据存储、数据项、数据加工,以及数据源点、数据汇
点等。
4.3.5 加工规格说明:
在对数据流图的分解中,位于底层数据流图的数据处理,也称为基本加工或原子加工,
对每一个基本加工都需要进一步说明,这称为加工规格说明,也称为处理规格说明。
加工规格说明一般用结构化语言、判定表和判定树来表述。
1.结构化语言:
又称为设计程序语言(program design language,PDL),也称为伪代码,在某些
情况下,在加工规格说明中会用到。
2.判定表:
在某些数据处理中,某个数据处理(即加工)的执行可能需要依赖多个逻辑条件的
取值,此时可用判定表。
一张判定表由4部分组成:
左上部列出所有条件
左下部是所有可能做的动作
右上部是表示各种条件组合的一个矩阵
右下部是与每种条件组合相对应的动作
3.判定树:
判定表虽然能清晰地表示复杂的条件组合与应做的动作之间的对应关系,但其含义
却不是一眼就能看出来的,初次接触这种工具的人理解它需要有一个简短的学习过程。
此外,当数据元素的值多于两个时,判定表的简洁程度也将下降。
判定树是判定表的变种,也能清晰地表示复杂的条件组合与应做的动作之间的对应
关系。判定树也是用来表述加工规格说明的一种工具。
优点:
它的形式简单到不需要任何说明,一眼就可以看出其含义,因此易于掌握和使
用。
4.4 结构化分析的图形工具
4.4.1 层次方框图:
由树状结构的一系列多层次的矩形框组成,用来描述数据的层次结构。树状结构的顶层
是一个单独的矩形框,它表示数据结构的整体。
4.4.2 Warnier图:
是表示数据层次结构的另一种图形工具,它与层次方框图相似,也用树状结构来描绘数
据结构。
4.4.3 IPO图:
是输入-处理-输出图的简称,它是美国IBM公司提出的一种图形工具,能够方便地描绘输
入数据、处理数据和输出数据的关系。
IPO图使用的基本符号少而简单,因此很容易掌握使用这种工具的方法。