zoukankan      html  css  js  c++  java
  • 四则运算2—单元测试

      思路:编写的程序只有一个主函数,并且每个要求的实现方式都是一层层嵌套的,也都是使用同样的方法,先用while对不符合的输入进行提示,再用if...else...分支结构选择。所以则以(是否有乘除法—是否是否有负数—数值范围—打印方式—输出题目)为单元进行测试。

    按照BICEP原则:

    Right-结果是否正确?

    B-是否所有的边界条件都是正确的?

    I-能查一下反向关联吗?

    C-能用其他手段交叉检查一下结果吗?

    E-你是否可以强制错误条件发生?

    P-是否满足性能要求?

    源代码:

    #include<iostream.h>

    #include<stdlib.h>

    #include<time.h>

     

    int main()

    {

           srand(time(NULL));     //题目避免重复

           int value1,value2,op;   //两个整数,运算符

           int amount,mount;       //题目数量

           int erji;               //二级运算,即乘除法

           int number;             //正负数

           int range;              //数值范围

        //定制题目数量

           cout<<"请定制题目的数量(填一个>0的整数):";

           cin>>amount;

           while(amount<=0)

           {

                  cout<<"不合法!"<<endl<<"请重新输入(填一个>0的整数):";

                  cin>>amount;

           }

        //题目中是否有乘除法

           cout<<"题目中是否有乘除法(填0为是,1为否):";

           cin>>erji;

           while(erji!=0 && erji!=1 )

           {

                  cout<<"不合法!"<<endl<<"请重新输入(填0为有乘除法,1为无乘除法):";

                  cin>>erji;

           }

           if(erji==0)

           {

            //题目中是否有负数参与运算

                  cout<<"题目中是否有负数(填0为是,1为否):";

                  cin>>number;

                  while(number!=0 && number!=1)

                  {

                         cout<<"不合法!"<<endl<<"请重新输入(填0为有负数,1为无负数):";

                         cin>>number;

                  }

                  if(number==0)

                  {

                //题目中参与运算的数值范围

                         cout<<"请输入数值的最小边界(填一个<0的整数):";

                         cin>>range;

                         while(range>=0)

                         {

                                cout<<"不合法!"<<endl<<"请重新输入(填一个<0的整数):";

                                cin>>range;

                         }

                         //打印方式

                         cout<<"每行打印题目的数量(填一个>0的整数):";

                         cin>>mount;

                         while(mount<=0)

                         {

                                cout<<"不合法!"<<endl<<"请重新输入(填一个>0的整数):";

                                cin>>mount;

                         }

                //输出题目

                         cout<<endl<<"共"<<amount<<"道包含乘除法的负数运算(范围:"<<range<<"~0)"<<endl;

                         for(int i=0;i<amount;i++)

                         {

                                cout<<"("<<i+1<<")";

                                value1=rand()%range+range/2;

                                value2=rand()%range+range/2;

                                op=rand()%4;

                                switch(op)

                                {

                                case 0:

                                       cout<<value1<<" + "<<value2<<"="<<" ";      //加

                                       break;

                                case 1:

                                       cout<<value1<<" - "<<value2<<"="<<" ";      //减

                                       break;

                                case 2:

                                       cout<<value1<<" x "<<value2<<"="<<" ";      //乘

                                       break;

                                case 3:

                                       cout<<value1<<" ÷ "<<value2<<"="<<" ";   //除

                                       break;

                                }

                                if((i+1)%mount==0)

                                {

                        cout<<endl;

                    }

                         }

                  }

                  else

                  {

     

                         cout<<"请输入数值的最大边界(填一个>0的整数):";

                         cin>>range;

                         while(range<0)

                         {

                                cout<<"不合法!"<<endl<<"请重新输入(填一个>0的整数):";

                                cin>>range;

                         }

                         cout<<"每行打印题目的数量(每行):";

                         cin>>mount;

     

                         cout<<endl<<"共"<<amount<<"道包含乘除法的非负数运算(范围:0~"<<range<<")"<<endl;

                         for(int i=0;i<amount;i++)

                         {

                             cout<<"("<<i+1<<")  ";

                                value1=rand()%range;

                                value2=rand()%range;

                                op=rand()%4;

                                switch(op)

                                {

                                case 0:

                                       cout<<value1<<" + "<<value2<<"="<<" ";      //加

                                       break;

                                case 1:

                                       cout<<value1<<" - "<<value2<<"="<<" ";      //减

                                       break;

                                case 2:

                                       cout<<value1<<" x "<<value2<<"="<<" ";      //乘

                                       break;

                                case 3:

                                       cout<<value1<<" ÷ "<<value2<<"="<<" ";   //除

                                       break;

                                }

                                if((i+1)%mount==0)

                                {

                        cout<<endl;

                    }

                         }

                  }

           }

           else

           {

     

                  cout<<"题目中是否有负数(填0为是,1为否):";

                  cin>>number;

                  while(number!=0 && number!=1)

                  {

                         cout<<"不合法!"<<endl<<"请重新输入(填0为有负数,1为无负数):";

                         cin>>number;

                  }

                  if(number==0)

                  {

     

                         cout<<"请输入数值的最小边界(填一个<0的整数):";

                         cin>>range;

                         while(range>=0)

                         {

                                cout<<"不合法!"<<endl<<"请重新输入(填一个<0的整数):";

                                cin>>range;

                         }

                         cout<<"每行打印题目的数量(每行):";

                         cin>>mount;

     

                         cout<<endl<<"共"<<amount<<"道不包含乘除法的负数运算(范围:"<<range<<"~0)"<<endl;

                         for(int i=0;i<amount;i++)

                         {

                             cout<<"("<<i+1<<")  ";

                                value1=rand()%range+range/2;

                                value2=rand()%range+range/2;

                                op=rand()%2;

                                switch(op)

                                {

                                case 0:

                                       cout<<value1<<" + "<<value2<<"="<<" ";      //加

                                       break;

                                case 1:

                                       cout<<value1<<" - "<<value2<<"="<<" ";      //减

                                       break;

                                }

                                if((i+1)%mount==0)

                                {

                        cout<<endl;

                    }

                         }

                  }

                  else

                  {

     

                         cout<<"请输入数值的最大边界(填一个>0的整数):";

                         cin>>range;

                         while(range<0)

                         {

                                cout<<"不合法!"<<endl<<"请重新输入(填一个>0的整数):";

                                cin>>range;

                         }

                         cout<<"每行打印题目的数量(每行):";

                         cin>>mount;

     

                         cout<<endl<<"共"<<amount<<"道不包含乘除法的非负数运算(范围:0~"<<range<<")"<<endl;

                         for(int i=0;i<amount;i++)

                         {

                             cout<<"("<<i+1<<")  ";

                                value1=rand()%range;

                                value2=rand()%range;

                                op=rand()%2;

                                switch(op)

                                {

                                case 0:

                                       cout<<value1<<" + "<<value2<<"="<<" ";      //加

                                       break;

                                case 1:

                                       cout<<value1<<" - "<<value2<<"="<<" ";      //减

                                       break;

                                }

                                if((i+1)%mount==0)

                                {

                        cout<<endl;

                    }

                         }

                  }

           }

           return 0;

    }

      

    设计单元测试计划及测试结果:

    (0)17、0、1、64、1

    这个是完全按照提示的要求输入,得到了预想的结果。

     

     

    (1)null、null、null、null、null

    全为空,这必然不满足条件,并且我的程序在第一次输入null时不但没有报错,还不能继续执行。找到bug,进行修改。

     

     

    (2)0、0、0、0、0

    首先题目不能为0,所以会出现提示重新输入;其次是打印方式输入0(即每行0题)不符合常理却没有报错提示,发现bug进行修改。

     

     

    修改后

    (3)1、0、0、-9、0

    出现提示。

     

     

    (4)1、1、1、1、1

    无规律都取1,也是符合要求的。

     

     

    (5)-22、-22、-22、-22、-22

    很明显,题目数量不能为负数,有报错提示;是否有乘除法只能有0或1两种情况,故有报错提示;有无负数同理;打印方式也不能每行题目数量为非整数,有报错提示。

     

     

    (6)a、b、c、d、e

    这些也是不符合要求的输入,应该给出提示。

     

    总结:测试数据能让我们发现很多不足,不断修改完善,还提升能力。

  • 相关阅读:
    转:孙振耀谈人生(推荐)
    自绘按钮的实现
    数据结构知识
    Direct Show采集图像实例
    视觉跟踪
    改变对话框控件的颜色
    笔试题
    CBitmapButton的使用
    Rotor (SSCLI) 2.0 登场!
    Under the hood: 从Win32 SEH到CLI异常处理模型
  • 原文地址:https://www.cnblogs.com/mumulucky/p/4340388.html
Copyright © 2011-2022 走看看