欧美成人午夜免费全部完,亚洲午夜福利精品久久,а√最新版在线天堂,另类亚洲综合区图片小说区,亚洲欧美日韩精品色xxx

扣丁學(xué)堂匯總單元測(cè)試與功能測(cè)試之間的區(qū)別

2018-02-01 14:04:36 1658瀏覽

今天扣丁學(xué)堂給大家詳細(xì)介紹一下關(guān)于單元測(cè)試與功能測(cè)試之間的區(qū)別。并概述了在日常開(kāi)發(fā)中使用這兩種測(cè)試的方法,希望對(duì)大家有所幫助。



測(cè)試與開(kāi)發(fā)過(guò)程

測(cè)試對(duì)于開(kāi)發(fā)人員極為重要,您必須在開(kāi)發(fā)過(guò)程中不斷進(jìn)行測(cè)試。測(cè)試不應(yīng)該只屬于開(kāi)發(fā)周期的某個(gè)特定階段。它絕不應(yīng)該是您將系統(tǒng)交給客戶前要完成的最后一項(xiàng)任務(wù)。如何才能知道您何時(shí)就完成了所有任務(wù)呢?如何才能知道對(duì)一個(gè)小錯(cuò)誤的修正是否破壞了系統(tǒng)的主要功能呢?目前想像中的系統(tǒng)如何才能演化為實(shí)實(shí)在在的系統(tǒng)呢?單元測(cè)試和功能測(cè)試都應(yīng)該是開(kāi)發(fā)過(guò)程中不可分割的一部分。

單元測(cè)試應(yīng)成為您編寫(xiě)代碼的核心環(huán)節(jié),當(dāng)您所做的項(xiàng)目時(shí)限很緊并且您希望控制開(kāi)發(fā)進(jìn)度時(shí)尤其如此。由于單元測(cè)試是如此重要,所以您應(yīng)該先編寫(xiě)測(cè)試,再編寫(xiě)代碼。

一套適當(dāng)?shù)膯卧獪y(cè)試具有以下功能:

●說(shuō)明可能的最實(shí)用設(shè)計(jì)

●提供類文檔的最佳格式

●確定一個(gè)類何時(shí)完成

●增強(qiáng)開(kāi)發(fā)人員對(duì)代碼的信心

●作為快速重構(gòu)的基礎(chǔ)

單元測(cè)試創(chuàng)建隨系統(tǒng)自然發(fā)展的設(shè)計(jì)文檔。再讀一遍上一句話。文檔隨系統(tǒng)自然發(fā)展,這是軟件開(kāi)發(fā)的“圣杯”。有什么方法比通過(guò)提供一個(gè)用例編碼集來(lái)記錄一個(gè)類效果更好呢?那就是單元測(cè)試:一系列記錄類所做工作的用例代碼,提供輸出控制。這樣,由于單元測(cè)試必須通過(guò),所以設(shè)計(jì)文檔總是最新的。

您應(yīng)該首先編寫(xiě)測(cè)試,然后再編寫(xiě)代碼。這樣就為要測(cè)試的類提供了一種設(shè)計(jì),這種設(shè)計(jì)使您每一時(shí)刻都只需集中考慮一小塊代碼。這種做法也使設(shè)計(jì)變得不再?gòu)?fù)雜。您沒(méi)有試圖為以后著想而實(shí)現(xiàn)一些不必要的功能。先編寫(xiě)測(cè)試還使您知道該類何時(shí)完成。一旦通過(guò)所有測(cè)試,任務(wù)也就完成了。

最后,單元測(cè)試可使您高度自信,這又會(huì)轉(zhuǎn)化為開(kāi)發(fā)人員的滿意度。如果只要更改代碼即運(yùn)行單元測(cè)試,您立即就能發(fā)現(xiàn)您所做的更改是否對(duì)系統(tǒng)造成了破壞。

功能測(cè)試比單元測(cè)試更重要,因?yàn)楣δ軠y(cè)試將驗(yàn)證系統(tǒng)是否可以發(fā)行了。功能測(cè)試以一種有用的方式對(duì)您的工作系統(tǒng)進(jìn)行說(shuō)明。

一套適當(dāng)?shù)墓δ軠y(cè)試具有以下功能:

●以有效方式捕獲用戶需求

●增強(qiáng)小組(用戶和開(kāi)發(fā)人員)在系統(tǒng)滿足用戶需求方面的信心

功能測(cè)試以有效方式捕獲用戶需求。傳統(tǒng)開(kāi)發(fā)通過(guò)用例來(lái)捕獲需求。通常,人們討論用例并花很長(zhǎng)時(shí)間對(duì)它們進(jìn)行細(xì)化。他們最后所得到的只是一紙空文。功能測(cè)試就像自驗(yàn)證式用例。極限編程方法可解釋這一概念。XPStories將成為未來(lái)用戶與開(kāi)發(fā)人員進(jìn)行溝通的協(xié)議。功能測(cè)試便是這種溝通的結(jié)果。未經(jīng)功能測(cè)試的Stories不可能很完善。

功能測(cè)試填補(bǔ)單元測(cè)試留下的空白,并可增強(qiáng)小組對(duì)代碼的信心。單元測(cè)試漏掉許多錯(cuò)誤。盡管它可以提供您所需的全部代碼,但它可能無(wú)法提供您所需的全部系統(tǒng)功能。功能測(cè)試將暴露單元測(cè)試遺漏的問(wèn)題。一套適當(dāng)?shù)淖詣?dòng)化功能測(cè)試也不可能捕捉到每個(gè)錯(cuò)誤,但是它能比最好的單一單元測(cè)試捕捉更多的錯(cuò)誤。

單元測(cè)試與功能測(cè)試

單元測(cè)試向開(kāi)發(fā)人員表明代碼正確執(zhí)行操作;而功能測(cè)試向開(kāi)發(fā)人員表明代碼執(zhí)行正確的操作。

單元測(cè)試

單元測(cè)試是從程序員的角度編寫(xiě)的。它確保類的某個(gè)特定方法成功執(zhí)行一系列特定的任務(wù)。每個(gè)測(cè)試都確保只要給定輸入,方法將輸出預(yù)期的結(jié)果。

如果沒(méi)有測(cè)試框架,編寫(xiě)一套可維護(hù)的自動(dòng)化單元測(cè)試幾乎是不可能的。在開(kāi)始編寫(xiě)測(cè)試之前,請(qǐng)選擇一個(gè)小組公認(rèn)的框架。您將經(jīng)常性地使用這個(gè)框架,因此您最好對(duì)它有點(diǎn)好感。極限編程網(wǎng)站提供了幾個(gè)單元測(cè)試框架(請(qǐng)參閱參考資源)。我最熟悉的框架是JUnit,它專門用來(lái)測(cè)試Java代碼。

功能測(cè)試

功能測(cè)試是從用戶的角度編寫(xiě)的。這種測(cè)試確保系統(tǒng)執(zhí)行用戶期望它執(zhí)行的工作。

很多時(shí)候,系統(tǒng)開(kāi)發(fā)好比建筑房屋。盡管這種類比不很恰當(dāng),但為了理解單元測(cè)試與功能測(cè)試的區(qū)別,我們可以擴(kuò)充這種類比。單元測(cè)試好比房屋建筑現(xiàn)場(chǎng)的建筑監(jiān)理員。他關(guān)心房屋的各個(gè)內(nèi)部系統(tǒng),如地基、構(gòu)架、供電系統(tǒng)和管道設(shè)備等。他確保(測(cè)試)房屋每一部分的工作都安全、正常,即符合建筑說(shuō)明。這種情況下,功能測(cè)試類似于視察同一建筑現(xiàn)場(chǎng)的房主。他假定內(nèi)部系統(tǒng)將正常運(yùn)作,并假定建筑監(jiān)理員在執(zhí)行其任務(wù)。房主關(guān)心的是住在這所房子里將會(huì)怎樣。他關(guān)心房子的外觀如何,各個(gè)房間的大小是否合適,房子能否滿足家庭的需要,以及窗戶的位置是否有利于采光。房主對(duì)房子執(zhí)行功能測(cè)試。他從用戶的角度考慮問(wèn)題。建筑監(jiān)理員對(duì)房子執(zhí)行單元測(cè)試。他從建筑工人的角度考慮問(wèn)題。

就像單元測(cè)試一樣,如果沒(méi)有測(cè)試框架,編寫(xiě)一套可維護(hù)的自動(dòng)化功能測(cè)試實(shí)際上是不可能的。JUnit非常適合編寫(xiě)單元測(cè)試;但是,當(dāng)試圖編寫(xiě)功能測(cè)試時(shí),它就顯得力不從心了。就功能測(cè)試而言,沒(méi)有與JUnit相當(dāng)?shù)目蚣?。也有幾種用于功能測(cè)試的產(chǎn)品,但我從來(lái)沒(méi)見(jiàn)過(guò)它們應(yīng)用于生產(chǎn)環(huán)境。如果找不到滿足您的需要的框架,您就必須創(chuàng)建一個(gè)。

無(wú)論我們多么擅長(zhǎng)于構(gòu)建手頭的項(xiàng)目,也不管我們正在創(chuàng)建的系統(tǒng)多么靈活,如果我們的產(chǎn)品不合用,那我們就是白費(fèi)時(shí)間。因此,功能測(cè)試是開(kāi)發(fā)最重要的部分。

由于兩種測(cè)試都必不可少,您就需要了解編寫(xiě)它們應(yīng)遵循的原則。

如何編寫(xiě)單元測(cè)試

剛開(kāi)始編寫(xiě)單元測(cè)試時(shí)很容易恢心。最佳的入手方式就是為新代碼創(chuàng)建單元測(cè)試。(盡管為現(xiàn)有代碼創(chuàng)建單元測(cè)試比較困難,但并非無(wú)法實(shí)現(xiàn))。首先從新代碼著手,待您習(xí)慣了整個(gè)過(guò)程以后,再針對(duì)現(xiàn)有代碼創(chuàng)建測(cè)試程序。

如上文所述,應(yīng)該首先編寫(xiě)單元測(cè)試,然后再編寫(xiě)這些單元測(cè)試要測(cè)試的代碼。如何為尚不存在的代碼編寫(xiě)測(cè)試呢?問(wèn)得非常好。掌握這一方法需要90%的思維加10%的技術(shù)。我的意思是,您只需假定您正在為其編寫(xiě)測(cè)試的類已經(jīng)存在。接下來(lái)的任務(wù)就是編寫(xiě)測(cè)試。起初會(huì)犯很多語(yǔ)法錯(cuò)誤,但您先別管它。這一步您要做的就是定義該類要實(shí)現(xiàn)的接口。下一步就是運(yùn)行您的單元測(cè)試,修正語(yǔ)法錯(cuò)誤(即,編寫(xiě)一個(gè)類,使它實(shí)現(xiàn)您的測(cè)試剛定義的接口),并再次運(yùn)行測(cè)試。重復(fù)這一過(guò)程,每次僅編寫(xiě)修正故障的代碼。運(yùn)行測(cè)試,直到測(cè)試全部通過(guò)為止。一旦通過(guò)全部單元測(cè)試,代碼也就完成了。

一般而言,類的每個(gè)公共方法都應(yīng)有一個(gè)單元測(cè)試。但是,功能簡(jiǎn)單的方法(例如,getter方法和setter方法)不需要單元測(cè)試,除非它們以某種特別的方式進(jìn)行獲取和設(shè)置。應(yīng)該遵循下面這條很好的原則:即只要您認(rèn)為有必要對(duì)代碼中的某個(gè)行為加注,就編寫(xiě)一個(gè)單元測(cè)試。如果您像其他許多程序員一樣不喜歡為代碼加注,則單元測(cè)試是記錄代碼行為的一種方法。

將單元測(cè)試與被測(cè)試的相關(guān)類放在同一個(gè)包內(nèi)。這種組織方式使每個(gè)單元測(cè)試都能訪問(wèn)被測(cè)試類中帶有package或protected訪問(wèn)修飾符的方法和引用變量。

在單元測(cè)試中避免使用域?qū)ο蟆S驅(qū)ο笫翘囟ㄓ谀硞€(gè)應(yīng)用程序的對(duì)象。例如,一個(gè)電子表格應(yīng)用程序可能包含一個(gè)注冊(cè)對(duì)象;這個(gè)注冊(cè)對(duì)象就是一個(gè)域?qū)ο?。如果您有一個(gè)已知這些域?qū)ο蟮念?,則在測(cè)試中完全可以使用這些對(duì)象。但是如果您有一個(gè)根本不使用這些域?qū)ο蟮念?,在測(cè)試中就不要將這些對(duì)象聯(lián)系到該類上。應(yīng)該避免這種情形完全是因?yàn)榇a重用。為某一項(xiàng)目創(chuàng)建的類經(jīng)常要用于其他項(xiàng)目。重用這些類可能很簡(jiǎn)單。但是,如果對(duì)重用類的測(cè)試中用到了另一個(gè)項(xiàng)目的域?qū)ο螅瑒t使測(cè)試能夠正常運(yùn)行這一工作就會(huì)相當(dāng)耗時(shí)。通常情況下,這個(gè)測(cè)試將被刪除或重寫(xiě)。

這些機(jī)制為您提供很好的幫助,但是如果您不運(yùn)行這些測(cè)試,一套綜合的單元測(cè)試就變得一文不值。盡早運(yùn)行測(cè)試通常使您在任何時(shí)候都對(duì)代碼充滿信心。您將隨著項(xiàng)目進(jìn)展不斷添加功能。運(yùn)行這些測(cè)試將會(huì)通知您剛剛實(shí)現(xiàn)的新功能是否對(duì)系統(tǒng)造成了破壞。

在您掌握了編寫(xiě)單元測(cè)試的技巧之后,我們?cè)賮?lái)看看現(xiàn)有代碼。為現(xiàn)有代碼編寫(xiě)測(cè)試可能是個(gè)挑戰(zhàn)。不要為測(cè)試而測(cè)試。當(dāng)您發(fā)現(xiàn)有必要對(duì)一個(gè)未經(jīng)很好測(cè)試(或者根本就沒(méi)有測(cè)試)的類進(jìn)行修改時(shí),請(qǐng)“隨時(shí)”編寫(xiě)測(cè)試?,F(xiàn)在是添加測(cè)試的時(shí)候了。像往常那樣,該類的單元測(cè)試應(yīng)該捕獲其每個(gè)方法的功能。找出應(yīng)該進(jìn)行哪些測(cè)試的最容易的方法之一是:查看現(xiàn)有代碼中的注釋。任何注釋都應(yīng)在單元測(cè)試內(nèi)捕獲。將位于方法開(kāi)頭、說(shuō)明該方法所起作用的注釋塊翻譯為單元測(cè)試。

如何編寫(xiě)功能測(cè)試

盡管功能測(cè)試很重要,但它卻沒(méi)有受到足夠的重視。多數(shù)項(xiàng)目都有單獨(dú)的一個(gè)組來(lái)做功能測(cè)試。通常有一大群人不斷地與系統(tǒng)交互,以確定系統(tǒng)是否正確工作。這種觀念和設(shè)置專門的功能測(cè)試小組的做法很不明智。

對(duì)功能測(cè)試的處理與對(duì)單元測(cè)試的處理不應(yīng)該有太大的區(qū)別。只要您編寫(xiě)的代碼用來(lái)產(chǎn)生要求用戶與之交互的組件(如對(duì)話框),就要編寫(xiě)測(cè)試,但實(shí)際上編寫(xiě)測(cè)試要在編寫(xiě)代碼之前進(jìn)行。請(qǐng)與用戶一起編寫(xiě)獲取用戶需求的功能測(cè)試。無(wú)論何時(shí)開(kāi)始一項(xiàng)新任務(wù),都要在功能測(cè)試框架中描述此任務(wù)。您的開(kāi)發(fā)工作將繼續(xù)向前發(fā)展,當(dāng)添加新代碼時(shí),請(qǐng)執(zhí)行單元測(cè)試。當(dāng)所有的單元測(cè)試都結(jié)束以后,運(yùn)行最初的功能測(cè)試,看看它是否能夠通過(guò),或者是否需要修改。

從理論上講,功能測(cè)試小組的概念該消失了。開(kāi)發(fā)人員應(yīng)與用戶共同編寫(xiě)功能測(cè)試。在對(duì)系統(tǒng)所做的一系列功能測(cè)試結(jié)束之后,開(kāi)發(fā)組中負(fù)責(zé)功能測(cè)試的成員就應(yīng)該用初始測(cè)試的各種變化形式來(lái)轟擊系統(tǒng)。

單元測(cè)試與功能測(cè)試的界限

通常單元測(cè)試與功能測(cè)試之間并沒(méi)有明確的界限。老實(shí)說(shuō),有時(shí)我也不清楚這個(gè)界限在什么位置。在編寫(xiě)單元測(cè)試時(shí),我根據(jù)以下原則來(lái)確定當(dāng)前編寫(xiě)的單元測(cè)試實(shí)際上是否是功能測(cè)試:

●如果單元測(cè)試跨越類邊界,則它就可能是功能測(cè)試。

●如果單元測(cè)試很脆弱(也就是說(shuō),雖然它是一個(gè)有效測(cè)試,但它必須不斷改變以處理不同的用戶組合),則它可能是功能測(cè)試。

●如果編寫(xiě)單元測(cè)試比編寫(xiě)其所測(cè)試的代碼更難,則它可能是功能測(cè)試。

請(qǐng)注意“它可能是功能測(cè)試”這一措辭。本文無(wú)法提供硬性而快速的規(guī)則。單元測(cè)試與功能測(cè)試中之間有一個(gè)界限,但界限的具體位置要由您來(lái)確定。您用單元測(cè)試用得越熟練,某個(gè)特定測(cè)試是單元測(cè)試還是功能測(cè)試的界限就越明顯。

小結(jié)

單元測(cè)試是從開(kāi)發(fā)人員的角度出發(fā)編寫(xiě)的,并且關(guān)注的是所測(cè)試的類的特定方法。當(dāng)編寫(xiě)單元測(cè)試時(shí),請(qǐng)使用以下這些原則:

●首先編寫(xiě)單元測(cè)試,然后再編寫(xiě)要測(cè)試的類代碼

●在單元測(cè)試中捕獲代碼注釋。

●測(cè)試所有執(zhí)行“令人感興趣的”功能(即,不是getter和setter,除非它們以某種獨(dú)特的方式執(zhí)行獲取和設(shè)置操作)的公共方法。

●將每個(gè)測(cè)試實(shí)例與它要測(cè)試的類放在同一個(gè)包內(nèi),以獲得對(duì)包成員和保護(hù)成員的訪問(wèn)權(quán)。

●避免在單元測(cè)試中使用特定于域的對(duì)象。

●功能測(cè)試是從用戶的角度出發(fā)編寫(xiě)的,并且關(guān)注用戶感興趣的系統(tǒng)行為。找一個(gè)優(yōu)秀的功能測(cè)試框架,或者開(kāi)發(fā)一個(gè)測(cè)試框架,并使用這些功能測(cè)試識(shí)別用戶的真實(shí)需求。這樣,功能測(cè)試人員即可獲得一種自動(dòng)化工具以及使用這一工具的著手點(diǎn)。

●使單元測(cè)試和功能測(cè)試成為您開(kāi)發(fā)過(guò)程中的中心環(huán)節(jié)。如果您這樣做了,您將對(duì)系統(tǒng)的運(yùn)行及擴(kuò)展充滿信心。如果您沒(méi)有這樣做,您對(duì)系統(tǒng)就沒(méi)有十足的把握。測(cè)試可能不那么有趣,但在開(kāi)發(fā)過(guò)程中進(jìn)行單元測(cè)試和功能測(cè)試。

以上就是關(guān)于軟件測(cè)試之單元測(cè)試與功能測(cè)試的區(qū)別的詳細(xì)介紹,最后想要了解更多關(guān)于軟件測(cè)試培訓(xùn)發(fā)展前景趨勢(shì),請(qǐng)關(guān)注扣丁學(xué)堂官網(wǎng)、微信等平臺(tái),扣丁學(xué)堂IT職業(yè)在線學(xué)習(xí)教育平臺(tái)為您提供權(quán)威的軟件測(cè)試視頻教程系統(tǒng),通過(guò)千鋒扣丁學(xué)堂金牌講師在線錄制的軟件測(cè)試在線視頻教程,讓你快速掌握軟件測(cè)試從入門到精通開(kāi)發(fā)實(shí)戰(zhàn)技能。



扣丁學(xué)堂微信公眾號(hào)



關(guān)注微信公眾號(hào)獲取更多學(xué)習(xí)資料



查看更多關(guān)于“軟件測(cè)試技術(shù)資訊的相關(guān)文章>>

標(biāo)簽: 軟件測(cè)試培訓(xùn) 軟件測(cè)試工程師 軟件測(cè)試在線視頻 軟件測(cè)試視頻教程 軟件測(cè)試教程 單元測(cè)試 功能測(cè)試

熱門專區(qū)

暫無(wú)熱門資訊

課程推薦

微信
微博
15311698296

全國(guó)免費(fèi)咨詢熱線

郵箱:codingke@1000phone.com

官方群:148715490

北京千鋒互聯(lián)科技有限公司版權(quán)所有   北京市海淀區(qū)寶盛北里西區(qū)28號(hào)中關(guān)村智誠(chéng)科創(chuàng)大廈4層
京ICP備2021002079號(hào)-2   Copyright ? 2017 - 2022
返回頂部 返回頂部