目录

软件工程复习第3章

软件工程复习——第3章

目录


本文总结于《软件工程——原理、方法与应用》第三版


第三章 结构化分析与设计

1. 结构化分析与设计

SP(结构化程序设计)->SD(结构化设计)->SA(结构化分析)

讨论传统软件工程的系统开发技术,重点放在基于瀑布模型的结构化分析与设计和模块设计上,但不涉及同为传统软件工程的快速原型开发等内容。

2. SA与SD的流程

结构化分析工具DFD数据流图PSPEC加工策略->分析模型分层DFD图+SRS软件需求规格说明书
结构化设计工具SC图映射->初始设计模型初始SC图
初始设计模型初始SC图优化->最终设计模型最终SC图

3. 基本任务与指导思想

结构化分析
	·建立分析模型
	·编写需求说明
结构化设计
	·软件设计=总体设计+详细设计
	·SC图需要分两步完成:初始SC图、最终SC图
细化与分解
	逐步细化,细化的本质就是分解

4. SA模型的组成与描述

SA模型的描述工具:

·DFDPSPEC这是早期SA模型的基本组成部分
·CFDCSPEC和STD是早期SA模型的扩展成分适应实时软件的建模需要
·ER图适用于描述具有复杂数据结构的软件数据模型

备注:DFD数据流图、PSPEC加工规格说明/加工策略、STD状态转换图、DD数据字典、CSPEC控制规格说明

https://i-blog.csdnimg.cn/blog_migrate/5f6107334e98b8b3e6ee861393ee0a89.png

  • 数据流图(DFD)

    指明数据在系统中移动时如何被变换,描述对数据流进行变换的功能和子功能;

    数据流图(DFD)是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。

    https://i-blog.csdnimg.cn/blog_migrate/772a90bacc62f1174f3178d7aa2eb2e8.png

    组成符号:

·圆框代表加工
·箭头代表数据的流向数据名称总是标在箭头的边上
·方框表示数据的源点和终点
·双杠或单杠表示数据文件或数据库
·文件与加工之间用带箭头的直线连接单向表示只读或只写双向表示又读又写

https://i-blog.csdnimg.cn/blog_migrate/202f68c2afb3dd4b26c60da651b25f70.png

  • 数据字典(DD)

·数据字典的任务:对于数据流图中出现的所有被命名的图形元素在字典中作为一个词条加以定义,使得每一个图形元素的名字都有一个确切的解释。

·对软件中的每个数据规定一个定义条目

·①数据流

https://i-blog.csdnimg.cn/blog_migrate/53b473b4c192c1b379e3ad3102a39e1a.png

·②数据文件

·③数据项

数据流图与数据字典共同构成系统的逻辑模型

  • 加工说明(PSPEC)

·对数据流图中出现的每个加工/处理的功能描述

·主要工具:结构化语言,判定树或判定表

https://i-blog.csdnimg.cn/blog_migrate/85fae9045c60602a3f4c3b1ea4a76d90.png

5. SD模型的组成与描述

·包含数据设计、接口设计、过程设计、体系结构设计

·体系结构设计是用来确定软件结构的,其描述工具是结构图,简称SC图

·过程设计主要指模块内部的详细设计

https://i-blog.csdnimg.cn/blog_migrate/fc51a270f749c10f8ac2c17fcb22f7d7.png

·SC图组成符号和模块调用关系的标识

·矩形框表示模块,带箭头的连线表示模块间的调用,并在调用线的两旁标出传入和传出模块的数据流

简单调用、选择调用、循环调用

https://i-blog.csdnimg.cn/blog_migrate/e316e7117ec79e4275adff748904acde.png

例 :在模块A的箭头尾部标以一个菱形符号,表示模块A有条件地调用另一个模块B,当一个在调用箭头尾部标以一个弧形符号,表示模块A反复调用模块C和模块D。

https://i-blog.csdnimg.cn/blog_migrate/32614eb2e347c1255e9234204695e6d1.png

程序的系统结构图

https://i-blog.csdnimg.cn/blog_migrate/da610f3df4d6b6676db22e7d09977f8b.png

6. 结构化系统分析

·结构化分析的基本步骤:

· 自顶向下 对系统进行功能分解,画出分层DFD图

· 由后向前 定义系统的数据和加工,编制DD和PSPEC

·最终写出SRS

画分层数据流图:(自顶向下,逐步细化)

好处:便于实现,便于使用

顶层DFD:

通常把整个系统当作一个大的加工标明系统的输入与输出,以及数据的源点与终点(统称为“外部项”)

https://i-blog.csdnimg.cn/blog_migrate/867bcd2f4fef5dee8aef8d0464148904.png 第二层DFD:

https://i-blog.csdnimg.cn/blog_migrate/8b30e6a7952528d8efd6b4dcfd2ab650.png 第三层DFD:

https://i-blog.csdnimg.cn/blog_migrate/77521ec0eac86775dcb285dc9dd3eea3.png 采购子系统:

https://i-blog.csdnimg.cn/blog_migrate/356c69a4f1319934df44ce383aae8832.png

确定数据定义与加工策略(从数据的终点开始)

数据定义DD

·加工策略PSPEC

·需求规格说明书SRS

需求分析的复审

7. 结构化系统设计

  1. SD概述

·面向数据流设计和面向数据设计

·面向数据流:数据流是考虑一切问题的出发点

·面向数据:以数据结构作为分析与设计的基础

·结构化设计的描述工具:SC图

·从分析模型导出设计模型

https://i-blog.csdnimg.cn/blog_migrate/053d400756724d045bb8c55fa9cddee8.png

分析模型:数据对象描述、数据流图DFD、数据字典DD、实体联系图ER图、加工规格说明书PSPEC、状态转换图STD、控制规格说明CSPEC

设计模型:过程设计、接口设计、体系设计、数据设计

由分析模型导出设计模型:

过程设计可以由PSPEC,CSPEC、STD导出;

接口设计可以由DFD导出;

体系结构设计可以由DFD导出;

数据设计可以由E-R、DD导出。

数据流图的类型——变换型、事务型

  1. 变换(transform)型结构

    传入路径

    变换中心

    传出路径

    https://i-blog.csdnimg.cn/blog_migrate/dc8a08595e1edc65dacde46f00d3cb07.png

  2. 事务(transaction)型结构

·一条接受路径

·一个事务中心

·若干条动作路径

https://i-blog.csdnimg.cn/blog_migrate/63aafa6ff06ac606f4af6505820876c9.png

  1. 同时存在变换型结构和事务型结构

https://i-blog.csdnimg.cn/blog_migrate/7c8c6294c3419e679518f2b213aab759.png SD方法

https://i-blog.csdnimg.cn/blog_migrate/77aabe94c3a4d4c3446075724c799a1d.png

  1. 结构化软件设计方法——变换映射,事务映射

变换映射是软件系统结构设计的主要方法 。一般,一个大型的软件系统是 变换型结构和事务型结构的混合结构 。所以,我们通常利用 以变换映射为主,事务映射为辅的方式进行软件结构设计 。

  1. 变换映射

    ①划分DFD图的边界;

    ②建立初始SC图的框架;

    ③分解SC图的各个分支

https://i-blog.csdnimg.cn/blog_migrate/a781fd424b7339e68240f66c647e050f.png https://i-blog.csdnimg.cn/blog_migrate/335cbc436bee0759342a3621f761f68f.png

https://i-blog.csdnimg.cn/blog_migrate/564f54c4b9c95719d141029560fea9ab.png

https://i-blog.csdnimg.cn/blog_migrate/184576c18f9204009a90ff4e4e21518c.png

https://i-blog.csdnimg.cn/blog_migrate/db767a170476eb2e389b133e1c75bc67.png

深度:5层;宽度(广度):7层;

注意:必须对一个模块的全部直接下属模块都设计完成之后,才能转向另一个模块的下层模块的设计;在设计下层模块时,应考虑模块的 耦合和内聚 问题;使用“==黑箱”==技术,先把这个模块的所有下层模块定义成“黑箱”,不考虑其内部结构和实现; 一个模块的直接下属模块一般在五个左右,如果直接下属模块超过10个,可设立中间层次 。

  1. 事务映射

①在DFD图上确定事务中心、接受部分(包括接受路径)和发送部分(包括全部动作路径);

②画出SC图框架,把DFD图的3个部分分别映射为事务控制模块、接受模块和动作发送模块;

③分解和细化接受分支和发送分支,完成初始的SC图。

https://i-blog.csdnimg.cn/blog_migrate/8d253e1277e3cb2f59e4bf41658a86ba.png

https://i-blog.csdnimg.cn/blog_migrate/948fa1c0cdfc498732eee0fc1a76c50a.png

  1. 扇入扇出

    https://i-blog.csdnimg.cn/blog_migrate/98a3442dfb7f75cc34accca2d6105c8a.png

    煎饼型不可取,应增加中间层减少扇出,实现塔型结构。

    设计良好的软件通常具有瓮型结构,两头小,中间大,在低层模块使用了较多高扇入的共享模块。

  2. 优化结构设计的指导原则

     对模块划分的指导原则
     	·提高内聚,降低耦合
     	·简化模块接口
     	·少用全局性数据和控制型信息
     保持高扇入/低扇出的原则
     	·扇入高则上级模块多,能够增加模块的利用率
     	·扇出低则表示下级模块少,可以减少模块调用和控制的复杂度

8. 模块设计

模块设计是传统软件工程的重要组成部分,其性质属于 详细设计 。

目的:

为SC图中的每个模块确定算法和数据结构,用选定的表达工具给出清晰的描述

主要任务: ·

编写软件的“ 模块设计说明书”

原则与方法:

· 清晰第一的设计风格 ·结构化的控制结构 ·仅用这三种控制结构(顺序、选择、循环)来构成程序;

·每个控制结构只应有一个入口和一个出口

·逐步细化 的实现方法

  • 详细设计中常用的表达工具

流程图、N-S图、伪代码、PDL语言

https://i-blog.csdnimg.cn/blog_migrate/d4b9f2e17d09001e34dd0ca2dc6d1234.png