计算软件工程 作业三

这个作业要求在哪里 https://edu.cnblogs.com/campus/jssf/infor_computation17-31/homework/10454
我在这个课程的目标是 熟悉软件开发过程的步骤;实现简单的软件开发,对软件进行测试、维护和管理。
此作业在哪个具体方面帮我实现目标 本次作业是运用c++编写一个简单的求数组最大值,并进行测试。软件工程与单纯编写代码是不同的。
其他参考文献 参见 《构建之法》第二章单元测试的内容 以及 https://www.cnblogs.com/xinz/archive/2011/11/20/2255830.html https://www.cnblogs.com/SivilTaram/p/software_pretraining_cpp.html
作业正文 码云

单元测试

题目:数组中最大子数组的和。

具体要求

用类/函数来实现
需求:希望返回 3 种信息
最大子数组的和
最大子数组开始的下标
最大子数组结束的下标
从文本文件中读输入的数据,熟悉文件操作, 文件有两种数据
第一个数字:这次测试中有多少个数据, 数字后面是冒号。
后续数字: 每个数据的值,用逗号隔开
比如
文件内容:
17: -32, -10, 33, -23, 32, -12, 41, -12, 1, 3, 5, -98, 70, -21, 10, -9, 61
输出
sum = 71

实现这个类 (MSA)
可以用 C++, Java, C#,Python class 等
类开始是空的,返回都是简单的数值,例如 0.
测试包括测试文件读入与计算(测试过程通过程序新建一个文件,内容可以为上述数字,测试完后得删除文件)
设计单元测试,运行单元测试

求最大子数组代码如下

#include<iostream>
#include<cstdlib>
using namespace std;
bool m = false;
int MaxSum(int *a, int len, int start, int end){
	 if (a == NULL || len <= 0){
		 m = true;
		  return 0;
	 }
	 m = false;
	 start = 0;
	 end = 0;
	 if (1 == len)return a[0];
     int curSum = a[0];           //当前子数组和  
     int maxSum = curSum;         //子数组最大和 
     for (int i = 1; i < len; i++){
		 if (curSum > 0)curSum += a[i];
         else if(a[i] > curSum){ //确定子数组起始位置
			 start = i;
			 curSum = a[i];}   //即使数组全为负,也能得到最大值
	    if (curSum > maxSum){
			maxSum = curSum;
            end = i;
		}
	 }
	 return maxSum;
 }
int Start(int *a, int len, int start, int end){
	if (a == NULL || len <= 0){
		m = true;
		return 0;
	}  
	m = false;
	start = 0;
	end = 0;
	if (1 == len)return a[0];
	int curSum = a[0];           //当前子数组和 
	int maxSum = curSum;         //子数组最大和 
	for (int i = 1; i < len; i++){
		if (curSum > 0)curSum += a[i];
		else if(a[i] > curSum){    //确定子数组起始位置
            start = i;
            curSum = a[i];    //即使数组全为负,也能得到最大值
        } 
		if (curSum > maxSum){
			maxSum = curSum;
			end = i;
		}
	}
	return start;
}
int End(int *a, int len, int start, int end){
	if (a == NULL || len <= 0){
		m = true;
		return 0;
	}  
	m = false;
	start = 0;
	end = 0;
	if (1 == len)return a[0];
	int curSum = a[0];           //当前子数组和  
	int maxSum = curSum;         //子数组最大和 
	for (int i = 1; i < len; i++){
		if (curSum > 0) curSum += a[i];
		else if (a[i] > curSum){    //确定子数组起始位置
            start = i;
            curSum = a[i];    //即使数组全为负,也能得到最大值
        } 
		if (curSum > maxSum){
			maxSum = curSum;
			end = i;
		}
	}
	return end;
}
int main(){
	int maxsum,start,end;
	int a[]={-32,-10,33,-23,32,-12,41,-12,1,3,5,-98,70,-21,10,-9,61};
    maxsum=MaxSum(a,17,0,16);
    cout<<"最大的子数组和为:"<<maxsum<<endl;
    start=Start(a,17,0,16);
    cout<<"最大的子数组开始下标为:"<<start<<endl;
    end=End(a,17,0,16);
    cout<<"最大的子数组结束下标为:"<<end<<endl;
    system("pause");
    return 0;
}

单元测试:对软件设计的最小单元进行正确性检测的测试,将可能存在的错误在最小范围内发现解决。
单元测试目的:发现模块内部逻辑,语法,算法,功能等错误。

单元测试代码如下:

#include "1.1.h"
#include "pch.h"
#include "CppUnitTest.h"


using namespace Microsoft::VisualStudio::CppUnitTestFramework;

namespace UnitTest1
{
	TEST_CLASS(UnitTest1)
	{
	public:
		
		TEST_METHOD(TestMethod1)
		{
			// TODO: 在此输入测试代码
			int a[] = { -32,-10,33,-23,32,-12,41,-12,1,3,5,-98,70,-21,10,-9,61 };
			Assert::AreEqual(111, MaxSum(a, 17, 0, 16));
		}
		TEST_METHOD(TestMethod2)
		{
			// TODO: 在此输入测试代码
			int a[] = { -32,-10,33,-23,32,-12,41,-12,1,3,5,-98,70,-21,10,-9,61 };
			Assert::AreEqual(12, Start(a, 17, 0, 16));
		}
		TEST_METHOD(TestMethod3)
		{
			// TODO: 在此输入测试代码
			int a[] = { -32,-10,33,-23,32,-12,41,-12,1,3,5,-98,70,-21,10,-9,61 };
			Assert::AreEqual(16, End(a, 17, 0, 16));
		}
	};
}


博客作业

前两年在老师的带领下学习了C++,Java,asp.net(c#),MATLAB,MS Office,数据库mysql。大一学习了基本的MS Office的知识,后来在考计算机二级时又再次加深额巩固基本的Excel和Word等的操作以及一些基础的计算机方面的综合知识。学习的第一门语言是C++,能够编写一些小型的简单程序,大二的时候基于C++学习了数据结构,代码的结构和认知仅有加深。第二门语言的学习是Java,了解到Java的一些简单语法,定义等,大致了解到其与C++在内存分配、函数、运行方式等方面不同。数值分析、数学建模等课程使用到MATLAB,用于计算数学,。关于数据库能构建表格并且简单与asp.net前端操作相结合。
目前所掌握的语言中,掌握的相对熟悉一点的是C++,目前最大的编写行数是400行,其他的编写熟练度不是很高,代码相对简单。目前只是能编写一些C++的代码,但离一个完整的软件等差距较大,所需了解、掌握、操作练习的还有很多,如果以现在的能力如果加入计算机行业,将会被饿死。接下来一年将在老师的带领下,继续加强C++的大规模编写并与团队合作,以及本专业的特色:MATLAB的学习。

预习

两人合作:
. 代码规范

 . 代码风格规范。主要是文字上的规定,看似表面文章,实际上非常重要。
 .代码设计规范。牵涉到程序设计、模块之间的关系、设计模式等方方面面,这里有不少与具体程序设计语言息息相关的内容(如C/C++/Java/C#),但是也有通用的原则,这里主要讨论通用的原则。

. 代码审复

名 称 形 式 目 的
自我复审 自己 vs. 自己 用同伴复审的标准来要求自己。不一定最有效,因为开发者对自己总是过于自信。如果能持之以恒,则对个人有很大好处
同伴复审 复审者 vs. 开发者 简便易行
团队复审 团队 vs. 开发者 有比较严格的规定和流程,用于关键的代码,以及复审后不再更新的代码。
posted @ 2020-03-11 17:04  一老年人  阅读(312)  评论(10编辑  收藏  举报