测试 —— 发现错误 调试 —— 改正错误
调试与测试的区别在于,调试作为测试的后续工作,主要是解决和排除测试中出现的错误。
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.什么是动态模型?建立动态模型时主要使用哪些图形符号?这些符号的含义是什么?
描述系统控制结构。
动态模型具体是表示系统瞬时的控制性质。
10.什么是功能模型?建立功能模型时主要使用哪些图形符号?
描述系统功能。
功能模型具体描述的是表明系统应该做什么。
第九章 面向对象分析
1.进行面向对象分析的基本过程是怎么样的?
需求陈述 ? 快速原型 ? 模型
其中模型 有三个:对象模型、动态模型、功能模型。
2.建立对象模型有哪几个步骤?
1、确定类与对象:
第1步:列出所有候选对象 第2步:去粗取精 2、确定关联 ? 结构层 第1步:收集 第2步:筛选删除 第3步:完善 3、划分主题 4、确立属性
5、识别继承关系及其它修改
3.复杂问题的对象模型有哪5个层次?
主题层、类&对象层、结构层、属性层、服务层。
4.建立动态模型的步骤有哪些?
1、编写脚本,描述事件序列:
事件 = 触发器 + 接收器 + 参数 2、设想用户界面? 修改原型. 3、画事件跟踪图 4、画状态图
5.如何建立功能模型?
1.画出基本系统模型图 2.画出功能级数据流图 3.描述处理框功能