每日一得

          不求多得,只求一得 about java,hibernate,spring,design,database,Ror,ruby,快速開(kāi)發(fā)
          最近關(guān)心的內(nèi)容:SSH,seam,flex,敏捷,TDD
          本站的官方站點(diǎn)是:顛覆軟件

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            220 隨筆 :: 9 文章 :: 421 評(píng)論 :: 0 Trackbacks
          key words: 真正的測(cè)試先行開(kāi)發(fā) 測(cè)試驅(qū)動(dòng) Fitnesse


          摘要
          本文描述了如何使用開(kāi)源的FitNesse來(lái)實(shí)現(xiàn)真正的測(cè)試先行開(kāi)發(fā)過(guò)程,并讓客戶、需求提報(bào)工程師、開(kāi)發(fā)人員、以及測(cè)試人員進(jìn)行協(xié)同工作,達(dá)到需求更精準(zhǔn)、減少需求更改、測(cè)試數(shù)據(jù)與Junit單元測(cè)試代碼分離的目的,讓這一切更簡(jiǎn)潔、更易于維護(hù)。
          作者:Stephan Wiesner
          譯者:陳海青(joson)

          在過(guò)去的幾年里,我在開(kāi)發(fā)測(cè)試工作中擔(dān)任過(guò)各種角色,使用過(guò)服務(wù)器端的JavaScript,Perl,PHP,Struts,Swing以及模型驅(qū)動(dòng)架構(gòu)等各類技術(shù)。盡管項(xiàng)目不同,但是他們有一些共同點(diǎn):項(xiàng)目結(jié)束的時(shí)間越晚,就越難以達(dá)到客戶的真正需求。
          每個(gè)項(xiàng)目都有一些需求,有的非常詳細(xì),有的卻只有幾頁(yè)紙,這些需求一般要經(jīng)歷以下三個(gè)階段:
          ---由客戶或者承包人來(lái)書(shū)寫(xiě)或采納一些官方的驗(yàn)收標(biāo)準(zhǔn)
          ---測(cè)試者試圖根據(jù)需求來(lái)找出軟件中不符合要求的地方
          ---項(xiàng)目開(kāi)發(fā)完畢進(jìn)入驗(yàn)收測(cè)試, 可是客戶突然又提出對(duì)軟件需求進(jìn)行補(bǔ)充或變更的要求

          最后一個(gè)階段將導(dǎo)致項(xiàng)目發(fā)生變化,開(kāi)發(fā)期甚至要超出最后期限,使開(kāi)發(fā)人員的工作壓力劇增,從而導(dǎo)致發(fā)生更多的錯(cuò)誤。Bug的數(shù)量將快速增長(zhǎng),系統(tǒng)的質(zhì)量將下降。聽(tīng)上去是不是很熟悉?

          現(xiàn) 在讓我們看一下在上述的項(xiàng)目開(kāi)發(fā)中發(fā)生了哪些錯(cuò)誤:客戶、開(kāi)發(fā)、測(cè)試人員沒(méi)能協(xié)同工作;需求已經(jīng)確認(rèn)通過(guò),但是在不同位置的人可能還用不同的需要未考慮。 另外,開(kāi)發(fā)者一般會(huì)寫(xiě)一些自動(dòng)測(cè)試代碼,測(cè)試人員也試圖進(jìn)行自動(dòng)化測(cè)試,但是他們往往不能充分協(xié)同,許多項(xiàng)目被重復(fù)測(cè)試,但另一些(經(jīng)常是更困難的部分) 卻沒(méi)能被測(cè)試,客戶也沒(méi)參與到測(cè)試工作中。本文所介紹的就是通過(guò)自動(dòng)測(cè)試與項(xiàng)目需求相結(jié)合的方式來(lái)解決這些問(wèn)題的一種方案。

          版權(quán)聲明:任何獲得Matrix授權(quán)的網(wǎng)站,轉(zhuǎn)載時(shí)請(qǐng)務(wù)必保留以下作者信息和鏈接
          作者:Stephan Wiesner ;joson(作者的blog:http://blog.matrix.org.cn/page/joson)
          原文:http://www.javaworld.com/javaworld/jw-02-2006/jw-0220-fitnesse.html
          Matrix:http://www.matrix.org.cn/resource/article/44/44507_FitNesse.html
          關(guān)鍵字:FitNesse;Test

          開(kāi)始FitNesse

          FitNesse 是一個(gè)增加了可觸發(fā)Junit 測(cè)試等附加功能的wiki程序。如果這些測(cè)試能夠與業(yè)務(wù)需求結(jié)合起來(lái),就會(huì)使業(yè)務(wù)需求更加清晰。而且,測(cè)試數(shù)據(jù)的組織更有邏輯性。使用FitNesse更 重要的是學(xué)習(xí)隱含在其中的一些思想,某些部分需求可以作為測(cè)試的一部分,這意味著,這些需求是可以測(cè)試的,或者說(shuō)是可以進(jìn)行校驗(yàn)的。

          利用 FitNesse,開(kāi)發(fā)的工作過(guò)程可以這樣描述:需求工程師使用FitNesse書(shū)寫(xiě)業(yè)務(wù)需求(取代了一般文檔)。他試圖盡可能讓客戶參與其中,當(dāng)然這并 不是每天都能做到的。而測(cè)試者在反復(fù)研究這些文檔,并從第一天起就開(kāi)始提問(wèn)各種問(wèn)題,因?yàn)樗麄兛紤]問(wèn)題的方式不同,不是在考慮“軟件應(yīng)該實(shí)現(xiàn)些什么”?而 是在考慮“怎樣才能讓軟件出錯(cuò)?如何讓軟件中斷運(yùn)行?”等。開(kāi)發(fā)者更象一個(gè)需求工程師,他更想知道“軟件必須要完成它的功能是什么”?

          測(cè)試人員可以更早地開(kāi)始測(cè)試,甚至在需求沒(méi)有全部完成前,而且可以把測(cè)試寫(xiě)進(jìn)業(yè)務(wù)需求中,這些測(cè)試不僅僅成為需求的一部分,而且也將成為需求評(píng)審和驗(yàn)收的重要過(guò)程,并具有以下幾方面的重要優(yōu)點(diǎn):

          ---客戶也會(huì)被吸引來(lái)開(kāi)始考慮關(guān)于測(cè)試的事情,通常他們還會(huì)參與到建立測(cè)試的工作中來(lái)(你也許會(huì)吃驚,他們?cè)趺磳?duì)這些這么感興趣了。)
          ---相關(guān)規(guī)范將更詳細(xì)、更周密,因?yàn)闇y(cè)試總比單純的文字要準(zhǔn)確.
          ---通過(guò)這種方式,可以更清晰明確地了解軟件(象一個(gè)軟件原形,但是功能更多),因此可以更早地考慮真實(shí)的運(yùn)行場(chǎng)景,提供測(cè)試數(shù)據(jù)和測(cè)算結(jié)果。

          最后,需求將提交給開(kāi)發(fā)人員,他的工作要比以前要更容易些,因?yàn)樾枨蠖几綆Ь唧w的實(shí)例,因而更貼近實(shí)際需求,因此減少了被突然改變的機(jī)會(huì)。下面,就讓我們看一下這個(gè)過(guò)程是如何使開(kāi)發(fā)者工作更輕松的吧。

          測(cè)試先行的實(shí)現(xiàn)

          通 常情況下,測(cè)試先行開(kāi)發(fā)中最困難的是沒(méi)人愿意花費(fèi)那么多的時(shí)間來(lái)寫(xiě)測(cè)試,而更愿意去考慮如何讓軟件工作起來(lái)。按照上述的過(guò)程,開(kāi)發(fā)者把功能測(cè)試看作合同的 一部分,他的任務(wù)要從“按要求編程,檢測(cè)并修改”轉(zhuǎn)變?yōu)椤白寽y(cè)試運(yùn)行起來(lái)”。現(xiàn)在,在確定應(yīng)該做什么,何時(shí)完成,項(xiàng)目的定位等方面,我們有了更好的方法。

          并非所有的測(cè)試都可以自動(dòng)進(jìn)行,并非所有的部分都可進(jìn)行單元測(cè)試。我們通常將測(cè)試劃分為以下幾種類別:
          ---數(shù)據(jù)驅(qū)動(dòng)的測(cè)試,需要通過(guò)單元測(cè)試來(lái)完成,如計(jì)算就是一種典型的例子.
          ---關(guān)鍵字驅(qū)動(dòng) (Keyword-driven) 測(cè)試,常自動(dòng)化進(jìn)行。這是一些系統(tǒng)測(cè)試,要求應(yīng)用程序能夠運(yùn)行,按鈕能夠被點(diǎn)擊,數(shù)據(jù)可以被鍵入,而輸出的結(jié)果中包含規(guī)定的值。測(cè)試團(tuán)隊(duì)一般都能實(shí)現(xiàn)這種測(cè)試,但是可能開(kāi)發(fā)者更容易完成這些工作。
          ---手工測(cè)試。這類測(cè)試適用于或者實(shí)現(xiàn)自動(dòng)化測(cè)試的代價(jià)太昂貴并且是對(duì)出錯(cuò)的要求不高的情況,或者是一些基礎(chǔ)功能(如,起始頁(yè)面不能顯示),可以很容易地發(fā)現(xiàn)錯(cuò)誤的情況。

          我是在2004年首次接觸FitNesse,我曾經(jīng)嘲笑過(guò)它并揚(yáng)言它是不可能工作的。把測(cè)試寫(xiě)入wiki并自動(dòng)進(jìn)行測(cè)試,這個(gè)主意看起來(lái)太荒唐。但是,我錯(cuò)了,F(xiàn)itNesse真的象看起來(lái)得那樣簡(jiǎn)單高效。

          FitNesse的簡(jiǎn)單是從安裝時(shí)就開(kāi)始體現(xiàn)了,只要完全下載了FitNesse的發(fā)行包,并解壓縮就可以了。在以下的討論中假設(shè)解壓到了c:\fitnesse目錄中。

          運(yùn) 行C:\fitnesse 下的run.bat(linux 下運(yùn)行run.sh)來(lái)啟動(dòng)FitNesse,F(xiàn)itNesse作為一個(gè)web服務(wù)運(yùn)行在80端口上,當(dāng)然你可以指定端口,如設(shè)定81,在運(yùn)行腳本的首行 加上 –p 81 即可,這就是設(shè)置的全部工作。現(xiàn)在你可以用http://locahost:81來(lái)訪問(wèn)你的FitNesse了。

          在本文,我使用windows平臺(tái)的java版FitNesse,當(dāng)然,這些例子也可以用于其它版本和其它平臺(tái)(如Python,.net等)

          一些測(cè)試

          你 可以從FitNesse的在線文檔提供了一些例子(可以與有名的Junit的貨幣用例相提并論)開(kāi)始做起,這些例子非常適合學(xué)習(xí)如何使用 FitNesse,但是它們還不算是解決復(fù)雜問(wèn)題的例子。因此,我將使用一些在我最近項(xiàng)目中的真實(shí)的用例。我已經(jīng)簡(jiǎn)化了問(wèn)題、代碼,而不是直接取自項(xiàng)目 中,并寫(xiě)了一些說(shuō)明。盡管如此,這些例子還是足夠復(fù)雜,能夠充分展示FitNesse簡(jiǎn)潔直觀的威力
          現(xiàn)在,假設(shè)我們正在從事一個(gè)為一個(gè)大型的保險(xiǎn)公司開(kāi)發(fā)開(kāi)發(fā)項(xiàng)目,這是一個(gè)復(fù)雜的基于java的企業(yè)級(jí)應(yīng)用。產(chǎn)品將涵蓋公司的全部業(yè)務(wù),包括客戶和合同管理,以及支付業(yè)務(wù),在我們的例子里,我們只關(guān)注其中的極小的一部分。

          在瑞士,父母有權(quán)利獲得給每個(gè)孩子的兒童津貼,經(jīng)過(guò)確認(rèn)家庭環(huán)境后,將根據(jù)情況得到相應(yīng)的津貼。以下是這個(gè)需求的簡(jiǎn)化版本,我們將從一個(gè)傳統(tǒng)的需求開(kāi)始,并把它遷移到FitNesse中。

          兒童津貼的發(fā)放存在幾種狀態(tài)。有關(guān)條款規(guī)定在孩子出生月份的第一天開(kāi)始生效,在孩子達(dá)到規(guī)定年齡、就業(yè)或死亡的所在月份的最后一天失效。

          按規(guī)定在到了12歲所在月份的第一天,就可以領(lǐng)到190瑞士法郎(瑞士官方貨幣)的補(bǔ)貼。
          根據(jù)父母全職或兼職工作等情況,依據(jù)不同的條款,如表1所示進(jìn)行分類.

          image
          圖 1. 兒童津貼資格表.

          就業(yè)率要根據(jù)工作合同來(lái)計(jì)算,合同需要被確認(rèn)是有效的,如果有終止日期,還要確認(rèn)是否在“有效期”內(nèi)。表2顯示了根據(jù)孩子年齡的不同等條件,父母可以得到的補(bǔ)貼數(shù)量。

          image
          圖 2. 年齡相關(guān)條款

          正常情況下,每?jī)赡暌獙?duì)款項(xiàng)進(jìn)行有規(guī)律地調(diào)整。

          第一次看到這些需求,也許會(huì)認(rèn)為這些需求是很明確的,開(kāi)發(fā)人員有能力輕松地實(shí)現(xiàn)它,但是,我們真的確定了這些邊界條件了嗎?該如何測(cè)試呢?

          邊界條件
          邊界條件是指達(dá)到、超過(guò)、低于某個(gè)給定的輸入輸出之的情況。經(jīng)驗(yàn)表明,在邊界條件附近的測(cè)試比其他測(cè)試更有價(jià)值,典型的例子就是著名的“只執(zhí)行一次”的條件跳轉(zhuǎn)和程序段.


          場(chǎng)景對(duì)于查找例外條件和邊界條件有很大幫助,因?yàn)檫@是得到關(guān)于商業(yè)規(guī)則的行業(yè)經(jīng)驗(yàn)的好方法。

          場(chǎng)景

          對(duì) 大部分項(xiàng)目而言,是由需求工程師來(lái)提供給開(kāi)發(fā)人員的需求規(guī)格說(shuō)明書(shū),然后開(kāi)始學(xué)習(xí)了解需求,提問(wèn),然后開(kāi)始設(shè)計(jì)、編碼、測(cè)試。再后來(lái),開(kāi)發(fā)人員把軟件提供 給測(cè)試團(tuán)隊(duì),在經(jīng)過(guò)幾番改寫(xiě)和修補(bǔ)后,最后交付給客戶(客戶也許更喜歡考慮提出一些意外的需求)。如果采用了FitNesse,將不會(huì)改變這一過(guò)程,只是 要增加一些測(cè)試用例、場(chǎng)景,和測(cè)試意愿。

          場(chǎng)景在啟動(dòng)測(cè)試過(guò)程中具有特別的的幫助。以下是一些例子,在回答將支付多少兒童津貼等為題上,就要分清多種情況:
          ---瑪麗亞是單親家庭,她又兩個(gè)兒子 (鮑勃, 2歲,??彼得 15歲) ,從事兼職秘書(shū)工作 (每周工作20個(gè)小時(shí)).
          ---瑪麗亞失業(yè)了,后來(lái)她找到一個(gè)每周工作10個(gè)小時(shí)的商店助手和每周工作5個(gè)小時(shí)的臨時(shí)照顧幼兒的工作
          ---保羅和拉瑞(Lara)有一個(gè)17歲的女兒麗莎(Lisa),她是一個(gè)殘疾人,還有一個(gè)兒子弗蘭克,18歲,還在上大學(xué)。
          即使是僅談?wù)撘幌逻@些場(chǎng)景,也有助于測(cè)試工作的開(kāi)展,哪怕是軟件中手工運(yùn)行這些例子,也幾乎可以確信會(huì)發(fā)現(xiàn)程序的遺漏,難道因?yàn)闆](méi)有原型就不做這些嗎?為什么不做呢?

          關(guān)鍵字驅(qū)動(dòng)(Keyword-driven)的測(cè)試

          關(guān) 鍵字驅(qū)動(dòng)的測(cè)試常用于模擬原型,F(xiàn)irNesse允許定義關(guān)鍵字驅(qū)動(dòng)的測(cè)試類型(詳見(jiàn)“完全的數(shù)據(jù)驅(qū)動(dòng)自動(dòng)化測(cè)試”(“Totally Data-Driven Automated Testing”))甚至在沒(méi)有軟件支持的情況下(不能自動(dòng)運(yùn)行),運(yùn)行基于關(guān)鍵字驅(qū)動(dòng)的測(cè)試也會(huì)很有好處。

          image
          圖 3. ActionFixture 測(cè)試

          圖3 展示的是關(guān)鍵自驅(qū)動(dòng)測(cè)試的示例。第一列描述的是來(lái)自FitNesse的關(guān)鍵字,第二列描述的是java類的方法(開(kāi)發(fā)者根據(jù)這里的描述,在Java程序使 用這些名字來(lái)命名)。第三列描述的是來(lái)自第二列的方法所產(chǎn)生的數(shù)據(jù)。最后一行演示了測(cè)試失敗的情形(測(cè)試通過(guò)為綠色)。正如你所看見(jiàn)的那樣,找出錯(cuò)誤是很 容易的。

          這會(huì)使人很容易甚至很樂(lè)意去建立這些測(cè)試。測(cè)試者不必具備編程技能,經(jīng)過(guò)簡(jiǎn)短介紹后,客戶也會(huì)很容易的讀懂。
          用這種方法定義的測(cè)試,幾乎就是業(yè)務(wù)需求,并具備傳統(tǒng)測(cè)試用例沒(méi)有的重要優(yōu)勢(shì), 甚至不必去自動(dòng)生成也有很多優(yōu)勢(shì):
          ---測(cè)試內(nèi)容很容易獲得,不必特別訓(xùn)練就可以輕松完成。
          ---與其改變需求,到不如先改變測(cè)試,這樣反而更直觀(這與使用某些工具的情況完全不同)
          ---在確定新需求或修改需求時(shí),可以隨時(shí)運(yùn)行測(cè)試來(lái)看看需要修正哪些內(nèi)容。

          為自動(dòng)運(yùn)行測(cè)試,需要建立一個(gè)簡(jiǎn)單的軟件層,用于代表真實(shí)的測(cè)試代碼。這些測(cè)試在自動(dòng)化測(cè)試GUI操作時(shí)特別有用。我曾開(kāi)發(fā)過(guò)一個(gè)基于HTTPUnit的自動(dòng)測(cè)試web頁(yè)

          這里就是FitNesse自動(dòng)運(yùn)行的代碼:
          package stephanwiesner.javaworld;

          import fit.ColumnFixture;

          public class ChildAllowanceFixture extends ColumnFixture
          {
          ?? public void personButton() {
          ??????System.out.println("pressing person button");
          ?? }
          ?? public void securityNumber(int number) {
          ??????System.out.println("entering securityNumber " + number);
          ?? }
          ?? public int childAllowance() {
          ??????System.out.println("calculating child allowance");
          ??????return 190;??
          ?? }
          ?? [...]
          ??}


          在FitNesse中的運(yùn)行結(jié)果如圖4所示,很有助于調(diào)試。與Junit相比,Junit抑制了調(diào)試信息的輸出,但我認(rèn)為在自動(dòng)Web測(cè)試中這些輸出絕對(duì)是有必要的。

          image
          圖 4. 標(biāo)準(zhǔn)輸出

          在測(cè)試基于Web的應(yīng)用時(shí),錯(cuò)誤也將被包含在FitNesse頁(yè)面里,并被顯示出來(lái),這是的條施工作比使用log文件更容易。

          數(shù)據(jù)驅(qū)動(dòng)的測(cè)試

          關(guān) 鍵字驅(qū)動(dòng)的測(cè)試是GUI自動(dòng)測(cè)試的最佳選擇,同樣,數(shù)據(jù)驅(qū)動(dòng)測(cè)試也是各類計(jì)算類項(xiàng)的首選測(cè)試方式。如果你曾經(jīng)寫(xiě)過(guò)單元測(cè)試,那么測(cè)試中什么是最令人厭倦的 呢?也許,你會(huì)認(rèn)為是數(shù)據(jù)。你的測(cè)試要進(jìn)行數(shù)據(jù)填充,但是數(shù)據(jù)經(jīng)常改變,使維護(hù)工作變成了可怕的惡夢(mèng),測(cè)試不同的組合,需要不同的數(shù)據(jù),這也許會(huì)使你的測(cè) 試工作變得日益復(fù)雜,變成了”丑陋的怪獸”。

          使用數(shù)據(jù)驅(qū)動(dòng)的測(cè)試,數(shù)據(jù)將從代碼中分離。一般情況下,建立幾種類型的表格,存儲(chǔ)為CSV文件,由測(cè)試代碼來(lái)讀取。如果再使用FitNesse,我們就可以更便利地進(jìn)行存儲(chǔ)、改變,以及訪問(wèn)這些測(cè)試數(shù)據(jù)。

          現(xiàn) 在,讓我們把圖2種的表格轉(zhuǎn)變成一個(gè)測(cè)試吧。首先,將表格拷貝到Excel中,進(jìn)行修改,然后使用FitNesse的EXCEL導(dǎo)入功能輸入。這是一個(gè)有 用的功能,因?yàn)樵贔itNesse中,表越大越難以維護(hù)。輸入的結(jié)果如圖5所示。每一行表示一個(gè)測(cè)試,有問(wèn)號(hào)的列表示需要寫(xiě)Java方法,沒(méi)有問(wèn)號(hào)的行表 示輸入的測(cè)試數(shù)據(jù)。

          image
          圖 5. 數(shù)據(jù)驅(qū)動(dòng)測(cè)試表Data-driven test table.

          再 重復(fù)一次,在閱讀了業(yè)務(wù)需求后,這種測(cè)試就非常容易理解了。如果你曾經(jīng)擔(dān)心如何在你的測(cè)試用例里的進(jìn)行等值測(cè)試的話,那就看看這里吧。最后一行大概是最重 要的,因?yàn)樾枨蟛](méi)有說(shuō)明如何處理非法數(shù)據(jù),或者處理20歲以上的孩子但仍在上學(xué)等情況,這里的關(guān)鍵字“error”表明需要處理異常了。

          常見(jiàn)問(wèn)題解答

          這里討論使用FitNesse在需求、測(cè)試和開(kāi)發(fā)過(guò)程中遇到的未解決的問(wèn)題的解決辦法,以下是部分答案。

          手工測(cè)試會(huì)遇到什么問(wèn)題?
          手 工測(cè)試者最常做的就是重復(fù)的手工回歸測(cè)試,不但代價(jià)昂貴,而且容易出錯(cuò)。自動(dòng)化測(cè)試可以減少但不能消除這種工作的工作量。測(cè)試者可以有更多的時(shí)間去從事更 有趣的測(cè)試,例如在應(yīng)用程序在復(fù)雜的場(chǎng)景下的不同處理等,盡管測(cè)試就是要花費(fèi)更長(zhǎng)的時(shí)間找到錯(cuò)誤,但比不意味著因此而要付出更高的代價(jià).

          用戶驗(yàn)收測(cè)試不再有必要了嗎?
          也許有人會(huì)這樣認(rèn)為。如果客戶在需求中定義了所有的測(cè)試,當(dāng)所有測(cè)試測(cè)試都變綠(通過(guò)了)時(shí),軟件就“完工”了。我的實(shí)踐經(jīng)驗(yàn)是,客戶仍會(huì)提出附加的需求來(lái),盡管如此,他們的需求變化會(huì)更少,并更容易地結(jié)合實(shí)際變化進(jìn)行分類(同時(shí)也會(huì)帶來(lái)追加的款項(xiàng))。

          在FitNesse書(shū)寫(xiě)比Word documents更有優(yōu)勢(shì)嗎?
          甚至在沒(méi)用測(cè)試的情況下,使用wiki 來(lái)寫(xiě)業(yè)務(wù)需求也能帶給你更多好處。文檔可以自動(dòng)用在Web 服務(wù)器上,可以被多人并發(fā)訪問(wèn),可以全文檢索,可以被鏈接。我發(fā)現(xiàn)還有以下兩個(gè)特點(diǎn):
          ---更容易建立數(shù)據(jù)字典,并鏈接上明細(xì)內(nèi)容。更重要的是,具有查找被引用位置("where-used")的功能。 如果修改某個(gè)細(xì)目,就會(huì)立即找到是否被引用過(guò),以避免發(fā)生沖突.
          ---由于Bugzilla (或者 Jira,二者均為缺陷跟蹤系統(tǒng),譯者注) 是基于Web的, 我們可以方便地在兩個(gè)系統(tǒng)之間互相鏈接文檔(artifacts) (bugs, 任務(wù), 討論等),便于提高工作效率。

          FitNesse 允許按照確定的順序運(yùn)行測(cè)試,而JUnit 禁止這樣做,你有何體驗(yàn)?
          使 用JUnit,需要對(duì)同一個(gè)對(duì)象分別建立許多setUp() 和tearDown() 方法. 在某些情況下,可以在一個(gè)FitNesse頁(yè)面里放上所有的相關(guān)測(cè)試,并能夠給定執(zhí)行順序. 因此,第一個(gè)測(cè)試可以建立一個(gè)”人”,下一個(gè)測(cè)試可以對(duì)它進(jìn)行修改,最后一個(gè)可以進(jìn)行刪除操作.如果第一個(gè)測(cè)試失敗了,而且那個(gè)”人”沒(méi)有被建立,這該怎 么辦?沒(méi)問(wèn)題,因?yàn)榈谝粋€(gè)測(cè)試失敗了,隨意在把它修正好之前,我是不會(huì)繼續(xù)的. 我一般不會(huì)經(jīng)常使用這種順序執(zhí)行方式,但有時(shí)它會(huì)給我?guī)?lái)很大方便.

          FitNesse 可以用于大項(xiàng)目嗎?
          大 部分開(kāi)發(fā)者會(huì)明白,F(xiàn)itNesse的優(yōu)勢(shì)就是簡(jiǎn)單易用。但沒(méi)有技術(shù)背景的人,如果不使用自動(dòng)檢查特性以及所見(jiàn)即所得風(fēng)格的編輯器,工作起來(lái)會(huì)很困難。一 個(gè)簡(jiǎn)單的例子就是FitNesse 只有允許使用三種類型的標(biāo)題, 但現(xiàn)在我們需要五種,這就需要我們就可以對(duì)FitNesse 進(jìn)行擴(kuò)充.

          FitNesse 不包含輸出為類似PDF文件的功能。我曾經(jīng)使用過(guò)長(zhǎng)度達(dá)到60頁(yè)的Word文檔,盡管編輯起來(lái)有些困難,但是可以輕松打印出來(lái). 但是當(dāng)我把它轉(zhuǎn)到FitNesse里后,我就難以打印了,因?yàn)楸环纸鉃閹讉€(gè)不同的頁(yè)面,最后不得不通過(guò)編程解決.

          FitNesse 具有一個(gè)簡(jiǎn)單的機(jī)制可以顯示那些文檔被修改了,被誰(shuí)修改了,但不能顯示修改了什么, 權(quán)限管理有局限。使用FitNesse重開(kāi)一個(gè)項(xiàng)目要比改寫(xiě)一個(gè)運(yùn)行的項(xiàng)目更容易.對(duì)中小型項(xiàng)目而言,我極力推薦FitNesse. 大項(xiàng)目也可以使用,但是進(jìn)行更仔細(xì)的評(píng)估后再實(shí)施會(huì)更好.

          結(jié)論
          我認(rèn)為FitNesse是需求分析的好工具,對(duì)測(cè)試優(yōu)先開(kāi)發(fā)很有幫助,它是很有利用價(jià)值的。我被迫花費(fèi)幾個(gè)周來(lái)適應(yīng)FitNesse及其處理過(guò)程,我的項(xiàng)目目前尚未完成,但是我已經(jīng)看到了需求質(zhì)量和軟件質(zhì)量均得到明顯提高,而對(duì)測(cè)試者而言,工作起來(lái)會(huì)獲得更多的樂(lè)趣 。

          關(guān)于作者
          Stephan Wiesner 是瑞士盧賽恩Löwenfels Partner AG的測(cè)試管理人員。他是“Learning Jakarta Struts 1.2”(伽利略出版社,德語(yǔ)版,ISBN:3898426130;英語(yǔ)版:ISBN: 190481154X)的作者,” Java der Code”(由德國(guó)MITP出版社發(fā)行,ISBN: 3826614623)。另外還在德文雜志上寫(xiě)過(guò)大量的與java相關(guān)的文章。他有著豐富的開(kāi)發(fā)和測(cè)試經(jīng)驗(yàn),是一位ISTQB認(rèn)證的測(cè)試管理員和認(rèn)證的 Scrum主管(ScrumMaster,Scrum是一種敏捷開(kāi)發(fā)方式,譯者注)。

          陳海青(joson),本文譯者,生活在中國(guó)的山東省煙臺(tái)市,先后從事軟件開(kāi)發(fā)、數(shù)據(jù)庫(kù)管理、系統(tǒng)管理等工作,2001年獲得高級(jí)程序員資格。

          相關(guān)資源
          ---Matrix-Java和中間件社區(qū):http://www.matrix.org.cn
          ---“完全的數(shù)據(jù)驅(qū)動(dòng)自動(dòng)測(cè)試”("Totally Data-Driven Automated Testing" ),作者Keith Zambelich ,詳細(xì)闡述了數(shù)據(jù)驅(qū)動(dòng)和關(guān)鍵字驅(qū)動(dòng)的測(cè)試: http://www.sqa-test.com/w_paper1.html
          ---以下站點(diǎn)提供了更多的關(guān)于優(yōu)化FitNesse的內(nèi)容: http://fitnesse.testmanager.info
          ---官方的FitNesse網(wǎng)站,經(jīng)常更新: http://fitnesse.org/
          ---下在完整的FitNesse發(fā)行版: http://fitnesse.org/FitNesse.DownLoad
          ---部分資料可以在譯者的站點(diǎn)找到:http://www.chq.name/

          作者的其他文章

          其他相關(guān)文章

          posted on 2006-07-28 11:43 Alex 閱讀(2966) 評(píng)論(0)  編輯  收藏 所屬分類: XP-極限編程

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 库尔勒市| 安图县| 梧州市| 宁强县| 泰顺县| 防城港市| 白银市| 民勤县| 香格里拉县| 钟山县| 泰顺县| 浮梁县| 仪征市| 澄城县| 旺苍县| 抚远县| 玉树县| 平阳县| 安岳县| 阳曲县| 蕉岭县| 秦皇岛市| 通许县| 民乐县| 偏关县| 吉首市| 平安县| 惠水县| 扎赉特旗| 信丰县| 台中县| 如皋市| 日照市| 安徽省| 阿坝县| 柘荣县| 涞水县| 龙陵县| 密云县| 双流县| 襄汾县|