计算与软件工程 作业三

这个作业要求在哪里 https://edu.cnblogs.com/campus/jssf/infor_computation17-31/homework/10454
我在这个课程的目标是 提高编程能力,掌握单元测试
此作业在那个具体方面帮我实现目标 要求参考《构建之法》设计单元测试,运行单元测试
其他参考文献 https://blog.csdn.net/WKalpa/article/details/88883314
https://www.cnblogs.com/njzy123456/p/9755642.html
https://www.jianshu.com/p/388b02c126fd
作业正文 https://www.cnblogs.com/tang-yuan-yuan/p/12433514.html

单元测试

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

设计单元测试,运行单元测试
•开始:所有单元测试都失败
•改进程序,加入正确的逻辑,看到有单元测试通过,并且看到代码覆盖率的增加
•重复, 直到所有单元测试都通过,代码覆盖率达到满意的结果。




单元测试的代码没有编译成功,查了很多资料还是没有解决
码云链接:https://gitee.com/tang_yuan-yuan/git-tang/tree/master/作业二

博客作业

过去两年半我们学习许多门课,大一开始学习计算机应用软件(MS Office)(后来考了二级证书)和C++语言编程。大二学习了Java语言,会做一些简单的图形界面,还学习了数据结构课程,了解了计算机数据的基本知识。大三学习了数据库,操作系统,ASP,MATLAB科学计算等课程会做出简单的页面,但深觉我们学的都是皮毛,经验仍很浅薄。
今后学习中还是希望能熟练掌握C++及Java。

预习

代码规范和代码复审

1.我们讲的“代码规范”可以分成两个部分。

(1)代码风格规范。主要是文字上的规定,看似表面文章,实际上非常重要。

(2)代码设计规范。牵涉到程序设计、模块之间的关系、设计模式等方方面面,这里有不少与具体程序设计语言息息相关的内容(如C/C++/Java/C#),但是也有通用的原则,这里主要讨论通用的原则。
2.复审的目的在于:

(1)找出代码的错误。如:

a. 编码错误,比如一些能碰巧骗过编译器的错误。

b. 不符合项目组的代码规范的地方。

(2)发现逻辑错误,程序可以编译通过,但是代码的逻辑是错的。

(3)发现算法错误,比如使用的算法不够优化。

(4)发现潜在的错误和回归性错误——当前的修改导致以前修复的缺陷又重新出现。

(5)发现可能改进的地方。

(6)教育(互相教育)开发人员,传授经验,让更多的成员熟悉项目各部分的代码,同时熟悉和应用领域相关的实际知识。

结对编程

1.结对编程中有两个角色:

(a)驾驶员(Driver)是控制键盘输入的人。

(b)领航员(Navigator)起到领航、提醒的作用。
2.结对编程有如下的好处:

(1)在开发层次,结对编程能提供更好的设计质量和代码质量,两人合作能有更强的解决问题的能力。

(2)对开发人员自身来说,结对工作能带来更多的信心,高质量的产出能带来更高的满足感。

(3)在心理上, 当有另一个人在你身边和你紧密配合, 做同样一件事情的时候, 你不好意思开小差, 也不好意思糊弄。

(4)在企业管理层次上,结对能更有效地交流,相互学习和传递经验,能更好地处理人员流动。因为一个人的知识已经被其他人共享。
3.如何结对编程?

(1)驾驶员:写设计文档,进行编码和单元测试等XP开发流程。

(2)领航员:审阅驾驶员的文档、驾驶员对编码等开发流程的执行;考虑单元测试的覆盖程度;是否需要和如何重构;帮助驾驶员解决具体的技术问题。

(3)驾驶员和领航员不断轮换角色,不宜连续工作超过一小时。领航员要控制时间。

(4)主动参与。任何一个任务都首先是两个人的责任,也是所有人的责任。没有“我的代码”、“你的代码”或“她的代码”,只有“我们的代码”。

(5)只有水平上的差距,没有级别上的差异。尽管可能大家的级别资历不同,但不管在分析、设计或编码上,双方都拥有平等的决策权利。
不适合结对编程的情况——

代码

maxsubarray.cpp
#include <iostream>
#include <cstdio>
using namespace std;
//枚举法,分别计算子数组和,比较大小
int maxsum(int a[], int n, int &start, int &end)
{
	int max = 0;
	start = 0;
	end = 0;
	for (int i = 0; i < n; i++) {
		for (int j = i; j < n; j++) {
			// [i,j]数组
			int sum = 0;
			for (int t = i; t <= j; t++) {
				sum += a[t];
			}
			if (sum > max) {
				max = sum;
				start = i;
				end = j;
			}
		}
	}
	return max;

}
int main()
{
	int max = 0;
	int start = 0;
	int end = 0;
	int n, i = 0;
	cout << "请输入数组个数:";
	cin >> n;
	cout << "请输入数组:";
	int a[100000] = { 0 };
	for (i = 0; i < n; i++)
	{
		cin >> a[i];
	}
	max = maxsum(a, n, start, end);
	cout << "最大子数组的和为:" << max << endl;
	cout << "起始下标为:" << start << endl;
	cout << "结束下标为:" << end << endl;
	system("pause");
}
UnitTest1.cpp
#include "pch.h"
#include "CppUnitTest.h"
#include "F:/大学/VS2017程序/maxsubarray/maxsubarray/maxsubarray.h"

using namespace Microsoft::VisualStudio::CppUnitTestFramework;

namespace UnitTest1
{
	TEST_CLASS(UnitTest1)
	{
	public:


		TEST_METHOD(TestMethod1)
		{
			int a[] = { -1,2,-1,4 };
			int start = 0;
			int end = 0;
			Assert::AreEqual(5,1,3, maxsum(a, 17, start, end));
		}
	};
}
posted @ 2020-03-11 19:40  汤圆元  阅读(147)  评论(9编辑  收藏  举报