淺談結對程式設計

來源:互聯網
上載者:User

標籤:

結對程式設計の優缺點
【剛剛結束結對程式設計之初體驗,來此彙報一下,順便領雞腿。】


所謂結對程式設計,簡單來說就是兩個程式猿坐在一台電腦前面,一個手扶鍵盤手指飛速移動,一個沉思狀在一旁默默盯著電腦螢幕不時還稍微吐槽幾句。就像下面這張圖片這樣

那麼問題來了。碼字的不想被不幹活的指點,吐槽的又看不慣對方的做法,這種情形在初期尤其明顯。因此,結對程式設計的缺點在前期表現的非常明顯,如:

由代碼規範之類的小問題激化出較大矛盾。

編碼過程中出現意外的交流話題,導致跑題。

兩猿都希望自己按照自己的想法做,於是產生矛盾,合作分裂,項目不能完成(,得不到工資,進入惡性迴圈)。

一個鍵盤直接導致碼字效率減半,開發時間變長。

某猿可以以沉思猿的身份濫竽充數,不執行領航猿的工作。

編碼過程中身後存在奇特生物監視,瘮的慌。特別當奇特生物具有較長時間的生存經驗時尤其嚴重。

......

這些問題或多或少會影響到開發效率。但是習慣這種開發方式、工程進行到後期時,會發現結對程式設計帶的優勢是非常大的:

最重要的一點是:代碼品質高了很多!!!一隻寫一隻看的模式杜絕了很多小錯誤的出現,而這些小錯誤常常是很難發現卻至關重要的(比如分數中比較大小的負數問題)。後期調試時間大大縮短。

呆馬品質提高,所有編碼規範都能被有效執行,尤其堅決杜絕Tab空格混用的情況。

兩隻程式猿可以在自己擅長的領域發揮強大的編碼能力,如一隻碼演算法,一隻碼介面。

遇到困難問題有兩個腦袋考慮,效率高。

於是經過了一段時間的結對程式設計,讓我來點評一下渣渣程式猿(我)和大神攻城獅(隊友)

渣渣:

  顧名思義,非常渣,於是鍛鍊出了靜下心來碼程式的技能。可以連續碼程式很久並屏蔽外界中斷和系統調用。

  顧名思義,非常渣,因此為了避免錯誤反而會注重代碼中的規範,會嚴格遵守。

  顧名思義,非常渣,於是經常學習各種東西,導致各種東西都聽過一點。

  顧名思義,非常渣,所以經常會犯很小的錯誤,而且不容易發現。

大神:

  顧名思義,非常神,各種高端演算法直接默寫。

  顧名思義,非常神,神速發現代碼中出現的各種Bug。

  顧名思義,非常神,讀代碼能力很強,渣渣的各種奇葩代碼一遍讀懂。

  顧名思義,非常神,神到不在意某些細節,如變數名的選擇、代碼規範的統一。

於是渣渣這次幸運的在大神的協助下完成了此次任務。

設計方法及實踐

Information Hiding:

  資訊隱藏,隱藏調用者不需要知道的資訊,並拒絕使用者訪問不應被直接存取的資訊。

  實現方法:所有類成員變數定義為private,操作類成員必須通過調用相應的方法。對類使用額外的介面層進行封裝,只能通過介面調用到類內部。本次實現中全部對象均只提供方法調用,不提供直接的存取權限,所有功能被封裝在一個大的介面下。

Interface design:

  介面設計,應盡量簡單、清晰,調用者很容易通過介面瞭解到相應的功能。

  實現方法:選取合適的命名,給合適的參數和參數名。在命名時應按照規範進行。

Loose coupling:

  松耦合,即減少模組與模組之間相互依賴的關係。當雙方中的一方改變時,另一方無需變動功能照常。

  實現方法:物件導向的思想就是松耦合的一個體現。對象封裝屬於自己的資料和操作方法,供外部調用的只有方法而沒有直接的資料。所有介面一旦定義好功能不再修改,每次修改代碼不能對輸入要求更嚴,但是可以更松,輸出應相同,產生的副作用可以更少但不能更多。本次程式功能模組與使用者介面實現松耦合,核心利用介面層接收使用者輸入的參數,傳入到相應的模組進行處理,返回處理結果。前端無需知道後端的實現方式。

單元測試

  對於本次程式,使用了單元測試以確認每個部分是否正確。如所示。其中每個測試針對功能中的一個模組,測試了不同分支路線的處理情況。

核心模組類別關係UML圖

BasicNum類實現了一些基礎資料型別 (Elementary Data Type)的進階運算功能。

Number類用於記錄算式中出現的數,提供了分數的多種方式建立、儲存、運算以及按格式輸出功能。

Formula類記錄多項式,內部的數為Number類對象,提供隨機產生功能,可以設定參數。

Program類為頂層介面類,將所有功能封裝為統一的介面模式。

在實現中使用了一些小的技巧。

對於數位儲存,無論輸入是分數或是小數,均使用了假分數的形式(小數化為分數),這樣在處理時可以統一。重載輸出方法,滿足各種格式的輸出需求。

算式的產生類比尾碼運算式的運算過程,括弧為邏輯添加而不是人工隨機添加。

隨機產生數字和算式均有參數控制,作為各自類的方法而存在。

對於極端參數,如過小的最大數值和過大的產生數量,程式判定為:連續產生50個均失敗即為參數不合法。此閾值可以根據效能需求方便修改。

 

淺談結對程式設計

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.