实验一
1实验目的
练习 基于程序结构的测试用例设计、白盒测试技术
2 实验内容(选作或题目二)
题目:
已知公元1年1月1日是星期一。编写一个程序,只要输入年月日,就能回答那天是星期几。不能采用现有公式计算。
(1)画出你所编写程序的控制流图,并计算程序的圈复杂度。
(2)综合运用白盒测试方法为设计测试用例,预期输出可参考windows自带的日历程序。
(3)在测试过程中是否发现你所编写程序的缺陷?这些缺陷是由哪些测试用例发现的?
4 实验报告要求
- 实验代码:
# 公元1年1月1日为星期一
# 判断是否为闰年
def leap_year(year):
leap = False
if year % 4 == 0:
if year % 100 != 0:
leap = True
else:
if year % 400 == 0:
leap = True
return leap
def dayOfTheWeek(year, month, day):
num = 0
if leap_year(year):
list_month = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
else:
list_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
for i in range(1, year):
if leap_year(i):
num = num + 366
else:
num = num + 365
for i in range(1, month):
num = num + list_month[i - 1]
num = num + day - 1
return num
if __name__ == '__main__':
# 输入日期
# 默认输入的日期为合法日期
year = int(input("请输入年份:"))
month = int(input("请输入月份:"))
day = int(input("请输入日份:"))
# 公元1年1月1日为星期一
list_day = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天']
# 获取该日期与公元1年1月1日相差的天数
num = dayOfTheWeek(year, month, day)
num = num % 7
data = list_day[num]
print(year, "年", month, "月", day, "日", data)
2.根据题目要求编写程序并画出控制流图、给出圈复杂度。
控制流图:
圈复杂度:5
3. 设计测试用例,并指明采用了哪些白盒测试方法;
表1 测试用例
测试用例ID | 采用测试方法 | 输入 | 预期输出 | 运行结果 | 与预期是否一致 |
1 | 基本路径覆盖 | 1 1 1 | 星期一 | 星期一 | 是 |
2 | 基本路径覆盖 | 2022 12 6 | 星期二 | 星期二 | 是 |
3 | 基本路径覆盖 | 2000 5 2 | 星期二 | 星期二 | 是 |
4 | 基本路径覆盖 | 2016 10 10 | 星期一 | 星期一 | 是 |
5 | 基本路径覆盖 | -1 0 0 | 错误提醒 | 星期天 | 否 |
6 | 主路径覆盖 | 0 15 40 | 错误提示 | 报错 | 否 |
7 | 主路径覆盖 | 1 1 1 | 星期一 | 星期一 | 是 |
8 | 主路径覆盖 | 1996 2 16 | 星期五 | 星期五 | 是 |
9 | 主路径覆盖 | 2000 11 8 | 星期三 | 星期三 | 是 |
10 | 主路径覆盖 | 100 8 7 | 星期六 | 星期六 | 是 |
11 | 循环测试 | 2022 12 6 | 星期二 | 星期二 | 是 |
12 | 循环测试 | 2021 12 12 | 星期天 | 星期天 | 是 |
13 | 循环测试 | 1 1 1 | 星期一 | 星期一 | 是 |
14 | 循环测试 | 1 12 1 | 星期六 | 星期六 | 是 |
15 | 循环测试 | 0 0 0 | 错误提示 | 星期天 | 否 |
4. 记录测试结果(参照表1后两列),总结测试过程中发现的程序缺陷(参照表2格式);
表2 测试结果
缺陷ID | 缺陷描述 | 发现该缺陷的用例 |
1 | 对于输入的错误负数年份,没有错误提示信息。 | 测试用例5 |
2 | 对于输入错误的月份,没有错误提示信息,程序直接报错。 | 测试用例6 |
3 | 对于输入的均为0的错误年月日,没有错误提示信息 | 测试用例15 |
5. 程序的不足
1、程序对于可能出现的错误输入没有任何处理,可能给出错误结果,也可能直接报错。
2、程序只能执行一次查询星期的工作,下一次查询需要重新启动程序。