软工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位 |