軟件測試面試題:說說你對TDD(測試驅(qū)動開發(fā))的理解?
很多公司在面測試中高級崗時,都會不同程度地問到“有沒有了解過TDD”“你認(rèn)為TDD可以解決什么問題”或者“說說測試驅(qū)動開發(fā)的流程”等等,即使公司并不會用到此開發(fā)流程,面試官也會通過你對這個相對還比較“陌生”的概念的講述來了解你對一些測試相關(guān)概念的熟知程度以及測試思想的見解。
什么是TDD(測試驅(qū)動開發(fā))?
百科中對測試驅(qū)動開發(fā)的介紹如下,測試驅(qū)動開發(fā),英文全稱是Test-Driven Development,簡稱為TDD,它是一種不同于傳統(tǒng)軟件開發(fā)流程的新型的開發(fā)方法。它要求在編寫某個功能的代碼之前先編寫好測試代碼,然后只編寫使測試通過的功能代碼,通過測試來推動整個開發(fā)的進行。這有助于編寫簡潔可用和高質(zhì)量的代碼,并加速開發(fā)過程。
測試驅(qū)動開發(fā)并不是在近幾年才發(fā)展起來的一種方法,其最早是在極限編程方法論中就開始有了這種思想的實踐過程 ,市面上很多《極限編程》、《持續(xù)集成》、《測試驅(qū)動開發(fā)》的書籍中都有不同角度的介紹。
簡單來說,測試驅(qū)動開發(fā)是針對一些小功能點甚至小到一個方法的敏捷開發(fā)實踐。傳統(tǒng)的開發(fā)模式是開發(fā)人員編寫完業(yè)務(wù)代碼后再開始編寫單元測試腳本來驗證上一步的業(yè)務(wù)功能代碼,而測試驅(qū)動開發(fā)的中心思想?yún)s是先根據(jù)需求文檔來編寫測試代碼(即先編寫單元測試腳本),并思考怎樣對這些要實現(xiàn)的業(yè)務(wù)功能作驗證,等編寫了足夠的單元測試腳本后,再繼續(xù)編寫業(yè)務(wù)功能代碼,通過測試后,再繼續(xù)迭代以上的過程一直到編寫完成所有的業(yè)務(wù)需求功能模塊。
單元測試
從上引出的一個概念-單元測試,這里簡單說明下。單元測試一般是由開發(fā)者在編寫業(yè)務(wù)功能代碼時, 為了驗證自己開發(fā)的每個代碼單元而編寫的一種獨立的測試。完成單元測試后,開發(fā)人員會出一份單元測試報告以及單元測試覆蓋率報告, 測試人員需要以以上報告作為設(shè)計功能測試用例的依據(jù)。
測試驅(qū)動開發(fā)的流程
可以從以下測試驅(qū)動開發(fā)周期圖中清晰地看出核心流程節(jié)點。測試驅(qū)動開發(fā)的口號是不可運行/可運行/重構(gòu)
測試驅(qū)動開發(fā)與傳統(tǒng)開發(fā)的區(qū)別
傳統(tǒng)開發(fā)模式下編寫的單元測試腳本其實還是為了驗證功能,仍屬于測試的一種形式。而測試驅(qū)動開發(fā)已經(jīng)不再是一種簡單的測試行為了,準(zhǔn)確地說,它是一種設(shè)計行為。測試驅(qū)動開發(fā)類似于是對一段代碼的用法而編寫的設(shè)計規(guī)格說明,可以從編寫代碼的內(nèi)聚性、可測性、可復(fù)用性以及缺陷密度、接口的簡易水平看出。在測試驅(qū)動開發(fā)中,以需求的剖析、用戶業(yè)務(wù)功能的理解都是層層遞進的,是可以逐步細(xì)化到代碼級別的,而這樣的過程也恰恰提高了測試的覆蓋率,同時能從根本上解決一些因業(yè)務(wù)邏輯設(shè)計錯誤而導(dǎo)致的后期大量的缺陷修復(fù)工作。
測試驅(qū)動開發(fā)的優(yōu)缺點
從以上的TDD周期圖中也可以看出,測試驅(qū)動開發(fā)最大的優(yōu)點就是重構(gòu)了,不斷迭代,不斷地對現(xiàn)有代碼進行重構(gòu),不斷優(yōu)化代碼的內(nèi)部結(jié)構(gòu),最終實現(xiàn)對整體代碼的改進。以此不斷減少一些設(shè)計冗余、代碼冗余、接口復(fù)雜度等等。
另外,對于一些前期需求不明確,甚至需求信息量特別少,且后期又會有大量業(yè)務(wù)功能修改時,傳統(tǒng)的開發(fā)模式需要加班加點以此趕工開發(fā),測試,缺陷修復(fù),人工、時間成本且不說,最重要的產(chǎn)品質(zhì)量也無法得到保證。當(dāng)然 ,這種模式下也最適合采用原型法、敏捷開發(fā)模式了,畢竟擁抱變化是敏捷的宗旨 。而測試驅(qū)動開發(fā)也是敏捷開發(fā)模式的基礎(chǔ),這樣無論是來自客戶的緊急需求還是項目團隊的一次技術(shù)改革,都可以通過重構(gòu)設(shè)計、增加測試腳本來實現(xiàn)了。
測試驅(qū)動開發(fā)的應(yīng)用領(lǐng)域
以上分析了測試驅(qū)動開發(fā)的諸多優(yōu)勢,但目前并沒有被大量廣泛的使用起來,一來這是一種技術(shù)或管理方式上的變革需要慢慢被大眾所熟知 ; 二來需要足夠?qū)I(yè)技能、專業(yè)素質(zhì)的人才來保證整個過程的通暢與專業(yè); 第三,前期需要一定的投入,而它產(chǎn)生的輸出足以解決目前多數(shù)企業(yè)中遇到的質(zhì)量、效率、成本等難題,所以選擇是一步,真正能夠嚴(yán)格執(zhí)行下去的很少。
結(jié)尾
總之,如果是在面試過程中,可以通過以上幾方面分步來講解自己對測試驅(qū)動開發(fā)的認(rèn)識,如果恰巧自己也在敏捷團隊里有過工作經(jīng)歷,更可以添磚加瓦,加上自己的親自經(jīng)驗,一定會給面試官一個思維清晰,測試經(jīng)驗豐富的良好印象。#軟件測試#