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