1. 设某公司要打印2015~2019年的报表,其中报表日期为6位数字组成,其中,前4位为年份,后两位为月份。 针对上述需求分析,先编写一个对报表日期合法性检查的C程序,然后按照等价类划分法设计测试用例(弱健壮覆盖标准),最后运行设计的测试用例。
时间: 2024-11-10 16:32:17 浏览: 46
首先,为了编写一个报表日期合法性检查的C程序,我们可以创建一个函数,它接受一个六位字符串作为输入,然后检查其是否满足条件:前四位代表年份(通常在1900年至2100年之间),后两位代表月份(范围从01到12)。我们还可以添加一些边界条件处理,比如处理非法字符、负数年份或超过最大月份的情况。
```c
#include <stdio.h>
#include <stdbool.h>
bool is_valid_report_date(char date[7]) {
if (strlen(date) != 6 || date[4] < '0' || date[4] > '9' || date[5] < '0' || date[5] > '9') {
return false; // 非法字符或长度不符合
}
int year = atoi(&date[0]);
int month = atoi(&date[4]);
// 检查年份和月份的有效性
if (year < 1900 || year > 2100 || month < 1 || month > 12) {
return false;
}
return true;
}
int main() {
char test_cases[] = {"201501", "201913", "199902", "210012", "", "201513", "2015a1"};
int num_test_cases = sizeof(test_cases) / sizeof(test_cases[0]);
for (int i = 0; i < num_test_cases; i++) {
printf("Testing %s... ", test_cases[i]);
if (is_valid_report_date(test_cases[i])) {
printf("Valid.\n");
} else {
printf("Invalid.\n");
}
}
return 0;
}
```
接下来,按等价类划分法设计测试用例:
1. **有效等价类(Positive Equivalence Class, PEC)**:
- 正常年份和月份的组合,如"201501"
- 边界情况,如最小年份"190001"和最大年份"210012"
2. **无效等价类(Negative Equivalence Class, NEC)**:
- 年份小于1900或大于2100的日期,如"189912"和"210101"
- 月份超出范围的日期,如"201513"和"201500"
- 包含非法字符的日期,如"20151a"和"2015a1"
**弱健壮覆盖(Weak Mutually Exclusive Grouping, WMEG)**关注的是确保每个等价类至少有一个测试案例被执行。在这种情况下,我们将确保:
- 至少一个无效的日期(NEC)
运行这个测试程序会检查所有指定的日期并验证它们是否合法,以此满足等价类划分和弱健壮覆盖的要求。
阅读全文