试题一
阅读下列C程序,回答下面问题。
【C程序】
long long yaj1_parse_integer (const unsigned char *number, size_t length) { //1
long long ret=0;
long sign=1;
const unsigned char *pos=number;
if(*pos=='-') { //2
pos++; sign=-1; //3
}
if(*pos=='+') { //4
pos++; //5
< ……此处隐藏36793个字…… 中存在三个判定条件,即命令合法性判定、读取命令判定和计算校验和与读取校验和相等判定,需要分别取每个判定的真值分支和假值分支,即从理论上需要6个测试用例来满足分支测试覆盖项要求。但是,由于第一个判定条件(命令合法性判定)的假分支(命令长度合法)中包含了第二个判定条件(读取命令判定)和第三个判定条件(计算校验和与读取校验和相等判定)的真假分支,即当满足第一个判定条件的假分支时,同时满足第二个和第三个判定条件的真或假分支,可减少1个测试用例;又因为第二个判定条件为for循环中的判定,当命令长度合法时,以四个字节长度读取,必然会真假全遍历,故当命令长度合法时,不需要考虑第二个判定条件的真假,可以再减少2个测试用例。所以总共可以减少3个测试用例,故本题给定代码最少需要3个测试用例来满足分支测试覆盖项要求。按照上述修正条件判定测试覆盖项要求,即每个组合判定条件中的每个条件必须能够独立影响一个判定的输出。本题给定代码中仅有一处存在组合判定条件,即命令长度合法性判定条件,对此判定的两个条件进行分析,两个条件共有四种组合,即TT(TRUE和TRUE)、TF(TRUE和FALSE)、FT(FALSE和TRUE)和FF(FALSE和FALSE)。由于此判定中的两个条件为逻辑或条件,当前一个条件为TRUE时,其整个判定值确定为TRUE,后一个条件的真或假均不能独立影响整个判定的输出,所以只需要TX(X表示后一个条件为TRUE或FALSE都可以)、FT和FF三种情况就可以,即实际上仅需要3个测试用例来满足修正条件判定测试覆盖项要求。故本题给定代码最少需要3个测试用例来满足修正条件判定测试覆盖项要求。