一、測試驅動開發與極限編程核心價值的關系
極限編程思想有其自身的核心價值,它們是:交流、簡單、反饋、勇氣。測試驅動開發作為極限編程中的基本開發原則,也充分體現了這種新型開發思想的價值。
(1)交流在軟件開發過程中的作用是毋庸置疑的,交流可以最大程度的減少開發人員、客戶、管理人員之間由于溝通不暢造成的誤解。極限編程的很多實踐都是必須依靠交流來實現的,缺少交流是不能夠進行下去的,比如單元測試、結對編程、工作的評估等。測試驅動開發與這些方法密不可分,只有進行結對編程等方法進行的測試驅動開發才是有意義的。這種情況下,同樣需要大量的交流,可見交流原則的重要性。
(2)簡單這一價值在極限編程的思想中有著很重要的體現,整個極限編程的過程中都體現著簡單二字,設計簡單、代碼簡單,只要能簡單行事,決不復雜辦理。只要符合現在的要求,可以工作,那么簡單解決就是最佳的方法。與其實現一個復雜的系統,不如設計一個簡單的能滿足當前需要的系統,因為你永遠考慮不到下一個需求是什么。測試驅動開發正是如此。測試用例的編寫本著簡單的原則,在符合設計的要求下進行編寫,越簡單越好。只需要注重眼前的需求,不要考慮以后的需要變化,F階段的設計滿足現階段的需求即可,顯然現階段的測試也只需滿足現階段的需要即可。測試用例的編寫是根據設計而定的,而且可以說,測試用例的編寫也是設計的一部分,簡單的原則同樣在起著指導作用。所以代碼的編寫亦是根據此原則,算法實現越簡單越好,百分之百通過測試即可。
(3)反饋是一項寶貴的資源。在極限編程中,無論是設計、測試、開發過程中,反饋都是非常重要的信息。例如在設計時,盡快獲得用戶的反饋,并且越詳細越好,使得開發人員能夠保證自己的成果符合用戶的需要。測試亦是如此。測試驅動開發便是貫徹了這一價值。先進行測試用例的編寫,利用沒有通過測試的錯誤信息反饋,了解到代碼沒有通過測試用例的原因,根據該信息了解到出錯的地方,再根據出現的問題有針對性的逐步地修改代碼,讓其漸漸符合測試用例的要求,在運行數次測試用例后,最終讓其反饋回百分之百通過的成功信息。
(4)勇氣,這是最重要的核心價值。因為XP強調要\"擁抱變化\",因此對于用戶的反饋,要勇于對自己的代碼進行修改,丟掉壞的代碼。該條價值反映了開發人員應有的心態,而測試驅動開發正是進一步鼓勵開發人員,而且在實踐方便提供了很好的機制。先寫測試后寫代碼的過程正是這一機制的體現。面對測試用例運行時報出的錯誤反饋要勇于面對。例如在xUnit測試框架的使用中就要于面對測試時出現的Red Bar,錯誤信息并不可怕,這正是測試驅動開發的意義所在。針對錯誤信息來編寫及修改代碼,勇于面對,最終解決問題順利通過測試,顯示出所期望的Green Bar。勇氣又可以進一步的增強信心,提高效率,使得整個過程良性循環發展。
二、測試驅動開發與極限編程中設計的關系
極限編程中提出的設計思想與傳統軟件工程的大相徑庭,它摒棄了傳統方法中對設計近乎苛求的原則,弱化了全面細致的設計。在極限編程中,不要求對需求做出非常詳細的設計,而是遵循簡單的原則,對現有的需求做出簡單的設計。不需要為以后考慮,因為你永遠不知道將來會增加哪些需求。Martin Fowler提出所謂的設計是要能夠讓你可以長期很簡單地修改軟件。
極限編程看似對設計的簡化,削弱了開發的依據。但其實它的思想卻是進一步明確了軟件開發的時候應該更注重眼前的問題,全力去考慮當前的需求,滿足客戶當前的需要,而不要為以后的需要費時費力,只有這樣,才能使做出的軟件符合客戶的需求。測試驅動開發在實現設計方面有著很大的優勢。測試驅動開發的特點之一就是先寫測試再寫代碼。而此時,測試用例編寫的意義就非同一般了。一方面,測試用例有著測試代碼的通用作用,開發人員在代碼編寫完成后對其正確性進行判斷。另一方面,在極限編程中,設計是一個持續的過程, 測試用例在一定程度是也是需求文檔的一種體現。對測試用例的編寫其實也就是一個對需求進行分析設計的過程。這一點是極限編程和測試驅動開發獨特的一點。測試用例的編寫其實就是針對單元的輸入輸出的判斷,對輸入輸出的設計就是對系統需求分析的過程,不能簡單的隨便設計,而是最好利用真實的系統數據進行設定。測試用例的編寫完成后,代碼才開始編寫,這里的一切目的只為通過測試,而意義卻是為了百分之百地滿足系統的需求。測試的編寫不再是一件令開發人員痛苦的事情,而是一件為了解系統需求而進行的設計過程,這種轉變可以說對軟件開發有著極大的積極的影響,這也是測試驅動開發的精髓所在。
將設計融入開發,在開發中完善設計,兩者相輔相成的關系在極限編程中體現的充分徹底。也就是這個原因,才使得測試驅動開發這一新思想迅速推廣開來。
三、測試驅動開發與極限編程中人的關系
極限編程的思想是以人為本的思想,它不同于CMM等重量級的開發方法,完全是從工程的角度來進行系統的開發,人在其中完全成為了條條框框下的忠實執行者。極限編程從人性方面考慮的更多,比如每周四十小時工作時,結對編程等。測試驅動開發也體現出了這一原則。
人類的活動具有高度的目的性,建立適當的目標具有重要的心理作用。例如在測試過程中,體現出的現象更是如此。如果我們的主要目的是為了證明程序里面沒有錯誤,那潛意識里就會不自覺地朝這個方向去做,所以在編寫測試的過程中,我們就會選擇一些盡量使程序不出錯的測試數據;但是,如果我們的目標是要證明程序中有錯,那就會選擇一些易于發現程序所含錯誤的測試數據。而后一種態度會比前者給程序增添更多的價值。傳統測試的定義意味著程序測試的過程是具有破壞性的,其程度甚至達到了不可容忍的地步。
測試驅動開發一改以往的那種破壞性的思想,從人性的角度出發,測試在先,編碼在后。而不是像傳統的編碼完成后再進行破壞性的測試。這樣一來,我們的編碼就有很明確的目的,每一條代碼的目的就是為了能通過測試。從以前的破壞性的方法轉移到一種建設性的方法中來。如何來滿足這些測試,有了明確的目標,開發人員可以以一種正常人的心態去解決眼前出面的問題,編寫高質量的代碼去通過這些測試。在這種積極心態的影響下,開發人員的工作效率會有很大的提高,與此同時,這種建設性的方法對整個團隊的開發也起著很重要的作用。
文章來源于領測軟件測試網 http://www.kjueaiud.com/