1、 . 《软件工程》习题参考答案 周兵 1.1 教材:《软件工程》方木云主编,清华大学,2016 1.2 参考书目: 1.《Software engineering》8th Edition Ian Sommervile,Pearson Education, 机
2、械工业,2006 2. 《软件工程》, 王忠群主编, 中国科学技术大学, 2009 3. 《软件工程导论》(第4版), X海藩编著, 清华大学, 2007 4、《Software engineering : a practitioner's approach》 Roger S. Pressman. 6th ed. Pressman, Roger S. China Machine Press, 2008 1.3 说明: 斜体部分是可选讲授内容, 带星号的习题为可选。 第1章 软件工程学概述 1.1 习题 A.1 什么是软件?软件可以分为哪些类?p11 答:软件是程
3、序、数据及相关文档的完整集合。软件可分为通用软件和定制软件。 A.2 *什么是软件危机及其表现?p11 答:软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。软件危机包含下述两方面的问题:如何开发软件,以满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件。 具体地说,软件危机主要有以下一些典型表现。 (1) 对软件开发成本和进度的估计常常很不准确。 (2) 用户对“已完成的”软件系统不满意的现象经常发生。 (3) 软件产品的质量往往靠不住。 (4) 软件常常是不可维护的。 (5) 软件通常没有适当的文档资料。 (6) 软件成本在计算机系统总成本中所
4、占的比例逐年上升。 (7) 软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。 A.3 什么是软件工程?p11 答:软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。 A.4 什么是软件过程?p20 答:软件过程由软件定义、软件开发和运行维护(也称为软件维护)3个时期组成,每个时期又进一步划分成若干个阶段。 第2章 软件过程模型 2.1 习题 A.1 什么是瀑布型方法?p
5、20 答:按照时间顺序依次进行可行性分析、项目计划、需求分析、概要设计、详细设计、编码与单元测试、集成测试、确认验证、运行与维护等几个阶段进行软件开发。 A.2 什么是快速原型方法?p28 答:所谓快速原型是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集。强调过程的多次反复,对文档的要求不高。 A.3 什么是增量方法?说说它产生的原因和适用的X围。P43 答:增量模型也称为渐增模型,是快速原型法的一种;使用增量模型开发软件时,把软件产品作为一系列的增量构件来设计、编码、集成和测试。 使用增量模型可以:在较短时间内向用户提交可完成部分
6、工作的产品;客户可以将早期的增量作为原型,从中获得对后面系统增量的需求经验;项目总体性失败的风险比较低。 A.4 什么是面向复用方法?说说它产生的原因和适用的X围。P43 答:面向复用的方法使用可复用软件组件以及能集成这些组件的框架来构建和开发新的软件;有时,这些组件本身就是一个独立的能满足某种需要的系统。 使用这种方法可以节省大量的重复劳动,加快开发速度。存在大量可以重用的构件的时候,可以使用这种方法。 A.5 什么是形式化方法?说说它产生的原因和适用的X围。P43 答:形式化系统开发是一个类似瀑布模型的软件开发方法,但其开发过程基于的是用形式化数学转换来将系统描述转换成一
7、个可执行程序。 因为使用这种方法可以大大提高软件的可靠性,以及节省测试成本;这种方法主要用于可靠性要求很高的软件。 第3章 可行性研究 第4章 需求分析 4.1 习题 A.1 为什么要进行软件需求分析?请叙述软件需求分析的主要过程。P66 答:软件需求分析在软件开发过程中具有举足轻重的地位,它是开发出正确的、高质量的软件系统的重要保证。有数据表明,更正需求分析阶段的一个错误所花费的工作量是更正测试阶段的一个错误的一百倍。 软件需求分析的主要过程: 获取用户需求、分析用户需求、编写需求文档、进行需求评审 A.2 软件需求规格说明书由哪些部分组成?p66 答:软件需求
8、规格说明书由引言、任务概述、需求规定、运行环境规定四个部分组成。 第5章 概要设计(总体) 5.1 习题 A.1 什么是模块?什么是模块化?。P75 答:模块是由边界元素限定的相邻程序元素(例如,数据说明,可执行的语句)的序列,而且有一个总体标识符代表它。过程、函数、子程序和宏等,都可作为模块。面向对象方法学中的对象是模块,对象内的方法(或称为服务)也是模块。模块是构成程序的基本构件。 模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。模块化是为了使一个复杂的大型程序能被人的智力所管理。
9、 A.2 衡量模块独立性的两个标准是什么?它们各表示什么含义?P75 答:模块的独立程度可以由两个定性标准度量,这两个标准分别称为内聚和耦合。耦合是对一个软件结构内不同模块之间互连程度的度量。内聚标志一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。 第6章 界面设计 6.1 习题 A.1 界面设计的原则是什么?P88 答: 用户界面设计原则 原则 描述 用户熟悉 界面所使用的术语和概念应该是来自于用户的经验,这些用户是使用系统最多的人 一致性 界面应该是一致的,即尽可能地让相似的操作有同样的触发方式 意外最小化 永远不要让用户对系
10、统的行为感到吃惊 可恢复性 界面应该有一种机制来允许用户从错误中恢复 用户指南 在错误发生时界面应该提供有意义的反馈,并有上下文感知能力的用户帮助功能 用户差异性 界面应该为不同类型用户提供合适的交互功能 第7章 详细设计 7.1 习题 A.1 *画出下列伪码程序的程序流程图: START IF p THEN WHILE q DO f END DO ELSE BLOCK g n END BLOCK END IF STOP 答: T n F F
11、 开始 g p f q T 结束 A.2 *下图给出的程序流程图代表一个非结构化的程序,请问: (1) 为什么说它是非结构化的? (2) 设计一个等价的结构化程序。 (3) 在(2)题的设计中你使用附加的标志变量flag了吗?若没用,请再设计一个使用flag的程序;若用了,再设计一个不用flag的程序。 图 一个非结构化程序 答: (1) 因为它不是单出口的程序。 (2) (3) 第8章 实现 8.1 习题 A.1 p101 A.2 什么是软件测试,软件测试的基本准则是什么? 答:测试是为了发现程序中的错误
12、而执行程序的过程,测试是保证软件质量的重要手段之一。 软件测试准则(经验) (1) 所有测试都应该能追溯到用户需求。 (2) 应该远在测试开始之前就制定出测试计划。 (3) 把Pareto原理应用到软件测试中。Pareto原理说明,测试发现的错误中的80%很可能是由程序中20%的模块造成的。 (4) 应该从“小规模”测试开始,并逐步进行“大规模”测试。 (5) 穷举测试是不可能的。 (6) 为了达到最佳的测试效果,应该由独立的第三方从事测试工作。。 A.3 软件测试的目的是什么,为什么把软件测试的目的定义为只是发现错误? 答:测试的目的是找出整个软件开发周期中各个阶段的错
13、误,如果测试是为了发现程序中的错误,就会力求设计出最能暴露错误的测试方案,从而提高测试效率。 A.4 黑盒测试方法有哪些? 答:黑盒测试方法有等价划分、边界值分析、错误推测法。 A.5 白盒测试方法有哪些? 答:白盒测试方法有逻辑覆盖,逻辑覆盖又可分为:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖、路径覆盖。 第9章 演化(维护) 9.1 习题 A.1 P105 维护分为哪几类? 答:维护分为: 改正性维护、适应性维护、完善性维护、预防性维护。 第10章 面向对象方法学 10.1 习题 A.1 P115 什么是UML? 答:U
14、ML(Unified Modeling Language)是一种定义良好、易于表达、功能强大且普遍适用的建模语言。它融入了软件工程领域的新思想、新方法和新技术。它的作用域不仅仅限于支持面向对象的分析与设计,而是全面支持从需求分析开始的软件开发的全过程。 A.2 P115 一般从哪几种常用的视角来描述一个系统? 答:用面向对象方法开发软件,通常需要建立3种形式的模型,它们分别是描述系统静态结构的对象模型,描述系统动态行为的动态模型和描述系统功能的功能模型。 第11章 基于其它粒度的构造方法 11.1 习题 A.1 P131 什么是软件体系结构? 答:Hayes Roth认
15、为软件体系结构是一个抽象的系统规X,主要包括用其行为来描述的功能构件和构件之间的相互连接、接口和关系。 A.2 P131 软件体系结构的组成要素是什么? 答:软件体系结构包含构件、连接件和约束3个最基本的组成元素。 A.3 P149 Agent概念的几个主要特征是什么? 答:与Agent概念相关的几个主要特性: 自治性、异构性、动态性、通信、协议、承诺。 A.4 P149 Agent的组织类型有哪些? 答:Agent的组织类型有:层次、组合、团队、市场。 A.5 P171 如何理解SOA架构?请画图给出面向服务体系结构中的协作是怎样进行的过程。 答:SOA的定义为“客
16、户端/服务器的软件设计方法,一项应用由软件服务和软件服务使用者组成。SOA架构的实质就是将系统模型与系统实现分离。 第12章 面向云计算方法 12.1 习题 A.1 P207 从研究现状上看,云计算具有什么特点? 答:云计算具有以下特点: 超大规模、虚拟化、高可靠性、通用性、高可扩展性、按需服务、极其廉价。 A.2 P207 Google云计算技术具体包括哪些? 答:Google云计算技术具体包括:Google文件系统GFS、分布式计算编程模型MapReduce、分布式锁服务Chubby和分布式结构化数据存储系统Bigtable等。其中,GFS提供了海量数据的存储和访问
17、的能力,MapReduce使得海量信息的并行处理变得简单易行,Chubby保证了分布式环境下并发操作的同步问题,Bigtable使得海量数据的管理和组织十分方便。 第13章 CASE工具 13.1 习题 P207 CASE的定义是什么? 答: CASE即puter Aided Software Engineering,中文意思是计算机辅助软件工程。 CASE是一套方法和工具。 CASE的一个基本思想就是提供一组能够自动覆盖软件开发生命周期各个阶段的集成的、减少劳动力的工具。 第14章 软件项目 14.1 习题 A.1 P233 什么是项目,软件项目有哪些特点
18、 答:项目是为完成一个独特的产品、服务或者任务而进行的一次性努力。软件项目是一种特殊的项目,软件项目除了具有一般项目的基本特征外,还具有以下特征: (l)软件项目是知识密集型项目。 (2)软件项目采用以用户为中心的理念。 (3)软件项目的风险较大。 (4)软件项目的管理严格。 (5)软件产品需要多次完善。 (6)软件项目的文档编写量较大。 A.2 P233 软件项目立项的一般过程包括哪些? 答:软件项目立项的一般过程包括: 软件项目的发起阶段、项目的论证阶段、项目的审核阶段、项目的立项。 第15章 人员管理 15.1 习题 P245 小组协作方式有哪些?
19、 答:小组协作方式有两种:XX制程序员组、主程序员组。 第16章 进度管理 16.1 习题 P250 表达项目进度的图形工具有那两种? 答:表达项目进度的图形工具有两种:工程网络图(活动网络图)、Gantt图(条形图)。 第17章 成本管理 17.1 习题 P258 软件成本的组成因素有哪些? 答:软件成本的组成因素有: 包括维护在内的硬件和软件费用、差旅费和培训费用、工作成本,即支付给软件开发人员的费用。 P258 软件生成率的度量方式有哪些? 答:软件生成率的度量方式有:面向规模的度量、面向功能的度量。 第18章 质量管理 18.1
20、 习题 A.1 P268 软件质量的定义是什么? 答:国际标准化组织公布的国际标准ISO 8042综合将软件质量定义为:反应实体满足明确的和隐含的需求的能力的特性的总和。 A.2 P268 软件质量因素有哪些? 答:软件的质量属性 安全性 可理解性 可移植性 XX性 可测试性 可使用性 可靠性 适应性 复用性 弹性(易变性) 模块性 效率 鲁棒性 复杂性 可学习性 。 . .word..






