【北京大学 软件工程】四、结构化分析方法

简介: 结构化分析方法是一种系统化的软件开发方法学,旨在通过使用问题域术语建立系统的功能模型,以明确“系统必须做什么”。该方法包括结构化分析、设计和程序设计三个主要部分。其核心工具是数据流图(DFD),用于表达系统功能模型,并结合数据字典定义数据流和数据存储。此外,还使用加工小说明(如判定表或判定树)描述加工逻辑。结构化分析过程遵循自顶向下、逐步求精的原则,首先建立系统环境图确定边界,然后通过分解加工、分派数据流和引入文件来细化模型。整个过程中需确保模型平衡和信息组织的复杂性控制。最终输出为需求规格说明书(SRS),确保需求的正确性、无二义性、完整性和可验证性等特性。

一、结构化分析方法的概念

1、软件开发方法学

掌握并能正确运用开发方法,具有事半功倍的作用。

软件开发方法

  • 软件开发过程所遵循的办法和步骤
  • 软件开发活动的目的是有效地得到一个运行的系统及其支持文档,并且满足有关的质量要求。

软件开发方法学

  • 指的是规则、方法和工具的集成,既支持开发也支持以后的演化过程(交付运行后,系统还会变化;或者为了改错,或为了功能的增减)。

2、结构化方法

一种特定的软件开发方法学(由Edward Yourdon.Tom Demarco等人提出)

一种系统化的软件开发方法,包括:

  • 结构化分析方法
  • 结构化设计方法
  • 结构化程序设计方法

3、结构化分析

就软件需求分析而言,即:系统化地使用问题域术语,给出该问题的模型(即“系统必须做什么”的一个估算)。

需求分析的目标

对需求陈述进行分析,解决其中的歧义、不一致等问题,以系统化的形式表达用户的需求,即给出问题的形式化或半形式化的描述(称为系统的概念模型,或系统的需求规约或需求规格说明)。作为开发人员和客户间技术契约的基础,并作为而后开发活动的一个基本输入。

实现软件需求分析的目标对方法学的需求

(1)提供一组术语(符号),指导需求抽象中需要关注的主要方面,并用于表达分析中所使用的信息。这些术语形成一个特定的抽象层,即需求层。

(2)依据这些术语所形成的“空间”,给出表达模型的工具,支持表达系统功能形态。

(3)给出过程指导,以支持系统化地使用相关信息建造系统模型。


二、结构化分析模型

1、基本术语

一个抽象层是由一组确定的术语定义的,为支持需求分析中有关要使用的那些信息的表达,结构化分析方法给出了以下五个术语 / 符号:

其中:

  1. 数据流、数据存储——支持数据抽象,加工——支持过程/功能的抽象,用于表达系统内涵。
  2. 数据源、数据潭一支持系统边界抽象,用于表达系统外延。
  3. 是完备的

2、模型表达工具

(1)DFD图

数据流图(DFD图)——表达系统功能模型的工具

是一种描述数据变换的图形工具,它包含的元素可以是数据流、数据存储、加工、数据源和数据潭等。

需求分析的首要任务是建立系统功能模型!

一个飞机票预订系统的数据流图:

(2)数据字典

数据字典——定义数据流和数据存储

用于定义数据流和数据存储的结构,并给出构成所给出的数据流和数据存储的各数据项的基本数据类型。

引入:一些逻辑操作符--用于定义数据结构

操作符

含义描述

=

等价于(定义为)

+

与(顺序结构)

{ }

重复(循环结构)

[ | ]

或(选择结构)

( )

任选

m..n

界域

例如:

  1. 数据流

销售的商品=商品名+商品编号+单价+数量+销售时间

现金额=余额=日销售额=非负实数

查询要求=[商品编号|日期]

查询要求1=商品编号

查询要求2=日期

销售情况=商品名+商品编号+金额

  1. 数据存贮

销售文件={销售的商品}

  1. 数据项(数据流及数据存储的组成成分)

金额=非负实数

(3)加工小说明

判定表或判定树等——定义加工小说明

描述加工“做什么”,即加工逻辑,也包括其它一些与加工有关的信息,如执行条件、优先级、执行频率、出错处理等。

  1. 结构化自然语言——适用于加工的输入数据和输出数据之间的逻辑关系比较简单的加工描述。

例如:

if 20<订票量
then 订票折扣为10%
else 订票折扣为5%
  1. 判定表:

适用于加工的输入数据和输出数据之间的逻辑关系比较复杂的加工描述。

  1. 判定树

适用于加工的输入数据和输出数据之间的逻辑关系比较复杂的加工描述。

例如:


三、结构化分析过程

1、过程指导

  1. 建立系统的功能模型——使用的工具为数据流图DFD
  1. 首先:建立系统环境图(顶层数据流图),确定系统边界;
  2. 之后:自顶向下,逐步求精,建立系统的层次数据流图
  1. 建立数据字典——使用的工具为结构符:+、|、{ } 等
  1. 定义数据存储
  2. 定义数据流
  3. 定义数据项
  1. 给出加工小说明——使用的工具可以为判定表、判定树:集中描述一个加工“做什么”即加工逻辑,也包括其它一些与加工有关的信息,如执行条件、优先级、执行频率、出错处理等。

结构化分析方法应用实例

2、顶层数据流图

首先:建立系统环境图(系统的功能模型),确定系统边界

其中:

  • 数据流为:销售的商品,日销售额等,3个输入流,3个输出流。
  • 数据源为:营业员,经理,收款员
  • 数据潭为:经理,收款员
  • 加工名为:要建立的系统名字

3、自顶向下,逐层分解

之后:自顶向下,逐层分解

A、按人或部门的功能要求,将加工“打碎”(将“父图”的每一加工按其功能分解为若干子加工),形成:

注:需给每一加工编号;

B、“分派”数据流(将“父图”的输入流和输出流“分派到子加工),形成:

其中:

  • 要根据特定的加工要求进行分派;
  • 保持与顶层数据流的一致;
  • 可以不引入数据源和数据潭。

C、引入文件,使之形成一个有机整体一系统 (在各加工之间建立合理的关系)

至此,体现精化,形成0层数据流图

继续A、B、C:自顶向下,逐层分解。例如:加工3

可分解为

4、建立数据字典

定义数据流;定义数据存储;定义数据项;

引入:结构符 +、|、{ }  ——用于定义数据结构

数据字典:

  1. 数据流

销售的商品=商品名+商品编号+单价+数量+销售时间

现金额=余额=日销售额=非负实数

查询要求=[商品编号|日期]

查询要求1=商品编号

查询要求2=日期

销售情况=商品名+商品编号+金额

  1. 数据存贮

销售文件={销售的商品}

  1. 数据项(数据流及数据存储的组成成分)

给出所有数据项的数据结构类型定义

5、给出加工小说明

描述一个加工,一般遵循如下模版:

加工编号:给出加工编号

加工名:给出该加工的标识

输入流:给出该加工的所有输入数据流

输出流:给出该加工的所有输出数据流

加工逻辑:采用结构化自然语言或判定表或判定树等工具,给出该加工输入数据和输出数据之间的关系

6、建模中应注意的问题

结构化分析方法是一种半形式化的规约方法,给出了一组特定的术语表和标准化的表达格式——数据流图,在表达上均必须遵循一些约定,即应以一种准确和一致方式使用之。

例如:

  • 加工:其标识应使用领域术语,采用动宾结构;必须有输入和输出;
  • 数据流:其标识应使用领域术语,采用名词或名词短语;特别,应注意模型平衡问题和信息组织的复杂性控制问题,即:
  1. 模型平衡问题
  • 父图和子图的边界一致问题,即它们应有相同的边界;
  • 数据流图中的数据流与数据字典的一致问题,即每个数据流和数据存储必须在数据字典中予以定义;
  • 数据流图中的“叶”加工(最低层)与小说明的一致问题,即必须给出“叶”加工的说明;
  • 小说明和数据流图的图形表示一致问题,即在小说明中必须说明“输入数据流”如何使用,必须说明如何产生“输出数据流”;必须说明如何选取、使用、修改“数据存储”。
  1. 信息组织复杂性控制问题
  • 上层数据可以“打包”;
  • 上、下层的数据流对应关系在数据字典中给出,但包内数据流的性质(输入、输出)必须一致;
  • 一幅图中的图元个数应控制在7+/-2以内;
  • 与每一加工相关的数据流的数目应适中(与层次有关);
  • 分析数据内容,确定是否所有的输入信息都用于产生输出信息;
  • 分析加工,确定一个加工所产生的输出,是否都能由该加工的输入信息导出。

四、需求规格说明书

一般格式:

1、引言

2、概述

3、数据流图、数据字典、加工说明

4、接口

5、性能需求

6、属性

7、其他需求

示例:


五、结构化分析方法应用案例

1、问题陈述

根据问题陈述,按功能可以把该系统分为两“大块”,即:借还书等事务的处理,以及咨询事务处理。

——进行功能抽象

(注:不同的功能抽象将导致不同的结果!但应该是等价的。)

于是,可以根据这一抽象,可以识别:

  1. 顶层数据流:
  1. 借还书等事务处理要求
  2. 咨询事务要求
  3. 以及相关的数据流
  1. 数据源和数据潭为:图书管理人员,读者以及时钟。

2、建立系统的顶层数据流图(系统环境图)

其中:

3个输入流:图书管理要求,查询要求,当前日期

图书管理要求=入库单、借书单、还书单、注销单

查询要求=读者情况、图书情况、图书统计表

4个输出流:图书统计表,图书情况,读者情况,罚款单

3、自顶向下,逐层分解

通过“打碎”、“分派”,可形成如下0层DFD:

其中:保持输入与输出的一致;引入三个文件,对顶层DFD进行细化。(注:存在数据库设计问题)

以同样方式,对加工1进行分解,形成:

其中:注意平衡问题;平面化问题。当然,还可以继续细化。

4、建立系统的数据字典

  1. 数据流条目

查询要求=[读者情况|图书情况|图书统计表]

读者情况=姓名+校园卡号+可借图书数

图书情况=图书类号+图书流水号+书名+作者

图书统计表=[A|B|C|D|E]

图书管理要求=[入库单|借书单|还书单|注销单]

入库单=图书类号+图书流水号+书名+作者+内容摘要+单价+购书日期

借书单=姓名+校园卡号+书名+图书类号+借书日期

还书单=姓名+校园卡号+书名+图书类号

注销单=图书类号+图书流水号+书名+价格+购书日期+单价

查询结果=读者情况|图书情况|图书统计表

  1. 数据存储条目

借书文件={借书单}

目录文件={入库单}+库存量

读者文件={读者情况}

  1. 数据项条目

{略}

5、建立加工小说明

由于本例中的加工逻辑很简单,采用结构化自然语言描述加工即可。

如:加工2.1 查询读者借书情况,可描述如下:

加工标号:2.1

加工名:查询读者借书情况

输入流:读者校园卡号

输出流:读者借书情况

加工逻辑:

begin 根据读者校园卡号,在借书文件中获取该读者的借书记录;准备输出流中的数据,并输出之。
end.

六、补充:需求验证

1、有关SRS内容方面

有关SRS(Software Requirements Specification)内容方面:

(1)正确性:指的是SRS中陈述的每个需求都表达了将要构造的系统的某个要求。

(2)无二义性:指的是SRS中陈述的每个需求都只有一种解释。

(3)完整性:若一个SRS具有以下三个特性,则它是完整的:

  • 未来系统所做的任何事情都包含在SRS的陈述中;
  • 未来系统响应所有可能的输入 (包括有效和无效);
  • SRS中没有被标识为“待定”的内容。

(4)可验证性:SRS中陈述的每个需求都是可验证的——即当且仅当存在一个有限代价的过程(人工或机器)

可以检查构造的软件产品是否符合用户的需求。

  • 任何二义性必然导致不可验证性
  • 任何不可度量的量,如“通常”或“时常”等
  • 任何等同于停机问题的需求是不能被验证的,如“程序将不会进入一个无限循环”等同于停机问题,因而是不可验证的。

(5)一致性:

  • SRS中陈述的需求没有与以前的文档发生冲突;
  • SRS中陈述的各个需求之间没有发生冲突。

(6)可理解性:SRS中陈述的每个需求都是可理解的。

2、有关SRS格式与风格方面

(7)可修改性:指的是SRS的结构和风格使任何对需求的必要修改都易于完整、一致的进行。

(8)可被跟踪性:指的是SRS中的每个需求的出处都是清楚的,这意味着SRS中包含对前期支持文档的引用表。

(9)可跟踪性:指的是SRS的书写方式有助于对其中陈述的每个需求进行引用。

(10)设计无关性:指的是SRS不暗示特定的软件结构和算法

(11)注释:向开发机构提供了每个需求是否重要的指导意见。如:E(Essential)、D(Desirable)或O(Optional)。

相关文章
|
17小时前
|
算法 数据挖掘
【北京大学 软件工程】五、结构化设计方法-1
结构化设计是软件开发中的重要环节,旨在根据需求规约构建系统的软件模型。其主要目标是在抽象层面上建立系统架构(包括数据和程序结构),并详细描述处理算法,最终形成设计规格说明书。结构化设计分为总体设计和详细设计两部分:总体设计确定系统的模块结构及模块间的调用关系;详细设计则深入描述各模块的具体实现。 设计方法需提供体现原理的术语、表达软件模型的工具及过程指导。总体设计引入了“模块”与“调用”两个核心概念,并使用模块结构图(MSD)来表达静态结构。设计步骤包括将DFD(数据流图)转化为MSD,区分变换型和事务型数据流图,通过自顶向下的方式逐步细化模块,确保高内聚低耦合。
【北京大学 软件工程】五、结构化设计方法-1
|
17小时前
|
供应链 安全 区块链
【北京大学 软件工程】一、软件工程概论
本文介绍了软件的定义、特点及分类,探讨了软件工程的起源、概念及其框架,并展望了软件工程的新视野。软件是指计算机系统中的程序及其文档,具有无形性、复杂性和高开发成本等特点,分为系统软件、支撑软件和应用软件三类。软件工程起源于解决早期编程难题,历经个人程序、软件作坊到软件工程时期的发展,旨在以工程化方法解决软件危机。软件工程的核心目标是生产正确、可用且开销合理的软件,主要活动包括需求分析、设计、实现、确认和支持。新一代信息技术如量子计算、区块链等正推动软件工程向更高效、安全的方向发展。
【北京大学 软件工程】一、软件工程概论
|
17小时前
|
测试技术 开发者
【北京大学 软件工程】二、软件过程
本文介绍了软件生存周期过程的概念及其分类。软件生存周期是从概念形成到产品淘汰的全周期,涵盖开发、交付、维护等阶段。软件生存周期过程则是这些活动中的一系列相关流程。文中详细描述了基本过程(如获取、供应、开发、运行和维护)、支持过程(如文档、配置管理、质量保证)及组织过程(如管理、基础设施、改进)。此外,还介绍了常见的软件生存周期模型,包括瀑布模型、增量模型、演化模型和喷泉模型,分析了它们的特点和优缺点。
【北京大学 软件工程】二、软件过程
|
17小时前
|
存储 测试技术 项目管理
【北京大学 软件工程】三、软件需求
本文介绍了软件需求工程的基础概念和流程。首先定义了需求及其获取,强调需求是描述系统功能、性能等方面的要求,并需具备必要性、无歧义性、可测性、可跟踪性和可测量性五大基本性质。接着阐述了需求的分类,包括功能、性能、外部接口、设计约束和质量属性五类,并详细说明了各类需求的具体内容及示例。此外,还探讨了需求发现的技术,并分析了每种技术的应用场景与优缺点。最后,文章解释了需求规约(SRS)的概念、格式和作用,指出它是软件开发组织与用户之间的技术合同,用于指导项目管理、产品设计、测试计划和用户手册的编写。需求规约不应包含设计细节或项目规划信息,而是专注于明确系统的功能性与非功能性要求。
【北京大学 软件工程】三、软件需求
|
算法 测试技术 应用服务中间件
软件工程导论
软件工程导论
276 1
软件工程导论
|
机器学习/深度学习 Web App开发 人工智能
IJCAI 2022四大奖项揭晓,Russell获卓越研究奖、UIUC李博获计算机与思想奖
IJCAI 2022四大奖项揭晓,Russell获卓越研究奖、UIUC李博获计算机与思想奖
169 0
|
机器学习/深度学习 存储 传感器
软件工程导论—可行性研究(下)
软件工程导论—可行性研究(下)
软件工程导论—可行性研究(下)
|
存储 NoSQL 数据库
软件工程导论—可行性研究(上)
软件工程导论—可行性研究(上)
软件工程导论—可行性研究(上)
|
算法 测试技术
五校联合软件工程专业软件工程概论
五校联合软件工程专业软件工程概论
155 0
五校联合软件工程专业软件工程概论
|
SQL 监控 程序员
软件工程之美
  最近在阅读《软件工程之美》,特在此做点记录。
软件工程之美