1、计算机科学与工程学院,软件工程(Software Engineer),第三章 需求工程,需求工程是当前软件工程中的关键问题,从客观意义上说,需求工程面对的问题几乎是没有范围的。由于应用领域的广泛性,它的实施无疑与各个应用行业的特征密切相关。其客观上的难度还体现在非功能性需求及其与功能性需求的错综复杂的联系上,当前对非功能性需求分析建模技术的缺乏大大增加了需求工程的复杂性。从主观意义上说,需求工程需要方方面面人员的参与(如领域专家、领域用户、系统投资人、系统分析员、需求分析员等等),各方面人员有不同的着眼点和不同的知识背景,沟通上的困难给需求工程的实施增加了人为的难度。,计算机科学与工程学院,软
2、件工程(Software Engineer),3.1 软件需求,软件需求的定义 需求的层次 需求错误的原因,计算机科学与工程学院,软件工程(Software Engineer),3.1.1软件需求的定义,IEEE软件工程标准词汇表(1997年)将需求定义为: (1)用户解决问题或达到目标所需的条件或能力; (2)系统或系统部件要满足合同、标准、规范或其它正式规定文档所需具有的条件或能力。 (3)一种反映(1)或(2)所描述的条件或能力的文档说明。,计算机科学与工程学院,软件工程(Software Engineer),3.1.1软件需求的定义,另外,以下列出其他几种关于“需求”的定义: 需求是用
3、户所需要的并能触发一个程序或系统开发工作的说明; 需求是从系统外部能发现系统所具有的满足于用户的特点、功能及属性等; 需求是指明必须实现什么的规格说明。它描述了系统的行为、特性或属性,是在开发过程中对系统的约束。,计算机科学与工程学院,软件工程(Software Engineer),3.1.2需求的层次,计算机科学与工程学院,软件工程(Software Engineer),3.1.2需求的层次,业务需求(business requirement)反映了组织机构或客户对系统或产品高层次的目标要求,它们在项目视图与范围文档中予以说明。 用户需求(user requirement)描述了用户使用产品
4、必须要完成的任务,可以在用例模型或方案脚本中予以说明。 功能需求(functional requirement)定义了开发人员必须实现的软件功能,使得用户能完成他们的任务,从而满足了业务需求。 非功能需求(non-functional requirement)是从各个角度对系统的约束和限制,反映了应用对软件系统质量和特性的额外要求。非功能需求包括过程需求、产品需求和外部需求三类,其中过程需求有交付、实现方法和标准等需求,产品需求包括性能、可用性、实用性、可靠性、可移植性、安全保密性、容错性等方面的需求,外部需求有法规、成本、操作性等需求。,计算机科学与工程学院,软件工程(Software En
5、gineer),3.1.3需求错误的原因,1.缺乏足够的用户参与 2.用户需求不断增加 3.需求模棱两可 4.添加不必要的特性 5.规格说明过于简单 6.忽略了用户分类,计算机科学与工程学院,软件工程(Software Engineer),3.2 需求工程,需求工程是指应用已证实有效的原理和方法,系统地描述出待开发系统及其行为特征和相关约束。通常,需求工程由一些过程组成,可分为需求开发和需求管理两部分,而需求开发又可进一步分为问题获取、分析、编写规格说明和验证四个阶段,如下图所示:,计算机科学与工程学院,软件工程(Software Engineer),3.2.1 需求工程的内容,1.需求开发的
6、主要活动 确定产品所期望的用户类; 获取每个用户类的需求; 了解实际用户任务和目标以及这些任务所支持的业务需求; 分析源于用户的信息以区别用户任务需求、功能需求、业务规则、质量属性、建议解决方法和附加信息; 将系统级的需求分为几个子系统,并将需求中的一部分分配给软件组件; 了解相关质量属性的重要性; 商讨实施优先级的划分; 将所收集的用户需求编写成规格说明和模型; 评审需求规格说明,确保对用户需求达到共同的理解与认识,并在整个开发小组接受说明之前将问题都弄清楚。,计算机科学与工程学院,软件工程(Software Engineer),3.2.1 需求工程的内容,2 需求管理的主要活动 定义需求基
7、线;评审提出的需求变更、评估每项变更的可能影响从而决定是否实施它;以一种可控制的方式将需求变更融入到项目中;使当前的项目计划与需求一致;估计变更需求所产生影响并在此基础上协商新的承诺;让每项需求都能与其对应的设计、源代码和测试用例联系起来以实现跟踪;在整个项目过程中跟踪需求状态及其变更情况。,计算机科学与工程学院,软件工程(Software Engineer),3.2.2 需求获取,1 工作内容 聆听用户的需求 分析和整理所获取的信息 文档化的描述,计算机科学与工程学院,软件工程(Software Engineer),3.2.2 需求获取,2 基于用例的方法 确定角色 确定用例 描述用例,计算
8、机科学与工程学院,软件工程(Software Engineer),3.2.3 需求分析,需求分析的主要活动包括: 绘制系统关联图 创建用户接口原型 分析需求可行性 确定需求的优先级别 为需求建立模型 创建数据字典,计算机科学与工程学院,软件工程(Software Engineer),3.2.4 需求传递,需求传递的主要任务是书写软件需求规格说明,其目的是: 传达对需求的理解; 作为软件开发项目的一份契约; 作为评价后续工作的基线; 作为控制需求进化的基线。 编写软件需求规格说明有三种方法: 将结构化语言与自然语言结合,编写文本型文档; 建立可视化的模型; 采用形式化的方法进行需求规格说明,如Z
9、模式、Petri Net等,计算机科学与工程学院,软件工程(Software Engineer),3.2.5需求验证,1 需求说明的质量特性 正确性 完整性 一致性 无二义性 可修改性 可跟踪性 可验证性,计算机科学与工程学院,软件工程(Software Engineer),3.2.5需求验证,2 需求验证的方法 审查需求文档 以需求为依据编写测试用例 编写用户手册 确定合格的标准,计算机科学与工程学院,软件工程(Software Engineer),3.2.6 需求管理,1 需求管理的内容,计算机科学与工程学院,软件工程(Software Engineer),3.2.6 需求管理,2需求管理
10、工具,计算机科学与工程学院,软件工程(Software Engineer),3.3 分析建模,分析模型 数据字典 结构化分析过程,计算机科学与工程学院,软件工程(Software Engineer),3.3.1 分析模型,计算机科学与工程学院,软件工程(Software Engineer),3.3.2 数据字典,数据字典描述数据流图的数据存储、数据加工(最底层加工)和数据流,它记录的主要内容有: 基本信息:名字、别名、描述; 定义:数据长度、数据类型、数据结构; 使用特点:取值范围、使用频率、使用方式等; 控制信息:来源、用户、引用程序、读写权限等; 其他说明,计算机科学与工程学院,软件工程(
11、Software Engineer),3.3.3 结构化分析过程,1 创建实体关系图 (1) 在需求收集的过程中,要求客户列出应用软件或业务过程涉及到的“事物”,将其演化成数据对象; (2) 一次考虑一个对象,分析员和客户定义这个对象和其他对象之间是否存在连接; (3) 如果存在连接,应创建一个或多个关系; (4) 对每一个关系,确定其关联类型; (5) 重复步骤(2)到步骤(4),直到定义了所有关系。 (6) 定义每个实体的属性; (7) 形式化并复审实体关系图; (8) 重复步骤(1)到(7),直到数据建模完成。,计算机科学与工程学院,软件工程(Software Engineer),3.3
12、.3 结构化分析过程,2 创建数据流模型 通常,数据流图是分层绘制的,整个过程反映了自顶向下进行功能分解和细化的分析过程。顶层(也称第0层)DFD用于表示系统的开发范围,以及该系统与周围环境的数据交换关系;最底层DFD代表了那些不可进一步分解的“原子加工”;中间层DFD是对上一层父图的细化,其中的每一个加工可以继续细化,中间层次的多少由系统的复杂程度决定。 (1) 第0层DFD将整个系统表示成一个加工; (2) 确定并标记主要的输入和输出; (3) 分离出下一层中的加工、数据对象和存储,并对其进行细化,一次细化一个加工; (4) 标记所有加工和箭头; (5) 重复步骤(3)和(4),直到所有的
13、加工只执行一个简单的操作,可以很容易地用程序实现。,计算机科学与工程学院,软件工程(Software Engineer),3.3.3 结构化分析过程,3 创建行为模型通常来说,行为建模用于实时系统。实时系统中可能存在许多脚本,很多实体需要进行状态划分和描述状态转换图,有时为了描述系统的并发行为,还需要使用其他一些工具进行描述,如Petri网。在事务系统中,系统行为相对简单,只有某些行为较复杂的实体才需要建立其状态转换图。 (1) 分析外部事件,所谓外部事件是指外部实体与系统的一次交互。 (2) 分析事件的响应者,该响应者为了响应该事件要进行怎样的活动,这种活动又会激发哪些事件等,这样构成了系统
14、行为的脚本。 (3) 根据事件和活动划分实体的状态,也可根据其他知识划分实体状态,考虑发生怎样的事件使该实体进入这个状态,怎样的事件使该实体从这个状态转换到另一状态等。,计算机科学与工程学院,软件工程(Software Engineer),3.4 软件原型,原型的定义和作用 抛弃式原型和演化式原型 为什么要采用原型法,计算机科学与工程学院,软件工程(Software Engineer),3.4.1 原型的定义和作用,原型(prototype),即把系统主要功能和接口通过快速开发制作为“软件样机”,以可视化的形式展现给用户,及时征求用户意见,从而明确无误地确定用户需求。同时,原型也可用于征求内部
15、意见,作为分析和设计的接口之一,可方便于沟通。原型在软件开发过程中可以起到以下主要作用: 明确并完善需求 探索设计选择方案 发展为最终的产品,计算机科学与工程学院,软件工程(Software Engineer),3.4.2 抛弃式原型和演化式原型,1抛弃式原型(Throwaway Prototype)抛弃式原型的使用过程如下图所示。首先,选择适当的演示功能,并描述相应的用户界面,然后构造软件原型。由于抛弃式原型在达到预期目的后被抛弃,因此应该花最小的代价尽快地建立该原型。用户对所构造的软件原型进行评估,提出反馈意见,这些反馈可能会引起功能的改变,也可能引起用户界面的改变。,计算机科学与工程学院
16、,软件工程(Software Engineer),3.4.2 抛弃式原型和演化式原型,2. 演化式原型(Evolutionary Prototype)演化式原型适合于基于Web应用的系统开发,这种系统往往随着开发的进展本身的需求也在发生变化。与丢弃式原型不同,演化式模型一开始就必须具有健壮性和产品质量级的代码,因此,对于描述相同的功能,建立演化式原型比建立丢弃式原型所花的时间要多。,计算机科学与工程学院,软件工程(Software Engineer),3.4.3为什么要采用原型法,为什么在需求说明书之外需要原型: 原型方法有什么风险 如何避免项目团队做原型的时候出现部分人员闲置 如果避免项目在原型上停滞不前 如何避免用户看了原型后漫无边际地提要求 如何避免在原型基础上继续开发时可维护性降低,计算机科学与工程学院,软件工程(Software Engineer),3.5 实例,见教材,计算机科学与工程学院,软件工程(Software Engineer),习题,什么是需求分析?需求分析阶段的基本任务是什么? 什么是结构化分析方法?该方法使用什么描述工具? 需求分析的方法应遵循的原则是什么? 软件需求分析与说明的方法有哪些基本原则?,