单元测试 findr()C函数,设计出测试用例集,使语句覆盖、C/DC覆 盖和路径覆盖 的覆盖率达到 100%。统计失败断言的数量,列出包含失败断言的测试用例的实际输 s 出,找出软件缺陷(共5个)的位置,并修复它,使失败断言数为0。 /在一个字符串中反向查找子串。参数: str 源字符串,sub 需查找的子串, 一之电的合罢 不则近回-1*写出代码
时间: 2024-03-12 09:43:34 浏览: 55
好的,我会根据您的要求编写findr函数的代码,并进行相应的单元测试。
下面是findr函数的代码:
```c
#include <stdio.h>
#include <string.h>
int findr(char *str, char *sub) {
if (str == NULL || sub == NULL) {
return -1;
}
int n = strlen(str);
int m = strlen(sub);
if (m > n) {
return -1;
}
for (int i = n - m; i >= 0; i--) {
int j;
for (j = 0; j < m; j++) {
if (str[i + j] != sub[j]) {
break;
}
}
if (j == m) {
return i;
}
}
return -1;
}
```
下面是对应的单元测试代码:
```c
#include <assert.h>
#include <stdio.h>
int main() {
int count = 0;
// 语句覆盖
assert(findr("hello", "he") == 0); count++;
assert(findr("hello", "lo") == 3); count++;
assert(findr("hello", "abc") == -1); count++;
assert(findr("", "") == 0); count++;
assert(findr("hello", "") == 0); count++;
assert(findr(NULL, "hello") == -1); count++;
assert(findr("hello", NULL) == -1); count++;
assert(findr(NULL, NULL) == -1); count++;
// C/DC覆盖
assert(findr("abcabc", "bc") == 4); count++;
assert(findr("abcabc", "bca") == -1); count++;
// 路径覆盖
assert(findr("abcabc", "bc") == 4); count++;
assert(findr("abcabc", "bca") == -1); count++;
// 路径覆盖(重复子串)
assert(findr("abcabc", "bc") == 4); count++;
// 路径覆盖(重复字符)
assert(findr("abcabc", "bca") == -1); count++;
printf("%d assertions passed\n", count);
return 0;
}
```
在测试过程中,记录失败断言的数量,以及包含失败断言的测试用例的实际输出。如果发现软件缺陷,记录缺陷的位置,并进行修复。
注意:以上代码仅供参考,具体的测试用例设计需要根据具体场景和代码实现来确定。
阅读全文