『软件工程9』结构化系统分析——解决软件“做什么”问题

结构化系统分析——解决软件“做什么”问题

  • 一、系统分析的任务和过程
    • 1、系统分析的任务
    • 2、系统分析的过程
      • (1)问题识别
      • (2)分析与综合
      • (3)编制文档
      • (4)系统分析评审
  • 二、结构化分析方法
    • 1、结构化分析方法是什么?
    • 2、结构化分析方法使用的工具
      • (1)数据流图 (Data Flow Diagram, DFD)
      • (2)数据字典 (Data Flow Diagram, DFD)
      • (3)结构化英语 (Data Flow Diagram, DFD)
      • (4)判定表 (Data Flow Diagram, DFD)
      • (5)判定树 (Data Flow Diagram, DFD)
  • 三、动态分析方法
    • 1、为什么需要系统动态分析方法?
    • 2、最常用的动态分析方法
      • (1)状态迁移图
      • (2)时序图
  • 四、写在最后

我们都知道软件是什么,但有时候会止步于软件要“做什么”的问题。在下面这篇文章中,我们将从结构化系统分析的角度出发,来解决软件“做什么”的问题。

一、系统分析的任务和过程

1、系统分析的任务

借助当前系统的逻辑模型,去导出目标系统的逻辑模型,解决目标系统“做什么”的问题。

系统分析的任务

2、系统分析的过程

统分析的过程包含以下四个步骤:

  • 问题识别
  • 分析与综合
  • 编制文档
  • 系统分析评审

接下来将对这四个步骤进行一一讲解。

(1)问题识别

1) 从系统的角度来理解软件并评审软件范围是否恰当。

2) 确定软件的需求,即提出这些需求应实现的条件,和这些需求应达到的标准

软件的需求包括:

  • 功能需求(最重要,功能是一切需求的根本)
  • 性能需求
  • 环境需求
  • 可靠性需求
  • 资源使用需求
  • 成本消耗需求
  • 开发进度需求
  • 用户界面需求
  • 安全保密需求(经常会被遗漏的需求)

3) 建立通信路径。建立和分析所需要的通信路径,以保证能顺利地对问题进行分析。

通信路径

(2)分析与综合

1) 逐步细化软件功能,找出系统各元素间联系接口特性设计上的约束,分析是否满足功能要求,是否合理

2) 剔除不合理部分,增加其需要部分。最终综合成系统的解决方案,给出目标系统的详细逻辑模型(核心:建立逻辑模型)

3)常用的分析方法

  • 面向数据流的结构化分析方法 (SA)
  • 面向数据结构Jackson 方法 (JSD)
  • 面向数据结构的结构化数据系统开发方法 (DSSD)
  • 面向对象的分析方法 (OOA)

(3)编制文档

  • 软件需求说明书;
  • 数据要求说明书;
  • 初步的用户手册;
  • 修改、完善与确定软件开发实施计划。

(4)系统分析评审

系统分析的评审内容主要有以下内容:

  • 系统定义的目标是否与用户的要求一致

  • 系统需求分析阶段提供的文档资料是否齐全

  • 文档中的所有描述是否完整、清晰、准确反映用户要求;

  • 与所有其它系统成分的重要接口是否都已经描述;

  • 被开发项目的数据流数据结构是否足够;

  • 所有图表是否清楚,在不补充说明时能否理解;

  • 主要功能是否已包括在规定的软件范围之内,是否都已充分说明;

  • 设计的约束条件限制条件是否符合实际;

  • 开发的技术风险是什么;

  • 是否考虑过软件需求的其它方案

  • 是否考虑过将来可能会提出的软件需求;

  • 是否详细制定了检验标准,它们能否对系统定义是否成功进行确认;

  • ……

二、结构化分析方法

1、结构化分析方法是什么?

  • 结构化分析方法是一种面向数据流进行需求分析的方法;
  • 适用于数据处理类型 (MIS) 软件的需求分析;
  • 抽象模型的概念,按照软件内部数据传递变换的关系,自顶向下逐层分解,直到满足所有功能要求为止。(自顶向下逐层分解是结构化分析的基本思路)

2、结构化分析方法使用的工具

结构化分析所使用的工具主要有五种:

  • 数据流图 (DFD)
  • 数据字典 (DD)
  • 结构化英语 (Structured English)
  • 判定表 (Decision Table)
  • 判定树 (Decision Tree)

接下来将对这五种工具进行一一介绍。

(1)数据流图 (Data Flow Diagram, DFD)

1)作用

  • 数据流图是组织中信息运动的抽象,是信息系统逻辑模型的主要形式,是分析人员与用户进行交流的有效手段,也是系统设计的依据之一。
  • 简单来说,数据流图是用一种图形及与图形相关的注释来表示系统的逻辑功能。

2)主要图形元素

数据流图主要图形元素为以下四种。圆圈代表数据加工,矩形代表外部实体,箭头代表数据流,“椅子”形状图形代表数据存储文件。

主要图形元素

了解完数据流图的主要图形元素,再来了解这四种主要图形元素常用的三种符号。

常用的三种数据流图基本成分的符号

讲到这里,相信大家都对数据流图的主要图形元素有了一定的了解,那么我们继续来对这四个元素的含义做个归纳。

  • 外部项(外部实体): 外部项在数据流图中表示所描述系统的数据来源去处的各种实体或工作环节。系统开发不能改变这些外部项本身的结构和固有属性。
  • 加工(数据加工): 又称数据处理逻辑,描述系统对信息进行处理的逻辑功能。
  • 数据存储: 逻辑意义上的数据存储环节,即系统信息处理功能所需要的、不考虑存储物理介质和技术手段的数据存储环节。
  • 数据流: 与所描述系统信息处理功能有关的各类信息的载体,是各加工环节进行处理和输出的数据集合。

介绍完具体的主要图形元素,我们还要思考一个问题:这些图形要怎么连接才是合理的?是不是只有有随意一个图形出现就可以了?那结果自然是否定的。这就引出了我们应该要注意的一个问题:数据流图的规范。 具体内容如下:

DFD中允许的数据流:
实体 -> 加工;加工 -> 实体;加工 -> 加工;加工 -> 存储;存储 -> 加工。

DFD中不允许的数据流:
实体 -> 实体;实体 -> 存储;存储 -> 实体;存储 -> 存储。

总结: 所有的数据流都要有加工,任意一个没有经过加工的数据流都是不规范的。
注意: 所有数据流信息都要标注,除了加工与存储相连时传递的信息刚好是数据存储的内容(可省略),其它一律不可以。

3)数据流图的层次结构

  • 为了表达数据处理过程的数据加工情况,需要采用层次结构的数据流图。
  • 按照系统的层次结构进行逐步分解,以分层的数据流图反映这种结构关系,能清楚地表达和容易理解系统。
  • 在多层数据流图中,顶层流图仅包含一个加工,它代表被开发的系统。它的输入流是该系统的输入数据,输出流是系统所输出的数据。除顶层数据流图外,其他数据流图从零开始编号。
  • 中间层流图则表示对其上层父图的细化。它的每一加工可能继续细化,形成子图。
  • 底层流图是指其加工不需再做分解的数据流图,它处在最底层

数据流图的层次结构

4)检查和修改数据流图的原则

  • 数据流图上所有图形符号只限于上述四种基本图形元素。
  • 数据流图的主图必须包括上述四种基本元素缺一不可
  • 数据流图的主图上的数据流必须封闭在外部实体之间。
  • 每个加工至少有一个输入数据流一个输出数据流,而且所有的数据流都要经过加工
  • 在数据流图中,需按照层次给加工框编号,编号表明该加工所处层次及上下层的亲子关系;有一种特殊情况就是,顶层图的加工可以不用加编号
  • 当数据流图只有一个加工时,可以不考虑存储,但当数据流图有多个加工时,一定要考虑存储
  • 规定任何一个数据流子图必须与它上一层的一个加工对应,两者的输入数据流和输出数据流必须一致,即父图与子图的平衡
  • 图上每个元素都必须有名字
  • 数据流图中不可夹带控制流。

5)错误实例
我们来看几个错误实例。
错误实例1
错误原因: 布局不够合理,实体应该在四周,加工在中间。


错误实例2 错误原因: 数据流图画的像数据流程图。


错误实例3
错误原因: 数据流没有标注,加工项没有编号。


错误实例4
错误原因: 加工项出现名词。


错误实例5
错误原因: 加工项只有输入没有输出。


错误实例6

错误原因: 没有数据存储。


错误实例7
错误原因: 实体与数据存储相连,所有的实体和存储都必须经过加工。

6)数据流图的局限性

只能给出系统逻辑功能的一个总框架,缺乏详细、具体的内容。
7)案例分析

关于数据流图的案例分析放在下一篇文章中,大家可以根据自身需求进行查看。

(2)数据字典 (Data Flow Diagram, DFD)

1)作用

数据字典对数据流图中的各种成分起注解说明作用,给这些成分赋以实际的内容。

数据字典与数据流图配合,能清楚地表达数据处理的要求。

条目:数据流、数据元素、数据存储、数据加工、外部实体

2)条目

数据字典有五个条目,即数据流图 DFD 的四要素 + 数据元素,分别是 数据流数据元素数据存储数据加工外部实体

具体图例如下:

条目一:数据流

条目一:数据流

条目二:数据元素

条目二:数据元素

条目三:数据存储

条目三:数据存储

条目四:数据加工

条目四:数据加工

条目五:外部项

条目五:外部项

3)数据结构的符号描述

符号含义举例
=被定义为x=a
+x=a+b
[…,…]或[…|…]x = [a , b],x = [a|b]
{ … }或 m{…}n重复x = {a}, x = 3{a}8
(…)可选x = (a)
“…”基本数据元素x = “a”
连结符x = 1…9

4)案例分析

关于数据字典的案例分析放在下一篇文章中,大家可以根据自身需求进行查看。下面将结构化英语。

在讲结构化英语之前,我们需要先来了解一个知识点。

对于数据流图的每一个基本加工,都必须要有一个基本加工逻辑说明,那么基本加工逻辑说明是什么呢?基本加工逻辑说明是用来描述基本加工如何把 输入数据流 变换为 输出数据流 的加工规则。且用于写基本加工逻辑说明的工具主要有 结构化英语判定表判定树 ,所以说 结构化英语 是一个用来写基本加工逻辑说明的工具。

了解完这个知识点后,我们开始来看结构化英语是什么吧!

(3)结构化英语 (Data Flow Diagram, DFD)

1)结构化英语是什么

  • 结构化英语就是一种基本加工逻辑说明的方法。
  • 结构化英语是一种介于自然语言形式化语言之间的语言。
  • 语言的正文用基本控制结构进行分割,加工中的操作用自然语言短语来表示。

2)结构化英语的词汇表构成

  • 英语命令动词;
  • 数据词典中定义的名字;
  • 有限的自定义词;
  • 逻辑关系词 IF_THEN_ELSECASE_OFWHILE_DOREPEAT_UNTIL 等组成。

3)常见基本控制结构

  • 顺序结构;
  • 重复结构while_dorepeat_until 结构;
  • 判定结构:if_then_elsecase_of 结构。

4)案例:商店业务处理系统中”检查发货单“

if 发货单金额超过$500 thenif 欠款超过了60天 then在偿还欠款前不予批准else //(欠款未超期)发批准书,发货单      
else //(发货单金额未超过$500if 欠款超过60天 then发批准书,发货单及赊欠报告else //(欠款未超期)发批准书,发货单      

(4)判定表 (Data Flow Diagram, DFD)

1)使用条件

如果数据流图的加工需要依赖于多个逻辑条件的取值,使用判定表来描述比较合适。

2)图例

条件桩条件项

3)案例剖析

案例一:检查发货单

判定表-检查发货单

大家可以看到,在上图中,左上角的地方是条件,也称为条件桩。而因为条件引发的操作/动作,即左下角部分,称为动作桩。

有了条件桩和动作桩以后,它们有一一对应的数据。条件桩对应条件项,动作桩对应动作项,即右上角和右下角部分。

案例二:旅游预订票系统“计算折扣量”

判定表-旅游管理系统

同样的,与依据案例一的例子同样判断。上面是条件桩和条件项,下面是动作桩和动作项。

(5)判定树 (Data Flow Diagram, DFD)

1)使用条件

判定树也是用来表达加工逻辑的一种工具,有时侯它比判定表更直观

2)案例剖析

同样,我们依据判定表的两个例子来做成判定树。

案例一:检查发货单

判定树-检查发货单

案例二:旅游预订票系统“计算折扣量”

判定树-旅游管理系统

从上面两张图中可以看到,判定树相较于判定表来说会更加直观

三、动态分析方法

1、为什么需要系统动态分析方法?

  • 系统的需求规格说明通常是用自然语言来叙述的,但是用自然语言描述往往会出现歧义性

  • 因此,为了直观地分析系统的动作,从特定的视角出发去描述系统的行为,需要采用动态分析的方法。

2、最常用的动态分析方法

(1)状态迁移图

1)状态迁移图是什么?

状态迁移图,即 State Transition Diagram,缩写为 STD 。状态迁移图是描述系统的状态如何使外部的信号进行推移的一种图形表示。

2)状态迁移图的表示方式

  • 圆圈 表示可得到的系统状态。
  • 箭头 表示从一种状态向另一种状态的迁移。

3)案例剖析:CPU进程的状态迁移

假设某个系统当前有多个状态申请占用CPU运行的进程, 其中CPU所分配进程的状态迁移如下。

状态迁移图

由上图可分析出状态迁移图,状态迁移表以及相对应的状态,如下图所示。

状态迁移相应状态表示

4)状态迁移图的优点

  • 状态之间的关系能够直观地被捕捉到。

  • 由于状态迁移图的单纯性,能够机械地分析许多情况,可很容易地建立分析工具。

(2)时序图

1)时序图是什么?

时序图 (Sequence Diagram) ,又名序列图、循序图,是一种 UML 交互图。它通过描述对象之间发送消息的时间顺序来显示多个对象之间的动态协作。

2)案例剖析:功能事件

在下图中, 对于事件 e , 功能1~功能3 的处理时间总计为 (T1+T2+T3) ,其中功能间切换时间为 0

功能事件

3)案例剖析:进程间的通信流

在下图中,采用扩充时序图可表示进程间的通信流,用于分析几个事件的交错现象。 C1C2R1R2 是交错的。因此,可以做如下分析:“ HOST1 在等待 C1 的回答时(即 R1 期间),要能接收从 HOST2 发出的命令 C2 。”
进程间的通信流

四、写在最后

对于软件工程中的结构化系统分析来说,主要解决软件“做什么”的问题。特别是关于数据流图和数据字典的内容较多,学完要多消化总结。同时我也将在下一篇文章讲解关于数据流图与数据字典的一些案例分析。

关于软件工程的结构化系统分析就讲到这里啦!如有需要了解软件工程相关的其他内容,可到『软件工程』栏目进行查看学习~

如有不理解或有误的地方也欢迎评论区评论或私信我交流~

  • 关注公众号 星期一研究室 ,不定期分享学习干货,学习路上不迷路~
  • 如果这篇文章对你有用,记得点个赞加个关注再走哦~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/308017.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET5.0 Preview 8 开箱教程

.NET5.0 Preview 8 开箱教程前言首先,看到 .NET5.0 Preview 8 发布后,作为一枚基层应用开发人员,很想要体验一下新版本的魅力;这可能就是程序员对新技术的一种执着吧。其实从官方宣布 .NETCore 将更名为 .NET5 开始,我…

leetcode977. 有序数组的平方(暴力+双指针)

一:题目 二:暴力双指针 1:暴力 class Solution { public:vector<int> sortedSquares(vector<int>& nums) {vector<int> v;for(int num : nums){int temp pow(num,2);v.push_back(temp);} sort(v.begin(),v.end());return v;} };2:双指针 思路:1.利…

『软件工程10』结构化系统分析:数据流图和字典案例分析

结构化系统分析——数据流图和数据字典案例分析一、数据流图案例分析1、案例1&#xff1a;商店业务管理系统2、案例2&#xff1a;学籍管理系统3、案例3&#xff1a;大型企业数据中心二、数据字典案例分析1、案例1&#xff1a;学籍管理系统三、写在最后接 上一篇文章的内容&…

MongoDB最新4.2.7版本三分片集群修改IP实操演练

背景重新组网&#xff0c;需要对现有MongoDB分片集群服务器的IP进行更改&#xff0c;因此也需要对MongoDB分片集群的IP也进行相应的更新&#xff0c;而MongoDB分片集群的IP修改不能单纯的通过配置来进行&#xff0c;需要一番折腾后才能正常更新&#xff0c;这里对整个MongoDB集…

浅谈Web前端安全策略xss和csrf,及又该如何预防?

Web前端安全策略xss和csrf的攻击和防御一、XSS跨站请求攻击1、什么是XSS2、场景模拟3、XSS的攻击类型4、如何防御XSS二、XSRF跨站请求伪造1、什么是csrf2、场景模拟&#xff08;1&#xff09;场景一&#xff08;2&#xff09;场景二3、CSRF的特点4、CSRF攻击方式5、CSRF常见的攻…

leetcode209. 长度最小的子数组(暴力+滑动窗口)

一:题目 二:暴力滑动窗口 1:暴力解法 class Solution { public:int min (int a ,int b){return a < b ? a : b;}int minSubArrayLen(int target, vector<int>& nums) {int minx 100001;for(int i 0; i < nums.size(); i){vector<int> v;int sum nu…

做权限认证,还不了解IdentityServer4?不二话,赶紧拥抱吧,.NET Core官方推荐!...

目前大多数的应用程序或多或少看起来是上图所示这样的&#xff0c;最常见的交互场景有&#xff08;浏览器与Web应用程序、Web应用程序与WebApi通讯、本地应用程序狱WebApi通讯、基于浏览器的应用程序与WebApi 通讯、基本服务器的应用程序与WebApi通讯、WebApi与WebApi通讯&…

leetcode 904:水果成篮(滑动窗口)

一:题目 二:思路 1.用两个篮子装进两个数&#xff0c;后面只能装入这两个相同的数,并统计个数;如果遇到其他数,则重新开始计数&#xff0c; 这里的重新开始计数指的是在去除第一个篮子中所装进的数 2.滑动窗口来做 滑动窗口的起始位置为:数组的起始位置 滑动体为 统计的个数 滑…

真・WPF 按钮拖动和调整大小

真・WPF 按钮拖动和调整大小独立观察员 2020 年 8 月 29 日手头有个 Winform 程序&#xff0c;是使用动态生成按钮&#xff0c;然后拖动、调整大小&#xff0c;以此来记录一些坐标数据&#xff0c;最后保存坐标数据的。在数据量&#xff08;按钮数量&#xff09;比较小的时候是…

『软件工程11』结构化系统设计:解决软件“怎么做”问题

结构化系统设计——解决软件“做什么”问题一、设计的目标和任务1、目标2、任务3、开发阶段的信息流4、软件设计的重要性5、软件设计的技术观点和管理观点二、设计基础1、结构图&#xff08;体系结构图、模块结构图&#xff09;&#xff08;1&#xff09;分析结构图三者间的关系…

map容器中删除一个元素(value)

一:问题描述 我们想要删除map容器中&#xff0c;一个key值对应的vlaue 二&#xff1a;上码 #include<iostream> #include<map> #include<vector> using namespace std; int main(){map<int,int> m;for(int i 0; i < 4; i){m[i] i1;}//正常输出 …

.Net5发布在即,当心技术断层!

就在上周&#xff0c;.NET5的最后一个预览版&#xff0c;.NET5 Preview.8发布了&#xff0c;更新内容只有几个小bug的修复&#xff0c;已完成.NET5正式版的最后准备&#xff0c;.NET5即将正式面世&#xff01;时光荏苒&#xff0c;回首2016年发布.NET Core1.0至今&#xff0c;已…

『软件测试4』耗子尾汁!2021年了,你还不知道这4种白盒测试方法吗?

软件测试——详解白盒测试基本概念&#xff0c;四种白盒测试方法一、白盒测试基本概念1、白盒测试的定义2、白盒测试的测试对象3、白盒测试的原则4、白盒测试的分类二、静态白盒测试1、代码检查法&#xff08;1&#xff09;代码审查的定义&#xff08;2&#xff09;代码审查的目…

leetcode76:最小覆盖字串(滑动窗口)

一&#xff1a;题目 二:思路 思路拿别人的&#xff0c;感觉写的很nice!! 渣渣杰只能膜拜大佬的了 1.滑动窗口的思想&#xff1a; left 指针和 ring 指针&#xff0c;保证两个指针之间的字符串包含所需要的全部字符。 2在保证 1 的前提下&#xff0c; 向右移动 left&#x…

Orleans 知多少 | Orleans 中文文档上线

Orleans 简介Orleans是一个跨平台框架&#xff0c;用于构建健壮&#xff0c;可扩展的分布式应用程序Orleans建立在.NET开发人员生产力的基础上&#xff0c;并将其带入了分布式应用程序的世界&#xff0c;例如云服务。Orleans可从单个本地服务器扩展到云中全局分布的高可用性应用…

『软件工程12』软件工程实践方法——软件测试

软件工程实践方法—— 软件测试一、软件测试概述1、软件测试的目的&#xff08;1&#xff09;从用户和开发者角度&#xff08;2&#xff09;Myers软件测试目的2、软件测试的原则3、软件测试的对象4、测试信息流5、测试与软件开发各阶段的关系二、软件测试用例1、黑盒测试概述2、…

leetcode59:螺旋矩阵||(思路+详解)

一:题目 二&#xff1a;思路 1.我们需要模拟数字的变化过程, 2.模拟填充的过程:(顺时针) 填充上行 从左到右 填充右行 从上到下 填充下行 从右向左 填充左行 从下到上 3.分析我们填充数字的过程&#xff0c;比如n3的时候 上行:1,2 右行:3,4 下行:5,6 左行:7,8 这么分析下来我们…

在香蕉派的树莓派系统上配置 Syncthing 自启动(暨 Linux 软件自启服务配置)

在香蕉派的树莓派系统上配置 Syncthing 自启动独立观察员 2020 年 1 月 19 日&#xff08;2020年8月30日 更新&#xff09;首先做个名词解释&#xff0c;” 香蕉派” 是国内一款山寨树莓派的硬件产品&#xff0c;” 树莓派系统” 指的是”raspberrypi”&#xff0c;而”Syncthi…

『软件工程13』浅谈面向对象方法,统一建模语言UML

浅谈面向对象方法UML一、UML的含义二、UML的主要内容1、UML的概念模型2、UML概念模型图例三、UML的基本构造块1、UML中的事物&#xff08;1&#xff09;UML中的四种事物&#xff08;2&#xff09;UML中各种事物的图示法2、UML中的四种关系&#xff08;1&#xff09;依赖&#x…

leetcode54:螺旋矩阵

一:题目 二&#xff1a;上码 class Solution { public:vector<int> spiralOrder(vector<vector<int>>& matrix) {vector<int> ans;int startx 0,starty 0;int n matrix.size();//求出行int m matrix[0].size();//求出列int loop m/2 < n/…