软工五:四则运算
題目要求
本次作業要求兩個人合作完成,駕駛員和導航員角色自定,鼓勵大家在工作期間角色隨時互換,這里會布置兩個題目,請各組成員根據自己的愛好任選一題。
題目一:
我們在剛開始上課的時候介紹過一個小學四則運算自動生成程序的例子,請實現它,要求:
(1)能夠自動生成四則運算練習題
(2)可以定制題目數量
(3)用戶可以選擇運算符
(4)用戶設置最大數(如十以內、百以內等)
(5)用戶選擇是否有括號、是否有小數
(6)用戶選擇輸出方式(如輸出到文件、打印機等)
(7)最好能提供圖形用戶界面(根據自己能力選做,以完成上述功能為主)
題目二:
現有一新建辦公大廈,共有21層,共有四部電梯,所有電梯基本參數如下表所示,其使用規定如下:
(1)樓層號為0~20,其中0號為地下一層
(2)有樓層限制的電梯不在相應樓層停靠,如單雙層
(3)所有電梯采用統一按鈕控制
(4)請根據上述要求設計并實現一個電梯控制程序,如果有圖形顯示就更好了。
這次組隊作業我和我的隊友選擇的是題目一:小學四則運算自動生成。我擔任的角色是導航員,隊友徐善澤是駕駛員
具體過程
我們使用的軟件是eclipse,語言是java,在實現功能的過程中,可以實現隨機生成帶小數的四則運算,可以設置生成題目數等功能。
具體代碼請點這里
部分代碼:
不帶小數的乘法運算:
帶小數的除法運算:
測試成功:
代碼審查表
java代碼審查檢查表
| 重要性 | 激活 | 級別 | 檢查項 |
| 總計 | |||
| 命名 | |||
| 重要 | Y | 20 | 命名規則是否與所采用的規范保持一致? |
| Y | 20 | 是否遵循了最小長度最多信息原則? | |
| 重要 | N | 50 | has/can/is前綴的函數是否返回布爾型? |
| 注釋 | |||
| 重要 | Y | 10 | 注釋是否較清晰且必要? |
| 重要 | Y | 10 | 復雜的分支流程是否已經被注釋? |
| N | 10 | 距離較遠的}是否已經被注釋? | |
| N | 10 | 非通用變量是否全部被注釋? | |
| 重要 | Y | 50 | 函數是否已經有文檔注釋?(功能、輸入、返回及其他可選) |
| Y | 10 | 特殊用法是否被注釋? | |
| 聲明、空白、縮進 | |||
| Y | 20 | 每行是否只聲明了一個變量?(特別是那些可能出錯的類型) | |
| 重要 | Y | 40 | 變量是否已經在定義的同時初始化? |
| 重要 | Y | 40 | 類屬性是否都執行了初始化? |
| N | 20 | 代碼段落是否被合適地以空行分隔? | |
| Y | 20 | 是否合理地使用了空格使程序更清晰? | |
| Y | 20 | 代碼行長度是否在要求之內? | |
| Y | 20 | 折行是否恰當? | |
| 語句/功能分布/規模 | |||
| Y | 20 | 包含復合語句的{}是否成對出現并符合規范? | |
| Y | 20 | 是否給單個的循環、條件語句也加了{}? | |
| Y | 20 | if/if-else/if-else if-else/do-while/switch-case語句的格式是否符合規范? | |
| Y | 40 | 單個變量是否只做單個用途? | |
| 重要 | Y | 20 | 單行是否只有單個功能?(不要使用;進行多行合并) |
| 重要 | Y | 40 | 單個函數是否執行了單個功能并與其命名相符? |
| Y | 20 | 操作符++和— —操作符的應用是否復合規范? | |
| 規模 | |||
| 重要 | Y | 20 | 單個函數不超過規定行數? |
| 重要 | Y | 100 | 縮進層數是否不超過規定? |
| 重要 | N | 100 | 是否已經消除了所有警告? |
| 重要 | Y | 40 | 常數變量是否聲明為final? |
| 重要 | Y | 80 | 對象使用前是否進行了檢查? |
| 重要 | N | 80 | 局部對象變量使用后是否被復位為NULL? |
| 重要 | N | 70 | 對數組的訪問是否是安全的?(合法的index取值為[0, MAX_SIZE-1])。 |
| 重要 | Y | 20 | 是否確認沒有同名變量局部重復定義問題? |
| Y | 20 | 程序中是否只使用了簡單的表達式? | |
| 重要 | Y | 20 | 是否已經用()使操作符優先級明確化? |
| 重要 | Y | 20 | 所有判斷是否都使用了(常量==變量)的形式? |
| Y | 80 | 是否消除了流程懸掛? | |
| 重要 | N | 80 | 是否每個if-else if-else語句都有最后一個else以確保處理了全集? |
| 重要 | N | 80 | 是否每個switch-case語句都有最后一個default以確保處理了全集? |
| N | 80 | for循環是否都使用了包含下限不包含上限的形式?(k=0; k<MAX) | |
| 重要 | Y | 40 | XML標記書寫是否完整,字符串的拼寫是否正確? |
| N | 40 | 對于流操作代碼的異常捕獲是否有finally操作以關閉流對象? | |
| N | 20 | 退出代碼段時是否對臨時對象做了釋放處理? | |
| 重要 | N | 40 | 對浮點數值的相等判斷是否是恰當的?(嚴禁使用==直接判斷) |
| 可靠性(函數) | |||
| 重要 | Y | 60 | 入口對象是否都被進行了判斷不為空? |
| 重要 | Y | 60 | 入口數據的合法范圍是否都被進行了判斷?(尤其是數組) |
| 重要 | Y | 20 | 是否對有異常拋出的方法都執行了try...catch保護? |
| 重要 | Y | 80 | 是否函數的所有分支都有返回值? |
| 重要 | Y | 50 | int的返回值是否合理?(負值為失敗,非負值成功) |
| N | 20 | 對于反復進行了int返回值判斷是否定義了函數來處理? | |
| N | 60 | 關鍵代碼是否做了捕獲異常處理? | |
| 重要 | N | 60 | 是否確保函數返回CORBA對象的任何一個屬性都不能為null? |
| 重要 | N | 60 | 是否對方法返回值對象做了null檢查,該返回值定義時是否被初始化? |
| 重要 | N | 60 | 是否對同步對象的遍歷訪問做了代碼同步? |
| 重要 | N | 80 | 是否確認在對Map對象使用迭代遍歷過程中沒有做增減元素操作? |
| 重要 | N | 60 | 線程處理函數循環內部是否有異常捕獲處理,防止線程拋出異常而退出? |
| N | 20 | 原子操作代碼異常中斷,使用的相關外部變量是否恢復先前狀態? | |
| 重要 | Y | 100 | 函數對錯誤的處理是恰當的? |
| 可維護性 | |||
| 重要 | N | 100 | 實現代碼中是否消除了直接常量?(用于計數起點的簡單常數例外) |
| Y | 20 | 是否消除了導致結構模糊的連續賦值?(如a= (b=d+c )) | |
| N | 20 | 是否每個return前都要有日志記錄? | |
| N | 20 | 是否有冗余判斷語句?(如:if (b) return true; else return false;) | |
| N | 20 | 是否把方法中的重復代碼抽象成私有函數? |
總結和評價
這次作業我非常感謝我的隊友徐善澤,他作為駕駛員完成了大部分的代碼量,實現了小學四則運算程序的生成,這次程序可以實現帶小數的加減乘除算法,可以自由選擇題目數目,可以判斷答案對錯,若答案錯誤可以給出正確答案以及正確率等功能,遺憾的是并沒有實現讓用戶選擇實現輸出方式以及圖形界面的功能。在二人合作的過程中,我對隊友的代碼風格更加了解,也一起找到了一些錯誤,改正以后,程序更加完整,實現的功能也逐漸增加,雖然有部分功能還未實現,但我們會繼續努力的。
能明顯地感覺得到這次作業比以前的作業難度要大,原因就是我們的代碼能力還是比較弱的,代碼量不夠。每次的軟件工程作業我都能發現自己很多的缺點,每次也都能通過作業意識到原來自己所掌握的東西還是遠遠不夠的,因此在完成作業的過程中,總能學到很多接觸到很多以前不會的東西,也對eclipse的使用更加熟練,對JAVA這門不是很熟悉的語言也更加了解,這是很開心的一件事。相對于枯燥的理論學習,實踐更能激發我的學習興趣,動手能力得到了大大的進步,至此,結對編程已經結束,期待下次的團隊作業。
最后,工作照:
轉載于:https://www.cnblogs.com/chenlu7/p/8846622.html
總結
- 上一篇: 信用卡逾期不还会怎么样?会被判刑吗?
- 下一篇: PKUSC2018训练日程(4.18~5