编写一个对报表日期合法性检查年月的C程序,然后按照等价类划分法设计测试用例(弱健壮覆盖标准)
时间: 2024-11-10 19:26:41 浏览: 14
在编写一个C程序来检查报表日期的合法性时,首先我们需要考虑的是日期是否符合一般的规则,即月份在1到12之间,年份大于0。这里提供一个简单的示例:
```c
#include <stdio.h>
#include <stdbool.h>
bool is_valid_date(int year, int month, int day) {
if (year <= 0 || month < 1 || month > 12 || day < 1 || day > 31) {
return false;
}
// 对于非闰年的2月,只有28天;对于闰年,有29天(每四年一次,百年不闰,四百整百年闰)
if (month == 2 && (year % 4 != 0 || (year % 100 == 0 && year % 400 != 0))) {
return day <= 28;
} else if (month == 4 || month == 6 || month == 9 || month == 11) { // 其他非31天的月份
return day <= 30;
} else {
return true; // 1月、3月、5月、7月、8月、10月、12月为31天
}
}
int main() {
int year, month, day;
printf("Enter date in format (YYYY MM DD): ");
scanf("%d %d %d", &year, &month, &day);
if (is_valid_date(year, month, day)) {
printf("Date is valid.\n");
} else {
printf("Date is invalid.\n");
}
return 0;
}
```
等价类划分法是一种软件测试技术,用于设计测试用例,它将输入数据划分为几个等价区间,每个区间内的数据被认为是等效的。对于这个日期验证程序,我们可以按照以下步骤创建测试用例:
1. **有效日期**:
- 等价类1: 正常年份的合法月份和日期范围,如:(2023, 1, 1), (2022, 12, 31)
- 等价类2: 非闰年的2月28日,如:(2022, 2, 28)
- 等价类3: 闰年的2月29日,如:(2024, 2, 29)
2. **无效日期**:
- 等价类4: 负数年份,如:(-1, 1, 1)
- 等价类5: 超出月份范围的日期,如:(2023, 13, 1)
- 等价类6: 负数或超过31天的日期,如:(2023, 2, 32)
按照弱健壮覆盖标准,应选择每个等价类中的边界值(最小和最大值)作为测试用例,同时包括等价类之间的交叉点(例如,正常年份和闰年的2月)。另外,可以添加一些异常情况,如非法字符输入。
阅读全文