2017-2018-2 165X 『Java程序設計』課程
結對編程練習_四則運算
經過第一階段的學習,同學們已經熟悉了這門語言基本的用法。在一次又一次對着電腦編寫並提交代碼,進行練習的時候,有沒有覺得孤單又無趣?這次我們來體驗一種新的開發模式——結對編程,讓你和小伙伴一起分析,一起思考,一起測試,一起完善,在思維的碰撞中體驗結對編程的魅力!
————————CONTENTS————————
1.題目描述
鄒欣老師在《現代軟件工程講義 3 結對編程和兩人合作》一文中提到:
在結對編程模式下,一對程序員肩並肩地、平等地、互補地進行開發工作。兩個程序員並排坐在一台電腦前,面對同一個顯示器,使用同一個鍵盤,同一個鼠標一起工作。他們一起分析,一起設計,一起寫測試用例,一起編碼,一起單元測試,一起集成測試,一起寫文檔等。
生活中也有很多類似的搭檔關系,例如:
- 越野賽車(駕駛,領航員)
- 駕駛飛機(駕駛,副駕駛)
- 戰斗機的編組(長機,僚機)
我們把結對編程中兩位合作者的關系看作駕駛員和領航員,其中:
- 駕駛員(Driver)是控制鍵盤輸入的人
- 領航員(Navigator)起到領航、提醒的作用
在本次結對編程中,即需要兩位合作者之間建立駕駛員和領航員的關系。
具體題目要求參見:『結對編程項目-四則運算』
如何對表達式進行求值運算呢?我們先來一個簡單的入門。
一、中綴表達式與后綴表達式
中綴表達式就是運算符號在運算數中間的表達式,比如1+2,顧名思義,后綴表達式就是運算符在運算數后面的表達式,比如1 2 +。為什么要講后綴表達式呢?因為電腦運算后綴表達式會比中綴表達式方便很多。那么如何運算后綴表達式呢?
舉個例子:計算9+(3-1)*3+6/2,轉換為后綴表達式即為9 3 1 - 3 * + 6 2 / +(怎么轉換后面再講)。計算規則就是建立一個空棧,遇到數字就入棧,遇到符號就以符號前面的兩個數為運算數進行計算。
二、中綴表達式轉換為后綴表達式
法則:
- 如果遇到數字,我們就直接將其輸出。
- 如果遇到非數字時,若棧為空或者該符號為左括號或者棧頂元素為括號,直接入棧。
- 如果遇到一個右括號,持續出棧並輸出符號,直到棧頂元素為左括號,然后將左括號出棧(注意,左括號只出棧,不輸出),右括號不入棧。
- 如果遇到運算符號且棧非空,查看棧頂元素,如果棧頂元素的運算優先級大於或者等於該運算符號,則持續出棧,直到棧頂元素優先級小於該運算符。最后將該元素入棧。
- 如果我們讀到了輸入的末尾,則將棧中所有元素依次彈出。
有了以上的了解,大家可以嘗試自己做一個“計算器”啦~
(更多參考:婁老師的博客2016-2017-2 《Java 程序設計》課堂實踐項目——數據結構應用)
2.測試說明
婁老師在《Intellj IDEA 簡易教程——單元測試》部分提到:
如果別人用自己的代碼發現一堆Bugs,那多沒面子!怎么辦?寫了產品代碼,我們還要寫測試代碼,證明自己的代碼沒有問題。Java編程時,程序員對類實現的測試叫單元測試。這里我們設計了一個測試用例(Test Case),測試用例是為某個特殊目標而編制的一組測試輸入、執行條件以及預期結果,以便測試某個程序路徑或核實是否滿足某個特定需求。
產品代碼主要進行三個方面的測試:
- 正常測試
- 異常測試
- 邊界測試
與之有異曲同工之妙的一種標准是:『Right-BICEP法則』
其中 Right 指程序的正確性,BICEP 每個字母代指一個測試的方面。具體來說:
- Right: 傳入程序單元期待的參數、數據,是否能夠得到正確的結果。
- Boundary Conditions: 程序單元是否能夠正確處理所有的邊界條件。
- Inverse relationships: 反向測試。
- Cross-check: 交叉測試。
- Error-condition: 異常情況。
- Performance: 性能。
對於本次四則運算的結對編程項目,需從以下幾方面考慮進行測試:
- Right: 按照設計者意圖輸入參數時,程序能夠正確輸出結果。
- B: 在程序受到極端參數時,程序能夠正確進行響應。
- E: 有同學選擇將出題結果寫入一個文件。如果此時硬盤滿了,文件寫不進去了,怎么辦?
- P: 出題速度應該足夠快。測試生成100、1000、10000甚至更多道題目所需的時間。
以下為一些基本的測試用例,可供參考:
- 2 + 5 = 7
- 4 - 9 = -5
- 3 ÷ 7 = 3/7
- 2 ÷ 6 = 1/3
- 5 * (1 + 3) = 20
- 2/3 - 1/5 = 7/15
- 5/6 - 2/3 = 1/6
- 2/5 - 3/20 = 1/4
- 13 - 2 * 5 = 3
- (2/3 + 1/2) * 6/7 = 1
- (5 - 2) * (4 + 1) = 15
(更多參考:鄒欣老師的博客《軟件工程練習:模塊化,單元測試,回歸測試,TDD》)
3.提交要求
一、代碼提交
- 將源代碼提交至自己的碼雲項目中。
- 如何使用Git進行團隊合作?參考《使用GitHub進行團隊合作》
【注意】
- Git提交粒度不要太粗,建議一個文件/一個類/一個函數/一個功能/一個bug修復都進行提交,不能一天提交一次,更不能一周一次,參考Commit Message的編寫
- Git提交日志需保證有意義,如果整個項目持續使用無意義的提交日志,這里會是一個扣分項,如之前作業中的:
- weekxxx
- Pxxx代碼
- 純數字類名:1.2
- 日期:0409
- 只寫文件名
- ......
二、博客規范
- 小組的兩位同學都需要提交各自的博客,最終將視博客的質量給出各自的博客部分分數。
- 博客中需附:
- 碼雲鏈接
- 需求分析
- 設計思路
- UML類圖
- 功能截圖
- 結對感受
- 結對編程的照片
- ......
- 更多博客規范,參見:結對編程項目-四則運算
三、截止時間
本項目持續兩周時間,從發布作業當天開始計算
- 第一周:階段性總結
- 第二周:整體總結
附:參考資料
- 本次作業要求
- 結對編程
- 實現過程
- 單元測試
- 其他