20.集成测试主要有渐增式测试、非渐增式测试两种,试述两种方式的异同点。
渐增式测试:可以较早发现模块间的接口错误、出现的错误往往跟最新加入的模块有关、在不断集成的过程中使模块不断在新的条件下受到新的检测,测试更彻底,但较非渐增式测试费时。
非渐增式测试由于最后才组装,因此错误发现得晚、发现错误后难以诊断定位,但可以同时并行测试所有模块,能充分利用人力。
21.描述集成测试的两种策略,并比较它们的优缺点。
自顶向下测试和自底向上测试两种。
自顶向下测试的优点是不需要测试驱动程序,能够在测试阶段的早期实现并验证系统的主要功能,在早期发现上层模块的接口错误。主要缺点是需要存根程序,可能遇到与此相联系的测试困难,底层模块的错误发现较晚,而且对人力的使用也不利。
而自底向上测试的优缺点与自顶向下测试的优缺点正好相反。
22.什么是回归测试?回归测试的测试用例集如何确定?
回归测试是指重新执行已经做过的测试的某个子集,以保证系统在发生调试、功能变化等事项后,没有带来非预期的副作用。
回归测试的测试用例集按以下方法确定: 1.检测软件全部功能的代表性测试用例。
2.专门针对可能受修改影响的软件功能的附加测试。 3.针对被修改过的软件成分的测试。
23.什么是确认测试?确认测试的任务是什么?如何确认其范围?
验收软件的有效性(功能和性能达标)。 确认测试的工作范围主要有: 1.按合同规定审查软件配置;
2.设计测试计划,使通过测试保证软件能满足所有功能、性能要求; 3.文档与程序一致,具有维护阶段所必须的细节;
4.严格按用户手册操作,以检查手册的完整性和正确性。
24.设计测试方案的任务有哪些?
①预定要测试的功能 ②设计输入的测试数据 ③列出预期结果
25.什么是逻辑覆盖测试法?它主要用于什么测试?
逻辑覆盖测试是一种对程序逻辑通路进行覆盖的测试,通常适用于白盒测试。
26.什么是等价划分法?它主要用于什么测试?
是一种很常用的测试方法。其对测试数据的选择是基于对程序功能的分析,按照程序输入要求和输出要求,选择若干数据进行测试功能的过程。
等价划分法主要用于黑盒测试。
27.什么是边值分析法?它主要用于什么测试?
根据经验,在程序处理的边界最容易发生错误的地方进行测试,主要用于黑盒测试。
28.什么是错误推测法?它主要用于什么测试?
利用有经验的测试者对程序可能发生错误的位置的推测进行测试的方法,主要用于黑盒测试。
29.一个软件的测试策略应该是怎样的?
黑盒设计 ? 白盒补充
① 在任何情况下都应首先使用边界值分析的方法; ② 必要时用等价划分法补充; ③ 必要时再用错误推测法补充; ④ 对照程序逻辑,检查测试方案。
30.什么是调试?调试和测试有什么不同?
测试 —— 发现错误 调试 —— 改正错误
调试与测试的区别在于,调试作为测试的后续工作,主要是解决和排除测试中出现的错误。
31.简单说明调试的方法和策略。
调试过程的关键不是调试技术,而是用来推断错误原因的基本策略。主要有: ① 试探法:凭经验猜测。
② 回溯法:由症状(symptom)最先出现的地方,沿control flow向回检查。适用于小型程序。 ③ 对分法:在关键点插入变量的正确值。
④ 归纳法:从错误症状中找出规律,推断根源。 ⑤ 演绎法:普通 ? 特殊
32.什么是软件的可靠性、可用性和正确性?
软件可靠性是指程序在给定的时间间隔内,按照说明书的规定,成功地运行的概率。 软件可用性是指程序在给定的时间点,按照说明书的规定,成功地运行的概率。 软件正确性是指程序的功能正确。
第七章 维护
1.什么是软件维护?
在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程。
2.软件维护有哪几种类型?
①改正性维护:诊断和改正错误;
②适应性维护:为了和变化了的环境(如软\\硬件升级、新数据库等)适当地配合而修改软件; ③完善性维护:为了增加新功能,修改已有功能,改造界面,增加HELP等,而修改软件; ④预防性维护:为了改进未来的可维护性或可靠性,或为了给未来的改进奠定更好的基础而修改软件。
3.为什么说软件文档维护和代码维护同样重要?
这是因为,软件文档是影响软件可维护性的决定因素。
4.为什么说维护的代价很高?应该怎样做才能降低维护的代价?
一般维护的工作量占生存周期70%以上,维护成本约为开发成本的4倍(满足8-2规则)。维护代价分为:
1.有形代价:费用已上升至总预算的80%; 2.无形代价:
? 占用资源以致延误开发; ?修改不及时引起用户不满;
? 维护引入新错误,降低了软件质量;等等。 3.维护工作量的经验模型:M = P + K*ec-d
降低维护代价的通常认识是:提高程序的可维护性,这也是软件工程学的主要目的。
5.导致维护成本高企的原因主要有哪些?
软件开发途径不好,导致软件可维护性差,原来的开发人员没有参与维护,维护成本日益高涨等,从维护工作量的经验模型可以看到,维护工作量和成本将呈指数增加。
6.什么是软件的可维护性?
软件可维护性可定性地定义为:维护人员理解、改正、改动和改进这个软件的难易程度。
7.如何提高软件的可维护性?
可以从提高决定软件可维护性的因素着手,这些因素是:可理解性、可测试性、可修改性、可移植性、可重用性、可靠性、可使用性、效率等。
9.为什么说文档是影响软件可维护性的决定因素?
由于长期使用的软件系统在使用过程中会有多次修改的经历,而文档应该记载了这些重要的修改,所以文档比之代码更为重要。
10.什么是软件的系统文档?
系统文档是指软件系统从问题定义、需求说明、设计、实现到验收测试计划等一系列和系统实现密切相关的技术文档。
11.什么是软件的用户文档?
提供用户了解、使用、操作和安装系统的文档资料。
12.什么是可重用性?如何通过提高软件的可重用性来提高软件的可维护性?
可重用性是指同一事物不加修改或稍加修改,就可以在不同环境多次重复使用。大量使用可
重用软件构件,可大幅提高软件的可维护性。主要体现在两个方面:
1.可重用构件通常都是组装成功的部件,加上每次重用又都会进一步完善部件,因此可以大幅提高软件的可靠性,而改正性维护要求会降低。
2.很容易修改可重用的软件构件,使之适应新的应用环境,因此软件中使用可重用构件越多,软件的适应性维护和完善性维护也越容易。
13.为什么要进行软件可维护性复审?
目的是提高软件的可维护性。
可维护性复审在软件开放的不同阶段有不同的重点。例如,在分析阶段的复审重点是:可靠性、可移植性、可用性。而编码阶段则主要是:可理解性、可修改性、可移植性和效率。
14.什么是软件的逆向工程和再工程?
软件逆向工程是指当维护对象缺乏必要的文档资料时,分析已有程序,寻求比源代码更高级的抽象表现形式,恢复软件原有设计的过程。换言之,是一个恢复设计的过程。
软件再工程则是以软件工程学为指导,对目标软件进行重新设计、重新编码和测试的过程。
15.逆向工程与再工程与软件的预防性维护有什么样的关系?
预防性维护是为了改进软件未来的可维护性或可靠性,或为了给软件未来的改进奠定更好的基础而修改软件的过程。
预防性维护就是对软件将来可能需要的改动,使用逆向工程与再工程方法对软件进行维护。
16.假设你的任务是对一个已有软件进行重大修改,而且只允许你从以下文档中选取两份:(a)程序的规格说明;(b)程序的详细设计结果(自然语言描述加上某种设计工具表示);(b)源程序清单(其中有适当数量的注解)。
你将选取哪两份文档?为什么这样选取?你打算如何完成这个任务? 应该选择(a)程序的规格说明和(b)程序的详细设计结果。
因为是重大修改,所以需要从修改程序规格说明和详细设计开始,对开发文档进行重大修改,而源码也会需要重新编制。
第八章 面向对象方法学引论
1.为什么要引入面向对象方法学?
1、瀑布模型的缺点:僵化
2、SA - SD - SP 技术的缺点:本质上是基于过程的设计不易被理解;且功能变化往往引起结构变化较大,稳定性不好。系统有明确的边界定义,且系统结构依赖于系统边界的定义,这样的系统不易扩充和修改。数据与操作分开处理,可能造成软构件对具体应用环境的依赖,可重用性(reusability)较差。
2.面向对象方法学有哪4个基本要素?
对象、类、继承、消息
3.面向对象方法学的优点主要有哪些?
1.以object为核心,强调对现实概念的模拟而不是算法。
2.以object模拟实体,需求变化不会引起结构的整体变化,因为实体相对稳定,故系统也相应稳定。
3.一个class所有的 instances 都可重用它的代码;由 inheritance 派生出的新的 class 可重用其父类的代码,并且可以修改、扩充而不影响其父类的使用。
4.从稳定性、Class 的独立性强、继承和多态性、容易理解、容易测试、调试等几方面改善了可维护性。
4.什么是“对象”?它与传统数据有何不同?
对象是封装了数据结构及可以施加在这些数据结构上的操作的封装体,可以表示为:对象Object: = 身份ID + 方法Method + 属性Attribute+ 消息Message。
与传统数据相比,对象有以下特点:
① 以数据为中心,不设与数据无关的操作;
② Object主动处理而不 被动地等待被处理,外部只能通过message请求操作; ③ 具有黑盒性:外部操作时,无须知道该object内部的数据结构及算法;
④ 具有并行性:不同object各自独立地处理自身数据,彼此间仅通过传递message完成通信;
⑤ 模块独立性好:内聚强( ① )、耦合松( ③ ④ )
5.什么是“类”?
具有相同数据和相同操作的一组对象。
6.什么是“继承”?
子类自动共享父类的attributes 和methods ,而不必重复定义。
7.什么是模型?软件开发为什么要建立模型?
模型就是为了理解事物而对事物作出的一种抽象,是对事物的一种无歧义的书面描述。 软件开发建立模型是为了帮助我们思考问题、定义术语、作出适当的假设,并帮助我们保持定义和假设的一致性。
对于较为复杂而不能直接理解的系统,特别需要建立模型,其目的是可以减少复杂性。
8.什么是对象模型?建立对象模型时主要使用哪些图形符号?这些符号的含义是什么?
描述系统数据结构。
对象模型具体是描述系统的静态结构。
9.什么是动态模型?建立动态模型时主要使用哪些图形符号?这些符号的含义是什么?
描述系统控制结构。