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

