软测实验1:黑盒测试用例设计实验

211 阅读5分钟

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)预期结果
1R>100无效
2R<0无效
30<=R<=100P>100无效
40<=R<=100P<R无效
5小数小数无效
60<=R<=100R<=P<=1000输出0张
70<=R<=100R<=P<=1001输出1张(N1=1)
80<=R<=100R<=P<=1004输出2张(N2=2)
90<=R<=100R<=P<=1005输出3张(N2=2,N1=1)
100<=R<=100R<=P<=1009输出3张(N5=1,N2=2)
110<=R<=100R<=P<=10010输出1张(N10=1)
120<=R<=100R<=P<=10049输出5张(N20=2,N5=1,N2=2)
130<=R<=100R<=P<=10050输出1张(N50=1)
140<=R<=100R<=P<=10099输出6张(N50=1,N20=2,N5=1,N2=2)
150<=R<=100R<=P<=100100输出2张(N50=2)

3.测试用例集

编写具体测试用例如下:

序号商品价格(R)付款金额(P)找零(T)预期结果
1101无效
2-1无效
3100101无效
410099无效
53.5100无效
61001000输出0张
7991001输出1张(N1=1)
8961004输出2张(N2=2)
9951005输出1张(N5=1)
10911009输出3张(N5=1,N2=2)
119010010输出1张(N10=1)
125110049输出5张(N20=2,N5=1,N2=2)
135010050输出1张(N50=1)
14110099输出6张(N50=1,N20=2,N5=1,N2=2)
150100100输出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()