zoukankan      html  css  js  c++  java
  • 软件工程——第四次作业(2)

    软件工程——第四次作业(2)

    单元测试

    作业要求:https://edu.cnblogs.com/campus/nenu/SWE2017FALL/homework/994

    程序代码:https://git.coding.net/ss505072461/f4.git

    结对编程队友:@葛美义

    ——————————————————————————————————————————

    本次作业的程序是f4(四则运算生成),由于我实现的功能中,主要的内容是对于被输出的题目的结果计算,毕竟作为一个出题程序,自己都无法知道结果就是一个失败的程序。

    我的编码及测试环境是Visual Studio 2015,运用的是环境中的单元测试功能。测试的方法是自行在网上搜索了很久学习的。

    我在程序中,作为计算结果用的函数是:Result((float)a, (float)b, (float)c, (float)d, symbol[0], symbol[1], symbol[2]);

    其中a、b、c、d这4个变量是随机生成的[1,9]整形数,由于有除法运算,在参数中就被转化为浮点数了,symbol数组是3个四则运算符的代表,其范围为[0,3]整形数,分别对应着加减乘除4种运算。

    我在第一次测试中,参数设定是:

    a = 1;b = 1;c = 1;d = 1;symbol[0] = 0;symbol[1] = 0;symbol[2] = 0;

    其含义是1+1+1+1,预期结果是4,其测试目的仅仅是为了判断程序内容是否执行。

    单元测试的代码如下:

    using System.Threading.Tasks;
    
    namespace f4_program.Tests
    {
        [TestClass()]
        public class f4Tests
        {
            [TestMethod()]
            public void ResultTest()
            {
                int a = 1;
                int b = 1;
                int c = 1;
                int d = 1;
                int[] symbol = new int[] { 0, 0, 0 };
                Assert.IsTrue(f4.Result((float)a, (float)b, (float)c, (float)d, symbol[0], symbol[1], symbol[2]) == 4);
            }
        }
    }
    View Code

    而测试后的结果是:

    而后,我开始了对于一些相对复杂的内容计算测试:

    参数设定:

    a = 9;b = 8;c = 4;d = 6;symbol[0] = 3;symbol[1] =0;symbol[2] = 2;

    即9/8+4*6,预期结果是25.125,开始测试计算的精确度,结果开始涉及小数。

    代码:

    using System.Threading.Tasks;
    
    namespace f4_program.Tests
    {
        [TestClass()]
        public class f4Tests
        {
            [TestMethod()]
            public void ResultTest()
            {
                int a = 9;
                int b = 8;
                int c = 4;
                int d = 6;
                int[] symbol = new int[] { 3, 0, 2 };
                Assert.IsTrue(f4.Result((float)a, (float)b, (float)c, (float)d, symbol[0], symbol[1], symbol[2]) == 25.125);
            }
        }
    }
    View Code

    测试结果:

    之后的几次测试:

    1+1+1+1=4

    9/8+4*6=25.125

    6+1-3*2=1

    7*6/3-2=12

    1/8-7*9=-62.875

    测试结果:

    之所以在测试方面能够通过的原因是由于程序的内容十分简单,在功能实现上仅仅是实现了功能1的四则运算,并没有涉及到功能2的括号以及功能3的打印等问题,并且在看到微信群里的讨论后,程序的数据生成也被限制在[1,9]的整形数范围内,因此程序生成的结果也会被限制在一定的范围内,导致测试用样例选择也比较少。这是本人水平不足的问题。

    其中之所以能够测试一次通过的计算代码(前方高能):

    public static float Result(float a,float b,float c,float d,int sym1,int sym2,int sym3)
            {            
                //没错,因为三个运算符“只有”4*4*4=64种情况……
                if ((sym1 == 0) && (sym2 == 0) && (sym3 == 0))
                    return(a + b + c + d);
                if ((sym1 == 0) && (sym2 == 0) && (sym3 == 1))
                    return (a + b + c - d);
                if ((sym1 == 0) && (sym2 == 0) && (sym3 == 2))
                    return (a + b + c * d);
                if ((sym1 == 0) && (sym2 == 0) && (sym3 == 3))
                    return (a + b + c / d);
    
                if ((sym1 == 0) && (sym2 == 1) && (sym3 == 0))
                    return (a + b - c + d);
                if ((sym1 == 0) && (sym2 == 1) && (sym3 == 1))
                    return (a + b - c - d);
                if ((sym1 == 0) && (sym2 == 1) && (sym3 == 2))
                    return (a + b - c * d);
                if ((sym1 == 0) && (sym2 == 1) && (sym3 == 3))
                    return (a + b - c / d);            
    
                if ((sym1 == 0) && (sym2 == 2) && (sym3 == 0))
                    return (a + b * c + d);
                if ((sym1 == 0) && (sym2 == 2) && (sym3 == 1))
                    return (a + b * c - d);
                if ((sym1 == 0) && (sym2 == 2) && (sym3 == 2))
                    return (a + b * c * d);
                if ((sym1 == 0) && (sym2 == 2) && (sym3 == 3))
                    return (a + b * c / d);
    
                if ((sym1 == 0) && (sym2 == 3) && (sym3 == 0))
                    return (a + b / c + d);
                if ((sym1 == 0) && (sym2 == 3) && (sym3 == 1))
                    return (a + b / c - d);
                if ((sym1 == 0) && (sym2 == 3) && (sym3 == 2))
                    return (a + b / c * d);
                if ((sym1 == 0) && (sym2 == 3) && (sym3 == 3))
                    return (a + b / c / d);
    
                if ((sym1 == 1) && (sym2 == 0) && (sym3 == 0))
                    return (a - b + c + d);
                if ((sym1 == 1) && (sym2 == 0) && (sym3 == 1))
                    return (a - b + c - d);
                if ((sym1 == 1) && (sym2 == 0) && (sym3 == 2))
                    return (a - b + c * d);
                if ((sym1 == 1) && (sym2 == 0) && (sym3 == 3))
                    return (a - b + c / d);
    
                if ((sym1 == 1) && (sym2 == 1) && (sym3 == 0))
                    return (a - b - c + d);
                if ((sym1 == 1) && (sym2 == 1) && (sym3 == 1))
                    return (a - b - c - d);
                if ((sym1 == 1) && (sym2 == 1) && (sym3 == 2))
                    return (a - b - c * d);
                if ((sym1 == 1) && (sym2 == 1) && (sym3 == 3))
                    return (a - b - c / d);
    
                if ((sym1 == 1) && (sym2 == 2) && (sym3 == 0))
                    return (a - b * c + d);
                if ((sym1 == 1) && (sym2 == 2) && (sym3 == 1))
                    return (a - b * c - d);
                if ((sym1 == 1) && (sym2 == 2) && (sym3 == 2))
                    return (a - b * c * d);
                if ((sym1 == 1) && (sym2 == 2) && (sym3 == 3))
                    return (a - b * c / d);
    
                if ((sym1 == 1) && (sym2 == 3) && (sym3 == 0))
                    return (a - b / c + d);
                if ((sym1 == 1) && (sym2 == 3) && (sym3 == 1))
                    return (a - b / c - d);
                if ((sym1 == 1) && (sym2 == 3) && (sym3 == 2))
                    return (a - b / c * d);
                if ((sym1 == 1) && (sym2 == 3) && (sym3 == 3))
                    return (a - b / c / d);
    
                if ((sym1 == 2) && (sym2 == 0) && (sym3 == 0))
                    return (a * b + c + d);
                if ((sym1 == 2) && (sym2 == 0) && (sym3 == 1))
                    return (a * b + c - d);
                if ((sym1 == 2) && (sym2 == 0) && (sym3 == 2))
                    return (a * b + c * d);
                if ((sym1 == 2) && (sym2 == 0) && (sym3 == 3))
                    return (a * b + c / d);
    
                if ((sym1 == 2) && (sym2 == 1) && (sym3 == 0))
                    return (a * b - c + d);
                if ((sym1 == 2) && (sym2 == 1) && (sym3 == 1))
                    return (a * b - c - d);
                if ((sym1 == 2) && (sym2 == 1) && (sym3 == 2))
                    return (a * b - c * d);
                if ((sym1 == 2) && (sym2 == 1) && (sym3 == 3))
                    return (a * b - c / d);
    
                if ((sym1 == 2) && (sym2 == 2) && (sym3 == 0))
                    return (a * b * c + d);
                if ((sym1 == 2) && (sym2 == 2) && (sym3 == 1))
                    return (a * b * c - d);
                if ((sym1 == 2) && (sym2 == 2) && (sym3 == 2))
                    return (a * b * c * d);
                if ((sym1 == 2) && (sym2 == 2) && (sym3 == 3))
                    return (a * b * c / d);
    
                if ((sym1 == 2) && (sym2 == 3) && (sym3 == 0))
                    return (a * b / c + d);
                if ((sym1 == 2) && (sym2 == 3) && (sym3 == 1))
                    return (a * b / c - d);
                if ((sym1 == 2) && (sym2 == 3) && (sym3 == 2))
                    return (a * b / c * d);
                if ((sym1 == 2) && (sym2 == 3) && (sym3 == 3))
                    return (a * b / c / d);
    
                if ((sym1 == 3) && (sym2 == 0) && (sym3 == 0))
                    return (a / b + c + d);
                if ((sym1 == 3) && (sym2 == 0) && (sym3 == 1))
                    return (a / b + c - d);
                if ((sym1 == 3) && (sym2 == 0) && (sym3 == 2))
                    return (a / b + c * d);
                if ((sym1 == 3) && (sym2 == 0) && (sym3 == 3))
                    return (a / b + c / d);
    
                if ((sym1 == 3) && (sym2 == 1) && (sym3 == 0))
                    return (a / b - c + d);
                if ((sym1 == 3) && (sym2 == 1) && (sym3 == 1))
                    return (a / b - c - d);
                if ((sym1 == 3) && (sym2 == 1) && (sym3 == 2))
                    return (a / b - c * d);
                if ((sym1 == 3) && (sym2 == 1) && (sym3 == 3))
                    return (a / b - c / d);
    
                if ((sym1 == 3) && (sym2 == 2) && (sym3 == 0))
                    return (a / b * c + d);
                if ((sym1 == 3) && (sym2 == 2) && (sym3 == 1))
                    return (a / b * c - d);
                if ((sym1 == 3) && (sym2 == 2) && (sym3 == 2))
                    return (a / b * c * d);
                if ((sym1 == 3) && (sym2 == 2) && (sym3 == 3))
                    return (a / b * c / d);
    
                if ((sym1 == 3) && (sym2 == 3) && (sym3 == 0))
                    return (a / b / c + d);
                if ((sym1 == 3) && (sym2 == 3) && (sym3 == 1))
                    return (a / b / c - d);
                if ((sym1 == 3) && (sym2 == 3) && (sym3 == 2))
                    return (a / b / c * d);
                if ((sym1 == 3) && (sym2 == 3) && (sym3 == 3))
                    return (a / b / c / d);
    
                return 0;
            }
    View Code

    由于实现的功能比较少,因此测试用样例也显得十分地单薄……

  • 相关阅读:
    HDU 1010 Tempter of the Bone(DFS剪枝)
    HDU 1013 Digital Roots(九余数定理)
    HDU 2680 Choose the best route(反向建图最短路)
    HDU 1596 find the safest road(最短路)
    HDU 2072 单词数
    HDU 3790 最短路径问题 (dijkstra)
    HDU 1018 Big Number
    HDU 1042 N!
    NYOJ 117 求逆序数 (树状数组)
    20.QT文本文件读写
  • 原文地址:https://www.cnblogs.com/shaos033/p/7649845.html
Copyright © 2011-2022 走看看