• 【软件测试】边界值分析法


      书中曾用悬崖形容软件边界:如果在悬崖峭壁边可以自信而安全地行走而不掉下去,平地就几乎不在话下了。边界条件是特殊情况,因为编程在根本上说在边界上容易产生问题。实践表明,故障往往出现在定义域或值域的边界上。

    1.边界值分析法的概念

      边界值分析法就是对输入的边界值进行测试的一种黑盒测试方法,通常边界值分析法是作为对等价类划分方法的补充,这种情况下,其测试用例来自等价类的边界。

    #include <cstring>
    #include <cstdio>
    #include <iostream>
    #include <cstdlib>
    #include <cmath>
    using namespace std;
    
    int a[10];
    
    int main(){
        memset(a, -1, sizeof(a));
        for( int i = 1; i <= 10; i ++)
            a[i] = i;
        return 0;
    }
    

      上述代码是很常见的数组越界问题,数组的范围为0~9,而上述赋值语句却是在1~10范围内操作,因此,在上述代码实现中a[0]=-1,而非我们一开始希望的a[0]=0。这都不是我们希望得到的结果。

    2.边界值分析法选择测试用例原则

      1)  如果输入条件规定了值的范围,则应取刚达到这个范围的边界值、以及刚超越这个范围边界的值作为测试输入数据

      2)  如果输入条件规定了值的个数,则选取最大个数、最小个数、比最大个数多一、比最小个数少一的数作为测试数据

      3)  根据规格说明的每个输出条件,使用规则1)

      4)  根据规格说明的每个输出条件,使用规则2)

      5)  若输入域是有序集合,则选取集合的第一个元素和最后一个元素作为测试用例

      6)  如果程序使用了一个内部数据结构,则应当选择内部数据结构上得边界值作为测试用例

      7)  分析规格说明,找出其他可能的边界条件

    3.使用边界分析法设计测试用例

      1)首先确定边界情况数据

      2)选取正好等于,刚刚大于或刚刚小于边界的值作为测试,而不是选取等价类中的典型值或任意值。

    4.小实例

    • 问题描述:NextData函数包含三个变量:month,day,year,函数的输出为输入日期的后一天。
    • 要求输入变量month,day,year均为整数值,并且满足下列条件:
      • 1≤month≤12
      • 1≤day≤31
      • 1812≤year≤2012
    • 等价类划分法:http://www.cnblogs.com/tju-crab/p/4354643.html在这篇博客中应用等价类划分法在这个实例上了
    • 测试用例设计:
    用例编号 输入 预期输出
    year month day
    1 1811 2 1 null
    2 2013 2 1 null
    3 1812 0 1 null
    4 1812 13 1 null
    5 1812 2 0 null
    6 1812 2 29 1812/3/1
    7 1812 2 30 null
    8 1812 3 0 null
    9 1812 3 31 1812/4/1
    10 1812 3 32 null
    11 1812 4 0 null
    12 1812 4 30 1812/5/1
    13 1812 4 31 null
    14 1813 2 28 1813/3/1
    15 1813 2 29 null
    16 1812 12 31 1813/1/1
    17 2012 12 31 2013/1/1
    • 代码实现:
    bool isLeap( int year){
        if( year % 4 != 0 ) return false;
        else if( year % 100 != 0 ) return true;
        else if( year % 400 == 0 ) return true;
        else return false;
    }
    
    void NextDate( int month, int day, int year){
        if( year >= 1812 && year <= 2012){
            if(month >= 1 && month <= 12){
                if(month == 2){
                    if(isLeap(year)){
                        if(day >= 1 && day < 29){
                            cout << year << "" << month << "" << day + 1 << "" << endl;
                        }
                        else if(day == 29){
                                cout << year << "" << 3 << "" << 1 << "" << endl;
                        }
                    }
                    else{
                        if(day >= 1 && day < 28){
                            cout << year << "" << month << "" << day + 1 << "" << endl;
                        }
                        else if(day == 28){
                            cout << year << "" << 3 << "" << 1 << "" << endl;
                        }
                    }
                }
                else if(month == 2 || month == 4 || month == 6 || month == 9 || month == 11 ){
                    if(day >= 1 && day < 30){
                        cout << year << "" << month << "" << day + 1 << "" << endl;
                    }
                    else if(day == 30){
                        cout << year << "" << month + 1 << "" << 1 << "" << endl;
                    }
                }
                else{
                    if(day >= 1 && day < 31){
                        cout << year << "" << month << "" << day + 1 << "" << endl;
                    }
                    else if(day == 31){
                        if(month == 12){
                            cout << year + 1 << "" << 1 << "" << 1 << "" << endl;
                        }
                        else{
                            cout << year << "" << month + 1 << "" << 1 << "" << endl;
                        }
                    }
                }

      

  • 相关阅读:
    MyISAM 和 InnoDB 索引的区别
    iOS crash日志
    。。。
    redis的缓存测试
    job测试
    笔记
    Android获取启动页面Activity方法
    UI自动化框架-一个小demo
    mitmproxy-java 的尝试
    monkey
  • 原文地址:https://www.cnblogs.com/tju-crab/p/4457422.html
Copyright © 2020-2023  润新知