浅谈软件测试(上)

    软件测试在软件的生命周期中占据着重要的地位,如今软件测试已发展为一个行业. 在许多国际著名的IT企业中,软件测试人员与软件开发人员的比例都接近于1:1. 在微软,软件测试人员和软件开发人员的比例为1.5~2.5:1,所以Bill Gates曾说很多人都以为微软是一家软件开发公司,实际上微软是一家软件测试公司,由此可见软件测试对软件质量保证的重要性. 

    为了验证一个程序是否完成了预定的功能(达到预定的效果),通常我们会对程序进行测试. 目前软件测试仍然是发现软件缺陷,确保软件质量的一种有效手段. 

问题:程序测试的基本方法是什么?

[注]一组给定的输入输出数据,就称为测试用例. 

[注]由于时间和费用的限制,将所有的输入数据都进行测试是几乎不可能的,也是不现实的,因此我们需要挑选一些极具代表性的输入数据来对程序进行测试. 

问题:如何选取测试用例?

    测试数据应尽量覆盖程序的所有分支(路径),并尽量减少重复覆盖的情况. 在此基础上,不应只考虑合法的输入数据,还应考虑不合法的输入数据和各种边界条件. 以上图中程序为例,输入数据{-5,-10,105,110}就是不合法的输入数据. 我们将这组不合法的数据输入至程序中,发现输入数据{-5,105}实际得到的结果是和预期不相符的——此时我们发现了程序的问题. 由于我们不可能对所有可能的输入数据都进行测试,所以就需要我们选择一些具有代表性的输入数据进行测试,所以说程序测试实际上是在进行抽样检查.

问题:程序测试的目的是什么?

 

问题:测试人员的主要任务是什么?

问题:程序测试方法有哪些分类?

回到本文开始时的程序:

    在完全了解程序的内部逻辑结构之后,我们给出了上图示的输入数据,这是典型的白盒测试方法. 其中给出输入数据{-5, 105},这是典型的边界测试方法. 

问题:针对当前的bug, 该如何修改程序?

    可以先判断输入的成绩是否合法,若不合法,直接输出"input error"即可; 若合法,再执行mark=score/10这步操作,之后再进入switch()结构进行判断——如此可避免输入的成绩位于[-9, -1]∪[101, 109]区间时输出不符合预期的情况.

#include<stdio.h>
int main()
{
    int score, mark;
    printf("Please input score:");
    scanf("%d", &score);
    if(score>=0&&score<=100)//确保数据的合法性
    {
        mark=score/10;
        switch(mark)
        {
            case 0:
            case 1:
            case 2:
            case 3:
            case 4:
            case 5: printf("grade:E\n"); break;
            case 6: printf("grade:D\n"); break;
            case 7: printf("grade:C\n"); break;
            case 8: printf("grade:B\n"); break;
            case 9:
            case 10: printf("grade:A\n"); break;
        }
    }
    else
    {
        printf("Input error!\n");
    }
    return 0;
}

[注]由上图示测试用例测试后,暂未发现新的bug. 

猜你喜欢

转载自blog.csdn.net/weixin_42048463/article/details/115078491