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