阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
某国产通信芯片中,其嵌入式软件配合硬件完成通信协议处理,包括设备管理、通信管理、时间管理、网络管理、配置加载和中断处理等功能。其中流消息发送函数用于流消息发送,主要完成分区包头封装,并向指定目的设备的指定目的分区发送流消息,其处理流程图如图3-1所示。
【问题1】(6分,每空2分)
软件的结构覆盖率指标是度量软件测试充分性和有效性的常用手段。在嵌入式软件白盒测试过程中,通常以语句覆盖率、分支覆盖率和MC/DC覆盖率作为度量指标。
在实现题目说明的流程图时,设计人员采用了下列算法:
if((设备句柄合法== FALSE)lI(设备状态正常== FALSE))
{
Return (Fail) ;
}
else
{
if((发送流数据指针== NULL) & &(发送缓冲区标识==正确))
{
发送流数据;
return(OK) ;
}
else
{
释放流数据发送逻辑ID;
return (Fail);
}
}
请指出测试上述算法达到100%语句覆盖、100%分支覆盖和100% MC/DC覆盖所需的最少测试用例数目,填入表3-1的空(1)~(3)处。
【问题2】(6分,每空1分)
为了测试软件功能,测试人员设计了表3-2所示的测试用例,请填写该表中的空白(1)~(6)。请将答案填写在答题纸的对应栏中。
【问题3】(3分,每空1.5分)
嵌入式软件中通常使用圈复杂度来衡量程序的可维护性(一般要求圈复杂度不大于10),流数据发送函数圈复杂度为(1)。
白盒测试方法和黑盒测试方法是目前嵌入式软件测试常用的方法。依据本题说明,指明【问题2】中设计的测试用例使用了上述两种测试方法中的(2)方法。
【问题1】
(1) 3
(2) 3
(3) 5
【问题2】
(1)Fail
(2)不正常
(3)Fail
(4)释放流数据发送逻辑ID
(5)不正确
(6)发送流数据
【问题3】
(1) 5
(2)黑盒测试方法
【问题1】
语句覆盖的含义:设计足够多的测试用例,使得被测试程序中的每条可执行语句至少被执行一次。
分支覆盖的含义:设计足够多的测试用例,使得被测试程序中的每个判断的“真”、“假”分支至少被执行一次。
MC/DC的含义:要求在一个程序中每一种输入输出至少得出现一次,在程序中的每一个条件必须产生所有可能的输出结果至少一次,并且每一个判定中的每一个条件必须能够独立影响一个判定的输出,即在其他条件不变的前提下仅改变这个条件的值,而使判定结果改变。
(1)如下语句所示,要达到100%的语句覆盖需要3个测试用例。
if((设备句柄合法== FALSE)||(设备状态正常== FALSE))
{-------------语句块1
Return (Fail) ;
}
else
{
if((发送流数据指针== NULL) & &(发送缓冲区标识==正确))
{---------------语句块2
发送流数据;
return(OK) ;
}
else
{---------------------语句块3
释放流数据发送逻辑ID;
return (Fail);
}
}
(2)该语句包括了2个判定,第1个判定是(设备句柄合法== FALSE)||(设备状态正常== FALSE);第2个判定是(发送流数据指针== NULL) & &(发送缓冲区标识==正确)。由于第一个判定的假分支中包含了第二个判定条件的真假分支,当满足第一个判定的假分支时,同时可满足第二个判定条件的真或假分支。所以需要3个用例。
(3)该语句有4个条件,设条件A等于设备句柄合法== FALSE;设条件B等于设备状态正常== FALSE;设条件C等于发送流数据指针== NULL;设条件D发送缓冲区标识==正确。通过列表法可以得到需要5个用例。
【问题2】
根据如下算法语句(假设两个判定分别是第①和②)以及该题给出的测试用例,第1个用例是设备句柄非法、设备状态正常。根据第①个判断语句可以得到第(1)空是Fail。第2个用例是设备句柄合法,返回Fail,根据第①个判断语句可以得到第(2)空是设备状态不正常。第3个用例是设备句柄非法,设备状态不正常,根据第①个判断语句可以得到第(3)空是Fail。第4个用例是设备句柄合法,设备状态正常,待发送数据流指针不为空,发送缓冲区标识正确,第①个判断语句都不满足,会执行到第②个判断语句,由于待发送数据流指针不为空,所以第(4)空是释放流数据发送逻辑ID。同理,第(5)空时不正确。第(6)空是发送流数据。
①if((设备句柄合法== FALSE)||(设备状态正常== FALSE))
{
Return (Fail) ;
}
else
{
②if((发送流数据指针== NULL) & &(发送缓冲区标识==正确))
{
发送流数据;
return(OK) ;
}
else
{
释放流数据发送逻辑ID;
return (Fail);
}
}
【问题3】
(1)环路复杂度用来定量度量程序的逻辑复杂度。以McCabe方法来表示。
在程序控制流程图中,节点是程序中代码的最小单元,边代表节点间的程序流。一个有e条边和n个节点的流程图F,可以用下述3种方法中的任何一种来计算环形复杂度。
第一种:流图G的环形复杂度V(G)=E-N+2,其中,E是流图中边的条数,N是结点数。
第二种:流图中的封闭区域数+1。
第三种:流图G的环形复杂度V(G)=P+1,其中,P是流图中判定结点的数目。
if((设备句柄合法== FALSE)||(设备状态正常== FALSE))//1,2
{
Return (Fail) ; //3
}
else
{
if((发送流数据指针== NULL) & &(发送缓冲区标识==正确))//4,5
{
发送流数据;
return(OK) ;//6
}
else
{
释放流数据发送逻辑ID;//7
return (Fail);
}
}//8
将上面的程序简化为下面的程序控制流程图。
根据第一种计算方法,上图中E为11,n为8,故V(G)=E-N+2=11-8+2=5。
根据第二种计算方法,上图中被控制流图划分的封闭区域数为4,共4块区域,故V(G)=4+1=5。
根据第三种计算方法,上图中判定节点为1、2、4和5,共4个判定节点,故V(G)=判定节点数+1=4+1=5。
(2)问题2中设计测试用例时,只是根据设计算法,进行功能方面的测试,而不了解程序的内部构造,所以是使用了黑盒测试方法。