專利名稱:使用dsl來調(diào)用api以測(cè)試軟件的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及測(cè)試軟件,尤其涉及使用DSL來調(diào)用API以測(cè)試軟件。
背景技術(shù):
測(cè)試?yán)话闶怯沙绦虼a組成。隨著時(shí)間的流逝,通常開發(fā)了多個(gè)不同程序的一大試驗(yàn)臺(tái)。當(dāng)測(cè)試程序所測(cè)試的軟件改變時(shí),測(cè)試程序需要被重構(gòu)并更新。維護(hù)測(cè)試程序的高成本不僅僅阻止了新測(cè)試?yán)拈_發(fā)也阻止了測(cè)試?yán)褂玫膸?kù)演變。用程序代碼書寫測(cè)試?yán)彩沟脤y(cè)試工作外包給其他公司或供應(yīng)商變得更為困難,因?yàn)闀鴮懘a的過程需要被審閱并因?yàn)槠湫枰喈?dāng)多的技巧。
發(fā)明內(nèi)容
測(cè)試?yán)怀橄蟪芍T如可重用腳本或文件等聲明性形式,其表達(dá)任務(wù)的意圖而非定義將如何執(zhí)行測(cè)試。工具將聲明性語句解釋成與實(shí)現(xiàn)在測(cè)試中所指示的動(dòng)作的代碼相對(duì)應(yīng)的一系列步驟。針對(duì)測(cè)試的模式可以是動(dòng)態(tài)的。測(cè)試?yán)男滦问娇衫矛F(xiàn)有的和新的動(dòng)作來使得動(dòng)作庫(kù)可被擴(kuò)展。庫(kù)是可互換的??墒褂脿顟B(tài)機(jī)生成測(cè)試?yán)?墒褂脿顟B(tài)機(jī)創(chuàng)建新的測(cè)試?yán)齺韯?dòng)態(tài)地編寫新的測(cè)試?yán)S捎谑褂梅莻鹘y(tǒng)編程語言來開發(fā)測(cè)試,測(cè)試開發(fā)者在寫測(cè)試?yán)龝r(shí)服從對(duì)他的或她的測(cè)試做出選項(xiàng)設(shè)置約束的紀(jì)律,防止他或她創(chuàng)建無效測(cè)試以及提供迫使測(cè)試作者考慮測(cè)試將如何執(zhí)行的內(nèi)建特征。在任何給定點(diǎn),只有可用動(dòng)作的有限集是可用的,從而防止測(cè)試書寫者通過創(chuàng)建不正確的測(cè)試而無意地導(dǎo)致問題。提供本發(fā)明內(nèi)容以便以簡(jiǎn)化形式介紹將在以下的具體實(shí)施方式
中進(jìn)一步描述的一些概念。本概述并不旨在標(biāo)識(shí)出所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也不旨在用于限定所要求保護(hù)的主題的范圍。
在附圖中圖Ia示出了根據(jù)在此公開的主題的各方面的用于使用聲明性語言來調(diào)用API以執(zhí)行軟件測(cè)試的系統(tǒng)100的示例;圖Ib示出了根據(jù)在此公開的主題的各方面的系統(tǒng)100的分層體系結(jié)構(gòu)如何能在多個(gè)開發(fā)者團(tuán)隊(duì)之間共享的示例;圖2a是根據(jù)在此所公開的主題的各方面的測(cè)試?yán)氖纠?;圖2b是根據(jù)在此所公開的主題的各方面的一動(dòng)作的實(shí)現(xiàn)的示例;圖2c是根據(jù)在此所公開的主題的各方面的測(cè)試?yán)牧硪皇纠?;圖2d是根據(jù)在此所公開的主題的各方面的一動(dòng)作的實(shí)現(xiàn)的另一示例;圖2e是根據(jù)如參照?qǐng)D1所描述的根據(jù)在此所公開的主題的各方面的用于使用聲明性語言來調(diào)用API以執(zhí)行軟件測(cè)試的方法的示例的流程圖。
圖3是示出其中可實(shí)現(xiàn)在此所公開的主題的各方面的計(jì)算環(huán)境的示例的框圖;以及圖4是根據(jù)在此所公開的主題的各方面的集成開發(fā)環(huán)境的示例的框圖。
具體實(shí)施例方式概覽一般而言,測(cè)試是用代碼書寫的并且與實(shí)現(xiàn)緊密地耦合。用代碼書寫的測(cè)試是脆弱的并且難于維護(hù)。實(shí)現(xiàn)改變通常使得測(cè)試不起作用。將測(cè)試通過端口傳送到不同的自動(dòng)化框架往往是費(fèi)力且昂貴的。通常難以知曉自動(dòng)測(cè)試?yán)m用什么情形,因?yàn)閷?duì)用傳統(tǒng)編程語言書寫的測(cè)試代碼難以執(zhí)行查詢。用程序語言書寫的測(cè)試難以讀取并難以寫。用于書寫測(cè)試的工具支持是有限的。出于這些原因和其他原因,測(cè)試難以外包。在此公開的主題描述了用于數(shù)據(jù)驅(qū)動(dòng)的(而不是代碼驅(qū)動(dòng)的)測(cè)試框架的方法、 系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品,在該測(cè)試框架中,測(cè)試被抽象為用聲明性或域?qū)S谜Z言或腳本指定的動(dòng)作,而不是用傳統(tǒng)編程語言來編碼。測(cè)試?yán)?dú)立于底層測(cè)試自動(dòng)框架和正在被測(cè)試的軟件的實(shí)現(xiàn)。測(cè)試表達(dá)要測(cè)試什么以及期望什么,而非如何測(cè)試。測(cè)試引擎可通過解釋在測(cè)試中指定的動(dòng)作來執(zhí)行測(cè)試。可互換庫(kù)可被開發(fā)以用于不同的實(shí)現(xiàn)和/或不同的自動(dòng)框架。在此描述的抽象層可被層疊在任何自動(dòng)框架的頂部,包括但不限于MAUI、DTE微軟的 Visual Studio 自動(dòng)庫(kù)以及其他自動(dòng)框架。在此描述的所書寫的測(cè)試容易寫、運(yùn)行、調(diào)試、查詢、理解和維護(hù)。測(cè)試作者被迫以避免重復(fù)并促進(jìn)重用的干凈、可維護(hù)的方式來分解測(cè)試。分層體系結(jié)構(gòu)實(shí)現(xiàn)通用層跨多個(gè)開發(fā)者團(tuán)隊(duì)的共享。通過具有可互換庫(kù),可容易地管理軟件實(shí)現(xiàn)中的改變。在此描述的所書寫的測(cè)試能被用來在用戶界面層、組件層、應(yīng)用程序編程接口(API)層等測(cè)試。使用聲明性語言來調(diào)用API以執(zhí)行軟件測(cè)試圖Ia示出了根據(jù)在此公開的主題的各方面的用于使用域?qū)S谜Z言來調(diào)用API以執(zhí)行軟件測(cè)試的系統(tǒng)100的示例。系統(tǒng)100的全部或部分可駐留在諸如以下參照?qǐng)D3描述的計(jì)算機(jī)之類的一個(gè)或多個(gè)計(jì)算機(jī)上。系統(tǒng)100的全部或部分可駐留在諸如以下參照?qǐng)D4 描述的計(jì)算機(jī)之類的一個(gè)或多個(gè)軟件開發(fā)計(jì)算機(jī)上。系統(tǒng)100或其部分可包括諸如以下參照?qǐng)D4描述和示出的集成開發(fā)環(huán)境的一部分。或者,可提供系統(tǒng)100或其部分作為獨(dú)立系統(tǒng)或作為插件或附件。系統(tǒng)100可包括諸如計(jì)算機(jī)102等一個(gè)或多個(gè)計(jì)算機(jī)。一個(gè)或多個(gè)計(jì)算機(jī)可包括以下的一個(gè)或多個(gè)處理器(諸如處理器142)、諸如存儲(chǔ)器144等存儲(chǔ)器、以及諸如模塊 140等用于使用聲明性語言來調(diào)用API以執(zhí)行軟件測(cè)試的一個(gè)或多個(gè)模塊。本領(lǐng)域公知的其他組件也可被包括其中但不在這里示出。可以理解的是用于使用聲明性語言來調(diào)用API 以執(zhí)行軟件測(cè)試的模塊能被加載到存儲(chǔ)器144中,以使得諸如處理器142等一個(gè)或多個(gè)處理器執(zhí)行被屬性化到用于使用聲明性語言來調(diào)用API以執(zhí)行軟件測(cè)試的模塊的動(dòng)作。用于使用聲明性語言來調(diào)用API以執(zhí)行軟件測(cè)試的系統(tǒng)100可包括以下一個(gè)或多個(gè)諸如腳本執(zhí)行器或腳本引擎或解釋器106等測(cè)試引擎、諸如庫(kù)108、庫(kù)109等測(cè)試動(dòng)作的一個(gè)或多個(gè)庫(kù)、諸如測(cè)試110等測(cè)試、模式112、測(cè)試查詢引擎114以及測(cè)試編輯器116。 系統(tǒng)100還可包括正在測(cè)試的軟件,如圖1中由軟件120、軟件121等示出的。軟件120可以是例如正在測(cè)試的軟件的一個(gè)實(shí)現(xiàn)而軟件121可以是正在測(cè)試的軟件的另一實(shí)現(xiàn)。測(cè)試引擎(例如,解釋器106)能通過從測(cè)試110提取一動(dòng)作、找到該動(dòng)作在測(cè)試動(dòng)作庫(kù)108內(nèi)的實(shí)現(xiàn)并執(zhí)行該動(dòng)作來逐步地執(zhí)行測(cè)試110。例如,解釋器106能通過解釋測(cè)試110并在運(yùn)行時(shí)執(zhí)行測(cè)試的各個(gè)步驟所對(duì)應(yīng)的實(shí)現(xiàn)來執(zhí)行測(cè)試110。能通過將不同的庫(kù)加載到解釋器 106內(nèi)來在不改變現(xiàn)有測(cè)試的情況下提供或改變實(shí)現(xiàn)。正在測(cè)試的軟件的運(yùn)行實(shí)例(作為狀態(tài)機(jī)118)也可被包括在系統(tǒng)100中。系統(tǒng)100可包括交互式編輯環(huán)境或REPL或集成開發(fā)環(huán)境或諸如IDE104等IDE的一部分。諸如測(cè)試110等測(cè)試或測(cè)試?yán)梢允菧y(cè)試意圖的抽象。可通過獨(dú)立于軟件的實(shí)現(xiàn)和/或獨(dú)立于測(cè)試框架或測(cè)試自動(dòng)框架的聲明性語句用聲明性形式來指定測(cè)試意圖。可使用定制的聲明性語言、腳本語言、或域?qū)S谜Z言來書寫諸如測(cè)試110等測(cè)試。測(cè)試110不使用像C++或0#等傳統(tǒng)的、通用的編程語言來書寫。在測(cè)試110中,表達(dá)了測(cè)試的意圖,但沒有定義如何實(shí)施測(cè)試。即,測(cè)試表達(dá)了要測(cè)試什么而不是如何測(cè)試。測(cè)試意圖與實(shí)現(xiàn)分離開,以使得實(shí)現(xiàn)不影響測(cè)試。這意味著如果軟件的實(shí)現(xiàn)方面改變,則測(cè)試該軟件的測(cè)試不需要被改變??赏ㄟ^改變動(dòng)作實(shí)現(xiàn)的庫(kù),例如,通過在測(cè)試期間將不同的庫(kù)加載到解釋器內(nèi), 來處理實(shí)現(xiàn)改變。例如,第一動(dòng)作庫(kù)可使用測(cè)試來測(cè)試軟件的第一實(shí)現(xiàn),而第二動(dòng)作庫(kù)可使用相同的(未改變的)測(cè)試來測(cè)試軟件的第二實(shí)現(xiàn)(例如,諸如該軟件的第二版本)。類似地,第一動(dòng)作庫(kù)可使用測(cè)試來測(cè)試軟件測(cè)試的第一自動(dòng)框架,而第二動(dòng)作庫(kù)可使用相同的(未改變的)測(cè)試來測(cè)試軟件測(cè)試的第二自動(dòng)框架。因?yàn)闇y(cè)試不依賴于實(shí)現(xiàn),所以測(cè)試是可重用的并且對(duì)于底層測(cè)試框架改變是有回復(fù)性的??尚薷幕蛱鎿Q自動(dòng)基礎(chǔ)結(jié)構(gòu)而不影響測(cè)試的效用。在此描述的測(cè)試能被用來在用戶界面層、組件層、API層以及為測(cè)試和生產(chǎn)軟件環(huán)境測(cè)試軟件??筛鶕?jù)一方法來創(chuàng)建測(cè)試。例如,一顯式API設(shè)計(jì)可要求動(dòng)作具有可識(shí)別簽名。 測(cè)試?yán)砂ㄒ幌盗袆?dòng)作。可使用以下更全面描述的方法調(diào)用器將動(dòng)作實(shí)現(xiàn)為對(duì)于API的調(diào)用。測(cè)試(例如,測(cè)試110)可與諸如模式112等模式關(guān)聯(lián)。模式實(shí)現(xiàn)測(cè)試正確性的檢查,從而得到經(jīng)驗(yàn)證的測(cè)試。例如,可使用XML模式來驗(yàn)證用XML書寫的測(cè)試。當(dāng)在諸如測(cè)試編輯器116等測(cè)試編輯器內(nèi)編輯并開發(fā)測(cè)試時(shí),與模式的關(guān)聯(lián)可提供自動(dòng)的正確性檢驗(yàn)并可提供靜態(tài)類型檢查編程協(xié)助,諸如自動(dòng)完成、成員列表等等。當(dāng)用戶使用模式112來開發(fā)測(cè)試?yán)龝r(shí),用戶輸入134(例如,創(chuàng)建測(cè)試?yán)?可由編輯器116接收并被檢查正確性??赏ㄟ^模式生成工具113來生成模式112,該模式生成工具跨庫(kù)反射并生成包括所有有效活動(dòng)和各個(gè)有效活動(dòng)的有效簽名的模式。即,在測(cè)試?yán)拈_發(fā)期間,模式能建立有效活動(dòng)的有限集以及在該有效活動(dòng)的有限集內(nèi)各個(gè)活動(dòng)的有效簽名的有限集。模式定義有效的測(cè)試文件并可被用來在書寫或編輯測(cè)試?yán)龝r(shí)提供交互式的編程員協(xié)助,類似自動(dòng)完成和正確性檢查。由于使用機(jī)器可讀的語言來書寫測(cè)試,可為測(cè)試創(chuàng)作提供豐富工具支持。工具的示例包括諸如圖1內(nèi)的編輯器116等編輯器以及其他,包括但不限于生成器、測(cè)試搜索器、 導(dǎo)航器等等。可為開發(fā)測(cè)試提供諸如編輯器116等編輯器。編輯器116可接收諸如模式 112等一個(gè)或多個(gè)模式以在測(cè)試創(chuàng)作者書寫或編輯測(cè)試110時(shí)向其提供諸如自動(dòng)完成等靜態(tài)類型檢查程序協(xié)助。編輯器116也能夠基于模式或基于從模式出導(dǎo)出的信息來提供對(duì)測(cè)試的正確性的驗(yàn)證。諸如庫(kù)108等庫(kù)包括一個(gè)或多個(gè)動(dòng)作實(shí)現(xiàn)。庫(kù)可以是原子動(dòng)作的可擴(kuò)展池。如上描述的,庫(kù)可以是可互換的。即,一動(dòng)作實(shí)現(xiàn)可被另一動(dòng)作實(shí)現(xiàn)替換,使得通過加載不同的庫(kù)或庫(kù)的集合,相同的測(cè)試能在不同的實(shí)現(xiàn)框架上執(zhí)行或在軟件的不同實(shí)現(xiàn)上執(zhí)行。多于一個(gè)的庫(kù)可同時(shí)被加載到解釋器或腳本引擎中。如果多于一個(gè)的庫(kù)包括指定的動(dòng)作,可提供用于選擇哪個(gè)動(dòng)作要執(zhí)行的算法(例如,來自最后加載的庫(kù)的用戶動(dòng)作、來自第一個(gè)加載的庫(kù)的用戶動(dòng)作、隨機(jī)選擇動(dòng)作、在庫(kù)中循環(huán)等等)。可使用數(shù)據(jù)來參數(shù)化庫(kù)中的每個(gè)動(dòng)作。數(shù)據(jù)描述可形成動(dòng)作的簽名。各個(gè)動(dòng)作可提供由動(dòng)作的簽名所規(guī)定的數(shù)據(jù)??墒褂猛ㄓ镁幊陶Z言,諸如c#、c++等等,來書寫動(dòng)作實(shí)現(xiàn)。通過將代碼集中到庫(kù)中,更容易地避免代碼的重復(fù)。諸如狀態(tài)機(jī)118等狀態(tài)機(jī)(例如,要測(cè)試的軟件的運(yùn)行實(shí)例)可提供狀態(tài)中的改變以使得可進(jìn)行連續(xù)的測(cè)試。諸如查詢引擎114等查詢引擎能在所有測(cè)試中搜索指定動(dòng)作的發(fā)生,(例如,尋找行使(按壓)計(jì)算器等于按鈕的所有測(cè)試)。由于使用聲明性形式來書寫測(cè)試,能更容易地發(fā)現(xiàn)開發(fā)中的軟件的未測(cè)試的部分。在測(cè)試執(zhí)行期間,能加載一個(gè)或多個(gè)庫(kù),庫(kù)中的一動(dòng)作能被標(biāo)識(shí)并被動(dòng)態(tài)地加載,并且可執(zhí)行該動(dòng)作。腳本執(zhí)行引擎或諸如解釋器106等解釋器可接收測(cè)試、加載該測(cè)試、加載一個(gè)或多個(gè)庫(kù)、標(biāo)識(shí)要執(zhí)行的動(dòng)作并且以順序的次序來執(zhí)行測(cè)試的動(dòng)作。解釋器106可動(dòng)態(tài)地加載來自諸如庫(kù)108等動(dòng)作庫(kù)的已知?jiǎng)幼鳌T趫D2a中示出了測(cè)試220的一示例。測(cè)試220是用XML書寫的,但是可以理解的是測(cè)試220可用任何聲明性、域?qū)S没蚰_本語言來書寫。以上描述的分層體系結(jié)構(gòu)便于跨多個(gè)開發(fā)者團(tuán)隊(duì)共享通用層。圖Ib示出了可如何共享層的示例。產(chǎn)品單元團(tuán)隊(duì)150可包括開發(fā)者團(tuán)隊(duì),諸如C#團(tuán)隊(duì)152、VB團(tuán)隊(duì)154和 F#團(tuán)隊(duì)156。產(chǎn)品單元專用功能158的示例是由用于0#語言服務(wù)專用測(cè)試掛鉤160、VB語言服務(wù)專用測(cè)試掛鉤162以及FiHg言服務(wù)專用測(cè)試掛鉤164的單獨(dú)測(cè)試掛鉤所表示的。通用IDE功能168可由所有產(chǎn)品團(tuán)隊(duì)共享(*. IDEffrapper 170 (*. IDE包裝170))。通用自動(dòng)框架172可包括諸如以下的框架由C#團(tuán)隊(duì)使用的TNugget (T信息塊)174,而DTE自動(dòng)庫(kù) 176可由VB團(tuán)隊(duì)使用,并且MAUI框架180及其適配器Maui 178可由F#團(tuán)隊(duì)使用,其中所有團(tuán)隊(duì)正在測(cè)試諸如IDE184等產(chǎn)品182。圖2a示出了開始于稱作TestScenari0 (測(cè)試場(chǎng)景)202的測(cè)試節(jié)點(diǎn)的測(cè)試?yán)?00 的片段。測(cè)試?yán)齌estScenario 202是用聲明性、域?qū)S?、非傳統(tǒng)編程語言XML書寫的,但是可以理解的是測(cè)試?yán)?00能用任何聲明性、域?qū)S谜Z言、非傳統(tǒng)編程語言書寫,諸如但不限于Json、LISP、Python、自定義文本文件格式,或作為Microsoft Excel 電子數(shù)據(jù)表。在 Ig--Bj <LaunchCalcProgram/>204 中 H為 LaunchCalcProgram(啟云力 Calc 禾呈;^ ) ^^ ^ ^ 以獨(dú)立于任何特定實(shí)現(xiàn)的聲明性方式表達(dá)啟動(dòng)一程序(諸如舉例而言calc.exe)的意圖的動(dòng)作的示例。在別處,在一個(gè)或多個(gè)庫(kù)中,通常存在真實(shí)啟動(dòng)計(jì)算器程序并與主操作系統(tǒng)交互的代碼。語句<LaunchCalCPrOgram/>204之后是幾個(gè)語句,指示點(diǎn)擊計(jì)算器的鍵2 〈ClickCalcButton ButtonName = “2”/>206 (〈點(diǎn)擊計(jì)算器按鈕按鈕名=“2”/>206)、加號(hào)鍵〈ClickCalcButton ButtonName =" + "/>208 點(diǎn)擊計(jì)算器按鈕按鈕名=“ + ”/>208)、鍵 2<ClickCalcButton ButtonName =“2”/>210(< 點(diǎn)擊計(jì)算器按鈕按鈕名=“2”/>210)或等號(hào)鍵〈ClickCalcButton ButtonName =“ = ”/>212(< 點(diǎn)擊計(jì)算器按鈕按鈕名=“ =”/>212)的意圖。ButtonName是正在被傳送的參數(shù)(例如,整數(shù)類型的),其指要點(diǎn)擊的按鈕的屬性 (名稱)。由此,意圖以聲明性方式被指示,而不是在測(cè)試?yán)惺褂米远x代碼。行213的語句〈VerifyCalcResult =“4”/>(〈驗(yàn)證計(jì)算器結(jié)果=“4”/>)表達(dá)期望的結(jié)果??梢岳斫獾氖羌词共痪哂袀鹘y(tǒng)通用編程語言的編程語言技巧、不具有自動(dòng)庫(kù)的知識(shí)的測(cè)試作者也能創(chuàng)作這樣的測(cè)試?yán)?。?dòng)作名和參數(shù)包括動(dòng)作的簽名。與聲明性語言關(guān)聯(lián)的模式可被用來在開發(fā)者在測(cè)試編輯器內(nèi)書寫測(cè)試?yán)龝r(shí),向他或她提供自動(dòng)完成以及其他類型的編程協(xié)助。如上描述的,諸如解釋器的測(cè)試引擎可加載測(cè)試?yán)?例如,測(cè)試?yán)?00),可標(biāo)識(shí)要被執(zhí)行的動(dòng)作以及可標(biāo)識(shí)任何適用的參數(shù)。例如,圖1的解釋器106可加載測(cè)試?yán)?00,標(biāo)識(shí)語句〈ClickCalcButton ButtonName =“2”/>206 的具有參數(shù) ButtonName =”2”(按鈕名=“2”)的動(dòng)作ClickCalcButton(點(diǎn)擊計(jì)算器按鈕)。解釋器可接著動(dòng)態(tài)地加載來自諸如圖1的庫(kù)108等包括真實(shí)代碼以自動(dòng)化測(cè)試場(chǎng)景的動(dòng)作庫(kù)的已知?jiǎng)幼鳌_@可通過基于代碼反射的機(jī)制來將測(cè)試?yán)Z言與自動(dòng)代碼分離來完成。圖2b示出了動(dòng)作ClickCalcButton(點(diǎn)擊計(jì)算器按鈕)的示例實(shí)現(xiàn)的一部分。 例如,諸如C#等傳統(tǒng)編程語言的代碼可定義可實(shí)現(xiàn)特定接口或從特定基動(dòng)作繼承的類型動(dòng)作(Action) 216 的類名稱 ClickCalcButton 214,使得當(dāng) ClickCalcButton 214 被執(zhí)行時(shí),在該特定實(shí)現(xiàn)中自定義代碼執(zhí)行指令以做出點(diǎn)擊計(jì)算器按鈕的動(dòng)作。在運(yùn)行時(shí),測(cè)試引擎可訪問測(cè)試?yán)性氐乃刑匦?。例如,在以上描述的測(cè)試場(chǎng)景示例中,對(duì)應(yīng)于 ClickCalcButton動(dòng)作的代碼可被單獨(dú)地執(zhí)行四次。在ClickCalcButton被第一次調(diào)用時(shí), ButtonName的特性可具有值“2”,在ClickCalcButton被第二次調(diào)用時(shí),ButtonName的特性可具有值“ + ”,等等。預(yù)處理步驟可加載測(cè)試?yán)募ふ覍?duì)應(yīng)于測(cè)試?yán)募性氐膶?duì)應(yīng)代碼元素。在運(yùn)行時(shí),可按將來自測(cè)試?yán)募男畔魉偷酱a元素的方式來構(gòu)建代碼元素,使得例如,ClickCalcButton動(dòng)作具有指被按壓的鍵的稱作ButtonName的特性。每當(dāng)執(zhí)行ClickCalcButton動(dòng)作時(shí),按鈕名被設(shè)為適當(dāng)?shù)闹?。圖2c示出了重命名類的測(cè)試220的另一示例。語句〈AddFiIeByContextFiIeName ="RenameGenerics. cs"/>222 — ± Τ" t @ 力Π t # t # $ = "RenameGenerics. cs,,/>222)將文件 RenameGenerics. cs 添力口至Ij IDE。語句 <0penFiIeByContext Filename ="RenameGenerics. cs,,/>224(< 按上下文打開文件文件名="RenameGenerics. cs"/>224)打開文件(例如,通過雙擊名稱觸發(fā)、或通過從菜單選擇一選項(xiàng))。語句 〈Rename StartLocation = "classl,,OldName ="k" NewName = "ARenamed,,/>226 (< 重命名起始位置=“類1”舊名稱="A新名稱=“ARenamed” / 調(diào)用功能以將類A重命名為類 ARenamed。語句〈FindWhat = “ARenamed”/>228 (< 尋找什么="ARenamed”/>228) 通過尋找類ARenamed來驗(yàn)證重命名操作成功。在語句〈AddFiIeByContextFiIeName = "RenameGenerics. cs,,/>222 中,F(xiàn)ileName 是具有值"RenameGenerics. cs” 的參數(shù)。在語句 <0penFiIeByContextFiIename = “RenameGenerics. cs “ />224 中,F(xiàn)ileNam 是具有值 “RenameGenerics. cs,,的參數(shù)。在語句〈Rename StartLocation = "classl,,OldName = "A" NewName = ‘‘ARenamed”/>226 中,具有值‘‘classl” 的 StartLocation、具有值 ‘‘A” 的 OldName以及具有值"ARenamed”的NewName是動(dòng)作Rename (重命名)的參數(shù)。圖2d示出了用C#書寫的示例動(dòng)作實(shí)現(xiàn)230。在樣本動(dòng)作實(shí)現(xiàn)230中,動(dòng)作簽名 232是動(dòng)作所需的數(shù)據(jù)的聲明。在動(dòng)作實(shí)現(xiàn)230中,從測(cè)試?yán)凶x取一個(gè)字符串(用于尋找什么(What))以及三個(gè)布爾。動(dòng)作234的實(shí)現(xiàn)定義要用從測(cè)試?yán)刑崛〉臄?shù)據(jù)完成什么。 對(duì)測(cè)試?yán)械拿總€(gè)動(dòng)作調(diào)用,測(cè)試引擎初始化動(dòng)作實(shí)例并自動(dòng)地從測(cè)試?yán)刑顚懱匦浴@鐚?duì)于語句〈FindWhat = “ARenamed”/>228,圖2d的行236字符串What的內(nèi)容通過讀取來自圖 2c 的行〈Find What = “ARenamed” />228 并將 What 設(shè)為 “ARenamed” 來設(shè)置。特性可以是諸如布爾(bool)、字符串或整數(shù)(int)的原語類型,諸如.NET類型或任何類型的列表的復(fù)雜類型??捎蓪?duì)象并行化器來執(zhí)行映射。如果特性(例如行236中的What)被 Required(需要)特性242所標(biāo)記并且沒有在測(cè)試?yán)姓业?,那么可拋出一異常。圖2e示出了根據(jù)在此公開的主題的各方面的用于使用域?qū)S谜Z言來調(diào)用API以測(cè)試軟件的方法250的示例。在方面250中描述的一個(gè)或多個(gè)動(dòng)作是可任選的。在252,書寫或接收動(dòng)作的實(shí)現(xiàn)。在254,從動(dòng)作庫(kù)中創(chuàng)建模式。在256,可書寫或接收如在此描述的測(cè)試?yán)⒛苁褂媚J絹眚?yàn)證該測(cè)試?yán)T?58,運(yùn)行使用測(cè)試?yán)臏y(cè)試。測(cè)試引擎可接收測(cè)試?yán)?,提取第一?dòng)作,通過將測(cè)試?yán)械膭?dòng)作名稱與一個(gè)或多個(gè)庫(kù)中的動(dòng)作名稱進(jìn)行匹配來在一個(gè)或多個(gè)庫(kù)中尋找動(dòng)作,實(shí)例化實(shí)現(xiàn)動(dòng)作的類,在存儲(chǔ)器內(nèi)創(chuàng)建類的實(shí)例,從測(cè)試?yán)凶x入針對(duì)類的實(shí)例的參數(shù)并調(diào)用在該類上的執(zhí)行方法。或者,方法調(diào)用器可從測(cè)試?yán)凶x入動(dòng)作并可不僅僅將動(dòng)作名與動(dòng)作類匹配還將動(dòng)作名與任何類上的任何方法匹配,而不調(diào)用執(zhí)行方法。由此,如果存在任何公共(可調(diào)用)方法,那么方法調(diào)用器可將用于動(dòng)作的參數(shù)當(dāng)作用于該方法的參數(shù)。與調(diào)用執(zhí)行方法相反,方法調(diào)用器可調(diào)用任何被指定的方法。 這個(gè)特征打開了用于通用腳本、API調(diào)用、測(cè)試、以及用于調(diào)用API的基于XML的DSL的創(chuàng)建的可能性,因?yàn)锳PI是類上的通常方法。合適計(jì)算環(huán)境的示例為了提供有關(guān)本文所公開的主題的各個(gè)方面的上下文,圖3以及以下討論旨在提供其中可以實(shí)現(xiàn)各實(shí)施例的合適計(jì)算環(huán)境510的簡(jiǎn)要概括描述。盡管本文所公開的主題是在諸如程序模塊等由一個(gè)或多個(gè)計(jì)算機(jī)或其它計(jì)算設(shè)備執(zhí)行的計(jì)算機(jī)可執(zhí)行指令的通用上下文中描述的,但本領(lǐng)域技術(shù)人員將認(rèn)識(shí)到,本文所公開的主題的各部分還能夠結(jié)合其它程序模塊和/或硬件和軟件的組合來實(shí)現(xiàn)。通常,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定數(shù)據(jù)類型的例程、程序、對(duì)象、物理人為產(chǎn)物、數(shù)據(jù)結(jié)構(gòu)等。通常,程序模塊的功能可以在各個(gè)實(shí)施例中按需進(jìn)行組合或分布。計(jì)算環(huán)境510只是合適的操作環(huán)境的一個(gè)示例,并且不旨在對(duì)此處所公開的主題的使用范圍或功能提出任何限制。參照?qǐng)D3,描述了計(jì)算機(jī)512形式的用于線性棧上高效恢復(fù)協(xié)同例程的計(jì)算設(shè)備。 計(jì)算機(jī)512可包括處理單元514、系統(tǒng)存儲(chǔ)器516和系統(tǒng)總線518。處理單元514可以是各種可用處理器中的任一種。還可以使用雙微處理器及其他多處理器體系結(jié)構(gòu)作為處理單元 514。系統(tǒng)存儲(chǔ)器516可包括易失性存儲(chǔ)器520和非易失性存儲(chǔ)器522。非易失性存儲(chǔ)器 522可包括只讀存儲(chǔ)器(ROM)、可編程ROM(PROM)、電可編程ROM(EPROM)或閃存。易失性存儲(chǔ)器520可包括可充當(dāng)外部高速緩沖存儲(chǔ)器的隨機(jī)存取存儲(chǔ)器(RAM)。系統(tǒng)總線518將包括系統(tǒng)存儲(chǔ)器516的系統(tǒng)物理人為產(chǎn)物耦合到處理單元514。系統(tǒng)總線518可以是幾種類型的總線結(jié)構(gòu)中的任何一種,包括存儲(chǔ)器總線、存儲(chǔ)控制器、外圍總線、外部總線或局部總線,并且可以使用各種可用總線體系結(jié)構(gòu)中的任一種。計(jì)算機(jī)512通常包括各種計(jì)算機(jī)可讀介質(zhì),諸如易失性和非易失性介質(zhì)、可移動(dòng)和不可移動(dòng)介質(zhì)。計(jì)算機(jī)存儲(chǔ)介質(zhì)可以通過用于存儲(chǔ)諸如計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù)等信息的任何方法或技術(shù)來實(shí)現(xiàn)。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括但不限于,RAM、 ROM、EEPR0M、閃存或其它存儲(chǔ)器技術(shù)、CDR0M、數(shù)字多功能盤(DVD)或其它光盤存儲(chǔ)、磁盒、 磁帶、磁盤存儲(chǔ)或其它磁存儲(chǔ)設(shè)備、或可以用來儲(chǔ)存所期望的信息并可由計(jì)算機(jī)512訪問的任何其他瞬態(tài)或非瞬態(tài)介質(zhì)。將理解,圖3描述了可充當(dāng)用戶與計(jì)算機(jī)資源之間的媒介的軟件。該軟件可以包括可存儲(chǔ)在盤存儲(chǔ)524上的操作系統(tǒng)528,該操作系統(tǒng)可控制并分配計(jì)算機(jī)系統(tǒng)512的資源。盤存儲(chǔ)524可以是通過諸如接口 526的不可移動(dòng)存儲(chǔ)器接口連接到系統(tǒng)總線518的硬盤驅(qū)動(dòng)器。系統(tǒng)應(yīng)用程序530利用由操作系統(tǒng)528通過存儲(chǔ)在系統(tǒng)存儲(chǔ)器516或者存儲(chǔ)在盤存儲(chǔ)524上的程序模塊532和程序數(shù)據(jù)534對(duì)資源的管理。應(yīng)該明白,計(jì)算機(jī)可用各種操作系統(tǒng)或操作系統(tǒng)的組合來實(shí)現(xiàn)。用戶可通過輸入設(shè)備536向計(jì)算機(jī)512輸入命令或信息。輸入設(shè)備536包括但不限于定點(diǎn)設(shè)備,諸如鼠標(biāo)、跟蹤球、指示筆、觸摸墊、鍵盤、話筒等。這些及其他輸入設(shè)備通過系統(tǒng)總線518經(jīng)由接口端口 538連接到處理單元514。接口端口 538可表示串行端口、并行端口、通用串行總線(USB)等。輸出設(shè)備540可與輸入設(shè)備使用相同類型的端口。提供輸出適配器542以舉例說明存在像監(jiān)視器、揚(yáng)聲器、以及打印機(jī)的需要特定適配器的一些輸出裝置540。輸出適配器542包括但不限于,在輸出設(shè)備540和系統(tǒng)總線518之間提供連接的視頻卡和聲卡。其他設(shè)備和/或設(shè)備系統(tǒng),諸如遠(yuǎn)程計(jì)算機(jī)544,可提供輸入和輸出兩種能力。計(jì)算機(jī)512可以使用到諸如遠(yuǎn)程計(jì)算機(jī)544之類的一個(gè)或多個(gè)遠(yuǎn)程計(jì)算機(jī)的邏輯連接來在聯(lián)網(wǎng)環(huán)境中操作。遠(yuǎn)程計(jì)算機(jī)544可以是個(gè)人計(jì)算機(jī)、服務(wù)器、路由器、網(wǎng)絡(luò)PC、對(duì)等設(shè)備或其它常見的網(wǎng)絡(luò)節(jié)點(diǎn),并且通常包括許多或所有以上相對(duì)于計(jì)算機(jī)512所描述的元件,盡管在圖4中僅示出了存儲(chǔ)器存儲(chǔ)設(shè)備546。遠(yuǎn)程計(jì)算機(jī)544可經(jīng)由通信連接550邏輯地連接。網(wǎng)絡(luò)接口 548涵蓋諸如局域網(wǎng)(LAN)和廣域網(wǎng)(WAN)這樣的通信網(wǎng)絡(luò),但也可包括其他網(wǎng)絡(luò)。通信連接550是指用來將網(wǎng)絡(luò)接口 548連接到總線518的硬件/軟件。連接550可以在計(jì)算機(jī)512內(nèi)部或外部并且包括諸如調(diào)制解調(diào)器(電話、電纜、DSL和無線) 和ISDN適配器、以太網(wǎng)卡等內(nèi)部和外部技術(shù)。應(yīng)該理解,所示網(wǎng)絡(luò)連接僅是示例,并且可以使用在計(jì)算機(jī)之間建立通信鏈路的其它手段。本領(lǐng)域的普通技術(shù)人員可以理解,計(jì)算機(jī)512或其它客戶機(jī)設(shè)備可作為計(jì)算機(jī)網(wǎng)絡(luò)的一部分來部署。在這一點(diǎn)上,本文所公開的主題涉及具有任意數(shù)量的存儲(chǔ)器或存儲(chǔ)單元以及在任意數(shù)量的存儲(chǔ)單元或卷上發(fā)生的任意數(shù)量的應(yīng)用程序和進(jìn)程的任何計(jì)算機(jī)系統(tǒng)。本文所公開的主題的各方面可應(yīng)用于具有部署在網(wǎng)絡(luò)環(huán)境中的具有遠(yuǎn)程或本地存儲(chǔ)的服務(wù)器計(jì)算機(jī)和客戶計(jì)算機(jī)的環(huán)境。本文所公開的主題的各方面也可應(yīng)用于具有編程語言功能、解釋和執(zhí)行能力的獨(dú)立計(jì)算設(shè)備。圖4示出集成開發(fā)環(huán)境(IDE) 600和通用語言運(yùn)行時(shí)環(huán)境602。IDE 600可允許用戶(例如,開發(fā)者、程序員、設(shè)計(jì)者、編碼者等)在計(jì)算機(jī)系統(tǒng)中設(shè)計(jì)、編碼、編譯、測(cè)試、運(yùn)行、編輯、調(diào)試或構(gòu)建程序、程序集、網(wǎng)站、web應(yīng)用程序和web服務(wù)。軟件程序可包括以一種或多種源代碼語言(例如,VisualBasic、Visual J#、C++、C#、J#、Java Script,APL,COBOL, Pascal、Eiffel、Haskell、ML、Oberon> Perl、Python、Scheme、Smalltalk 等)創(chuàng)建的源代碼(組件610)。IDE 600可提供本機(jī)代碼開發(fā)環(huán)境,或者可提供在虛擬機(jī)上運(yùn)行的托管代碼開發(fā),或者可提供其組合。IDE 600可提供使用.NET框架的托管代碼開發(fā)環(huán)境??墒褂谜Z言專用源編譯器620從源代碼組件610和本機(jī)代碼組件611創(chuàng)建中間語言組件650,并且在執(zhí)行應(yīng)用時(shí)使用中間語言編譯器660(例如,即時(shí)(JIT)編譯器)從中間語言組件650創(chuàng)建本機(jī)代碼組件611 (例如,機(jī)器可執(zhí)行指令)。S卩,當(dāng)IL應(yīng)用被執(zhí)行時(shí),其在被執(zhí)行的同時(shí)被編譯成適合正在其上執(zhí)行它的平臺(tái)的合適機(jī)器語言,藉此使代碼能跨若干平臺(tái)便攜?;蛘?,在其他實(shí)施例中,程序可被編譯成適合其目標(biāo)平臺(tái)的本機(jī)代碼機(jī)器語言(未示出)。用戶可根據(jù)已知軟件編程技術(shù)以及與特定源語言相關(guān)聯(lián)的特定邏輯和句法規(guī)則經(jīng)由IDE 600中的用戶接口 640和源代碼編輯器651來創(chuàng)建和/或編輯源代碼組件。此后, 源代碼組件610可經(jīng)由源編譯器620被編譯,藉此可創(chuàng)建該程序的中間語言表示,諸如匯編 630。匯編630可包括中間語言組件650和元數(shù)據(jù)642。應(yīng)用程序設(shè)計(jì)可以能夠在部署前被驗(yàn)證。此處所述的各種技術(shù)可結(jié)合硬件或軟件,或在適當(dāng)時(shí)以其組合來實(shí)現(xiàn)。由此,本文所公開的方法和裝置或其特定方面或部分可采取包含在諸如軟盤、CD-ROM、硬盤驅(qū)動(dòng)器或任何其它機(jī)器可讀存儲(chǔ)介質(zhì)等有形介質(zhì)中的程序代碼(即,指令)的形式,其中當(dāng)程序代碼被加載到諸如計(jì)算機(jī)等機(jī)器內(nèi)并由其執(zhí)行時(shí),該機(jī)器成為用于實(shí)現(xiàn)本文所公開的主題的各方面的裝置。在程序代碼在可編程計(jì)算機(jī)上執(zhí)行的情況下,計(jì)算設(shè)備通常將包括處理器、該處理器可讀的存儲(chǔ)介質(zhì)(包括易失性和非易失性的存儲(chǔ)器和/或存儲(chǔ)元件)、至少一個(gè)輸入設(shè)備、以及至少一個(gè)輸出設(shè)備。可例如通過使用數(shù)據(jù)處理API等來利用域?qū)S镁幊棠P透鞣矫娴膭?chuàng)建和/或?qū)崿F(xiàn)的一個(gè)或多個(gè)程序可用高級(jí)過程語言或面向?qū)ο蟮木幊陶Z言來實(shí)現(xiàn)以與計(jì)算機(jī)系統(tǒng)通信。然而,若有需要,程序也可以以以匯編或機(jī)器語言來實(shí)現(xiàn)。在任一情況下,語言都可以是編譯的或解釋的語言,并與硬件實(shí)現(xiàn)相結(jié)合。雖然已結(jié)合附圖描述了本文所公開的主題,但是應(yīng)理解,可作出修改以按不同方式執(zhí)行相同功能。
權(quán)利要求
1.一種系統(tǒng)(100),包括處理器(142)和存儲(chǔ)器(144),所述存儲(chǔ)器包括配置成使所述處理器(142)執(zhí)行以下的模塊(140)執(zhí)行接收用于測(cè)試軟件(120、121等)的測(cè)試?yán)?110)的測(cè)試引擎(106);其中所述測(cè)試?yán)?110)包括測(cè)試意圖的抽象,所述測(cè)試意圖由獨(dú)立于所述軟件(120、 121等)的實(shí)現(xiàn)的聲明性語句指定,所述聲明性語句指定多個(gè)動(dòng)作的至少一個(gè),其中所述多個(gè)動(dòng)作存儲(chǔ)在多個(gè)庫(kù)(108、109等)中的至少一個(gè),其中與所述軟件(120) 的第一實(shí)現(xiàn)關(guān)聯(lián)的動(dòng)作存儲(chǔ)在所述多個(gè)庫(kù)(108、109等)的第一庫(kù)(108)中,并且與所述軟件(121)的第二實(shí)現(xiàn)關(guān)聯(lián)的動(dòng)作存儲(chǔ)在所述多個(gè)庫(kù)(108、109等)的第二庫(kù)(109)中,使得所述測(cè)試引擎(106)通過調(diào)用所述第一庫(kù)(108)內(nèi)的動(dòng)作執(zhí)行由所述測(cè)試?yán)?110)指定的動(dòng)作來測(cè)試所述軟件(120)的所述第一實(shí)現(xiàn),并且其中所述測(cè)試引擎(106)通過調(diào)用所述第二庫(kù)(109)內(nèi)的動(dòng)作執(zhí)行由所述測(cè)試?yán)?(110)指定的動(dòng)作來測(cè)試所述軟件(121)的所述第二實(shí)現(xiàn)。
2.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述測(cè)試?yán)ㄓ糜谒龆鄠€(gè)動(dòng)作的至少一個(gè)的至少一個(gè)參數(shù),并且其中所述測(cè)試?yán)ㄓ糜谒鲋辽僖粋€(gè)參數(shù)的值。
3.如權(quán)利要求1所述的系統(tǒng),其特征在于,還包括用于測(cè)試?yán)哪J?,其中所述模式在所述測(cè)試?yán)膭?chuàng)建期間建立有效動(dòng)作的有限集。
4.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述測(cè)試引擎從所述測(cè)試?yán)凶x取所述多個(gè)動(dòng)作中的一動(dòng)作,并將所讀取的動(dòng)作的名稱與所述多個(gè)庫(kù)的一庫(kù)中的類上的方法的名稱進(jìn)行匹配,并執(zhí)行名稱相匹配的方法。
5.如權(quán)利要求4所述的系統(tǒng),其特征在于,所述測(cè)試引擎將測(cè)試?yán)膭?dòng)作的參數(shù)的值分配給所述名稱相匹配的方法的參數(shù),并執(zhí)行所述名稱相匹配的方法。
6.一種方法(250),包括在軟件開發(fā)計(jì)算機(jī)上接收用聲明性形式書寫的測(cè)試?yán)?256),所述測(cè)試?yán)ㄖ辽僖粋€(gè)動(dòng)作、用于所述至少一個(gè)動(dòng)作的參數(shù)以及所述參數(shù)的值,所述測(cè)試?yán)í?dú)立于軟件實(shí)現(xiàn)的測(cè)試意圖的抽象;讀取所述測(cè)試?yán)乃鲋辽僖粋€(gè)動(dòng)作、所述參數(shù)和所述值;將所述測(cè)試?yán)乃鲋辽僖粋€(gè)動(dòng)作的名稱與第一庫(kù)中一類上的方法的名稱相匹配,其中所述第一庫(kù)與軟件的第一實(shí)現(xiàn)關(guān)聯(lián)(252);將所述測(cè)試?yán)乃鲋辽僖粋€(gè)動(dòng)作的所述參數(shù)的所述值分配給所述第一庫(kù)中所述方法的參數(shù)的值;執(zhí)行所述第一庫(kù)中的所述方法以在所述軟件開發(fā)計(jì)算機(jī)上測(cè)試所述軟件的所述第一實(shí)現(xiàn);將所述測(cè)試?yán)乃鲋辽僖粋€(gè)動(dòng)作的名稱與第二庫(kù)中一類上的方法的名稱相匹配,其中所述第二庫(kù)與軟件的第二實(shí)現(xiàn)關(guān)聯(lián);將所述測(cè)試?yán)乃鲋辽僖粋€(gè)動(dòng)作的所述參數(shù)的所述值分配給所述第二庫(kù)中所述方法的參數(shù)的值;執(zhí)行所述第二庫(kù)中的所述方法以測(cè)試所述軟件的所述第二實(shí)現(xiàn)。
7.如權(quán)利要求6所述的方法,其特征在于,所述測(cè)試?yán)怯媚_本語言書寫的,并且其中所述權(quán)利要求6的方法是通過包括腳本引擎的測(cè)試引擎在REPL環(huán)境內(nèi)來執(zhí)行的。
8.如權(quán)利要求6所述的方法,其特征在于,所述測(cè)試?yán)怯糜驅(qū)S谜Z言來書寫的,并且其中所述權(quán)利要求6的方法是通過解釋器來執(zhí)行的。
9.如權(quán)利要求6所述的方法,其特征在于,在所述測(cè)試?yán)膭?chuàng)建期間的任何給定點(diǎn),有效活動(dòng)的有限集以及在該有效活動(dòng)的有限集內(nèi)各個(gè)有效活動(dòng)的有效簽名的有限集是可用的。
10.如權(quán)利要求6所述的方法,其特征在于,使用狀態(tài)機(jī)來動(dòng)態(tài)地編寫所述測(cè)試?yán)?br>
11.一種包括計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述指令在被執(zhí)行時(shí)使至少一個(gè)處理器接收測(cè)試軟件(120)的測(cè)試?yán)?110),所述測(cè)試?yán)y(cè)試意圖的抽象,所述測(cè)試意圖由獨(dú)立于所述軟件(120)的測(cè)試框架的聲明性語句來指定,所述測(cè)試?yán)?110)包括至少一個(gè)動(dòng)作;將所述測(cè)試?yán)乃鲋辽僖粋€(gè)動(dòng)作的名稱與多個(gè)庫(kù)(108、109等)的一庫(kù)(108)內(nèi)的動(dòng)作的名稱進(jìn)行匹配,其中所述多個(gè)庫(kù)中的第一庫(kù)(108)使用第一測(cè)試框架來測(cè)試所述軟件,并且所述多個(gè)庫(kù)中的第二庫(kù)使用第二測(cè)試框架來測(cè)試所述軟件。
12.如權(quán)利要求11所述的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其特征在于,還包括在被執(zhí)行時(shí)使至少一個(gè)處理器執(zhí)行以下動(dòng)作的計(jì)算機(jī)可執(zhí)行指令將所述測(cè)試?yán)乃鲋辽僖粋€(gè)動(dòng)作的所述名稱與所述多個(gè)庫(kù)的一庫(kù)中一類上的方法的名稱進(jìn)行匹配;將所述測(cè)試?yán)乃鲋辽僖粋€(gè)動(dòng)作的參數(shù)的值分配給所述庫(kù)中所述方法的參數(shù)的值。
13.如權(quán)利要求11所述的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其特征在于,還包括在被執(zhí)行時(shí)使至少一個(gè)處理器執(zhí)行以下動(dòng)作的計(jì)算機(jī)可執(zhí)行指令接收所述測(cè)試?yán)?,其中所述測(cè)試?yán)怯枚ㄖ频穆暶餍哉Z言、腳本語言、或域?qū)S谜Z言來書寫的。
14.如權(quán)利要求11所述的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其特征在于,還包括在被執(zhí)行時(shí)使至少一個(gè)處理器執(zhí)行以下動(dòng)作的計(jì)算機(jī)可執(zhí)行指令接收用于所述測(cè)試?yán)哪J?,其中在所述測(cè)試?yán)拈_發(fā)期間,所述模式建立有效活動(dòng)的有限集以及在該有效活動(dòng)的有限集內(nèi)各個(gè)活動(dòng)的有效簽名的有限集。
15.如權(quán)利要求11所述的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其特征在于,還包括在被執(zhí)行時(shí)使至少一個(gè)處理器執(zhí)行以下動(dòng)作的計(jì)算機(jī)可執(zhí)行指令查詢測(cè)試?yán)?br>
全文摘要
公開了使用DSL來調(diào)用API以測(cè)試軟件。測(cè)試?yán)怀橄蟪煽芍赜媚_本或其他聲明性形式,其表達(dá)任務(wù)的意圖而非定義將如何執(zhí)行測(cè)試。工具將聲明性測(cè)試解釋成對(duì)應(yīng)于實(shí)現(xiàn)在聲明性測(cè)試中所指示的動(dòng)作的代碼的一系列步驟。針對(duì)測(cè)試的模式可以是動(dòng)態(tài)的。測(cè)試?yán)男滦问娇衫眯碌膭?dòng)作來使得動(dòng)作庫(kù)可被擴(kuò)展。庫(kù)是可互換的。可使用狀態(tài)機(jī)來生成測(cè)試?yán)?。可通過使用狀態(tài)機(jī)創(chuàng)建新的測(cè)試?yán)齺韯?dòng)態(tài)地編寫新的測(cè)試?yán)?br>
文檔編號(hào)G06F11/36GK102222039SQ20111011126
公開日2011年10月19日 申請(qǐng)日期2011年4月18日 優(yōu)先權(quán)日2010年4月19日
發(fā)明者C·A·史密斯, D·C·提維, E·I·馬伊諾, G·埃斯帕扎-羅梅羅, K·奧森科夫, R·J·卡瓦諾, V·K·烏帕達(dá) 申請(qǐng)人:微軟公司