1.测试需求
1.1 测试目标
对“找零钱最佳组合”程序进行全面测试,确保程序能够正确处理各种付款金额,给出找零钱的最佳组合,找零张数最少。
1.2 测试范围
程序的各项功能,包括输入商品价格、付款金额、输出最佳组合方案、输出货币张数等。
1.3 测试环境
操作系统:Windows11
内存:满足测试需求的内存容量
1.4 测试数据
提供各种可能的付款金额和对应的最佳组合方案,验证程序的正确性。
2.测试设计
我们采用了黑盒测试的等价类划分法和边界值分析法来设计测试用例。同时,针对程序可能存在的特殊情况,我们设计了错误处理用例。
具体如下:
等价类划分法:
将付款金额分为有效等价类(0-100,包含0和100)和无效等价类(100以上),分别设计测试用例。
- 有效等价类
商店货品价格R都不大于100元,因此得出0 <= R <= 100;
顾客付款P在100元以内,因此得出R <= P <= 100;
- 无效等价类
R < 0 and R > 100
0 <= R <= 100, P > 100
0 < R <= 100, P < R
边界值分析法:
针对有效等价类,分别测试付款金额为最小、次小、中间、次大、最大单位数的情况;
针对无效等价类,测试边界值的情况
错误处理:
针对可能的特殊情况,如付款金额为负数、付款金额为小数等情况,设计错误处理用例。
| 序号 | 价格(R) | 付款(P) | 找零(T) | 预期结果 |
|---|---|---|---|---|
| 1 | R>100 | 无效 | ||
| 2 | R<0 | 无效 | ||
| 3 | 0<=R<=100 | P>100 | 无效 | |
| 4 | 0<=R<=100 | P<R | 无效 | |
| 5 | 小数 | 小数 | 无效 | |
| 6 | 0<=R<=100 | R<=P<=100 | 0 | 输出0张 |
| 7 | 0<=R<=100 | R<=P<=100 | 1 | 输出1张(N1=1) |
| 8 | 0<=R<=100 | R<=P<=100 | 4 | 输出2张(N2=2) |
| 9 | 0<=R<=100 | R<=P<=100 | 5 | 输出3张(N2=2,N1=1) |
| 10 | 0<=R<=100 | R<=P<=100 | 9 | 输出3张(N5=1,N2=2) |
| 11 | 0<=R<=100 | R<=P<=100 | 10 | 输出1张(N10=1) |
| 12 | 0<=R<=100 | R<=P<=100 | 49 | 输出5张(N20=2,N5=1,N2=2) |
| 13 | 0<=R<=100 | R<=P<=100 | 50 | 输出1张(N50=1) |
| 14 | 0<=R<=100 | R<=P<=100 | 99 | 输出6张(N50=1,N20=2,N5=1,N2=2) |
| 15 | 0<=R<=100 | R<=P<=100 | 100 | 输出2张(N50=2) |
3.测试用例集
编写具体测试用例如下:
| 序号 | 商品价格(R) | 付款金额(P) | 找零(T) | 预期结果 |
|---|---|---|---|---|
| 1 | 101 | 无效 | ||
| 2 | -1 | 无效 | ||
| 3 | 100 | 101 | 无效 | |
| 4 | 100 | 99 | 无效 | |
| 5 | 3.5 | 100 | 无效 | |
| 6 | 100 | 100 | 0 | 输出0张 |
| 7 | 99 | 100 | 1 | 输出1张(N1=1) |
| 8 | 96 | 100 | 4 | 输出2张(N2=2) |
| 9 | 95 | 100 | 5 | 输出1张(N5=1) |
| 10 | 91 | 100 | 9 | 输出3张(N5=1,N2=2) |
| 11 | 90 | 100 | 10 | 输出1张(N10=1) |
| 12 | 51 | 100 | 49 | 输出5张(N20=2,N5=1,N2=2) |
| 13 | 50 | 100 | 50 | 输出1张(N50=1) |
| 14 | 1 | 100 | 99 | 输出6张(N50=1,N20=2,N5=1,N2=2) |
| 15 | 0 | 100 | 100 | 输出2张(N50=2) |
4.测试执行结果
用例1:结果符合预期
用例2:结果符合预期
用例3:结果符合预期
用例4:结果符合预期
用例5:结果符合预期
用例6:结果符合预期
用例7:结果符合预期
用例8:结果符合预期
用例9:结果符合预期
用例10:结果符合预期
用例11:结果符合预期
用例12:结果符合预期
用例13:结果符合预期
用例14:结果符合预期
用例15:结果符合预期
附录
测试程序:
'''
@Author hty
找零程序
a——50元
b——20元
c——10元
d——5元
e——2元
f——1元
'''
def main():
while (True):
price, receive = get_input()
a, b, c, d, e, f = get_change_plan(price, receive)
print('最佳找零组合为:')
print('50元 %d 张, 20元 %d 张, 10元 %d 张, 5元 %d 张, 2元 %d 张, 1元 %d 张' %(a, b, c, d, e, f))
if if_continue():
continue
else:
break
# 获取有效输入
def get_input():
print('请依次输入商品总价以及顾客实付款(均为0-100之间的整数,以空格分开): ')
while (True):
input_str = input()
if not len(input_str.split()) == 2:
print('请输入两个整数, 以空格分隔: ')
continue
price, receive = input_str.split()
if (not price.isdigit()) or (not receive.isdigit()):
print('请输入整数: ')
continue
price = int(price)
receive = int(receive)
if (not 0 <= price <= 100) or (not 0 <= receive <= 100):
print('请输入0-100之间的整数: ')
continue
if price > receive:
print('顾客实付款应大于商品总价,请重新输入: ')
continue
break
return price, receive
# 计算找零方案
def get_change_plan(price, receive):
change = receive - price
a = change // 50
change = change % 50
b = change // 20
change = change % 20
c = change // 10
change = change % 10
d = change // 5
change = change % 5
e = change // 2
change = change % 2
f = change
return a, b, c, d, e, f
def if_continue():
print("输入 c 继续, 输入 q 退出程序: ")
while(True):
ch = input()
if ch == 'c':
return True
elif ch == 'q':
return False
quitprint("输入无效, 请重新输入: ")
if __name__ == '__main__':
main()