結對編程項目-四則運算
什么是結對編程?
引用《構建之法》-4.5.2
在結對編程模式下,一對程序員肩並肩地、平等地、互補地進行開發工作。兩個程序員並排坐在一台電腦前,面對同一個顯示器,使用同一個鍵盤,同一個鼠標一起工作。他們一起分析,一起設計,一起寫測試用例,一起編碼,一起單元測試,一起集成測試,一起寫文檔等。
結對編程不是程序開發者獨到的發明,在現實生活中,也存在着類似的搭檔關系(Partnership):
- 越野賽車(駕駛,領航員)
- 駕駛飛機(駕駛,副駕駛)
- 戰斗機的編組(長機,僚機)
...
結對編程中有兩個角色:
- 駕駛員(Driver)是控制鍵盤輸入的人。
- 領航員(Navigator)起到領航、提醒的作用。
這兩個角色是可以互換的。和現實生活中的例子類似,一個人負責具體的執行(駕駛,用鍵盤編輯程序等),另一人負責導航、檢查、掩護等。
詳見:鄒老師博客
准備
花5分鍾選擇自己的結對小伙伴。
需求
實現一個命令行程序,要求:
- 自動生成小學四則運算題目(加、減、乘、除)
- 支持整數
- 支持多運算符(比如生成包含100個運算符的題目)
- 支持真分數
- 統計正確率
例如以下的運行示例:
請輸入要生成的題目數:<輸入6>
題目1:
3 + 4 = <輸入7>
正確!
題目2:
5 ÷ 8 = <輸入5/6>
錯誤,正確答案為:5/8
題目3:
2/3 - 1/5 = <輸入7/15>
正確!
題目4:
1/6 * 3/7 = <輸入3/42>
正確!
題目5:
10 - 5 * 4 = <輸入20>
錯誤,正確答案為:-20
題目6:
(1/3 + 1/2) * 11/20 = <輸入55/120>
錯誤,正確答案為:11/24
完成6道題目,正確率為50%
HINTS:
如何對表達式求值,請參考:
- 逆波蘭表示法
- 調度場算法
擴展需求
-
文件:
- 處理生成題目並輸出到文件
- 完成題目后從文件讀入並判題
-
多語言支持:
簡體中文
,繁體中文
,English
-
生成題目去重
引用自:http://www.cnblogs.com/jiel/p/4810756.html程序一次運行生成的題目不能重復,即任何兩道題目不能通過有限次交換+和×左右的算術表達式變換為同一道題目。例如,23 + 45 = 和45 + 23 = 是重復的題目,6 × 8 = 和8 × 6 = 也是重復的題目。3+(2+1)和1+2+3這兩個題目是重復的,由於+是左結合的,1+2+3等價於(1+2)+3,也就是3+(1+2),也就是3+(2+1)。但是1+2+3和3+2+1是不重復的兩道題,因為1+2+3等價於(1+2)+3,而3+2+1等價於(3+2)+1,它們之間不能通過有限次交換變成同一個題目。
更多參考
http://www.cnblogs.com/xinz/p/3803035.html
要求
-
第一周(2017-5-14 23:59截止)輸出階段總結博客
- 需求分析
- 設計思路
- 整數/多運算符(題目生成/題目運算判題)
- JUnit測試
- 擴展需求
-
第二周(2017-5-21 23:59截止)輸出整體總結博客
- 設計思路
- 真分數(題目生成/題目運算判題)
- JUnit測試
- 擴展需求
-
如第一周完成比較輕松,可繼續完成第二周內容,不必等
-
博客(兩周都需要輸出以下完整內容)
- 結對編程的兩位同學須各自發表博客
- 博客需描述各環節的輸出,如:
- 需求分析(描述自己對需求的理解,以及后續擴展的可能性)
- 設計思路(同時輸出UML類圖)
- 實現過程中的關鍵代碼解釋
- 測試方法
- 運行過程截圖
- 代碼托管地址
- 遇到的困難及解決方法
- 對結對的小伙伴做出評價(重點指出需要改進的地方)
- 博客內容中如需展示兩人的共同成果,請進行說明
- 如有參考或引用的設計、實現,請進行說明
-
PSP
-
實現之前先在PSP中預估時間
-
實施后各個環節實際花費多少時間也請做記錄
-
表中有一項: Estimate 指的“預估”這個活動,“預估時間”也是一項任務。
- 例如:我估計自己需要花30分鍾來估算出整個項目需要多少時間完成,結果我花了20分鍾估算出整個項目需要6個小時完成。Estimate這一項應該在“預估耗時”填寫30分鍾,實際耗時填寫“20”分鍾。
-
一級和二級活動的包含關系:
- Planning 這個一級活動包含了1個二級活動(Estimate)
- Development 這個一級活動包含了8個二級活動
- Reporting 這個一級活動包含了3個二級活動
-
大家在記錄時間的時候, 只用記錄二級活動, 然后把總數加了, 就是相應的一級活動的時間
-
這個時間的長短並不會對分數有直接影響,這是為了大家自己總結。
-
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 | · 事后總結, 並提出過程改進計划 | ||
合計 |
打分細則
-
本次作業滿分100分
-
不按時交作業,0分
-
越期一周不交作業,倒扣本次作業分數
-
作業檢查項:
- 正確生成題目 10分
- 正確判題 10分
- 真分數支持 10分
- 正確率統計 5分
- 測試 10分
- 擴展需求
- 生成題目並輸出到文件 5分
- 完成題目后讀入文件判題 5分
- 支持多語言 5分
- 支持生成題目去重 5分
- 博客
- 基礎分(按時提交)5分
- PSP表格 5分
- 需求分析 5分
- 設計思路 5分
- 實現過程中的關鍵代碼解釋 5分
- 遇到的困難及解決方法 5分
- 對結對小伙伴做出評價 5分
-
附加分:在作業過程及時反饋,提供建議被采納可追加附加分,最高不超過10分
-
嚴禁抄襲,違反者列入抄襲作業者的曝光台
參考建議
以下只是作為參考的建議,不是要求,同學們可以提出自己的想法和設計,體現在自己的博客中
-
大概功能划分
- 題目生成
- 可獨立使用
- 考慮可擴展支持配置生成不同難度的題目,比如通過參數指定:
- 運算符個數范圍
- 運算符限定(小學一年級題目只生成
+
-
題目)
- 題目合法性判斷
- 可獨立使用
- 可用於測試生成題目的正確性
- 可用於以下輸入的合法性檢測
- 題目運算(判題)
- 可獨立使用
- 轉換為后綴表達式(當然你也可以直接計算中綴表達式)
- 題目去重
- 可獨立使用
- 考慮支持不同的去重級別,比如:
- Level 0:字符串相同算重復 --
1 + 2
,2 + 1
算不同題目 - Level 1:滿足交換律算重復 --
1 + 2
,2 + 1
算相同題目 - Level ...
- Level n: 參考以上 擴展需求
- Level 0:字符串相同算重復 --
- 題目生成
-
測試
- 題目生成測試
- 最直接的就是人肉看輸出是否合法
- 效率低
- 容易出錯
- 題目合法性判定程序
- 自動化
- 如何測試自己的判定程序是准確無誤的?
- 最直接的就是人肉看輸出是否合法
- 題目運算測試
-
正確性測試
- 手動准備題目
- 利用題目生成程序
- 利用第三方運算工具做運算結果對比,比如Linux
bc
-
錯誤處理測試, 比如輸入以下非法表達式,能否正常工作:
"2394809+sdk*fsdjsakldf-"
"+2 3 4 ***"
""
- ...
-
- 壓力測試
- 生成100個、1000個運算符題目
- 運算100個、1000個運算符題目
- 生成100萬道題目需要多長時間
- 運算100萬道題目需要多長時間
- 題目生成測試