【软件工程习题(含参考答案)】软件测试章节

软件工程课后精选习题集(内容包含编码与测试、软件维护、详细设计等)


第一题: MTTF与集成测试①

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

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

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

解:

当测试时间τ= 1个月,MTTF = 10h; τ=2个月,MTTF= 15h

已知MTTF与测试时间τ的俩组数据,可设MTTF = k*τ+ a,

  • 10 =  k*1 + a

  • 15 = k *2+ a

解方程组得:k =5,a = 5,则有:MTTF = 5 *τ+ 5

MTTF与测试时间τ的关系曲线如下:

MTTF与测试时间τ的关系曲线

在画这条曲线之前,得先假设调试过程中没有引入新的错误。

(2)由题意,机器指令总数It = 10000

① 先根据根据估算平均无故障时间的公式可得:

  • MTTF=1/K(Et/10000-15/10000)=10
  • MTTF=1/K (Et/10000-25/10000)=15
  • K*(Et-15)=1000
  • K* (Et-25)=2000/3

计算可得:K=33.3,Et=45

则有:MTTF = 1/ 33.3 (45/10000-Ec/10000)

当MTTF=100h时,有: 1/333(45/10000-Ec/10000)=100

计算可得:Ec(τ)≈42.(说明该测试时间段内改正了42个错误)

 

② 根据前面来估算出的MTTF =5 * τ + 5,代入MTTF=100,得:100 = 5*t + 5

解得:t ≈ 19 (月)

需要进行19个月的集成测试才能做到MTTF为100h。

潜伏错误数(剩余错误数)=Et - Ec(τ) = 45 -42 =3 (个)

即测试结束时,共改正了42个错误,但还有3个错误潜伏在程序中。

第二题:  MTTF与集成测试②

如对一个长度为100000条指令的程序进行集成测试期间记录下下面的数据:

(a)7月1日:集成测试开始,没有发现错误。

(b)8月2日:总共改正100个错误,此时MTTF=0.4h

(c)9月1日:总共改正300个错误,此时MTTF=2h

根据上列数据,

(1)估计程序中的错误总数;

(2)为使MTTF达到10h,必须测试和调试这个程序多长时间?画出MTTF和测试时间τ之间的函数关系曲线。

解:

(1)

根据平均无故障时间的估算公式,有:

  • MTTF = 1/K(Et/100000-100/100000)=0.4
  • MTTF = 1/K (Et/100000-300/100000)=2
  • K(Et-100) = 250000
  • K (Et-300) = 50000

算得:K=1000,Et=350

即测试之前,程序中的错误总数估计为350。

此时,MTTF = 1/1000 (350/100000-300/100000)

(2)当MTTF=10h时,有:

MTTF = 1/1000 (350/100000- Ec/100000) = 10

算得:Ec=340.

当测试时间τ= 1个月,MTTF =0.4

τ= 2个月,MTTF= 2

已知MTTF与测试时间τ的俩组数据,可设MTTF = k*τ+ a,

  • 0.4 =  k*1 + a
  • 2 = k *2+ a

解方程组得:k =1.6,a = -1.2

有:MTTF = 1.6 *τ - 1.2

再按前两个月测试改错的进度【MTTF = 1.6 *τ - 1.2】估算,要使 MTTF=10h,则需要进行7个月的集成测试时间。

MTTF和测试时间τ之间的函数关系曲线如下:

MTTF和测试时间τ之间的函数关系

第三题: 软件的可维护性与哪些因素有关?

在软件开发过程中应该采取哪些措施来提高软件产品的可维护。

答:

 1、软件的可维护性与以下5个因素有关:

(1)、可理解性

(2)、可预测性

(3)、可修改性

(4)、可移植性

(5)、可重用性

2、软件开发过程中提高软件产品的可维护应采取的措施,如下:

 

(1)在每个阶段结束前的技术审查和管理复查中

 ① 着重对可维护性进行复审

② 对将来要改进的部分和可能要改的部分加以注意指明

③ 讨论软件的可移植性问题

④ 考虑可能影响软件维护的系统界面

(2)在设计和编码过程中

① 应尽量使用可重用的软件构件

 

(3)在软件正式交付使用之前

① 程序中可能需要做预防性维护的部分

② 在完成每项维护工作之后,都应该对软件维护本身仔细认真地复审

第四题: 模块耦合和模块内聚的类型和关系。

答:模块耦合分为数据耦合、控制耦合、特征耦合、公共环境耦合和内容耦合。

(1)模块耦合特点与其关系

   非直接耦合:模块之间没直接关系(模块1和模块2),独立性最强。

   数据耦合:模块访问另一个模块时,彼此通过数据参数来交换输入、输出信息的,模块间独立性较强。

   特征耦合:一组模块通过参数传递记录信息,用户情况是个数据结构,图中模块都与此有关,“计算水费”和“计算电费”本没有关系,由于引用了此数据结构产生了依赖关系。

   控制耦合:模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能

   外部耦合:一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息。

   公共耦合:一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。

(2)模块内聚特点与其关系

1、偶然内聚:模块完成一组既有关系但关系也很松散的任务

2、逻辑内聚:模块完成的任务在逻辑上属于相同或相似的一类

3、时间内聚:模块包含的任务须在同一段时间内执行

4、过程内聚:模块内的处理元素是相关的,且以特定次序执行。

5、通讯内聚:模块中所有元素都使用同一个输入数据和(或)产生同一个输出数据

6、顺序内聚:模块内的处理元素和同一个功能密切相关,而且这些处理必须顺序执行

7、功能内聚:模块内所有的元素属于一个完成单一功能的整体

第五题: 什么是模块测试和集成测试?各有什么特点?

答:

模块测试与集成测试及其特点

 

概述

特点

模块测试

 对每个单独的模块,分别用黑盒和白盒测试技术测试它的功能是否正确,并检查模块控制结构中的特定路径并发现最大数量的错误。

 主要应用白盒测试的技术,对多个模块的测试可以并发的进行。

集成测试

 把模块装配在一起形成完整的软件包,在装配的同时进行测试。

 可能发生接口问题。

第六题:设计下列伪码程序的语句覆盖和路径覆盖测试用例

START
INPUT(A,B,C)
IF A>5
THEN X=10
ELSE X=1
END IF
IF B>10
THEN Y=20
ELSE Y=2
END IF
IF C>15
THEN Z=30
ELSE Z=3
END IF
PRINT (X,Y,Z)
STOP

解:

(1)语句覆盖的两个典型测试用例:

①、使3个判定表达式之值全为假

  • 输入:A=1,B=1,C=1
  • 预期的输出:X=1,Y=2,Z=3

②、使3个判定表达式之值全为真

  • 输入:A=20,B=40,C=60
  • 预期的输出:X=10,Y=20,Z=30

(2)路径覆盖的测试用例

本程序共有8条可能的执行通路,为做到路径覆盖总共需要8组测试数据,如下。

① 3个判定表达式之值全为假

  • 输入:A=1,B=1,C=1
  • 预期的输出:X=1,Y=2,Z=3

② 3个判定表达式依此为假、假、真

  • 输入:A=1,B=1,C=60
  • 预期的输出:X=1,Y=2,Z=30

③ 3个判定表达式依此为假、真、假

  • 输入:A=1,B=40,C=1
  • 预期的输出:X=1,Y=20,Z=3

④ 3个判定表达式依此为假、真、真

  • 输入:A=1,B=40,C=60
  • 预期的输出:X=1,Y=20,Z=30

⑤ 3个判定表达式依此为真、假、假

  • 输入:A=20,B=1,C=1
  • 预期的输出:X=10,Y=2,Z=3

⑥ 3个判定表达式依此为真、假、真

  • 輸入:A=20,B=1,C=60
  • 预期的输出:X=10,Y=2,Z=30

⑦ 3个判定表达式依此为真、真、假

  • 输入:A=20,B=40,C=1
  • 预期的输出:X=10,Y=20,2=3

⑧ 3个判定表达式全为真

  • 输入:A=20,B=40,C=60
  • 预期的输出:X=10,Y=20,Z=30

第七题: MTTF与集成测试③(甲、乙测试员)

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

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

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

(3)画出MTTF与集成测试时间τ之间的函数关系曲线。

解:

(1)根据分别测试法的公式:B0=B2*B1/Bc,

其中:

  • B1:甲发现并改正的错误数 20;
  • B2:乙发现并改正的错误数 24;
  • Bc:乙发现改正的错误里面甲也发现的错误数 6

可得:B0=20*24/6=80,即刚开始测试时程序中总共有80个错误。

(2)根据估算平均无故障时间的公式可得:

  • MTTF = 1/K(80/24000-20/24000)=10
  • MTTF = 1/K(80/24000- Ec/24000)=60

计算可得:K=40,Ec=70

即还需要改正50个错误。

 

(3)MTTF与集成测试时间τ之间的函数关系曲线如下:

 

第八题: 使用三种方法,分别计算下列两个流图的环形复杂度。

解:

(1)第一种方法:流图G的环形复杂度V(G) = E-N+2,其中,E是流图中边的条数,N是结点数。

  1. 流图1的环形复杂度= 11 – 9 +2 =4(边的条数E=11,结点数N=9)
  2. 流图2的环形复杂度= 17 -  13 +2 = 6(边的条数E=17,结点数N=13)
  3. 流图3的环形复杂度= 15 – 12 + 2 = 5 (边的条数E=15,结点数N=12)

(2)第二种方法:流图G的环形复杂度V(G)=P+1,其中,P是流图中判定结点有两条输出弧的结点)的数目。

  1. 流图1的环形复杂度= 3 + 1 =4(判定结点:1、2、4)
  2. 流图2的环形复杂度= 5 + 1 =6(判定结点:2、3、5、6、10)
  3. 流图3的环形复杂度= 4 + 1 =5(判定结点:2、3、7、8)

(3)第三种方法:流图G的环形复杂度V(G)=Ac,其中,Ac是流图中封闭区域的个数。

  1. 流图1的环形复杂度= 4
  2. 流图2的环形复杂度= 6
  3. 流图3的环形复杂度= 5

第九题:设计下列伪码程序的分支覆盖和条件组合覆盖测试用例

START 
INPUT(A,B,C,D) 
IF (A>0) AND (B>0)
THEN X=A+B
ELSE X=A-B
END
IF (C>A) OR (D<B)
THEN Y=C-D
ELSE Y=C+D
END
PRINT (X,Y)
STOP

解:

为做到分支覆盖,至少需要两组测试数据,以使每个判定表达式之值为真或为假各一次。

下面是典型的测试用例:

① 使两个判定表达式之值全为假

  1. 输入:A=1,B=2,C=3,D=1
  2. 预期的输出:X=1,Y=2

② 使两个判定表达式之值全为真

  1. 输入:A=1,B=2,C=3,D=1
  2. 预期的输出:X=3,Y=2

本题程序中共有两个判定表达式,各有两个简单条件,因此总共有8种可能的条件组合,它们是:

1) A>0, B>0

2) A>0, B≤0

3) A≤0, B>0

4) A≤0, B≤0

5) C>A, D

6) C>A, D>B

7) C≤A, D

8) C≤A, D=B

下面的4个测试用例,可以使上面列出的8种条件组合每种至少出现一次:

1)实现1,5两种条件组合:

  • 输入:A=1,B=1,C=2,D=0
  • 预期的输出:X=2,Y=2

2)实现2,6两种条件组合:

  • 输入:A=1,B-0,C=2,D=1
  • 预期的输出:X=1,Y=1

3)实现3,7两种条件组合:

  • 输入:A-0,B-1,C=-1,D-0
  • 预期的输出:X=1,Y=1

4)实现4,8两种条件组合:

  • 输入:A=0,B=0,C=1,D=1
  • 预期的输出:X=0,Y=0

第十题: 解释以下名词: 

答:

1、Alpha和Beta测试。

① Alpha测试由用户在开发者的场所进行,并且在开发者对用户的“指导”下进行测试。开发者负责记录发现的错误和使用中遇到的问题。

② Beta测试由软件的最终用户们在一个或多个客户场所进行,是软件在开发者不能控制的环境中的“真实”应用。

2、回归测试

回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。

3、逻辑覆盖。

逻辑覆盖是对一系列测试过程的总称,这组测试过程逐渐进行越来越完整的通路测试。

4、逻辑内聚。

逻辑内聚指模块内执行个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。指机能相关的程序组合成一模块的程度,或是各机能凝聚的状态或程度。

5、盒图(N-S图)

N-S图,也被称为盒图或NS图(Nassi Shneiderman图),是结构化编程中的一种可视化建模,不允许违背结构程序设计精神的图形工具。

其特点如下:

(1)功能域(即一个特定控制结构的作用域)明确。

(2)不可能任意转移控制。

(3)很容易确定局部和全程数据的作用域。

(4)很容易表现嵌套关系,也可以表示模块的层次结构。

  • 35
    点赞
  • 198
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜半少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值