软件工程导论(第5章)
软件工程导论第六版课后习题答案完整版
软件工程导论第六版课后习题答案完整版首先,感谢您对软件工程导论课后习题答案的需求。
以下是软件工程导论第六版课后习题的完整答案。
第一章:软件工程概述1.1 问题1. 什么是软件工程?答:软件工程是一种应用工程原理、方法和工具来开发和维护高质量软件的学科。
1.2 问题1. 什么是软件?答:软件是一系列按照特定顺序组织的计算机数据和指令。
第二章:软件过程模型2.1 问题1. 软件过程模型有哪些类型?答:常见的软件过程模型包括瀑布模型、迭代模型、螺旋模型和敏捷开发模型等。
2.2 问题1. 瀑布模型的特点是什么?答:瀑布模型是一种线性顺序模型,以阶段划分为基础,每个阶段的任务在进入下一个阶段前必须完成。
第三章:需求分析与规格说明3.1 问题1. 软件需求描述包括哪些方面的内容?答:软件需求描述需要包括功能性需求、非功能性需求、用户需求和系统需求等。
3.2 问题1. 什么是需求跟踪?答:需求跟踪是指在软件开发过程中,通过建立需求和软件项目中其他相关工件之间的关联,确保需求的准确实现和变更的有效管理。
第四章:软件设计4.1 问题1. 软件设计的目标是什么?答:软件设计的目标是通过确定软件的整体结构和组成部分,确保软件满足需求并具有良好的可维护性和可重用性。
第五章:软件测试与维护5.1 问题1. 什么是软件测试?答:软件测试是一种评估和改进软件质量的过程,目的是发现错误并提高软件的可靠性和可用性。
5.2 问题1. 什么是软件维护?答:软件维护是指在软件交付后的整个生命周期中对软件进行修改和改进,以满足用户需求和修复错误。
第六章:软件配置管理6.1 问题1. 软件配置管理的目标是什么?答:软件配置管理的目标是确保软件在开发和维护过程中的可控性和可追踪性,以及保持软件配置的稳定性和一致性。
6.2 问题1. 软件版本控制是什么?答:软件版本控制是指对软件的不同版本进行管理,包括版本的创建、检出、合并和更新等操作。
至此,我们完成了软件工程导论第六版课后习题的完整答案。
张海藩《软件工程导论》(考研用)辅导书(总体设计)【圣才出品】
第5章总体设计5.1 复习笔记一、设计过程1.目的总体设计的基本目的就是回答“系统应该如何实现”这个问题。
2.主要任务(1)划分出组成系统的物理元素——程序、文件、数据库、人工过程和文档等。
(2)确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。
【注意】每个物理元素的具体实现是详细阶段的任务。
3.必要性可以站在全局高度上,以较少的成本选出最佳方案和最合理的软件结构并开发出较高质量的软件系统。
4.组成阶段(1)系统设计阶段,确定系统的具体实现方案。
(2)结构设计阶段,确定软件结构。
5.典型的总体设计过程(略)二、设计原理1.模块化(1)定义模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。
(2)优点①使软件结构清晰,不仅容易设计也容易阅读和理解。
②使软件容易测试和调试,有助于提高软件的可靠性。
③提高软件的可修改性。
④有助于软件开发工程的组织管理。
【注意】模块是构成程序的基本构件。
2.抽象(1)定义抽象就是抽出事物的本质特性而暂时不考虑它们的细节。
(2)优点①简化了软件的设计和实现;②提高了软件的可理解性和可测试性;③使得软件更容易维护。
3.逐步求精(1)定义定义为:为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。
(2)原理①逐步求精是一种自顶向下的设计策略。
②求精实际上是细化过程。
4.信息隐藏和局部化(1)局部化定义指把一些关系密切的软件元素物理地放得彼此靠近。
(2)信息隐藏原理使得一个模块内包含的信息(主要是实现细节)对于不需要这些信息的模块来说,是不能访问的。
5.模块独立(1)定义开发的模块具有独立功能而且和其他模块之间没有过多的相互作用的模块,就可以做到模块独立。
(2)两个度量标准:耦合和内聚。
(3)耦合①定义耦合是对一个软件结构内不同模块之间互连程度的度量。
②分类a .完全独立;b .数据耦合;c .控制耦合;d .特征耦合;e .公共环境耦合;f .内容耦合。
软件工程导论(第五版)素材第五章范文
第5章总体设计5.1设计过程1. 设想供选择的方案2. 选取合理的方案3. 推荐最佳方案4. 功能分解5. 设计软件结构6. 设计数据库7. 制定测试计划8. 书写文档9. 审查和复审5.2设计原理5.2.1模块化图5.1模块化和软件成本2数据结构(C++版) 5.2.2抽象5.2.3逐步求精5.2.4信息隐藏和局部化5.2.5模块独立1. 耦合2. 内聚5.3启发规则1. 改进软件结构提高模块独立性2. 模块规模应该适中3. 深度、宽度、扇出和扇入都应适当4. 模块的作用域应该在控制域之内图5.2模块的作用域和控制域5. 力争降低模块接口的复杂程度6. 设计单入口单出口的模块7. 模块功能应该可以预测软件工程导论(第五版) 3 5.4描绘软件结构的图形工具5.4.1层次图和HIPO图图5.3正文加工系统的层次图图5.4带编号的层次图(H图)4数据结构(C++版)5.4.2结构图图5.5结构图的例子——产生最佳解的一般结构图5.6判定为真时调用A,为假时调用B图5.7模块M循环调用模块A、B、C 5.5面向数据流的设计方法5.5.1概念1. 变换流2. 事务流软件工程导论(第五版) 5图5.8变换流图5.9事务流3. 设计过程6数据结构(C++版)图5.10面向数据流方法的设计过程5.5.2变换分析1. 例子2. 设计步骤软件工程导论(第五版) 7图5.11数字仪表板系统的数据流图8数据结构(C++版)图5.12具有边界的数据流图图5.13第一级分解的方法软件工程导论(第五版) 9图5.14数字仪表板系统的第一级分解图5.15第二级分解的方法图5.16未经精化的输入结构10数据结构(C++版)图5.17未经精化的变换结构图5.18未经精化的输出结构图5.19精化后的数字仪表板系统的软件结构软件工程导论(第五版) 11 5.5.3事务分析图5.20事务分析的映射方法5.5.4设计优化5.6小结习题51. 为每种类型的模块耦合举一个具体例子。
82软件工程导论第五章PPT课件
END
28.07.2020
3
第一节 编码
本节内容:
一、相关概念
二、编码阶段的任务
三、程序设计语言的选择
四、编码风格
28.07.2020
4
一、相关概念
所谓编码就是选择一种语言把软件设计阶段的结 果翻译成计算机可以理解的源程序
它直接来源于设计,所以,程序的质量主要取决 于软件设计的质量
所选编程语言的特点和编码人员的编码风格会对 程序的可靠性、可读性、可测试性和可维护性产 生影响
28.07.2020
13
三、程序设计语言的选择
第三代语言
也称结构化编程语言,60年代—70年代
主要特征:具有很强的过程和数据结构化的能力
可分为三类: 通用高级语言(C、Pascal、Ada美国的三军通用语 言) 面向对象高级语言(C++,Objective-C,Smalltalk, Eiffel) 专用语言(LISP、PROLOG、APL和FORTH)
28.07.2020
8
三、程序设计语言的选择
1、程序设计特性
1)心理特性
需要考虑的几个心理特性
紧凑性:一种面向代码信息量的表示,这个信 息量必须由人来记忆:
❖ APL语言是一种非常紧凑的编程语言,但很 难读懂,Prolog语言也一种非常紧凑的语言
❖ 度量紧凑性的语言属性:
该语言支持结构化和逻辑块的程度
28.07.2020
返回至“编码风格”
19
数据说明
虽然在设计期间已经确定了数据结构的组织和复 杂程度,然而数据说明的风格却是在写程序时确 定的
为了使数据更容易理解和维护,遵循一些比较简 单的原则是必要的:
数据说明的次序应当规范化 说明语句中变量安排有序化 使用注释说明复杂数据结构
软件工程导论张海藩第五版课后习题答案
✓软件过程是软件工程方法学的3个重要组成部分之一。
13:07:42
重庆工学院计算机科学与工程学院 李梁(liliang@)
6
作业及解答(第3章)
13:07:42
重庆工学院计算机科学与工程学院 李梁(liliang@)
15
作业及解答(第3章)
3-3 银行计算机储蓄系统的工作过程大致如下:储户填写的 存款单或取款单由业务员键入系统,如果是存款则系统记 录存款人姓名、住址(或电话号码)、身份证号码、存款类 型、存款日期、到期日期、利率及密码(可选)等信息,并 印出存单给储户;如果是取款而且存款时留有密码,则系 统首先核对储户密码,若密码正确或存款时未留密码,则 系统计算利息并印出利息清单给储户。 请用数据流图描绘本系统的功能,并用实体-联系图描绘系 统中的数据对象。
定时的生理信号 F6日志
P5 更新日志
D1患者日志
E1 护士
13:07:42
F6日志 F1要求报告
P6 产生病情报告
重庆工学院计算机科学与工程学院 李梁(liliang@)
10
E2 病人
P2 分析信号
F2生理信号 F5安全范围
危及病人信息 D2患者安全范围
P3 产生警告信息
F2生理信号
11
E2 病人
P2
分析信号
危及病人信息
F2生理信号
F5安全范围
D2患者安全范围
F2生理信号
D3生理信息
P7制定安 全范围
F2生理信号
P1 接收信号
定时的生理信号
软件工程课后习题答案2-12章
书状态为S2&终端 输入“H=”加书名 管理员设置状 态 管理员删除 管理员添加
预约
书出库(删除) 书入库
图4.4.2
(三)图书馆终端用户模式的有穷状态机描述 • 状态机J:{读者查询状态,查询结果} • 输入集K:{终端输入用户查询命令,书的各种 状态(S1,S2,S3)} • 转换函数T:如图4.4.3所示 • 初始态S:{读者查询状态} • 终态集F:{查询结果}
取票通知 账单 机票 账单
P3.1 核对取票凭证 顾客 取票通知 P3.2 交款 机票 P3.3 打印机票
机票预定系 统
信 息 通 知 单 机 票
账
单
信息
机票
通
预定信息处 理
信息
知
账
通
单
有
单
取票凭证处 理
通知 账单 单
账单
信 息 定 预 航班信
息
机票预定子 系统
单 知
机票发放子 系统
效 通 知
机
票
取款单
P3.1输入取款 信息
取款信息 E1储 户 密码 P3.2 密码校验
P4 计算利息
利息 利息 P5 打印利息 清单
密码正确信息
E2业 务员
利率
P6设置利 率
利率
不能是两个分开的子系统,是相同的前台单个处理
银行储蓄系 统
存 款 单 款
率 利
利 存单 息清单
密 码
业务单据录 入
利 率
存款单
取
单
储蓄业务处理
(一)图书状态的有穷状态机描述 • 状态机J:{书在图书馆S1,书被借出S2, 书被预约S3} • 输入集K:{书上条形码,借阅卡条形码, 终端输入各种命令} • 转换函数T:如图4.4.1所示 • 初始态S:{书在图书馆S1,书被借出S2} • 终态集F:{书被借出S2,书被预约S3}
工学软件工程导论第五章
工学软件工程导论第五章在软件工程的广袤领域中,第五章通常聚焦于一些关键且核心的概念和技术,这些内容对于理解和实践软件工程起着重要的支撑作用。
首先,让我们来谈谈软件设计的原则。
在软件开发过程中,良好的设计是成功的基石。
软件设计应遵循高内聚、低耦合的原则。
高内聚意味着一个模块内的各个部分紧密相关,共同完成一个明确的功能;低耦合则表示不同模块之间的相互依赖程度低,这样当对一个模块进行修改时,不会对其他模块产生过大的影响。
想象一下,如果一个软件系统中的各个模块像一团乱麻般交织在一起,那么任何一点小小的改动都可能引发“蝴蝶效应”,导致整个系统的崩溃。
软件架构也是第五章的重要内容之一。
常见的软件架构模式有分层架构、客户端服务器架构、微服务架构等。
分层架构将软件系统分为不同的层次,如表示层、业务逻辑层、数据访问层等,每一层都有明确的职责,使得系统结构清晰,易于维护和扩展。
客户端服务器架构则将系统分为客户端和服务器端两部分,客户端负责与用户进行交互,服务器端负责处理业务逻辑和数据存储。
而微服务架构则将一个大型的应用拆分成多个小型的服务,每个服务都可以独立部署和扩展,提高了系统的灵活性和可扩展性。
在软件设计中,还需要考虑到设计模式的运用。
设计模式是经过实践验证的解决特定软件设计问题的通用方案。
例如,单例模式确保一个类只有一个实例存在,适用于需要全局唯一访问的资源;工厂模式用于创建对象,将对象的创建与使用分离,提高了代码的灵活性和可维护性;观察者模式实现了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都会得到通知并自动更新。
另外,软件的接口设计也不容忽视。
一个好的接口应该具有简洁、明确、稳定的特点。
简洁的接口易于理解和使用,明确的接口能够准确地传达其功能和参数要求,稳定的接口则保证在软件的后续开发和维护过程中不会频繁变动,从而避免对依赖它的其他部分造成影响。
在软件设计的过程中,还需要进行充分的需求分析。
工学软件工程导论第五章
工学软件工程导论第五章在软件工程的广袤领域中,第五章往往承载着关键的知识与理念,为我们进一步理解和实践软件工程奠定坚实的基础。
这一章,通常会聚焦于软件设计的核心原则与方法。
软件设计,就像是为一座即将拔地而起的高楼大厦绘制蓝图,其重要性不言而喻。
首先,我们来谈谈模块化设计。
将一个庞大而复杂的软件系统分解为若干个相对独立且具有特定功能的模块,每个模块专注于完成一项特定的任务。
这不仅使得软件的开发和维护变得更加容易,还提高了代码的可重用性。
想象一下,如果所有的代码都混在一起,就像一团乱麻,要找出问题或者进行修改,那简直是一场噩梦。
而通过模块化,我们可以清晰地知道每个模块的职责,当需要修改或优化某个功能时,只需关注对应的模块,大大提高了效率。
接口设计也是软件设计中的重要一环。
一个良好定义的接口,就像是一扇清晰的窗口,让不同的模块能够顺畅地交流和协作。
接口定义了模块之间的交互规则和数据传递方式,它应该简洁、清晰、稳定。
如果接口设计得不合理,模块之间的通信就会变得混乱,甚至导致整个系统的崩溃。
比如说,一个模块期望接收的数据格式与另一个模块提供的数据格式不一致,这就会引发严重的错误。
在软件设计中,还需要考虑架构模式的选择。
常见的架构模式有分层架构、客户端服务器架构、微服务架构等等。
每种架构模式都有其适用的场景和优缺点。
分层架构将系统分为不同的层次,每一层都有明确的职责,使得系统具有良好的层次结构和可扩展性。
客户端服务器架构则适用于需要将计算任务分布在不同的节点上的情况。
而微服务架构则将一个大型的应用拆分成多个小型的服务,每个服务都可以独立部署和扩展,提高了系统的灵活性和敏捷性。
另外,数据设计也是不能忽视的部分。
数据的组织、存储和访问方式直接影响着软件的性能和效率。
选择合适的数据结构和数据库管理系统,对于处理大量的数据至关重要。
比如,如果我们需要频繁地进行插入和删除操作,链表可能是一个更好的选择;而如果需要快速的查找,数组或者二叉搜索树可能更合适。
软件工程导论 第5章
8. 书写文档 应该用正式的文档记录总体设计的结果, 应该用正式的文档记录总体设计的结果,在这个阶 段应该完成的文档通常有下述几种: 段应该完成的文档通常有下述几种: (1) 系统说明主要内容包括用系统流程图描绘的系 统构成方案,组成系统的物理元素清单,成本/效 统构成方案,组成系统的物理元素清单,成本 效 益分析;对最佳方案的概括描述,精化的数据流图, 益分析;对最佳方案的概括描述,精化的数据流图, 用层次图或结构图描绘的软件结构, 用层次图或结构图描绘的软件结构,用IPO图或其 图或其 他工具(例如 例如, 语言)简要描述的各个模块的算 他工具 例如,PDL语言 简要描述的各个模块的算 语言 模块间的接口关系,以及需求、 法,模块间的接口关系,以及需求、功能和模块三 者之间的交叉参照关系等等。 者之间的交叉参照关系等等。 (2) 用户手册根据总体设计阶段的结果,修改更正 用户手册根据总体设计阶段的结果, 在需求分析阶段产生的初步的用户手册。 在需求分析阶段产生的初步的用户手册。
(3) 测试计划包括测试策略,测试方案,预期的测 测试计划包括测试策略,测试方案, 试结果,测试进度计划等等。 试结果,测试进度计划等等。 (4) 详细的实现计划 (5) 数据库设计结果 9. 审查和复审 最后应该对总体设计的结果进行严格的技术审查, 最后应该对总体设计的结果进行严格的技术审查, 在技术审查通过之后再由使用部门的负责人从管理 角度进行复审。 角度进行复审。
总体设计过程首先寻找实现目标系统的各种不同的 方案, 方案,需求分析阶段得到的数据流图是设想各种可 能方案的基础。 能方案的基础。然后分析员从这些供选择的方案中 选取若干个合理的方案, 选取若干个合理的方案,为每个合理的方案都准备 一份系统流程图,列出组成系统的所有物理元素, 一份系统流程图,列出组成系统的所有物理元素, 进行成本/效益分析 效益分析, 进行成本 效益分析,并且制定实现这个方案的进 度计划。分析员应该综合分析比较这些合理的方案, 度计划。分析员应该综合分析比较这些合理的方案, 从中选出一个最佳方案向用户和使用部门负责人推 荐。如果用户和使用部门的负责人接受了推荐的方 案,分析员应该进一步为这个最佳方案设计软件结 通常,设计出初步的软件结构后还要多方改进, 构,通常,设计出初步的软件结构后还要多方改进, 从而得到更合理的结构,进行必要的数据库设计, 从而得到更合理的结构,进行必要的数据库设计, 确定测试要求并且制定测试计划。 确定测试要求并且制定测试计划。
软件工程导论课件第5章
4
主要工作
完成模块分解,确定系统的模块层次结构
文档 数据结构的描述部分
模块说明部分,包括模块结构以及每个模块的 功能说明
5
总体设计的过程
总体设计通常由系统设计和结构设计两个阶段组成。 系统设计阶段确定系统的具体实现方案,结构设计阶段确 定软件的结构。
实施总体设计的过程如下:
1.设想供选择的方案 2.选取合理的方案 3.推荐最佳方案 4.功能分解 5.设计软件结构 6.数据库设计 7.制定测试计划 8.书写文档 9.审查和复审
27
(7)功能内聚 如果一个模块中的所有处理元素都完成一个, 而且仅完成一个功能 比如:一个模块只完成矩阵加法运算或只打印 输出一种特定的表格功能
对于一个模块而言,模块自身的内聚越 强,模块间的耦合就越小,模块所具有的独 立性就越好,可以说高内聚低耦合是我们进 行软件设计的一贯原则。
28
启发规则
12
9. 审查和复审
最后应该对总体设计的结果进行严格的技术 审查,在技术审查通过之后再由使用部门的负责人 从管理角度进行复审。
13
设计原理
模块
模块是数据说明、可执行语句等程序对象的 集合,它是单独命名的,可通过名字来进行访问。 例如:汇编语言中的子程序,Pascal语言中的过程, C语言中的函数等。
32
描绘软件结构的图形工具
在总体设计阶段,我们经常使用以下几种 图形工具: 层次图 HIPO图 结构图
33
(一)层次图
层次图中的每个方框代表一个模块,方框间 的连线表示调用关系,不同于层次方框图那样表示 组成关系。 例如:正文加工系统调用编辑模块,编辑模 块依需要调用添加、删除、插入、修改、合并、列 表模块。
张海藩《软件工程导论》(第6版)笔记和课后习题详解
第 3 章 需求分析 ......................................................................................................................................... 28 3.1 复习笔记 ........................................................................................................................................ 28 3.2 课后习题详解 ................................................................................................................................. 32
软件工程导论--第五章课后答案
第五章习题答案1、为每种类型的模块耦合举一个具体例子。
答:耦合是对一个软件结构内不同模块之间互连程度的度量。
耦合强弱取决于模块间接口的复杂程度,进入或访问某一模块的点,以及通过接口的数据,一般模块之间可能的连接方式有7种,构成耦合的7种类型,它们之间的关系为:下面举例说明以上各种耦合:a.非直接耦合(Nondirect Coupling)在这种情况下,两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的,这就是非直接耦合。
例如在实数的运算中,有两个模块分别完成几个实数的求和,求乘积功能,这两个模块之间没有直接联系,只有在主模块调用中有执行的前后顺序而已,这个例子即属于非直接耦合。
b.数据耦合(Data Coupling)即一个模块访问另一个模块时,彼此之间是通过数据参数来交换输入,输出信息的,这种耦合为数据输入,输出信息的这种耦合为数据耦合。
如有两个模块,其中A完成两个烽的比较,求出其中最大的并返回该值,模块B是完成了个数的比较,求出其中最大的并返回该最大值,为完成四个数的比较,模块B调用模块A即可完成,在这种调用关系中,模块A的运算结果作为一个参烽参加B的运算,这两个模块之间即发生数据耦合。
数据耦合是松散的耦合,模块间的独立性比较强。
c.标记耦合(Stamp Coupling),即一组模块通过参数传递记录信息,这就是标记耦合。
事实上,这组模块共享了这个记录,它是某一数据结构的子结构,而不是简单变量。
d.控制耦合(Control Coupling)即一个模块通过开关标志,名字等控制住处明显的控制,选择另一模块的功能,这就是控制耦合,如下图所示,这一种耦合实质是在单一接口上实现选择多功能模块中的某项功能,如程序设计中用到多路选择结构即是最好的例子。
e.外部耦合(External Coupling)即一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递全局数据结构,而且不是通过参数表传递全局变量的信息。
张海藩《软件工程导论》(第6版)(章节题库 第5章 总体设计)【圣才出品】
第5章总体设计一、选择题1.模块独立性是软件模块化所提出的要求,衡量模块独立性的度量标准是模块的()。
A.抽象和信息隐蔽B.局部化和封装化C.内聚性和耦合性D.激活机制和控制方法【答案】C【解析】模块的独立程度可以由两个定性标准度量,这两个标准分别称为内聚和耦合。
耦合衡量不同模块彼此间互相依赖(连接)的紧密程度;内聚衡量一个模块内部各个元素彼此结合的紧密程度。
2.在面向数据流的软件设计方法中,一般将信息流分为()。
A.变换流和事务流B.变换流和控制流C.事务流和控制流D.数据流和控制流【答案】A【解析】面向数据流的软件设计方法是以结构化分析阶段所产生的文档(包括数据流图、数据字典和软件需求说明书)为基础,自顶向下,逐步求精和模块化的过程。
它一般将信息流分为变换流和事务流。
①变换流:信息沿着输入通道进入系统,然后通过变换中心(也称主加工)处理,再沿着输出通道离开系统。
②事务流:信息沿着输入通道到达一个事务中心,事务中心根据输入信息(即事务)的类型在若干个动作序列(称为活动流)中选择一个来执行。
3.软件设计一般分为总体设计和详细设计,它们之间的关系是()。
A.全局和局部B.抽象和具体C.总体和层次D.功能和结构【答案】A【解析】软件设计分为总体设计和详细设计,其中总体设计属于全局性的设计,详细设计属于局部性的设计,是概要设计的完善。
4.将几个逻辑上相似的成分放在一个模块中,该模块的内聚度是()的。
A.逻辑性B.瞬时性C.功能性D.通信性【答案】A【解析】逻辑内聚:模块内执行几个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。
5.模块中所有成分引用共同的数据,该模块的内聚度是()的。
A.逻辑性B.瞬时性C.功能性D.通信性【答案】D【解析】通信内聚指模块内所有处理元素都在同一个数据结构上操作(有时称之为信息内聚),或者指各处理使用相同的输入数据或者产生相同的输出数据。
6.好的软件结构应该是()。
A.高耦合、高内聚B.低耦合、高内聚C.高耦合、低内聚D.低耦合、低内聚【答案】B【解析】耦合性与内聚性是模块独立性的两个定性标准,将软件系统划分模块时,尽量做到高内聚低耦合,提高模块的独立性,为设计高质量的软件结构奠定基础。
软件工程导论课后解答第五章
第五章总体设计低耦合(5 种类型)1. 数据耦合:数据传递2.控制耦合:控制信息传递3.特征耦合:传过多的信息给被调用模块4.公共环境耦合:因全局变量,共享通信区5.内容耦合:诸如一个模块访问另一个模块内部z高内聚(7 种类型)功能内聚10 分顺序内聚9分通信内聚7分过程内聚 5 分时间内聚3分逻辑内聚 1 分偶然内聚0 分z面向数据流的设计方法划分出组成系统的物理元素——程序、文件、数据库、人工过程和文档等等设计软件的结构。
也就是要确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。
总体设计过程两个阶段1.系统设计阶段,确定系统的具体实现方案;2.结构设计阶段,确定软件结构。
总体设计过程9个步骤1 设想供选择的方案2 选取合理的方案3 推荐最佳方案4 功能分解5 设计软件结构 6 设计数据库7 制定测试计划 8 书写文档 9 审查和审核划分出组成系统的物理元素——程序、文件、数据库、人工过程和文档等等设计软件的结构。
也就是要确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。
总体设计过程两个阶段1.系统设计阶段,确定系统的具体实现方案;2.结构设计阶段,确定软件结构。
总体设计过程9个步骤1 设想供选择的方案2 选取合理的方案3 推荐最佳方案4 功能分解5 设计软件结构 6 设计数据库7 制定测试计划 8 书写文档 9 审查和审核1.欲开发一个银行的活期存取款业务的处理系统:储户将填好的存/取款单和存折交给银行工作人员,然后由系统作以下处理;(1)业务分类处理:系统首先根据储户所填的存/取款单,确定本次业务的性质,并将存/取款单和存折交下一步处理;(2)存款处理:系统将存款单上的存款金额分别记录在存折和帐目文件中,并将现金存入现金库;最后将存折还给储户;(3)取款处理:系统将取款单上的取款金额分别记录在存折和帐目文件中,并从现金库提取现金;最后将现金和存折还给储户。
绘制该系统的数据流图和软件结构图。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
11
5.1.2 选取若干个合理的方案
至少选取低成本、中等成本和高成本三种方案。
每种方案准备四份资料:
系统流程图; 组成系统的物理元素清单; 成本/效益分析; 实现这个系统的进度计划。
12
5.1.3 推荐最佳方案
分析员应该综合分析对比各种合理方案的利
弊,推荐一个最佳的方案,并且为推荐的方 案制定详细的实现计划。
发出较高质量的软件系统。
7
第一部分:设计过程 第二部分:设计原理 第三部分:启发原则 第四部分:软件结构图 第五部分:面向数据流的设计方法
8
5.1 设 计 过 程
总体设计过程通常由两个主要阶段组成: 系统设计:确定系统的具体实现方案。 结构设计:确定软件结构。 9个步骤: ① 设想供选择的方案 ② 选取合理的方案 ③ 推荐最佳方案 ④ 功能分解 ⑤ 设计软件结构 ⑥ 设计数据库 ⑦ 制定测试计划 ⑧ 书写文档 ⑨ 审查和复审
和理解; 可以使软件容易测试和调试,因而有助于提高软 件的可靠性; 能够提高软件的可修改性; 有助于软件开发工程的组织管理。
32
模块化五条标准
模块可分解性
把问题分解为子问题 模块可组装性 可复用 模块可理解性 无需参考其他模块,易于构造和修改 模块连续性 微小修改只导致对个别模块 模块保护性 异常影响局限在模块内部
“隐蔽”意味着模块彼此间仅仅交换那些为了完成系统功能而 必须交换的信息。 “局部化”是指把一些关系密切的软件元素物理地放得彼此靠 近。局部化有助于实现信息隐蔽。
设计和确定模块时,使得一个模块内包含的信息(过程和 数据)对于不需要这些信息的模块来说,是不能访问的。 模块内部的数据与过程,应该对不需要了解这些数据与过 程的模块隐藏起来。只有那些为了完成软件的总体功能而 必需在模块间交换的信息,才允许在模块间进行传递。
39
5.2.5 模块独立
模块独立的概念是模块化、抽象、信息隐
蔽和局部化概念的直接结果。 模块独立性概括了把软件划分为模块时要 遵守的准则,也是判断模块构造是否合理 的标准。 为什么模块的独立性很重要呢?
有效的模块化(即具有独立的模块)的软件 比较容易开发出来。 独立的模块比较容易测试和维护。
应该把模块组织成良好的层次系统,顶层模块
调用它的下层模块以实现程序的完整功能,每
个下层模块再调用更下层的模块,从而完成程 序的一个子功能,最下层的模块完成最具体的 功能。 软件结构(即由模块组成的层次系统)可以用 层次图或结构图来描绘。(5.4节)
15
5.1.6 数据库设计
如需使用数据库,分析员应该在需求分析阶段对
9
5.1.1 设想供选择的方案
并且力求从中选出最佳方案。 需求分析阶段得出的数据流图是总体设计的极好的出 发点。数据流图中的某些处理可以逻辑地归并在一个 自动化边界内作为一组,另一些处理可以放在另一个 自动化边界内作为另一组。这些自动化边界通常意味
在总体设计阶段分析员应该考虑各种可能的实现方案,
着某种实现策略。
设想把数据流图中的处理分组的各种可能的方法,抛
弃在技术上行不通的分组方法(例如,组内不同处理 的执行时间不相容),余下的分组方法代表可能的实 现策略,并且可以启示供选择的物理系统。 在总体设计的该步骤中分析员仅仅一个边界一个边界 地设想并且列出供选择的方案,并不评价这些方案。
系统数据要求所做的分析的基础上进一步设计数 据库。包括下述四个步骤: 模式设计: 模式设计的目的是确定物理数据 库结构。 子模式设计:子模式是用户使用的数据视图。 完整性和安全性设计。 优化:主要目的是改进模式和子模式以优化 数据的存取。
16
5.1.7 制定测试计划
在软件开发的早期阶段考虑测试问题,能促使软
述)开始。也就是说,该陈述仅仅概念性地描述
了功能或信息,但是并没有提供功能的内部工作 情况或信息的内部结构。
求精要求设计者细化原始陈述,随着每个后续求
精(细化)步骤的完成而提供越来越多的细节。
36
5.2.3 逐步求精
逐步求精是许多软件工程技术(如规格说明技术、
设计和实现技术)的基础--为了能集中精力解
34
5.2.2 抽象
处理复杂系统的唯一有效的方法是用层次的方式
构造和分析它。
一个复杂的动态系统首先可以用一些高级的抽象
概念构造和理解,这些高级概念又可以用一些较
低级的概念构造和理解,如此进行下去,直至最 低层次的具体元素。
35
5.2.3 逐步求精
求精实际上是细化过程。 我们从在高抽象级别定义的功能陈述(或信息描
2
3
4
第五章
总体设计
总体设计的基本目的
总体设计的基本目的就是回答“概括地说,系统应该
如何实现?”这个问题。
总体设计又称为概要设计或初步设计。
总体设计阶段的任务
通过这个阶段的工作将划分出组成系统的物理元素——程序、文
件、数据库、人工过程和文档等等,但是每个物理元素仍然处于 黑盒子级,这些黑盒子里的具体内容将在以后仔细设计。
18
5.1.9 审查和复审
最后应该对总体设计的结果进行严格的技术审
查,在技术审查通过之后再由使用部门的负责 人从管理角度进行复审。
19
5.1.10 技术上的约定
制定规范 确定设计的目标和优先顺序 选定设计方法 规定设计文档的编制标准 文档体系、详细程度、图形画法、纸张样式 编码形式 接口约定、命名规则
23
5.1.10 技术上的约定
评审 实用性 确认该设计对于需求的解决方案是否实用 技术清晰度 确认该设计是否以一种易于翻译成代码的形式表 达 可维护性 确认该设计是否考虑了方便未来的维护 质量 确认该设计是否表现出良好的质量特征
24
5.1.10 技术上的约定
评审 各种选择方案 看是否考虑过其它方案,比较各种选择方案的标 准是什么 限制 评估对该软件的限制是否现实,是否与需求一致 其它具体问题 对于文档、可测试性、设计过程……等进行评估
25
在软件设计过程中应该遵循的基 本原理和相关概念
5.2 设 计 原 理
**
模块化
抽象
逐步求精 信息隐蔽和局部化 模块独立
26
5.2.1 模块化
模块是由边界元素限定的相邻的程序元素
(例如,数据说明,可执行的语句)的序列, 而且有一个总体标识符来代表它。 模块是数据说明、可执行语句等程序对象的 集合,它是单独命名的而且可通过名字来访 问,例如,过程、函数、子程序、宏等等都 可作为模块。 过程、函数、子程序和宏等,都可作为模块。 面向对象范型中的对象是模块,对象内的方 法也是模块。模块是构成程序的基本构件
22
5.1.10 技术上的约定
评审 可追溯性 确认该设计是否复盖了所有已确定的软件需求, 软件每一成份是否可追溯到某一项需求 接口 确认该软件的内部接口与外部接口是否已经明确 定义。模块是否满足高内聚和低耦合的要求。模 块作用范围是否在其控制范围之内 风险 确认该设计在现有技术条件下和预算范围内是否 能按时实现
38
5.2.4 信息隐蔽和局部化
信息隐蔽和局部化的优点
测试期间和软件维护期间需要修改软件, 使用信息隐蔽原理作为模块化系统设计的 标准就会带来极大好处。 因为绝大多数数据和过程对于软件的其他 部分而言是隐蔽的(也就是“看”不见 的),在修改期间由于疏忽而引入的错误 就很少可能传播到软件的其他部分。
29
最适当的模块数目
30
模块化的根据
不等式
C(P1+P2)> C(P1)+ C(P2) E(P1+P2)> E(P1)+ E(P2) “各个击破”的结论——把复杂的问题分解 成许多容易解决的小问题,原来的问题也就 容易解决了
31
模块化的优点
可以使软件结构清晰,不仅容易设计也容易阅读
27
5.2.1 模块化
模块化就是把程序划分成若干个模块,每个
模块完成一个子功能,把这些模块集中起来 组成一个整体,可以完成指定的功能,满足 问题的要求。
28
5.2.1 模块化
如果一个大型程序仅由一个模块组成,很
难被人理解。 设函数C(x)定义问题x的复杂程度,函数 E(x)定义解决问题x需要的工作量(时间) 。对于两个问题P1和P2,如果: C(P1)>C(P2) 那么 E(P1)>E(P2) 根据解决问题的经验,有一个规律是: C(P1+P2)>C(P1)+C(P2) 于是有 E(P1+P2)>E(P1)+E(P2)
在使用部门的负责人接受了分析员所推荐的
方案之后,将进入总体设计过程分解
程序(特别是复杂的大型程序)的设计,通常分为两
个阶段完成: 结构设计:结构设计是总体设计阶段的任务。结构 设计确定程序由哪些模块组成,以及这些模块之间 的关系。 过程设计:过程设计是详细设计阶段的任务。过程 设计确定每个模块的处理过程。
第二部分 开发阶段
系统设计
总体设计
体系结构设计 模块设计 用户界面设计 数据结构与算法设计
详细设计
系统实现
编码和单元测试 综合测试
1
结构化设计(Structured Design,SD)分为两个阶段: 总体设计(又称概要设计) 通过仔细分析软件规格说明,适当地对软件进行 功能分解,从而把软件划分为模块,并且设计出 完成预定功能的模块结构。 详细设计 详细设计阶段详细地设计每个模块,确定完成每 个模块功能所需要的算法和数据结构。