《測試驅動開發》之介紹

來源:互聯網
上載者:User

標籤:

  本書為《Test-Driven Development By Example》by Kent Beck[America].由人民出版社出版,孫方注釋。

  以下為學藝不精的我綜合英文原文和注釋對這本書的翻譯。小部分參考了孫平平等人的譯本。

  介紹

  早在星期五,老闆到Ward這兒向他介紹一個WyCash的潛在客戶,Peter。WyCash是公司正在銷售的債券組合管理系統。Peter說,”我對我看到的功能印象深很刻。不管怎麼說,我注意到你只辦理美元計價的債券。我正在創辦一種新的債券,我的戰略需要辦理不同貨幣的債券。“老闆轉身向Ward,“好,我們能做到嗎?” 

  這對任何軟體設計者都是噩夢般的情境。你正在快樂成功地遊弋在一組假設裡。突然,一切都變了。這不僅是Ward的噩夢。在指導軟體開發有豐富經驗的老闆也不確定答案會是什麼。

  一個小團隊已經開發WyCash超過一兩年的時間了。這個系統能處理大多數美國市場上常見的固定收益證券的品種,和一些外來的新工具,比如投資擔保合約,其他競爭產品是不能處理的。

  WyCash一直使用對象和對象資料庫進行開發。在開始的時候,計算的功能抽象,美元,是外包給一隊聰明的軟體工程師的。他們產生的對象合并了格式化和計算。

  在過去六個月裡,Ward和該團隊的其他成員已經慢慢剝離美元的職責。Smalltalk的數值類原來在計算方面很不錯。所有的棘手代碼四捨五入至三個十進位數字獲得了生產精確答案的方式。隨著答案變得更加精確,在測試架構中,預期結果和實際結果的精確匹配取代了一定容差範圍內的複雜的比較機制。

  資訊格式化的操作實際上屬於使用者介面類。因為測試是寫在使用者介面類層面的,尤其是報告架構,所以這些測試不需要修改來適應這些改動。經過六個月認真的削減,Dollar類所負責的操作已經不剩什麼了。

  加權平均,一個在這個系統中最複雜的演算法,同樣經曆了一個緩慢的轉變。有段時間內,很多不同種類的加權平均代碼分散在系統裡。就像報告架構是從最初的對象裡合并而來一樣,加權平均演算法也會有一個容納它的地方,這個地方就是AveragedColumn。

  AveragedColumn現在就是Ward要著手的地方。如果加權平均能支援多種貨幣,那系統其他部分應該也可以。這個演算法的核心是保持一定數量的錢在相應欄裡。事實上,這個演算法已經足夠抽象來計算任何能用算術表示的對象的加權平均數。舉個例子來說,一個可以計算日期的加權平均。

  周末像往常一樣過去了。星期一早上老闆回來了,“我們能做嗎?”

  “再給我一天時間,我會告訴你確切的答案。”

  美元的作用就像加權平均裡的一個計數器。因此,為了多幣種計算,他們需要一個有每種貨幣計數器的對象,就像多項式。只不過條目可能是15 USD和200CHF,而不是3x^2和4y^3。

  一個快速實驗表明,用一種通用貨幣對象代替美元計算,當兩種不同的貨幣相加時返回一個PolyCurrent對象是有可能。現在的問題是給新的功能騰出空間而不改變現有功能。如果Ward運行這些測試會發生什麼呢?

  在為Currency類添加一些未實現的操作後,大部分測試通過了。在這天結束的時候,所有的測試都通過了。Ward上傳代碼到系統建立,然後去老闆那兒“我們能做到。”,他自信地說。

  讓我們來思考下這個故事。在兩天內,這個潛在的市場乘以數倍,乘以WyCash數倍的價值。這種如此快速地創造出如此大的商業價值的能力不是偶然的。很多方面發揮了作用。

  1、方法——Ward和WyCash團隊需要有一定的經驗,知道如何持續地進行系統設計。因此轉變的機制能夠很好地實踐。

  2、動機——Ward和他的團隊需要清楚地知道建設WyCash多幣種的商業重要性,同時有勇氣開始如此一個看起來不可能的任務。

  3、機遇——周全而金髮信心的測試、構造良好的程式、可以隔離設計決策的程式設計語言使得只有少數錯誤來源且錯誤容易更正。

  你不能控制你曾經是否有這個動機,通過施展技術法寶來增值你的項目。方法和機遇,另一方面,是完全在你控制下的。Ward和他的團隊通過組合超級天賦、經曆、紀律創造了方法和機遇。這是不是意味著加入你不是這個世界上十個最好的軟體工程師之一,在銀行也沒有一打錢,因此你告訴你的老闆你要加薪,然後你花時間把這個做好,像這樣永遠的時刻就屬於你呢?

  不是。你完全可以把項目放在發揮你才能的位置,儘管你是一個技術普通的軟體工程師,你在有壓力的時候會亂成一團,偷工減料。測試驅動開發是一套任何軟體工程師能夠領會且鼓勵採用簡單設計和增強信心的測試套件的技術。如果你是一個天才,你不需要這些規則。如果你是一個白癡,這些規則不會有協助。對於介於中間的絕大多數的我們,遵循這兩條原則能使我們工作得更加接近我們的潛力。

  1、在你寫任何代碼之前,先寫一個失敗的自動化測試。

  2、重複資料刪除。

  究竟如何做到這一點,細微層次的應用這些規則,並且你可以推進這兩個簡單的規則到什麼程度是這本書的主題。我們將從Ward在他靈感一現的那一刻所建立的對象——多種貨幣資金。

《測試驅動開發》之介紹

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.