馬秀穎
(北方工業(yè)大學(xué),北京 100144)
敏捷開(kāi)發(fā)是一種非常流行的軟件開(kāi)發(fā)和管理方法。它的特性之一是在項(xiàng)目分析階段使用用戶(hù)故事來(lái)表達(dá)需求。用戶(hù)故事的廣泛使用使得它們變得越來(lái)越重要,而判斷它們是否被實(shí)現(xiàn)和滿(mǎn)足尤其重要。驗(yàn)收測(cè)試用于解決這個(gè)問(wèn)題。本項(xiàng)研究工作從用戶(hù)故事和驗(yàn)收準(zhǔn)則兩方面討論了最新的研究工作方法,希望為相關(guān)研究者提供參考。
在敏捷開(kāi)發(fā)中,用戶(hù)故事(user story)是軟件系統(tǒng)最終用戶(hù)用來(lái)描述系統(tǒng)所做或需要做的工作的若干句描述。它是軟件需求的傳統(tǒng)方法——軟件需求說(shuō)明書(shū)或用例等的一種輕量級(jí),更靈活的替代品。實(shí)際上,可以說(shuō)用戶(hù)故事是敏捷開(kāi)發(fā)最重要的工件。Cohn 認(rèn)為用戶(hù)故事包括三個(gè)部分:(1)簡(jiǎn)短的書(shū)面描述;(2)關(guān)于故事的對(duì)話(huà),以詳細(xì)說(shuō)明故事;(3)用于驗(yàn)收測(cè)試的驗(yàn)收準(zhǔn)則。用戶(hù)故事的書(shū)面描述遵循一個(gè)簡(jiǎn)單的模板:As a
驗(yàn)收測(cè)試是極限編程的核心實(shí)踐之一,對(duì)于驗(yàn)收測(cè)試到底是什么有很多不同的解釋。R.Owen Rogers等人[1]對(duì)它做了簡(jiǎn)單的定義:驗(yàn)收測(cè)試是客戶(hù)定義的,用來(lái)驗(yàn)證一個(gè)故事是否完整和正確的測(cè)試。為了強(qiáng)調(diào)客戶(hù)在定義這些測(cè)試中的中心作用,驗(yàn)收測(cè)試也稱(chēng)為用戶(hù)測(cè)試(Customer Tests)。因此,驗(yàn)收測(cè)試是驗(yàn)證系統(tǒng)功能是否符合客戶(hù)期望的關(guān)鍵機(jī)制。
盡管用戶(hù)故事已經(jīng)是一種半結(jié)構(gòu)化的自然語(yǔ)言,但它仍不能完全擺脫自然語(yǔ)言的模糊性等特點(diǎn),再加上用戶(hù)對(duì)需求表達(dá)的非專(zhuān)業(yè)性、需求采集的多樣性等,使得基于用戶(hù)故事的敏捷需求實(shí)踐充滿(mǎn)了挑戰(zhàn)。等人[2]在2015年的綜述中,基于用戶(hù)故事的敏捷需求實(shí)踐將用戶(hù)故事的關(guān)注點(diǎn)總結(jié)為用戶(hù)故事收集,角色建模,驗(yàn)收測(cè)試,評(píng)估、發(fā)布計(jì)劃和迭代開(kāi)發(fā),追蹤和交互,并對(duì)用戶(hù)故事管理工具做了詳細(xì)分類(lèi)和總結(jié)。我們?cè)谒麄児ぷ鞯幕A(chǔ)上進(jìn)行了相關(guān)研究工作的補(bǔ)充。為了方便展示,我們制作了表1。表1描述了近幾年的主要研究工作。
表1 主要研究工作Tab.1 Main Research
用戶(hù)故事驗(yàn)收測(cè)試是一個(gè)將驗(yàn)收測(cè)試與領(lǐng)域用戶(hù)故事相結(jié)合的過(guò)程,簡(jiǎn)單來(lái)說(shuō)可以包括驗(yàn)收測(cè)試的表達(dá)、測(cè)試用例的生成和驗(yàn)收測(cè)試的執(zhí)行。
用戶(hù)故事的驗(yàn)收測(cè)試需要依據(jù)驗(yàn)收標(biāo)準(zhǔn)進(jìn)行展開(kāi)。在驗(yàn)收測(cè)試中有兩種常見(jiàn)的表示形式。第一種為文本場(chǎng)景表示法(Gherkin Language),他運(yùn)用了Gherkin語(yǔ)法,使用該格式可以很好的與Cucumber這一BDD(Behavior-Driven Development)的自動(dòng)化測(cè)試框架進(jìn)行銜接。Duc-Man Nguyen等人[3]就在其工作中使用了這種表示。第二種為前面提到的checklist表示法,多用于書(shū)面筆記。此外,還有一種表格表示法(Fit tables),該表示依托于fit家族得到了廣泛使用。Ernani Cé sar dos Santos等人比較了表格表示法和文本場(chǎng)景表示法,結(jié)果表明沒(méi)有足夠的證據(jù)來(lái)確認(rèn)一種技術(shù)更容易指定測(cè)試場(chǎng)景或者更好地溝通軟件需求。在此之前,Melnik 等人進(jìn)行了一個(gè)實(shí)驗(yàn),表明非技術(shù)用戶(hù)與軟件工程師一起工作時(shí),可以使用驗(yàn)收測(cè)試場(chǎng)景作為溝通和驗(yàn)證軟件業(yè)務(wù)需求的一種方式。實(shí)驗(yàn)指出,非技術(shù)用戶(hù)可以使用Fit表清楚地指定軟件需求,但它指出用戶(hù)在學(xué)習(xí)如何使用這種符號(hào)指定測(cè)試場(chǎng)景時(shí)有困難。此外,這項(xiàng)研究表明,一些非技術(shù)用戶(hù)不允許使用Fit表作為指定需求的工件。
傳統(tǒng)的用戶(hù)故事驗(yàn)收測(cè)試是全手工的,而為功能需求手工編寫(xiě)測(cè)試用例是一項(xiàng)耗時(shí)的任務(wù)。這樣的測(cè)試用例不僅難以編寫(xiě),而且維護(hù)起來(lái)也很有挑戰(zhàn)性。此外,手工測(cè)試用例生成效率低下,并且容易出錯(cuò),于是眾多學(xué)者圍繞自動(dòng)化驗(yàn)收測(cè)試展開(kāi)研究。自動(dòng)生成測(cè)試用例需要對(duì)用戶(hù)故事和驗(yàn)收準(zhǔn)則有較好的解析能力,然而用戶(hù)故事和驗(yàn)收準(zhǔn)則均為自然語(yǔ)言,因此要想較好的支持自動(dòng)解析需要對(duì)他們進(jìn)行較為細(xì)致的約束。
Mahawish Massod 等人定義了受限制的用戶(hù)故事模板,模板中的驗(yàn)收準(zhǔn)則由前置條件和滿(mǎn)足條件(Conditions of Satisfaction)組成。滿(mǎn)足條件由執(zhí)行路徑和后置條件組成。執(zhí)行路徑的表達(dá)受自然語(yǔ)言限制規(guī)則的約束,并使用規(guī)定的關(guān)鍵字。他們給出了常用的數(shù)據(jù)類(lèi)型以及相關(guān)屬性的選擇,通過(guò)這些約束生成測(cè)試用例。他們的方法對(duì)用戶(hù)友好且對(duì)Selenium IDE有很好的支持。Duc-Man Nguyen等人也對(duì)用戶(hù)故事及驗(yàn)收準(zhǔn)則的表達(dá)進(jìn)行了規(guī)范。驗(yàn)收準(zhǔn)則的書(shū)寫(xiě)格式是采用了When I Xan d
為了適應(yīng)通用的敏捷過(guò)程模型,Pallavi Pandit等人[4]提出了一個(gè)UAT過(guò)程模型,它旨在基于驗(yàn)收標(biāo)準(zhǔn),用自然語(yǔ)言生成詳盡的測(cè)試用例。模型分為三部分,分別是迭代前規(guī)劃、迭代中和迭代結(jié)果。在迭代前的規(guī)劃階段輸入用戶(hù)故事和驗(yàn)收準(zhǔn)則,對(duì)于驗(yàn)收準(zhǔn)則的表示,他們采用了Given [input |preconditions]When [actions | triggers]Then [output | consequences]格式。在迭代過(guò)程中,首先使用MoSCoW(Must,Should,Could and Would)對(duì)用戶(hù)故事進(jìn)行優(yōu)先級(jí)排序。其次提取用戶(hù)故事元素以便生成測(cè)試用例圖,測(cè)試用例圖就像是用戶(hù)驗(yàn)收測(cè)試(UAT)的基礎(chǔ)。最后將驗(yàn)收準(zhǔn)則轉(zhuǎn)換為驗(yàn)收測(cè)試(積極的、消極的和非功能性的)。在迭代結(jié)果階段可以查看報(bào)告、追溯性和缺陷日志。針對(duì)該過(guò)程模型,他們開(kāi)發(fā)了AgileUAT、工具以百分比值表示是否滿(mǎn)足驗(yàn)收標(biāo)準(zhǔn),并通過(guò)使用DOM樹(shù)說(shuō)明了史詩(shī)、用戶(hù)故事、驗(yàn)收標(biāo)準(zhǔn)和驗(yàn)收測(cè)試用例之間的可追溯性。
驗(yàn)收測(cè)試執(zhí)行的方法和工具有很多。Fit是用于指定和執(zhí)行驗(yàn)收測(cè)試的最成熟的技術(shù)框架。使用這個(gè)框架,驗(yàn)收測(cè)試以表格的形式編寫(xiě),稱(chēng)為Fit表。Fit表除了用于表示測(cè)試場(chǎng)景外,它們還用于報(bào)告測(cè)試的結(jié)果。由程序員制作的用于執(zhí)行業(yè)務(wù)邏輯表的fixture將表內(nèi)容映射到軟件系統(tǒng)中。測(cè)試結(jié)果以三種不同顏色顯示測(cè)試的不同狀態(tài):綠色表示測(cè)試通過(guò);黃色表示無(wú)法執(zhí)行的測(cè)試,紅色表示測(cè)試失敗。表的第一列和第二列表示輸入,而第三列(名稱(chēng)后面跟著括號(hào))表示預(yù)期輸出。當(dāng)測(cè)試失敗時(shí),預(yù)期的和實(shí)際的輸出值將顯示給用戶(hù)。
Agile Planner with Fit對(duì)Fit-table做了改進(jìn)。Agile Planner with Fit的實(shí)現(xiàn)依賴(lài)于兩個(gè)插件:Agile Planner和Fitclipse。Agile Planner是一種基于卡片的規(guī)劃工具。Fitclipse是一個(gè)擴(kuò)展Fit和FitLibrary的Eclipse插件,允許用戶(hù)在Eclipse IDE環(huán)境中執(zhí)行項(xiàng)目計(jì)劃,并將項(xiàng)目計(jì)劃保持在與代碼相同的位置。除了Fit和FitLibrary附帶的功能之外,Fitclipse還可以跟蹤測(cè)試結(jié)果的歷史,支持多模態(tài)測(cè)試執(zhí)行,并添加驗(yàn)收測(cè)試重構(gòu)功能。FitLibrary是Fit中fixture的擴(kuò)展集。除了Fit提供的測(cè)試樣式之外,它還支持測(cè)試網(wǎng)格和圖像。FitNesse是一個(gè)Wiki前端測(cè)試工具,支持創(chuàng)建和編輯驗(yàn)收測(cè)試的團(tuán)隊(duì)協(xié)作。FitNesse使用Fit框架通過(guò)web瀏覽器運(yùn)行驗(yàn)收測(cè)試。它還集成了用于編寫(xiě)和運(yùn)行驗(yàn)收測(cè)試的FitLibrary。還有一些其他的Eclipse插件也使用Fit或FitNesse,包括FitRunner、conFIT和AutAT。FitRunner為Eclipse提供了一個(gè)Fit啟動(dòng)配置,使人們能夠運(yùn)行自動(dòng)化驗(yàn)收測(cè)試。ConFIT使用一個(gè)FitNesse服務(wù)器來(lái)執(zhí)行驗(yàn)收測(cè)試,該服務(wù)器可以本地運(yùn)行,也可以遠(yuǎn)程運(yùn)行。AutAT 允許非技術(shù)用戶(hù)使用用戶(hù)友好的圖形化編輯器編寫(xiě)和執(zhí)行web應(yīng)用程序的自動(dòng)化驗(yàn)收測(cè)試。Haugset等人對(duì)常用驗(yàn)收測(cè)試工具做了總結(jié),比較了Fit、FitNesse和Selenium。其中Fit及其衍生物通常直接與業(yè)務(wù)層集成,而Selenium則與用戶(hù)界面層集成。
本文描述了與用戶(hù)故事和驗(yàn)收測(cè)試相關(guān)的實(shí)踐現(xiàn)狀并提出了可能的未來(lái)研究趨勢(shì)。隨著敏捷方法的廣泛使用,用戶(hù)故事和驗(yàn)收測(cè)試的重要性也在增加,通過(guò)研究現(xiàn)狀我們發(fā)現(xiàn)了以下研究趨勢(shì):
(1)借助自然語(yǔ)言處理技術(shù)提取用戶(hù)故事信息、進(jìn)行聚類(lèi)分組與降重、重用。
(2)借助自然語(yǔ)言處理,挖掘用戶(hù)故事間的關(guān)系,包括從屬關(guān)系、交互關(guān)系等。借助關(guān)系的挖掘,進(jìn)行模型轉(zhuǎn)換、迭代管理。
(3)借助機(jī)器學(xué)習(xí)技術(shù),研究模型自動(dòng)生成與轉(zhuǎn)換,自動(dòng)進(jìn)行驗(yàn)收測(cè)試與生成驗(yàn)收測(cè)試用例。
(4)相信隨著機(jī)器學(xué)習(xí)和自然語(yǔ)言處理的發(fā)展,用戶(hù)故事的應(yīng)用與管理將會(huì)取得長(zhǎng)足進(jìn)步。