软工Lab6-黑盒测试
题目
现有一个判断判断身份证号是否合法的程序,请利用黑盒测试技术来找出里面若干 bug。
中国居民身份证号码编码规则
1. 第一、二位表示省(自治区、直辖市、特别行政区)。
2. 第三、四位表示市(地级市、自治州、盟及国家直辖市所属市辖区和县的汇总码)。
3. 第五、六位表示县(市辖区、县级市、旗)。
4. 第七到十四位表示出生年月日(单数字月日左侧用 0 补齐)。
5. 第十五到十七位表示顺序码。对同地区、同年、月、日出生的人员编定的顺序号。其中第十七位奇数
分给男性,偶数分给女性。
6. 第十八位表示校验码。
校验码计算规则:
1. 根据以下权重计算出 1-17 位的加权和:

2. 将加权和取模 11;
3. 按照下表对应:

其中 X 既可以大写,也可以小写。
注意事项:
1. 任务不涉及省、市、县、顺序码,也就是说你不需要考虑到里面可能有 bug。
2. 请使用 unittest 单元测试框架,代码结构已在 Testing/main.py 中写好,只需增加用例和运行即可。
3. 如果身份证号码合法, exec 函数会返回 1 ,否则会返回 0 。
任务目标:
设计等价类,并利用软件测试工具测试身份证号合法性判断程序。
评分标准:
找出 70% 以上的错误满分。
等价类划分
设计等价类划分表如下图所示:

测试用例
有效等价类:

无效等价类:

用例测试
有效等价类测试

结果:

根据此错误继续设计用例测试

结果:


结果:

测试得month ϵ {1,3,5,7,8,10,12}
时day <= 29
的bug.(其实是闰年天数的限制限制在每一个月)

结果:


结果:

根据此错误继续设计用例测试

结果:

测试得month ϵ {4,6,9,11}
时day <= 29
的bug.最终测试得闰年所有月份的日期范围为1 <= day <= 29
,非闰年所有月份的日期范围为1 <= day <= 28
。

结果:


结果:


结果:


结果:


结果:

测试得存在400年的倍数年,系统无法将其判定为闰年的bug。

结果:

测试得18位只能存在大写X,不能存在小写x。
无效等价类测试






测试得month < 1
的bug。


测试得month > 12
的bug。




















这里False说明年份存在下限,是一个bug。


年份超过已有年份,是一个bug。


位数超过18位,是bug。
bug总结
bug编号 | bug内容 |
---|---|
1 | 闰年时所有月的day范围为1 <= day <= 29,非闰年时所有月的day范围为1 <= day <= 28. |
2 | 系统无法将400年的倍数年判定为闰年 |
3 | 18位只能存在大写X,不能存在小写x |
4 | month < 1 |
5 | month > 12 |
6 | 年份存在下限 |
7 | 年份超过已有年份 |
8 | 位数超过18位 |