软件工程导论--设计工程
目录
软件设计工程概述
1.软件设计工程概述
2.软件设计的任务
3.软件设计的目标
4.软件设计的过程
软件设计原则
1.抽象化与逐步求精
2.模块化
3.信息隐藏
4.功能独立
软件体系结构设计
1.体系结构发展过程
2.软件体系结构的风格
3.软件体系结构设计规则
部件级设计技术
1.结构化程序设计方法
2.图形表示法
3.判定表
4.设计性语言PDL
设计规约与设计评审
软件设计工程概述
1.软件设计工程概述
软件需求分析解决“做什么“的问题,软件设计过程则解决“怎么做”的问题
软件设计是把软件需求变换成软件表示的过程,它主要包含两个阶段:软件体系结构设计阶段和部件/过程级设计
2.软件设计的任务
使用一种设计方法,软件分析模型中通过数据、功能和行为模型所展示的软件需求的信息被传送给设计阶段,产生数据/类设计、体系结构设计、接口设计、部件/过程级设计
(1)数据/类设计:将分析-类模型变换成类的实现和软件实现所需要的数据结构
(2)体系结构设计:体系结构设计定义了软件的整体结构
它由软件部件、外部可见的属性和它们之间的关系组成。
(3)接口设计:接口设计描述了软件内部、软件和协作系统之间以及软件同人之间如何通信
主要包含三个方面:
– 设计软件模块间的接口
– 设计模块和其他非人的信息生产者和消费者(比如外部实体)之间的接口
– 设计人(用户)和计算机间的接口
(4)部件/过程级设计:部件级设计将软件体系结构的结构性元素变换为对软件部件的过程性描述
3.软件设计的目标
略
4.软件设计的过程
1)制定规范
2)体系结构和接口设计
3)数据/类设计
4)部件级(过程)设计
5)编写设计文档
6)设计评审
软件设计原则
1.抽象化与逐步求精
(1)抽象
抽象,是在软件设计的规模逐渐增大的情况下,控制复杂性的基本策略。抽象的过程是从特殊到一般的过程,上层概念是下层概念的抽象,下层概念是上层概念的精化和细化。
软件工程过程的每一步都是对较高一级抽象的解作一次具体化的描述
软件设计中主要抽象手段有:过程抽象、数据抽象
-过程抽象(也称功能抽象)是指任何一个完成明确定义功能的操作都可被使用者当作单个实体看待,尽管这个操作实际上是由一系列更低级的操作来完成的
-数据抽象是指定义数据类型和施加于该类型对象的操作,并限定了对象的取值范围,只能通过这些操作修改和观察数据
(2)逐步求精
逐步求精,把问题的求解过程分解成若干步骤或阶段,每步都比上步更精化,更接近问题的解法。可将其看成是将所要解决的问题按优先级排序的技术。它是一种自顶向下的设计策略。
注:抽象忽略低层细节,求精揭示低层细节
2.模块化
模块化,即把软件按照规定原则,划分一个个较小的,相互独立的但又相互关联的部件,实际上是系统分解和抽象的过程。实质是”分而治之“,将复杂问题分成若干个简单问题,然后逐个解决。
模块是数据说明、可执行语句等程序对象的集合,它是单独命名的,并且可以通过名字来访问
-例如,函数、子程序等
模块化和软件成本图
3.信息隐藏
每个模块的实现细节对于其他模块来说应该是隐蔽的,块中所包含的信息(包括数据和过程)不允许其他不需要这些信息的模块使用
4.功能独立
功能独立是模块化、抽象、信息隐藏和局部化等概念的直接结果。功能独立性可以由两项指标来衡量:内聚度和耦合度(设计目标:高内聚,低耦合)
功能独立性较强的模块应是高内聚低耦合的模块
-内聚:是一个模块内部各个元素彼此结合的紧密程度的度量
(1)偶然内聚(巧合内聚):块内各组成成分在功能上是互不相关的。
(2)逻辑内聚:把几种相关功能组合在一个模块内,每次调用由传给模块的参数确定执行那种功能。
(3)时间内聚(经典内聚):模块完成的功能必须在同一时间内执行,这些功能只因时间因素关联在一起。
(4)过程内聚 (顺序性组合):模块内各处理成分相关,且必须以特定次序执行。
(5)通信内聚:模块内各部分使用相同的输入数据,或产生相同的输出结果。
(6)顺序内聚:模块完成多个功能,各功能都在同一数据结构上操作,每个功能有唯一入口。
(7)功能内聚(内聚性最强):模块仅包括为完成某个功能所必须的所有成分。所有成分完成一个功能,缺一不可。
-耦合:是模块之间的相对独立性(互相连接的紧密程度)的度量
(1)无直接耦合:两个模块没有直接关系,模块独立性最强
(2)数据耦合:一个模块访问另一个模块时,通过数据参数交换输入输出信息
(3)控制耦合:模块间传递的是控制信息(开关、标志、名字等),控制被调用模块的内部逻辑
注:去除控制耦合的方法
(1)将被调用模块分解成单一模块
(2)将被调用模块的判定移到调用模块中进行
(4)特征耦合:两个模块通过传递数据结构加以联系,或都与一个数据结构有关系
(5)公共环境耦合:一组模块公用一个公用数据区
(6)内容耦合(最不好的耦合方式!!!):一个模块直接访问另一个模块的内部信息;一个模块不通过正常入口转换到另一个模块内部;两个模块有部分代码重叠;一个模块有多个入口
设计原则:尽量使用数据耦合,少用控制耦合和特征耦合,限制公共环境耦合的使用,完全不用内容耦合
软件体系结构设计
软件体系结构关注系统的一个或多个结构,包含软件结构、这些结构的对外可见的性质以及它们之间的关系
1.体系结构发展过程
常见的软件体系结构
-单主机结构
-C/S(Client/Server)结构
-B/S(Browser/Server)结构
2.软件体系结构的风格
(1)以数据为中心的体系结构
(2)数据流风格的体系结构:输入数据经过计算或处理部件的处理变成输出数据
(3)调用和返回风格的数据结构:易于修改和扩充
几个需要了解的概念
-程序结构的深度:程序结构的层次数成为结构的深度,在一定意义上反应了程序结构的规模和复杂程度
-程序结构的宽度:层次结构中同一层模块的最大模块个数成为结构的宽度
-模块的扇入和扇出:扇出表示一个模块直接调用(或控制)的其他模块个数。扇入表示调用(或控制)一个给定模块的模块个数。
注:多扇出表示需要控制和协调多个下属模块,多扇入的模块通常是公用模块
(4)面向对象风格的体系结构:系统部件封装数据、操作数据的方法,部件之间的交互和协调通过消息传递
(5)层次式风格的体系结构:定义不同层次,每层都完成了相对外层更靠近机器指令的操作
3.软件体系结构设计规则
(1)改进软件结构提高模块独立性
(2)模块适当的深度、宽度、扇出和扇入
(3)模块判断作用范围应在其控制作用范围内
(4)力争降低模块接口的复杂度
(5)设计单入口单出口的模块
(6)模块功能应该是可以预测的
(7)模块大小适中,一般一个模块包含的语句在30~50条左右较好
(8)一个设计好的软件结构,通常顶层扇出比较高,中层扇出比较少,底层有高扇入
部件级设计技术
1.结构化程序设计方法
定义:如果一个程序的代码块仅仅通过顺序、选择和循环这三种基本控制结构进行连结,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的
2.图形表示法
- 程序流程图
- N-S图
- PAD图(盒图)
(1)程序流程图
为使用流程图描述结构化程序,必须限制流程图只能使用五种基本控制结构
(2)N-S图
五种基本控制结构
(3)PAD图
五种基本控制结构
3.判定表
当算法中包含多重嵌套的条件选择时,用程序流程图、N-S图或PAD都不易清楚地描述。然而,判定表却能清晰地表达复杂的条件组合与应做动作之间的对应关系。
判定表表示的是静态逻辑,是在某种条件取值组合情况下可能的结果,它不能表达加工的顺序,也不能表达循环结构
4.设计性语言PDL
PDL(Program Design Language)是一种用于描述功能部件的算法设计和处理细节的语言,称为设计性语言
设计规约与设计评审
略
软件工程导论--设计工程相关推荐
- 软件工程导论实验报告二(类图设计)
软件工程导论实验报告 实验二 类图设计 2.实验目的 (1)掌握绘制类图的基本步骤: (2)掌握识别类的方法. 3.实验内容 利用StarUML或其它UML绘图工具,绘制系统中的类图. (1)图书管理 ...
- 软件工程导论04-设计工程
设计工程 (前半段概念可能难懂点,后面好点) 软件设计工程概述 软件设计 软件设计是从软件需求规格说明书出发,根据需求分析阶段确定的功能设计软件系统的整体结构.划分功能模块.确定每个模块的实现算法以及 ...
- 软件工程导论团队项目
软件工程导论团队项目(速课小龙) 一.团队介绍 1.团队成员 邓 旭 2016012068 (组长) 陈逸璇 2016012056 周紫伊 2016012043 谢月鹏 2016012066 洪泽芳 ...
- 《软件工程导论》课后习题答案
<软件工程导论>课后习题答案 第一章 软件工程概论 1.什么是软件危机? 软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题.这些问题表现在以下几个方面: (1)用户对开发出 ...
- 《软件工程导论》考研复试整理
一.名词解释 DFD 数据流图Data Flow Diagram PDL 过程设计语言 Process Design Language PAD 问题分析图 Problem Analysis Diagr ...
- 软件工程导论复试——一、软件工程学概述
软件工程导论复试 本文用书 <软件工程导论>第六版张海藩.牟永敏 清华大学出版社 一.软件工程学概述 软件危机:计算机软件开发和维护时遇到的一系列严重问题 典型表现: (1) 对软件开发成 ...
- 首经贸电子信息复试软件工程导论
一.名词解释 DFD 数据流图Data Flow Diagram PDL 过程设计语言 Process Design Language PAD 问题分析图 Problem Analysis Diagr ...
- 软件工程导论期末考点总结
文章目录 一.软件工程学概述 1.1.软件危机 1.2.软件工程 1.2.1.软件工程的介绍 1.2.3.软件工程方法学 1.3.软件生命周期 1.4.软件过程 1.4.1.瀑布模型 1.4.2.快速 ...
- 软件工程导论(张海藩第六版)期末考试、考研复试重点
这里是一个重点的简介,只是概念性的内容,软件工程导论中还有一些画图的题目,建议先掌握概念性的内容,之后的画图就比较容易了. 文末附有完整的思维导图链接,思维导图里面是完整的知识点,学完一遍之后直接拿着 ...
最新文章
- BZOJ-1008 越狱
- Linux学习之系统编程篇:互斥锁(pthread_mutex_init / lock / trylock / unlock / destroy)
- CSS Grid网格布局全攻略
- python学习 day6 (3月7日)
- LINUX 错误代码
- 2017.9.14 dispatching 思考记录
- “The Stupidity Paradox”作者访谈
- css背景图毛玻璃,css实现背景图片的毛玻璃效果
- 关于平方根倒数速算法(雷神之锤3,牛B)
- Oracle闩:Cache Buffers chains
- python流水灯程序_单片机流水灯汇编语言源代码大全(六款流水灯汇编语言源代码)...
- 在线字符或文本转二进制工具
- 【2022年Spring全家桶】Spring5.x 框架详解
- 数学分析教程(科大)——1.7笔记+习题
- codevs 1535 封锁阳光大学
- i3 10105f对比i5 10400f选哪个好
- 网页加载过程+性能优化+安全
- Android布局深究(五)——GridLayout(网格布局)
- xshell 快捷键
- NIM Duilib的基础知识点