当前位置:文档之家› 软件测试期末考试含答案

软件测试期末考试含答案

西华师范大学计算机学院2013 年度期末测试软件测试 A 卷(11+18+12+19+40=100 分)一、单项选择(每空 1 分,共11 分)1、执行函数测试时,当多次调用底层函数,底层模拟器的"模拟值"输入栏可设定多个模拟值,一次最多可设置( C )个模拟值。

A 、1 B、3 C、6 D、112、当函数测试存在失败断言时,在白盒覆盖率信息窗口中VU 会显示一个( B )的条块来提示,没有失败断言时,会显示一个( A )的条块来显示;在逻辑结构窗口中,未覆盖的路径用( B )画出,已覆盖的路径用( A )画出,未覆盖的分支是( D )的条块。

A 、深绿色B、深红色C、浅蓝色D、粉红色E、浅绿色3、VU 导出的测试报告文件格式为:(C ),表格化测试用例数据导出的文件格式为:( E )A 、*.pdf B、*.txt C、*.htm D、*.csv E、*.xls F、*.doc4、在软件生命周期中的任何一个阶段,只要软件发生了改变,就可能给该软件带来新的问题。

软件的改变可能是源于发现错误并做好了修改,可能是因为在集成或维护阶段加入了新的模块,为了验证软件修改后的正确性需要进行( E )。

A 、白盒测试B、黑盒测试C、单元测试D、性能测试E、回归测试F、验收测试5、当用底层模拟器去模拟被测单元调用的底层函数的输出函数,并且此输出参数为指针数据类型,应该设置此参数的模拟值为( D )。

A 、指针值B、引用的地址C、指针指向的数据类型的值D、NULL6、当用底层模拟器去模拟被测单元调用的底层函数的返回值,并且此输出参数为指针数据类型,应该设置此参数的模拟值为( C )。

A 、指针值B、引用的地址C、指针指向的数据类型的值D、NULL二、多项选择(每空 2 分,共18 分)1、底层模拟能很好的解决(BCF )。

A 、集成测试问题B、装代码和数据失真C、测试不可控D、性能测试问题E、内部输出的模拟F、模拟参数为复杂数据类型,单元测试时难以初始化2、底层模拟器能够模拟( ABCEH )。

A 、底层函数的参数B、底层函数的返回值C、全局变量D、函数改写文件中的数据E、成员变量F、函数改写数据库中的数据G、内部输出H、调用次数3、执行函数测试后,源代码窗口能够标识出未覆盖的(BCD )。

逻辑结构图窗口能够标识出未覆盖的( AF )。

A 、路径B 、条件C 、 MC/DCD 、语句E 、C/DCF 、分支4、VU 与按自动的边界测试, 用于边界测试的边界值是由菜单项 "数据 "→定义边 界值来维护的。

VU 提供的 int 类型的默认值有( ACHJM ),bool 类型的默认 边界值有( I L ), double 类型的默认类型边界值有( DFGKN )。

A 、_01_pow ()B 、_11_Mcdc1()C 、 _12_Mcdc2()三、判断题 (每空 2 分,共 12 分) 注:正确的打钩,错误的打叉,并说明错误原因1、一个测试用例只允许有一个底层模拟,而一个函数可以有多个底层模拟。

(T)错误原因:2、底层模拟器可用于控制测试。

( T ) 错误原因:A 、语句覆100%分支覆盖: 路径覆盖: 100% B 、 语句覆盖: 32% 分支覆盖: 100% 路径覆盖: 98%C 、 语句覆盖: 100% 分支覆盖: 18% 路径覆盖: 100%D 、 语句覆盖:30% 分支覆盖: 50% 路径覆盖: 47%E 、语句覆100%分支覆盖: 95% 路径覆15%X6、在利用 VU 单元测试( ac//a )的过程中, 可能会出现 "语句:95%,分支: 路径: 15%"的情况。

A 、 F 、 K 、 P 、 0B 、 99999.9C 、 1.0 G 、9999.99 H 、 -9999.99 L 、false 0x7FFFFFFF 5、在利用 VU 进行单元测试的过程中,针对同一个测试用例集合,以下()的白盒覆盖情况是可能会出现的。

( A E//ac ) 补:分支覆盖达到 100%则语句覆盖也一定是达到了 100% 语句覆盖是最弱的覆盖0x80000000 1 I 、 true M 、-1 N 、 D 、 0.0 E 、-99999.9J 、0x7FFFFFFF -1.0 O 、0x80000000 100%,3、底层模拟器模拟的内部输入能够实现用例数据的表格化。

(T )错误原因:4、包含有空指针的测试用例能够实现用例数据的表格化。

(F)错误原因:空指针会被认为没有输入买自动设置为null ,所以不能表格化5、VU 在单元测试时,设计的每个测试用例都必须设置其预期输出。

(T )错误原因:6、在测试用例集中,测试用例的数量等于断言的数量。

(F )错误原因:错误,一个测试用例中可以出现多个断言四、简述题(1、2、3题各3分,4题6分,5题4分,共19分)1、简述在VU 的单元测试中,提高路径覆盖率的 3 种方法。

1:添加测试用例2:删除分支3:删除不可达路径2、简述在VU 的源代码窗口中,当前测试用例未覆盖的语句,VU 如何标识测试用例集未覆盖的语句。

VU 如何标识测试用例集未覆盖的条件和Mc/Dc ,VU 如何标识。

答:未覆盖语句:淡红色背景的红色字体表示未覆盖的条件和Mc/Dc :淡红色背景的红色字体[ T F M ] 表示T 表示真值未覆盖,F 表示假值未覆盖,M 表示MC/DC 未覆盖3、简述C/Dc 和Mc/Dc 的定义。

C/DC :条件/判定覆盖:判断中每个条件的所有可能取值至少执行一次,同时每个判断本身所有可能结果也至少执行一次。

MC/DC :修正的条件/判定覆盖,是一种软件结构覆盖率的测试准则。

修正条件判定覆盖要求:单元的入口和出口必须被调用一次,程序中判断的每一个分支必须至少被执行一次。

对于程序中通过逻辑运算组成判断的基本布尔条件,每个条件必须取遍所有可能的值,且每一个条件对判断的结果具有独立的作用。

** 掌握理论和实际情况下白盒覆盖准则相互间包含的关系,如下第六个成员函数源代码白盒覆盖率信息:均为100%测试用例4、分别设计出最少数量的测试用例,构成两套测试用例集,使CMyClass2 的成员函数_11_Mcdc1(BOOL,BOOL,BOOL)被100% C/DC和Mc/Dc ,_12_Mcdc2(BOOL,BOOL,BOOL,BOOL,BOOL,BOOL,BOOL,BOOL,BOOL,BOOL ,BOO L) 被100% C/DC,并为每个测试用例列出它在函数执行时所覆盖的条件的判定。

int CMyClass2::_11_Mcdc1(BOOL A,BOOL B,BOOL C) ( 100%C/DC 和MC/DC ){if(A && (B || C))return 1;return 0;} 测试用例如下:条件判定如下:int CMyClass2::_12_Mcdc2(BOOL A,BOOL B,BOOL C,BOOL D,BOOL E,BOOLF,BOOL G,BOOL H,BOOL I,BOOL J,BOOL K) ( 100%C/DC){if(A && ( (B||C) && (D&&E) ) && ((F||G) && (H||I||J)||K) )return 1;return 0;}测试用例如下:条件判定如下:5、为成员函数_01_Pow()设计测试用例,使其被100%语句,条件和C/DC 覆盖,统计出失败断言数,如果存在失败断言,列出失败断言(即测试用例的输入,预期输出和实际输出),指出软件曲线位置,并修复缺陷,保证测试结束,失败断言为0。

unsigned int CMyClass::_01_Pow(unsigned int g,unsigned int e){unsigned int result = 0;if(g==0)result = 0;else if(g==1)result = 1;else if(e==0)result = 1;else if(e==1)result = g;else{for(unsigned int i=0; i<e; i++)result *=g;}return result;}失败断言数:1失败断言为:case3软件曲线位置:修复缺陷:unsigned int result = 0; ——>> unsigned int result = 1;五、程序测试题( 1、3题各15分,2题10分,共40分)1、单元测试CMyClass2 的成员函数_07_DeleteComment(char *,char *),补充给定的测试用例集的预期输出和实际输出,统计失败断言的数量,如果失败断言数大于0,则说明软件存在缺陷,找到缺陷的具体位置,并修复它。

/* 函数说明:名称:CMyClass2::_07_DeleteComment功能:删除C++代码中的注释参数:pSrc:源代码pDes:保存删除注释后的代码返回:无*/void CMyClass2::_07_DeleteComment(char * pSrc,char * pDes){int len = strlen(pStr);if(len == 0)return;bool cmmSin = false;//由//开始\n 结束的单行注释bool cmmMul = false;//由/* 开始*/ 结束的多行注释char ch = *pSrc++;char next = 0;while(ch){if(!cmmSin && (cmmMul)){// 非注释if(ch=='/'){// 注释开始的第一个字符next =*pSrc;if(next =='\0')// 结束break;else if(next=='/') cmmSin = true;if(cmmMUl || cmmSin){ pSrc++;//忽略/后的一个字符ch = *pStr++;continue;}}*pDes++ = ch;ch = *pSrc++;}else if(cmmSin){// 单行注释if(ch=='\n'){// 单行注释结束cmmSin = false;*pDes++ = ch;//\n 是不能丢的}ch = *pSrc++;}else if(cmmMul){// 多行注释if(ch=='*'){// 开始多行注释next = *pSrc;if(next=='/'){ cmmMul = false; *pSrc++;// 忽略后面的/ }}ch = *pSrc++;}}}Case9(char *pSrc = 0;char *pDes = 0;)(Case9)失败断言 2 个,有两处缺陷:1,没有判断空指针2,测试用例4未得到正确结果。

相关主题