软件工程导论第六版 张海藩 牟永敏课后习题答案 下载本文

预期的输出:返回-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与测试时间τ的关系曲线如下:

假设调试过程中没有引入新的错误。 (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和测试时间τ之间的函数关系曲线如下: 第十题

10、在测试一个长度为24000条指令的程序时,第一个月由甲、乙两名测试

员各自独立测试这个程序。经一个月测试后,甲发现并改正20个错误,使MTTF达到10h。与此同时,乙发现24个错误,其中6个甲也发现了。以后由甲一个人继续测试这个程序。问:

(1)刚开始测试时程序中总共有多少个潜在的错误?

(2)为使MTTF达到60h,必须再改正多少个错误?还需多长测试时间? (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与集成测试时间τ之间的函数关系曲线如下:

第八章

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

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

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

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

文档修改:针对系统中当前正在修改的那些部分文档建立完整的文档。 代码重构:首先用重构工具分析源代码,标注出和结构化程序设计概念相违