软件工程导论(第六版)课后习题答案 下载本文

④用数字和标点符号作为命令b和命令f的参数 预期的输出:“参数类型错”

⑤用字母字符作为命令s和命令d的参数 预期的输出:“参数类型错”

⑥用0和负数作为命令s和命令d的参数 预期的输出:“参数数值错”

⑦命令顺序错:例如,没执行命令b就执行命令s,或没执行命令s就执行命令d 预期的输出:“命令顺序错”

⑧命令语法错:例如,遗漏命令名b、s、d或f;或命令参数没用圆括号括起来 预期的输出:“命令语法错”

⑨命令参数空:例如,b()、s()、d或f() 预期的输出:系统提供默认参数或给出出错信息 ⑩使用拼错了的作者姓名作为f的参数 预期的输出:“找不到这们作者的著作” 第六题

6、航空公司A向软件公司B订购了一个规划飞行路线的程序。假设你是软件公司C的软件工程师,A公司已雇用你所在的公司对上述程序进行验收测试。任务是,根据下述事实设计验收测试的输入数据,解释你选取这些数据的理由。

领航员向程序输入出发点和目的地,以及根据天气和飞机型号而初步确定的飞行高度。程序读入途中的风向风力等数据,并且制定出3套飞行计划(高度,速度,方向及途中的5个位置校核点)。所制定的飞行计划应做到燃料消耗和飞行时间都最少。

用正常的输入数据作为测试数据

① 向程序输入常规的出发点,目的地,飞机型号,5个位置校核点,高度和速度。 ② 输入3~5组出发点和目的地,重复执行步骤1

③ 输入固定的出发点、目的地、飞机型号、5个位置校核点和高度,分别输入3~5个不同的速度,重复执行步骤1

④ 输入固定的出发点、目的地、飞机型号、5个位置校核点和速度,分别输入3~5个不同的高度,重复执行步骤1

⑤ 输入固定的出发点、目的地、飞机型号、速度和高度,分别输入3~5组不同的位置校核点,重复执行步骤1

⑥ 输入固定的出发点、目的地、5个位置校核点和高度,分别输入3~5个不同的飞机型号,重复执行步骤1

⑦ 输入固定的目的地、5个位置校核点和高度,分别输入3~5个不同的飞机型号,重复执行步骤1 ⑧ 输入固定的出发点、5个位置校核点和高度,分别输入3~5个不同的目的地,重复执行步骤1

(2) 用特殊的数据值作为测试数据

① 分别输入非常高和非常低的数据组合测试 ② 用负数测试

③ 输入数字0进行测试

④ 分别输入相距非常远和非常近的出发点和目的地测试

ay和size,size小于数组的大小,并给出需要查找的值,该值在somearray中; 预期的输出:返回-1;

⑤ 首先给出某个数组somearray和size,size大于数组的大小,并给出需要查找的值,该值不在somearray中;

预期的输出:返回-1;

⑥ 首先给出某个数组somearray和size,size大于数组的大小,并给出需要查找的值,该值在somearray中;

预期的输出:返回-1; 第七题

7、严格说来,有两种不同的路径覆盖测试,分别为程序路径覆盖和程序图路径覆盖。这两种测试可分别称为程序的自然执行和强, , 迫执行。所谓自然执行是指测试者(人或计算机)读入程序中的条件表达式,根据程序变量的当前值计算该条件表达式的值(真或假),并相应地分支。强迫执行是在用程序图作为程序的抽象模型时产生的一个人为的概念,它可以简化测试问题。强迫执行的含义是,一旦遇到条件表达式,测试者就强迫程序分两种情况(条件表达式的值为真和为假)执行。显然,强迫执行将遍历程序图的所有路径,然而由于各个条件表达式之间存在相互依赖的关系,这些路径中的某一些在自然执行时可能永远也不会进入。 为了使强迫执行的概念在实际工作中有用,它简化测试工具的好处应该超过它使用额外的不可能达到的测试用例所带来的坏处。在绝大多数情况下,强迫执行的测试数并不比自然执行的测试数大很多,此外,对强迫执行的定义实际上包含了一种技术,能够缩短在测试含有循环的程序时所需要的运行时间。 程序的大部分执行时间通常用于重复执行程序中的DO循环,特别是嵌套的循环。因此必须发明一种技术,使得每个DO循环只执行一遍。这样做并不会降低测试的功效,因为经验表明第一次或最后一次执行循环时最容易出错。

Laemmel教授提出的自动测试每条路径的技术如下: 当编写程序时每个DO循环应该写成一种包含测试变量T和模式变量M的特殊形式,因此 DO I= 1 TO 38 应变成

DO I=1 TO M*38+(1-M)*T

可见,当M=0时处于测试模式,而M=1时处于正常运行模式。当处于测试模式时,令T=0则该循环一次也不执行,令T=1则该循环只执行一次。 类似地应该使用模式变量和测试变量改写IF语句,例如 IF X+Y>0 THEN Z=X ELSE Z=Y应变成

IF M*(X+Y)+T>0 THEN Z=X ELSE

Z=Y正常运行时令M=1和T=0,测试期间令M=0,为测试THEN部分需令T=+1,测试ELSE部分则令T=-1。 要求:

(1) 选取一个包含循环和IF语句的程序,用Laemmel技术修改这个程序,上机实际测试这个程序并解释所得到的结果。

(2) 设计一个程序按照Laemmel技术自动修改待测试的程序。利用这个测试工具修改上一问中人工修改的程序,两次修改得到的结果一致吗?

(3) 怎样把Laemmel技术推广到包含WHILE DO 和REPEAT UNTIL语句的程序? (4) 试分析Laemmel技术的优缺点并提出改进意见。

(1)答:if (x+y)>2 A=x Else A=y

改为:if M*(x+y)+T>2 A=x Else A=y 结果一致。 (2)答:两次结果是一致的

(3)答:WHILE DO 和IF ELSE修改技术类似。

(4)答:优点是可以使得结果更为精确。缺点是并不适用所有的程序,有时会有程序运行变得复杂。 第八题

8、对一个包含10000条机器指令的程序进行一个月集成测试后,总共改正了15个错误,此时MTTF=10h;经过两个月测试后,总共改正了25个错误(第二个月改正了10个错误),MTTF=15h。 要求:

(1)根据上述数据确定MTTF与测试时间之间的函数关系,画出MTTF与测试时间τ的关系曲线。在化这条曲线是做了什么假设?

(2)为做到MTTF=100h,必须进行多长时间的集成测试?当集成测试结束时总共改正了多少个错误,还有多少个错误潜伏在程序中?

答:(1)MTTF与测试时间τ的关系曲线如下:

MTTF(h)15101假设调试过程中没有引入新的错误。

2 τ(月)

(2)根据估算平均无故障时间的公式可得: 1/K(Et/10000-100/10000)=10

1/K (Et/10000-300/10000)=15 计算可得:K=333,Et=45 当MTTF=100h时,有 1/333(45/10000-Ec/10000)=100

计算可得:Ec=42.按前两个月测试改错的进度估算,需进行3个月的集成测试。 当测试结束时,共改正了42个错误,还有3个错误潜伏在程序中。 第九题

9.如对一个长度为100000条指令的程序进行集成测试期间记录下下面的数据: (a)7月1日:集成测试开始,没有发现错误。 (b)8月2日:总共改正100个错误,此时MTTF=0.4h (c)9月1日:总共改正300个错误,此时MTTF=2h 根据上列数据完成下列各题。 估计程序中的错误总数。

为使MTTF达到10h,必须测试和调试这个程序多长时间? 画出MTTF和测试时间τ之间的函数关系曲线。 答:(1)根据估算平均无故障时间的公式可得: 1/K(Et/100000-100/100000)=0.4 1/K (Et/100000-300/100000)=2

计算可得:K=1000,Et=350即程序中的错误总数为350。 (2)当MTTF=10h时,有 1/K (350/100000- Ec/100000)=10

计算可得:Ec=340.按前两个月测试改错的进度估算,还进行2个月的集成测试。 (3)MTTF和测试时间τ之间的函数关系曲线如下:

MTTF(h)20.41第十题

10、在测试一个长度为24000条指令的程序时,第一个月由甲、乙两名测试员各自独立测试这个程序。经一个月测试后,甲发现并改正20个错误,使MTTF达到10h。与此同时,乙发现24个错误,其中6个甲也发现了。以后由甲一个人继续测试这个程序。问: (1)刚开始测试时程序中总共有多少个潜在的错误?

(2)为使MTTF达到60h,必须再改正多少个错误?还需多长测试时间?

2 τ(月)

(3)画出MTTF与集成测试时间τ之间的函数关系曲线。 答:(1)根据公式:B0=B2B1/bc,可得:

B0=20*24/6=80,即刚开始测试时程序中总共有80个错误。 (2)根据估算平均无故障时间的公式可得: 1/K(80/24000-20/24000)=10 1/K(80/24000- Ec/24000)=60 计算可得:K=40,Ec=70

即还需要改正50个错误。根据甲的改正进度,估计还需要3个月。 (3)MTTF与集成测试时间τ之间的函数关系曲线如下:

MTTF(h)60101

第八章

一.答:软件的可维护性与哪些因素有关?在软件开发过程中应该采取哪些措施来提高软件产品的可维护性?

答:(1)、可理解性 (2)、可预测性 (3)、可修改性 (4)、可移植性 (5)、可重用性

在每个阶段结束前的技术审查和管理复查中,应该着重对可维护性进行复审过程中,应该对将来要改进的部分和可能要改的部分加以注意指明,应该讨论软件的可移植性问题,考虑可能影响软件维护的系统界面。在设计和编码过程中应该尽量使用可重用的软件构件,每个测试步骤都可以暗示在软件正式交付使用之前,程序中可能需要做预防性维护的部分。在完成每项维护工作之后,都应该对软件维护本身仔细认真地复审。

二:答:应该选取a 和 c 因为文档是影响软件可维护性的决定因素。因此,文档甚至比可执行的程序代码更重要,文档必须和程序代码同时维护,只有和程序代码完全一致才能是真正有价值的代码。

3.5 τ(月)