韓欣 張毅
(中國移動(深圳)有限公司,廣東 深圳 518048)
一種基于用例依賴關(guān)系自動生成測試調(diào)度的方法
韓欣 張毅
(中國移動(深圳)有限公司,廣東 深圳 518048)
本文首先針對自動化測試的現(xiàn)狀,分析了自動化測試在深入開展后遇到的問題。通過對測試用例間依賴關(guān)系的系統(tǒng)分析,提出基于用例依賴關(guān)系的解決方案與應(yīng)用實現(xiàn)。實驗結(jié)果表明基于用例依賴關(guān)系的應(yīng)用可以快速生成高可靠性的調(diào)度及有效消除缺陷誤報。
用例依賴;自動生成調(diào)度;誤報消除;前置條件
隨著近幾年互聯(lián)網(wǎng)業(yè)務(wù)的發(fā)展,軟件自動化測試技術(shù)越來越受到關(guān)注,在回歸與迭代測試中廣泛應(yīng)用。特別是自動化測試框架的更完整應(yīng)用使自動化測試平臺可以應(yīng)用更多其他的測試技術(shù)讓自動化測試入門更簡單,操作更方便,結(jié)果查看更清晰。
自動化測試平臺的大力推廣,大大提高了軟件測試工作的效率,尤其在回歸測試中,把一些重復(fù)的、機械的測試任務(wù)交給計算機去做,很大程度上減輕了測試人員的壓力,并通過增加測試覆蓋率等方式一定程度上提高了回歸測試的準(zhǔn)確性。
但隨著自動化測試平臺的深入使用,測試需求日趨復(fù)雜,自動化測試用例日趨增多,每日執(zhí)行的調(diào)度與用例均越來越多,一些問題變得日趨嚴(yán)重,亟待解決。
(1)組建一個新的調(diào)度比較費時,自動化測試中測試執(zhí)行人員很多時候不是之前的用例設(shè)計人員,所以其有可能不理解測試用例之間的關(guān)系,導(dǎo)致面對一個新的測試任務(wù),需要花費時間先去梳理用例與需求及用例之間的關(guān)系,然后才能組建一個調(diào)度,而目前的用例僅能以目錄或用例名去區(qū)分測試用例的測試目的,所以有的時候還可能有紕漏,導(dǎo)致某一個依賴用例未在調(diào)度中或順序不對,導(dǎo)致調(diào)度執(zhí)行出現(xiàn)大量用例失敗。
(2)重新執(zhí)行調(diào)度與問題定位困難,自動化測試用例雖然執(zhí)行用例速度很快,但如執(zhí)行完一個300個用例的調(diào)度還是需要耗費上數(shù)小時的時間,如何在一個調(diào)度執(zhí)行后快速地執(zhí)行調(diào)度中的失敗用例以進(jìn)行回歸測試,以及如何在定位問題時,快速有效執(zhí)行當(dāng)前缺陷關(guān)聯(lián)的相關(guān)用例,成為需要解決的問題。
(3)自動化測試的大量缺陷誤報消除,自動化測試中每個用例失敗都會報一個異常,但實際上這些用例失敗可能只是部分測試用例執(zhí)行失敗導(dǎo)致的連環(huán)失敗,大量的缺陷誤報必將引起對自動化測試的正確性及有效性懷疑,阻礙自動化測試的繼續(xù)推廣與應(yīng)用。
這些問題讓測試人員感覺本來應(yīng)該簡單快捷的自動化測試,變得日趨繁瑣復(fù)雜,耗費著他們更多的時間,每日沉溺于調(diào)度執(zhí)行,調(diào)度分析讓他們沒有更多的時間去關(guān)注業(yè)務(wù)本身、用例設(shè)計,很大程度阻礙著自動化測試的深入拓展與應(yīng)用。這就是現(xiàn)在多數(shù)企業(yè)深入開展自動化測試的現(xiàn)狀,也是現(xiàn)階段自動化測試大規(guī)模使用所面臨的難題。
針對自動化測試持續(xù)深入開展面臨的難題,筆者認(rèn)為應(yīng)該從用例層出發(fā),最大程度地加強用例與業(yè)務(wù)、測試數(shù)據(jù)的關(guān)系。具體可以從三個方面來考慮:
(1)在平臺上建立用例間的關(guān)系,能夠讓后來的測試人員很快熟悉測試用例設(shè)計的思路與測試用例的結(jié)構(gòu),同時用例間的關(guān)系在平臺上應(yīng)提供清晰直觀的查看方式及動態(tài)調(diào)
整方式。
(2)利用用例間的關(guān)系,根據(jù)關(guān)鍵用例查找出與其有依賴關(guān)系的用例,自動生成調(diào)度。
(3)基于用例的依賴關(guān)系消除缺陷誤報,如當(dāng)前用例所依賴的最弱前置用例執(zhí)行失敗時,則當(dāng)前用例失敗,不生成錯誤缺陷,以達(dá)到消除缺陷誤報。
從用例執(zhí)行順序上考慮,測試用例間的關(guān)系包括前置、后置、可并行,前置與后置是形成測試執(zhí)行時的串行執(zhí)行順序,可并行對執(zhí)行順序無特殊影響與要求,對于兩個相鄰的用例來說,第一條用例的后置條件就是第二用例的前置條件。所以如能解決測試用例的前置關(guān)系即可解決自動生成調(diào)度及消除缺陷誤報的問題。
3.1 前置條件與最弱前置條件
前置條件(Precondition)描述這樣一些狀態(tài),由這些狀態(tài)可以成功地執(zhí)行一個操作。前置條件還是測試用例的一個組成部分,它和由某種測試方法所標(biāo)志的實際輸入一起構(gòu)成了測試用例的完整輸入。在測試過程中,測試人員或自動化工具根據(jù)前置條件決定是否執(zhí)行測試用例,因此對前置條件的分類和參數(shù)化有助于提高軟件測試的自動化過程[6-8]。
測試用例的前置條件分析需要從需求中去分析,軟件功能和使用方式的復(fù)雜性決定了前置條件的多樣性。軟件的某項操作可能要求必須在其他某項或某幾項的操作執(zhí)行完成之后才能進(jìn)行。這幾項操作之前有可能存在前置關(guān)系或不存在前置關(guān)系即并行關(guān)系。這里主要介紹如何分析測試用例的前置用例。
以系統(tǒng)用戶管理功能為例,只有登錄系統(tǒng)才能進(jìn)行賬號增刪改查等操作,如存在以下用例:登錄、退出、用戶添加、用戶修改、新增用戶查詢,修改后用戶查詢、用戶刪除。各功能編寫一個用例,預(yù)期結(jié)果為受理成功。新增用戶查詢?yōu)椴樵冃略龊蟮馁~號是否存在。修改后用戶查詢?yōu)椴樵冃薷挠脩羰欠癯晒Α?/p>
定義如果操作O在執(zhí)行之前必須依次執(zhí)行操作PO1,PO2,…,POi(i≥1),那么就稱操作序列PO1,PO2,…,POi (i≥1)是操作O的前置約束,邏輯表達(dá)式為
如果在操作O執(zhí)行前依次執(zhí)行操作PO1,PO2,…,POi (i≥1),則約束滿足,表達(dá)式的值為真;反之則約束不滿足,表達(dá)式的值為假。
以網(wǎng)廳功能為例,可進(jìn)行以下表示:
表1 用例前置條件表達(dá)式
說明:實際需求中用戶添加肯定不允許添加兩個相同的用戶,所以在用戶添加之前必須保證沒有相同用戶名的用例,但在這里我們不會把用戶刪除或用戶修改作為前置用例,因為如作為前置條件,將導(dǎo)致依賴關(guān)系存在閉環(huán)操作。即前置條件不能形成閉環(huán)的操作。
根據(jù)最弱前置條件即保證相關(guān)后置條件有效的限制最小的前置條件考慮,即如用戶添加用例能夠執(zhí)行成功,則當(dāng)前一定為登錄狀態(tài),所以基于最弱前置條件考慮優(yōu)化后的前置條件表達(dá)式如下:
表2 用例前置條件表達(dá)式
3.2 有向無環(huán)圖
根據(jù)以上的分析研究,用例間的依賴關(guān)系有以下特點:(1)存在依賴關(guān)系;(2)有至少一個不依賴其他測試用例;(3)不存在閉環(huán)的依賴關(guān)系。與有向無環(huán)圖的特點類似。有向無環(huán)圖(directed acycline graph):無環(huán)的有向圖,簡稱DAG圖。DAG圖是一類較有向樹更一般的特殊有向圖,基于向無環(huán)圖的經(jīng)典算法有拓?fù)渑判颉?/p>
以上用例關(guān)系形成有向無環(huán)圖如圖1:
圖1 有向無環(huán)圖
3.3 拓?fù)渑判?/p>
拓?fù)渑判蚴菍τ邢驘o環(huán)圖的頂點的一種排序,它使得如果存在一條從頂點A到頂點B的路徑,那么在排序中B出現(xiàn)在A的后面。
具體的算法思想如下:
(1)在有向圖中選一個沒有前驅(qū)的頂點且輸出之。
(2)從圖中刪除該頂點和所有以它為尾的弧。
(3)重復(fù)上述兩步,直至全部頂點均已輸出,或者當(dāng)前圖中不存在無前驅(qū)的頂點為止。
圖1所示的有向無環(huán)圖經(jīng)拓?fù)渑判蚝罂尚纬梢韵碌膸讉€執(zhí)行順序:
以上的執(zhí)行順序中,依據(jù)實際需求僅第一個順序所有的用例才能執(zhí)行成功,原因是,用例2(退出)的執(zhí)行會導(dǎo)致其他節(jié)點依賴的用戶1(登錄)的狀態(tài)無效,而5、7用例的執(zhí)行也會導(dǎo)致4用例依賴的數(shù)據(jù)變更或消失。故必須對算法與結(jié)構(gòu)圖做如下優(yōu)化:
(1)對節(jié)點同頂級節(jié)點設(shè)置優(yōu)先級,即在對階段1排序后,會存在2、3的兩個無頂點節(jié)點,必須將2的優(yōu)先級降為最低,最后執(zhí)行才行。同樣對節(jié)點4、5、7也設(shè)置優(yōu)先級。
(2)必須遍歷一個子節(jié)點下的所有無頂級節(jié)點后,再返回查找無頂級節(jié)點。如必須將3節(jié)點下的所有無頂級節(jié)點排序后再查找無頂級節(jié)點。
由以上得知用例間不止有執(zhí)行順序上的依賴關(guān)系,還包括用例執(zhí)行后對記錄或數(shù)據(jù)的影響,所以詳細(xì)分析后置用例對前置用例執(zhí)行結(jié)果的影響,又可分為以下三種:
(1)無影響,后置用例的執(zhí)行不影響前置用例的執(zhí)行結(jié)果,如查詢、記錄查看、修改取消、刪除取消等。
(2)數(shù)據(jù)變更,后置用例的執(zhí)行會導(dǎo)致前置用例的執(zhí)行結(jié)果數(shù)值或記錄狀態(tài)的變更,如:修改、記錄鎖定等。
(3)結(jié)果互斥,后置用例的執(zhí)行會導(dǎo)致前置用例的執(zhí)行結(jié)果數(shù)值或記錄的消失或狀態(tài)結(jié)束,如:刪除、注銷等。
基于以上分析測試用例間關(guān)系可歸納為以下四種:1、前置2、前置變更3、前置互斥4、無關(guān)。是否存在前置影響用例間執(zhí)行依賴,當(dāng)多個用例依賴同一個用例時,前置依賴類型影響用例的執(zhí)行優(yōu)先級。其執(zhí)行優(yōu)先級為前置>前置變更>前置互斥>無關(guān)。即在有向無環(huán)圖中增加對同頂級節(jié)點的優(yōu)先級定義,假定:前置p=1,前置變更p=2,前置互斥p=3。更新后的有向無環(huán)圖如圖2:
圖2 有向無環(huán)圖
4.1 基于用例依賴關(guān)系的自動生成調(diào)度
在前部分提到的自動化測試平臺上組建調(diào)度困難問題,期望能達(dá)到的場景為:
測試人員組建調(diào)度時,只需根據(jù)測試需求,挑選出需求對應(yīng)的關(guān)鍵用例,平臺根據(jù)這些用例,自動把這些用例存在前置條件的用例一并加到調(diào)度中,并去掉重復(fù)的用例,然后根據(jù)依賴關(guān)系的優(yōu)先順序?qū)τ美M(jìn)行排序,即A是B的前置,B是C的前置,B也是D的前置,CD之間沒關(guān)系,那么如果用戶要執(zhí)行用例C、D,平臺需要把A、B都加到調(diào)度,并最終形成ABCD或ABDC的執(zhí)行順序。目標(biāo)是保證所有的用例都能夠有效地執(zhí)行。
重新執(zhí)行調(diào)度與問題定位方法類似,平臺根據(jù)所有失敗的用例或缺陷關(guān)聯(lián)的用例找出所有存在依賴關(guān)系的測試用例。這里主要涉及到兩個問題需要解決:
(1)根據(jù)一組用例查找出與這組用例所依賴的前置用例,以及這組用例的存在前置互斥關(guān)系的后置用例。保證調(diào)度執(zhí)行后數(shù)據(jù)或記錄狀態(tài)的恢復(fù)。
(2)對第一條中找到的用例按依賴關(guān)系進(jìn)行排序。
4.1.1 查找用例算法
算法思路:根據(jù)選擇的一個或多個用例節(jié)點,依據(jù)用例依賴關(guān)系圖,使用遞歸算法查找用例的所有的依賴節(jié)點并去重。
4.1.2 用例排序算法
算法思路:
(1)查找依賴度為0的節(jié)點,如果存在為0的節(jié)點,加入棧q,否則該圖是有向有圖;
(2)取隊列棧的最后一個節(jié)點V,加入list;
(3)查找對V是互斥依賴且入度為1的節(jié)點,加入棧q中;
(4)查找對V是更新依賴且入度為1的節(jié)點,加入棧q中;
(5)查找對V是約束依賴且入度為1的節(jié)點,加入棧q中;
(6)將V節(jié)點從其它節(jié)點的依賴表中移除;
(7)如果棧q不為空,轉(zhuǎn)到(2),否則,轉(zhuǎn)到(1)。
4.2 基于用例依賴關(guān)系的誤報消除
在已有平臺執(zhí)行結(jié)果的基礎(chǔ)上,根據(jù)用例的依賴關(guān)系去消除缺陷誤報,具體思路為當(dāng)前用例執(zhí)行失敗時,檢測當(dāng)前用例的前置依賴用例是否執(zhí)行成功,如成功則生成缺陷,如執(zhí)行依賴用例中存在用例執(zhí)行失敗,則不生成缺陷。以此達(dá)到消除缺陷誤報的目的。說明:此處查找當(dāng)前用例的依賴用例僅需查找一級即可,不需遞歸循環(huán)查詢所有前置依賴用例。
本文通過當(dāng)前測試現(xiàn)狀的分析,對自動化測試存在的問題進(jìn)行了分析,并提出了基于用例依賴關(guān)系的解決方案?;谏衔牡姆治隹梢钥闯觯疚牡脑O(shè)計思路是基于筆者當(dāng)前的自動化測試平臺,但存在的問題及解決方案的思路是有共性存在的,希望能對存在類似問題的提供一種解決問題的思路。
[1]Hovemeyer D,Pugh W.Finding more null pointer bugs,but not too many[A].[S.l.]:ACM,2007.9-14.
[2]陳技能.自動化測試實踐[M].北京:電子工業(yè)出版社.2008.
[3]葉偉.互聯(lián)網(wǎng)實彈的軟件革命:SaaS架構(gòu)設(shè)計[M].北京:電子工業(yè)出版社.2009
[4]王奇,曹良帥,趙賢敬,等.基于SaaS的自動化測試云平臺研究[J].電信工程技術(shù)與標(biāo)準(zhǔn)化,2012,25(10):67-72.
[5]朱菊,王志堅,楊雪.基于數(shù)據(jù)驅(qū)動的軟件自動化測試框架[J].計算機技術(shù)與發(fā)展,2006,16(5):68-70.
[6]嚴(yán)少清,陳革,萬年紅.軟件測試自動化管理系統(tǒng)的設(shè)計與實現(xiàn)[J].計算機工程,2002,28(9):152-153.
[7]黃若藝,毛澄映.基于依賴性分析的回歸測試用例選擇[J].微計算機信息,2005,(23):184-185.
AMethod forAutomatic Generation of Test Scheduling Based on the Dependency Relationships among Use Cases
Han Xin Zhang Yi
(China Mobile Shenzhen Co.,Ltd.,Shenzhen 518048,Guangdong)
tract】 Based on the status of the automatic test,this paper analyzes the problems in it.With the analysis of the dependency relationships among test cases,this paper proposes the solution and implementation based on the dependency relationships of the use cases.Results show that the application of dependency relationships among use cases can generate highly reliable scheduling fast and effectively eliminate defects.
words】 use case dependency;automatic generation of scheduling;defect elimination;precondition
TP311.52
A
1008-6609(2016)09-0043-04
韓欣,女,河南周口人,本科,高級工程師,研究方向:自動化測試、系統(tǒng)分析、測試?yán)碚摰取?/p>