白盒测试案例

白盒测试案例


案例

编写循环程序,要求输入读入某汽车销售人员的销售数(以台 计)和每台销售的基础提成数(元)、以及销售人员工种(正式工或临时工),计算并输出他的销售提成。若销售人员销售超过40台且基础提成超过400元,则超过部分按基础提成的1.5倍的来计算。超过50台,如果是正式员工,则超过50台的部分按基础提成的2倍的来计算,否则销售提成仍按照基础提成的1.5倍的来计算。编写流程图,并使用各种逻辑覆盖法编写测试用例。

根据题目,画出需求的流程图;

程序流程图

根据所画流程图写出相应的程序;

/************************************************************
  FileName: CalculateSalComm.cpp
  Author: Switch   Version : 1.0    Date: 2016-03-30
  Description:  计算销售提成 // 模块描述      
  Function List:   // 主要函数及其功能
    1. main 输出销售提成 
    2. calculateSaleComm 计算销售提成 
***********************************************************/
#include <iostream>
using namespace std;
/*************************************************
  Function:  calculateSaleComm // 函数名称
  Description: 计算销售提成  // 函数功能、性能等的描述
  Calls:              // 被本函数调用的函数清单
  Called By:   main   // 调用本函数的函数清单
  Table Accessed: // 被访问的表(此项仅对于牵扯到数据库操作的程序)  
  Table Updated:  // 被修改的表(此项仅对于牵扯到数据库操作的程序)
  Input:    saleNum 销售数
           basicComm 基础提成数
           typeOfWork 工种
  Output:                 // 对输出参数的说明。
  Return:  销售提成       // 函数返回值的说明
  Others:         // 其它说明
*************************************************/
float  calculateSaleComm(int saleNum, float basicComm, short typeOfWork) 
{
    if (saleNum > 40 && basicComm > 400) 
    {
        if (saleNum > 50 && 1 == typeOfWork) 
        {
            return 40 * basicComm + 10 * basicComm * 1.5 
                + (saleNum - 50) * basicComm * 2;
        }
        else
        {
            return 40 * basicComm + (saleNum - 40) * basicComm * 1.5;
        } 
    }
    else
    {
        return saleNum * basicComm;
    }
}
/*************************************************
  Function:     mian     // 函数名称
  Description: 输出销售提成  // 函数功能、性能等的描述
  Calls:    calculateSaleComm      // 被本函数调用的函数清单
  Called By:      // 调用本函数的函数清单
  Table Accessed: // 被访问的表(此项仅对于牵扯到数据库操作的程序)
  Table Updated:  // 被修改的表(此项仅对于牵扯到数据库操作的程序)
  Input:          // 输入参数说明,包括每个参数的作
                  // 用、取值说明及参数间关系。
  Output:         // 对输出参数的说明。
  Return:         // 函数返回值的说明
  Others:         // 其它说明
*************************************************/
int main() 
{
    int saleNum; 
    float basicComm;
    short typeOfWork;
    cout << "请输入销售数量:";
    cin >> saleNum; 
    cout << "请输入基础提成数:";
    cin >> basicComm;
    cout << "请输入工种(1:正式工,2临时工):"; 
    cin >> typeOfWork;
    /** 计算销售提成 **/
    float saleComm = calculateSaleComm(saleNum, basicComm, typeOfWork);
    /** 输出销售提成 **/
    cout << "销售提成数为:" << saleComm << endl; 
    return 0;
}

分别编写各种逻辑覆盖法的测试用例,并执行测试用例,写出测试结果。

语句覆盖

主要特点:语句覆盖是最起码的结构覆盖要求,语句覆盖要求设计足够多的测试用例,使得程序中每条语句至少被执行一次。

null输入数据路径预期结果
测试用例1saleNum=100
basicComm=1000
typeOfWork=1
OACE155000
测试用例2saleNum=50
basicComm=1000
typeOfWork=1
OADE55000
测试用例3saleNum=10
basicComm=1000
typeOfWork=2
OBE10000
判定覆盖

主要特点:判定覆盖又称为分支覆盖,它要求设计足够多的测试用例,使得程序中每个判定至少有一次为真值,有一次为假值,即:程序中的每个分支至少执行一次。每个判断的取真、取假至少执行一次。

null输入数据路径预期结果
测试用例1saleNum=100
basicComm=1000
typeOfWork=1
OACE155000
测试用例2saleNum=50
basicComm=1000
typeOfWork=1
OADE55000
测试用例3saleNum=10
basicComm=1000
typeOfWork=2
OBE10000
条件覆盖

主要特点:条件覆盖要求设计足够多的测试用例,使得判定中的每个条件获得各种可能的结果,即每个条件至少有一次为真值,有一次为假值。

null输入数据条件真假值路径预期结果
测试用例1saleNum=100
basicComm=1000
typeOfWork=1
saleNum>40 T
basicComm>400 T
saleNum> 50 T
typeOfWork=1 T
OACE155000
测试用例2saleNum=10
basicComm=100
typeOfWork=2
saleNum>40 F
basicComm>400 F
saleNum> 50 F
typeOfWork=1 F
OBE1000
判定/条件覆盖

主要特点:设计足够多的测试用例,使得判定中每个条件的所有可能结果至少出现一次,每个判定本身所有可能结果也至少出现一次。

null输入数据条件真假值路径预期结果
测试用例1saleNum=100
basicComm=1000
typeOfWork=1
saleNum>40 T
basicComm>400 T
saleNum> 50 T
typeOfWork=1 T
OACE155000
测试用例2saleNum=10
basicComm=100
typeOfWork=2
saleNum>40 F
basicComm>400 F
saleNum> 50 F
typeOfWork=1 F
OBE1000
测试用例3saleNum=100
basicComm=1000
typeOfWork=2
saleNum>40 T
basicComm>400 T
saleNum> 50 T
typeOfWork=1 F
OADE130000
组合/条件覆盖

主要特点:要求设计足够多的测试用例,使得每个判定中条件结果的所有可能组合至少出现一次。

null输入数据条件真假值路径预期结果
测试用例1saleNum=100
basicComm=1000
typeOfWork=1
saleNum>40 T
basicComm>400 T
saleNum> 50 T
typeOfWork=1 T
OACE155000
测试用例2saleNum=100
basicComm=1000
typeOfWork=2
saleNum>40 T
basicComm>400 T
saleNum> 50 T
typeOfWork=1 F
OADE130000
测试用例3saleNum=50
basicComm=1000
typeOfWork=1
saleNum>40 T
basicComm>400 T
saleNum> 50 F
typeOfWork=1 T
OADE55000
测试用例4saleNum=50
basicComm=1000
typeOfWork=2
saleNum>40 T
basicComm>400 T
saleNum> 50 F
typeOfWork=1 F
OADE55000
测试用例5saleNum=100
basicComm=100
typeOfWork=1
saleNum>40 T
basicComm>400 F
saleNum> 50 T
typeOfWork=1 T
OBE10000
测试用例6saleNum=100
basicComm=100
typeOfWork=2
saleNum>40 T
basicComm>400 F
saleNum> 50 T
typeOfWork=1 F
OBE10000
测试用例7saleNum=50
basicComm=100
typeOfWork=1
saleNum>40 T
basicComm>400 F
saleNum> 50 F
typeOfWork=1 T
OBE5000
测试用例8saleNum=50
basicComm=100
typeOfWork=2
saleNum>40 T
basicComm>400 F
saleNum> 50 F
typeOfWork=1 F
OBE5000
测试用例9输入数据不存在saleNum>40 F
basicComm>400 T
saleNum> 50 T
typeOfWork=1 T
路径不存在
测试用例10输入数据不存在saleNum>40 F
basicComm>400 T
saleNum> 50 T
typeOfWork=1 F
路径不存在
测试用例11saleNum=10
basicComm=1000
typeOfWork=1
saleNum>40 F
basicComm>400 T
saleNum> 50 F
typeOfWork=1 T
OBE10000
测试用例12saleNum=10
basicComm=1000
typeOfWork=2
saleNum>40 F
basicComm>400 T
saleNum> 50 F
typeOfWork=1 F
OBE10000
测试用例13输入数据不存在saleNum>40 F
basicComm>400 F
saleNum> 50 T
typeOfWork=1 T
路径不存在
测试用例14输入数据不存在saleNum>40 F
basicComm>400 F
saleNum> 50 T
typeOfWork=1 F
路径不存在
测试用例15saleNum=10
basicComm=100
typeOfWork=1
saleNum>40 F
basicComm>400 F
saleNum> 50 F
typeOfWork=1 T
OBE1000
测试用例16saleNum=10
basicComm=100
typeOfWork=2
saleNum>40 F
basicComm>400 F
saleNum> 50 F
typeOfWork=1 F
OBE1000
基本路径覆盖

主要特点:设计足够的测试用例,覆盖程序中所有可能的路径。

虽然没画出控制流图,但是根据上面的程序流程图,也能得出环形复杂度。
环形复杂度V(G)=关键点+1=3

null输入数据路径预期结果
测试用例1saleNum=100
basicComm=1000
typeOfWork=1
OACE155000
测试用例2saleNum=50
basicComm=1000
typeOfWork=1
OADE55000
测试用例3saleNum=10
basicComm=1000
typeOfWork=2
OBE10000
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值