計算軟件工程 作業三


這個作業要求在哪里 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. 開發者 有比較嚴格的規定和流程,用於關鍵的代碼,以及復審后不再更新的代碼。


免責聲明!

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



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