1. 程式人生 > 其它 >201971010131-李治江 實驗三 結對專案—《{0-1}KP 例項資料集演算法實驗平臺》專案報告

201971010131-李治江 實驗三 結對專案—《{0-1}KP 例項資料集演算法實驗平臺》專案報告

專案 內容
課程班級部落格連結 19卓越
作業要求連結 作業要求
課程學習目標 1.體驗軟體開發過程中的兩人合作,學會結對程式設計;2.掌握GitHub團隊開發軟體的方法。
該作業在哪些方面幫助我實現學習目標 1.熟悉了結對程式設計的過程;2.能夠熟練運用GitHub進行專案開發。
結對方學號-姓名 201971010135-孫得弘
結對方本次部落格作業連結 201971010135-孫得弘
本專案Github倉庫連結地址 倉庫

任務一:閱讀《現代軟體工程—構建之法》第3-4章內容,理解並掌握程式碼風格規範、程式碼設計規範、程式碼複審、結對程式設計概念

  • 程式碼規範
    專案 規範
    縮排 使用tab 作為縮排
    變數命名 (1)變數名必須以字母或者下劃線開頭;(2)不能中英混搭;
    每行最大字元 單行不超過256個
    常量 常量命名全部大寫,單詞間用下劃線隔開
    註釋 (1)行內註釋可使用//...形式;(2)函式前部註釋需使用/*內容/形式
    空行 (1)引入標頭檔案其間部分不允許空行;(2) 靜態變數/常量定義後跟一空行;(3)每個函式後跟一空行,除非是最後一個函式
  • 程式碼複審:看程式碼是否在程式碼規範的框架內正確地解決了問題。

任務2:兩兩自由結對,對結對方《實驗二 軟體工程個人專案》的專案成果進行評價

專案 內容
結對方部落格連結 201971010135-孫得弘
結對方GitHub倉庫連結 201971010135-孫得弘
  • 程式碼核查表
    • 概要部分
      概要
      程式碼符合需求和規格說明麼? 程式碼基本符合需求和規格說明
      程式碼設計是否考慮周全? 有周全的考慮
      程式碼可讀性如何? 程式碼可讀性較好
      程式碼容易維護麼? 程式碼易維護
      程式碼的每一行都執行並檢查過了嗎? 都執行並檢查過
    • 設計規範部分
      設計規範
      設計是否遵從已知的設計模式或專案中常用的模式? 程式碼遵從已知的設計模式或專案中常用的模式
      有沒有硬編碼或字串/數字等存在?
      程式碼有沒有依賴於某一平臺,是否會影響將來的移植? 程式碼不依賴於某一平臺,不影響移植
      開發者新寫的程式碼是否用已有的Library/SDK/Framework中的功能實現?
      在本專案中是否存在類似的功能可以通過呼叫而不用全部重新實現?
      有沒有無用的程式碼可以清除? 有無用的程式碼可以清除
    • 程式碼規範部分
      程式碼規範
      修改的部分符合程式碼標準和風格麼? 修改的部分符合程式碼標準和風格
    • 具體程式碼部分
      具體程式碼
      有沒有對錯誤進行處理?對於呼叫的外部函式,是否檢查了返回值或處理了異常? 對錯誤進行了處理,並檢查異常
      引數傳遞有無錯誤,字串的長度是位元組的長度還是字元的長度,是從0開始計數還是從1開始計數 傳遞引數並無錯誤,從0開始計數
      邊界條件是如何處理的?switch語句和default分支是如何處理的?迴圈有沒有可能出現死迴圈? 程式碼無死迴圈
      有沒有使用斷言來保證我們認為不變的條件真的得到滿足?
      對資源的利用,是在哪裡申請,在哪裡釋放的?有無可能存在資源洩露?有沒有優化的空間? 在記憶體中完成
      資料結構中有沒有用不到的元素? 沒有
    • 效能部分
      效能
      程式碼的效能如何?最壞的情況是怎麼樣的? 程式碼效能良好
      程式碼中,特別是迴圈中是否有明顯可優化的部分? 無明顯可優化的地方
      對於系統和網路的呼叫是否會超時?如何處理? 未出現超時現象
    • 可讀性部分
      可讀性
      程式碼可讀性如何?有沒有足夠的註釋? 程式碼可讀性良好,有註釋
    • 可測試性部分
      可測試性
      程式碼是否需要更新或建立新的單元測試? 不需要

任務三:採用兩人結對程式設計方式,設計開發一款{0-1}KP 例項資料集演算法實驗平臺

任務描述:

  • 揹包問題(Knapsack Problem,KP)是NP Complete問題,也是一個經典的組合優化問題,有著廣泛而重要的應用背景。{0-1}揹包問題({0-1 }Knapsack Problem,{0-1}KP)是最基本的KP問題形式,它的一般描述為:從若干具有價值係數與重量係數的物品(或項)中,選擇若干個裝入一個具有載重限制的揹包,如何選擇才能使裝入物品的重量係數之和在不超過揹包載重前提下價值係數之和達到最大?

功能分析

  • 可正確讀入實驗資料檔案的有效{0-1}KP資料;
  • 能夠繪製任意一組{0-1}KP資料以價值重量為橫軸、價值為縱軸的資料散點圖;
  • 能夠對一組{0-1}KP資料按重量比進行非遞增排序;
  • 使用者能夠自主選擇貪心演算法、動態規劃演算法、回溯演算法求解指定{0-1} KP資料的最優解和求解時間(以秒為單位);
  • 任意一組{0-1} KP資料的最優解、求解時間和解向量可儲存為txt檔案或匯出EXCEL檔案。

軟體設計

  • {0-1}KP 例項資料集需儲存在資料庫;
  • 平臺可動態嵌入任何一個有效的{0-1}KP 例項求解演算法,並儲存演算法實驗日誌資料;
  • 人機互動介面要求為GUI介面(WEB頁面、APP頁面都可);
  • 查閱資料,設計遺傳演算法求解{0-1}KP,並利用此演算法測試要求;

PSP

PSP2.1 任務內容 計劃共完成需要的時間(min) 實際完成需要的時間(min)
Planning 計劃 10 10
Estimate 估計這個任務需要多少時間,並規劃大致工作步驟 15 10
Development 開發 400 450
Analysis 需求分析 (包括學習新技術) 6 3
Design Spec 生成設計文件 10 8
Design Review 設計複審 (和同事稽核設計文件) 15 10
Coding Standard 程式碼規範 (為目前的開發制定合適的規範) 20 10
Design 具體設計 15 20
Coding 具體編碼 180 220
Code Review 程式碼複審 30 35
Test 測試(自我測試,修改程式碼,提交修改) 30 45
Reporting 報告 40 40
Test Report 測試報告 30 30
Size Measurement 計算工作量 25 15
Postmortem & Process Improvement Plan 事後總結 ,並提出過程改進計劃 30 20