软件工程第三次作业

软件工程第三次作业

所选题目

我所选择的题目为求最大连续子数组和。写博客不是写教程,所以我只给出了一些关键部分的截图。

使用的算法

使用了Kadane算法,这个算法的时间复杂度为O(n),对于解决这种问题十分有效。我使用C++进行了实现。

代码如下

# include <iostream>
using namespace std;

class Maxsub
{
public:
    Maxsub();
    Maxsub(int * p,int position);
    ~Maxsub();
    int max_sub();
private:
    int * arr;
    int positon;
    int max(int fir, int sec);
};

Maxsub::Maxsub()
{
}

//position is the length of the array.
Maxsub::Maxsub(int * p, int position)
{
    Maxsub::arr = p;
    Maxsub::positon = --position;
}

Maxsub::~Maxsub()
{
}

int Maxsub::max_sub()
{
    int max_pre = Maxsub::arr[0];
    int max = Maxsub::arr[0];
    for (int i = 1; i <= positon; i++)
    {
        max_pre = Maxsub::max(Maxsub::arr[i],(Maxsub::arr[i]+max_pre));
        max = Maxsub::max(max_pre,max);
    }
    return max;
}

int Maxsub::max(int fir, int sec)
{
    return (fir > sec) ? fir : sec;
}

推送到远程仓库

通过git推送到远程仓库,仓库地址为仓库地址链接,在homework3文件夹下。
提交截图

设计测试用例

我准备使用判定/条件覆盖标准,进行测试。

判定/条件覆盖:是设计足够的测试用例,得使判断中每个条件的所有可能取值至少执行一次,同时每个判断本身所有可能结果也至少执行一次。

首先分析算法,算法中重复使用了两个数中取最大值这个方法,因此每一次循环,就是进行了两次判断。所以可以据此进行设计,我准备使用四组测试用例,这样就可以达到判定/条件覆盖的标准。

这四组数据,覆盖了4条分支路径,并且同时满足了条件覆盖的标准。

测试数据编号要输入的数组预期结果
1-5,10,20,-530
210, 5 ,-5 ,515
310, 5 , -5 ,1020
410,-15 ,6 ,1016

自动单元测试结果

测试部分的代码如下

#include "stdafx.h"
#include "CppUnitTest.h"
#include "../homework3/source.cpp"

using namespace Microsoft::VisualStudio::CppUnitTestFramework;

namespace UnitTest1
{       
    TEST_CLASS(UnitTest1)
    {
    public:
        
        TEST_METHOD(TestMethod1)
        {
            // TODO: 在此输入测试代码
            int ara1[4] = {-5,10,20,-5};
            int ara2[4] = { 10,-15 ,6 ,10 };
            int ara3[4] = { 10, 5 , -5 ,10 };
            int ara4[4] = { 10, 5 ,-5 ,5 };
            Maxsub mymaxsub1(ara1, 4);
            Maxsub mymaxsub2(ara2, 4);
            Maxsub mymaxsub3(ara3, 4);
            Maxsub mymaxsub4(ara4, 4);
            Assert::AreEqual(mymaxsub1.max_sub(), 30);
            Assert::AreEqual(mymaxsub2.max_sub(), 16);
            Assert::AreEqual(mymaxsub3.max_sub(), 20);
            Assert::AreEqual(mymaxsub4.max_sub(), 15);
        }

    };
}

测试结果如下

代码覆盖率测试
单元测试

转载于:https://www.cnblogs.com/zhenfeilee/p/soft_thr.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值