5.2.4 需求分析
在需求获取阶段获得的需求是杂乱的,是用户对新系统的期望和要求,这些要求有重复的地方,也有矛盾的地方,这样的要求是不能作为软件设计的基础的。一个好的需求应该具有无二义性、完整性、一致性、可测试性、确定性、可跟踪性、正确性、必要性等特性。因此,需要分析人员把杂乱无章的用户要求和期望转化为用户需求,这就是需求分析的工作。 需求分析将提炼、分析和审查已经获取到的需求,以确保所有的项目干系人都明白其含义,并找出其中的错误、遗漏或其他不足的地方。需求分析的关键在于对问题域的研究与理解。为了便于理解问题域,现代软件工程方法所推荐的做法是对问题域进行抽象,将其分解为若干个基本元素,然后对元素之间的关系进行建模。
1.结构化分析
结构化分析(Structured Analysis,SA)方法给出一组帮助系统分析人员产生功能规约的原理与技术,其建立模型的核心是数据字典。围绕这个核心,有3个层次的模型,分别是数据模型、功能模型和行为模型(也称为状态模型)。在实际工作中,一般使用实体关系图(E-R图)表示数据模型,用数据流图(Data Flow Diagram,DFD)表示功能模型,用状态转换图(State Transform Diagram, STD)表示行为模型。E-R图主要描述实体、属性,以及实体之间的关系;DFD从数据传递和加工的角度,利用图形符号通过逐层细分描述系统内各个部件的功能和数据在它们之间传递的情况,来说明系统所完成的功能;STD通过描述系统的状态和引起系统状态转换的事件,来表示系统的行为,指出作为特定事件的结果将执行哪些动作(例如处理数据等)。结构化分析通常包含以下几个步骤:·分析业务情况,做出反映当前物理模型的DFD;
- · 推导出等价的逻辑模型的DFD;
- · 设计新的逻辑系统,生成数据字典和基元描述;
- · 建立人机接口,提出可供选择的目标系统物理模型的DFD;
- · 确定各种方案的成本和风险等级,据此对各种方案进行分析;
- · 选择一种方案;
- · 建立完整的需求规约。 1)DFD需求建模方法 DFD需求建模方法也称为过程建模和功能建模方法。DFD建模方法的核心是数据流,从应用系统的数据流着手,以图形方式刻画和表示一个具体业务系统中的数据处理过程和数据流。DFD建模方法首先抽象出具体应用的主要业务流程,然后分析其输入,例如其初始的数据有哪些,这些数据从哪里来,将流向何处,又经过了什么加工,加工后又变成了什么数据,这些数据流最终将得到什么结果。通过对系统业务流程的层层追踪和分析,把要解决的问题清晰地展现及描述出来,为后续的设计、编程及实现系统的各项功能打下基础。DFD方法由以下4种基本元素(模型对象)组成:数据流、处理/加工、数据存储和外部项。
·数据流(DataFlow):用一个箭头描述数据的流向,箭头上标注的内容可以是信息说明或数据项。
·处理(Process):表示对数据进行的加工和转换,在图中用矩形框表示。指向处理的数据流为该处理的输入数据,离开处理的数据流为该处理的输出数据。
·数据存储:表示用数据库形式(或者文件形式)存储的数据,对其进行的存取分别以指向或离开数据存储的箭头表示。
·外部项:也称为数据源或者数据终点。描述系统数据的提供者或者数据的使用者,如教师、学生、采购员、某个组织或部门或其他系统,在图中用圆角框或者平行四边形框表示。 建立DFD图的目的是描述系统的功能需求。DFD方法利用应用问题域中数据及信息的提供者与使用者、信息的流向、处理和存储这4种元素描述系统需求,建立应用系统的功能模型。具体的建模过程及步骤如下:
- (1)明确目标,确定系统范围。首先要明确目标系统的功能需求,并将用户对目标系统的功能需求完整、准确、一致地描述出来,然后确定模型要描述的问题域。虽然在建模过程中这些内容是逐步细化的,但必须自始至终保持一致、清晰和准确。
- (2)建立顶层DFD图。顶层DFD图表达和描述了将要实现的系统的主要功能,同时也确定了整个模型的内外关系,表达了系统的边界及范围,也构成了进一步分解的基础。
- (3)构建第一层DFD分解图。根据应用系统的逻辑功能,把顶层DFD图中的处理分解成多个更细化的处理。
- (4)开发DFD层次结构图。对第一层DFD分解图中的每个处理框做进一步分解,在分解图中要列出所有的处理及其相关信息,并要注意分解图中的处理与信息包括父图中的全部内容。分解可采用以下原则:保持均匀的模型深度;按困难程度进行选择;如果一个处理难以确切命名,可以考虑对它重新分解。
- (5)检查确认DFD图。按照规则检查和确定DFD图,以确保构建的DFD模型是正确的、一致的,且满足要求。具体规则包括:父图中描述过的数据流必须要在相应的子图中出现,一个处理至少有一个输入流和一个输出流,一个存储必定有流入的数据流和流出的数据流,一个数据流至少有一端是处理端,模型图中表达和描述的信息是全面的、完整的、正确的和一致的。 经过以上过程与步骤后,顶层图被逐层细化,同时也把面向问题的术语逐渐转化为面向现实的解法,并得到最终的DFD层次结构图。层次结构图中的上一层是下一层的抽象,下一层是上一层的求精和细化,而最后一层中的每个处理都是面向一个具体的描述,即一个处理模块仅描述和解决一个问题。 2)数据字典的应用 数据字典(Data Dictionary)是一种用户可以访问的记录数据库和应用程序元数据的目录。数据字典是指对数据的数据项、数据结构、数据流、数据存储、处理逻辑等进行定义和描述,其目的是对数据流图中的各个元素做出详细的说明。简而言之,数据字典是描述数据的信息集合,是对系统中使用的所有数据元素定义的集合。 数据字典最重要的作用是作为分析阶段的工具。任何字典最重要的用途都是供人查询,在结构化分析中,数据字典的作用是给数据流图上的每个元素加以定义和说明。换句话说,数据流图上所有元素的定义和解释的文字集合就是数据字典。数据字典中建立的严密一致的定义,有助于改进分析员和用户的通信与交互。数据字典主要包括数据项、数据结构、数据流、数据存储、处理过程等几个部分。
·数据项:数据流图中数据块的数据结构中的数据项说明。数据项是不可再分的数据单位。对数据项的描述通常包括数据项名、数据项含义说明、别名、数据类型、长度、取值范围、取值含义及与其他数据项的逻辑关系等。其中,"取值范围""与其他数据项的逻辑关系"定义了数据的完整性约束条件,是设计数据检验功能的依据。若干个数据项可以组成一个数据结构。
·数据结构:数据流图中数据块的数据结构说明。数据结构反映了数据之间的组合关系。一个数据结构可以由若干个数据项组成,也可以由若干个数据结构组成,或由若干个数据项和数据结构混合组成。对数据结构的描述通常包括数据结构名、含义说明和组成(数据项或数据结构)等。
·数据流:数据流图中流线的说明。数据流是数据结构在系统内传输的路径。对数据流的描述通常包括数据流名、说明、数据流来源、数据流去向、组成(数据结构)、平均流量、高峰期流量等。其中,"数据流来源"说明该数据流来自哪个过程,即数据的来源;"数据流去向"说明该数据流将到哪个过程去,即数据的去向;"平均流量"是指在单位时间(每天、每周、每月等)里的传输次数;"高峰期流量"则是指在高峰时期的数据流量。
·数据存储:数据流图中数据块的存储特性说明。数据存储是数据结构停留或保存的地方,也是数据流的来源和去向之一。对数据存储的描述通常包括数据存储名、说明、编号、流入的数据流、流出的数据流、组成(数据结构)、数据量、存取方式等。其中,"数据量"是指每次存取多少数据,每天(或每小时、每周等)存取几次等信息;"存取方式"指出是批处理还是联机处理,是检索还是更新,是顺序检索还是随机检索等;"流入的数据流"要指出其来源;"流出的数据流"要指出其去向。
·处理过程:数据流图中功能块的说明。数据字典中只需要描述处理过程的说明性信息,通常包括处理过程名、说明、输入(数据流)、输出(数据流)、处理(简要说明)等。其中,"简要说明"中主要说明该处理过程的功能及处理要求。功能是指该处理过程用来做什么(并不是怎样做);处理要求包括处理频度要求(如单位时间里处理多少事务、多少数据量)和响应时间要求等,这些处理要求是后续物理设计的输入及性能评价的标准。
2.面向对象分析
面向对象的分析(Object-Oriented Analysis,OOA)方法能正确认识其中的事物及它们之间的关系,找出描述问题域和系统功能所需的类和对象,定义它们的属性和职责,以及它们之间所形成的各种联系。最终产生一个符合用户需求,并能直接反映问题域和系统功能的OOA模型及其详细说明。 面向对象分析与结构化分析有较大的区别。OOA所强调的是在系统调查资料的基础上,针对OO方法所需要的素材进行的归类分析和整理,而不是对管理业务现状和方法的分析。OOA 模型由5个层次(主题层、对象类层、结构层、属性层和服务层)和5个活动(标识对象类、标识结构、定义主题、定义属性和定义服务)组成。在这种方法中定义了两种对象类之间的结构,分别是分类结构和组装结构。分类结构就是所谓的一般与特殊的关系;组装结构则反映了对象之间的整体与部分的关系。 1)OOA的基本原则 OOA的基本原则主要包括抽象、封装、继承、分类、聚合、关联、消息通信、粒度控制和行为分析。
·抽象:是从许多事物中舍弃个别的、非本质的特征,抽取共同的、本质性的特征。抽象是形成概念的必要手段。抽象是面向对象方法中使用最为广泛的原则。抽象原则包括过程抽象和数据抽象两个方面。过程抽象是指任何一个完成确定功能的操作序列,其使用者都可以把它看作一个单一的实体,尽管实际上它可能是由一系列更低级的操作完成的。数据抽象是根据施加于数据之上的操作来定义数据类型,并限定数据的值只能由这些操作来修改和观察。数据抽象是OOA的核心原则,它强调把数据(属性)和操作(服务)结合为一个不可分的系统单位(对象),对象的外部只需要知道它做什么,而不必知道它如何做。
·封装:把对象的属性和服务结合为一个不可分的系统单位,并尽可能隐蔽对象的内部细节。这个概念也经常用于从外部隐藏程序单元的内部表示。
·继承:特殊类的对象拥有其对应的一般类的全部属性与服务,称作特殊类对一般类的继承。在O[OA]{.underline}中运用继承原则,在特殊类中不再重复地定义一般类中已定义的内容,但是在语义上,特殊类却自动地、隐含地拥有一般类(以及所有更上层的一般类)中定义的全部属性和服务。继承原则的好处是能够使系统模型比较简练、清晰。
·分类:把具有相同属性和服务的对象划分为一类,用类作为这些对象的抽象描述。分类原则实际上是抽象原则运用于对象描述时的一种表现形式。
·聚合:又称组装,其原则是把一个复杂的事物看成若干比较简单的事物的组装体,从而简化对复杂事物的描述。
·关联:关联是人类思考问题时经常运用的思想方法,即通过一个事物联想到另外的事物。能使人发生联想的原因是事物之间确实存在着某些联系。
·消息通信:这一原则要求对象之间只能通过消息进行通信,而不允许在对象之外直接地存取对象内部的属性。通过消息进行通信是由于封装原则而引起的。在OOA中要求用消息连接表示出对象之间的动态联系。
·粒度控制:一般来讲,人在面对一个复杂的问题域时,不可能在同一时刻既能纵观全局,又能洞察秋毫。因此需要控制自己的视野,即考虑全局时,注意其大的组成部分,暂时不考虑具体的细节,考虑某部分的细节时则暂时撇开其余的部分。这就是粒度控制原则。
·行为分析:现实世界中事物的行为是复杂的,由大量的事物所构成的问题域中,各种行为往往相互依赖、相互交织。 2)OOA的基本步骤 OOA大致遵循如下5个基本步骤:
·确定对象和类:这里所说的对象是对数据及其处理方式的抽象,它反映了系统保存和处理现实世界中某些事物的信息的能力。类是多个对象的共同属性和方法集合的描述,它包括如何在一个类中建立一个新对象的描述。
·确定结构:结构是指问题域的复杂性和连接关系。类成员结构反映了泛化-特化关系,整体-部分结构反映整体和局部之间的关系。
- · 确定主题:主题是指事物的总体概貌和总体分析模型。
·确定属性:属性就是数据元素,可用来描述对象或分类结构的实例,可在图中给出,并在对象的存储中指定。
·确定方法:方法是在收到消息后必须进行的一些处理方法,即方法要在图中定义,并在对象的存储中指定。对于每个对象和结构来说,那些用来增加、修改、删除和选择的方法本身都是隐含的(虽然它们是要在对象的存储中定义的,但并不在图上给出),而有些则是显示的。