前言
51testing上許多期雜志都有涉及到自動化測試專題的文章,其中既有談到自動化測試技術解決方案的文章,也有教大家如何使用自動化測試技術的文章,看了以后都使我受益非淺。
大家知道,在國內測試行業屬于一個新興行業,與國外測試行業相比,國內也只是近幾年才開始重視軟件測試的。之所以被關注,原因也許是多方面的,但我想最根本一點就是中國軟件要發展。
中國軟件這幾年發展迅速,很大部分原因是借鑒了國外優秀企業的經驗技術,從無到有,學習了國外企業的一整套做事的規范,的確是一種快速成長方法。當然軟件測試也應該如此,從不重視到重視,更應該多學習一下如何制定測試流程,缺陷管理以及測試用例設計等優秀理念。在此筆者只想針對自動化測試在企業中的實施談些個人意見,希望能和大家分享。
當然,自動化測試作為一項新技術,一開始往往會被一些人認為是“無所不能”的,以為一旦有了它就可以解決軟件所有的質量問題。難道自動化測試就是傳說中所謂的“銀彈”嗎?結果當然是否定的。假如在實施前沒有好好的調查、做好預期準備工作就盲目開展,一旦進入推廣實施階段,往往最終會弄得無法收場的結果。下面讓我們先來解決一個問題。
· 為什么要引入自動化測試
首先,按照筆者的觀點,用自動化工具進行測試只不過是測試活動中的一種。真正要在工作中派上用場,也是因為測試工作有了人的參與,而使用工具的目的也只不過是用來減少部分手工測試,將更多人力資源投入到更有價值的工作中,決不能輕重不分。
筆者就有這樣的感受,在企業中,如果想把自動化測試技術應用到工作生產中,沒有持之以恒的恒心,堅忍不拔的決心,高度的自信心,是不可能完成這個工作的。那么怎樣的時機是有利于開展自動化測試的?實施過程中該注意什么?采用什么策略去避免不必要的損失,提高大家對新技術的興趣是很有講究的。下面筆者將一一做出解答。
· 企業實施自動化流程
1)至關重要的是公司的高層必須認同成立測試部門是很重要的,不是浪費公司的資源;這一點,其實很早就應該達成共識,因為像Microsoft這樣的公司也說過“大多數人認為我們是一個軟件開發公司,其實我們是一家軟件測試公司”的話,從中可以看出測試是非常重要的。然而考慮到公司的長遠發展,自動化測試將是今后的一個發展方向。由此看來,自動化測試是有必要深入開展的。
2)在公司大規模使用前,必須要有專人針對不同的自動化測試,去評估究竟該使用哪種測試工具比較好。自動化測試工具又分單元測試工具、功能自動化工具和性能自動化工具,其中又分開源的和商業工具。究竟哪種工具更適合自己公司平臺的測試,還需要有專業人員進行評估。
第一、比如說公司是采用Java技術還是.NET技術開發產品的。大多數商用工具都會根據現今最流行的開發平臺提供一種自動化測試的解決方案。做測試工具比較專業的有Mercury,Segue,IBM Rational,Compuware,Empirix這幾家公司,根據不同測試又有相應的測試工具。
第二、如果考慮到商業軟件比較昂貴,還可以考慮一下開源的測試工具。這些工具往往具有小巧,靈活多變,免費的特性,還有個好處就是它的開源,F在全世界范圍已經有越來越多的人投入到開源項目中去。已經比較出名的有Apache的Jmeter,Jtest,OpenStar等等。就連全球最大的IT公司IBM現在也把目光聚焦到了這塊,由IBM出資1000多萬的開源項目Eclipse,在過去也許是唯一一個能和JBuilder開發環境相媲美的開源的開發環境了。但現在在此平臺上有了TPTP,但我們同樣可以在Eclipse上做我們的功能和性能測試
第三、也許以上工具都無法滿足測試的特殊需求,那最好的方法就是自行開發測試工具;這主要集中在嵌入式系統方面。比如手機與手機之間需要做到即時、無誤的發送短消息,而一般常用的工具是沒有辦法做到這方面測試的,那就只能考慮公司內部自己開發測試工具了。
第四、還有就是在選用工具方面,還要充分考慮到工具的可集成性、可擴展性以及平臺兼容性。因為實際工作中,我們常常需要把測試流程,需求管理,缺陷管理,配置管理結合的更緊密,通過工具去統一管理。這些都是在選用工具時要考慮到的因素。
3)在全面實施之前,根據以往的經驗,筆者建議最好選出幾個人進行小規模的實驗。這樣做的好處一來可以以小見大,從幾個人的反映看出自動化測試的雛形;二來可以總結不足之處,在后期的開展中盡量避免;三來,可以把實施所見的成效推廣開來,為后期工作的開展做好鋪墊。
筆者在企業里就有類似的經歷,一個項目已經上線,以后每次發布一個補丁之前,測試人員都需要通過執行一些SIT(System Integration TestCase)測試用例來覆蓋整個系統的大部分模塊。而執行一遍這樣的用例,至少需要花費六個測試人員一天的時間。后來在這個項目內進行了自動化測試的實驗,根據SIT的測試用例轉換成自動化腳本。運行一個用例腳本只需要十五分鐘,而每次也只需要一個測試人員把所有腳本運行一遍就可以了,其他人就可以從中解放出來做其他工作了。像這樣比較成功的例子,一定要在后期工作開展時加以宣傳,要認大家認識到自動化好處,這樣大家才會有積極性去學。
4)有了上面的經驗,接下來該在整個部門進行自動化測試的推廣了。當然適當給從業人員進行工具的使用技能以及一些相關知識培訓
5)正如軟件生命周期有需求分析階段一樣,在錄制自動化腳本之前也需要收集需求,這些需求主要是用于后期錄制腳本的選取。這些需求可以根據需求人員做的需求文檔,也可以選擇測試人員的測試用例來轉化成腳本,還可以讓需求分析人員推薦幾個常用的,相對簡單的流程轉化成腳本?傊痪湓,需求就好比源頭,從源頭抓起才能開發出高質量的腳本。
6)做了前面一系列準備工作,已經有了一個好的開始。接下來就要求大家進行一次頭腦風暴,對剛收集來的需求進行分析,設計出一個好的實現方案。這里我想強調兩點:
第一、工具只能幫助測試人員去更好的進行測試,至于怎樣使用才能提高工作效率,還是需要測試人員在實施前期進行更多的思考,比如思考如何把一個好的設計轉化成我們后期的自動化腳本等。因為腳本是不會創造性的發現本身沒有涉及到的缺陷,就好比許多測試人員編寫測試用例,如果你沒有把你要測試的功能點寫入測試用例中,根據測試用例執行人員是不會考慮到這一點的。因此設計一個全面,詳細的設計方案顯得尤其重要。
第二、出于程序可復用的角度考慮,按照怎樣的劃分粒度,如何把腳本進行好的規劃也很重要。例如:將一些使用率高的模塊錄制成共享腳本,使用者只需要通過一些參數進行使用,無須考慮到內部的具體實現機制。這樣還可以大大減少大家的重復勞動量。
7)對工具有了一定認識以后,就到了上手操練階段。俗話說:“拳不離手,曲不離口”。由于前期投入大量精力、人力、物力,現在正是出成果的時候。但在開發腳本之前,筆者還有幾點想著重申明一下:
第一、開發腳本必須遵循一些規范化,就類似于程序員編程規范一樣。我們的測試腳本就好比是我們測試人員的程序,同樣要形成一個編寫規范。因為養成這樣的好習慣,是為了能方便維護腳本,避免增加后期的維護量和方便使用者使用;
第二、保證開發的腳本回放沒有問題的基礎上,適當增加出錯處理來增強腳本;
第三、后期還可以在腳本中加入檢查點,這樣做的好處可以把原來需要人工去校驗的地方讓腳本去做;
第四、在腳本中增加數據驅動方法,使腳本能覆蓋更多的分支路徑,進一步提高腳本的集成度。因為前面已經說過了,腳本是不會執行那些沒有被編寫進去的功能點的,所以說后期測試人員一旦發現這個地方有必要讓腳本來代替手工進行執行,就可以不斷的增強我們的自動化腳本。
8)最后,切記任何工作的開展并非一朝一夕,新技術的開展將需要投入大量人力物力,而自動化測試就是我們測試工程師必須要堅持的一個長期的發展方向。為了不至于做事只做表面,建議每個測試團隊中都必須要有專人去負責推動自動化工作的開展。還必須有專人負責維護腳本,規范腳本,甚至可以引入配置管理工具來統一管理腳本和把經驗文檔化。只有這樣我們的測試財富才會從中不斷積累,只有這樣自動化測試才能走得更遠。
以上總結了幾點,都是筆者在企業中推行自動化測試的一些心得體會。最后希望能夠有更多人從自動化測試中獲得快樂,從繁瑣的手工測試中解脫出來。
文章來源于領測軟件測試網 http://www.kjueaiud.com/