2017-2018-2 165X 『Java程序設計』課程 結對編程練習_四則運算


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提交粒度不要太粗,建議一個文件/一個類/一個函數/一個功能/一個bug修復都進行提交,不能一天提交一次,更不能一周一次,參考Commit Message的編寫
  • Git提交日志需保證有意義,如果整個項目持續使用無意義的提交日志,這里會是一個扣分項,如之前作業中的:
    • weekxxx
    • Pxxx代碼
    • 純數字類名:1.2
    • 日期:0409
    • 只寫文件名
    • ......

二、博客規范

  • 小組的兩位同學都需要提交各自的博客,最終將視博客的質量給出各自的博客部分分數。
  • 博客中需附:
    • 碼雲鏈接
    • 需求分析
    • 設計思路
    • UML類圖
    • 功能截圖
    • 結對感受
    • 結對編程的照片
    • ......
  • 更多博客規范,參見:結對編程項目-四則運算

三、截止時間

本項目持續兩周時間,從發布作業當天開始計算

  • 第一周:階段性總結
  • 第二周:整體總結

返回目錄


附:參考資料

返回目錄


免責聲明!

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



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