3需求分析

3.1需求分析的任务

3.1.1确定对系统的综合要求

  • 1.确定系统的功能要求

    • 提出系统必须完成的全部所有功能
  • 2.确定系统的性能要求

    • 性能需求指定系统必须满足的定时约束或容量约束
    • (1)系统的响应时间
    • (2)系统需要的存储容量
    • (3)后援存储器容量、系统重新启动
    • (4)系统的安全性和可靠性
  • 3.确定系统的运行要求

    • (1)支持系统运行的软件环境
    • (2)工具软件和系统软件
    • (3)支持系统运行的硬件环境
    • (4)出错处理、通信接口、约束
  • 4.确定系统的扩充要求

3.1.2分析系统的数据要求

  • 建立数据模型:数据字典、层次方框图、Warnier图 。

3.1.3导出系统的逻辑模型

  • 用数据流图、实体一联系图、状态转换图、数据字典和主要的处理算法导出系统的详细的逻辑模型。

需求分析的过程

  • (1)调查研究

    • 目的:通过各种途径获取用户需求信息产生《用户需求说明书 》
    • 角色与职责:需求分析员调查、分析用户的需求,客户与最终用户提供必要需求信息
  • (2)分析与综合

    • 从信息流和信息结构出发,逐步细化所有的软件功能,找出系统各元素之间的联系、接口特性和设计上的约束,分析它们是否满足功能要求。
  • (3)书写需求分析文档

    • 软件需求说明书
    • 数据要求说明书
    • 初步的用户手册
    • 修改、完善与确定软件开发实施计划
  • (4)需求分析的评审

    • 系统定义的目标是否与用户的要求一致
    • 系统需求分析阶段提供的文档资料是否齐全
    • 文档中的所有描述是否完整、清晰、准确反应用户要求
    • 与所有其它系统成分的重要接口是否都已经描述

3.1.4修正系统开发计划

  • 根据在分析过程中获得的对系统的更深入更具体的了解,可以比较准确地估计系统的成本和进度,修正以前制定的开发计划。

3.2与用户沟通获取需求的方法

3.2.1需求获取

  • 需求获取是在问题及其最终解决方案之间架设桥梁的第一步。

  • 需求获取的目的是清楚地理解所要解决的问题,完整地获得用户的需求。

  • 获取需求的一个必不可少的结果是对项目中描述的客户需求的普遍理解。一旦理解了需求,分析者、开发者和客户就能探索出描述这些需求的多种解决方案。

  • 需求获取活动

    • (1)发现和分析问题 发现问题症结,并分析问题的原因/结果关系。

    • (2)获取需求 根据对问题的理解定义需求。

      • a.使用调查研究方法收集信息;
      • b.遵循需求获取框架,按照三个成分观察:即数据、过程和接口。
    • (3)需求归档 以草稿形式归档调查结果。形式有用例、决策表、需求表等

3.2.2访谈

  • 非正式访谈— 分析员将提出一些用户可以自由回答的开放性问题,以鼓励被访问人员说出自己的想法。

  • 正式访谈将根据一些事先准备好的议题全面展开讨论,得出结论性的意见。

  • 当需要调查大量人员的意见时,向被调查人分发调查表是一个十分有效的做法。

  • 在访问用户的过程中使用情景分析技术往往非常有效

  • 情景分析技术的用处

    • (1) 它能在某种程度上演示目标系统的行为,从而便于用户理解,而且还可能进一步揭示出一些分析员目前还不知道的需求。
    • (2) 由于情景分析较易为用户所理解,使用这种技术能保证用户在需求分析过程中始终扮演一个积极主动的角色。需求分析的目标是获知用户的真实需求,而这一信息的惟一来源是用户,因此,让用户起积极主动的作用对需求分析工作获得成功是至关重要的。

3.2.3面向数据流自顶向下求精

  • 通过可行性研究已经得出了目标系统的高层数据流图,需求分析的目标之一就是把数据流和数据存储定义到元素级。

  • 结构化分析方法(SA)

    • “数据流图”描述系统的分解,即描述系统由哪些部分组成,每个部分之间有什么样的联系等;
    • “数据字典”描述系统中的每一个数据;
    • “小说明”详细描述系统中的每一个加工;
    • “补充材料”是根据需要对系统的补充。
    • 以上就可以明确而完整地描述一个系统的功能

3.3.4快速建立软件模型

  • 基本思想

    • 在很短的时间内建立起一个只包含基本数据库和一些基本功能的原型给用户使用,然后根据用户意见对原型进行修改,直到满意为止。
  • 快速构建和修改原型,通常使用的3种方法和工具

    • (1)第四代技术

      • 包括众多数据库查询和报表语言、程序和应用系统生成器以及其他非常高级的非过程语言。能快速生成可执行的代码。
    • (2)可重用的软件构件

      • 使用一组已有的软件构件(也称为组件)来装配(而不是从头构造)原型。
    • (3)形式化规格说明和原型环境

      • 在交互式环境下,用自动工具把基于形式语言的规格说明翻译成可执行的程序代码。

3.3分析建模与规格说明

什么是模型?

  • 为了理解事物而对事物做出的一种抽象,是对事物的一种无歧义的书面描述。
  • 模型通常由一组图形符号和组织这些符号的规则组成。

模型的作用

  • 在建模过程中了解系统
  • 通过抽象降低复杂性
  • 有助于回忆所有的细节
  • 有助于开发小组间的交流
  • 有助于与用户的交流
  • 为系统的维护提供文档

结构化分析( Structured Analysis , SA )

  • 是面向数据流进行分析的方法,主要建立以下几种模型:

    • 实体关系图(Entity-Relationship Diagram,E-R图)来创建数据模型,描述系统中所有重要的数据对象;
    • 数据流图(Data Flow Diagram,DFD) :用来创建功能模型,描述了信息流和数据转换。
    • 状态转换图 (State-Transition Diagram,STD)用来创建行为模型,描述系统状态如何响应外部事件,而进行转换。

面向对象分析方法建立的模型

  • 对象模型(Object model):定义实体,描述系统的静态结构,定义“对谁做”
  • 动态模型(Dynamic model):描述对象之间的交互过程,规定“何时做”
  • 功能模型 (Functional model) :描述内部数据的处理,指明系统应“做什么”

3.4实体-联系图

基本定义

  • ER图 —- 是用来建立数据模型的工具。
  • 数据模型 —- 是一种面向问题的数据模型,是按照用户的观点对数据建立的模型。它描述了从用户角度看到的数据,反映了用户的现实环境,而且与在软件系统中的实现方法无关。
  • 数据模型中包含3种相互关联的信息:数据对象(实体)、数据对象的属性及数据对象彼此间相互连接的关系。

1.数据对象(实体)

  • 数据对象:是信息世界中描述客观事物的概念。
  • 可以由一组属性来定义的实体都可以被认为是数据对象。
  • 如:外部实体、事物、行为、事件、角色、单位、地点或结构等。
  • 数据对象彼此间是有关联的。

2.属性

  • 属性定义了数据对象的性质。
  • 必须把一个或多个属性定义为“标识符”,也就是说,当我们希望找到数据对象的一个实例时,用标识符属性作为“关键字”(通常简称为“键”)。
  • 应该根据对所要解决的问题的理解,来确定特定数据对象的一组合适的属性。
  • 如:学生具有学号、姓名、性别、年龄、专业等属性;
  • 课程具有课程号、课程名、学分、学时数等属性;
  • 教师具有职工号、姓名、年龄、职称等属性。

3.联系

  • a. 一对一联系(1∶1)
  • b. 一对多联系(1∶N)
  • c. 多对多联系(M∶N)

实体-联系图的符号

  • ER图中包含了实体(即数据对象)、关系和属性等3种基本成分。
  • 通常用矩形框代表实体;
  • 用连接相关实体的菱形框表示关系;
  • 用椭圆形表示实体(或关系)的属性;
  • 并用直线把实体(或关系)与其属性连接起来。

3.5数据规范化

数据规范化的目的

  • (1)消除数据冗余,即消除表格中数据的重复;
  • (2)消除多义性,使关系中的属性含义清楚、单一;
  • (3)使关系的“概念”单一化,让每个数据项只是一个简单的数或字符串,而不是一个组项或重复组;
  • (4)方便操作。使数据的插入、删除与修改操作可行并方便;
  • (5)使关系模式更灵活,易于实现接近自然语言的查询方式。

3种范式

  • 第一范式:每个属性值都必须是原子值,即仅仅是一个简单值而不含内部结构。
  • 第二范式:满足第一范式条件,而且每个非关键字属性都由整个关键字决定(而不是由关键字的一部分来决定)。
  • 第三范式:符合第二范式的条件,每个非关键字属性都仅由关键字决定,而且一个非关键字属性不能仅仅是对另一个非关键字属性的进一步描述(即一个非关键字属性值不依赖于另一个非关键字属性值)。

3.6状态转换图

定义

  • 通过描绘系统的状态及引起系统状态转换的事件,来表示系统的行为。此外,状态图还指明了作为特定事件的结果系统将做哪些动作(例如,处理数据)。

(1)状态

  • 状态是任何可以被观察到的系统行为模式,一个状态代表系统的一种行为模式。状态规定了系统对事件的响应方式。系统对事件的响应,既可以是做一个(或一系列)动作,也可以是仅仅改变系统本身的状态,还可以是既改变状态又做动作。

(2)事件

  • 事件是在某个特定时刻发生的事情,它是对引起系统做动作或(和)从一个状态转换到另一个状态的外界事件的抽象。
  • 例如,内部时钟表明某个规定的时间段已经过去,用户移动或点击鼠标等都是事件。
  • 简而言之,事件就是引起系统做动作或(和)转换状态的控制信息。

(3)符号

(4)例子(见书本)

3.7其他图形工具

3.7.1 层次方框图

  • 层次方框图用树形结构的一系列多层次的矩形框描绘数据的层次结构。
  • 树形结构的顶层是一个单独的矩形框,它代表完整的数据结构,下面的各层矩形框代表这个数据的子集,最底层的各个框代表组成这个数据的实际数据元素(不能再分割的元素)。
  • 随着结构的精细化,层次方框图对数据结构也描绘得越来越详细,这种模式非常适合于需求分析阶段的需要。系统分析员从对顶层信息的分类开始,沿图中每条路径反复细化,直到确定了数据结构的全部细节时为止。

3.7.2 Warnier图

  • 法国计算机科学家Warnier提出了表示信息层次结构的另外一种图形工具。
  • Warnier图也用树形结构描绘信息,但是这种图形工具比层次方框图提供了更丰富的描绘手段。
  • 用Warnier图可以表明信息的逻辑组织。它可以指出一类信息或一个信息元素是重复出现的,也可以表示特定信息在某一类信息中是有条件地出现的。
  • 重复和条件约束是说明软件处理过程的基础,所以很容易把Warnier图转变成软件设计的工具。
  • 图中表示一种软件产品要么是系统软件要么是应用软件。系统软件中有P1种操作系统,P2种编译程序,此外还有软件工具。软件工具是系统软件的一种,它又可以进一步细分为编辑程序、测试驱动程序和设计辅助工具,图中标出了每种软件工具的数量。

3.7.2 IPO图

  • IPO图是输入、处理、输出图的简称,它是美国IBM公司发展完善起来的一种图形工具
  • 描述输入数据、处理数据和输出数据
  • 在需求分析阶段使用IPO图简略的描述系统的主要算法
  • 左边的框中列出有关的输入数据。
  • 中间的框内列出主要的处理,处理框中列出处理的次序暗示了执行的顺序,但是用这些基本符号还不足以精确描述执行处理的详细情况。
  • 在右边的框内列出产生的输出数据。
  • 在IPO图中还用类似向量符号的粗大箭头清楚地指出数据通信的情况。

3.7.3 改进的IPO图(也称为IPO表)

  • 在需求分析阶段可以使用IPO表简略地描述系统的主要算法(即数据流图中各个处理的基本算法)。
  • 需求分析阶段,IPO表中的许多附加信息暂时还不具备,但在设计阶段可以进一步补充修正这些图,作为设计阶段的文档。
  • 这正是在需求分析阶段用IPO表作为描述算法的工具的重要优点。
  • 在需求分析阶段可以使用IPO表简略地描述系统的主要算法(即数据流图中各个处理的基本算法)。
  • 需求分析阶段,IPO表中的许多附加信息暂时还不具备,但在设计阶段可以进一步补充修正这些图,作为设计阶段的文档。
  • 这正是在需求分析阶段用IPO表作为描述算法的工具的重要优点

3.8验证软件需求

一、验证软件需求的正确性

  • (1) 一致性 所有需求必须是一致的,任何一条需求不能和其他需求互相矛盾。
  • (2) 完整性 需求必须是完整的,规格说明书应该包括用户需要的每一个功能或性能。
  • (3) 现实性 指定的需求应该是用现有的硬件技术和软件技术基本上可以实现的。
  • (4) 有效性 必须证明需求是正确有效的,确实能解决用户面对的问题。

二、验证软件需求的方法

  • 1、验证需求的一致性

    • 人工技术:需求分析的结果是用自然语言书写
    • 软件工具:  软件需求规格说明书是用形式化的需求陈述语言书写
  • 2、验证需求的现实性

    • 分析员应该参照以往开发类似系统的经验,分析用现有的软、硬件技术实现目标系统的可能性。必要的时候应该采用仿真或性能模拟技术,辅助分析软件需求规格说明书的现实性。
  • 3、验证需求的完整性和有效性

    • 使用原型系统,而不去开发实际系统,这样做可以节约成本和时间,其目的是显示目标系统的主要功能,而不是性能。

三、用于需求分析的软件工具

  • RSL(需求陈述语言)
  • PSL/PSA (问题陈述语言/问题陈述分析程序)

3.9需求分析步骤总结

  • ⑴ 问题描述

  • ⑵ 画分层的数据流图

  • ⑶ 决定哪些部分需要计算机化和怎样计算机化

  • ⑷ 数据细节描述

  • ⑸ 定义处理逻辑

  • ⑹ 定义物理资源

  • ⑺ 确定输入/输出规格说明,确定有关数值

  • ⑻ 确定硬件需求

  • ⑼ 根据结构化分析模型,建立系统规格说明文档