A Survey on Unit Testing Practices and Problems
來(lái)自2015年的一篇論文,研究者通過(guò)網(wǎng)絡(luò)在線平臺(tái)對(duì)單元測(cè)試相關(guān)的問(wèn)題進(jìn)行了調(diào)查 。主要問(wèn)了五個(gè)問(wèn)題- RQ1:是什么促使開(kāi)發(fā)人員編寫(xiě)單元測(cè)試?
- RQ2:?jiǎn)卧獪y(cè)試中的最主要的活動(dòng)是什么?
- RQ3:開(kāi)發(fā)人員如何編寫(xiě)單元測(cè)試?
- RQ4:開(kāi)發(fā)人員如何使用自動(dòng)化單元測(cè)試生成?
- RQ5:?jiǎn)卧獪y(cè)試的難點(diǎn)是什么?如何改進(jìn)單元測(cè)試流程?
樣本情況

圖 2
這一次調(diào)查涉及到了全球的225位軟件工程師 , 使用不同的語(yǔ)言,分布在29個(gè)國(guó)家 。

圖3
圖2和圖3顯示了這一次調(diào)查樣本的人口統(tǒng)計(jì)數(shù)據(jù) 。
- 受訪者的年齡范圍從14歲(AYTM受訪者的最低年齡)到72歲 , 其中37%的受訪者年齡在25至35歲之間 。
- 盡管也有其他領(lǐng)域的受訪者但是大多數(shù)受訪者在IT領(lǐng)域工作(55.5%) 。
- 最多的受訪者(59.06%)來(lái)自美國(guó),其次是印度 。總的來(lái)說(shuō),樣本具有一定的全球性來(lái)自歐洲(32),北美(143)和南美(13) , 非洲(1),澳大利亞(1)和亞洲(35) 。大多數(shù)受訪者擁有4年制學(xué)位或?qū)I(yè)學(xué)位 。
樣本過(guò)濾
在進(jìn)行調(diào)查時(shí),從受訪者中獲得良好的響應(yīng)樣本可能是一項(xiàng)具有挑戰(zhàn)性的任務(wù) 。為了更好的得到真實(shí)的結(jié)果 , 我們對(duì)調(diào)查者設(shè)置了三個(gè)資格測(cè)試的問(wèn)題,以確保是他們是真正的軟件工程師,并且有開(kāi)發(fā)經(jīng)驗(yàn),接觸過(guò)單元測(cè)試 。資格測(cè)試的目的不是為了篩選出單元測(cè)試專家 。相反 , 我們的調(diào)查應(yīng)該針對(duì)所有軟件開(kāi)發(fā)人員 , 無(wú)論好壞 。然而,我們希望忽略試圖欺騙測(cè)試系統(tǒng)以收取報(bào)酬的潛在受訪者 。為此,我們的假設(shè)是,任何誠(chéng)實(shí)回答問(wèn)題的軟件開(kāi)發(fā)人員應(yīng)該能夠至少正確分類三個(gè)陳述中的兩個(gè) 。
不到四分之一的受訪者(22%)全部正確分類了所有三個(gè)陳述;76%至少有兩個(gè)問(wèn)題是正確的 , 88%至少有一個(gè)問(wèn)題是正確的 。當(dāng)然 , 一些給出錯(cuò)誤答案的人可能受訪者只是不那么有能力;
例如,超過(guò)10年編程經(jīng)驗(yàn)的受訪者中有32%全部正確回答,而對(duì)于經(jīng)驗(yàn)不足三年的受訪者,這個(gè)數(shù)字僅為14% 。但是,假設(shè)一個(gè)真正的軟件開(kāi)發(fā)人員閱讀問(wèn)題并正確回答資格測(cè)試題而不是隨機(jī)回答,應(yīng)該能夠至少獲得兩個(gè)正確答案,因此沒(méi)有或只有一個(gè)正確答案的24%的響應(yīng)是“可疑的” 。雖然看起來(lái)資格測(cè)試問(wèn)題(“您是否是軟件開(kāi)發(fā)人員?”)在過(guò)濾不可靠的響應(yīng)方面做得相對(duì)不錯(cuò),但我們的結(jié)論是這個(gè)問(wèn)題還不夠,至少需要回答對(duì)兩個(gè)問(wèn)題 。因此,我們僅使用76%的數(shù)據(jù)(即225名受訪者中的171名)的數(shù)據(jù) 。
為了分析受訪者的可靠性,我們計(jì)算了有序數(shù)據(jù)的組內(nèi)相關(guān)性(ICC , 使用雙向模型和平均值單位以及一致性類型ICC測(cè)量) , 以及在調(diào)查中使用無(wú)名類型問(wèn)題的Fleiss Kappa(僅針對(duì)171個(gè)合格的回答) 。對(duì)數(shù)據(jù)進(jìn)行了數(shù)據(jù)分析,證明結(jié)果是相對(duì)比較客觀的 。
RQ1: 是什么促使開(kāi)發(fā)人員編寫(xiě)單元測(cè)試?
對(duì)于第一類問(wèn)題,調(diào)查問(wèn)卷一共涉及了五個(gè)方面的因素,每一個(gè)因素分為七個(gè)等級(jí),從影響非常大,到幾乎沒(méi)有影響 。
圖 4
從結(jié)果來(lái)看開(kāi)發(fā)人員寫(xiě)單元測(cè)試的動(dòng)機(jī)主要來(lái)源于管理要求和研發(fā)人員自己覺(jué)得有用兩個(gè)重要因素 。
RQ2: 單元測(cè)試中的主要活動(dòng)是什么?
針對(duì)第二個(gè)問(wèn)題,怎么評(píng)估單元測(cè)試在整個(gè)開(kāi)發(fā)過(guò)程中花了多少時(shí)間其實(shí)是一個(gè)非常難的話題,我們沒(méi)有什么直接的辦法,所以將問(wèn)題拆分成為兩部分來(lái)綜合分析在軟件開(kāi)發(fā)過(guò)程中,您是如何分配時(shí)間的

圖5
上圖2演示了統(tǒng)計(jì)樣本中的概率分布圖 。這個(gè)圖顯示了結(jié)果的最小值、最大值以及四分?jǐn)?shù)數(shù)據(jù) 。
- 33.04的平均時(shí)間用于寫(xiě)新的代碼
- 25.32%的時(shí)間用于調(diào)試
- 17.4%的時(shí)間用于寫(xiě)單元測(cè)試
盡管從所列出的活動(dòng)中,編寫(xiě)測(cè)試被認(rèn)為是花費(fèi)時(shí)間最少的,但花費(fèi)在編寫(xiě)新測(cè)試上的時(shí)間仍然相當(dāng)可觀,花費(fèi)在編寫(xiě)新測(cè)試上的時(shí)間幾乎是編寫(xiě)新代碼所花費(fèi)時(shí)間的一半 。這讓人想起經(jīng)常引用的估計(jì)值 , 即50%的軟件開(kāi)發(fā)時(shí)間用于測(cè)試 。
在編寫(xiě)代碼和測(cè)試方面 , 這可能并不是真的 , 可以推測(cè)需要花更多的時(shí)間編寫(xiě)測(cè)試 。另一方面,更廣泛的術(shù)語(yǔ)“測(cè)試”將包括處理失敗的測(cè)試,即調(diào)試和修復(fù),從這個(gè)意義上說(shuō),開(kāi)發(fā)人員認(rèn)為他們花費(fèi)了接近一半(42.72%)的時(shí)間用于與測(cè)試相關(guān)的活動(dòng) 。
值得注意的是,有些人在編寫(xiě)新測(cè)試方面花費(fèi)的時(shí)間非常極端;例如,有些受訪者花費(fèi)了更多的時(shí)間來(lái)進(jìn)行測(cè)試 。這些可能包括那些“測(cè)試依賴”的開(kāi)發(fā)人員 。更有趣的是,有21個(gè)受訪者聲稱根本不進(jìn)行測(cè)試—占所有(合格)受訪者的12%!
我們調(diào)查了比較不同開(kāi)發(fā)人員之間是否存在任何趨勢(shì),并通過(guò)計(jì)算中位數(shù)和95%置信區(qū)間來(lái)檢查組之間的統(tǒng)計(jì)差異 。置信區(qū)間是使用1,000次重采樣引導(dǎo)計(jì)算的[6] 。如果兩組的置信區(qū)間不重疊,則這兩組之間的差異具有統(tǒng)計(jì)學(xué)意義 。
在編程經(jīng)驗(yàn)方面,似乎存在一種輕微的趨勢(shì) , 隨著經(jīng)驗(yàn)的增加,編寫(xiě)測(cè)試的時(shí)間減少,但沒(méi)有顯著差異 。然而也可以合理地假設(shè):隨著經(jīng)驗(yàn)的增加,開(kāi)發(fā)人員在編寫(xiě)其測(cè)試方面變得更加高效或者更加隨意 。考慮到團(tuán)隊(duì)規(guī)模,似乎存在一種輕微趨勢(shì),即在較大的團(tuán)隊(duì)中花費(fèi)更多時(shí)間編寫(xiě)測(cè)試 。
當(dāng)一個(gè)測(cè)試失敗了之后,您一般會(huì)做什么?
接上一個(gè)調(diào)查的數(shù)據(jù)當(dāng)使用單元測(cè)試時(shí),調(diào)試和修復(fù)所花費(fèi)的時(shí)間(平均開(kāi)發(fā)時(shí)間的25.32%+17.40%)受每個(gè)失敗測(cè)試的影響,每個(gè)失敗測(cè)試都需要檢查和糾正操作 。
per
Fix the code until the test passes
47.2%
Repair the test to reflect changed behaviour
25.9%
Delete or comment out the failing test or assertion
15.6%
Ignore the failure
11.2%
為了研究這個(gè)問(wèn)題,我們要求受訪者估計(jì)他們?cè)诓煌闆r下對(duì)失敗的測(cè)試做出反應(yīng)的頻率 , 再以百分比的形式表示 。

圖6
上圖總結(jié)了回答結(jié)果:幾乎一半的情況下(平均為47.2%) , 開(kāi)發(fā)人員認(rèn)為單元測(cè)試實(shí)現(xiàn)了其目的并檢測(cè)出需要修復(fù)的錯(cuò)誤 。然而,在52.8%的情況下,他們認(rèn)為這不是這樣,他們要么修復(fù)測(cè)試,要么根本不處理失敗(通過(guò)刪除或忽略測(cè)試) 。這是合理的——在開(kāi)發(fā)過(guò)程中 , 功能可能會(huì)發(fā)生變化,測(cè)試需要更新 。根據(jù)使用場(chǎng)景不同,單元測(cè)試工具并不是“開(kāi)箱即用”的工具——它們產(chǎn)生需要維護(hù)的單元測(cè)試 。因此,不同方面的重要性,如可讀性和針對(duì)代碼變更的魯棒性,非常重要 。
同樣,結(jié)果在不同人之間是相當(dāng)一致的 。有超過(guò)10年經(jīng)驗(yàn)的開(kāi)發(fā)人員聲稱比其他人更經(jīng)常修復(fù)代碼,并聲稱比其他人更不經(jīng)常忽略或刪除失敗的測(cè)試 。另一方面,經(jīng)驗(yàn)不足的開(kāi)發(fā)人員聲稱在修復(fù)測(cè)試方面比其他經(jīng)驗(yàn)組花費(fèi)更多的時(shí)間 。值得注意的是 , 經(jīng)驗(yàn)不足的開(kāi)發(fā)人員(1-3年的經(jīng)驗(yàn))比擁有超過(guò)10年經(jīng)驗(yàn)的開(kāi)發(fā)人員更經(jīng)常刪除測(cè)試 。
RQ3: 開(kāi)發(fā)人員如何編寫(xiě)單元測(cè)試?
前面的研發(fā)已經(jīng)提到,研發(fā)人員使用了大約17.4%的時(shí)候來(lái)寫(xiě)單元測(cè)試 。我們現(xiàn)在來(lái)確定研發(fā)人員是怎么寫(xiě)單元測(cè)試的,我們將通過(guò)兩個(gè)問(wèn)題來(lái)確定這個(gè)問(wèn)題研發(fā)人員什么情況下會(huì)優(yōu)化單元測(cè)試?
將問(wèn)題分為七個(gè)維度,同樣以七個(gè)等級(jí)讓受訪者回答這個(gè)問(wèn)題 。最贊同的原因是“因?yàn)檎鎸?shí)場(chǎng)景需求” 。從結(jié)果來(lái)看 , 并沒(méi)有體現(xiàn)出明顯的差異 。
圖 7
單元測(cè)試的執(zhí)行速度和單元測(cè)試代碼重構(gòu)是開(kāi)發(fā)人員似乎認(rèn)為不太重要的方面,但總體而言,很難辨別真正的趨勢(shì) , 開(kāi)發(fā)人員至少在某種程度上聲稱他們正在優(yōu)化他們的測(cè)試以滿足一切使測(cè)試良好的東西 。
當(dāng)研發(fā)人員寫(xiě)測(cè)試的時(shí)候一般會(huì)應(yīng)用什么技術(shù)?
很多人都會(huì)說(shuō)自己使用了系統(tǒng)分析的技術(shù)來(lái)寫(xiě)單元測(cè)試,單元測(cè)試覆蓋率是在寫(xiě)單元測(cè)試過(guò)程中也比較重要的技術(shù)指標(biāo) 。這兩個(gè)看起來(lái)是有相關(guān)性的,如果使用單元測(cè)試覆蓋率的工具 , 就意味著有系統(tǒng)性的去提高單元測(cè)試覆蓋率 。測(cè)試驅(qū)動(dòng)開(kāi)發(fā)是第三個(gè)研發(fā)人員使用得比較多的技術(shù) 。
圖 8
有些令人驚訝的是,近54%的開(kāi)發(fā)人員回答說(shuō)至少“經(jīng)常”使用自動(dòng)化測(cè)試生成 。需要注意的是,正如我們從前期研究中看到的 , 自動(dòng)化測(cè)試生成的概念并不是開(kāi)發(fā)人員特別熟悉的,因此,與更常見(jiàn)的技術(shù)如代碼覆蓋率相比 , 開(kāi)發(fā)人員對(duì)自動(dòng)化測(cè)試生成的解釋不夠一致 。顯然,這表明從業(yè)者需要更好地了解自動(dòng)化單元測(cè)試研究的進(jìn)展 。然而,在與開(kāi)發(fā)人員的討論中,有時(shí)可以觀察到一種對(duì)自動(dòng)化測(cè)試生成的不滿意 。這個(gè)問(wèn)題的回答似乎表明這并不是普遍的意見(jiàn) , 開(kāi)發(fā)人員可能比常常被認(rèn)為的更加開(kāi)放,愿意接受自動(dòng)化測(cè)試生成 。
變體分析(Mutation Analysis)比其他技術(shù)應(yīng)用得少,但我們認(rèn)為變體分析是一項(xiàng)高級(jí)技術(shù) , 研究人員喜歡并支持它,但不會(huì)在實(shí)踐中被普及使用 。因此,69%的受訪者聲稱至少偶爾使用變體分析的結(jié)果令人驚訝:例如 , 變體測(cè)試社區(qū)的最近研討會(huì)上討論了為什么實(shí)踐者沒(méi)有采用變體分析 。盡管調(diào)查結(jié)果證實(shí)了變體分析并不像代碼覆蓋率那么常見(jiàn),但似乎變體分析在實(shí)踐中比人們所認(rèn)為的更為常見(jiàn) 。實(shí)際上,我們主觀地感覺(jué)到近年來(lái)各種語(yǔ)言的新變體分析工具的增加 , 這可以證實(shí)這一趨勢(shì) 。
RQ3:研發(fā)人員聲稱系統(tǒng)性的寫(xiě)單元測(cè)試,同時(shí)通過(guò)代碼覆蓋率 。但是并沒(méi)有統(tǒng)一的標(biāo)準(zhǔn)來(lái)定義怎么讓一個(gè)測(cè)試更好
RQ4: 開(kāi)發(fā)人員如何使用自動(dòng)化單元測(cè)試生成?
前面的問(wèn)題提到研發(fā)人員經(jīng)常使用自動(dòng)化單元測(cè)試工具,這個(gè)問(wèn)題是關(guān)于怎么使用自動(dòng)化單元測(cè)試工具的問(wèn)題 。
圖 9
上圖的統(tǒng)計(jì)得出了基本的信息
- 第一,自動(dòng)化單元測(cè)試主要是用來(lái)補(bǔ)全手工的單元測(cè)試能力 。但是這里面就引出了一些問(wèn)題 , 自動(dòng)化單元測(cè)試需要被維護(hù),如果錯(cuò)了需要去Debug看是什么原因?自動(dòng)生成的單元測(cè)試代碼也需要維護(hù) 。自動(dòng)生成的單元測(cè)試可能可讀性和可維護(hù)性非常低 , 這是一個(gè)巨大的挑戰(zhàn) 。
- 第二,自動(dòng)化單元測(cè)試一般用來(lái)發(fā)現(xiàn)崩潰的問(wèn)題 , 這也是自動(dòng)化單元測(cè)試效果最好的地方 。
然而,隨著更先進(jìn)(和可用)的自動(dòng)化測(cè)試生成工具的出現(xiàn),這種情況可能會(huì)發(fā)生變化:自動(dòng)化測(cè)試生成可以作為更好的方法來(lái)編寫(xiě)斷言或代碼 。回歸測(cè)試也排名較低,這似乎也是有問(wèn)題的,因?yàn)樵诨貧w測(cè)試中,以前的程序版本通常可以代替規(guī)范 , 從而在原則上允許全自動(dòng)化 。
RQ5: 單元測(cè)試的難點(diǎn)是什么?如何改進(jìn)單元測(cè)試流程
最后一個(gè)問(wèn)題是要弄明白寫(xiě)單元測(cè)試主要的困難和急需提高的關(guān)鍵點(diǎn)是什么 。編寫(xiě)新的單元測(cè)試最困難的是什么

圖 10
上圖展示了編寫(xiě)新單元測(cè)試的困難點(diǎn)是什么,下表總結(jié)了Borda排名 。與前面的問(wèn)題相比,這里的評(píng)價(jià)者之間的一致性具有更大的置信區(qū)間,這表明大家之間的意見(jiàn)不太一致 。

表 2
通過(guò)這個(gè)統(tǒng)計(jì)結(jié)果可以發(fā)現(xiàn) 。
- 寫(xiě)單元測(cè)試最困難的部分在于確定哪些代碼是需要進(jìn)行測(cè)試的 。考慮到大部分人寫(xiě)單元測(cè)試都會(huì)參考單元覆蓋率,所以這里面最重要的指導(dǎo)意見(jiàn)就是通過(guò)是否覆蓋代碼來(lái)決定哪些代碼需要寫(xiě)單元測(cè)試 。但是實(shí)際上 , 有一些很重要的代碼即使覆蓋率看起來(lái)很好 , 但也需要做更多,更深入的測(cè)試 。
- 排名第二的選擇是測(cè)試中要檢查什么 。即使自動(dòng)化測(cè)試生成工具可以解決生成實(shí)際測(cè)試的問(wèn)題,但開(kāi)發(fā)者仍然會(huì)遇到單元測(cè)試需要檢查什么的問(wèn)題 , 開(kāi)發(fā)者也將此問(wèn)題排名較高 。
- 第三個(gè)選擇是隔離待測(cè)試單元 。確實(shí),這也是自動(dòng)化單元測(cè)試生成的主要挑戰(zhàn)之一[7] , 但這個(gè)任務(wù)很少有工具支持(例如[1],[5]) 。測(cè)試生成文獻(xiàn)通常忽略了這個(gè)方面,因此在這方面有改進(jìn)軟件測(cè)試的機(jī)會(huì) 。這也引發(fā)了一個(gè)問(wèn)題 , 即這個(gè)問(wèn)題在多大程度上是由于開(kāi)發(fā)人員編寫(xiě)的代碼的可測(cè)試性較低(即不良設(shè)計(jì))引起的,是否通過(guò)改進(jìn)自動(dòng)化工具來(lái)處理不良代碼的方法是正確的?這是值得商榷的 。有趣的是,來(lái)自美國(guó)的受訪者將這個(gè)問(wèn)題排名較低(第4位;排名的差異是顯著的),而來(lái)自全球的受訪者將這個(gè)問(wèn)題排名較高(第2位) 。但是,對(duì)于美國(guó)受訪者,排名前四位的項(xiàng)目總體上更接近 。
如何對(duì)報(bào)錯(cuò)的測(cè)試最難的地方在哪里?

圖 11
- 排名第一選項(xiàng)是如果測(cè)試容易出現(xiàn)古怪的問(wèn)題(flaky),即有時(shí)失敗,有時(shí)不失敗 。例如,依賴于非確定性代碼、環(huán)境屬性或多線程代碼的測(cè)試本質(zhì)上很難調(diào)試,因此很難修復(fù) 。在某種程度上,古怪測(cè)試的問(wèn)題在于代碼,而不是測(cè)試,因此與之相關(guān)的排名第二的選擇是:如果測(cè)試代碼難以理解,則測(cè)試很難修復(fù) 。這并不出人意料 , 但從測(cè)試生成的角度來(lái)看,代碼通常必須被視為已知的,只能通過(guò)生成的測(cè)試實(shí)現(xiàn)改進(jìn) 。但是,確保生成的測(cè)試不會(huì)出現(xiàn)古怪的問(wèn)題是一個(gè)重要的問(wèn)題,我們不知道這方面有任何研究工作 。
對(duì)單元測(cè)試的總體映像
調(diào)查的最后一個(gè)問(wèn)題要求受訪者指明他們對(duì)單元測(cè)試的不同說(shuō)法的認(rèn)同程度 。圖12顯示了這些陳述和回答 。對(duì)于是否需要更多的工具支持來(lái)編寫(xiě)測(cè)試,開(kāi)發(fā)人員似乎非常愿意,并渴望看到更多工具 。
圖 12
有趣的是,人們普遍認(rèn)為開(kāi)發(fā)人員已經(jīng)有足夠多的測(cè)試,盡管仍有相當(dāng)多的開(kāi)發(fā)人員表示希望擁有更多測(cè)試 。
另一方面,認(rèn)可度最低的是關(guān)于開(kāi)發(fā)人員是否真正喜歡編寫(xiě)這些單元測(cè)試的問(wèn)題 。只有大約一半的開(kāi)發(fā)人員感覺(jué)寫(xiě)單元測(cè)試的體驗(yàn)還行,但這個(gè)地方明顯需要更多的提高;
提供幫助開(kāi)發(fā)人員的高級(jí)工具可能是使測(cè)試更加愉快和有成效的一種方式,例如提供自動(dòng)生成測(cè)試的工具 。另一方面 , 前面調(diào)查一致,開(kāi)發(fā)人員更認(rèn)同維護(hù)單元測(cè)試比編寫(xiě)單元測(cè)試更具挑戰(zhàn)性 。這對(duì)于自動(dòng)化測(cè)試生成工具構(gòu)成了一個(gè)挑戰(zhàn) , 研究仍然非常專注于解決后者的問(wèn)題,只有少數(shù)例外(例如[23]) 。
RQ5: Developers do not seem to enjoy writing tests, and want more tool support—in particular to identify what to test, and how to produce robust tests.
RELATED WORK
雖然有一些針對(duì)單元測(cè)試的實(shí)證結(jié)果[17] , 但在軟件工程領(lǐng)域,相關(guān)的調(diào)查頻率相對(duì)較低,與其他學(xué)科如市場(chǎng)營(yíng)銷和心理學(xué)相比[16] 。最接近我們調(diào)查的是Runeson對(duì)單元測(cè)試實(shí)踐的調(diào)查[24] 。這項(xiàng)調(diào)查提出了50個(gè)與單元測(cè)試相關(guān)的問(wèn)題,分別是1)什么是單元測(cè)試?2)單元測(cè)試的優(yōu)點(diǎn)和缺點(diǎn) 。我們對(duì)單元測(cè)試的解釋與這項(xiàng)調(diào)查中得出的解釋一致;Runeson的調(diào)查中發(fā)現(xiàn)的一些弱點(diǎn)也在我們的調(diào)查中出現(xiàn)了 。例如,難以確定要測(cè)試的單元 , 以及測(cè)試維護(hù)的難度 。總的來(lái)說(shuō),我們的調(diào)查與Runeson的調(diào)查不同之處在于更專注于確定自動(dòng)單元測(cè)試生成可以改進(jìn)測(cè)試的潛在領(lǐng)域 。Torkar和Mankefors[27]對(duì)軟件重用和測(cè)試進(jìn)行了調(diào)查 。這項(xiàng)調(diào)查與我們的調(diào)查分享了一些見(jiàn)解;例如 , 邊界值分析通常由開(kāi)發(fā)人員應(yīng)用,并且他們的調(diào)查還顯示,開(kāi)發(fā)人員渴望在編寫(xiě)單元測(cè)試時(shí)獲得更好的工具 。
Geras等人[12]在阿爾伯塔省進(jìn)行了一項(xiàng)關(guān)于測(cè)試實(shí)踐的調(diào)查,發(fā)現(xiàn)單元測(cè)試是最受歡迎的測(cè)試方法,但只有30%的測(cè)試人員使用了單元測(cè)試 。在整個(gè)加拿大進(jìn)行的一項(xiàng)更大的調(diào)查[11]證實(shí)了單元測(cè)試的相對(duì)流行 , 并且有越來(lái)越多的人對(duì)變體分析產(chǎn)生了興趣,與我們的結(jié)果類似 。
Ng等人[21]在他們對(duì)澳大利亞軟件測(cè)試實(shí)踐的調(diào)查中也發(fā)現(xiàn)了高度愿意使用自動(dòng)化工具的意愿,與我們的結(jié)果一致 。Lee等人的調(diào)查[19]也觀察到了支持自動(dòng)化所需的工具需求 。Causevic等人[2]發(fā)現(xiàn),相對(duì)于其他領(lǐng)域(如嵌入式系統(tǒng)),單元測(cè)試在Web應(yīng)用程序中更受歡迎 。與我們的研究相關(guān)的是,他們發(fā)現(xiàn)開(kāi)源工具主要用于單元測(cè)試,而商業(yè)測(cè)試工具更多用于更高級(jí)別的測(cè)試 。Zhao和Elbaum[28]調(diào)查了開(kāi)源項(xiàng)目,發(fā)現(xiàn)盡管測(cè)試消耗了大量資源,但只有大約一半的項(xiàng)目有基線測(cè)試套件 , 只有少數(shù)項(xiàng)目使用覆蓋分析工具來(lái)支持他們的測(cè)試 。
總的來(lái)說(shuō),這些回答指出了自動(dòng)單元測(cè)試生成可以支持開(kāi)發(fā)人員的領(lǐng)域 , 以及需要進(jìn)一步研究的領(lǐng)域:
CONCLUSIONS
改善軟件質(zhì)量的必要性是被廣泛接受的,但問(wèn)題在于如何實(shí)現(xiàn)這一目標(biāo) 。改進(jìn)單元測(cè)試是其中一種可能性,軟件工程研究正在為從業(yè)者提供可以提高其測(cè)試活動(dòng)質(zhì)量和生產(chǎn)力的新技術(shù) 。我們的目標(biāo)是更好地了解單元測(cè)試的常規(guī)實(shí)踐 , 以便識(shí)別改進(jìn)的可能性,特別是自動(dòng)化單元測(cè)試生成 。【一個(gè)關(guān)于單元測(cè)試實(shí)踐的在線調(diào)查報(bào)告】我們?cè)?9個(gè)國(guó)家共收到了171位參與者的在線調(diào)查結(jié)果,結(jié)果證實(shí)單元測(cè)試在軟件開(kāi)發(fā)過(guò)程中扮演了重要角色:開(kāi)發(fā)人員花費(fèi)了大量時(shí)間來(lái)編寫(xiě)測(cè)試 。顯然,還有更多的測(cè)試空間:12%的開(kāi)發(fā)人員根本不進(jìn)行測(cè)試,73%的人表示強(qiáng)烈希望擁有更多的測(cè)試 。為了加強(qiáng)我們的發(fā)現(xiàn),我們正在探索使用受控實(shí)驗(yàn)(例如 , [9]),并計(jì)劃在未來(lái)的工作中使用調(diào)查復(fù)制和觀察方法(例如,工業(yè)案例研究) 。
- 開(kāi)發(fā)人員需要幫助來(lái)決定要測(cè)試什么 , 而不是選擇具體的輸入值 。自動(dòng)單元測(cè)試的大多數(shù)研究都回避了這個(gè)問(wèn)題(例如,通過(guò)隨機(jī)選擇或由代碼覆蓋率驅(qū)動(dòng)選擇) 。
- 單元測(cè)試需要是現(xiàn)實(shí)的:開(kāi)發(fā)人員在編寫(xiě)新測(cè)試時(shí),以及在處理失敗的測(cè)試時(shí) , 最關(guān)心的是它們是否是現(xiàn)實(shí)的 。一個(gè)不現(xiàn)實(shí)的情景會(huì)使修復(fù)測(cè)試變得更加困難,開(kāi)發(fā)人員可能不會(huì)相信基于不現(xiàn)實(shí)的測(cè)試修復(fù)代碼 。
- 單元測(cè)試需要是可維護(hù)的:即使是自動(dòng)生成的單元測(cè)試,也可能被集成到常規(guī)代碼庫(kù)中,在那里它需要像任何其他代碼一樣手動(dòng)維護(hù) 。如果測(cè)試不再反映更新的行為,需要輕松檢測(cè)到并輕松修復(fù) 。
- 單元測(cè)試生成最有效的是確定輸入值,但未解決的挑戰(zhàn)是確定要檢查什么 。最終,這意味著長(zhǎng)期存在的測(cè)試預(yù)言問(wèn)題會(huì)像任何其他測(cè)試生成方法一樣困擾單元測(cè)試 , 對(duì)此方面的進(jìn)展將使測(cè)試生成工具對(duì)從業(yè)者更有價(jià)值 。
