結對編程項目-四則運算


結對編程項目-四則運算

什么是結對編程?

引用《構建之法》-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: 參考以上 擴展需求
  • 測試

    • 題目生成測試
      • 最直接的就是人肉看輸出是否合法
        • 效率低
        • 容易出錯
      • 題目合法性判定程序
        • 自動化
        • 如何測試自己的判定程序是准確無誤的?
    • 題目運算測試
      • 正確性測試

        • 手動准備題目
        • 利用題目生成程序
        • 利用第三方運算工具做運算結果對比,比如Linux bc
      • 錯誤處理測試, 比如輸入以下非法表達式,能否正常工作:

        • "2394809+sdk*fsdjsakldf-"
        • "+2 3 4 ***"
        • ""
        • ...
    • 壓力測試
      • 生成100個、1000個運算符題目
      • 運算100個、1000個運算符題目
      • 生成100萬道題目需要多長時間
      • 運算100萬道題目需要多長時間


免責聲明!

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



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