文章目录
软件总体设计
- 将软件需求转化为数据结构和软件系统结构
- 即着手实现系统需求,要把"做什么"的逻辑模型变换为"怎样做"的物理模型
- 结束后,得到优化后的软件结构图
- 总体设计阶段 由两个小阶段组成,首先是系统设计,然后是软件结构设计
软件总体设计的任务
- 将分析阶段获得的需求说明转换为计算机实现的设计
- 设计软件的总体结构,软件结构的设计是以模块为基础的,以需求分析阶段得到的数据流图为依据
- 软件体系结构设计:完成系统的数据结构和程序结构设计,
- 软件模块设计: 对模块内部的过程进行设计
软件体系结构设计准则
- 软件体系结构是软件结构中最本质的东西
- 体系结构是对复杂事物的一种抽象
- 体系结构在一定时间内保持稳定,确保接口一致,既能确保某一体系结构配置描述内相关接口描述的一致,又能确保建立关联的两个构建接口描述的一致性
- 良好的体系结构意味着普通,高效和稳定
软件模块设计准则
在面向过程软件开发中 ,软件模块设计是关键
- 降低模块之间的耦合性,提高模块的内聚性,目的提高模块的独立性
- 模块结构的深度,宽度,扇出,扇入应适当
→ 深度:指软件结构中模块的层次数,能粗略的反映系统规模和复杂程度
→宽度:指同一层次中最大的模块个数,影响宽度的最大因素是扇出
→ 扇出:指一个模块直接调用的模块数目
→扇入:指有多少个上级模块直接调用它 - 模块的作用范围应该在控制范围内
作用范围(作用域):指受该模块内一个判断影响的所有模块的集合
控制范围(控制域:)指模块本身及其所有直接或间接从属于他的模块集合 - 模块接口设计要简单,以便降低复杂程度和冗余度
- 设计功能可预测并能得到验证的模块
- 适当划分模块规模,以保持其独立性
软件设计的概念和原理
模块和模块化
- “模块”又称“构件”,是软件结构的基础,是软件元素,是能够单独命名,独立完成一定功能的程序语句的集合,指用一个名字调用的相邻程序元素序列
- 模块化:指解决一个复杂问题时自顶向下逐层吧软件系统划分为若干模块的过程,目的是降低软件复杂性,是软件设计,测试,维护等操作变得简易
- 模块最重要的特征一个是抽象,一个是信息隐蔽
- 问题越复杂,所需要的工作量就越大
- 分解前的复杂性总是大于分解后的复杂性
C(P1+P2)>C(P1)+C(P2) - 组合而成的复杂程度大于分别考虑每个问题时的复杂程度之和
E(P1+P2)>E(P1)+E(P2) - 所以,提高模块的独立性,才能有效降低软件复杂性
抽象
人类认识自然界中的复杂事务和复杂现象过程中使用的一种思维工具,在模块化问题求解时,可以提出不同层次的抽象
随着对抽象不同层次的进展。建立了过程抽象和数据抽象
- 过程抽象:是一个命名的指令序列,它具有一个特定的受限的功能
- 数据抽象:是一个命名的说明数据对象的数据集合
- 控制抽象:隐含程序的控制机制,
逐步求精:为了能集中精力解决主要问题,精良推迟对细节问题的考虑,实际上是一个细化过程,与抽象是互补的概念
信息隐蔽
- 隐藏的是每个模块的实现细节,每个客户只能通过接口来了解该模块
- 信息隐蔽的作用:有效的模块化可以通过定义一组独立的模块来实现,这些模块之间仅仅交换那些为了完成系统功能所交换的信息。
局部化概念:指把一些关系密切的软件元素物理的放的彼此靠近,局部化有利于信息隐蔽
模块独立性
-
模块独立性的概念是模块化,抽象,信息隐蔽和局部化概念的直接结果
-
具有独立功能且和其他模块没过多作用
-
应使每个模块完成一个相对独立的特定功能,并且和其它模块接口简单
-
模块的独立性可以从两个方面来度量,即模块之间的耦合和模块本身的内聚
-
耦合:
1,软件结构内模块之间联系程度用耦合来度量,
2,耦合强弱取决与模块相互之间接口的复杂程度,一般由模块之间的调用方式,传递信息的类型和数量来决定
3,无直接耦合
不传递任何消息
4,数据耦合
相互传递的消息以参数的形式给出,
5,标记耦合
传递的是数据结构,而且被调用模块不需要作为参数传递过来的整个数据结构,只需要里面一部分数据元素
6,控制耦合
当一个模块调用另一个模块时,,传递的消息控制了该模块的功能
7,公共环境耦合
两个或多个模块公用一个数据环境,公共环境可以是全程变量,内存的公共覆盖区
8,内容耦合
一个模块直接访问另一个模块的内部数据,一个模块有多个入口,不通过正常入口进入另一个模块,内容耦合属于最高程度的耦合,也是最差的耦合,避免使用
-
结论:
尽量使用数据耦合,少用标记耦合,和控制耦合,限制公共环境耦合的范围,完全不用内容耦合 -
内聚:
1,模块内部各个元素之间的联系称为内聚,也称块内联系
它是从功能角度来度量模块内的联系,又称模块强度
2,偶然内聚
将模块分成更小的模块,每个小模块执行一个操作,不仅不易修改,而且无法定义其功能,增加程序的模糊性
3,逻辑内聚→模块分解
将逻辑上相同或相似的一类任务放在同一个模块中,每次被调用,有传送给模块的参数来确定该模块应完成的某一功能
4,时间内聚
把需要同时执行的动作嘴和到一起形成的模块称为时间内聚模块
5,通信内聚
模块中所有都使用相同的输入数据或者产生相同的输出数据,例如:利用同意数据生成各种不同形式报表的模块具有通信内聚性
6,过程内聚
模块内处理元素相关,特定次序执行,如吧流程图中循环部分,判定部分,计算部分分成三个模块,都是过程内聚
7,顺序内聚
一个模块中各个处理元素都紧密相关与同一个功能且必须顺序执行
8,功能内聚
模块内所有元素属于一个整体,共同完成一个单一功能
- 结论:
偶然内聚,逻辑内聚和时间内聚属于低内聚,通信内聚属于中内聚,顺序内聚和功能内聚属于高内聚
数据库设计
E-R模型无法在计算机中直接使用,所以要数据库E-R模型向关系模型特定逻辑模式转化
主要包括逻辑结构设计,物理结构设计和数据规范化
模式(逻辑模式)
- 是数据库全体逻辑结构和特征的描述,是所有用户的公共数据视图
- 模式是数据库系统模式结构的中间层,每一个数据库只有一个模式,
- 该模式以某一种数据模型为基础,综合用户需求,将需求有机结合成一个逻辑实体
- 设计阶段需要把E-R模型转换为模式
外模式(子模式或用户模式)
它是数据库用户(包括应用程序员和最终用户)能够看见和使用的局部数据的逻辑结构和特征的描述
- 外模式是模式的子集,每一个数据库可以有多个外模式,但一个应用程序只能使用一个外模式
- 外模式在关系模型中对应视图,视图时应用程序保证数据库安全性的方法之一
内模式(存储模式)
- 一个数据库只有一个内模式,它是数据物理结构和存储方式的描述,是数据在数据库内部的表示方法
- 一般应用中,内模式的定义和操作靠RDBMS来完成和实现
- 应用程序用户不涉及内模式操作
数据库逻辑设计原则
数据逻辑设计应该选择最适合与相应概念结构的数据模型,一般DBMS支持关系,网状,层次3中模式
- 每个实体转换为一个关系模式,实体的属性就是关系的属性,尸体的码就是关系的码
- 根据实体之间的联系可以按照 1:1, 1:n,m:n
关系数据库规范化
- 目前的的RDBMS已经很好的实现了存储,索引,和查询技术,使用户可以方便的处理数据
- 3NF和BCNF时进行规范化的主要目标,一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这个过程叫规范化
- 如果关系模式R中每个属性值都是一个不可分解的数据项,则称该关系模式满足第一范式,简称1NF
- 如果一个关系模式满足第一范式,且他的所有非主属性都完全函数依赖于R的任一候选码,则R满足第二范式
- 如果一个关系模式满足第二范式,且他的所有非主属性都不传递函数依赖于R的任何候选码,则R满足第三范如果一个关系模式满足第一范式,且他的所有非主
- 如果一个关系模式满足第一范式,对任何非平凡的函数依赖X→Y,X均包含码,则R属于BCNF
- 对原关系进行投影,消除决定属性不是候选码任何函数依赖,即从1NF直接变换为BCNF
软件结构设计的图形工具
软件结构图
软件结构图是软件系统的模块层次结构,用来表达软件的组成模块及其调用关系
结构图的主要内容:
- 模块。用方块表示
- 模块的调用关系,用单向箭头或直线连接起来表示他们的调用关系,通常还有带注释的箭头表示模块调用过程中来回传递的信息
- 辅助符号,弧形箭头表示循环调用,菱形表示选择或条件调用
层次图
层次图是进行软件结构设计的另一种图形工具,用来描述软件的层次结构
- 每一个矩形代表一个模型,矩形框之间的关系表示调用关系
- 层次方框图中方框代表一个数据,方框之间的连线表示组成关系
- 适用于自顶向下设计软件结构过程
HIPO图(层次图+概要IPO图+详细IPO图)
层次图加上输入-处理-输出图的英文缩写
- 表示软件开发常用的一种层次结构的描述工具,也可以看成自顶向下按功能逐层分解的设计方法
- 为了HIPO图具有可追踪性,每个方框加了编号
结构化设计方法
结构化设计方法是一种把需求分析阶段得到的数据流图变为软件结构图的一种基于数据流的设计方法
数据流图及其类型
👉是以数据流图为基础设计系统的软件结构,
👉数据流图往往式变换型和事务型的混合,
👉以变化分析为主,事务分析为辅进行设计
-
变换型数据流图
呈线性形状的结构,由输入(逻辑输入),变换(核心的数据加工处理模块),输出(逻辑输出)3部分组成 -
事务型数据流图
当一个数据项到达处理某个模块时,将有分类处理
→这种数据流图呈辐射状
→发出多条路径的数据流中枢被称为“事务中心”- 输入模块:接收输入数据和数据转换,两者缺一不可
- 输出模块:接收输出数据和数据转换,协调输出信息的产生过程
- 变化中心:管理对内部形成的数据的所有操作
总体设计阶段产生的文档是→总体设计说明书
它是详细设计,编码的基础,也是进行测试的依据之一
结构化设计方法步骤分析
花神博客生涯之软件工程(4)结束了哦~
接下来会持续更新(⊙o⊙)!