1.編碼要求
(1)Fork github 項目https://github.com/Cherish599/PairProgramming到自己的倉庫,在Github倉庫中新建一個以一位同學的學號為名的文件夾,用於建立C#的項目和第二次作業類似。(結對的兩人中任意一人的學號都可以)。
(2)在開始實現程序之前,在PSP表格[附錄1]記錄下你估計在程序開發各個步驟上耗費的時間,在你實現程序之后,在PSP表格記錄下你在程序的各個模塊上實際花費的時間。
(3)使用C#語言實現,C#請使用Visual Studio Community 2017進行開發。
- a) 制定編碼規范,可以參考C#語言的規范:簡版,討論版。(鄒欣老師在講義“現代軟件工程講義 3 代碼規范與代碼復審”中所討論的有關代碼規范與代碼復審的內容。內容短小精煉,適合快速入門。)
- b) 代碼自審並修正,每個人都獨立完成了自己的功能任務,對照編碼規范,審查修改自己的程序代碼並使其符合規范要求。
- c) 代碼互審,按照共同制定的編碼規范,審查合作伙伴的代碼並記錄發現的問題。
- d) 合並代碼,兩人協商,將兩部分代碼合並,形成初始版本。注意應設計合理的軟件結構及模塊划分。
- e) 使用Github[附錄2]來管理源代碼和測試用例,代碼有進展即簽入Github(至少三次)。簽入記錄不合理的項目會被助教抽查詢問項目細節。
- f) 使用單元測試[附錄3]對項目進行測試,並寫出測試用例確保你的程序能夠正確處理的各種情況。
- g) 在完成結對項目后,請按照預第二次作業的方式正確地發起一個Pull Request,並設置標題為本次統一使用的學號。
2.博客撰寫要求
(1)在文章開頭給出結對使用的Github項目地址和結對伙伴的作業地址。(兩個人使用同一個)注意:GitHub的地址必須是用於clone的地址即如下圖片中的地方獲取。(如果不是這個地址,助教就無法批量編譯運行你們的程序,出現問題的都會被助教抽中詢問詳情)

描述結對的過程,提供非擺拍的兩人在討論的結對照片(一起工作編碼時的照片)。
(3)給出結對的PSP表格。
- a) 解題思路描述。即剛開始拿到題目后,如何思考,如何找資料的過程。
- b) 設計實現過程。設計包括代碼如何組織,比如會有幾個類,幾個函數,他們之間關系如何,關鍵函數是否需要畫出流程圖?單元測試是怎么設計的?
- c) 給出你們制定的代碼規范或鏈接,記錄你們代碼互審的情況,審查的模塊名、發現的問題等。
- d) 代碼說明。展示出項目關鍵代碼,並解釋思路與注釋說明。
- e) 結合在構建之法中學習到的相關內容與結對項目的實踐經歷,撰寫解決項目的心路歷程與收獲,以及結對感受,是否1+1>2。
注:兩人都要提交博客,結對共同部分,可在其中一個人的博客給出(另一個人給出鏈接),不同部分分別寫在自己的博客中。
3.項目需求說明
實現一個WinForm隨機點名的程序或者骰子游戲
第一步、實現基本功能
- 1、winform界面設計
- 2、實現班級學生的隨機點名
第二步、接口封裝
- 1、體現類的設計
- 2、體現分層思想
第三步、增加新功能
- 1、學生數據的加載
- 2、進度條跟蹤
第四步、附加功能
- 1、小組的創新性功能設計
第五步、設計單元測試
- 請各位使用單元測試對項目進行測試。 並給出測試用例
4.評分細則
博客評分規則(總分100)
(1) 在文章開頭給出你們Fork倉庫的Github項目地址。(5')
(2) 在開始實現程序之前,在下述PSP表格記錄下你估計將在程序的各個模塊的開發上耗費的時間。(5')
(3) 計算模塊接口的設計與實現過程。 設計包括代碼如何組織,比如會有幾個類,幾個函數,他們之間關系如何,關鍵函數是否需要畫出流程圖?說明你的算法的關鍵(不必列出源代碼),以及獨到之處。並講講你的設計是如何體現“Design by Contract”、“Information Hiding”、 “Interface Design”、 “Loose Coupling”等原則的。(45)
(4) 代碼復審過程。代碼互審情況、發現的問題等。(15‘)
(5) 計算模塊部分單元測試展示。 展示出項目部分單元測試代碼,並說明測試的函數,構造測試數據的思路。並將單元測試得到的測試覆蓋率截圖,發表在博客中。(15')
(6) 描述結對的過程,提供非擺拍的兩人在討論的結對照片。(5')
(7) 在你實現完程序之后,在附錄提供的PSP表格記錄下你在程序的各個模塊上實際花費的時間。(5')
(8) 附加功能(5)
5、附錄
1、PSP表格
PSP是卡耐基梅隆大學(CMU)的專家們針對軟件工程師所提出的一套模型:Personal Software Process (PSP, 個人開發流程,或稱個體軟件過程)。
PSP2.1 | Personal Software Process Stages | 預估耗時(分鍾) | 實際耗時(分鍾) |
Planning | 計划 | ||
· Estimate | · 估計這個任務需要多少時間 | ||
Development | 開發 | ||
· Analysis | · 需求分析 (包括學習新技術) | ||
· Design Spec | · 生成設計文檔 | ||
· Design Review | · 設計復審 (和同事審核設計文檔) | ||
· Coding Standard | · 代碼規范 (為目前的開發制定合適的規范) | ||
· Design | · 具體設計 | ||
· Coding | · 具體編碼 | ||
· Code Review | · 代碼復審 | ||
· Test | · 測試(自我測試,修改代碼,提交修改) | ||
Reporting | 報告 | ||
· Test Report | · 測試報告 | ||
· Size Measurement | · 計算工作量 | ||
· Postmortem & Process Improvement Plan | · 事后總結, 並提出過程改進計划 | ||
合計 |
- 一個功能完備的程序不是一蹴而就的。通過將WinForm隨機點名的程序或者骰子游戲的需求划分為4個部分,可將一個大任務划分為可操作的小任務,同時最好按照任務難度或緊急程度指定各個任務的完成次序。因此,在動手開發之前,要先估計將在程序各模塊開發所需耗費的時間,以及完成整個項目所需的時間,將這個[估計值]記錄下來,寫成PSP 的形式。
- PSP的目的是:記錄工程師如何實現需求的效率,和我們使用項目管理工具(例如微軟的Project Professional,或者禪道等)進行項目進度規划類似。
- 有關PSP的更多內容,請自行閱讀鄒欣老師的博客:
http://www.cnblogs.com/xinz/archive/2011/10/22/2220872.html
2、 Github
請閱讀鄒欣老師的博客:源代碼管理,了解源代碼管理的10個實踐問題。
本次作業要求使用Github進行源代碼管理,代碼有進展即簽入Github。簽入記錄不合理的項目會被助教抽查詢問項目細節。
對代碼簽入的具體要求如下:根據需求划分功能后,每做完一個功能,編譯成功后,應至少commit一次。本例中,至少應區分基本功能和擴展功能,即分別針對基本功能、擴展功能,編譯成功后,總共至少應commit兩次。具體的功能划分,請自行定義,並在撰寫博客時體現出來,遵循自己對需求的功能划分來提交代碼即可。
對Commit不是很熟悉的話,請閱讀阮一峰的博客:Commit message 和 Change log 編寫指南,了解更多細節。
3、單元測試
請根據自己以往積累的測試經驗,在編碼完成之后,提交產品之前,設計測試用例,並編寫單元測試,對自己的項目進行測試。
首先,至少應采用白盒測試用例設計方法來設計測試用例,其他測試方法不限。其次,要設計至少10個測試用例,確保你的程序能夠正確處理各種情況。最后,結合測試評估的要求,對自己的測試設計進行評價,這些測試用例能滿足該程序測試的要求嗎?
另一個重要的措施是要把單元測試自動化,這樣每個人都能很容易地運行它,並且可以使單元測試每天都運行。每個人都可以隨時在自己的機器上運行。團隊一般是在每日構建中運行單元測試的,這樣每個單元測試的錯誤就能及時被發現並得到修改。
推薦閱讀鄒欣老師關於單元測試和回歸測試的博客:
http://www.cnblogs.com/xinz/archive/2011/11/20/2255830.html
6、提醒
(1)代碼不要出現抄襲或者直接拷貝的現象,一旦發現作業將沒有成績。(允許模仿,但一定要有自己的理解和改進)
(2)確保代碼能夠運行通過,代碼不能通過,則博客成績最多給60分。
(3)博客要體現出自己的思想,每個人遇到的問題和解決方法以及感獲得的感受都應是不一樣的,博客出現抄襲或者拷貝現象,一旦發現作業將沒有成績。