



【摘要】傳統的面向故障的軟件測試方法存在限制條件高精確程度與低誤報率無法兼得的瓶頸效果。而高誤報率直接導致軟件測試成本的增加和效率的低下。本文通過對探索性測試方法的研究中得出該方法的使用場合與特點,從而希望能在有限的軟件測試成本內找出與腳本測試相結合的最佳方法。利用探索性測試,能顯著提高軟件測試的效率。
【關鍵詞】軟件測試;探索性測試;測試方法;缺陷效率
隨著軟件測試技術的不斷發展,各種新穎的測試技術越來越受到軟件測試人員的關注。探索性軟件測試是其中一種比較前沿的理論,尤其適用于那些要求在短時間內發現被測軟件一些重要缺陷或事先沒有能夠進行詳細測試設計的情況。探索性軟件測試強大的缺陷發現效率是其得到眾多青睞的重要原因之一。如何選擇合適的測試方法?我們針對三種測試方法(腳本測試,探索性測試和自動化測試)區別以及他們之間的合作關系展開一定的討論。
1.調研目的
1.1 軟件測試現狀和問題
軟件測試是軟件開發生命周期中不可或缺的用來保證軟件質量、提高軟件可靠性的重要階段。基于傳統理論的軟件測試,理論上都要求盡可能早地引入軟件測試過程。
而在實際的測試過程中,我們所遇到的問題很多:首當其沖的就是長期處于瀑布模型下的軟件工程,將測試工作安排并推遲到了開發周期結束階段進行,導致大量的測試工作,包括功能測試、集成測試以及性能測試都堆積到了末期進行。其次,沒有有效地利用自動化測試這一先進技術也是目前軟件質量備受質疑的關鍵因素。雖然很多公司都非常推崇軟件測試自動化這一理念。可真正用到實處能夠事半功倍的畢竟不是很多。第三,需求變更得頻繁性也是一個讓項目經理頭大的問題。客戶一改再改的情況,絕對不是少數。再加上項目進度、客戶壓力等其他其他因素,測試工作的時間和內容被一壓再壓地縮減。這樣惡性循環,誰也不敢保證軟件質量。
如何在減少重復性的測試工作的同時,發現盡可能多的軟件缺陷,并利用有效的自動化測試降低成本,同時還能夠及時高效的覆蓋到這些變更的需求。這些正是想要幫助大家解決的問題。
1.2 探索性測試
探索性軟件測試是不同于傳統方法的測試技術,在某些情況下,它比腳本測試更高效。尤其適用于那些要求短時間內,或者在頻繁的需求變更下發現被測試軟件重要缺陷的情況。其實每個測試工程師都在不知不覺地使用探索性測試方法。其定義由James A.Whittaker提出:測試人員在測試應用程序中可以天馬行空的想怎么測試就怎么測試,利用程序所提供的信息自由發揮,沒有限制,不受任何約束的探索程序各個功能,借由這一方法來發現測試用例以外的軟件錯誤。
探索性測試,就是對手工測試用例加上自動化測試用例的一種補充。如果說手工測試和自動化測試在整個測試過程中占了70%,那我們所希望的就是通過探索性測試,能夠將我們所忽略或者遺漏掉的30%覆蓋到大部分。100%的覆蓋測試是不可能的。我們能做的就是通過各種測試途徑、測試方式,包括單元測試代碼,代碼覆蓋率工具等,盡可能的提高我們測試的覆蓋范圍。
2.三種測試方法的比較
2.1 探索性測試與腳本測試
傳統手工測試通常是完全按照預先設計好的測試步驟一步一步人工驗證所有想要驗證的功能。但是人非萬人,總有缺漏。因此對于探索性測試的重要性是要予以肯定的。國內外學者對探索性測試和腳本測試方法的缺陷發現率和測試成本進行比較。
以上實驗數據是我們國內的學者通過很多次對比試驗得出的結果。接下來,我們再來看一組國外研究學者們整理的數據報告。
我們可以觀察到以下:首先在傳統測試方法中,結合使用探索性測試方法,缺陷的檢出率明顯高于單一的使用傳統測試方法;此外探索性測試能發現更多測試設計以外的缺陷;最后進行探索性測試時,測試人員的經驗、態度、思維方法等方面都會影響測試的效果。[1]外國專家也得出“Defect Detection Effectiveness”(缺陷發現有效率)類似的結論。[2]
1)Effectiveness:There is no difference between ET and TCT.(有效率:腳本測試和探索性測試的缺陷有效率沒有區別。)
2)Efficiency:ET is more efficient as it requires less design effort.(效率:探索性測試能高效,因為需要更少的設計工作時間。)
3)Both ET and TCT have problems,but the problems are different;in TCT,it is the quality of the test cases,and in ET,it is managing the testing activities and reporting.(腳本測試和探索性測試都存在問題,但是他們的問題不同。腳本測試中,對測試用例的質量是需要考量的。同時在探索性測試中對測試活動和測試報告需要進行一定的管理。)
2.2 探索性測試與自動化測試
自動化測試就是把手工測試的每個步驟用自動化測試工具來實現。好處是不用人來做了,缺點就是機器在執行測試過程中并不會變通。至于什么時候開始自動化測試,什么時候開始探索性測試?先自動化后探索性,還是反之,就要看項目產品的具體情況了。既然兩種方法都有了,為什么我們不也來比較一下他們的效率和優勢呢?首先我們比較手工測試和自動化測試的成本比較。這里有幾個數據我們可以一起看一下:
我們可以看到雖然自動化測試大大降低測試工作的成本,但不能完全取代手工測試的工作。完全的自動化測試只是一個理論上的目標,實際上想要達到100%的自動化測試是不可能實現的。從數據來看,一個40-60%的利用自動化的程度已經是非常好的了。
3.三種測試方法的結合
各種數據可以告訴我們,腳本測試和探索性測試各有所長、相輔相成,不可能互相取代對方的作用。我們需要做是找到腳本測試和探索性測試的最佳結合點,實現優勢互補,更好的完成測試任務。理論上,腳本測試應該可以進行探索性測試所能做到的所有測試工作,但是腳本測試不可能涵蓋所有的測試,原因很簡單:這些已經實現制定好的測試用例或者測試腳本,會規定了明確死板的輸入和輸出。如果想要設計好所有可能性的用例,又會有太多重復性的工作和龐大的文檔工作放在面前。如果想發現和業務邏輯有關的系統缺陷,那么測試人員所實施的手工測試才是理想的選擇。因為它充分調動了測試人員的聰明才智,能夠設計出符合真實情況的場景和案例。如果再用自動化測試代替這些手工測試,那么我們即能提高覆蓋率又能降低成本。考慮采用自動化測試,盡可能的增加多的適用的測試用例期望通過有線的測試找出盡可能多的軟件缺陷。我們可以使用不同的等價劃分法、邊界值分析化學,以及白盒測試里的程序控制流分析、數據流分析、邏輯覆蓋、域覆蓋、符號覆蓋等其他方式來增加自動化測試的覆蓋率。
在真實情況中,在手工測試的過程中已經或多或少使用到探索性測試了。將探索性測試執行過的步驟,加入到腳本測試用例中,或者加入到自動化測試中。在下一輪的測試中通過各種方式覆蓋這個測試,同時測試人員騰出手來做其他的探索性測試,這樣循環往復,才能真正利用好探索性測試這個方法。
4.結論
任何一種偏向性的軟件測試方法,都不能滿足當今對軟件測試質量越來越高的用戶要求。利用探索性測試能顯著提高軟件測試的效率。探索性軟件是對傳統測試方法的補充,它只在特定的環境和要求下使用才能達到最好的效果。這是對測試人員根據現實情況進行的一種主動測試,需要測試人員具備更好的專業素質。需要在有限的時間中選擇并做出正確的事情,需要有明確的戰略和方向但是有必須預留一定的空間和時間讓每個測試人員的大腦可以充分運作起來,在測試的過程中隨機應變。探索性測試鼓勵著測試人員邊測試邊計劃,運用測試中收集到的信息,影響自己正在進行測試的實際方式。測試人員在執行腳本測試的同時,將探索性測試的信息添加到腳本測試的腳本中,以保證下次不遺漏。盡可能的加到自動化測試用例中,加快測試速度,然后我們就會有更多時間執行探索性測試發現更多的問題。只有正確的使用腳本測試,加上合理的自動化測試,外加利用探索性測試,才能加快測試的速度,有效的進行測試,并提高測試覆蓋率。
在加深對探索性測試的理解過程中,將我們掌握的各種測試技術和方法用最佳的方法和比例結合在一起,在提高軟件質量上發揮超出預期的結果。在國內日趨成熟的軟件行業,只有通過提高軟件的質量,同時通過各種方式降低成本,才能提高在本行業中的核心競爭力。
參考文獻
[1]朱昭俊,蘇賽.探索性測試方法分析[J].計算機光盤軟件與應用,2012(19):73-74.
[2]ITKONEN J,M?NTYL? M V 2.Are Test Cases Needed?Replicated Comparison Between Exploratory and Test-case-based Software Testing[J].Empirical Software Engineering,2013.
[3]史永莉,陳元琰,羅曉曙等.軟件自動化測試方案的效益分析[J].微計算機信息,2010(6): 218-219+228.