DevOps沖擊下的軟件測(cè)試
不同于傳統(tǒng)的瀑布式開發(fā),開發(fā)人員不再是“流水線上的工人”,DevOps更關(guān)注軟件開發(fā)人員和操作人員之間的有效協(xié)作,我們可以把DevOps看作開發(fā)、技術(shù)運(yùn)營(yíng)和質(zhì)量保障(QA)三者的交集。
在理想的DevOps周期中,遵循著這樣步驟——開發(fā)人員編寫代碼,在QA環(huán)境中構(gòu)建并部署二進(jìn)制文件,執(zhí)行測(cè)試用例,以穩(wěn)定的集成流程將成果部署至生產(chǎn)環(huán)境當(dāng)中。很明顯,這種方法非常強(qiáng)調(diào)構(gòu)建、部署與測(cè)試環(huán)節(jié)的自動(dòng)化。使用持續(xù)集成(CI)工具,自動(dòng)化測(cè)試工具已經(jīng)成為DevOps周期中的一種規(guī)范性因素。
敏捷測(cè)試與DevOps測(cè)試之間仍存在著不少細(xì)微差異,但熟悉敏捷開發(fā)人員一般能夠快速適應(yīng)DevOps。事實(shí)上,敏捷原則主要體現(xiàn)在開發(fā)及QA迭代當(dāng)中,但在運(yùn)營(yíng)領(lǐng)域則普及度不高。DevOps的核心,正是糾正這一差距,F(xiàn)在,DevOps不再單純強(qiáng)調(diào)持續(xù)集成,而更多強(qiáng)調(diào)“持續(xù)開發(fā)”。在流程中,編寫出的代碼將被提交至版本控制系統(tǒng),而后在生產(chǎn)環(huán)境中進(jìn)行構(gòu)建、部署、測(cè)試與安裝,之后交付最終用戶使用。
由于整個(gè)環(huán)境與流程嚴(yán)格遵循標(biāo)準(zhǔn)化要求,各環(huán)節(jié)中的每位參與者都將因此受益。鏈內(nèi)各項(xiàng)操作都以自動(dòng)化方式進(jìn)行,利益相關(guān)方能夠?qū)⒕性谠O(shè)計(jì)并編碼高質(zhì)量的可交付成果之上,徹底擺脫構(gòu)建、運(yùn)營(yíng)與QA流程帶來(lái)的負(fù)擔(dān)。從編寫代碼、到提交代碼、再到生產(chǎn)部署以供最終用戶使用,整個(gè)周期被顯著縮短到3到4個(gè)小時(shí)之內(nèi)。
DevOps中的QA角色
在傳統(tǒng)的軟件測(cè)試中,QA人員會(huì)在指定環(huán)境中對(duì)已部署的build成果進(jìn)行功能與回歸測(cè)試,并投入幾天時(shí)間持續(xù)測(cè)試,關(guān)注現(xiàn)有成果還有哪些問(wèn)題。但這一切在DevOps當(dāng)中都變得完全不同。比如,QA人員需要在DevOps周期內(nèi)協(xié)同工作,保證所有測(cè)試用例全面實(shí)現(xiàn)自動(dòng)化,并獲得接近100%的代碼覆蓋率;他們需要保證環(huán)境標(biāo)準(zhǔn)化,實(shí)現(xiàn)環(huán)境與QA框架間的自動(dòng)對(duì)接;所有預(yù)測(cè)試任務(wù)、清理、后測(cè)試任務(wù)等全部自動(dòng)執(zhí)行,與持續(xù)集成周期保持統(tǒng)一。
DevOps要求交付鏈內(nèi)的各項(xiàng)功能實(shí)現(xiàn)高度協(xié)同。這也意味著鏈內(nèi)各參與者的角色定位有所變化,或者說(shuō)開始相互融合,這為開發(fā)人員賦予了一定的部署權(quán)限。部署工程師可以將測(cè)試用例添加至QA repo當(dāng)中,QA工程師則負(fù)責(zé)提供自動(dòng)化測(cè)試用例?傮w而言,鏈內(nèi)的每位參與者都將為交付成果的質(zhì)量與及時(shí)性負(fù)責(zé)。
DevOps與測(cè)試自動(dòng)化
為了實(shí)現(xiàn)這種強(qiáng)大的速度與敏捷性,最重要的就是實(shí)現(xiàn)測(cè)試流程的全面自動(dòng)化,確保其能夠在QA環(huán)境中完成部署并自動(dòng)運(yùn)行。為此,我們需要構(gòu)建起專門的自動(dòng)化測(cè)試工具與持續(xù)集成工具,建立一套成熟的自動(dòng)化測(cè)試框架,借此快速編寫出新的測(cè)試用例,具體來(lái)看有以下幾點(diǎn)。
第一,為特定build挑選合適的測(cè)試用例;第二,測(cè)試執(zhí)行在本質(zhì)上應(yīng)該遵循精益原則;第三,QA與開發(fā)人員需要當(dāng)面交流,確定特定build中可能產(chǎn)生重要影響的具體因素,同時(shí)執(zhí)行針對(duì)性測(cè)試與健壯性測(cè)試;第四,需要配置專門的代碼分析與覆蓋率工具,確保能夠?qū)崿F(xiàn)接近100%的代碼覆蓋率;第五,回歸測(cè)試的結(jié)果將很快過(guò)時(shí),必須熟悉持續(xù)測(cè)試這一全新理念;第六,需要明確指定與新功能相關(guān)的測(cè)試策略,將臨時(shí)build交付給QA人員,QA人員創(chuàng)建測(cè)試腳本并在臨時(shí)build上運(yùn)行自動(dòng)化測(cè)試,直到代碼穩(wěn)定性達(dá)到要求并足以部署至生產(chǎn)環(huán)境中為止;第七,所有測(cè)試環(huán)境必須實(shí)現(xiàn)標(biāo)準(zhǔn)化,且部署流程必須全面自動(dòng)化;第八,使用多種自動(dòng)化技術(shù),確保QA人員能夠在多種跨平臺(tái)環(huán)境或?yàn)g覽器內(nèi)運(yùn)行自動(dòng)化測(cè)試;第九,并發(fā)執(zhí)行測(cè)試以縮短存活時(shí)間,這又將反過(guò)來(lái)促進(jìn)DevOps的成功實(shí)施;第十,為每輪測(cè)試運(yùn)行設(shè)置退出標(biāo)準(zhǔn),確保在將測(cè)試結(jié)果反饋給流程后,由其做出明確的通過(guò)或未通過(guò)決策;第十一,在生產(chǎn)環(huán)境中部署代碼之前,需要報(bào)告并修復(fù)已發(fā)現(xiàn)的問(wèn)題或嚴(yán)重bug,相關(guān)信息通過(guò)同一事件鏈進(jìn)行傳遞。
除此以外,應(yīng)用程序監(jiān)控的工作也不容忽視。QA人員還應(yīng)及早發(fā)現(xiàn)問(wèn)題并主動(dòng)報(bào)告,在生產(chǎn)環(huán)境上設(shè)置監(jiān)控機(jī)制以便在bug引發(fā)實(shí)際故障之前將其識(shí)別出來(lái),還可以設(shè)置專門的計(jì)數(shù)器,如響應(yīng)時(shí)間、內(nèi)存與CPU利用率等,為最終用戶提供全面的洞察能力。舉個(gè)例子,如果在各個(gè)build中,登錄的平均響應(yīng)時(shí)間逐漸增加,則后續(xù)build很可能因?yàn)轫憫?yīng)時(shí)間過(guò)長(zhǎng)而影響到最終用戶的實(shí)際使用體驗(yàn)。
同樣的,QA人員還可以在生產(chǎn)環(huán)境中定期執(zhí)行部分現(xiàn)有高優(yōu)先級(jí)測(cè)試用例,借此主動(dòng)監(jiān)控運(yùn)行環(huán)境。此項(xiàng)策略可以捕捉到“偶發(fā)性”或者“無(wú)法重現(xiàn)”的bug,最終提升應(yīng)用程序穩(wěn)定性、增強(qiáng)最終用戶滿意度。最終,這些監(jiān)控結(jié)果都能夠以豐富的報(bào)告形式,如包括故障日志與屏幕截圖等自動(dòng)收集并發(fā)布。
結(jié)語(yǔ)
瀑布式流程讓位于V-Model,V-Model又被敏捷化取代。軟件開發(fā)理念就是這樣一代代快速更迭。毫無(wú)疑問(wèn),DevOps代表著未來(lái)。這樣一種持續(xù)改進(jìn)周期,將讓軟件開發(fā)流程獲得全面的動(dòng)態(tài)特性。我們有必要接納DevOps、理解DevOps并最終貫徹DevOps。以往的測(cè)試概念仍然有效,將這些寶貴的經(jīng)驗(yàn)與自動(dòng)化、特別是更高水平的自動(dòng)化相結(jié)合,正是實(shí)現(xiàn)DevOps成功的核心前提。