软件工程-单人任务
任务描述:
请阅读邹欣老师的这篇博文(地址:https://www.cnblogs.com/xinz/archive/2011/10/22/2220872.html)和构建之法第1~3章内容,尤其是第2章效能分析和第3章代码规范部分。 回顾和复习课堂讲授的单元测试部分内容。任务目的:
熟悉一个“高质量”软件的开发过程。任务要求:
(1) 请从语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖五个覆盖标准中(条件组合覆盖难度较大,鼓励尝试,但请谨慎选择),任选一个标准设计测试用例 。(2) 请利用自动测试工具对程序进行测试 。
(3) 请下载《第二次作业.doc》模板将程序运行结果和自动测试分析结果截图保存到文档中,提交。 【题目内容】 使用C语言完成: 给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时定义子段和为0,依此定义,所求的最优值为: Max{0,a[i]+a[i+1]+…+a[j]},1<=i<=j<=n 例如,当(a[1],a[2],a[3],a[4],a[5],a[6])=(-2,11,-4,13,-5,-2)时,最大子段和为20。 【输入形式】 整数序列 【输出形式】 最大连续子数组和(最大子段和) 【测试用例1】 输入: -2 11 -4 13 -5 -2 输出: 20 【测试用例2】 输入: 6 -3 -2 7 -15 1 2 2 输出: 8 【测试用例3】 输入: -5 -3 -7 -10 -6 -8 -2 输出: 0
“优化后的代码”
#include<stdio.h> int main() { int num=0,sum=0,maxsum=0; while((scanf("%d",&num))!=EOF) { sum = sum + num; if(sum < 0) { sum = 0; } if(sum > maxsum) { maxsum = sum; } if(getchar()=='\n') break; } printf("%d",maxsum); return 0; }
单元测试
参考上一届学长文章:软件工程(2019)第二次作业 - 肖乃俊 - 博客园 (cnblogs.com)
软件为visual studio 2019,不会用visual studio 2010测试。。。
安装visual studio 2019参考文章visual studio2019的安装以及使用_江小举的博客-CSDN博客
为单元测试修改代码结构
#include<iostream> #include<stdio.h> #include<stdlib.h> using namespace std; int maxsum(int nums[], int n) { int i = 0, sum = 0, maxsum = 0; for (i = 0; i < n; i++) { sum = sum + nums[i]; if (sum < 0) { sum = 0; } if (sum > maxsum) { maxsum = sum; } } return maxsum; } int main() { int n = 0, num = 0; int nums[1000]; #pragma warning(suppress : 4996) while (scanf("%d", &num) != EOF) { nums[n] = num; n++; if (getchar() == '\n') { break; } } cout << maxsum(nums, n); system("pause"); return 0; }
测试代码
#include "pch.h" #include "CppUnitTest.h" #include "../test.h" using namespace Microsoft::VisualStudio::CppUnitTestFramework; namespace UnitTest1 { TEST_CLASS(UnitTest1) { public: TEST_METHOD(TestMethod1) { int a[6] = {-2,11,-4,13,-5,-2}, b[8] = {6,-3,-2,7,-15,1,2,2}, c[7] = {-5,-3,-7,-10,-6,-8,-2}; Assert::AreEqual(maxsum(a,6),20); Assert::AreEqual(maxsum(b,8),8); Assert::AreEqual(maxsum(c,7),0); } }; }
测试>>运行所有测试