软件设计工程
它一般具有如下三个基本属性:
⑴功能 即指该模块实现什么功能,做什么事情。必须注意, 这里所说的模块功能,应是该模块本身的功能加上它 所调用的所有子模块的功能。
⑵逻辑 即描述模块内部怎么做。 ⑶状态 即该模块使用时的环境和条件。
13
4.2 软件设计准则
二、模块化准则 • 模块化:所谓模块化就是将系统划分成若干模块,每 个模块完成一个子功能,把这些模块集中起来组成一个 整体,以满足所要求的整个系统的功能。 • 模块化的目的是将系统“分而治之”,模块化能够降 低问题的复杂性,使软件结构清晰,易阅读、易理解, 易于测试和调试,因而也有助于提高软件的可靠性。
• 逐步求精,把问题的求解过程分解成若干步骤或阶段,每步都比 上步更精化,更接近问题的解法
• 抽象使得设计者能够描述过程和数据而忽略低层的细节,而求精 有助于设计者在设计过程中揭示低层的细节
12
4.2 软件设计准则
二、模块化准则
模块(Module)是程序对象有名字的集合。又称“构件” ,一般指用一个名字可调用的一段程序。例如,过程 、函数、子程序、宏等,是构成软件系统结构的基本 元素。
高可靠 性
高可维 护性
高效率
软件 设计
高可理 解性
软件设计的目标
5
3.软件设计的过程
一.选取合理的系统体系结构 二.推荐最佳方案、技术选型 三.划分模块,确定软件结构 四.数据结构和算法设计 五.设计用户界面 六.编写文档 七.审查和复查
6
3. 软件设计的过程
一、选取合理的系统体系结构
软件体系结构确定了系统的组织结构和拓扑结构, 显示了系统需求和构成系统的元素之间的对应关系, 提供了一些设计决策的基本原理。
内容摘要
• 软件设计工程概述 • 软件设计准则 • 软件体系结构设计 • 部件级设计技术 • 设计规约与设计评审
1
4.1 软件设计工程概述
正如任何工程项目一样,在生产之前要做 设计,软件编码前,也必须先进行软件设计。
软件设计是软件开发的关键步骤,直接影 响软件质量。
软件需求分析解决“做什么”的问题,软 件设计过程则解决“怎么做”的问题
常用的设计方法有: SD法、Jackson法、OOD法、层次式输入-处理输出法(又称HIPO法)、 Parnas法、 Warnier法等。
3
1.软件设计阶段的任务
设计任务:使用一种设计方法,将分析阶段获得的需求说 明的软件分析模型中通过数据、功能和行为模型所展示 的软件需求的信息传送给设计阶段,完成系统的数据/类 设计、体系结构设计、接口设计、部件级设计 最后得到 软件设计说明书。
六、编写文档
设计阶段结束要交付的文档是设计说明书,根据设计方法的 不同,有不同的设计文档。
七、审查和复查
每个设计步骤完成后,都应进行复审。
10
4.2 软件设计准则
软件设计是软件开发过程的重要阶段,对保证 软件系统的质量起着关键作用。但是如何保证软件 设计的质量呢?有以下经过长期考验的设计准则:
一.抽象化与逐步求精 二.模块化准则 三.信息隐蔽准则 四.模块独立性准则
2
软件设计阶段
软件设计是把软件需求变换成软件表示的过程,它主要包含两个阶段: 软件体系结构设计阶段和部件级设计; 有称为总体设计和详细设计两个 阶段。
其工作流程可用下图表示:
修改
修改
需求 说明书
总体 设计
体系 结构
数据/ 类结构
复审
可接受
详细
设计
复审 部件过程描述
设计说 明书
1、设计阶段结束要交付的文档是设计说明书,根据设计方法的不同, 有不同的设计文档。 2、每个设计步骤完成后,都应进行复审。
一般包括确定系统的软件结构,分解模块 ,确定系统的模块层次 关系。
9
3. 软件设计的过程
四、确定系统的数据结构、算法
数据结构的建立对于信息系统而言尤为重要。要确定数据的类型, 组织、存取方式,相关程度及处理方式等。
五、设计用户界面
作为人机接口的用户界面起着越来越重要的作用,它直接影响到 软件的寿命。
11
一、抽象化与逐步求精准则
• 抽象,是在软件设计的规模逐渐增大的情况下,控制复杂性的基本策略。 • 抽象的过程是从特殊到一般的过程,上层概念是下层概念的抽象,下层概
念是上层概念的精化和细化。 • 软件工程过程的每一步都是对较高一级抽象的解作一次具体化的描述
• 软件设计中主要抽象手段有:过程抽象和数据抽象 • 过程抽象(也称功能抽象)是指任何一个完成明确定义功能的操 作都可被使用者当作单个实体看待,尽管这个操作实际上是由一 系列更低级的操作来完成的 • 数据抽象是指定义数据类型和施加于该类型对象的操作,并限定 了对象的取值范围,只能通过这些操作修改和观察数据
8
3. 软件设计的过程
二、 推荐最佳方案、技术选型
技术选型,明确以下信息: – 主要硬件环境 – 操作系统 – 应用系统内的各种服务器软件 – 开发语言及开发工具 – CASE软件
三、划分模块,确定软件结构
开发方法不同,确定软件结构的方法也不同。例如SD法,是从分层 的DFD图导出初始的结构图,再对初始的结构图进行改进,获得最终的 结构图。
体系结构设计是软件设计的第一个阶段,该阶段 侧重于系统宏观结构的设计,而不关心模块的内部算 法。
常见的软件体系结构 •单主机结构 •C/S(Client/Server)结构 •B/S(Browser/Server)结构
7
3. 软件设计的过程
一、选取合理的系统体系结构
选取体系 针对以下问题考虑: •是单机还是客户机/服务器系统 •是应用开发还是低层开发(是否有单片机) •客户机最大点数 •是否提供给第三方接口 •网络(数据通信)连接方式 •胖客户机还是瘦客户机 •数据文件的保存方式(文本、本地数据库、大型 数据库)
14
模块化降低软件复杂度的简单证明
令:C(X)表示问题 X 的复杂度函数; E(X)解决问题 X 所需工作量的复
结构设计 过程设计
软件设计
数据设计
界面设计
4
2.软件设计的目标
软件设计的目标就是构造一个高内聚低耦合的软件设计模型。
提高软件实体有明显的层次结构,利于软件元素间控制。 2、软件实体应该是模块化的,模块具有独立功能。 3、软件实体与环境的界面清晰。 4、设计规格说明清晰、简洁、完整和无二义性。