開發(fā)者測試:挑戰(zhàn)與技能圖譜

「開發(fā)者測試」泛指開發(fā)者從事的所有與測試自動化相關(guān)的技術(shù)活動,其目標在于驗證被測系統(tǒng)的預期行為和狀態(tài)。一個完備的開發(fā)者測試系統(tǒng),包括如下4個基本元素:

  • 被測系統(tǒng)(SUT):粒度大可至系統(tǒng),小可至類或函數(shù);
  • 外部依賴(DOC):被測系統(tǒng)所依賴的其他系統(tǒng)、服務(wù)、組件和數(shù)據(jù)(DOC);
  • 測試用例集:一組使用宿主語言或腳本語言編寫的測試用例;
  • 運行時環(huán)境:運行時創(chuàng)建的測試執(zhí)行過程。

開發(fā)者測試面臨的挑戰(zhàn)

在大型系統(tǒng)中實施開發(fā)者測試,是一項極為挑戰(zhàn)的技術(shù)實踐,尤其在遺留的大型系統(tǒng)中。在這些系統(tǒng)實現(xiàn)中,基本存在一些共同的特征。

  • 系統(tǒng)規(guī)模龐大,系統(tǒng)復雜度高
  • 存在大量未被測試覆蓋的實現(xiàn)代碼
  • 頭文件包含關(guān)系錯綜復雜
  • 系統(tǒng)中組件間的耦合度高
  • 缺失領(lǐng)域模型的顯式表達
  • 大量的全局變量直接訪問
  • 隨處可見的重復代碼

可以想象,在如此現(xiàn)實存在的系統(tǒng)實現(xiàn)中,開展開發(fā)者測試是極具挑戰(zhàn)的。例如,隔離編譯和構(gòu)建,因為混亂的頭文件包含關(guān)系,讓開發(fā)者痛不欲生,欲罷不能。

再舉個例子,當開發(fā)者構(gòu)建測試上下文,需要配置復雜的數(shù)據(jù),及其構(gòu)造復雜的場景。開發(fā)者發(fā)現(xiàn)一個怪狀,與系統(tǒng)實現(xiàn)相比,構(gòu)造測試用例更為復雜。在這樣的狀況下,導致開發(fā)者大概率放棄開發(fā)者測試。

為什么會出現(xiàn)這些問題呢?

開發(fā)者測試的技術(shù)債務(wù)

實際上,開發(fā)者測試與軟件系統(tǒng)的設(shè)計存在千絲萬縷的關(guān)聯(lián)關(guān)系。系統(tǒng)架構(gòu)、設(shè)計、可擴展、可測試性、可理解性等,往往都是一環(huán)扣一環(huán),任何一環(huán)出現(xiàn)問題,都將制約其他環(huán)節(jié)。

在遺留系統(tǒng)實現(xiàn)中,存在大量未被測試用例覆蓋的代碼實現(xiàn),實踐開發(fā)者測試并非一件容易的事情。由于長期累積的技術(shù)債務(wù),系統(tǒng)設(shè)計的耦合度日益增加,最終導致整個軟件系統(tǒng)完全不滿足可測試性的基本要求。

另外,實踐開發(fā)者測試的收益和技能在社區(qū)長期地被低估,導致開發(fā)者測試在很多的系統(tǒng)實現(xiàn)中未能取得良好的效果和進展。一方面,因為以往低估或忽略了開發(fā)者測試的潛在價值和收益;另一方面,而是因為缺乏開發(fā)者測試技能的儲備和實踐經(jīng)驗的累積。

開發(fā)者測試的設(shè)計技能

實踐開發(fā)者測試需要扎實的軟件設(shè)計的基本功,及其需要對領(lǐng)域模型的深刻理解。如果組件間是耦合的,實施組件測試,必然導致測試邊界模糊不清;如果對領(lǐng)域知識把握得不夠準確,則很難設(shè)計出穩(wěn)定的測試用例;如果沒有對組件的依賴設(shè)計出可替換換的架構(gòu),必然導致依賴很難在測試系統(tǒng)中隔離;如果沒有方便快捷的構(gòu)建系統(tǒng),是不能滿足測試系統(tǒng)快速反饋的基本訴求。

總而言之,開發(fā)者不僅包括設(shè)計和實現(xiàn)系統(tǒng)的基本技能,還要包括開發(fā)和實現(xiàn)可測試系統(tǒng)的基本技能。

  • 挖掘領(lǐng)域知識
  • 可測試性的設(shè)計
  • 依賴隔離和替換
  • 識別組件邊界
  • 設(shè)計構(gòu)建系統(tǒng)

開發(fā)者測試的用例設(shè)計

開發(fā)者設(shè)計和實現(xiàn)的測試用例的要求在業(yè)界往往被低估。例如,系統(tǒng)實現(xiàn)的代碼往往存在嚴格的準入條件,例如Code Review,重復率檢查等機制,但往往忽略測試用例代碼的質(zhì)量要求,這會打破窗戶,讓維護測試的成本增大,甚至放棄測試自動化。

一個優(yōu)秀的測試系統(tǒng),不僅僅只是能夠工作,而是能夠長期伴隨軟件開發(fā)的生命周期,提供快速有效地反饋。筆者見到過很多測試系統(tǒng),或者充斥著大量重復的測試用例,或測試用例極為復雜,或測試用例極為脆弱,或測試用例的可讀性極差,或測試反饋周期過長等等問題。

因此,對于設(shè)計測試用例,也需要掌握設(shè)計測試用例的基本技能。

  • 設(shè)計秒級反饋的系統(tǒng)
  • 設(shè)計正交的測試用例
  • 設(shè)計穩(wěn)定的測試用例
  • 消除重復的測試用例
  • 有效地組織測試用例
  • 準確地命名測試用例

后文,我將通過一系列文章,詳細講述開發(fā)者測試所面臨的挑戰(zhàn),及其應(yīng)對的基本方法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容