参考答案:
【问题1】
(1)10
(2)8
(3)4,6,13,15,22,4,24
(4)1
(5) Ⅱ或者2
(6)0
(7)Ⅲ或者3
【问题2】
(8) 1->2->3->5->4->6->7
(9)1->2->3->4->5->6->7
【问题3】
(10)4,6,7
(11)3,5
(12)1,2,3,4,5,6,7
(13) 2
详细解析:
试题三分析
本题考查软件测试中使用基本路径和集成测试完成程序中功能模块和函数的测试。题目已经给出程序代码、程序控制流程图、测试用例表以及自底向.上的集成测试过程中的部分内容,需要根据需求描述,完善测试用例表中的内容;根据被测程序结构图,,完成集成测试过程中的部分内容。
[问题1]
本问题考查了基本路径软件测试方法。结合程序代码、程序控制流程图,计算程序环路复杂度,分析程序执行的独立路径。环路复杂度用来定量度量程序的逻辑复杂度,通常标记为V(G)。环路复杂度可根据程序控制流图计算得到(流图一般标记为G)。计算环路复杂度通常采用以下3种方法:
(1)控制流图中的区域数等于环路复杂度。
(2) V(G)= E- -N+2, 其中,E是控制流图中边的数量,N是节点的数量。
(3) V(G)=P+1, 其中,P是控制流图中判定节点的数量。题目考查的是使用第二种方法计算环路复杂度,由图3-1控制流图可得到,控制流图中边的数量E=10,节点的数量N=8,所以V(G)=10- -8+2=4。独立路径也称为基本路径,其含义包含以下两点:
(1)独立路径是一条从起始节点到终止节点的路径。
(2) -条独立路径至少包含一条其他独立路径没有包含的边,也就是说,至少引入了一条新的执行语句。
根据上述规则,可以看出从起始结点4到终止结点24共有4条独立路径,而第三条独立路径应为: 4, 6,13,15, 22, 4, 24。分析程序代码可知,当flag=0时,执行结果返回sum+50;当fag=1时,执行结果返回sum*10;当flag为其他值、sum 的值大于0时,执行结果返回sum *20;当flag为其他值、sum的值小于0时,程序不执行循环体中的语句,执行结果返回temp的初始值。在基本路径测试用例中,要使程序代码执行路径IV,当flag=2, 执行结果temp=20时,说明sum的值大于0,根据执行结果可知,sum-1;
当flag=0,sum=1 时,temp=1+50 =51,程序代码执行路径I;
当flag的值为任意值、sum小于0时,程序不执行循环体语句,temp=0, 程序代码执行路径I ;
当flag=l, sum=2 时,temp=2X 10=20,程序代码执行路III。
[问题2]
自顶向下的集成测试按照软件模块在设计中的层次结构,从上到下逐步进行集成和测试。先从最上层的主控模块开始,再沿着软件的模块层次向下移动,逐步将软件所包含的模块集成在一起。深度优先(纵向)方式和广度优先(横向)方式是两种集成策略。深度优先方式首先集成在结构中的-一个主控路径下的所有模块;而广度优先方式首先沿着水平方向,把每一层中所有直接隶属于上一层的模块集成起来,直到底层。由上述规则可知,被测程序结构图3 2, 按照深度优先方式进行集成测试的顺序为1->2->3->5->4->6->7,按照广度优先方式进行集成测试的顺序为1->2->3->4->5->6->7.
[问题3]
自底向上的方式是从软件结构的最底层模块开始,自下而上地逐步完成模块的集成和测试工作。由于下层模块的实际功能都已开发完成,因此在集成过程中就不需要开发桩模块,只需要开发相应的上层驱动模块即可。自底向上集成测试过程的具体步骤:
①将底层模块组合成实现某一-特定系统子功能的功能族。
②编写驱动程序,能够调用已组合的模块,并协调测试数据的输入与输出。
③对组合模块构成的子功能族进行测试。
④去掉驱动程序,沿着软件结构从下往上移动,将已测试过的子功能族组合在-一起,形成更大粒度的子功能族。
⑤从步骤②开始重复进行,直到所有的模块都被集成到系统中。
根据上述集成步骤可知,使用自底向上的方式测试程序结构图3-2,第(10) 空填写:4,6,7;第(11)空填写:3,5;第(12)空填写:1,2,3,4,5,6,7;第(13)空填写2。