計算與軟件工程 作業三


這個作業要求在哪里 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));
		}
	};
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM