亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        淺析測試驅(qū)動開發(fā)

        2014-04-29 00:00:00諸劍俊
        科技創(chuàng)新與應(yīng)用 2014年2期

        摘 要:測試驅(qū)動開發(fā)是一種用于敏捷軟件開發(fā)的開發(fā)過程,可以快速應(yīng)對需求變化。它要求先設(shè)計和編寫測試代碼,然后編寫功能代碼通過所有測試,再重構(gòu)以提高代碼質(zhì)量。文章將先介紹測試驅(qū)動開發(fā)的優(yōu)點、使用環(huán)境,然后介紹開發(fā)過程,最后介紹相關(guān)工具。

        關(guān)鍵詞:測試;TDD;敏捷開發(fā)

        1 概述

        1.1 定義

        測試驅(qū)動開發(fā)(Test Driven Development, TDD)是由極限編程之父Kent Beck提出的一種面向?qū)ο蟮拈_發(fā)方法[1]。區(qū)別于傳統(tǒng)的軟件開發(fā)模式,測試先行將更重視測試在整個軟件開發(fā)過程中的作用并促進(jìn)項目的進(jìn)行。它要求先完成測試代碼,然后編寫功能代碼,并且功能代碼要以通過測試代碼為標(biāo)準(zhǔn),然后對功能代碼重構(gòu),重構(gòu)之后再運行測試并要通過測試[2]。它的一個開發(fā)周期比較短,整個項目是多個周期的迭代。這種開發(fā)方式有效的提高了軟件質(zhì)量和開發(fā)效率[3]。目前,TDD已經(jīng)被很多公司和開發(fā)團(tuán)隊接受并用于實踐。

        1.2 優(yōu)點

        由于測試先行,因此寫代碼前就應(yīng)該有明確的需求,并體現(xiàn)在測試用例中。在交付前,測試用例可以用來描述功能需求并替代部分文檔。并且以測試用例描述的需求不容易出現(xiàn)模糊不清的概念,因為測試結(jié)果只會是True或False。這解決了開發(fā)人員在開發(fā)時誤解或由于溝通問題不完全理解需求文檔而造成開發(fā)到一定程度后才發(fā)現(xiàn)代碼與需求有偏差。但這還沒有解決對客戶的誤解或與客戶溝通不暢導(dǎo)致需求分析錯誤的問題。

        功能代碼編寫完成后必須通過所有測試,這就保證了這部分代碼是滿足其功能要求的。通過確保每小部分代碼的質(zhì)量,可以較快的疊加成更復(fù)雜的功能且保證最后交付的軟件與設(shè)計的要求是一致的。在對功能代碼進(jìn)行優(yōu)化時,因為也要通過測試用例,所以能保證這部分代碼的改動不會對調(diào)用它的其他模塊有影響。

        1.3 適用環(huán)境

        盡管從理論上講TDD可以在各種軟件開發(fā)項目中使用,但是在某些項目上可能感覺不到比較明顯的效率提升或質(zhì)量提高。

        TDD是面向?qū)ο蟮拈_發(fā)方式,如果項目不使用面向?qū)ο蟮脑O(shè)計和開發(fā),則不適合使用TDD。

        GUI等難以進(jìn)行單元測試或進(jìn)行測試比較麻煩的部分也不適宜使用TDD的開發(fā)方式。因為TDD是以測試驅(qū)動的,雖然測試是軟件交付內(nèi)容的一部分,但是如果測試部分的難度大于軟件功能的開發(fā),且消耗更多的時間,那么就無法再提高整個項目的開發(fā)效率。

        TDD還對設(shè)計有很高的要求。設(shè)計的結(jié)果直接影響到測試用例,如果測試用例沒有被很好的設(shè)計,會嚴(yán)重影響軟件的開發(fā)。

        2 應(yīng)用

        2.1 開發(fā)流程

        2.1.1 設(shè)計

        在各種開發(fā)方式中,設(shè)計都是非常重要的一個環(huán)節(jié),它在很大程度上影響了軟件開發(fā)的難度、質(zhì)量。在傳統(tǒng)的軟件設(shè)計方法中,需求分析的結(jié)果通常以文檔、UML圖、偽代碼等方式表示出來。在TDD中,一般可以使用測試用例來表示各個模塊的功能說明。測試用例可以明確地表示每個功能模塊要完成的功能和期望得到的結(jié)果,且不容易產(chǎn)生誤解。

        設(shè)計單元測試用例時,一個比較難以把握的問題是測試用例的粒度。如果粒度太粗,可能會導(dǎo)致模塊內(nèi)實現(xiàn)的功能過多、難以測試等問題,并沒有達(dá)到TDD的效果。TDD一般提倡小步前進(jìn)。但也不能太細(xì)。粒度太細(xì)可能導(dǎo)致測試用例數(shù)量過多、維護(hù)測試用例過于麻煩。

        2.1.2 創(chuàng)建測試用例

        設(shè)計完測試用例以后,要實現(xiàn)測試用例。測試用例將保證功能代碼完成了設(shè)計的功能。在沒有寫功能代碼前,測試用例應(yīng)該是無法通過的,因為需要完成的功能沒有完成。

        測試用例還在一定程度上起到了文檔的作用。在TDD的開發(fā)方式中,測試用例可以說明某個功能模塊要完成的功能和它具有的接口。測試用例對于功能代碼的測試相當(dāng)于黑盒測試,不用了解模塊內(nèi)部的實現(xiàn),只管它是否滿足需求。對于模塊內(nèi)部要完成的功能,一般不寫測試用例。如要進(jìn)行模塊內(nèi)部的測試可以通過開發(fā)工具的調(diào)試功能來完成。測試用例主要測試模塊的功能。

        2.1.3 編寫功能代碼

        TDD的通常做法是測試代碼未編寫完成前是不寫功能代碼的,并且測試代碼寫完后是無法通過測試的。此時需要編寫功能代碼通過測試代碼。值得注意的是,功能代碼并不是越復(fù)雜越完善越好。最好的做法是所寫的功能代碼剛好通過所有測試用例。

        編寫完代碼后要運行所有測試用例并保證全部通過。如果沒有全部通過,就要對代碼進(jìn)行修改,直到通過所有測試。不應(yīng)該在測試沒有全部通過的情況下去編寫其它代碼。

        2.1.4 重構(gòu)

        常有人質(zhì)疑TDD開發(fā)方式所開發(fā)的軟件質(zhì)量。由于TDD在編寫功能代碼時只注重于快速完成代碼并通過所有測試,并沒有對代碼的質(zhì)量進(jìn)行檢驗,所以這里面的代碼質(zhì)量無法得到保證。這樣的質(zhì)疑并不是沒有道理。但是TDD的開發(fā)方式中也有比較重要的一個環(huán)節(jié),重構(gòu)。

        在面向?qū)ο蟮拈_發(fā)方式中,幾乎都會比較重視重構(gòu)。它能提高代碼的質(zhì)量,利于以后對代碼的修改和維護(hù)。采用TDD的開發(fā)方式也應(yīng)該有重構(gòu)。重構(gòu)不應(yīng)該修改與外部的接口而應(yīng)該重點優(yōu)化內(nèi)部實現(xiàn)的代碼。TDD有測試來驗證重構(gòu)后的代碼不會影響外部接口。

        在進(jìn)行代碼修改以后,要重新運行所有測試,并保證全部通過。重構(gòu)不是一次就能完成的,可能會多次進(jìn)行,并在以后對項目進(jìn)行修改的時候進(jìn)行。這一步常被很多開發(fā)者忽略,因為重構(gòu)不增加新的功能,在運行時可能不會有明顯的感覺。但對于提高代碼質(zhì)量非常有幫助。無論是否使用TDD都應(yīng)該重視重構(gòu)。

        2.1.5 交付和部署

        當(dāng)程序代碼編寫完成,并通過各種測試以后,軟件已經(jīng)完成了客戶需要的功能。由于TDD在開發(fā)過程中用測試用例代替了部分需求說明文檔和規(guī)格文檔,省去了前期需求變化的過程中修改文檔的麻煩。在交付時可能需要補(bǔ)齊文檔。

        今后如果需要對軟件進(jìn)行修改,也只需要重復(fù)上述步驟。但也要保證所寫的代碼盡量簡單,測試覆蓋率要高,功能代碼需要通過全部測試。

        2.2 應(yīng)對需求變化

        敏捷軟件開發(fā)是要能夠快速應(yīng)對需求變化的。TDD作為極限編程中倡導(dǎo)的軟件開發(fā)方法也應(yīng)該能夠快速應(yīng)對需求變化。

        除了敏捷軟件開發(fā)中要求的開發(fā)人員互相信任、經(jīng)常面對面討論等要求可以快速響應(yīng)需求變化外。當(dāng)使用TDD時,如果需求發(fā)生變化,則要設(shè)計和修改測試代碼以反應(yīng)需求的變化。當(dāng)測試代碼改變后,可以根據(jù)運行測試后的結(jié)果快速的發(fā)現(xiàn)哪些模塊需要更改。只要修改代碼使測試通過就可以了,而不用擔(dān)心是不是又有其它地方出現(xiàn)了bug。TDD一個很大的好處也就是開發(fā)人員有明確的目標(biāo),代碼可以馬上進(jìn)行測試并保證完成想要達(dá)到的功能,并通過測試覆蓋率了解到是否有多余的代碼。

        2.3 工具

        2.3.1 JUnit

        JUnit是一個開源的測試框架,主要是用來對Java程序進(jìn)行自動化單元測試的[4]。它能很好地集成在Eclipse中對代碼進(jìn)行測試。它的主要功能有對測試結(jié)果斷言、共享測試數(shù)據(jù)、運行測試。

        JUnit是xUnit中的一個,其它類似的還有NUnit用于測試.NET代碼,CppUnit測試C++代碼。

        2.3.2 EasyMock

        EasyMock是一個開源的生成Mock對象的工具,可以隔離測試對象與其它輔助的對象。它可以模擬出一個對象并記錄它期望進(jìn)行的行為和結(jié)果。在回放狀態(tài)調(diào)用它以進(jìn)行測試。還可以對Mock的對象進(jìn)行驗證。

        3 結(jié)束語

        本文介紹了測試驅(qū)動開發(fā)的一些特點和實現(xiàn)過程,并介紹了相關(guān)工具。通過與持續(xù)集成等其它敏捷軟件開發(fā)工具和技術(shù)結(jié)合,可以較好地應(yīng)對需求變化、及時發(fā)現(xiàn)問題并保證軟件質(zhì)量。

        參考文獻(xiàn)

        [1]陳立群.測試驅(qū)動開發(fā)在J2EE項目中的全程實踐[J].計算機(jī)工程與科學(xué),2008,30(4):86-88.

        [2]侯典薈.基于.NET環(huán)境測試驅(qū)動開發(fā)研究與應(yīng)用[D].大連理工大學(xué),2006.

        [3]Janzen D S, Saiedian H. On the influence of test-driven development on software design[C]. Turtle Bay,HI,United states: Institute of Electrical and Electronics Engineers Inc,2006.

        [4]白凱,崔冬華.基于JUnit自動化單元測試的研究[J].計算機(jī)與數(shù)字工程,2010,38(2):52-54,103.

        亚洲精品熟女乱色一区| 伊人狠狠色丁香婷婷综合| 欧美极品美女| 吃下面吃胸在线看无码| 亚洲一区二区懂色av| 亚洲综合色无码| 98久9在线 | 免费| 亚洲色偷拍一区二区三区| 中文字幕一区二区三区精品在线| 一区二区三区精品少妇| 99久久综合精品五月天| 国产精品无码专区综合网| 四虎在线中文字幕一区| 亚洲国产a∨无码中文777| 久久综合国产乱子伦精品免费| 亚洲熟妇色xxxxx欧美老妇| 国产在线精彩自拍视频| 性人久久久久| 亚洲欧美在线观看| 国产91在线精品福利| 亚洲性日韩一区二区三区| 成在线人av免费无码高潮喷水| 美女自卫慰黄网站| 国产内射视频在线播放| 一本一道久久综合久久| 亚洲精品熟女国产| 日子2020一区二区免费视频| 色视频日本一区二区三区| 老鸭窝视频在线观看| 久久久久国产精品熟女影院 | 自拍偷拍另类三级三色四色| 亚洲 欧美 偷自乱 图片| 最近最好的中文字幕2019免费| 久久久久亚洲AV片无码乐播| 日韩精品极品系列在线免费视频| 天天躁夜夜躁狠狠躁2021| 亚洲一级毛片免费在线观看| 日本成年少妇人妻中文字幕| 亚洲自偷精品视频自拍| 亚洲 欧美 影音先锋| 日韩人妻高清福利视频|