自動化測試最佳實踐 連載一
《自動化測試最佳實踐:來自全球的經典自動化測試案例解析》第0章案例研究反思,本章高度總結了現(xiàn)有經驗中需要吸取的最重要的教訓。本節(jié)為大家介紹自動化測試目標。
第0章 案例研究反思
成功的自動化測試需要智慧和毅力。你的經驗可能和本書所描述的有一些相似之處,但每個人的故事都是獨一無二的。通向成功的道路并不簡單,但是正如書中案例研究所描述的那樣,自動化測試已經在各種應用領域、各種環(huán)境和項目的各個生命周期中取得了成功。
通過思考,我們根據書中出現(xiàn)的案例和奇聞軼事總結出了一些方法。本章高度總結了現(xiàn)有經驗中需要吸取的最重要的教訓。你可能會在閱讀完后面各個案例研究章節(jié)后再次閱讀本章。
哪些主要因素促成了自動化測試的成功?導致自動化測試失敗最常見的因素有哪些?
對這些問題沒有簡單而通用的答案,但存在一些公共的要素。我們認為最重要的兩個要素是管理問題和測試件架構:
對自動化的管理層支持,包括設置切實可行的目標,以及提供足夠合適的資源來取得已計劃的ROI。
一個好的自動化測試件架構,擁有正確的抽象層,在降低自動化測試件維護和自動化測試各個方面成本的同時提供靈活性和適應性。
除了共同的要素外,還有其他一些方面,甚至是一些令人吃驚的要素,將它們也考慮進去可以幫助你在自己的自動化測試中取得更大的成功。這是我們寫這本書的希望和目的!
在以下的大多數(shù)小節(jié)中,我們會著重強調一些章節(jié)號,并討論一些特定的主題。這些主題可能也在其他章節(jié)涉及,我們會在這里列出各章針對某一特定主題進行的專門討論。
我們首先在0.1節(jié)討論管理層問題,但經理們也需要注意0.2節(jié)描述的技術問題。
0.1 管理層問題
從許多案例研究中可以清晰地了解到,管理層的支持力度關系到自動化測試的成功與失敗。舉例而言,第4、6、11、17和20章都敘述了管理層支持欠缺導致自動化測試失敗的情形。
0.1.1 自動化測試目標
制訂一個合適的目標對自動化測試的成功實施至關重要!這似乎是顯而易見的,但令人驚訝的是,在沒有任何清晰目標或僅僅是只有一些模糊的陳詞濫調作為目標(如“更快的測試”、“做得更好”、“節(jié)省時間”)的情況下,一個自動化測試就開始了,這類事情經常發(fā)生。目標越具體,自動化測試越有可能得到好的評價并取得成功。
將軟件測試所要達到的目標與自動化所要達到的目標區(qū)分開來是很重要的。自動化是運行測試的一種方法,無論這些測試是好還是壞。一個好的測試目標是發(fā)現(xiàn)許多bug。這沒有必要成為一個好的自動化測試目標:在近期對項目進行一些改動之后,需要進行回歸測試以確保變更的部分不會影響系統(tǒng)的行為,而這類測試很少發(fā)現(xiàn)新的錯誤。這并不意味著自動化測試不成功,只是因為它有了錯誤的目標。如果一個高層經理感到自動化測試沒有達到預期目標(即使這個目標是一種誤導),那么資金也可能被撤掉。
0.2.9節(jié)討論了一些能夠有效地找到bug的自動化測試示例。一些好的自動化測試目標在第1、2、3、6、7、10、11、12、14、20、21、25、27和29章中討論。
0.1.2 管理層支持
在一個無法對自動化測試進行精心培育并有效引導的組織中,自動化測試很難成功發(fā)展起來。對于個人來說最好先親自試驗一下,如果想要大規(guī)模地進行自動化測試,并能收獲自動化測試對于產品最終發(fā)布所帶來的巨大好處,則需要管理層的大力支持。一種“自下而上”的方法并不是通向良好自動化測試的一條長期可持續(xù)的道路。
管理層支持對自動化測試的成功至關重要;我們可以在本書的很多案例研究中看到這一點。管理層支持包括多種形式:對工具的資金支持,對于一個試點項目和測試件架構的開發(fā)過程的資金支持,以及為此需要付出的時間,管理層還要有興趣去理解自動化行為以監(jiān)督成本與回報(參見A.3節(jié)的ROI)。
對于經理來說很重要的一點是,對于自動化過程他能夠提供什么,以及對要達到期望的結果需要付出時間與努力有著很明確的了解。
在某些案例中,一些高層的經理并不十分了解好的自動化測試意味著什么。這可能是因為他們沒有很好地親自調查,但另一個因素可能是做自動化測試的人員沒有積極溝通,雖然溝通是他們本應該做好的事情。
與管理層溝通的重要性主要在第1、4、6、13、20和29章中進行強調,而具體作法則在第16、19和29章中涉及。管理層支持作為示例學習的關鍵因素在第1、2、6、11、18、21章中進行了強調。
0.1.3 ROI和度量標準
一個普遍的誤解是,成功的自動化測試僅僅需要購買相應工具的投資(如果你得到一個開源工具,那就不需要其他任何花費)。如果在自動化方面的投資為0,則其投資回報率可能為負值。簡而言之,如果你什么也不投入,你將會陷入麻煩!
要在以下方面進行投資:對于觀點的研究和實驗;設計和開發(fā)一個好的自動化測試件架構;學習和了解失敗和成功的因素;找到符合特定情況的解決方案;就自動化測試計劃、進度及測試方法進行溝通。
常常在一個自動化測試開始時評估ROI。這是一個很明智的做法:相對于自動化測試的投入,是否獲得了更多的收益并節(jié)約了資金?執(zhí)行自動化測試的理由通常是比較執(zhí)行同一測試手動和自動所花費的時間。盡管這是證明自動化測試有用的方法,但僅僅執(zhí)行自動化測試并不是全部。實現(xiàn)自動化測試的時間,對自動化測試的維護,分析錯誤測試的時間以及其他一些可能比手動測試花費更多時間的任務。這些其他任務可能是一個重要的額外開銷,也應該考慮。要知道如果你使用一個工具供應商的ROI計算器,這些其他的開銷可能不包括在ROI的計算中。
其他需要考慮的因素包括:更高的覆蓋率(已經測試過的系統(tǒng)數(shù)量),最少的時間推向市場,以及增長的信心。但這些益處在早期的自動化測試實施中可能無法實現(xiàn)。它們會在自動化測試一旦完成之時變成現(xiàn)實。它們同樣難以量化,因此也可被看做額外的收益。
一旦一個自動化測試建立,看它能否達到預期也是非常重要的,因此最好定期做這樣類似的比較(將所有因素考慮進去),并且將這一信息和負責資金的管理層交流,這是非常重要的。
許多人混淆了收益(benefit)和ROI。收益只是收益,而ROI則是將收益與成本有效地進行比較。
請記住,你決定收集的度量標準可能被誤解,也許它沒能傳達你所希望的意思。也請注意,那些在新的上下文中不再有用的度量標準;第28章描述了自動化測試的職業(yè)生涯的影響。
ROI和量化收益在第1、2、9、12、13、18、23、26和29章中討論。在第9章有一個用來評判投資的基于模型測試的ROI計算器的范例。
0.1.4 在敏捷開發(fā)中的自動化測試
隨著敏捷開發(fā)變得更加普遍,其自動化測試也變得越來越重要。持續(xù)的集成就是測試自動化;回歸測試每天都要進行,有時候甚至更為頻繁。自動化測試也需要在出現(xiàn)變更時能做出響應,就像敏捷開發(fā)中那樣,于是測試件架構便顯得更加至關重要(參見0.2.1節(jié))。自動化測試在傳統(tǒng)開發(fā)和敏捷開發(fā)中都取得了成功,沒有自動化測試,敏捷開發(fā)就不會成功。
敏捷技術,如測試驅動的開發(fā)(Test-Driven development,TDD)可以確保自動化的單元測試,但是對使用敏捷方法開發(fā)的系統(tǒng)仍需要進行系統(tǒng)測試。第1章主要講述的是敏捷開發(fā)中的自動化測試;敏捷項目中的自動化測試也在第6、7、17、18、19和21章中提及。
0.1.5 技能
測試人員所需要的技能和自動化測試人員不同,自動化測試人員的角色可以看做測試人員和工具之間的橋梁(參見0.2.1節(jié))。
自動化測試人員的角色有著嚴格的區(qū)分:一類是高層次的自動化設計人員(測試架構師,test architect),另一類是自動化測試件的實現(xiàn)人員,自動化測試人員(test automator)可以用于這兩類人員。自動化測試架構師的任務是設計自動化測試的整體結構,或者為了創(chuàng)建好的測試件架構而選擇框架,或是將現(xiàn)有框架進行改進以適應新的需求。自動化測試人員的任務是設計、編寫、維護自動化測試的軟件、腳本、數(shù)據、期望結果以及額外的實用工具。自動化測試人員負責實現(xiàn)多個層次的抽象(在0.2.1節(jié)中討論),這使得測試人員不必學會編程就可以使用這些自動化手段。自動化測試人員同樣可以幫助測試人員,包括解決技術上的問題、決定花費/ 收益的比率,以及實現(xiàn)新的測試需求等。自動化測試人員必須有好的編程基礎。
有這樣一種趨勢,即測試人員同時也是開發(fā)人員。如果測試人員同時還是一名好的程序員,那么這個人既可以成為測試人員也可以成為自動化測試人員——我們討論的是不同的角色,他們不一定是不同的個人。
然而,很多測試人員并不一定擅長技術,而且他們也不想成為程序員。就如Hans Buwalda說的,強迫一名非技術的測試人員去做程序員,不僅會使你失去一名好的測試人員,還會讓你得到一名不稱職的程序員。非技術的測試人員也應該參與自動化測試!如果將他們從自動化測試的過程中排除,就不能充分發(fā)揮這些測試人員的技能,從而也無法充分挖掘出自動化測試的潛力。
測試人員和測試自動化人員的角色在第10、12、18、19、20、23和29章中討論。
0.1.6 計劃、范圍和期望
當自動化測試有好的計劃時,它通常更有可能獲得成功。計劃應當包括,在自動化測試應用于整個項目前花些時間進行一些實驗。例如,一個限制時間的試點項目,讓你能更清晰地看到如何達到自動化測試長期目標的方法,當然這個項目也要有清晰的目標和足夠的資源。
不要期望自動化項目中不會出現(xiàn)任何問題;沒有什么事情是沒有問題的!應該隨時準備應對可能出現(xiàn)的問題。記住即使是最好的計劃也僅僅是一項指導——要根據情況去重新審視這些計劃。
設定符合實際的目標,即在規(guī)定時限內完成任務,并且定義好項目的范圍。不要太過于關注細節(jié),否則就無法在公司中獲得那些潛在的收益。要關注在早期就能得到的一些有用的結果,而不要以減少有用的自動化測試為代價,去構建過量用于支持測試復用的庫。一旦自動化測試開始運行,要繼續(xù)尋找方法去改進這些自動化測試,并且為自動化測試設立新的目標以減少花費和增加收益。
第1、5、6、11、16、20、25和29章討論了這些問題,第1、3、23和27章還討論了如何持續(xù)地改進自動化測試過程。
0.1.7 和開發(fā)人員的關系
在成功的自動化測試實踐中通常有一項因素,即在測試人員、自動化測試人員和開發(fā)人員之間保持良好的關系。如果他們的關系不好,那么自動化過程就會更加艱難,即便自動化測試在最后還是會帶來一些收益。如果軟件在設計時沒有考慮到自動化,那么自動化測試就會變得非常困難。例如,如果軟件使用了非標準的控件,那么自動化測試就很難和軟件進行交互。測試人員或者自動化測試人員或許會對開發(fā)人員說:“請僅僅使用標準的控件——這會使得我們的工作更加容易。”但是開發(fā)人員的時間很倉促,可能會說:“我們?yōu)槭裁匆鲆恍┎粫o我們帶來好處的事情呢?”這個開發(fā)人員并非很無理,這確實是一個相當合理的原因(雖然一些測試人員不會同意這個觀點)。
更好的方法是告訴開發(fā)人員自動化測試是如何讓他們受益的,并且和他們保持良好的合作關系。例如,如果你能夠在15分鐘內在測試環(huán)境中對一個新編碼的函數(shù)運行測試,你就能夠在一定時間內向開發(fā)人員提供有用的信息(找到了bug或者測試已經通過),這對他們是極大的幫助。
關于開發(fā)人員和自動化測試人員的關系在第1、2、6、9、17、20、27和29章中討論。
0.1.8 促進項目改變并啟動自動化測試的觸發(fā)器
是什么讓一家公司決定它們應該采用自動化測試?有時,因為測試不足所帶來的嚴重問題或者近期的災難,促使公司做出改變;有時,來自公司外部的觀點也會帶來更好的解決方案;有時,管理層決定公司需要自動化測試,這甚至決定了公司的生存。人們總是先嘗到了苦頭,然后才會進行實際的改變。
對于那些打算應用自動化測試的公司,最重要的建議是要從小范圍開始應用。試點項目(pilot project)是個好主意,在將自動化測試擴展到更廣的范圍之前先在小范圍內嘗試不同的方法,來判斷哪種方法最好。
這些問題在第1、9、10、12、17、23、26、27和29章中討論。
0.1.9 工具和培訓
人們經常會問一個問題,哪個工具是最好的?這就像問哪個汽車最好一樣。一個人認為最好的車是能夠容納四個小孩和兩條狗的車;另一個人可能更關注于車的速度和性能;還有一些人關注哪個車更經濟一些。因此,沒有完美的工具,但是有很多工具是足以應對某些特定場景的。
事實上,正如第17章講述的那樣,有時可能會選擇錯誤的工具,因此為所要做的工作選擇合適的工具是很重要的。在第17章中錯誤使用的工具卻在第7章和第25章中取得了成功。
但是工具不是測試自動化最重要的因素。是的,通常確實需要使用工具來執(zhí)行測試,但是在大多情況下,好的自動化測試的其他方面遠遠比因單獨工具之間的差異所帶來的影響要大得多。擁有好的工具不能保證在測試自動化中取得成功——必須對整個測試框架進行良好地計劃、定制和維護,工具僅僅是一小部分。
使用一個工具失敗并不意味著使用其他工具就能取得成功;一些公司嘗試了一些工具但是在每次嘗試中都以相同的方式失敗了。遺憾的是,公司經常將這些失敗歸咎于工具或者個人,而實際原因在于自動化測試項目沒有進行足夠的計劃和管理。
工具的主要用處是為人員提供支持!那些將要使用工具的測試人員應該在如何使用這些工具上有話語權,而且公司應當為工具提供基礎設施以支持他們。
無論使用什么工具,培訓都是很重要的。那些將會直接使用工具的人應該在早期就接受一些深入的培訓,無論是通過工具生產商的課程或者在線教程。如果公司引進組織外部的顧問或者工具生產商的技術支持人員來進行培訓,將每次會議的間隔日期進行適當調整,以便在這段時間中測試人員能夠吸收這些知識并且對他們所學到的內容有實踐的時間。之后,為那些需要使用這個自動化工具的人提供培訓,告訴他們自動化測試應該如何進行——這是內部培訓,而不是外部培訓。良好的培訓能夠避免浪費很多時間。
關于工具和培訓相關的問題會在第1、6、11、12、13、18、19、21、23、25、26和29章中討論。
0.1.10 行政因素
在自動化過程中,有一些因素是測試人員、測試自動化人員,甚至是經理或者其他利益相關者無法控制的;例如,可能會因為一個主要項目的取消,導致為成功的自動化測試付出的努力也變成徒勞。
很多測試人員和自動化測試人員之所以艱難地進行一些項目,可能僅僅是因為他們經理的一句看起來隨意的話。第29章中的奇聞軼事就舉了這方面的例子,還有在第4章中,經理的行為“謀殺”(雖然這可能是“過失殺人”,而不是“謀殺”)了自動化測試。第28章舉了一個例子,即當自動化測試帶來的改進是如此巨大,以致經理都不肯相信這些結果。
行政因素是生活的一部分;做出的決定并不經常像看上去那樣合理。
(未完待續(xù)...)