白盒测试案例

孤人 提交于 2019-12-08 11:00:01

白盒测试案例


案例

编写循环程序,要求输入读入某汽车销售人员的销售数(以台 计)和每台销售的基础提成数(元)、以及销售人员工种(正式工或临时工),计算并输出他的销售提成。若销售人员销售超过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 输入数据 路径 预期结果
测试用例1 saleNum=100
basicComm=1000
typeOfWork=1
OACE 155000
测试用例2 saleNum=50
basicComm=1000
typeOfWork=1
OADE 55000
测试用例3 saleNum=10
basicComm=1000
typeOfWork=2
OBE 10000

判定覆盖

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

null 输入数据 路径 预期结果
测试用例1 saleNum=100
basicComm=1000
typeOfWork=1
OACE 155000
测试用例2 saleNum=50
basicComm=1000
typeOfWork=1
OADE 55000
测试用例3 saleNum=10
basicComm=1000
typeOfWork=2
OBE 10000

条件覆盖

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

null 输入数据 条件真假值 路径 预期结果
测试用例1 saleNum=100
basicComm=1000
typeOfWork=1
saleNum>40 T
basicComm>400 T
saleNum> 50 T
typeOfWork=1 T
OACE 155000
测试用例2 saleNum=10
basicComm=100
typeOfWork=2
saleNum>40 F
basicComm>400 F
saleNum> 50 F
typeOfWork=1 F
OBE 1000

判定/条件覆盖

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

null 输入数据 条件真假值 路径 预期结果
测试用例1 saleNum=100
basicComm=1000
typeOfWork=1
saleNum>40 T
basicComm>400 T
saleNum> 50 T
typeOfWork=1 T
OACE 155000
测试用例2 saleNum=10
basicComm=100
typeOfWork=2
saleNum>40 F
basicComm>400 F
saleNum> 50 F
typeOfWork=1 F
OBE 1000
测试用例3 saleNum=100
basicComm=1000
typeOfWork=2
saleNum>40 T
basicComm>400 T
saleNum> 50 T
typeOfWork=1 F
OADE 130000

组合/条件覆盖

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

null 输入数据 条件真假值 路径 预期结果
测试用例1 saleNum=100
basicComm=1000
typeOfWork=1
saleNum>40 T
basicComm>400 T
saleNum> 50 T
typeOfWork=1 T
OACE 155000
测试用例2 saleNum=100
basicComm=1000
typeOfWork=2
saleNum>40 T
basicComm>400 T
saleNum> 50 T
typeOfWork=1 F
OADE 130000
测试用例3 saleNum=50
basicComm=1000
typeOfWork=1
saleNum>40 T
basicComm>400 T
saleNum> 50 F
typeOfWork=1 T
OADE 55000
测试用例4 saleNum=50
basicComm=1000
typeOfWork=2
saleNum>40 T
basicComm>400 T
saleNum> 50 F
typeOfWork=1 F
OADE 55000
测试用例5 saleNum=100
basicComm=100
typeOfWork=1
saleNum>40 T
basicComm>400 F
saleNum> 50 T
typeOfWork=1 T
OBE 10000
测试用例6 saleNum=100
basicComm=100
typeOfWork=2
saleNum>40 T
basicComm>400 F
saleNum> 50 T
typeOfWork=1 F
OBE 10000
测试用例7 saleNum=50
basicComm=100
typeOfWork=1
saleNum>40 T
basicComm>400 F
saleNum> 50 F
typeOfWork=1 T
OBE 5000
测试用例8 saleNum=50
basicComm=100
typeOfWork=2
saleNum>40 T
basicComm>400 F
saleNum> 50 F
typeOfWork=1 F
OBE 5000
测试用例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
路径不存在
测试用例11 saleNum=10
basicComm=1000
typeOfWork=1
saleNum>40 F
basicComm>400 T
saleNum> 50 F
typeOfWork=1 T
OBE 10000
测试用例12 saleNum=10
basicComm=1000
typeOfWork=2
saleNum>40 F
basicComm>400 T
saleNum> 50 F
typeOfWork=1 F
OBE 10000
测试用例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
路径不存在
测试用例15 saleNum=10
basicComm=100
typeOfWork=1
saleNum>40 F
basicComm>400 F
saleNum> 50 F
typeOfWork=1 T
OBE 1000
测试用例16 saleNum=10
basicComm=100
typeOfWork=2
saleNum>40 F
basicComm>400 F
saleNum> 50 F
typeOfWork=1 F
OBE 1000

基本路径覆盖

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

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

null 输入数据 路径 预期结果
测试用例1 saleNum=100
basicComm=1000
typeOfWork=1
OACE 155000
测试用例2 saleNum=50
basicComm=1000
typeOfWork=1
OADE 55000
测试用例3 saleNum=10
basicComm=1000
typeOfWork=2
OBE 10000
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!