在DevOps蓬勃發展的時代,軟體測試還有沒有價值?
堅持原創,堅持獨立思考。歡迎微信掃碼關注公眾號“聊聊測試自動化”,更多原創文章等您!
敏捷還沒遠去,DevOps就已到來。
關於DevOps,存在多樣化的定義。從字面理解,Dev是軟體開發(Software Development),Ops是軟體運維(Software Operation)。DevOps就是通過軟體開發和軟體運維緊密、高效地協作,以更好、更快、更頻繁地交付軟體,從而滿足市場需求、收穫商業成功。
DevOps引起了軟體行業的普遍重視,各種各樣關於DevOps的方法論和工具鏈如雨後春筍般層出不窮。
這是屬於DevOps的時代。
身為軟體測試從業人員,不禁要問,在DevOps的時代,軟體測試何去何從
答案當然是否定的。
在DevOps中,以及在可預見的未來,軟體測試不僅不會消失,反而會繼續保持旺盛的生命力。具體來說,在DevOps中,軟體測試的價值至少體現在以下幾個方面。
1,在DevOps中,交付軟體之前仍然需要進行測試。
雖然在DevOps中,軟體交付的速度越來越快,軟體交付的頻率越來越高,但是這並不意味著可以犧牲軟體的質量。無論何時交付,軟體必須是滿足使用者需求和設計目標的。檢驗軟體是否滿足使用者需求和設計目的,需要使用軟體測試的理論和方法。沒有經過嚴格測試和具有質量保證的軟體,使用者不會買單。失去使用者所導致的商業上的失敗,是我們承受不起的。
那麼,如何持續地在短時間內完成軟體測試呢?傳統的手工測試方法當然很難做到。這時就需要自動化測試
2,在DevOps中,軟體開發的計劃和執行過程需要測試介入。
如果實現了自動化測試,測試是否就一定不會在DevOps中成為瓶頸呢?答案是否定的,測試仍然可能成為瓶頸。如果輸入給自動化測試的軟體質量不夠高,在自動化測試中發現許多軟體問題,定位和解決這些問題必然耗費大量的資源,從而導致測試無法及時輸出。測試仍然將成為瓶頸。
如果測試僅僅作為軟體開發後續的一個階段,將很難避免這種情況的出現。要想避免這種情況,需要優化
一是在制定開發計劃時,要考慮在軟體的開發週期內,是否每個時間點(段),都有可以測試的軟體。這裡的測試通常指的是端到端的測試或者與外部模組之間的整合測試。我們稱此時的測試為持續測試。持續測試使得軟體程式碼在產生的同時能夠迅速得到驗證,從而把儘量多的軟體問題發現和解決在軟體生產階段。持續測試是DevOps持續交付的基礎之一。
二是通過分析和識別軟體功能與使用者需求,將有限的測試資源基於優先順序重點投入到對實現核心需求、承擔關鍵功能、變化頻繁的程式碼模組上,從而在有限的時間視窗內最大化測試的收益。
這種“範圍上有側重,時間上全覆蓋”的測試策略需要在軟體開發開始之前制定,並在軟體開發過程中持續實施,從而保證軟體始終可工作、可交付,實現DevOps的預期目標。
3,在DevOps中,軟體執行環境的改動也需要經過測試驗證。
使用者需要的是服務,而提供這種服務的除了產品軟體,還有產品軟體執行所依賴的基礎設施。這種基礎設施的範疇越來越寬泛,其複雜度通常遠遠超過產品軟體本身。通過執行自動化測試,不僅能夠發現軟體問題,而且能夠發現執行環境的問題。這意味著,不僅軟體的改動需要經過測試驗證,系統和環境配置之類的改動同樣需要經過測試驗證,從而盡力避免因錯誤配置而引起的服務斷供問題。
4,在DevOps中,開發人員需要更好地掌握測試理念和測試技能。
做好高質量的軟體產品,根本還是要依靠每一個軟體開發人員寫出高質量程式碼的能力。在關於如何寫好程式碼的各種建議中,總是能夠看到“重視單元測試”這一條。為什麼強調單元測試?這是源於一條最基本的測試理念,那就是沒有經過測試驗證的程式碼是不能信賴的。
具備了測試理念的開發人員,通常會在動手寫程式碼之前就寫好測試用例,然後通過編寫程式碼讓測試用例通過,並在不破壞用例結果的情況下,持續重構和優化程式碼。這就是測試驅動開發(TDD)的方法。無論在敏捷時代還是在DevOps時代,TDD都是寫好程式碼的重要保證。TDD方法要求軟體開發人員為自己的程式碼編寫單元測試用例,而要設計好的單元測試用例,需要掌握測試技能。
由此可見,做好軟體開發,既需要測試理念,又需要測試技能。在DevOps中,快速、高頻的軟體交付必然對開發人員掌握好測試理念與技能提出了更高的要求。
5,在DevOps中,特定形態的測試仍然存在。
無論軟體開發的方法論和流程如何演進,有些特定形態的測試是不可避免的,例如負載測試、效能測試、穩定性測試、安全測試等。這些測試在DevOps中同樣存在,做好這些測試所需要的專門知識與技能不會褪色。
綜上我們可以看到,在DevOps時代,軟體測試依然具有存在價值。並且,相比瀑布時代和敏捷時代,由於軟體測試的影響力貫穿了軟體生命週期的多個階段,因此軟體測試的價值不僅沒有降低,反而增加了。
當然,軟體測試的這種影響力絕非輕而易舉可以得到。這既需要測試理論和方法的變革,也需要軟體工程組織和流程的變革。在DevOps中,如何做好軟體測試?這是另一個重要的話題,我們在後續的文章中討論。
實際上,竊以為,無論軟體工程的方法論如何演進,只要以下兩個基本事實不變,軟體測試就永遠不會失去價值:
沒有開發人員/團代能夠寫出沒有問題的程式碼
使用者不會為低質量的軟體買單
你怎麼看?