自動(dòng)化測(cè)試最佳實(shí)踐 連載六
2.6 管理自動(dòng)化測(cè)試
我們的測(cè)試過(guò)程在持續(xù)改進(jìn),并且我們?yōu)闇y(cè)試設(shè)計(jì)了一個(gè)可記錄的生命周期,如圖2-2所示。
測(cè)試被開(kāi)發(fā)出來(lái)之后,會(huì)進(jìn)行評(píng)審,如果審查通過(guò),這個(gè)測(cè)試就會(huì)被包含到候選隊(duì)列中(一個(gè)測(cè)試集合用來(lái)嘗試是否應(yīng)該包含到整個(gè)自動(dòng)化套件中)。如果一個(gè)候選測(cè)試在一行中有4天都失敗了,那么它會(huì)被提取出來(lái)重新進(jìn)行開(kāi)發(fā)。在測(cè)試本身沒(méi)有任何失效一周之后,這個(gè)測(cè)試會(huì)設(shè)置為“有效”狀態(tài),并可以包含到每晚的或者每周的測(cè)試套件中。
圖2-2 測(cè)試的生命周期
如果產(chǎn)品的功能改變了但是其測(cè)試沒(méi)有更新,測(cè)試可以“掛起”。根據(jù)掛起的原因,測(cè)試將來(lái)可能會(huì)成為“有效”狀態(tài)或者候選測(cè)試狀態(tài)(故障的原因被修復(fù)之后)。
不同測(cè)試套件的內(nèi)容會(huì)進(jìn)行周期性分析。度量指標(biāo)用來(lái)衡量運(yùn)行這些特定測(cè)試的收益。根據(jù)這一過(guò)程的結(jié)果,一個(gè)測(cè)試可以從一個(gè)測(cè)試套件移到另一個(gè)測(cè)試套件(依據(jù)測(cè)試的運(yùn)行頻率),或者在某些情況下轉(zhuǎn)移到“退出”狀態(tài)。如果某一個(gè)測(cè)試可能不會(huì)再用到了,團(tuán)隊(duì)就會(huì)考慮刪除它。
我們制定了很多度量標(biāo)準(zhǔn),都使管理層非常滿意,而且非常關(guān)注我們,并提高了團(tuán)隊(duì)的優(yōu)先級(jí)。毫無(wú)疑問(wèn),相比于之前,他們對(duì)產(chǎn)品審批過(guò)程的信任有了大幅提升。
2.7 測(cè)試套件和類(lèi)型
最后,我們用這個(gè)工具批準(zhǔn)開(kāi)發(fā)人員代碼檢入:在允許提交新的或者修改后的代碼之前,他們必須在三個(gè)不同平臺(tái)上運(yùn)行一個(gè)最小的驗(yàn)收測(cè)試套件(Minimum Acceptance Test Suite, MATS)來(lái)測(cè)試其代碼。通過(guò)實(shí)驗(yàn),我們選擇這些平臺(tái)來(lái)發(fā)現(xiàn)特定的或者罕見(jiàn)的故障。這一步驟有利于在變更被引入源代碼之前,減少回歸測(cè)試和失效的數(shù)量。這些測(cè)試的運(yùn)行時(shí)間被控制在最短時(shí)間內(nèi),所以這些測(cè)試是有用的,在時(shí)間上并沒(méi)有成為影響進(jìn)一步開(kāi)發(fā)的障礙。
【真知灼見(jiàn)】
提供及時(shí)的反饋,并且將日常開(kāi)支減少到最小,為開(kāi)發(fā)人員提供最好的支持。
該工具用作夜間的回歸測(cè)試,這樣開(kāi)發(fā)人員白天一上班就能獲得關(guān)于他們代碼變更的反饋信息。這個(gè)測(cè)試套件包括大部分運(yùn)行時(shí)間稍短的回歸測(cè)試,并運(yùn)行在有限選擇的平臺(tái)上:一般是在3 ~ 5個(gè)平臺(tái),并且運(yùn)行時(shí)間為將近12小時(shí)。
我們通常還在3個(gè)不同的平臺(tái)上進(jìn)行每周測(cè)試,每一個(gè)測(cè)試套件運(yùn)行4 ~ 5天。
這些回歸測(cè)試具有很高的優(yōu)先級(jí),并獲得了管理層的大力支持。這里出現(xiàn)的故障必須盡快修復(fù)。
除了這些回歸測(cè)試外,其他測(cè)試是在候選批次中運(yùn)行的。這些測(cè)試,是對(duì)新版本中新功能或者已變更功能的典型測(cè)試,具有更低的優(yōu)先級(jí),因?yàn)樗鼈兺怯韶?fù)責(zé)的開(kāi)發(fā)人員和測(cè)試開(kāi)發(fā)人員進(jìn)行監(jiān)控的。候選批次也包括夜間和每周運(yùn)行的批次。項(xiàng)目團(tuán)隊(duì)可以根據(jù)需要定義更適合自己團(tuán)隊(duì)需求的測(cè)試套件。
這些測(cè)試在我們的內(nèi)部測(cè)試工具上運(yùn)行,性能測(cè)試與它們并行運(yùn)行,并且與基準(zhǔn)線進(jìn)行對(duì)比。由于它們對(duì)測(cè)試和結(jié)果的特殊需求,它們都有自己的框架。這些測(cè)試通常僅在一個(gè)平臺(tái)上運(yùn)行。 發(fā)布測(cè)試一般包含以上描述的所有類(lèi)型的測(cè)試,但是在至多22個(gè)不同的平臺(tái)上運(yùn)行。如圖2-3所示。
此外,發(fā)布測(cè)試還包括在測(cè)試工具上運(yùn)行的其他非功能性測(cè)試,比如:
長(zhǎng)時(shí)間測(cè)試:不同的場(chǎng)景下運(yùn)行時(shí)間至少為10天的測(cè)試。
擴(kuò)展性測(cè)試:通過(guò)增加硬件來(lái)減輕負(fù)荷的測(cè)試,一般采用24臺(tái)服務(wù)器和12臺(tái)客戶機(jī)來(lái)運(yùn)行測(cè)試。
圖2-3 發(fā)布測(cè)試的內(nèi)容
2.8 現(xiàn)狀
該工具已經(jīng)用于不同的數(shù)據(jù)庫(kù)產(chǎn)品的測(cè)試當(dāng)中,而且現(xiàn)在是一個(gè)開(kāi)源工具,請(qǐng)參閱http: //kenai.com/projects/jet。
2.9 在經(jīng)過(guò)一段很艱難的時(shí)光后才得到的經(jīng)驗(yàn)教訓(xùn)
在過(guò)去的三四年里,我們遇到了無(wú)數(shù)的困難:
軟件測(cè)試變得非常成熟,有時(shí)反而會(huì)使我們忽略一些最簡(jiǎn)單的測(cè)試。比如,我們往往測(cè)試了復(fù)雜的SQL查詢語(yǔ)句,卻忽略了對(duì)在用戶組之外創(chuàng)建新用戶這類(lèi)簡(jiǎn)單操作的測(cè)試。事實(shí)上,這種語(yǔ)句是不允許出現(xiàn)的,因?yàn)榭赡軙?huì)由于在用戶組的權(quán)限設(shè)置中沒(méi)有考慮到這種情況而導(dǎo)致重大的錯(cuò)誤。
我們過(guò)于關(guān)注大規(guī)模的自動(dòng)化測(cè)試中的變化,導(dǎo)致有些非功能性測(cè)試有時(shí)并未得到足夠的重視。比如,用戶可能會(huì)獲得只有專(zhuān)業(yè)人員才能看懂的錯(cuò)誤提示消息,軟件產(chǎn)品中經(jīng)常缺少幫助功能,這些都是軟件設(shè)計(jì)和測(cè)試中存在的問(wèn)題。
使用隨機(jī)生成的輸入數(shù)據(jù)來(lái)進(jìn)行測(cè)試時(shí),有時(shí)雖然發(fā)現(xiàn)了嚴(yán)重的缺陷,但是因?yàn)闇y(cè)試人員能力有限,不能再重新生成導(dǎo)致故障的數(shù)據(jù),所以并不能對(duì)調(diào)試過(guò)程產(chǎn)生任何幫助。經(jīng)常討論上述這種測(cè)試,一般是從經(jīng)濟(jì)的角度:它們通常需要額外的資源來(lái)輔助進(jìn)行分析,并且在大多數(shù)情況下,并不能通過(guò)它們找到產(chǎn)生bug的原因,因此,也不可能通過(guò)它們找到產(chǎn)生軟件缺陷的根本原因。
對(duì)自動(dòng)化投入的評(píng)估主要看ROI的效果。如果不在比較的過(guò)程中引入其他因素,很有可能得出錯(cuò)誤的故障報(bào)告。比如,我們要仔細(xì)地對(duì)結(jié)果進(jìn)行比較,考慮到地域因素,有時(shí)要先進(jìn)行轉(zhuǎn)換再進(jìn)行比較等。例如,當(dāng)你在比較一臺(tái)位于挪威境內(nèi)的PC上的日期和一臺(tái)位于美國(guó)境內(nèi)的PC上的日期的時(shí)候,不同的時(shí)間格式(挪威為“日/月”而美國(guó)境內(nèi)為“月/日”)導(dǎo)致時(shí)間顯示的結(jié)果也會(huì)不同。
有時(shí)候通過(guò)軟件來(lái)模擬物理故障并不是很容易,并且要模擬這些故障在多臺(tái)電腦上幾乎同時(shí)發(fā)生也是很困難的。此外,通過(guò)軟件來(lái)模擬的斷電和斷網(wǎng)情形與實(shí)際發(fā)生的斷電和斷網(wǎng)也可能并不一樣。
有時(shí)候可能會(huì)發(fā)生結(jié)果誤報(bào)問(wèn)題,因?yàn)闇y(cè)試時(shí),即便遇到一個(gè)或多個(gè)失效也可能報(bào)告正確的結(jié)果。對(duì)于那些長(zhǎng)期使用都未出現(xiàn)過(guò)故障的測(cè)試用例,往往更容易忽略對(duì)其正確性的檢查。但隨著時(shí)間的流逝,這些測(cè)試可能會(huì)不斷積累許多錯(cuò)誤,因此在報(bào)告中要不定期地對(duì)其正確性進(jìn)行檢查。 如果一些優(yōu)先級(jí)比較低的次要bug沒(méi)有立即修復(fù),那么它們可能會(huì)掩蓋一些主要bug,而這些主要bug由于引入的時(shí)間太長(zhǎng),往往更難對(duì)其進(jìn)行分析。
必須要插入和修改等待時(shí)間來(lái)保證在測(cè)試?yán)^續(xù)運(yùn)行之前,前面的強(qiáng)制性過(guò)程已經(jīng)完成了。用更新的硬件取代現(xiàn)有硬件通常意味著要對(duì)這一過(guò)程再一次進(jìn)行同步。
【真知灼見(jiàn)】
預(yù)測(cè)可能會(huì)發(fā)生改變的事物,并使它們?cè)诒匾臅r(shí)候更容易改變(例如,保存同步時(shí)間的核心列表)。
在測(cè)試套件的某些部分中,期望結(jié)果模板用來(lái)與實(shí)際結(jié)果進(jìn)行比較。由于這類(lèi)模板需要大量的維護(hù)工作,因此我們?cè)噲D將這些基于模板的測(cè)試改為基于斷言的測(cè)試。
引入新的平臺(tái)有時(shí)會(huì)產(chǎn)生一些問(wèn)題,并需要大量的資源來(lái)解決這些問(wèn)題。同時(shí),對(duì)操作系統(tǒng)的監(jiān)控力度也要加大。
對(duì)于基于Windows的測(cè)試,要關(guān)閉自動(dòng)更新,并將更新放在等待隊(duì)列中,在測(cè)試可以中斷的那個(gè)時(shí)段之前,再運(yùn)行這些更新。
我們要清楚正在運(yùn)行測(cè)試的網(wǎng)絡(luò)中所發(fā)生的一切。比如,每隔一個(gè)月午夜時(shí)候出現(xiàn)一些無(wú)法解釋的故障,最后發(fā)現(xiàn),故障是由前雇員的一臺(tái)電腦上的夜間執(zhí)行工作所導(dǎo)致的:這臺(tái)電腦沒(méi)有關(guān)閉,而是仍然非常活躍地向本地網(wǎng)絡(luò)發(fā)送查詢請(qǐng)求的垃圾郵件。
【小竅門(mén)】
回頭看有些錯(cuò)誤是非常顯而易見(jiàn)的,但你如果沒(méi)有想到,它們可能就會(huì)困擾你。
建議定期做探索性測(cè)試,你將會(huì)對(duì)所發(fā)現(xiàn)的問(wèn)題感到非常驚奇,同時(shí),有時(shí)候你還可以將這些經(jīng)驗(yàn)用于新的自動(dòng)化測(cè)試中。
2.10 如何使用自動(dòng)化測(cè)試書(shū)中的建議
在開(kāi)發(fā)自動(dòng)化測(cè)試過(guò)程中,我們運(yùn)用了《Software Test Automation》一書(shū)中許多有用的知識(shí)點(diǎn):
在進(jìn)行自動(dòng)化測(cè)試工具開(kāi)發(fā)之前,首先對(duì)工具進(jìn)行需求分析并列出需求清單,我們對(duì)需求清單中的每一個(gè)需求進(jìn)行討論和評(píng)審,結(jié)果表明這是整個(gè)開(kāi)發(fā)取得成功的堅(jiān)實(shí)基礎(chǔ)。在評(píng)審過(guò)程中,參與人員中有代表不同需求的關(guān)鍵人物:經(jīng)理、IT運(yùn)營(yíng)商、發(fā)布工程師、測(cè)試經(jīng)理、開(kāi)發(fā)人員和測(cè)試人員。
測(cè)試自動(dòng)化只是從以下幾個(gè)方面來(lái)對(duì)測(cè)試進(jìn)行自動(dòng)化:測(cè)試的準(zhǔn)備、執(zhí)行、核對(duì)、清空、存檔、生成報(bào)告和度量。而測(cè)試執(zhí)行之前的過(guò)程,例如,測(cè)試用例的設(shè)計(jì)等,是沒(méi)有進(jìn)行自動(dòng)化的。
我們得到了管理層的大力支持來(lái)實(shí)施這項(xiàng)自動(dòng)化工作,并且他們有著切實(shí)的期望。
【真知灼見(jiàn)】
管理層的支持是至關(guān)重要的,但是他們的期望必須要符合實(shí)際。
如果沒(méi)有來(lái)自不同領(lǐng)域的杰出專(zhuān)家,我們就不可能取得成功。整個(gè)實(shí)現(xiàn)過(guò)程和解決方案都很復(fù)雜并具有挑戰(zhàn)性。
幸運(yùn)的是,在大部分產(chǎn)品中都沒(méi)有要求進(jìn)行GUI測(cè)試,這使整個(gè)自動(dòng)化過(guò)程不會(huì)顯得很冗長(zhǎng)。
數(shù)據(jù)庫(kù)中的GUI測(cè)試屬于可用性測(cè)試,識(shí)別這種測(cè)試類(lèi)型使我們?nèi)〉昧撕芏嘀卮蟮母倪M(jìn),并使可用性測(cè)試延期。到今天為止,可用性測(cè)試還沒(méi)有完成,但是因?yàn)榭紤]到這點(diǎn)我們受益匪淺!
測(cè)試工具的大部分開(kāi)發(fā)是集中在GUI部分的開(kāi)發(fā)。然而,在后面,GUI幾乎不會(huì)用到,因?yàn)樗械淖詣?dòng)化都是通過(guò)命令行界面進(jìn)行的。我們前期之所以會(huì)集中精力進(jìn)行GUI的開(kāi)發(fā),可能是因?yàn)槲覀兇竽X中還存在進(jìn)行手動(dòng)測(cè)試的定勢(shì)思維。 【小竅門(mén)】
工具中良好的用戶界面可能在自動(dòng)化項(xiàng)目的前期最有用。
經(jīng)過(guò)本次自動(dòng)化項(xiàng)目的實(shí)踐,測(cè)試人員也學(xué)會(huì)了別的技術(shù)并在他們感興趣的領(lǐng)域變得更加專(zhuān)業(yè)。有些測(cè)試人員更精通測(cè)試開(kāi)發(fā),有些則在測(cè)試的執(zhí)行和生成報(bào)告方面更精通。
只有心中牢記不斷取得進(jìn)步這一目標(biāo),才能讓我們大步前進(jìn)。通過(guò)小組討論來(lái)分析現(xiàn)有問(wèn)題以及如何對(duì)其進(jìn)行自動(dòng)化,最終就會(huì)找到解決方案。
讓所有的測(cè)試人員參加國(guó)際軟件測(cè)試認(rèn)證委員會(huì)(International Software Testiing Qualifications Board, ISTQB)的基礎(chǔ)認(rèn)證課程,這樣有助于術(shù)語(yǔ)的統(tǒng)一使用和理解,從而有助于增進(jìn)測(cè)試人員間的交流。
有時(shí)候項(xiàng)目中人員數(shù)量突然減少?gòu)哪撤N程度上也可以促進(jìn)自動(dòng)化過(guò)程——使用更少人力資源的需求變得更為突出。
能詳細(xì)地向整個(gè)項(xiàng)目中的其他成員介紹每一步是怎么實(shí)施的,很有用,因?yàn)橄啾扔趯⑺鼈冋系疆a(chǎn)品之后再進(jìn)行測(cè)試,顯然單個(gè)部分的測(cè)試更容易執(zhí)行。
【真知灼見(jiàn)】
在走向成功時(shí),步子要快,但也要穩(wěn)。
通過(guò)自動(dòng)化進(jìn)行的測(cè)試是整個(gè)項(xiàng)目的核心過(guò)程,無(wú)論什么時(shí)候出現(xiàn)了故障,它們都會(huì)盡力地報(bào)告給整個(gè)部門(mén)的每個(gè)人。這可能會(huì)對(duì)開(kāi)發(fā)產(chǎn)生負(fù)面影響,因?yàn)榭吹竭@些失效之后,開(kāi)發(fā)人員在修改代碼時(shí)會(huì)格外小心,雖然這種格外留心有助于提高產(chǎn)品質(zhì)量,但他們可能要為此花費(fèi)過(guò)多的精力和時(shí)間。對(duì)于軟件產(chǎn)品來(lái)說(shuō),對(duì)于“怎樣的質(zhì)量才算足夠好”是沒(méi)有明確定義的,這可能會(huì)導(dǎo)致在開(kāi)發(fā)中投入過(guò)多的精力。這僅僅只是我個(gè)人毫無(wú)根據(jù)的假設(shè),并沒(méi)有事實(shí)能證明這一觀點(diǎn),但是開(kāi)發(fā)人員太關(guān)注質(zhì)量這在軟件行業(yè)里是不尋常的!
2.11 總結(jié)
剛開(kāi)始的時(shí)候數(shù)據(jù)庫(kù)產(chǎn)品和測(cè)試的質(zhì)量都很差,但是在自動(dòng)化測(cè)試開(kāi)始之前都得到了顯著提高。
接著開(kāi)始了自動(dòng)化測(cè)試工具的開(kāi)發(fā)過(guò)程。首先,成立一個(gè)包含信息傳遞人員、專(zhuān)家和利益相關(guān)者的團(tuán)隊(duì),進(jìn)行需求定義。然后,用最專(zhuān)業(yè)的人員完成了開(kāi)發(fā),自動(dòng)化測(cè)試也逐步實(shí)施,在這一過(guò)程中,每個(gè)參與人員都起到了非常重要的作用:工具開(kāi)發(fā)人員、促變者、管理層、工具管理人員以及整個(gè)實(shí)施團(tuán)隊(duì)。
早期我們達(dá)到了開(kāi)發(fā)這個(gè)工具的第一目標(biāo),然后隨著時(shí)間的推移,完成了越來(lái)越多的目標(biāo)。我們的效率至少提高了2400倍,并為公司開(kāi)發(fā)了一款非常好的工具。在實(shí)施小的修復(fù)或者增強(qiáng)功能的時(shí)候,需要的維護(hù)工作量非常少,這也為我們的成功幫了不少忙。我們的硬件資源都達(dá)到了最合理的使用:大部分機(jī)器除了短暫的休息以外,都是24小時(shí)/天,7天/周地工作。
對(duì)我們來(lái)說(shuō),這就是最終的自動(dòng)化測(cè)試。
2.12 致謝
首先,要感謝Yngve Svendsen和 J?rgen Austvik在我寫(xiě)這篇案例研究時(shí)提供了非常有用的建議和反饋信息。此外,還要感謝所有為這個(gè)項(xiàng)目的成功而努力的人們,尤其是William Franklin,感謝他對(duì)我們自動(dòng)化測(cè)試的大力支持和鼓勵(lì)。同時(shí),也要感謝本書(shū)的兩位作者,感謝他們給了我公布這個(gè)案例研究故事的機(jī)會(huì)。
(未完待續(xù)...)
相關(guān)鏈接:
posted on 2013-04-26 14:04 順其自然EVO 閱讀(150) 評(píng)論(0) 編輯 收藏