如果解決測試之痛《特別是單元 整合測試之痛》

2021-06-05 08:36:57 字數 4432 閱讀 5228

羅馬城非朝夕建成,測試體系非一日之功

【概念】

說到測試,最主要的是,檢測**是否滿足特定的邏輯,檢測**是否滿足業務的需求。
測試還需要有一些附加特性,如:快速響應、可重複執行、可持續維護等。

目前的測試基本可以分為:

單元測試:檢測**片段的測試,基本是以**結構為衡量,屬於百盒測試。

整合測試:整合各個系統的各個模組,各個**片段的,主要以業務為角度。屬於黑盒測試。

驗收測試:主要是人工頁面驗證,使用者演示,pd驗證等,此主要是測試功能是否正確,以業務為出發點。一般是人工進行,比較難進行自動化。

【現狀】

單元測試、整合測試、驗收測試,三者之間合理的關係如下:

上圖是測試的**三角,但是我們由於過去自動化測試只是弄了乙個概念,叫單元測試,後大家寫測試的時候,就弄成了如下的圖形了。單元測試寫的不成樣子,成了一窩粥了。

如果把單元測試中寫得像整合測試的抽出來當做整合測試的話,在系統中的測試算得上單元測試的基本沒有多少了。那 就成了倒三角了。如下圖所示:

痛一:單元測試沒有發揮單元測試的作用,寫得像整合測試的測試也寫得四不像的。維護成本非常高,基本不可維護了

為此,需要把單元測試中寫得像整合測試的case,名正言順的換了名稱,叫做整合測試

(不是直接改,做整合測試需要新的方法,這裡只是笑談罷了)。單元測試做好本職的工作,完成**片段的測試。如果單元測試與整合測試的分工明確,測試**的可讀性也非常高。

痛二:驗收測試成本非常高,大量的手工測試,不可重複執行。

此點也需要引入以業務為出發的整合測試,以業務為出發點,減少驗收測試的比例。

最終:把我們倒三角,變成正三角。

因為整合測試在其中起著非常重要的作用,下面講下,整合測試的一些討論及心得,

【整合測試】

業界對整合測試有一定的定義,這裡主要講下我對整合測試的理解。整合測試主要是把模組,**片段銜接起來的測試。在阿里巴巴核心系統,從**可行性出發,也就是從業務的角度設計整合測試的用例,也就是整合測試的用例主要是面向業務的。

【反對者】

不管啥東西,肯定都有反對的聲音的,目前主要的反對的聲音有:

1、維護難,維護成本較高 

2、整合測試的成果怎麼評估。

3、整合構建時間長,開發不容易專注。

在網際網路上也有人(如:

j.b. rainsberger)說整合測試是乙個陰謀。

【整合測試解決方案】

為此,最近有同學組織了專門針對整合測試執行問題的討論。以下是會議紀要,我大致整理下,紅色字型是我的一些補充及觀點。

1、整合測試做什麼、目的?

整合測試是一種基於測試用例,業務驅動的自動化測試方法;通過與單元測試合理分工,解決單元測試、整合測試邊界不清、佔比少、單元測試因對資料庫依賴、載入spring時執行時間過長的問題。【

基本靠譜,但是最好不要脫離整合測試的本質思想,他就是整合各個系統的各個模組,各個**片段的。當然可以針對業務場景,業務用例case來實現】

2、價值在**?【

以下總結還行的,其實以前是缺乏整合測試的,或者沒有好的指導方法。】

1)減少手工測試執行比,實現**質量的短反饋;【

可以自動】

2)測試人員提前介入測試;

3)界定單元測試、整合測試邊界;

4)解決ui自動化執行慢、不穩定、對環境依賴性強的問題;

5)可在專案結束後持續整合、對**重構、**核心業務功能的正常、穩定執行提供質量保證;

6)測試**的可讀性強;

7)在編碼過程中,發現**不可測或難於測試,提高業務**的可測性;

3、開發、測試如何協同?

【其實在很多的公司,如google,開發對系統的質量負有全部責任的。測試同學更多是提供一種測試的支援,測試更多是乙個角色,不是乙個崗位,阿里目前部分團隊還是有專門的測試同學的,導致開發很大程度上面把系統的質量交給測試了。】

1)開發同學對整合測試**進行codereview;

2)通過協商,使單元測試、整合測試實現合理分工,避免重複測試、無效測試;

3)開發同學的設計文件中,對最接近web層**、service層介面詳細描述,並說明相關的互動場景、互動流程;

4)開發同學協助測試人員搭建整合測試框架,重點包括:子工程目錄設計、antx.properties檔案、intergration.xml檔案、pom.xml檔案等相關配置檔案;

4、整合測試可行性參考因素【

整合測試本身是沒有問題,關鍵在於測試的用例設計,不要把case設計得過於細,對於一些user story,case比較多,是可以考慮把部分的case放到單元測試實現,個人感覺對於乙個user story的case,4個用在整合測試下,應該是比較好的。

user story的case比較多,那是否考慮,

user story的合理性了。

關於與單元測試的關係,單元測試主要關注**片段的邏輯。更本就不存在與單元測試重複的問題, 如果重複也應該是單元測試寫的有問題。】

1)對核心、穩定(業務相對穩定)功能進行整合測試;
2)不與現有單元測試覆蓋功能重複;
3)能減少手工測試執行時間、縮短專案週期;

5、會不會延長專案週期【

此點在前期,框架不完善、測試開發對此不熟悉的情況下,還是可能會增加專案的工時的,但是等測試已經形成一定的規模後,還是可縮短測試時間的,特別是一些底層框架的公升級,基本不需要測試手工執行測試了。】

不會,qa提前介入、減少手工回歸測試範圍;

6、**編寫、維護成本如何減少?【

當然第一靠case的質量,第二看開發者的抽象的能力,第三靠框架了。】

框架優化,公司目前有專門的框架支援的。

以上基本可以回答反對者的擔心的問題了,還有一點就是整合測試構建時間的問題,對於單個case,可能需要幾分鐘,此點可以通過框架層解決。如:延遲載入等技術。對於測試整合慢,可以分階段整合,可以參考『參考資料』。
【再此思考】

我們還是記住測試的**三角圖形,單元測試是保證**片段的質量的。整合測試主要以業務case的角度來編寫測試的,保障核心的業務功能。希望能通過自動化的整合測試,減少測試的手工測試成本。關於驗收測試,基本是客戶體驗,pd驗證了,此主要是通過手工驗證的。

最後強調地是整合測試也並非銀彈,沒有一種實踐能解決所有的問題,必須合理把一些實踐合理地分工,才能解決大部分問題。

【參考資料】
整合測試是乙個陰謀:

持續整合之「測試三角形與分段構建策略原則」:

continuous integration (original version):

continuous integration:

如果繼續測試

最近趁這個機會想了很多東西,尤其是怎樣選擇會對自己的長期發展有利。根據就業市場的反饋,我感覺無論是繼續做測試還是轉到開發都應該持續自己的背景經驗。比如我是做安全的,因此換到另外乙個領域搞開發很可能不如繼續在這個領域做測試,只要是自己的工作和能力能夠得到發揮和認可。再跟領導的談話中基本上都肯定了我的工...

收屍,不可掩埋之痛

我今天又做了一把孫子,在客戶面前當你處於無理狀態的時候就只能做孫子。這是這孫子俺做的非常不爽,因為俺是在給別人收屍才做的孫子。俺一直想問it人士乙個問題 你有好的職業道德嗎?你知道什麼叫做職業道德嗎?留下乙個尾巴就走人,有沒有一點責任心?沒有責任心的人如何能夠被信任,如果能夠做事?老子今天上午去面試...

天鵝湖之痛

終於放假了,可惜只有10天,更可惜的是我不能再像五一那樣蹬著我的輪鞋刷過合肥的大街小巷了。像乙隻折翼的鳥兒,我只能呆在自己的巢裡。想不到6月2日的天鵝湖之旅竟成了 天鵝淒美的絕唱 天鵝湖我不知刷過多少次,十公里都不到,這點路程對我來說不過是小菜一碟,以前都是晚上去的,來回40分鐘的樣子,權當是散步了...