測試驅動的開發是重要的

測試驅動的開發是重要的<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

       不知道各位有沒有注意到這樣一個變化,那就是現在大家都在談論XPeXtreme Programming)極限編程,但談論終究還是談論,目前真正在項目中實施XP模式開發的團隊還佔少數(國內)。我很慶幸我所在的團隊是一個如此讓我充滿激情的團隊,它讓我們有機會用自己的行動去揭開極限編程的面紗。(無可否認,對於XP來說我們是純粹的新手,實施XP開發得這些日子裏,我們有時步履維艱,有時也想過放棄而採用傳統的開發模式(那樣似乎更合理),不過還好我們夠有勇氣(courage,我們不停的交流(communication)、交流、交流)

 

       “簡單設計、小迭代開發、配對編程以及XP的精華(交流、簡單、反饋、勇氣)”這些我自認爲如果採用XP至少可以達到形似(呵呵,如果你說這種是披着XP的外衣,我也不反對,因爲對於新的——尤其的好的事物,我們首先要“形似”,然後再求 “神似”),但是其中的“先測試後編碼”我始終是XP模式中的重頭戲(個人意見:))。

 

XP中強調測試驅動的開發(目前國內的書店可以找到XP的“鼻祖”之一 Kent Beck編寫的《Test-Driven Development:By Example》影印版,你同樣可以在我的站點http://plateau.sicool.com中找到該書的電子版,僅供學習使用),它強調具體的一個流程爲:

red/green/refactor”,如果你在XP中沒有實施測試驅動的開發,那XP對你至少已經60%是一件漂亮的外衣了。

 

       我之所以強調在XP中“測試在先”的重要性,是因爲起初我跟你一樣:可以對測試馬上給出一個非常明確的認識——“那是項目後期的工作,當然也可以在項目中間階段就開始測試,但是至少不是在還沒有一句代碼的時候,絕對不是!”。然而事實上我碰壁了,而且非常的痛。知道麼?在第一個小迭代,我們根本不能把測試用起來,面對我們(XP強調代碼共有)的代碼(通過配對編程,目前的代碼至少是整潔的、規範的),我沒有絲毫的自信,就是說我不能說保證它總是能運行的,更別提重構(refactor)了。

 

       在傳統的開發模式中,重構要需要怎樣的“小心”你根本無法想象!,然而爲什麼XP開發員卻能夠像“玩耍”一樣對代碼進行重構、重構再重構?因爲他們(XP開發員)能通過各種各樣的測試對自己的代碼(重構以後的代碼)有足夠的理由自信它們是能運行的,這種自信是發自內心的,它讓你更加熱愛測試(love test)熱愛重構(love refactor)、更加熱愛這項運動(love this game!:))。

 

       目前我們的項目中採用Struts+Hibernate開發,其中牽涉到的測試框架有:

       1StrutsTestCase
         
用於模擬struts環境來測試action.(它真的很有意思,特別對於熟悉struts的開發員來說)。

          下面是strutstestcase.sourceforge.net上一段對它的描述:

                  StrutsTestCase for JUnit is an extension of the standard JUnit     TestCase class that provides facilities for testing code based on the Struts framework. StrutsTestCase provides both a Mock Object approach and a Cactus approach to actually run the Struts ActionServlet, allowing you to test your Struts code with or without a running servlet engine. Because StrutsTestCase uses the ActionServlet controller to test your code, you can test not only the implementation of your Action objects, but also your mappings, form beans, and forwards declarations. And because StrutsTestCase already provides validation methods, it's quick and easy to write unit test cases

       2Cactus

用於測試servlet filter等等

以下是cactushttp://jakarta.apache.org/cactus/)官方發佈文檔中對其的說明:

Cactus is a simple test framework for unit testing server-side java code (Servlets, EJBs, Tag Libs, Filters, ...).

The intent of Cactus is to lower the cost of writing tests for server-side code. It uses JUnit and extends it.

Cactus implements an in-container strategy (See How it works).

 

      3HttpUnit

          用於jsps的測試。

       4JunitErich GammaKent Beck開發的測試框架)上邊所提到的三種框架都是基於Junit的測試框架。

 

       本文雖然重點在說測試,但是對於“test first,code later”並沒有說明怎樣才能更好的實施以及對於上邊提及的測試框架也沒有更深入的闡述,如果你對於測試驅動的開發非常關注,或者你現在正在被此類的問題困擾,我建議你能讀讀大師Kent Beck的那本不是很厚的書籍(本文前部分有說明),下一段時間我會根據項目中的使用情況,對於上述測試框架進行整理並給出實例化的文檔。

 

    摘自隱隱約約出現平常人誕生的故鄉[http://plateau.sicool.com]

 

       Jplateau 2003115日星期三 寫於廣州

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章