實驗二 軟件工程個人項目
實驗時間(師范):2021-3-18
實驗時間(卓越工程師班):2021-3-19
Deadline:2020-3-31 10:00,以博客發表日期為准
評分標准:按時交 ,滿分100分,代碼50分,博客50分。檢查項目包括:
- 未提交項目源碼到Github上,代碼部分不得分;未提交博客到班級博客上,博客部分不得分;
- 根據項目完成質量累計加分,完成基本功能原則上不超過滿分100分,完成軟件的附加功能,給予加分
- 代碼提交(有代碼規范說明,否則倒扣分)
- 博文規范(行文清晰流暢,如果行文中涉及代碼,請使用博客園代碼控件,或使用MarkDown語法塊)
- 抄襲 - 倒扣本次作業分數
1、實驗目的與要求
(1)掌握軟件項目個人開發流程。
(2)掌握Github發布軟件項目的操作方法。
2、實驗內容和步驟
任務1:閱讀教師博客“常用源代碼管理工具與開發工具”內容要求,點評班級博客中已提交相關至少3份作業。
任務2:詳細閱讀《構建之法》第1章、第2章,掌握PSP流程,
任務3:項目開發背景:背包問題(Knapsack Problem,KP)是NP Complete問題,也是一個經典的組合優化問題,有着廣泛而重要的應用背景。{0-1}背包問題({0-1 }Knapsack Problem,{0-1}KP)是最基本的KP問題形式,它的一般描述為:從若干具有價值系數與重量系數的物品(或項)中,選擇若干個裝入一個具有載重限制的背包,如何選擇才能使裝入物品的重量系數之和在不超過背包載重前提下價值系數之和達到最大?
D{0-1} KP 是經典{ 0-1}背包問題的一個拓展形式,用以對實際商業活動中折扣銷售、捆綁銷售等現象進行最優化求解,達到獲利最大化。D{0-1}KP數據集由一組項集組成,每個項集有3項物品可供背包裝入選擇,其中第三項價值是前兩項之和,第三項的重量小於其他兩項之和,算法求解過程中,如果選擇了某個項集,則需要確定選擇項集的哪個物品,每個項集的三個項中至多有一個可以被選擇裝入背包,D{0-1} KP問題要求計算在不超過背包載重量 的條件下,從給定的一組項集中選擇滿足要求裝入背包的項,使得裝入背包所有項的價值系數之和達到最大;D{0-1}KP instances數據集是研究D{0-1}背包問題時,用於評測和觀察設計算法性能的標准數據集;動態規划算法、回溯算法是求解D{0-1}背包問題的經典算法。查閱相關資料,設計一個采用動態規划算法、回溯算法求解D{0-1}背包問題的程序,程序基本功能要求如下:
1.可正確讀入實驗數據文件的有效D{0-1}KP數據;
2.能夠繪制任意一組D{0-1}KP數據以重量為橫軸、價值為縱軸的數據散點圖;
3. 能夠對一組D{0-1}KP數據按項集第三項的價值:重量比進行非遞增排序;
4.用戶能夠自主選擇動態規划算法、回溯算法求解指定D{0-1} KP數據的最優解和求解時間(以秒為單位);
5.任意一組D{0-1} KP數據的最優解、求解時間和解向量可保存為txt文件或導出EXCEL文件。
任務4:完成任務3的程序開發,將項目源碼的完整工程文件提交到你注冊Github賬號的項目倉庫中。(50分)
開發須知:
- 項目必須包含src文件夾;
- 為了同行輕松閱讀你的項目代碼,請參照《碼出高效_阿里巴巴Java開發手冊》/《騰訊c++代碼規范》,從以下幾個方面制定你的編程規范,並在此次作業中嚴格執行:
縮進
變量命名
每行最多字符數
函數最大行數
函數、類命名
常量
空行規則
注釋規則
操作符前后空格
其他規則
代碼部分評分細則:
- 項目代碼規范說明(5分)
- 項目代碼符合代碼規范(10分)
- github使用 :commit 多於10次、使用release、issues、pr等操作(10分)
- 程序功能評測 25分
任務4:完成個人項目報告博文作業(50分,以下給出評分細目)
博文作業格式符合以下要求:
博文名稱:學號-姓名 實驗二 個人項目—《西北師范大學學生疫情上報系統》項目報告(1分)
博文開頭格式:(1分)
項目 |
內容 |
課程班級博客鏈接 |
<填寫課程班級博客鏈接> |
這個作業要求鏈接 |
<填寫作業要求鏈接> |
我的課程學習目標 |
<填寫目標> |
這個作業在哪些方面幫助我實現學習目標 |
<填寫相關內容> |
項目Github的倉庫鏈接地址 |
<填寫地址> |
博文正文
任務1的作業點評鏈接(3分)
作為任務3的項目實施過程文字資料,請完整包含下面7個部分:
1. 需求分析,即使老師已經給出了題目,也要對題目的需求做分析。(5分)
2. 功能設計,獲得題目需求后,要對項目做功能設計,但題目需求是項目的基本功能要求,自己思考和調研會有超出題目要求的需求,甚至你的奇思妙想會設計出特色的功能。因此,功能會有:
- 基本功能(5分)
- 擴展功能(若代碼實現,附加10分)
3. 設計實現,設計包括你會有哪些類,這些類分別負責什么功能,他們之間的關系怎樣?你會設計哪些重要的函數,關鍵的函數是否需要畫出流程圖?函數之間的邏輯關系如何?(10分)
4. 測試運行,你的項目必須是可運行的,請展示項目代碼的運行截圖,包括題目要求實現功能對應的運行截圖。這些截圖說明你確實完成了項目需求,如果實現了擴展需求,也請大方秀出來。(5分)
5. 粘貼自己覺得比較獨特的或滿意的代碼片段,用博客園的代碼控件來顯示。(提示:要有必要的注釋說明,提示:不要貼所有代碼!不符合規定的要倒扣分)(5分)
6. 總結:你設計的程序如何實現軟件設計的“模塊化”原則。(5分)
7. 展示PSP,這個環節重要的是讓自己看到自己的估計和實際消耗時間,哪個環節耗時最多,哪個環節估計和實踐相差巨大?為什么?(5分)
PSP參考:http://www.cnblogs.com/xinz/archive/2011/10/22/2220872.html
PSP2.1 |
任務內容 |
計划共完成需要的時間(min) |
實際完成需要的時間(min) |
Planning |
計划 |
8 |
6 |
· Estimate |
· 估計這個任務需要多少時間,並規划大致工作步驟 |
8 |
6 |
Development |
開發 |
82 |
88 |
·· Analysis |
需求分析 (包括學習新技術) |
6 |
10 |
· Design Spec |
· 生成設計文檔 |
5 |
6 |
· Design Review |
· 設計復審 (和同事審核設計文檔) |
4 |
6 |
· Coding Standard |
代碼規范 (為目前的開發制定合適的規范) |
3 |
3 |
· Design |
具體設計 |
10 |
12 |
· Coding |
具體編碼 |
36 |
21 |
· Code Review |
· 代碼復審 |
7 |
9 |
· Test |
· 測試(自我測試,修改代碼,提交修改) |
13 |
21 |
Reporting |
報告 |
9 |
6 |
·· Test Report |
· 測試報告 |
3 |
2 |
· Size Measurement |
計算工作量 |
2 |
1 |
· Postmortem & Process Improvement Plan |
· 事后總結 ,並提出過程改進計划 |
3 |
3 |
如果所有的環節你都認真做了,那么,此處你應該會有很多經驗願意與大家分享。(5分)