馮 偉,李 波,何 倩
FENG Wei,LI Bo,HE Qian
(唐山學院,唐山 063020)
軟件測試是軟件生命周期的一個重要階段,測試質量的好壞,直接決定著軟件產品能否穩(wěn)定運行。軟件測試中的自動化測試技術是目前有待進一步發(fā)展的技術,因為軟件測試的工作量非常大(大約占總體開發(fā)時間的40%到50%),而其中又有大部分工作適合自動化,因此,測試的改進會對整個軟件項目開發(fā)工作的成本、質量和周期帶來非常明顯的效果。
在軟件開發(fā)過程中,首先要求我們通過測試驗證所開發(fā)的軟件在功能上滿足需求分析中的描述,性能上滿足客戶要求的承載負荷和相應的響應時間、運算量要求;另一方面,工作人員還要在預算范圍內盡早發(fā)布軟件以便減少開支。
傳統(tǒng)的軟件測試流程一般是先在軟件開發(fā)過程中進行少量的單元測試,然后在整個軟件開發(fā)結束階段,集中進行大量的測試,包括功能和性能的集成測試和系統(tǒng)測試[1]。由于軟件項目越來越復雜,這種軟件測試的流程給項目開發(fā)者帶來以下問題:
1)項目進程較難把握
項目管理難度加大,許多的軟件錯誤往往到了軟件測試后期才被發(fā)現,此時解決問題耗費的代價很難估算,從而使項目進程無法控制,另外在軟件設計過程中,相關人員無法準確了解軟件的質量狀況,無形中增大了項目管理和開發(fā)的難度。
2)項目風險較難控制
項目風險在開發(fā)的后期才能得以降低。通常在測試人員進行了系統(tǒng)測試以后,方能確定整個開發(fā)過程能否滿足用戶在系統(tǒng)功能、性能和可靠性方面的需求。
3)項目開發(fā)經費超出預期
在整個項目開發(fā)周期中,錯誤發(fā)現的越晚,修復成本越高,此時對問題解決地不及時將導致整個項目成本的快速增加。
2.1 軟件自動化測試的定義
目前,對于軟件自動化測試的常規(guī)定義為“使用一種自動化測試工具來驗證各種軟件測試的需求,它包括測試活動的管理與實施。”
通常,我們所進行的自動化測試指的是自動化測試一個已經使用了正式的測驗流程的手工過程[2]。
2.2 引入軟件測試自動化的原因
通常,軟件測試中有許多是重復性的、非智力性的和非創(chuàng)造性的操作,通過計算機就可以代替人工去完成這樣的任務,使程序員從紛繁復雜的同一化工作中解脫出來,轉而進行更深層次的項目測試工作。
軟件自動化測試是基于手工測試而存在的,主要通過相應的軟件測試工具、腳本等來實現,具有較好的可操作性、可重復性和高效率等特點。
自動化測試的測試效率高,成本低廉,可將重復性強的測試由手工轉為計算機自動實現;非常適合快速的回歸測試,改變人工測試很難對新的迭代版本作出快速評估的局面;避免人工測試容易犯的錯誤,并且對非常耗費時間的邊界值測試,可以快速準確的進行對多用戶的并發(fā)操作等人工測試很難實現的操作,自動測試很容易就可以完成。
因此,測試自動化的實施是軟件測試行業(yè)一個發(fā)展方向,如果掌握了這個領域的先進技術,對于一個軟件企業(yè)的核心競爭力和未來的發(fā)展,都有巨大的推動作用。
2.3 常見的軟件自動化測試工具
單元測試 Java測試工具:JUnit功能級測試Mercury Interactive公司的WinRunner,QuickTest Pro,IBM Rational公司的Rational Robot,Rational Xde Tester,Compuware公司的QARun,RadView公司的WebFT,Empirix公司的e-Tester等壓力測試 Mercury Interactive公司的Winload,Compuware公司的QALoad負載測試 Mercury Interactive公司的LoadRunner Web測試工具 Empirix公司的e-Test Suite Web系統(tǒng)測試工具 MicroSoft公司的Web Application Stress Tool回歸測試 Rational公司的 Team Test性能測試Mercury Interactive公司的Loadrunner,Compuware公司的QALoad,MicroSoft公司的Web Application Stress Tool等測試流程管理工具IBM Rational公司的Rational Testmanager,Mercury Interactive公司的TestDirector缺陷跟蹤工具 Compuware公司的高級變更和缺陷管理工具:TrackRecord白盒測試IBM Rational公司的Rational Purifyplus,Compuware公司的DevPartner Studio Professional Edition黑盒測試 QACenter,SQATeamtest,Rational Visual Test
2.4 測試腳本的設計
腳本是一組由測試工具執(zhí)行的代碼集合,可以通過錄制測試的操作產生,然后再做修改,這樣可以減少腳本編程的工作量。當然,也可以直接用腳本語言編寫腳本。腳本技術可以分為線性腳本、結構化腳本、共享腳本、數據驅動腳本和關鍵字驅動腳本幾類。編輯腳本的原則就是盡量覆蓋更多的測試項,兼容性更強一些,使得測試新項目時能很容易繼承和修改原有的腳本,減輕后續(xù)的工作量。
3.1 確定要測試的產品進行自動化測試的可行性
自動化測試能提高測試效率,但對于周期短、時間緊迫的項目不宜采用自動化測試。推行自動化測試的前期工作相當龐大,將企業(yè)級自動化測試框架應用到一個項目中也要評估其合適性,因此決不能盲目地應用到一個測試項目中,尤其不適合周期短的項目,因為非??赡苄枰罅康臏y試框架的準備和實施而會被拖跨。
比如進行一個單元測試自動化,如果開發(fā)了上百行的測試代碼去測試一個代碼行僅為10行的函數,我們先不考慮自動化測試開發(fā)之后的維護成本,但是至少可以有一個直觀的認識:從手工測試向自動化測試的轉變是要付出的成本的,而且這個投入要遠比做一次手工測試的代價要高,所以必須首先要確定對一個軟件項目進行自動化測試是否合適。
3.2 對測試的軟件項目進行風險評估
資金風險,雖然有些項目具備實施自動化測試的條件,但還是要引入自動化測試后組織結構調整等方面的成本估算是很必要的。
切入方式的風險,一定要將自動化測試與手工測試結合起來使用,設計合理的配比使測試能夠順利進行。開始可以設置80%的測試采用手工測試,當這些目標都實現了,再將自動化測試率提高。
時間估算,在評估完前面幾項指標后,需要估算實施測試自動化的時間周期,以防止浪費不必要的時間,減少在人員、資金、資源投入上的無端消耗。雖然到測試自動化步入正軌以后,會起到事半功倍的效果,但前期的投入巨大,要全面考慮各種因素,明確實施計劃并按計劃嚴格執(zhí)行,才能最大限度降低風險。
工作流程變更風險,測試團隊乃至整個開發(fā)組織實施測試自動化,或多或少會因為適應測試工具的工作流程,帶來團隊的測試流程、開發(fā)流程的相應變更,而且,如果變更不合理,會引起團隊成員的諸多抱怨情緒,所以應該盡量減少這種變更,并克服變更中可能存在的困難。
3.3 制定周密的測試計劃
測試計劃包括測試環(huán)境的建立、確定測試策略、測試設計流程控制和容錯處理等。
根據開發(fā)的軟件項目特點,制定完善的計劃,設計好測試的各個步驟,由于自動化測試對軟件的設計質量要求比較高,另外對突發(fā)事件和不能由軟件解決的問題就無能為力,所以事先應確定出現測試異常情況時解決問題的方案,能較快地將問題解決,減少不必要的開銷。
3.4 結合手工測試和自動化測試兩種方案
測試自動化可以帶來非常明顯的收益,但是不能完全依賴于自動測試,它只是測試工作的一部分,是對人工測試的一種補充。自動化測試絕不能代替手工測試,它們各有各自的特點,其測試對象和測試范圍都不一樣。根據報道,自動化測試只能發(fā)現15%的缺陷,而手工測試可以發(fā)現85%的缺陷。在進行自動化測試前,首先要建立一個對軟件測試自動化的認識觀。單元測試、集成測試、系統(tǒng)負載測試、性能測試、穩(wěn)定性測試、可靠性測試等比較適合采用自動化測試。對于那種不穩(wěn)定軟件的測試、開發(fā)周期很短的軟件、一次性的軟件等不適合自動化測試。我們可以根據實際情況進行選擇。多數情況下,手工測試和自動化測試應該相結合,以最有效的方法來完成測試任務。
自動化測試工具在進行功能測試時,其準確的含義是回歸測試工具,這時工具不能發(fā)現更多的新問題,但可以保證對已經測試過部分的準確性和客觀性。
3.5 總結軟件自動化測試的過程
將整個測試過程進行記錄,總結過程中的經驗和教訓,生成測試報告,找出解決同類問題的思路和方法,以便以后測試類似的軟件項目時能重復利用前面取得的成果,如果有條件的話,在測試的基礎上設計相關的測試模板,如果以后有類似架構的軟件項目的話,可以沿用前面的這種模式進行測試,從而大大地提高測試的效率。
總之,軟件項目的自動化測試在國內的發(fā)展還不是很成熟,沒有真正地形成一整套合理有效的規(guī)范。在實際應用中,我們要結合傳統(tǒng)的手工測試和自動化測試兩種方法的特點,發(fā)揮它們的優(yōu)勢,讓自動化測試策略及工具的實現成為測試人員手中的一件利器,把他們從枯燥的重復性工作中解脫出來,將更多精力和時間專注于需要智能判斷的復雜工作和其他新的測試用例。另外,我們要避免將自動化測試和測試人員等同起來,不要對自動化測試要求過高。我們要對自動化測試樹立一個正確的觀感,清醒地認識到自動化測試是人工測試的有力補充,而無法取代測試人員的地位。任何單一的技術或操作方式上的進步,都不能獨立地保證在短時間內大規(guī)模地提高軟件的開發(fā)效率、穩(wěn)定性和可維護性。自動化測試也是一個積累經驗、循序漸進的過程,不能指望軟件測試人員在短時間內能將所有測試實現自動化。成功的自動化測試需要制定相應的自動化測試計劃,合理的自動化測試策略是自動化測試實施是否成功的第一步。只有充分考慮到自身實施自動化測試的風險、資源和目標后,才能制定出適合自己的自動化測試策略,并最終提高測試效率,降低測試成本。對每個有測試部門或從事測試業(yè)務的企業(yè),都應該多借鑒國內外先進的測試經驗,參考業(yè)界流行的行業(yè)標準,找到適合自己團隊的測試方法和模式,創(chuàng)造更大的社會價值。
[1]Elfriede Dustin Jeff Rashka John Paul.于秀山,胡兢玉,譯.軟件自動化測試:引入、管理與實施[M].電子工業(yè)出版社.
[2]干曉鳴.軟件自動化測試的合理應用.計算機應用與軟件.
[3]軟件測試自動化技術.IBM Rational 技術白皮書.
[4]柳勝.軟件自動化測試框架設計與實踐[M].人民郵電出版社.