本文来源于《软件工程(第三版)》清华大学出版社 钱乐秋 一书的总结。

PPT下载链接:https://download.csdn.net/download/zhaohongfei_358/20028201

分层数据流模型

结构化分析方法

主要思想:抽象与自顶向下的逐层分解

  • 抽象:忽略一个问题中与当前目标无关的那些方面,以便更充分地关注与当前目标有关的方面
  • 分解:将问题不断分解为较小的问题,直到每个最底层的问题都足够简单为止

数据流图

Data Flow Diagram(简称DFD):描述输入数据流到输出数据流的变换(即加工)过程,用于对系统的功能建模,基本元素包括:
在这里插入图片描述
数据流图示例:
在这里插入图片描述

数据流图的扩充符号

描述一个加工的多个数据流之间的关系

  • 星号(*):表示数据流之间存在“与”关系
    • 所有输入数据流同时存在时,才能进行加工处理
    • 或者加工处理的结果是同时产生所有输出数据流
  • 加号(+):表示数据流之间存在“或”关系
    • 至少存在一个输入数据流时,才能进行加工处理
    • 或者加工处理的结果至少产生一个输出数据流
  • 异或(⊕):表示数据流之间存在“异或”(互斥)关系
    • 必须存在且仅存在一个输入数据流时,才能进行加工处理
    • 或者加工处理的结果产生且仅产生一个输出数据流

数据流图的各个层次

  • 顶层图:只有代表整个软件系统的1个加工,描述了软件系统与外界(源或宿)之间的数据流
  • 0层图:顶层图中的加工经分解后的图称为0层图(只有1张)
  • 中间层图:中间层图中至少有一个加工(也可以有多个)在下层图中分解成一张子图
  • 底层图:处于最底层的图称为底层图,其中所有的加工不再分解成新的子图

图和加工的编号

  • 顶层图只有一个,代表整个软件系统的加工,该加工不必编号。
  • 0层图中的加工编号分别为1,2,3,…
  • 子图号:若父图中的加工号x分解成某一子图,则该子图号记为“图x”
  • 子图中加工的编号:若父图中的加工号为x的加工分解成某一子图,则该子图中的加工编号分别为x.1、x.2、x.3…

案例(考务处理系统)

案例描述

基本描述:

  • 简化的资格和水平考试的考务处理系统
  • 分成多个级别,如初级程序员、程序员、高级程序员、系统分析员等,凡满足一定条件的考生都可参加某一级别的考试
  • 考试的合格标准将根据每年的考试成绩由考试中心确定
  • 考试的阅卷由阅卷站进行,因此,阅卷工作不包含在软件系统中

功能需求:

  • 对考生送来的报名单进行检查
  • 对合格的报名单编好准考证号后将准考证送给考生,并将汇总后的考生名单送给阅卷站
  • 对阅卷站送来的成绩清单进行检查,并根据考试中心制订的合格标准审定合格者
  • 制作考生通知单送给考生
  • 进行成绩分类统计(按地区、年龄、文化程度、职业、考试级别等分类)和试题难度分析,产生统计分析表

部分数据流的组成:

  • 报名单=地区+序号+姓名+文化程度+职业+考试级别+通信地址
  • 正式报名单=准考证号+报名单
  • 准考证=地区+序号+姓名+准考证号+考试级别+考场
  • 考生名单={准考证号+考试级别}
  • 考生名册=正式报名单
  • 统计分析表=分类统计表+难度分析表
  • 考生通知单=准考证号+姓名+通信地址+考试级别+考试成绩+合格标志

顶层图的绘制

在这里插入图片描述

  • 确定源或宿:考生、阅卷站和考试中心
    • 它们都既是源又是宿
  • 顶层图唯一的加工:软件系统(考务处理系统)
  • 确定数据流:系统的输入/输出信息
    • 输入数据流:报名单(来自考生)、成绩清单(来自阅卷站)、合格标准(来自考试中心)
    • 输出数据流:准考证(送往考生)、考生名单(送往阅卷站)、考生通知书(送往考生)、统计分析表(送往考试中心)
    • 额外的输出流(考虑系统的健壮性):不合格报名单(返回给考生),错误成绩清单(返回给阅卷站)
  • 顶层图通常没有文件

易错点:

  • 考试中心只提供“合格标准”,具体的合格检查是由“考务处理中心”完成的
  • 需要考虑系统的健壮性,这点容易忽略
  • 统计分析表需要送往考试中心,这个案例中只说制作,没有说送往哪,容易忽略

绘制0层图

在这里插入图片描述

方法分析,以下确定加工、数据流、文件、源或宿的一般方法适用于0层图及其各层子图:

  • 确定加工: 确定父图中某加工分解而成的子加工

    • 根据功能分解来确定加工:将一个复杂的功能分解成若干个较小的功能,较多应用于高层DFD中的分解
    • 根据业务处理流程确定加工:分析父图中待分解加工的业务处理流程,业务流程中的每一步都可能是一个子加工
    • 特别要注意在业务流程中数据流发生变化或数据流的值发生变化的地方,应该存在一个加工,例如在这里插入图片描述
  • 确定数据流

    • 在父图中某加工分解而成的子图中,父图中相应加工的输入/输出数据流都是且仅是子图边界上的输入/输出数据流
    • 分解后的子加工之间应增添相应的新数据流表示加工过程中的中间数据
    • 如果某些中间数据需要保存以备后用,那么可以成为流向文件的数据流
    • 同一个源或加工可以有多个数据流流向一个加工,如果它们不是一起到达和一起加工的,那么可以将它们分成若干个数据流,例如:在这里插入图片描述
  • 确定文件

    • 如果父图中该加工存在读写文件的数据流,则相应的文件和数据流都应画在子图中
    • 在分解子图中,如果需要保存某些中间数据以备后用,则可以将这些数据组成一个新的文件
    • 新文件(首次出现的文件)至少应有一个加工为其写入记录,同时至少存在另一个加工来读该文件的记录
    • 注意:从父图中继承下来的文件在子图中可能只对其进行读,或只进行写
  • 确定源和宿

    • 0层图和其它子图中通常不必画出源和宿
    • 有时为了提高可读性,可以将顶层图中的源和宿画在0层图中
  • 最终得到考务处理系统0层图

    • 根据功能分解方法识别出两个加工:考试报名、统计成绩
    • 数据流
      • 继承顶层图中的输入数据流和输出数据流
      • 定义二个加工之间的数据流:由于这二个加工分别在考试前后进行,因此登记报名单所产生的结果“考生名册”应作为文件保存以便考试后由统计成绩加工引用

加工1子图

在这里插入图片描述

  • 复杂的加工可以继续分解成1张DFD子图
  • 分解方法:
    • 将该加工看作一个小系统,该加工的输入/输出数据流就是这个假设的小系统的输入/输出数据流
    • 然后采用画0层图的方法,画出该加工的子图
  • 3个子加工:检查报名单、编准考证号、登记考生
  • “合格报名单”和“正式报名单”是新增加的数据流,其它数据流都是加工1原有的
    在加工1的分解中没有新的文件产生

加工2子图

在这里插入图片描述

总结

  1. 画系统的输入和输出
  2. 画系统内部
  3. 画加工内部
  4. 重复第3步骤,直至每个尚未分解的加工都足够简单(即不必再分解)
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐