GitHub地址:
https://github.com/Rafael-Gu/The-3rd-Homework

一、题目要求

题目(2):下表为某商场每日营业额与应收税率的对照表,请编写一小程序根据该商场每日营业额计算其实际应缴纳税费。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
营业额X (¥) 1000≤X<5000 5000 ≤X<10000 X≥10000
税率 5% 8% 10%

二、程序设计

1、测试代码如下:

namespace UnitTest1
{       
    TEST_CLASS(UnitTest1)
    {
    public:
        
        TEST_METHOD(TestMethod1)
        {
            float x = 5000.00f;
            float i = 200.00f;
            Assert::AreEqual(jisuan(x), i, 0.01f);
            x = 1000.00f;
            i = 00.00f;
            Assert::AreEqual(jisuan(x), i, 0.01f);
            x = 10000.00f;
            i = 600.00f;
            Assert::AreEqual(jisuan(x), i, 0.01f);
            x = 2000.00f;
            i = 50.00f;
            Assert::AreEqual(jisuan(x), i, 0.01f);
            x = 6000.00f;
            i = 280.00f;
            Assert::AreEqual(jisuan(x), i, 0.01f);
            x = 12000.00f;
            i = 800.00f;
            Assert::AreEqual(jisuan(x), i, 0.01f);
            
        }

        TEST_METHOD(TestMethod2)//侧重于测试异常情况
        {
            float x = NAN;
            float i = 0.00f;
            Assert::AreEqual(jisuan(x), i, 0.01f);
            x = INFINITY;
            i = 0.00f;
            Assert::AreEqual(jisuan(x), i, 0.01f);
        }

        TEST_METHOD(TestMethod3)
        {
            float x = -1;
            float i = 0.00f;
            Assert::AreEqual(jisuan(x), i, 0.01f);
        }

    };
}

2、关于代码的思考

关于本题,我一开始只是将题目中的要求按照想法编了出来,我先对x先进行1000,5000,10000的输入,因为这三个数是关于交税的分界点,所以对这三个数进行测试,检查结果是否有误。然后找同学(大佬)来帮忙,作为浮点数x可能存在异常输入(NAN,INF),结果发现测试结果有误,发现程序中没有对这两个数进行考虑,导致单元测试没有通过。此外,对浮点数x进行负数输入进行单元测试,因为,负数在<1000的考虑范围之内,所以单元测试并未出现异常。程序代码如下:

#include <stdio.h>
#include <cmath>

float jisuan(float x)
{
    if (isnan(x))
        return 0;
    if (isinf(x))
        return 0;
    if (x < 1000)
        return 0;
    else if (x < 5000) 
        return (x - 1000)*0.05;
    else if (x < 10000)
        return 200 + (x - 5000)*0.08;
    else 
        return 600 + (x - 10000)*0.1;
}

int main()
{
    float x;
    scanf_s("%f", &x);
    if (x < 1000)printf("0\n");
    else if (x < 5000) printf("%.2f\n", (x - 1000)*0.05);
    else if (x < 10000)printf("%.2f\n", 200 + (x - 5000)*0.08);
    else printf("%.2f\n", 600 + (x - 10000)*0.1);
        return 0;
}

3、流程图

第三次软件工程作业——商场营销税额 随笔 第1张

三、覆盖标准测试

对于本次代码可知满足条件语句覆盖、判定覆盖、条件覆盖,其中,对于判定/条件覆盖,本代码中,每一个浮点数x都有一个对应的区间可带入到对应的函数中进行计算,得出最终的答案。条件组合覆盖满足条件,则是由边界点带入都有唯一一个函数带入得出答案。

1、判定/条件覆盖测试

x=NAN x=INF x<1000 1000≤x<5000 5000≤x<10000 ≥10000
return 0 return 0 return 0 return (x - 1000)*0.05 return 200 + (x - 5000)*0.08 return 600 + (x - 10000)*0.1

2、样例测试

第三次软件工程作业——商场营销税额 随笔 第2张
第三次软件工程作业——商场营销税额 随笔 第3张
第三次软件工程作业——商场营销税额 随笔 第4张
如上图可知,本次作业完成。

通过本次作业,我更加熟悉了单元测试的使用,同时也让我知道了如何更好地去进行程序测试,同时也提醒我要对输入值的范围和形式要考虑的更加周全。

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄