999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

TDD測試驅動開發模式在軟件工程開發實踐中的辯證思考

2017-11-09 01:03:26謝宇飛彭霖
電子技術與軟件工程 2017年19期

謝宇飛++彭霖

摘 要TDD測試驅動開發模式本世紀初興起以來,一直在爭論中前進發展,支持者奉其為圭臬,反對者棄之如敝履。客觀來說,TDD模式自有其優勢,也有其問題,在多年的開發實踐中,提出了一系列分支開發模式。在軟件工程開發實踐中,一方面,要辯證的看待該技術模式的優缺點,不能偏聽偏信;另一方面,也要根據自身項目的組織結構、資金配置、人力資源、時間要求來選擇開發模式。

【關鍵詞】TDD 測試驅動開發 軟件工程

TDD全稱Test Driven Development,中文翻譯為測試驅動開發,上世紀九十年代中后期發起于敏捷開發(Agile Development)思想中的極限編程(Extreme programming)理念。由Kent Beck在2002年出版的《Test Driven Development: By Example》和David Astels在2003年出版的《Test-Driven Development: A Practical Guide: A Practical Guide》共同奠定了TDD的理論基礎和實踐模型。

從正式提出至今,TDD模式一直存在著兩種不同的應用觀點。一種觀點認為TDD模式是一種軟件工程規范而不是簡單的技術驗證,換而言之,TDD的基本思路就是通過測試來推動整個開發的進行,并不只是單純的測試工作。另一種觀點認為TDD是一種編程技術,目標是編寫干凈的代碼,極限編程三位創始人之一的Ron Jeffries(另兩位是Kent Beck 和Ward Cunningham)是這種觀點的主要支持者。這兩種觀點并沒有絕對的對與錯,在生產、教學實踐中體現出了它們在不同條件、環境下各自的價值。

2004年David Astels的《Test Driven Development: By Example》被翻譯成中文,TDD模式開始在我國傳播,并在2006年-2010年受到了計算機學界和信息產業界的普遍關注和廣泛討論。在這場實踐檢驗理論的討論中,學界和大企業普遍對TDD模式持認可態度,而中小企業普遍表示這種模式并不切實際。2011年,朱少民撰文《敏捷測試的思考和新發展》提出,TDD實踐還存在較大困難,有比較多的爭議,TDD模式進一步向ATDD、BDD等模式適應性轉型,并提出測試開發模式應向本源回歸,不拘泥于某種單一模式,應該持續質量反饋、持續改進方法、不斷解決問題。2014年,David Hansson(Ruby on Rails與Instiki的創始人),在自己的個人網站發表文章《TDD is dead. Long live testing.》否定TTD模式在軟件工程領域的實踐意義,從而引發了大量的討論直至今天。下面關于TDD模式的優勢和問題,我們通過正反兩方面辯證的來分析思考,應該就能夠對TDD模式有一個更加理性和準確的認識。

1 TDD的理論模型和優勢特性

1.1 TDD的理論模型

TDD模式在理念上是以用戶需求為導向,通過各級各類測試確保所有的需求都能被照顧到,在代碼不斷增加和重構的過程中,檢查所有的功能是否正確。從開發流程上來說,首先根據需求編寫一個測試,此時因為沒有實現該功能,所以運行這個測試可預知其失敗。然后編寫最少量的代碼不斷迭代重復,直到測試通過為止。最后,根據簡單代碼的重復情況和代碼之間的合理結構,考慮是否需要重構代碼。簡而言之,TDD是戴兩頂帽子思考的開發方式:先戴上實現功能的帽子,在測試的輔助下,快速實現其功能;再戴上重構的帽子,在測試的保護下,通過去除冗余的代碼,提高代碼質量。測試驅動著整個開發過程:首先,驅動代碼的設計和功能的實現;其后,驅動代碼的再設計和重構。如圖1所示。

1.2 TDD的優勢特性

1.2.1 TDD在客觀上提升了代碼的質量

技術人員編寫剛好滿足需求又能通過測試的代碼,將代碼量和代碼本身的出錯概率降至最低,客觀上保證了代碼的質量。

1.2.2 TDD在主觀上要求了需求和開發的一致

測試是以業務需求為導向,促進了技術人員和業務客戶之間的交流,所有需求測試能夠通過,也即說明業務功能全部滿足。

1.2.3 TDD在構架上保證了簡潔高效的類、庫和API

由測試導向的功能調整,使得所有類、庫和API都在圍繞快速實現功能來設計,并且實現后馬上測試,各項設計能夠馬上進行調整。

1.2.4 TDD在開發上促進了代碼優化重構

通過各層級的測試,有助于從系統中清除大量累計產生的寄生代碼,整個開發流程在測試、通過、重構之間循環流轉,螺旋漸進式的修正保證了代碼不斷優化重構,并且避免了遞歸錯誤的出現。

2 TDD的實踐問題和發展方向

2.1 TDD的實踐問題

以上關于TDD相對于傳統軟件工程開發先寫功能再寫測試的模式,無疑是具有先進性的,但是事物的兩面性告訴我們,TDD模式也不是那么美好,更不是免費的午餐。在IT行業的生產實踐中,特別是小微企業的實際開發工作中,很多程序員們抱怨——“自從用了TDD,工作量更大了”。TDD模式對于技術人員,有太多難以確定的問題,導致TDD模式難以使用、難以推廣,理論強、實踐弱的問題比較突出。

2.1.1 測試本身難以確定

TDD是以需求為導向來確定測試,再以測試來規范功能開發。這里的問題就在于在開發工作中,業務需求是不確定的,開發最大的問題恰恰是很多時候客戶自己都不確定需要什么樣的功能,大部分情況是由技術人員做個初略樣品,再由客戶提出修改意見,如此反復迭代,甚至客戶自己會經常性推翻自己前期的需求,造成業務需求無從確定,也導致測試本身的確定就是個問題。

2.1.2 測試范圍難以確定

TDD既然是測試規范功能,那么測試范圍就非常重要,太大會導致不知道錯誤在哪,太小會導致測試變成了對應的功能模塊,改改就能用,那還要測試干什么。所以好的TDD要求技術人員具有完備的測試用例的能力,這項能力需要豐富的理論與長期的實踐,換而言之,能把TDD用好的人基本上是IT行業的高水平專家。那么這里出現了第一個模式悖論,如果使用門檻這么高、上手難度那么大,那么對于廣大中小技術團隊、技術人員,TDD的推廣意義在哪里。endprint

2.1.3 測試目的難以確定

從表面看TDD測試的目的顯然是為了實現功能開發,滿足業務需求,而在實際工作中,由于TDD強調以最少的代碼以滿足測試通過的思路,很容易致使測試通過成為測試的目的。當大量的修改撲面而至,測試通過成為驗證修改完成的主要指標,那么為了測試而測試,就會取代為了功能而測試。

2.1.4 測試方向難以確定

在傳統的軟件開發瀑布流模式中,開發方向自上而下,一環扣一環,每一個環節都依賴于前面那個環節的正確性。那么TDD的方向只能依賴于不斷變化的需求,既然前置條件就是需求在不斷變化,那么誰也確定不了后期的方向會和前期的方向一致,換個角度說,就是誰也無法保證前面的測試會適用與后面的功能。

2.2 TDD的發展方向

TDD模式在理論的美好和實踐的困難這對矛盾中不斷發展,為了增強其適用性和易用性,TDD逐步發展為ATDD與UTDD兩個分支模式。通不過不斷深化和細化測試模式,TDD已經不再是一種技術標準,更體現了其業務規范的一面,也不再是一種方法,而更多的是一種在軟件開發過程中的模式理念,構成了一套更符合實際需求、更容易實踐掌握的敏捷測試框架。如圖2所示。

2.2.1 ATDD(Acceptance Test Driven Development)

驗收驅動測試開發,首先業務分析師或者測試工程師根據客戶需求編寫驗收測試用例,然后開發人員通過驗收測試來理解需求和驗收條件,并編寫實現代碼直到驗收測試用例通過。

由于驗收方法和類型也是多種多樣的,所以根據驗收方法和類型的不同,ATDD其實是包含以軟件的行為為驗收標準的BDD(Behavior Driven Development)、以特定的實例數據為驗收標準的EDD(Example Driven Development),以特征模型為驗收標準的FDD(Feature Driven Development)、以Web Service API消費者提出API契約來驅動API提供者開發API的CDCD(Consumer Driven Contract Development)等各種的實踐方法。

2.2.2 UTDD(Unit Test Driven Development)

單元驅動測試開發,首先將測試分為整體功能測試和功能模塊單元測試,編寫一個功能測試,“編寫代碼讓它通過”:編寫一個或多個單元測試,然后進入“單元測試 / 編寫代碼”循環,直到單元測試通過為止。然后回到功能測試,查看是否有進展,這一步還可以多編寫一些應用代碼,再編寫更多的單元測試,如此一直循環下去。

3 結語

縱觀對TDD模式近十年來的爭論,也可以看成是理論派和實踐派之間的爭論,是大中企業和小微團隊之間的分歧,更是無限神話和一味貶低之間的矛盾。技術、市場、需要一直在進步和變化的當下,任何一種開發理論、開發模式都不可能“一招鮮吃遍天”,盲目的吹捧某種技術神而明之,或一概否定某件事物的進步之處,都是不實事求是的表現。TDD模式當然不是萬能鑰匙,一用就能馬上解決軟件開發中的任何問題,一種技術、理念、模式,只要它能夠不斷的發展、變革、修正,我們就應該看到它先進的地方和不足之處。至于某個具體項目需要什么樣的開發模式,則要根據軟件工程項目的資金、人力、時間、組織等實際情況,進行合理的選擇。

參考文獻

[1]Beck,K.Test Driven Development: By Example [M].Addison-Wesley Professional,2002.

[2]Astels,D.Test-Driven Development:A Practical Guide: A Practical Guide [M]. Prentice Hall,2003.

[3]Martin,R.C.Agile Software Development, Principles,Patterns, and Practices[M].Prentice Hall PTR,2002.

[4]Ambler,S.W.Introduction to Test Driven Development (TDD)[EB/OL]. [2017-6-30].http://www.agiledata.org/essays/tdd.html.

[5]朱少民.敏捷測試的思考和新發展[J].程序員,2011(09):37-40.

[6]Hansson,D.H.TDD is dead.Long live testing[EB/OL].(2014-4-23) [2017-6-30].http://david.heinemeierhansson.com/2014/tdd-is-dead-long-live-testing.html.

[7]Percival,H.J.W.Test-Driven Development with Python 2e[M]. O'Reilly Media,Inc,USA,2017.

[8]賈洪峰,李菊彥.Bender,J, McWherter,J.C#測試驅動開發[M].北京:清華大學出版社,2012.

作者簡介

謝宇飛,男,講師,軟件工程碩士,教學方向為計算機編程語言,研究方向為數據挖掘、智能計算。

作者單位

江西應用技術職業學院 江西省贛州市 341000endprint

主站蜘蛛池模板: 狠狠v日韩v欧美v| 久久女人网| 免费又爽又刺激高潮网址 | 成人蜜桃网| 欧美日韩精品一区二区视频| 亚洲一区二区无码视频| 欧美精品一二三区| 国产无套粉嫩白浆| 高清免费毛片| 日韩最新中文字幕| 日韩福利在线观看| 亚洲性影院| 国产亚洲欧美在线专区| 国产成年无码AⅤ片在线| 国产成在线观看免费视频| 亚洲香蕉久久| 亚洲A∨无码精品午夜在线观看| 538精品在线观看| 毛片在线看网站| 亚洲黄色成人| 亚洲αv毛片| 亚洲黄色成人| 狠狠色综合久久狠狠色综合| 第九色区aⅴ天堂久久香| 亚洲精品国产成人7777| 日韩精品中文字幕一区三区| 无码精品国产VA在线观看DVD| 国产男女XX00免费观看| 精品一区二区三区中文字幕| 国产理论一区| 老熟妇喷水一区二区三区| 日本欧美一二三区色视频| 国产精品人人做人人爽人人添| 囯产av无码片毛片一级| 福利视频一区| 国产爽爽视频| 国产sm重味一区二区三区| 91久久大香线蕉| 日韩黄色在线| 人人澡人人爽欧美一区| 99久久国产综合精品2020| 成人福利在线看| 国产精选自拍| 欧美亚洲一区二区三区在线| 操美女免费网站| 成年网址网站在线观看| 国产av剧情无码精品色午夜| 亚洲精品欧美日本中文字幕| 91系列在线观看| 天堂岛国av无码免费无禁网站| 国产一区三区二区中文在线| 在线欧美日韩| 无码视频国产精品一区二区 | 亚洲AV无码一二区三区在线播放| 国产精品天干天干在线观看| 久久精品aⅴ无码中文字幕| 免费无遮挡AV| 亚洲大学生视频在线播放| 欧美在线导航| 67194亚洲无码| 日韩中文字幕亚洲无线码| 亚洲欧洲国产成人综合不卡| 欧美精品亚洲日韩a| 在线看片国产| 国产欧美另类| 麻豆精品在线视频| 91丝袜美腿高跟国产极品老师| 伊人查蕉在线观看国产精品| 成人免费一级片| 啊嗯不日本网站| 欧美日本激情| 97在线免费| 九九久久精品免费观看| 亚洲女人在线| 婷婷丁香色| 中文字幕 91| 99re免费视频| 米奇精品一区二区三区| 国产制服丝袜91在线| 久久久受www免费人成| 米奇精品一区二区三区| 久久精品这里只有精99品|