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

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

  • 相关阅读:
    HP惠普战66电源黄灯闪烁无法充电
    C#.NET rabbit mq 持久化时报错 durable
    手动解压安装mysql8.0 on windows my.ini
    C#.NET MySql8.0 EF db first
    EF MYSQL 出现:输入字符串的格式不正确
    EF MYSQL DB FIRST 出现2次数据库名
    mysql windows 下配置可远程连接
    团队项目的Git分支管理规范
    一个简单的软件测试流程
    微服务架构下的质量迷思——混沌工程
  • 原文地址:https://www.cnblogs.com/shaos033/p/7649845.html
Copyright © 2011-2022 走看看