一、结构化分析方法的概念
1、软件开发方法学
掌握并能正确运用开发方法,具有事半功倍的作用。
软件开发方法
- 软件开发过程所遵循的办法和步骤。
- 软件开发活动的目的是有效地得到一个运行的系统及其支持文档,并且满足有关的质量要求。
软件开发方法学
- 指的是规则、方法和工具的集成,既支持开发也支持以后的演化过程(交付运行后,系统还会变化;或者为了改错,或为了功能的增减)。
2、结构化方法
一种特定的软件开发方法学(由Edward Yourdon.Tom Demarco等人提出)
一种系统化的软件开发方法,包括:
结构化分析方法
结构化设计方法
结构化程序设计方法
3、结构化分析
就软件需求分析而言,即:系统化地使用问题域术语,给出该问题的模型(即“系统必须做什么”的一个估算)。
需求分析的目标
对需求陈述进行分析,解决其中的歧义、不一致等问题,以系统化的形式表达用户的需求,即给出问题的形式化或半形式化的描述(称为系统的概念模型,或系统的需求规约或需求规格说明)。作为开发人员和客户间技术契约的基础,并作为而后开发活动的一个基本输入。
实现软件需求分析的目标对方法学的需求
(1)提供一组术语(符号),指导需求抽象中需要关注的主要方面,并用于表达分析中所使用的信息。这些术语形成一个特定的抽象层,即需求层。
(2)依据这些术语所形成的“空间”,给出表达模型的工具,支持表达系统功能形态。
(3)给出过程指导,以支持系统化地使用相关信息建造系统模型。
二、结构化分析模型
1、基本术语
一个抽象层是由一组确定的术语定义的,为支持需求分析中有关要使用的那些信息的表达,结构化分析方法给出了以下五个术语 / 符号:
其中:
- 数据流、数据存储——支持数据抽象,加工——支持过程/功能的抽象,用于表达系统内涵。
- 数据源、数据潭一支持系统边界抽象,用于表达系统外延。
- 是完备的
2、模型表达工具
(1)DFD图
数据流图(DFD图)——表达系统功能模型的工具。
是一种描述数据变换的图形工具,它包含的元素可以是数据流、数据存储、加工、数据源和数据潭等。
需求分析的首要任务是建立系统功能模型!
一个飞机票预订系统的数据流图:
(2)数据字典
数据字典——定义数据流和数据存储
用于定义数据流和数据存储的结构,并给出构成所给出的数据流和数据存储的各数据项的基本数据类型。
引入:一些逻辑操作符--用于定义数据结构
操作符 |
含义描述 |
= |
等价于(定义为) |
+ |
与(顺序结构) |
{ } |
重复(循环结构) |
[ | ] |
或(选择结构) |
( ) |
任选 |
m..n |
界域 |
例如:
数据流
:
销售的商品=商品名+商品编号+单价+数量+销售时间
现金额=余额=日销售额=非负实数
查询要求=[商品编号|日期]
查询要求1=商品编号
查询要求2=日期
销售情况=商品名+商品编号+金额
数据存贮
:
销售文件={销售的商品}
数据项(数据流及数据存储的组成成分)
金额=非负实数
(3)加工小说明
判定表或判定树等——定义加工小说明
描述加工“做什么”,即加工逻辑,也包括其它一些与加工有关的信息,如执行条件、优先级、执行频率、出错处理等。
- 结构化自然语言——适用于加工的输入数据和输出数据之间的逻辑关系比较简单的加工描述。
例如:
if 20<订票量 then 订票折扣为10% else 订票折扣为5%
- 判定表:
适用于加工的输入数据和输出数据之间的逻辑关系比较复杂的加工描述。
- 判定树:
适用于加工的输入数据和输出数据之间的逻辑关系比较复杂的加工描述。
例如:
三、结构化分析过程
1、过程指导
- 建立系统的功能模型——使用的工具为数据流图DFD
- 首先:建立系统环境图(顶层数据流图),确定系统边界;
- 之后:自顶向下,逐步求精,建立系统的层次数据流图
- 建立数据字典——使用的工具为结构符:+、|、{ } 等
- 定义数据存储
- 定义数据流
- 定义数据项
- 给出加工小说明——使用的工具可以为判定表、判定树:集中描述一个加工“做什么”即加工逻辑,也包括其它一些与加工有关的信息,如执行条件、优先级、执行频率、出错处理等。
结构化分析方法应用实例
2、顶层数据流图
首先:建立系统环境图(系统的功能模型),确定系统边界
其中:
- 数据流为:销售的商品,日销售额等,3个输入流,3个输出流。
- 数据源为:营业员,经理,收款员
- 数据潭为:经理,收款员
- 加工名为:要建立的系统名字
3、自顶向下,逐层分解
之后:自顶向下,逐层分解
A、按人或部门的功能要求,将加工“打碎”(将“父图”的每一加工按其功能分解为若干子加工),形成:
注:需给每一加工编号;
B、“分派”数据流(将“父图”的输入流和输出流“分派到子加工),形成:
其中:
- 要根据特定的加工要求进行分派;
- 保持与顶层数据流的一致;
- 可以不引入数据源和数据潭。
C、引入文件,使之形成一个有机整体一系统 (在各加工之间建立合理的关系) :
至此,体现精化,形成0层数据流图。
继续A、B、C:自顶向下,逐层分解。例如:加工3
可分解为:
4、建立数据字典
定义数据流;定义数据存储;定义数据项;
引入:结构符 +、|、{ } ——用于定义数据结构
数据字典:
数据流
销售的商品=商品名+商品编号+单价+数量+销售时间
现金额=余额=日销售额=非负实数
查询要求=[商品编号|日期]
查询要求1=商品编号
查询要求2=日期
销售情况=商品名+商品编号+金额
数据存贮
:
销售文件={销售的商品}
数据项(数据流及数据存储的组成成分)
给出所有数据项的数据结构类型定义
5、给出加工小说明
描述一个加工,一般遵循如下模版:
加工编号:给出加工编号
加工名:给出该加工的标识
输入流:给出该加工的所有输入数据流
输出流:给出该加工的所有输出数据流
加工逻辑:采用结构化自然语言或判定表或判定树等工具,给出该加工输入数据和输出数据之间的关系
6、建模中应注意的问题
结构化分析方法是一种半形式化的规约方法,给出了一组特定的术语表和标准化的表达格式——数据流图,在表达上均必须遵循一些约定,即应以一种准确和一致方式使用之。
例如:
- 加工:其标识应使用领域术语,采用动宾结构;必须有输入和输出;
- 数据流:其标识应使用领域术语,采用名词或名词短语;特别,应注意模型平衡问题和信息组织的复杂性控制问题,即:
- 模型平衡问题
- 父图和子图的边界一致问题,即它们应有相同的边界;
- 数据流图中的数据流与数据字典的一致问题,即每个数据流和数据存储必须在数据字典中予以定义;
- 数据流图中的“叶”加工(最低层)与小说明的一致问题,即必须给出“叶”加工的说明;
- 小说明和数据流图的图形表示一致问题,即在小说明中必须说明“输入数据流”如何使用,必须说明如何产生“输出数据流”;必须说明如何选取、使用、修改“数据存储”。
- 信息组织复杂性控制问题
- 上层数据可以“打包”;
- 上、下层的数据流对应关系在数据字典中给出,但包内数据流的性质(输入、输出)必须一致;
- 一幅图中的图元个数应控制在7+/-2以内;
- 与每一加工相关的数据流的数目应适中(与层次有关);
- 分析数据内容,确定是否所有的输入信息都用于产生输出信息;
- 分析加工,确定一个加工所产生的输出,是否都能由该加工的输入信息导出。
四、需求规格说明书
一般格式:
1、引言
2、概述
3、数据流图、数据字典、加工说明
4、接口
5、性能需求
6、属性
7、其他需求
示例:
五、结构化分析方法应用案例
1、问题陈述
根据问题陈述,按功能可以把该系统分为两“大块”,即:借还书等事务的处理,以及咨询事务处理。
——进行功能抽象。
(注:不同的功能抽象将导致不同的结果!但应该是等价的。)
于是,可以根据这一抽象,可以识别:
- 顶层数据流:
- 借还书等事务处理要求
- 咨询事务要求
- 以及相关的数据流
- 数据源和数据潭为:图书管理人员,读者以及时钟。
2、建立系统的顶层数据流图(系统环境图)
其中:
3个输入流:图书管理要求,查询要求,当前日期
图书管理要求=入库单、借书单、还书单、注销单
查询要求=读者情况、图书情况、图书统计表
4个输出流:图书统计表,图书情况,读者情况,罚款单
3、自顶向下,逐层分解
通过“打碎”、“分派”,可形成如下0层DFD:
其中:保持输入与输出的一致;引入三个文件,对顶层DFD进行细化。(注:存在数据库设计问题)
以同样方式,对加工1进行分解,形成:
其中:注意平衡问题;平面化问题。当然,还可以继续细化。
4、建立系统的数据字典
数据流条目
:
查询要求=[读者情况|图书情况|图书统计表]
读者情况=姓名+校园卡号+可借图书数
图书情况=图书类号+图书流水号+书名+作者
图书统计表=[A|B|C|D|E]
图书管理要求=[入库单|借书单|还书单|注销单]
入库单=图书类号+图书流水号+书名+作者+内容摘要+单价+购书日期
借书单=姓名+校园卡号+书名+图书类号+借书日期
还书单=姓名+校园卡号+书名+图书类号
注销单=图书类号+图书流水号+书名+价格+购书日期+单价
查询结果=读者情况|图书情况|图书统计表
数据存储条目
:
借书文件={借书单}
目录文件={入库单}+库存量
读者文件={读者情况}
数据项条目
:
{略}
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)。