软件工程教材习题答案 联系客服

发布时间 : 星期六 文章软件工程教材习题答案更新完毕开始阅读

《软件工程——理论与实践》(第2版)习题答案

(5) 采用“快速”的算术运算。

(6) 不要混淆数据类型,避免在表达式中出现类型混杂。 (7) 尽量采用整数算术表达式和布尔表达式。 (8) 选用等效的高效率算法。

上述的原则要在转换时统筹考虑,而不应该教条地使用。例如,程序员谨守的一条原则就是尽量不用GOTO语句,但是当要从一个嵌套很深的循环中直接跳出来时,GOTO语句就能很好地发挥作用。

7.影响软件代码效率的因素有哪些? 答:⑴算法对效率的影响

关于算法的转换指导原则,在一定程度上减小了算法对效率的影响。从这一点能够看出算法直接影响到的是程序,进而影响到了整个代码的效率问题。故而在转换时需要注意之外,在程序设计和实现时同样需要考虑效率的问题。

⑵存储效率

处理器的分页调度和分段调度的特点决定了文件的存储效率,同样对于代码也存在这个问题。一般来说使用能保持功能域的结构化控制结构是提高效率的好办法。提高效率的办法通常也是提高存储效率的方法。

⑶输入输出效率

输入和输出的效率决定的是人与计算机之间通信的效率,程序设计中输入和输出的简单清晰,是提高输入输出效率的关键。

8.请仿照C语言的代码审查项目表提出针对于Java语言的审查项目表。 答:略。

9.请找出你和其他同学/同事的一些程序作品,然后互相审查对方的代码,写出一份审查报告。 答:略。

10.根据代码审查报告来修改你自己的代码,然后再作一次审查来检验你的结果。 答:略。

习题七答案

1. 基于组件的软件开发的优势是什么?

大量来自产业实例研究的证据表明基于组件的软件开发导致软件系统的开发成本、开发质量、开发效率都得到了显著的改善。

①开发的质量

基于组件的软件开发的一个明显优点就是提高了软件的质量。可复用的组件相对于在单一应用中使用的模块来说,一般都更为成熟并具有较高的质量保证,这主要是因为:

(1)可复用的组件在开发过程中都经过严格的测试。组件的开发者一般都是在该组件的使用领域具有丰富经验、对该领域具有深入研究的开发团体,他们能从以往的客户和开发项目那里得到许多宝贵的经验,因而更容易开发出高质量的组件“精品”。在组件的开发过程中,为了保证它广泛

25

《软件工程——理论与实践》(第2版)习题答案

的适应性和在频繁使用过程中的正确性,一般对其有更高的质量要求,并且在组件正式发布以前,都要进行更为严格的测试。因而可复用组件的质量会得到更好的保证。

(2)可复用的组件在不断复用过程中,其中的错误和缺陷会被陆续的发现,并得到及时的排除。所以随着一个可复用组件复用次数的不断增加,其中的错误会逐渐减少,软件的质量也随之改善。在软件开发中使用的一个可复用组件通常都是经过许多其他客户的频繁使用,因此可复用的组件相对于新开发的模块更为成熟。

HP公司的一份研究报告认为:“被复用代码的缺陷率是每一千行0.9个缺陷。而在新开发的代码中缺陷率是每一千行4.1个缺陷。对一个包含68%复用代码的软件来说,缺陷率是每一千行2.0个缺陷,比无复用的软件缺陷率大约减少了51%。”

所以可以说,基于可复用的组件的软件开发在质量和可靠性方面确实带来了实质性的提高。 ②开发的效率

基于可复用组件的软件开发对于提高软件开发的效率也有着显著的作用。软件复用已经渗透到了软件开发的各个阶段,在开发的各个阶段都有可以被重复使用的软件产品。在分析和设计阶段可以复用的组件包括:应用框架、用例、分析和设计模型等产品。在编码阶段可以复用的组件包括:函数库、子程序库、类库、二进制组件库等产品。在测试阶段复用的组件包括测试用例和测试数据等产品。显然使用现成可用的可复用组件比从头开始进行开发在开发效率上大为提高。在软件开发的各个阶段使用相应的可复用组件对于提高软件产品的生产效率具有重大的意义。

然而使用可复用的组件对开发效率的影响受到多方面因素的影响,这些因素包括:应用领域、问题的复杂度、开发队伍的结构和规模、项目开发的周期、被应用的技术等。由于在不同的应用中影响其开发效率的因素有所不同,所以可复用组件对开发效率的提高程度也是不同的,一般大约30%-50%的复用可以使开发效率提高25%-40%。

③开发的成本

使用可复用的现成组件进行软件开发比一切都重新开发,其成本大为节省。它避免了不必要的重复劳动和人力财力的浪费。同时也必须意识到基于组件的软件开发也是有一定成本和代价的。首先是开发可复用的组件的成本。通常开发、测试、维护一个可复用的组件的成本是一个具有相同功能非复用组件的1.5-3倍。因为可复用的组件需要有更强的适应性和更高的质量保证。其次是建立和维护组件库的成本。对组件库的管理、维护、检索和修改也需要投入相当的时间和金钱。另外,在开发软件复用一个组件时,也是需要一定成本的。虽然复用一个现成的组件的成本比重新开发的成本要低得多,只有后者的四分之一左右,但是复用的开销不会降到零。

2. 基于组件的软件开发面临哪些挑战和困难?

在意识到基于可复用的组件进行软件开发在开发成本、开发效率和开发质量方面带来的巨大效益的同时,开发人员也必须清楚的意识到使用可复用的组件进行软件开发所面临的风险和困难。这包括使用的组件不能完全适应应用的需要,组件的适应性很差或根本不能对其进行调整。

另外在进行基于组件的软件开发时,很多情况下需要使用的可复用组件需要向第三方的组件开发商进行购买,这会带来更大的风险:

(1)在同一系统采用多个开发商提供的组件,它们之间的兼容性可能是开发过程中所要面对的一个严峻的问题。

(2)采用随处可以购买到的组件可能会使开发出来的软件产品丧失技术上的独创性和市场上的竞争力。

(3)第三方的组件开发商可能歇业,这会使购买的组件失去维护服务。这些都是在购买第三方组件进行软件开发时无法回避的问题,因此需要对这些风险进行充分的估计。

3. 生产者复用(Product Reuse)和消费者复用(Consumer Reuse)有何区别?

答:生产者复用是指建立、获取或者重新设计可复用构件的活动。生产者复用中涉及的活动包

26

《软件工程——理论与实践》(第2版)习题答案

括:复用的规划、领域分析、构件的开发、构件库的组织和管理。消费者复用是指使用可复用的构件建立新的软件系统的活动。消费者复用中涉及的活动包括:应用系统的规划、构件的检索和选择、应用系统中非复用部分的开发、应用系统的组装等。

4.什么是可复用组件?相对于普通软件产品,对可复用组件有何特殊要求?

答:可复用构件是指可以在多个软件系统的开发过程中被重复使用的软件产品。

相对于普通软件产品,对可复用构件的特殊要求包括:具有功能上的独立性与完整性、具有较高的通用性、具有较高的灵活性、具有严格的质量保证和具有较高的标准化程度。

5.什么是软件复用?

答:软件复用是指重复使用已有的软件产品来开发新的软件系统,以达到提高软件系统的开发质量与效率、降低开发成本的目的。在软件复用中重复使用的软件产品不仅仅局限于程序代码,而是包含了在软件生产的各个阶段所得到的各种软件产品,这些软件产品包括:领域知识、体系结构、需求分析、设计文档、程序代码、测试用例和测试数据等。将这些已有的软件产品在软件系统开发的各个阶段重复使用,这就是软件复用的原理。

6. 软件复用的层次可以分为哪几个级别?

答:(1)代码的复用;(2)设计结果的复用;(3)分析结果的复用;(4)测试信息的复用。

7.简述三种应用最为广泛的组件技术规范:COM、CORBA和EJB的各自特点。 答:略。

习题八答案

一、 选择题

1. 软件测试的主要特点是(A C)。

A) 软件测试的开销大 B) 软件测试要依靠工具 C) 软件不能进行“穷举”测试 D) 软件测试要依靠人工 2. 整体测试又称为组装测试,其主要内容包括(C D)。

A) 对整体的性能进行测试 B) 用白盒法设计测试用例进行测试 C) 确定组装策略和次序 D) 对组装过程进行测试 3. 渐增式是将模块一个一个地连入系统,每连入一个模块(C)。 A) 只需要对新连入的模块进行测试 B) 都不需要再进行测试 C) 要对新子系统进行测试 D) 都要进行回归测试 4. 静态测试是以人工的、非形式化的方法对程序进行分析和测试。常用的静态测试方法有 (B C D)。

A) 运行程序并分析运行结果 B) 桌前检查与代码会审 C) 数据流分析图 D) 调用图 5. 集成过程的原则是(B C)。 A) 按照模块的大小集成 B) 尽早测试包含I/O的模块

27

《软件工程——理论与实践》(第2版)习题答案

C) 尽早测试关键模块

D) 按照“输入—处理—输出”的次序进行集成

6. 面向对象的测试与传统测试方法的主要区别是(A C)。

A) 面向对象的测试可在编码前进行,传统测试方法在编码后进行

B) 面向对象的测试以需求和设计阶段的测试为主,不需要进行代码测试 C) 测试对象不同

D) 面向对象的测试不需要设计测试用例,只需要进行会议评审 7. 软件测试的基本原则是(A C D)。 A) 关键是注重选择高效的测试用例 B) 选择尽可能多的测试用例 C) 尽量不由程序设计者进行测试 D) 充分注意测试中的群集现象 8. 等价分类法的关键是(C)。 A) 确定等价类的边界条件 B) 按照用例来确定等价类 C) 划分等价类 D) 确定系统中相同和不同的部分 二、 判断题

1. 单元测试通常应该先进行人工走查,再以白盒法为主,辅以黑盒法进行动态测试。 (√) 2. 功能测试是系统测试的主要内容,检查系统的功能、性能是否与需求规格说明书相同。( √) 3. 白盒法是一种静态测试方法,主要用于模块测试。 (×)

4. 整体测试又称为逻辑覆盖测试,需要对系统模块的内部结构进行测试。(×) 5. 在等价分类法中,为了提高测试效率,一个测试用例可以覆盖多个无效等价类。(×) 6. 发现错误多的模块,残留在模块中的错误也多。(√)

7. 面向对象的测试不能采用黑盒法,因为它是一种全新的开发模式。(×) 8. 在发现错误后,则应按照一定的技术去纠正它,纠错的关键是定位错误。(√) 三、 简答题

1. 等价分类法的基本思想是什么?

答:根据程序的输入特性,将程序的定义域划分为有限个等价区段——“等价类”,从等价类中选择出具有“代表性”的用例,即测试某个等价类的代表值就等价于对这一类其他值的测试。如果某个等价类的一个输入数据(代表值)测试中查出了错误,说明该类中其他测试用例也会有错误。 2. 自顶向下渐增与自底而上渐增各有何优、缺点? 答:① 自顶向下渐增

优点:能够尽早发现系统主控方面的问题,并尽早测试系统结构的问题。

缺点:需要编写桩模块,由于下属模块往往不止一个,也不止一层,加之模块接口的复杂性,桩模块很难模拟各下层模块之间的调用关系,也无法验证桩模块是否完全模拟了下属模块的功能。因此很难尽早查出底层容易出错的复杂模块中的错误,所以导致过多的回归测试。

② 自底向上渐增

优点:需要编写驱动模块。驱动模块是模拟主程序或者调用模块的功能,处于被测试模块的上

28