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

简介: 笔记

3、映射需求到软件体系结构


(1)步骤


从映射需求到软件体系结构需要经过以下步骤:

  • 首先研究、分析和审查数据流图,对于发现的问题及时解决。
  • 然后根据数据流图决定问题的类型。数据处理问题典型的类型有两种**:变换型事务型**,针对这两种不同的类型分别进行分析处理。
  • 由数据流图推导出系统的初始结构图
  • 利用一些启发式原则改进系统的初始结构图,直到得到符合要求的结构图为止。
  • 修改和补充数据词典
  • 制定测试计划


(2)系统结构图中的模块


  • 传入模块 —— 从下属模块取得数据,经过某些处理,再将其传送给上级模块。它传送的数据流叫做逻辑输入数据流。
  • 传出模块 —— 从上级模块获得数据,进行某些处理,再将其传送给下属模块。它传送的数据流叫做逻辑输出数据流。
  • 变换模块 —— 它从上级模块取得数据,进行特定的处理,转换成其它形式,再传送回上级模块。它加工的数据流叫做变换数据流。
  • 协调模块 —— 对所有下属模块进行协调和管理的模块。

如下图所示:

1.png


(3)变换型系统结构图


变换型数据处理问题的工作过程大致分为三步,如下图所示:

2.png

相应于取得数据、变换数据、给出数据,变换型系统结构图由输入中心变换输出等三部分组成。

3.png


(4)事务型系统结构图


事务型系统接受一项事务,根据事务处理的特点和性质,选择分派一个适当的处理单元,然后给出结果

事务中心模块按所接受的事务的类型,选择某一个事务处理模块执行,各事务处理模块并列。

每个事务处理模块可能要调用若干个操作模块,而操作模块又可能调用若干个细节模块

4.png


(5)变换分析


1)变换分析方法由以下四部分组成:

  • 重画数据流图;
  • 区分有效(逻辑)输入、有效(逻辑)输出和中心变换部分;
  • 进行一级分解,设计上层模块
  • 进行二级分解,设计输入输出中心变换部分中、下层模块

如图所示:

5.png

2)注意点

  • 在选择模块设计的次序时,必须对一个模块的全部直接下属模块都设计完成之后,才能转向另一个模块的下层模块的设计。
  • 在设计下层模块时,应考虑模块的耦合内聚问题,以提高初始结构图的质量。
  • 使用“黑箱”技术:在设计当前模块时,先把这个模块的所有下层模块定义成“黑箱”,在下一步就可以对它们进行设计和加工。这样,又会导致更多的“黑箱”。最后,全部“黑箱”的内容和结构应完全被确定。
  • 在模块划分时,一个模块的直接下属模块一般在5个左右。如果直接下属模块超过10个,可设立中间层次。


(6)事务分析


在很多软件应用中,存在某种作业数据流,它可以引发一个或多个处理,这些处理能够完成该作业要求的功能,这种数据流就叫做事务

变换分析一样,事务分析也是从分析数据流图开始自顶向下逐步分解建立系统的结构图

如下图所示:

6.png


(7)混合结构


变换分析是软件系统结构设计的主要方法。

一般来说,一个大型的软件系统是变换型结构和事务型结构的混合结构。

所以,我们通常利用以变换分析为主事务分析为辅的方式进行软件结构设计。

如下图所示:

7.png8.png


(8)软件模块结构的改进


1)模块功能的完善化

一个完整的模块应当有以下部分:

  • 执行所规定功能的部分;
  • 出错处理的部分。当模块不能完成所规定的功能时,必须回送出错标志,出现例外情况的原因。

2)消除重复功能,改善软件结构

  • 完全相似: 在结构上完全相似,可能只是在数据类型上不一致。此时可以采取完全合并的方法。
  • 局部相似: 找出其相同部分分离出去,重新定义成一个独立的下一层模块。还可以与它的上级模块合并。

如图所示:

9.png

3)模块的作用范围应在控制范围之内

  • 模块的控制范围包括它本身及其所有的从属模块。
  • 模块的作用范围是指模块内某一个判定的作用范围,凡是受这个判定影响的所有模块都属于这个判定的作用范围。
  • 如果一个模块的作用范围包含在控制范围之内,则这种结构是简单的,否则,它的结构是不简单的。

4)尽可能减少高扇出、高扇入结构

如果扇出数过大,就意味着该模块过分复杂,需要协调和控制过多的下属模块。应当适当增加中间层次的控制模块。

如图所示:

10.png

5)避免或减少使用病态联接

  • 直接病态联接。  模块A 直接从 模块B 内部取出某些数据,或者把某些数据直接送到 模块B 内部。
  • 公共数据域病态联接。  AB 通过公共数据域,直接传送或接受数据,而不是通过它们的上级模块。这种方式将使得模块间的耦合程度剧增。它不仅影响 模块A模块B ,同时也影响与公共数据域有关联的所有模块。
  • 通信模块病态联接。模块A模块B 通过通信模块 TABLEIT 传送数据。从表面看,这不是病态联接,因为 模块A模块B 都未涉及通信模块 TABLEIT 的内部。 然而,它们之间的通信没有通过它们的上级模块。从这个意义上来讲,这种连接是病态的

如图所示:

11.png

6)模块的大小要适中

  • 模块的大小,可以用模块中所含语句数量的多少来衡量。
  • 把模块的大小限制在一定的范围之内。通常规定其语句行数在50~100左右,保持在一页纸之内,最多不超过500行。


五、📊数据库设计



1、数据模式需满足的条件


建立一个数据模式,必须满足的几个条件:

  • 符合用户的要求。
  • 与所选用的 DBMS 所支持的数据模式相匹配。
  • 数据组织合理,应易操作,易维护,易理解。


2、数据的规范化形式


(1)非规范化形式示例


12.png


(2)数据的规范化形式


  • 在任一列上,数据项应该具有同一个属性
  • 在这个表中所有的行都是不相同的,即不允许有重复的组项出现。
  • 在一个表中,行的顺序是无关紧要的。
  • 在一个表中,每一个列(属性)有不同的名称,列的顺序也无关紧要。


(3)数据库的三大范式


1)第一范式: 消除组合项

2)第二范式: 消除非主属性对主关键字的不完全依赖性

3)第三范式: 消除传递依赖


六、📌处理过程设计



1、处理过程设计是什么?


从软件开发的工程化观点来看,在编制程序以前,需要对所采用算法的逻辑关系进行分析,设计出全部必要的过程细节,并给予清晰的表达。这就是过程设计的任务。


2、处理过程设计的方法


在过程设计阶段中,需要要决定各个模块的实现算法,并精确地表达这些算法。而表达过程规格说明的工具叫做详细设计工具,它可以分为 图形工具表格工具语言工具 三大类。那么处理过程设计主要有以下四种方法

  • 程序流程图
  • N-S盒图
  • PAD问题分析图
  • 伪代码


(1)程序流程图


程序流程图也称为程序框图,程序流程图使用五种基本控制结构,分别是:

13.png

程序流程图的示例图如下图所示:

14.png


(2)N-S图(盒图)


N-S图也叫做盒图,其五种基本控制结构由五种图形构件表示,分别是:

15.png

盒图的示例图如下图所示:

16.png

N-S图的嵌套定义形式:

17.png


(3)问题分析图(PAD)


PAD也设置了五种基本控制结构的图式,并允许递归使用。分别是:

18.png

问题分析图(PAD)的示例图如下图所示:

19.png


(4)伪代码


1)伪代码是什么

伪代码,及程序设计语言,也称 PDL (Program Design Language) 。

PDL 是一种用于描述功能模块的算法设计加工细节的语言,称为程序设计语言,它是一种伪码。

伪码的语法规则分为“外语法”和“内语法”。

PDL 具有严格的关键字外语法,用于定义控制结构数据结构,同时它表示实际操作和条件的内语法时可使用自然语言的词汇。

2)PDL的特点

  • 提供全部结构化控制结构、数据说明和模块特征。能对 PDL 正文进行结构分割,使之变得易于理解。
  • 为了区别关键字,规定关键字一律大写其它单词一律小写。或者规定关键字加下划线,或者规定它们为黑体字。
  • 内语法使用自然语言来描述处理特性。内语法比较灵活,只要写清楚就可以,不必考虑语法错误,以利于人们可把主要精力放在描述算法的逻辑上
  • 有数据说明机制,包括简单的(如标量和数组)与复杂的(如链表和层次结构)的数据结构。
  • 有子程序定义与调用机制,用以表达各种方式的接口说明。

3)举例

比如:示范一个拼词检查程序,流程如下代码所示,请写出该程序的伪代码。

PROCEDURE spellcheck IS    
BEGIN
  split document into single words 
  look up words in dictionary 
  display words which are not in dictionary 
  create a new dictionary 
END spellcheck
复制代码

Answer:

使用 PDL 语言,逐步求精:

PROCEDURE spellcheck
BEGIN
  --* split document into single words
  LOOP get next word
    add word to word list in sortorder
    EXIT WHEN all words processed
  END  LOOP
    --* look up words in dictionary
    LOOP get word from word list
       IF word not in dictionary THEN
      --* display words not in dictionary
          display word
        prompt on user terminal
            IF user response says word OK THEN
              add word to good word list
            ELSE
              add word to bad word list
            ENDIF
          ENDIF
          EXIT WHEN all words processed
  END LOOP
    --* create a new words dictionary
    dictionary :=
    merge dictionary and good word list
END spellcheck
复制代码


七、💡界面设计



界面设计也称为接口设计,需了解3条黄金规则:

  • 用户控制界面;
  • 减轻用户记忆负担;
  • 保持界面一致。


八、写在最后



从结构化系统分析到结构化系统设计,我们解决了 从软件“做什么”到软件“怎么做” 的问题。相信大家对结构化系统设计的内容也有了一个新的了解🙋

结构化系统设计的内容就讲到这里啦!


相关文章
|
存储 算法 搜索推荐
一文探究系统分析与设计的逻辑性
「软件分析」与「软件设计」这样的词眼经常听到,然而要真正理解「软件分析」和「软件设计」的本质是比较难的,本文带你了解软件分析与设计的「逻辑性」到底是什么。
1028 24
|
2月前
|
自然语言处理 算法 JavaScript
『软件工程11』结构化系统设计:解决软件“怎么做”问题
该文章讲述了结构化系统设计的核心理念与实践方法,旨在解决软件开发过程中“怎么做”的问题,并涵盖了设计原则、模块化、信息隐藏、耦合与内聚等关键概念。
『软件工程11』结构化系统设计:解决软件“怎么做”问题
|
2月前
|
存储 自然语言处理 安全
『软件工程9』结构化系统分析——解决软件“做什么”问题
该文章深入讲解了结构化系统分析方法,用于明确软件需求和解决软件“做什么”的问题,并介绍了在此过程中使用的工具和技术。
『软件工程9』结构化系统分析——解决软件“做什么”问题
|
3月前
|
安全 算法 网络安全
【第五章】软件设计师 之 系统安全分析与设计
软件设计师 之 系统安全分析与设计备考资料
【第五章】软件设计师 之 系统安全分析与设计
|
4月前
|
数据库
系统分析与设计问题之什么是软件分析和软件设计
系统分析与设计问题之什么是软件分析和软件设计
|
4月前
|
测试技术
系统分析与设计问题之软件开发中的“分析阶段”是否只限于软件行业
系统分析与设计问题之软件开发中的“分析阶段”是否只限于软件行业
|
6月前
|
存储 安全 算法
【软件设计师备考 专题 】软件设计的艺术:分析与集成、逐步求精、抽象、信息隐蔽
【软件设计师备考 专题 】软件设计的艺术:分析与集成、逐步求精、抽象、信息隐蔽
114 0
下一篇
无影云桌面