白盒测试作业

本节作业共有三个题目,每个题目会给出一个待测函数的声明及其代码实现。对于每个待测函数,你应该给出:

  • 它的控制流图,节点应为语句或基本块
  • 一组测试样例,可以实现对待测函数的行覆盖
  • 一组测试样例,可以实现对待测函数的分支覆盖
  • 一组测试样例,可以实现对待测函数的条件组合覆盖
  • 这些测试样例组应该尽可能地小(a.k.a.每个测试样例组中的测试样例个数应该尽可能地少)

题目I

/**
 * @brief 第一题,基础的控制流分析。
 */
void exercise_wb_1(int param1, int param2, int param3)
{
    int res = -1;

    if (param1 > 0 && param2 > 0 && param3 > 0)
    {
        if (param1 > param2)
        {
            if (param2 > param3)
            {
                res = 3;
            }
            else if (param1 > param3)
            {
                res = 2;
            }
            else
            {
                res = 1;
            }
        }
        else
        {
            if (param2 > param3)
            {
                if (param1 > param3)
                {
                    res = 2;
                }
                else
                {
                    res = 1;
                }
            }
            else
            {
                res = 0;
            }
        }
    }

    cout << res << endl;
}

题目II

/**
 * @brief 第二题,引入了简单的数据流,更多的条件组合。
 */
void exercise_wb_2(int param1, int param2)
{
    int param3 = param1 + param2;

    if (param3 > 0)
    {
        ++param1;
    }

    if (param3 < 0)
    {
        ++param2;
    }

    if (param1 > param2 || param1 > param3)
    {
        if (param1 <= param2 || param1 <= param3)
        {
            param3 += param1;
        }
    }

    if (param3 != 0)
    {
        param3 += param2;
    }

    cout << param3 << endl;
}

题目III


/**
 * @brief 第三题,引入了循环和更复杂的输入。
 */
void exercise_wb_3(vector<int> params)
{
    bool flag = true;
    int res = 0;
    int pos = 0;
    int sz = params.size();

    while (pos != sz)
    {
        if (flag)
        {
            res += params[pos];
        }
        else
        {
            res -= params[pos];
        }
        if (params[pos] > 0)
        {
            flag = !flag;
        }
        ++pos;
    }

    if (res > 0)
    {
        res = res * res;
    }

    if (res < 0)
    {
        res = -(res * res);
    }

    cout << res << endl;
}
Last Updated:
Contributors: Lychnis