zoukankan      html  css  js  c++  java
  • RIGHT-BICEP单元测试——“二柱子四则运算升级版”

                                  RIGHT-BICEP单元测试

                                                        ——“二柱子四则运算升级版”

          ”单元测试“这对于我们来说是一个全新的专业含义,在上了软件工程这门课,并当堂编写了简单的"求一组数中的最大值"函数的单元测试之后,我们对它有了全新的认识。

          老师让我们回去之后将“二柱子四则运算升级版”的程序进行单元测试(二柱子程序的源码我已经上传,这里不再重复,只列举单元测试的部分和分析),如下:

          PS.这里附上老师上课讲的关于RIGHT-BICEP测试的方法:

    6个值得测试的具体部位,他们能够提高我们的测试技巧:
    Right-结果是否正确?
    B-是否所有的边界条件都是正确的?
    I-能查一下反向关联吗?
    C-能用其他手段交叉检查一下结果吗?
    E-你是否可以强制错误条件发生?
    P-是否满足性能要求?

    一、测试计划

    -测试结果是否正确?
    -测试是否能够产生指定范围的随机数?
    -测试能否选择是否保存到文件里?
    —测试能否进行异常处理?
    -测试能否选择有无真分数?
    —测试能否选择只进行加减运算还是四则运算?
    -测试能否选择加减有无负号?
    —测试能否选择除法有无余数?
     
    二、测试结果是否正确?
    测试如下,基本可以达到我预想的结果。程序基本没有大的问题,不过小细节还是值得反复推敲……
     

    三、测试是否能够产生指定范围的随机数?

         上一次编写二柱子的程序也用到了随机生成随机数的知识点,我已经声明是在CSDN上看到大神们的讨论。用的是下面的源码:

     1 #include<iostream>
     2 #include <time.h>
     3 using namespace std;
     4 #define random(x) (rand()%x)
     5 
     6 void main()
     7 {
     8     srand((int)time(0));
     9     one = rand() % (r2-r1+ 1) + 1;
    10     two = rand() % (r2 - r1 + 1) + 1;
    11     cout<<one<<" "<<two<<endl;
    12 }

         用这种方法貌似只能产生正整数。但是,鉴于这次程序的要求中涉及到用户设置“是否有负数”,所以我有两个思路。一是还用上次的方法,设置swich语句来控制是否手动添加

    负号。二是换一中能生成含有负数的随机数。于是我又去人家的博客上围观了一下(原谅我真的记不住生成随机数的方法了╥﹏╥...),经过我的测试,下面的方法可以产生任意区间内的整数(含负数),源码如下:

     1 //编程时的测试程序
     2 
     3 #include<iostream>
     4 #include <time.h>
     5 using namespace std;
     6 #define random(x) (rand()%x)
     7 
     8 void main()
     9 {
    10     
    11     int one, two;
    12     int r, r1, r2;
    13     cout << "分别输入下限和上限:" << endl;
    14     cin >> r1;
    15     cin >> r2;
    16     r = r2 - r1;
    17     srand((int)time(0));
    18     /*one = r1 + r2 * rand() / (RAND_MAX + 1);
    19     two = r1 + r2 * rand() / (RAND_MAX + 1);
    20     three = r1 + r2 * rand() / (RAND_MAX + 1);
    21     four = r1 + r2 * rand() / (RAND_MAX + 1);*/
    22 
    23     one = r1 + rand() % r;
    24     two = r1 + rand() % r;
    25 
    26     cout << one<<" ," << two << endl;
    27 }

    测试数据和截图如下:分别测试-30~50;0~30;-30~0之间的整数,测试结果正确!!

     

     四、测试能否选择是否保存到文件里?

    老师题目的要求是“可定制打印方式”,我看到有的同学理解是按照不同的输出风格输出,比如一行输出5个或者10个算式,这个可定制。但是我理解的是要用户选择是否要输出到文件里,因此我查阅了C++的输入输出流代码,如下:

     1 #include<fstream>
     2 #include<iostream>
     3 #include<cmath>
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     ofstream outfile("Prime.txt", ios::out);
     9     if (!outfile)
    10     {
    11         cout << "open error!" << endl;
    12         exit(1);
    13     }
    14     outfile <<"1 2 3 4 5 6 " << endl;
    15     outfile.close();
    16     return 0;
    17 }

    我们会看到文件成功的建立,并将数据存入到文件里。

    但是……(。・_・。)ノ我不得不说,我在制定思路的时候是想着,先让用户选择是否要打印到文件中,然后在后来的每次输出都用if语句来控制,如果只是屏幕输出就用cout<<输出;如果是保存到文件中就用outfile<<输出……但是……鉴于我的输出量实在是太大了,第一轮代码的编写我只是写了屏幕输出额cout,然后昨天由于作业赶着交就没有修改输出部分的代码,不过我使用了一个函数建立了文件,有时间我一定会再加上的……

    代码如下:

     1 /*输出打印方式*/
     2 int Output(int o)
     3 {
     4     /*int o;
     5     cout << "系统已经记录了您的定制参数!请选择打印的方式:(1、直接输出 2、保存到文件)"<<endl;
     6     cin >> o;*/
     7     if (o == 1)
     8         cout << "四则运算出题系统欢迎您!!" << endl;
     9     else if (o == 2)
    10     {
    11         cout << "四则运算出题系统欢迎您!!" << endl;
    12         ofstream outfile("formula.txt", ios::out);
    13         if (!outfile)
    14         {
    15             cout << "Open error!!" << endl;
    16             exit(1);
    17         }
    18         outfile.close();
    19     }
    20     else
    21         cout << "输入错误,重新选择!" << endl;
    22 
    23     return 0;
    24 }

    五、测试能否进行异常处理?
    开始进行测试时,输入3之后报错,但是应该让用户重新输入,但是并没有出现应该有的效果啊啊啊……(。﹏。*)
    于是,我对程序进行了修改,如下:
     1 cout << "请选择您是否需要保存文档?(1、不需要 2、需要)" << endl;
     2     cin >> O;
     3     while (1)//判断是否输入合法
     4     {
     5         if (O!=1 && O!=2)
     6         {
     7             cout << "您输入的有误,请重新输入:" << endl;
     8             cin >> O;
     9         }
    10         else
    11             break;
    12     }

    在主函数中添加循环输出直到用户输入正确的代码,之后程序可以进行出错处理了。

    用户输入的数字错误,或者输入为空,程序都不会向下执行。

    用户选择的数据范围不合理,也可以重新输入,直到符合要求为止。

    六、测试能否选择有无真分数?
    七、测试能否选择只进行加减运算还是四则运算?
    八、测试能否选择加减有无负号?
    九、测试能否选择除法有无余数?
    以上几种测试在下图中显示:
     

    ( 终于写完本周的作业啦啦啦啦 ̄O ̄)ノ~~~好吧,也许没什么可高兴的,大神们早就进行下一项任务了吧?!(。・・)ノ……)

    Keyboard not found...press F1 to continue:)
  • 相关阅读:
    Dependency Injection in ASP.NET Web API 2
    js, lambada? 在chrome和node下可以使用
    jquery text
    bugs view:
    支持 gRPC 长链接,深度解读 Nacos 2.0 架构设计及新模型
    阿里云 ecs云主机 静默安装oracle11g
    mysql1033错误 InnoDB临时表空间报错
    8888. Distance Between 2 Nodes in BST
    783. Minimum Distance Between BST Nodes
    530. Minimum Absolute Difference in BST
  • 原文地址:https://www.cnblogs.com/2016helen/p/5268515.html
Copyright © 2011-2022 走看看