结构化开发方法--结构化分析方法

2023-11-12

说在前面:

本系列文章专注于软考备考复习内容梳理,文章内容是对教材中知识点和考点的提炼,备考过程中可以有针对的进行复习,减少阅读量,有的放矢。


导航目录:

结构化分析与设计方法是一种面向数据流的传统软件开发方法,它以数据流为中心构建软件的分析模型和设计模型。结构化分析(Structured Analysis,SA)、结构化设计(Structured Design,SD)和结构化程序设计(Structured Programming Design,SPD)构成了完整的结构化方法。

一、结构化分析方法概述

抽象和分解是处理任何复杂问题的两个基本手段。

抽象是指忽略一个问题中与当前目标无关的那些方面,以便更充分地关注与当前目标有关的方面。对于一个复杂的问题,人们很难一下子考虑问题的所有方面和全部细节,通常可以把一个大问题分解成若干个小问题,将每个小问题再分解成若干个更小的问题,经过多次逐层分解,每个最底层的问题都是足够简单、容易解决的,于是复杂的问题也就迎刃而解了。这个过程就是分解的过程。

结构化方法就是采用这种自顶向下逐层分解的思想进行分析建模的。自顶向下逐层分解充分体现了分解和抽象的原则。随着分解层次的增加,抽象的级别也越来越低,即越来越接近问题的解。自顶向下的过程是分解的过程,自底向上的过程是抽象的过程。

结构化方法的分析结果由以下几部分组成∶一套分层的数据流图、一本数据词典、一组小说明(也称加工逻辑说明)、补充材料。

二、数据流图

数据流图也称数据流程图(Data Flow Diagram,DFD),它是一种便于用户理解、分析系统数据流程的图形工具。它摆脱了系统的物理内容,精确地在逻辑上描述系统的功能、输入、输出和数据存储等,是系统逻辑模型的重要组成部分。

1)数据流图的基本图形


元素
数据流图中的基本图形元素包括数据流(Data Flow)、加工(Process)、数据存储(Data Store)和外部实体(Extemal Agent)。其中,数据流、加工和数据存储用于构建软件系统内部的数据处理模型;外部实体表示存在于系统之外的对象,用来帮助用户理解系统数据的来源和去向。

  • 数据流。
    
数据流由一组固定成分的数据组成,表示数据的流向。在DFD中,数据流的流向可以有以下几种∶从一个加工流向另一个加工;从加工流向数据存储(写)∶从数据存储流向加工(读)从外部实体流向加工(输入)从加工流向外部实体(输出)。
    
DFD中的每个数据流用一个定义明确的名字表示。除了流向数据存储或从数据存储流出的数据流不必命名外,每个数据流都必须有一个合适的名字,以反映该数据流的含义。

    
值得注意的是,DFD中描述的是数据流,而不是控制流。
数据流或者由具体的数据属性(也称为数据结构)构成,或者由其他数据流构成。组合数据流是由其他数据流构成的数据流,它们用于在高层的数据流图中组合相似的数据流,以使数据流图更便于阅读。
  • 加工。
    
加工描述了输入数据流到输出数据流之间的变换,也就是输入数据流经过什么处理后变成了输出数据流。每个加工都有一个名字和编号。编号能反映出该加工位于分层DFD中的哪个层次和哪张图中,也能够看出它是哪个加工分解出来的子加工。
一个加工可以有多个输入数据流和多个输出数据流,但至少有一个输入数据流和一个输出数据流。
  • 数据存储。
    

数据存储用来存储数据。通常,一个流入加工的数据流经过加工处理后就消失了,而它的某些数据(或全部数据)可能被加工成输出数据流,流向其他加工或外部实体。除此之外,在软件系统中还常常要把某些信息保存下来以供以后使用,这时可以使用数据存储。

    

每个数据存储都有一个定义明确的名字标识。可以有数据流流入数据存储,表示数据的写入操作;也可以有数据流从数据向数据存储,表示对数据的修改。

    

这里要说明的是,DFD中的数据存储在具体实现时可以用文件系统实现,也可以用数据库系统实现。数据存储的存储介质可以是磁盘、磁带或其他存储介质。
  • 外部实体(外部主体)。
    
外部实体是指存在于软件系统之外的人员或组织,它指出系统所需数据的发源地(源)和系统所产生的数据的归宿地(宿)。例如,对于一个考务处理系统而言,考生向系统提供报名单(输入数据流),所以考生是考务处理系统的一个源;而考务处理系统要将考试成绩的统计分析表(输出数据流)传递给考试中心,所以考试中心是该系统的一个宿。
    

在许多系统中,某个源和某个宿可以是同一个人员或组织,此时,在DFD中可以用同一个符号表示。考生向系统提供报名单,而系统向考生送出准考证,所以在考务处理系统中,考生既是源又是宿。源和宿采用相同的图形符号表示,当数据流从该符号流出时,表示它是源;当数据流流向该符号时,表示它是宿;当两者皆有时,表示它既是源又是宿。

2)数据流图的扩充符号

在DFD中,一个加工可以有多个输入数据流和多个输出数据流,此时可以加上一些扩充符号来描述多个数据流之间的关系。


(1)星号(*)。
星号表示数据流之间存在“与”关系。如果是输入流则表示所有输入数据流全部到达后才能进行加工处理;如果是输出流则表示加工结束将同时产生所有的输出数据流。



(2)加号(+)。
加号表示数据流之间存在“或”关系。如果是输入流则表示其中任何一个输入数据流到达后就能进行加工处理;如果是输入流则表示加工处理的结果是至少产生其中一个输出数据流。



(3)异或(θ)。
异或表示数据流之间存在“互斥”关系。如果是输入流则表示当且仅当其中一个输入流到达后才能进行加工处理;如果是输出流则表示加工处理的结果是仅产生这些输出数据流中的一个。







3)数据流图的层次结构

从原理上讲,只要纸足够大,一个软件系统的分析模型就可以画在一张纸上。然而,一个复杂的软件系统可能涉及上百个加工和上百个数据流,甚至更多。如果将它们画在一张图上,则会十分复杂,不易阅读,也不易理解。




根据自顶向下逐层分解的思想,可以将数据流图按照层次结构来绘制,每张图中的加工个数可大致控制在"7加减2"的范围内,从而构成一套分层数据流图。

  • 层次结构
    



分层数据流图的顶层只有一张图,其中只有一个加工,代表整个软件系统,该加工描述了软件系统与外界之间的数据流,称为顶层图。
    




顶层图中的加工(即系统)经分解后的图称为0层图,也只有一张。处于分层数据流图最底层的图称为底层图,在底层图中,所有的加工不再进行分解。分层数据流图中的其他图称为中间层,其中至少有一个加工(也可以是所有加工)被分解成一张子图。在整套分层数据流图中,凡是不再分解成子图的加工称为基本加工。
  • 图和加工的编号。
    首先介绍父图和子图的概念。
如果某图(记为A)中的某一个加工分解成一张子图(记为B),则称A是B的父图,B是A的子图。若父图中有n个加工,则它可以有0一刀张子图,但每张子图只对应一张父图。

    为了方便对图进行管理和查找,可以采用下列方式对DFD中的图和加工编号。
    ① 顶层图中只有一个加工(代表整个软件系统),该加工不必编号。
    ② 0层图中的加工编号分别为1、2、3–。
    ③ 子图号就是父图中被分解的加工号。
    
④ 对于子图中加工的编号,若父图中的加工号为X的加工分解成某一子图,则该子图中的加工编号分别为x.1、x.2、X.3…。

    4)分层数据流图的审查

在分层数据流图画好后,应该认真检查图中是否存在错误或不合理(不理想)的部分。

  • 分层数据流图的一致性和完整性。
    
① 分层数据流图的一致性。
    
a.父图与子图的平衡。
    
b. 数据守恒。
    
c.局部数据存储。
    

d.一个加工的输出数据流不能与该加工的输入数据流同名。
    

② 分层数据流图的完整性。

    

a.每个加工至少有一个输入数据流和一个输出数据流。
    


b.在整套分层数据流图中,每个数据存储应至少有一个加工对其进行读操作,另一个加工对其进行写操作。
    



c. 分层数据流图中的每个数据流和文件都必须命名(除了流入或流出数据存储的数据流),并保持与数据字典一致。
    




d. 分层数据流图中的每个基本加工都应有一个加工规约。
  • 构造分层DFD时需要注意的问题。
    ① 适当命名。

    a. 名字应反映整个对象(如数据流、加工),而不是只反映它的某一部分。
    b. 避免使用空洞的、含义不清的名字,如“数据”“信息”“处理”“统计”等。
    c.如果发现某个数据流或加工难以命名,往往是DFD分解不当的征兆,此时应考虑重新分解。

    ② 画数据流而不是控制流。
    ③ 避免一个加工有过多的数据流。

    a.把需要重新分解的某张图的所有子图连接成一张图。
    
b.把连接后的图重新划分成几个部分,使各部分之间的联系最小。
    
c.重新定义父图,即第b步中的每个部分作为父图中的一个加工。
    
d. 重新建立各子图,即第b步中的每个部分都是一张子图。
    
e. 为所有的加工重新命名并编号。
    
④ 分解尽可能均匀。

    
⑤ 先考虑确定状态,忽略琐碎的细节。
    
⑥ 随时准备重画。
  • 分解的程度。
    

在自顶向下画数据流图时,为了便于对分解层数进行把握,可以参照以下几条与分解有关的原则。
    


① 7加减2。

    


② 分解应自然,概念上应合理、清晰。
    



③ 只要不影响DFD的易理解性,可适当增加子加工数量,以减少层数。
④ 一般来说,上层分解得快一些(即多分解几个加工),下层分解得慢一些(即少分解几个加工)。
    



⑤ 分解要均匀。

三、 数据字典(DD)

数据流图描述了系统的分解,但没有对图中各成分进行说明。数据字典就是为数据流图中的每个数据流、文件、加工,以及组成数据流或文件的数据项做出说明。其中,对加工的描述称为“小说明”,也可以称为“加工逻辑说明”。


1)数据字典的内容

数据字典有以下4类条目∶数据流、数据项、数据存储和基本加工。数据项是组成数据流和数据存储的最小元素。源点、终点不在系统之内,故一般不在字典中说明。


(1) 数据流条目。数据流条目给出了DFD中数据流的定义,通常列出该数据流的各组成数据项。


(2)数据存储条目。数据存储条目是对数据存储的定义。

(3)数据项条目。数据项条目是不可再分解的数据单位。


(4)基本加工条目。加工条目是用来说明 DFD中基本加工的处理逻辑的,由于下层的基本加工是由上层的加工分解而来,只要有了基本加工的说明,就可理解其他加工。

2)数据词典管理

词典管理主要是把词典条目按照某种格式组织后存储在词典中,并提供排序、查找和统计等功能。如果数据流条目包含了来源和去向,文件条目包含了读文件和写文件,还可以检查数据词典与数据流图的一致性。

3)加工逻辑的描述

加工逻辑也称为“小说明”。常用的加工逻辑描述方法有结构化语言、判定表和判定树3种。

  • 结构化语言

    

结构化语言(如结构化英语)是一种介于自然语言和形式化语言之间的半形式化语言,是自然语言的一个受限子集。
结构化语言没有严格的语法,它的结构通常可分为内层和外层。外层有严格的语法,内层的语法比较灵活,可以接近于自然语言的描述。
    


① 外层。用来描述控制结构,采用顺序、选择和重复3种基本结构。
    



a.顺序结构。一组祈使语句、选择语句、重复语句的顺序排列。祈使语句是指至少包含一个动词及一个名词,指出要执行的动作及接受动作的对象。
    




b. 选择结构。一般用IF-THEN-ELSE-ENDIF、CASE-OF-ENDCASE等关键词。
    




c.重复结构。一般用DO-WHILE-ENDDO、REPEAT-UNTIL等关键词。

    




② 内层。一般采用祈使语句的自然语言短语,使用数据字典中的名词和有限的自定义词,其动词含义要具体,尽量不用形容词和副词来修饰,还可使用一些简单的算法运算和逻辑运算符号。
  • 判定表。

    




在有些情况下,数据流图中某个加工的一组动作依赖于多个逻辑条件的取值。这时,用自然语言或结构化语言都不易于清楚地描述出来,而用判定表能够清楚地表示复杂的条件组合与应做的动作之间的对应关系。判定表由4个部分组成,用双线分割成4个区域,如下图所示:在这里插入图片描述
  • 判定树。
    




判定树是判定表的变形,一般情况下它比判定表更直观,且易于理解和使用。

未完待续。。。

更多知识传送:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

以上内容整理参考《软件设计师教程(第5版)》和《软件设计师考试同步辅导(第四版)》(忘记是哪个老师的了,侵删)。本文章内容旨在帮助更多想要进军软考,给自己镀金的小伙伴。有兴趣的小伙伴可以共勉。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

结构化开发方法--结构化分析方法 的相关文章

随机推荐

  • 华为eNSP实现外网访问内网,DHCP,easyIP配置案例

    一 需求分析 1 五个部门独立的网络管理 分别不同的VLAN 2 VLAN网关在SW1上 3 边界路由器R1与SW1通过三层互联 4 R1上配置转换技术实现VLAN10 20 40 50上网 财务部不许上网 5 R1上通过最节省IP地址方式
  • UE客户端开发需要哪些知识

    进行UE客户端开发需要以下知识 C 编程语言 UE客户端使用C 作为主要编程语言 因此需要对C 的语法 STL容器 面向对象编程等有深入的理解 Unreal Engine框架 了解UE框架的各个模块 例如Gameplay Framework
  • 单链表的基本操作-单链表的创建、插入、删除结点等

    序言 本文主要包括 1 单链表的创建 2 创建结点 3 打印结点 4 链表的插入 头插法 5 链表的删除 指定位置删除 适合新手初步认识学习单链表的基本操作 各个操作都在一起 也有注释 欢迎大家留言讨论 一 代码 include
  • 动态网站开发02:Java web

    动态网站开发02 一 前言 二 笔记 一 XML基础 1 XML概述 2 XML与HTML的比较 二 XML语法 1 XML文档的声明 2 XML元素的定义 3 XML属性的定义 4 XML注释的定义 5 XML文件示例 三 DTD约束 1
  • 爆肝近3万字解读:程序员必须掌握哪些算法?(含算法的代码实现)

    一个程序员一生中可能会邂逅各种各样的算法 但总有那么几种 是作为一个程序员一定会遇见且大概率需要掌握的算法 今天就来聊聊这些十分重要的 必抓 算法吧 一 引言 1 1 算法的重要性 算法的重要性体现在以下几个方面 解决问题 算法是解决问题的
  • 渗透测试工具备忘单

    https highon coffee blog penetration testing tools cheat sheet
  • @FeignClient使用详细教程(图解)

    FeignClient使用详细教程图解 作用 FeignClient标签的常用属性 使用流程 通俗解释可以把它当成一个spring Bean 可以直接当成一个Service 给 FeignClient 添加Header信息 作用 Feign
  • O2O B2B B2C C2C P2P 名词解释

    O2O O2O 是Online To Offline的缩写即在线离线 线上到线下 是指将线下的商务机会与互联网结合 让互联网成为线下交易的平台 这个概念最早来源于美国 O2O的概念非常广泛 既可涉及到线上 又可涉及到线下 可以通称为O2O
  • go time包

    定时器 在time包中有两个函数可以帮助我们初始化time Timer time Newtimer函数 初始化一个到期时间据此时的间隔为3小时30分的定时器 t time Newtimer 3 time Hour 30 time Minut
  • python使用matplotlib的pyplot库进行绘制堆叠直方图

    先上代码 2020 3 27 中国 CN 82213 184 75122 3301 3790 2020 3 27 英国 GB 14579 0 150 759 13670 2020 3 27 日本 JP 1507 0 359 51 1097
  • 我的python3.6、opencv安装环境搭建

    我需要使用tesseract OCR的模块 vs的配置有点麻烦 所以采用py的环境 搭建 1 在python org网站下载python3 6版本 我下载的3 6 8的python的安装 选存放的路径和把配置环境变量选项勾上否则需要自己配置
  • python爬虫经典案例,看完这一篇就够了

    urllib2 urllib2是Python中用来抓取网页的库 urllib2 是 Python2 7 自带的模块 不需要下载 导入即可使用 在python2 x里面有urllib和urllib2 在python3 x里面就把urllib和
  • 美云MES成长史:生于美的 长在美云智数

    每一种新技术的迭代 就犹如一次生命的洗礼 美云MES的成长 也经历过这种洗礼 2016年11月份 美云智数带着美的基因走上了创业之路 其5大产品体系16个Saas产品 不仅融合了深厚的技术底蕴 还继承了世界500强宝贵的实践经验 以跨界融合
  • 案例一:将 1-100 之间的所有正整数存放在一个 List 集合中,并将集合中索引位置是 10 的对象从集合中移除。

    package Homework 01 import java util ArrayList import java util List 将 1 100 之间的所有正整数存放在一个 List 集合中 并将集合中索引位置是 10 的对象从集合
  • CMakeLists编译静态库与动态库

    一 编写一个库 编写一个计算整数和浮点数之和的库函数mymath 文件目录 mymath h ifndef MYMATH H define MYMATH H int add int int double add double double
  • 关于idea 右键找不到Diagrams 按钮(类的继承关系图)

    在idea的setting的plugin里面已下载的找到JBoss 查看是否开启 如果没有开启 点击enable 后重启idea 即可
  • 用Python做兼职是如何挣钱的?

    我当时学习python大概有半年的时间 学的还可以 后面一个认识的朋友给我介绍了一点私活 当时接单赚了2K左右 后又自己接过开发网站后台接口 做数据处理等事情 七七八八的加起来也有一些收入 其实我学python也是凑巧 我本身是学电商的 后
  • 用例模型与概念模型的区别和联系

    1 首先研究它究竟是什么 what 三者的定义 用例 即use case 一种描述系统需求的方法 用例建模 使用用例的方法来描述系统需求的过程 概念模型 是现实世界到机器世界的一个中间层次 2 怎样关联的 how 分析业务过程 建立用例模型
  • 翻译:Attention Is All You Need

    摘要 主要序列转导模型基于包括编码器 encoder 和解码器 decoder 的复杂递归或卷积神经网络 性能最佳的模型还通过注意机制连接编码器和解码器 我们提出了一种新的简单网络架构 Transformer 完全基于注意机制 based
  • 结构化开发方法--结构化分析方法

    说在前面 本系列文章专注于软考备考复习内容梳理 文章内容是对教材中知识点和考点的提炼 备考过程中可以有针对的进行复习 减少阅读量 有的放矢 导航目录 一 结构化分析方法概述 二 数据流图 三 数据字典 DD 结构化分析与设计方法是一种面向数