深入理解持續(xù)測(cè)試:DevOps流程中的重要一環(huán)
持續(xù)測(cè)試是DevOps開發(fā)流程中的重要一環(huán)。在很多已經(jīng)在嘗試進(jìn)行DevOps開發(fā)的團(tuán)隊(duì)中,開發(fā)人員往往會(huì)將測(cè)試自動(dòng)化等同于實(shí)施了持續(xù)測(cè)試,這種觀念其實(shí)是錯(cuò)的。
事實(shí)上,測(cè)試自動(dòng)化只是持續(xù)測(cè)試眾多要素中的一部分。實(shí)施完整的持續(xù)測(cè)試,需要一個(gè)多維度的測(cè)試策略,這些策略涵蓋開發(fā)過程中所有需要的測(cè)試類型——包括單元、集成、功能、探索性和自動(dòng)化。持續(xù)測(cè)試還必須有一個(gè)完整的戰(zhàn)略,將測(cè)試納入整個(gè)CI/CD(持續(xù)集成/持續(xù)交付)的流程。
DevOps本質(zhì)上來說是一系列軟件開發(fā)實(shí)踐的模型,強(qiáng)調(diào)開發(fā)人員(Dev)和運(yùn)維人員(Ops)之間的溝通合作,通過自動(dòng)化流程,使得軟件構(gòu)建、測(cè)試、交付更加快捷、頻繁和可靠。這種開發(fā)模式的特點(diǎn)是可以把產(chǎn)品的每個(gè)迭代,或者每修復(fù)一個(gè)線上缺陷就立即部署到生產(chǎn)環(huán)境,這樣一來,開發(fā)者就能夠迅速從用戶處獲得反饋并快速做出響應(yīng)。企業(yè)開發(fā)團(tuán)隊(duì)轉(zhuǎn)向DevOps,必須在不犧牲軟件產(chǎn)品質(zhì)量的情況下,最大限度地提高交付速度來增加價(jià)值和改善用戶體驗(yàn),這些都需要在DevOps流程中通過實(shí)施CI/CD流程來實(shí)現(xiàn),而持續(xù)測(cè)試在這其中發(fā)揮著重要的作用。
總而言之,持續(xù)測(cè)試不僅僅是在整個(gè)軟件交付流程中執(zhí)行自動(dòng)化測(cè)試,還需要持續(xù)的業(yè)務(wù)和技術(shù)風(fēng)險(xiǎn)分析,以及整個(gè)持續(xù)集成過程的流程改進(jìn)和自動(dòng)化。從本質(zhì)上來說,持續(xù)測(cè)試還是伴隨DevOps發(fā)展出來的一種文化,它要求開發(fā)團(tuán)隊(duì)中的每個(gè)成員都把產(chǎn)品質(zhì)量當(dāng)作是共同的責(zé)任。此外,持續(xù)測(cè)試也是一種管理風(fēng)險(xiǎn)的方法,它可以通過提高測(cè)試流程的有效性和效率來消除測(cè)試瓶頸。
下面是由業(yè)內(nèi)專家總結(jié)的持續(xù)測(cè)試策略四大關(guān)鍵步驟:
1、簡(jiǎn)化測(cè)試流程
簡(jiǎn)化測(cè)試流程包含三部分內(nèi)容:關(guān)注業(yè)務(wù)風(fēng)險(xiǎn)、解決測(cè)試瓶頸,以及優(yōu)化測(cè)試。
業(yè)務(wù)風(fēng)險(xiǎn):
DevOps以及持續(xù)測(cè)試的最終目標(biāo)都是降低業(yè)務(wù)風(fēng)險(xiǎn),而所謂的業(yè)務(wù)風(fēng)險(xiǎn)實(shí)際上是來自于客戶和組織兩方面的風(fēng)險(xiǎn)組成。
客戶風(fēng)險(xiǎn)涉及了解應(yīng)用程序工作流程中哪個(gè)環(huán)節(jié)對(duì)客戶來說最為重要,并相應(yīng)地規(guī)劃基于這些環(huán)節(jié)可能出現(xiàn)風(fēng)險(xiǎn)的測(cè)試覆蓋率。
組織風(fēng)險(xiǎn)涉及了解商業(yè)環(huán)境以及產(chǎn)品本身的復(fù)雜性。例如,是為了搶占市場(chǎng)而讓產(chǎn)品率先上市重要,還是產(chǎn)品本身的健康度或安全性更重要?
一旦準(zhǔn)確評(píng)估了整體業(yè)務(wù)風(fēng)險(xiǎn),開發(fā)團(tuán)隊(duì)?wèi)?yīng)該將需求、應(yīng)用程序組件和測(cè)試映射到這些風(fēng)險(xiǎn)中。
解決瓶頸:
在開發(fā)測(cè)試流程中,識(shí)別和緩解可能出現(xiàn)的瓶頸至關(guān)重要,這些瓶頸通常是阻礙最終交付產(chǎn)品質(zhì)量和交付速度最重要的因素。這一過程通常貫穿產(chǎn)品需求到生產(chǎn)上線后的整個(gè)軟件開發(fā)生命周期。
舉幾個(gè)例子,比如在某項(xiàng)待辦事項(xiàng)中缺乏測(cè)試人員,沒有在這一環(huán)節(jié)建立驗(yàn)收標(biāo)準(zhǔn),沒有及時(shí)解決缺陷,導(dǎo)致項(xiàng)目上線延期;比如某自動(dòng)化測(cè)試套件運(yùn)行時(shí)間過長,以及手動(dòng)完成后期生產(chǎn)檢查,導(dǎo)致效率低下。
這一步通常需要開發(fā)團(tuán)隊(duì)使用一些自動(dòng)化工具來解決。自動(dòng)化測(cè)試工具是測(cè)試人員用來提高測(cè)試效率的輔助工具。
就比如在業(yè)界家喻戶曉的Selenium,它被認(rèn)為是Web應(yīng)用程序用戶界面自動(dòng)化測(cè)試的行業(yè)標(biāo)準(zhǔn)。根據(jù)“測(cè)試自動(dòng)化挑戰(zhàn)調(diào)查”顯示,十分之九的測(cè)試人員在其項(xiàng)目中使用或曾經(jīng)使用過Selenium。但為了有效地使用Selenium,用戶必須具備高級(jí)編程技能,并且需要花費(fèi)大量時(shí)間來構(gòu)建自動(dòng)化所需的自動(dòng)化框架和庫,這是Selenium的主要缺點(diǎn),雖然可以通過Katalon Studio等集成工具解決,但其依然對(duì)測(cè)試人員的能力提出了較高的要求。
對(duì)于測(cè)試人員并不充足的團(tuán)隊(duì),也可以使用一些自動(dòng)化測(cè)試平臺(tái)來解決測(cè)試瓶頸。例如由飛算獨(dú)立研發(fā)的飛算SoFlu全自動(dòng)軟件工程平臺(tái),其全自動(dòng)測(cè)試平臺(tái)提供了測(cè)試生命周期管理、測(cè)試數(shù)據(jù)管理和精準(zhǔn)回歸測(cè)試等一站式自動(dòng)化測(cè)試功能。依托平臺(tái)的測(cè)試用例自動(dòng)生成等特性,可以讓測(cè)試人員無需編寫腳本,即可快速完成自動(dòng)化測(cè)試工作,提升項(xiàng)目上線效率。
優(yōu)化測(cè)試:
如果說依靠自動(dòng)化測(cè)試工具可以解決團(tuán)隊(duì)在DevOps流程中遇到的效率瓶頸,那么測(cè)試優(yōu)化則是在持續(xù)測(cè)試流程中實(shí)施自動(dòng)化策略的基礎(chǔ),它要求測(cè)試團(tuán)隊(duì)選擇正確的測(cè)試方法,這些測(cè)試以最少的測(cè)試用例提供團(tuán)隊(duì)所需的測(cè)試覆蓋率,即從策略層面提升測(cè)試的效率。
這是一個(gè)動(dòng)態(tài)的、持續(xù)的過程,尤其是作為連續(xù)測(cè)試框架的一部分應(yīng)用時(shí)。測(cè)試優(yōu)化應(yīng)該在自動(dòng)化之前進(jìn)行,并且必須在整個(gè)連續(xù)測(cè)試過程中持續(xù)進(jìn)行。第一步通常是通過了解關(guān)鍵用戶工作流程中涉及的所有集成來優(yōu)化測(cè)試范圍——包括這些應(yīng)用程序中采用的技術(shù)(網(wǎng)絡(luò)、移動(dòng)、消息/API層等)。
一旦團(tuán)隊(duì)對(duì)測(cè)試范圍有了清晰的了解,下一步就是優(yōu)化測(cè)試用例。這不僅包括分析測(cè)試用例的質(zhì)量和詳細(xì)程度,還包括選擇提供最高測(cè)試覆蓋率的測(cè)試。團(tuán)隊(duì)的測(cè)試套件應(yīng)設(shè)計(jì)為以最少的測(cè)試用例提供最大的覆蓋量,以提高質(zhì)量和速度。前文提到的飛算SoFlu全自動(dòng)測(cè)試平臺(tái)就可以通過錄制工具把測(cè)試人員的操作過程記錄下來,并能夠自動(dòng)識(shí)別相關(guān)的接口并創(chuàng)建相應(yīng)的測(cè)試用例場(chǎng)景,實(shí)現(xiàn)自動(dòng)優(yōu)化測(cè)試用例。
一些團(tuán)隊(duì)默認(rèn)「每次運(yùn)行所有的測(cè)試」來保證代碼覆蓋率。這不但浪費(fèi)資源還延長了測(cè)試周期,而且沒有真正保證代碼覆蓋率。測(cè)試那些需要測(cè)試的部分,以節(jié)省時(shí)間和資源。可視化模型可以讓各種路徑被探索優(yōu)化,以便只用少量的測(cè)試用例就能提供最大化的覆蓋率。
2、在整個(gè)CI流程中實(shí)現(xiàn)自動(dòng)化測(cè)試
持續(xù)測(cè)試需要在整個(gè)交付流程中實(shí)現(xiàn)測(cè)試自動(dòng)化。測(cè)試自動(dòng)化提高了部署速度并降低了持續(xù)交付中固有的風(fēng)險(xiǎn)。
但持續(xù)測(cè)試框架內(nèi)的自動(dòng)化不僅僅是開發(fā)和維護(hù)自動(dòng)化回歸測(cè)試組件。事實(shí)上,很多不間斷運(yùn)行自動(dòng)化回歸測(cè)試組件會(huì)在持續(xù)部署過程中造成瓶頸。持續(xù)測(cè)試需要一個(gè)測(cè)試自動(dòng)化策略來增強(qiáng)而不是阻礙持續(xù)交付過程。
例如飛算SoFlu全自動(dòng)測(cè)試平臺(tái)提供的精準(zhǔn)回歸測(cè)試功能,該功能在項(xiàng)目測(cè)試時(shí)能夠自動(dòng)識(shí)別所有變動(dòng)的接口,自動(dòng)查找接口關(guān)聯(lián)的所有測(cè)試用例進(jìn)行精準(zhǔn)回歸測(cè)試。
自動(dòng)化測(cè)試策略必須在構(gòu)建過程的每一步都包含自動(dòng)檢查點(diǎn)。首先是驗(yàn)證單個(gè)代碼片段的單元測(cè)試和驗(yàn)證關(guān)鍵特性的組件測(cè)試。基于風(fēng)險(xiǎn)的回歸測(cè)試套件應(yīng)根據(jù)開發(fā)者當(dāng)前正在實(shí)施的功能進(jìn)行定制。
在項(xiàng)目上線到生產(chǎn)環(huán)境中時(shí),持續(xù)測(cè)試要求團(tuán)隊(duì)通過部署健康檢查系統(tǒng)來確保應(yīng)用正常運(yùn)行,生產(chǎn)監(jiān)控應(yīng)在客戶發(fā)現(xiàn)之前發(fā)現(xiàn)產(chǎn)品的功能和性能問題。
總而言之,在持續(xù)測(cè)試策略中,測(cè)試自動(dòng)化必須設(shè)計(jì)為高效運(yùn)行(可利用自動(dòng)化工具),同時(shí)提供可靠、一致、可重復(fù)的結(jié)果。
3、左移原則
傳統(tǒng)測(cè)試主要集中在軟件開發(fā)周期的最后,即產(chǎn)品發(fā)布之前的集中測(cè)試。為了迎合不斷加快的交付頻率,越來越多團(tuán)隊(duì)的測(cè)試活動(dòng)開始向左右兩側(cè)移動(dòng)。一般問題修復(fù)成本較高和面向企業(yè)收費(fèi)的軟件,一旦生產(chǎn)環(huán)境中出現(xiàn)了問題會(huì)造成比較大的損失,通常采取測(cè)試左移的方式;對(duì)于具有展示功能的軟件產(chǎn)品,更容易在生產(chǎn)環(huán)境中發(fā)現(xiàn)問題,通常采取測(cè)試右移的方式。
測(cè)試左移是DevOps流程中常見的模式,指的是測(cè)試人員更早地參與到軟件項(xiàng)目前期的各項(xiàng)活動(dòng)中,在功能開發(fā)之前定義好相關(guān)的測(cè)試用例,提前發(fā)現(xiàn)質(zhì)量問題。早期引入測(cè)試過程有助于防止缺陷,并為開發(fā)人員提供在整個(gè)開發(fā)階段應(yīng)用動(dòng)態(tài)變更的靈活性。
4、對(duì)質(zhì)量負(fù)責(zé)
這一步是持續(xù)測(cè)試策略的基礎(chǔ),它要求團(tuán)隊(duì)中的所有成員(包括開發(fā)、測(cè)試和運(yùn)維)都需要為項(xiàng)目的質(zhì)量負(fù)責(zé)。
業(yè)內(nèi)專家認(rèn)為,DevOps中質(zhì)量保證不再是測(cè)試人員的專屬責(zé)任,而是全體人員都要為之努力的方向。持續(xù)測(cè)試的成功實(shí)施離不開團(tuán)隊(duì)內(nèi)部及跨團(tuán)隊(duì)的協(xié)作。測(cè)試人員需提前介入到開發(fā)工作中,與開發(fā)人員一起制定測(cè)試計(jì)劃;開發(fā)人員可以參與配置部署;運(yùn)維人員可以向自動(dòng)化測(cè)試用例庫填寫測(cè)試用例;測(cè)試人員隨時(shí)將自動(dòng)化測(cè)試用例配置到持續(xù)交付鏈中,所有成員的共同目的都是交付高效、高質(zhì)量的產(chǎn)品。
這種趨勢(shì)也催生了很多自動(dòng)化開發(fā)、測(cè)試和運(yùn)維工具以降低這些領(lǐng)域的技術(shù)門檻。同樣以飛算SoFlu全自動(dòng)軟件工程平臺(tái)為例,該平臺(tái)提供了全自動(dòng)開發(fā)、全自動(dòng)測(cè)試和全自動(dòng)運(yùn)維工具,可以管理從需求、研發(fā)、測(cè)試、部署、上線到運(yùn)維的整個(gè)軟件生命周期,真正實(shí)現(xiàn)了軟件工程開發(fā)、測(cè)試、運(yùn)維全流程自動(dòng)化。這種新興的全自動(dòng)工具降低了開發(fā)、測(cè)試和運(yùn)維門檻,能夠幫助任何一家企業(yè)快速構(gòu)建一支DevOps開發(fā)團(tuán)隊(duì)。
DevOps打破了開發(fā)和運(yùn)維之間的障礙,縮短了開發(fā)周期。其中,持續(xù)集成、持續(xù)測(cè)試、持續(xù)交付都是提高質(zhì)量的關(guān)鍵催化劑,而持續(xù)測(cè)試則更具挑戰(zhàn)性。掌握DevOps生命周期的持續(xù)測(cè)試,對(duì)于我們充分理解DevOps起著至關(guān)重要的作用。