趙艷妮 郭華磊
摘 要: 隨著軟件規(guī)模日趨復(fù)雜,軟件質(zhì)量問題日趨突出。構(gòu)件復(fù)用提高了開發(fā)效率,構(gòu)件測(cè)試保證了構(gòu)件質(zhì)量。針對(duì)目前缺乏成熟構(gòu)件測(cè)試技術(shù)的現(xiàn)狀,提出了基于合約狀態(tài)檢查的構(gòu)件易測(cè)試方法。將Bertrand Meyer的合約概念引入到構(gòu)件設(shè)計(jì)開發(fā)測(cè)試過程中,考慮構(gòu)件易測(cè)試性,從構(gòu)件開發(fā)者和復(fù)用者的角度分析構(gòu)件及構(gòu)件的測(cè)試,違反構(gòu)件合約時(shí)拋出異常信息,快速定位異常位置。在一定程度上保證構(gòu)件質(zhì)量,縮短開發(fā)周期,提高測(cè)試效率。
關(guān)鍵詞: 合約狀態(tài); 客戶方; 服務(wù)方; 構(gòu)件易測(cè)試
中圖分類號(hào): TP311.5 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2014)10?0083?03
Abstract: With the continual increase of software Scale and complexity, it is more and more difficult to assure the quality of software. Component reuse is an effective way to improve the efficiency of development. Component testing is an important means to ensure the quality of components. In view of the present situation of the lack of mature component testing technology, a component testability method is proposed based on contract status checking. Bertrand Meyer's contract concept is introduced into testing process of component design and development. In consideration of the component testability, components and component testing are analyzed from the perspective of the component developers and re?users. An exception message is provided when the component contract is violated, and the exception position is quickly locked. By the research achievement, the quality of component was guaranteed, the development time was shortened and the testing efficiency was improved in a certain extent.
Keywords: contract status; client; server; component testability
0 引 言
隨著信息技術(shù)快速發(fā)展,軟件規(guī)模逐漸增大,復(fù)雜性不斷提高。為了提高軟件質(zhì)量,縮短開發(fā)周期,降低開發(fā)成本,受硬件組裝計(jì)算機(jī)的啟發(fā),提出了軟件復(fù)用,子函數(shù)→類→構(gòu)件,軟件復(fù)用的粒度逐漸變大。構(gòu)件質(zhì)量是軟件復(fù)用的前提,構(gòu)件測(cè)試是保證構(gòu)件質(zhì)量的重要手段之一[1]。為了確保構(gòu)件在新環(huán)境中工作正常,必須對(duì)構(gòu)件進(jìn)行充分的測(cè)試,復(fù)用質(zhì)量低下的構(gòu)件或不正確部署構(gòu)件,可能造成災(zāi)難后果。例如,1996年Ariane 5運(yùn)載火箭發(fā)射失敗,原因是復(fù)用的Ariane 4構(gòu)件在新環(huán)境中未經(jīng)過充分測(cè)試造成的[2]。
構(gòu)件測(cè)試與軟件測(cè)試相比,有其自身特點(diǎn):
(1) 缺乏構(gòu)件應(yīng)用的上下文依賴環(huán)境;
(2) 缺乏詳細(xì)的構(gòu)件描述文檔;
(3) 構(gòu)件復(fù)用者過分依賴構(gòu)件開發(fā)者;
(4) 硬件平臺(tái)、操作系統(tǒng)、編程語(yǔ)言等集成環(huán)境不同[3]。本文將Bertrand Meyer的合約思想[4]引入到構(gòu)件測(cè)試,提出一種基于構(gòu)件合約狀態(tài)檢查的構(gòu)件易測(cè)試技術(shù)。
1 基于合約的構(gòu)件化軟件測(cè)試?yán)碚?/p>
1997年,Bertrand Meyer提出軟件合約化理論,把軟件模塊之間交互的規(guī)則定義為合約。圖1是構(gòu)件測(cè)試過程圖,構(gòu)件扮演兩種角色:客戶方與服務(wù)方,客戶方向服務(wù)方請(qǐng)求服務(wù),服務(wù)方向客戶方提供服務(wù)[5]。合約分為前置條件、后置條件和不變式。前置條件是客戶方調(diào)用服務(wù)方前必須滿足的條件,客戶的義務(wù),服務(wù)方的權(quán)利;后置條件是服務(wù)方被調(diào)用完成后必須滿足的條件,后置條件限定了服務(wù)方被調(diào)用之后必須滿足的條件,客戶方的權(quán)利,服務(wù)方的義務(wù);不變式是描述構(gòu)件正確性、完整性的規(guī)則,構(gòu)件交互過程中必須保證。構(gòu)件失效時(shí),違反前置條件,責(zé)任在客戶方;違反后置條件或不變式,責(zé)任在服務(wù)方[6]。
2 基于內(nèi)置合約狀態(tài)檢查的構(gòu)件測(cè)試
2.1 建立構(gòu)件狀態(tài)模型
構(gòu)件狀態(tài)模型描述構(gòu)件響應(yīng)相關(guān)事件的動(dòng)態(tài)行為,構(gòu)件根據(jù)當(dāng)前狀態(tài)對(duì)事件做出相應(yīng)的響應(yīng),具體表現(xiàn)就是相應(yīng)的狀態(tài)轉(zhuǎn)換。構(gòu)件狀態(tài)轉(zhuǎn)換的觸發(fā)條件包括內(nèi)部過程(函數(shù)調(diào)用、異常等)和外部事件(接口調(diào)用、指令信號(hào)等)[7]。構(gòu)件狀態(tài)模型描述構(gòu)件的動(dòng)態(tài)行為,表現(xiàn)構(gòu)件在生命周期內(nèi)所經(jīng)歷的狀態(tài)序列。
構(gòu)件屬性決定構(gòu)件狀態(tài),構(gòu)件狀態(tài)轉(zhuǎn)換本質(zhì)是從一種屬性組合轉(zhuǎn)換到另一種屬性組合,既包含單個(gè)屬性值表示的狀態(tài),也包含某個(gè)屬性值域表示的狀態(tài)。在特殊情況下,某個(gè)狀態(tài)可能有接近無窮的屬性組合值,找出關(guān)鍵狀態(tài)表示屬性組合。狀態(tài)模型只關(guān)注關(guān)鍵屬性[8]。
2.2 生成構(gòu)件狀態(tài)轉(zhuǎn)化表
在構(gòu)件整個(gè)運(yùn)行期間,根據(jù)合約對(duì)構(gòu)件產(chǎn)生的狀態(tài)進(jìn)行跟蹤檢查,對(duì)每次狀態(tài)轉(zhuǎn)換進(jìn)行嚴(yán)格測(cè)試。生成構(gòu)件狀態(tài)轉(zhuǎn)換表內(nèi)容[9]:
(1) 確定構(gòu)件狀態(tài)模型中所有關(guān)鍵屬性;
(2) 確定構(gòu)件狀態(tài)模型中的所有狀態(tài);
(3) 確定每個(gè)狀態(tài)對(duì)應(yīng)的值域;
(4) 確定狀態(tài)的隱性轉(zhuǎn)換和狀態(tài)顯性轉(zhuǎn)換;
(5) 針對(duì)關(guān)鍵狀態(tài)轉(zhuǎn)換,分別列出相應(yīng)的輸入?yún)?shù)、初始狀態(tài)、最終狀態(tài)、前置條件和后置條件。構(gòu)件狀態(tài)轉(zhuǎn)換表描述了構(gòu)件的所有行為,包含了狀態(tài)模型中的全部狀態(tài)轉(zhuǎn)換,是一個(gè)測(cè)試方案。
2.3 內(nèi)置構(gòu)件合約測(cè)試接口
構(gòu)件狀態(tài)轉(zhuǎn)換完全覆蓋是構(gòu)件合約狀態(tài)測(cè)試的目標(biāo)。一個(gè)測(cè)試用例表示構(gòu)件狀態(tài)模型中的一次狀態(tài)轉(zhuǎn)換,最小測(cè)試用例集覆蓋了構(gòu)件狀態(tài)模型中的全部狀態(tài)轉(zhuǎn)換,用于構(gòu)件合約測(cè)試的接口函數(shù)由最小測(cè)試用例集實(shí)現(xiàn)[10]。構(gòu)件合約測(cè)試接口包含初始狀態(tài)設(shè)置操作和最終狀態(tài)驗(yàn)證操作。
2.4 設(shè)計(jì)構(gòu)件合約測(cè)試用例
構(gòu)件狀態(tài)轉(zhuǎn)換表的初始狀態(tài)映射到合約測(cè)試接口的初始狀態(tài)設(shè)置函數(shù),而最終狀態(tài)映射到最終狀態(tài)驗(yàn)證函數(shù),可以把初始狀態(tài)設(shè)置函數(shù)和最終狀態(tài)驗(yàn)證函數(shù)設(shè)置為測(cè)試用例[11]。
根據(jù)構(gòu)件初始狀態(tài),每個(gè)初始狀態(tài)表示可能的警戒條件或?qū)傩越M合,至少對(duì)應(yīng)一個(gè)初始狀態(tài)設(shè)置函數(shù)。由于同一個(gè)狀態(tài)可能具有多個(gè)值。在狀態(tài)警戒條件下,通過設(shè)置函數(shù)參數(shù)形式,觸發(fā)狀態(tài)的轉(zhuǎn)換。
3 實(shí)例分析
以某網(wǎng)站用戶登錄賬戶為例,闡明如何基于合約狀態(tài)檢查進(jìn)行構(gòu)件測(cè)試。如果用戶連續(xù)3次密碼輸入錯(cuò)誤,賬戶自動(dòng)鎖定;用戶通過綁定的手機(jī)號(hào)碼或電子郵箱,利用短信或電子郵件驗(yàn)證碼的方式申請(qǐng)賬戶解鎖;系統(tǒng)解鎖成功后,須等待一定延遲時(shí)間,賬戶激活,允許用戶重新登錄賬戶。用戶登錄狀態(tài)模型如圖2,賬戶包含三種獨(dú)立狀態(tài):鎖定、解鎖和激活。賬戶鎖定或解鎖時(shí)禁止用戶登錄,賬戶激活時(shí)允許用戶登錄,其中,激活狀態(tài)被擴(kuò)展成4個(gè)隱性狀態(tài):第1次登錄、第2次登錄、第3次登錄和登錄成功。每種賬戶狀態(tài)和允許登錄次數(shù)LOGIN_TIMES組合分別表示構(gòu)件狀態(tài)模型的一種狀態(tài)。構(gòu)件關(guān)鍵屬性允許登錄次數(shù)LOGIN_TIMES大于0時(shí),賬戶處于激活狀態(tài)。
表1是用戶登錄狀態(tài)轉(zhuǎn)換表。包含11種需要進(jìn)行的狀態(tài)轉(zhuǎn)換,由測(cè)試執(zhí)行前的初始狀態(tài)以及測(cè)試執(zhí)行完后的最終狀態(tài)組成,每次狀態(tài)轉(zhuǎn)換要輸入?yún)?shù)密碼(PASSWORD)、驗(yàn)證碼(CAPTCHA)或延遲時(shí)間(DELAYTIME),狀態(tài)轉(zhuǎn)換前驗(yàn)證前置條件,狀態(tài)轉(zhuǎn)換后驗(yàn)證后置條件。表2列出了對(duì)用戶登錄狀態(tài)轉(zhuǎn)換覆蓋的最小測(cè)試用例集,利用測(cè)試用例測(cè)試前驗(yàn)證相應(yīng)前置條件,測(cè)試后與預(yù)期結(jié)果比較,驗(yàn)證是否滿足。
4 結(jié) 語(yǔ)
本文提出的基于合約狀態(tài)檢查的構(gòu)件測(cè)試方法,將構(gòu)件的交互關(guān)系分為客戶方與服務(wù)方。根據(jù)構(gòu)件的權(quán)利和義務(wù),在客戶方的構(gòu)件中內(nèi)置用于對(duì)服務(wù)方進(jìn)行測(cè)試的接口,通過構(gòu)件狀態(tài)的轉(zhuǎn)換分析構(gòu)件的內(nèi)部信息,驗(yàn)證是否滿足前置條件;在服務(wù)方的構(gòu)件中內(nèi)置狀態(tài)設(shè)置與狀態(tài)驗(yàn)證的合約測(cè)試接口,狀態(tài)設(shè)置將構(gòu)件設(shè)置為測(cè)試所需要的前置條件狀態(tài),狀態(tài)驗(yàn)證根據(jù)構(gòu)件的內(nèi)部狀態(tài)驗(yàn)證是否滿足后置條件。
在今后的工作中,將進(jìn)一步完善該方法,盡可能應(yīng)用到實(shí)際的構(gòu)件開發(fā)和測(cè)試工作中。
參考文獻(xiàn)
[1] 單錦輝,姜瑛,孫萍.軟件測(cè)試研究進(jìn)展[J].北京大學(xué)學(xué)報(bào):自然科學(xué)版,2005,41(l):134?145.
[2] 張毅坤,葉濤,邢傳玉.面向構(gòu)件化軟件的合約檢查測(cè)試框架[J].計(jì)算機(jī)工程,2006,32(20):78?80.
[3] 吳立松,楊根興,蔡立志.基于構(gòu)件的測(cè)試腳本復(fù)用技術(shù)研究[J].計(jì)算機(jī)應(yīng)用研究,2009,26(4):1323?1326.
[4] 付劍平,陸民燕.軟件測(cè)試性設(shè)計(jì)綜述[J].計(jì)算機(jī)應(yīng)用,2008,28(11):2915?2918.
[5] MEYER B. Object?oriented software construction [M]. New Jersey: Prentice Hall, 1997.
[6] 劉永紅.構(gòu)件及基于構(gòu)件的軟件測(cè)試研究[D].成都:中國(guó)科學(xué)院,2006.
[7] 余金山,劉志偉.一種基于內(nèi)置合約檢查和可配置接口的軟構(gòu)件測(cè)試技術(shù)[J].計(jì)算機(jī)應(yīng)用研究,2011,28(5):1756?1760.
[8] 徐亮,曹萬華,陳靖,等.一種艦載指控系統(tǒng)構(gòu)件集成測(cè)試方法[J].計(jì)算機(jī)與數(shù)字工程,2010,38(6):54?58.
[9] 葉婷婷,王映輝.一種基于AOP的構(gòu)件合約化測(cè)試方法與實(shí)現(xiàn)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2012,22(6):71?74.
[10] 陳錦富,盧炎生,謝曉東.軟件錯(cuò)誤注入測(cè)試技術(shù)研究[J].軟件學(xué)報(bào),2009,20(6):1425?1443.
[11] 韋群,王玨.軟件缺陷及其對(duì)軟件可靠性的影響分析[J].計(jì)算機(jī)應(yīng)用與軟件,2011,28(001):145?149.
2.2 生成構(gòu)件狀態(tài)轉(zhuǎn)化表
在構(gòu)件整個(gè)運(yùn)行期間,根據(jù)合約對(duì)構(gòu)件產(chǎn)生的狀態(tài)進(jìn)行跟蹤檢查,對(duì)每次狀態(tài)轉(zhuǎn)換進(jìn)行嚴(yán)格測(cè)試。生成構(gòu)件狀態(tài)轉(zhuǎn)換表內(nèi)容[9]:
(1) 確定構(gòu)件狀態(tài)模型中所有關(guān)鍵屬性;
(2) 確定構(gòu)件狀態(tài)模型中的所有狀態(tài);
(3) 確定每個(gè)狀態(tài)對(duì)應(yīng)的值域;
(4) 確定狀態(tài)的隱性轉(zhuǎn)換和狀態(tài)顯性轉(zhuǎn)換;
(5) 針對(duì)關(guān)鍵狀態(tài)轉(zhuǎn)換,分別列出相應(yīng)的輸入?yún)?shù)、初始狀態(tài)、最終狀態(tài)、前置條件和后置條件。構(gòu)件狀態(tài)轉(zhuǎn)換表描述了構(gòu)件的所有行為,包含了狀態(tài)模型中的全部狀態(tài)轉(zhuǎn)換,是一個(gè)測(cè)試方案。
2.3 內(nèi)置構(gòu)件合約測(cè)試接口
構(gòu)件狀態(tài)轉(zhuǎn)換完全覆蓋是構(gòu)件合約狀態(tài)測(cè)試的目標(biāo)。一個(gè)測(cè)試用例表示構(gòu)件狀態(tài)模型中的一次狀態(tài)轉(zhuǎn)換,最小測(cè)試用例集覆蓋了構(gòu)件狀態(tài)模型中的全部狀態(tài)轉(zhuǎn)換,用于構(gòu)件合約測(cè)試的接口函數(shù)由最小測(cè)試用例集實(shí)現(xiàn)[10]。構(gòu)件合約測(cè)試接口包含初始狀態(tài)設(shè)置操作和最終狀態(tài)驗(yàn)證操作。
2.4 設(shè)計(jì)構(gòu)件合約測(cè)試用例
構(gòu)件狀態(tài)轉(zhuǎn)換表的初始狀態(tài)映射到合約測(cè)試接口的初始狀態(tài)設(shè)置函數(shù),而最終狀態(tài)映射到最終狀態(tài)驗(yàn)證函數(shù),可以把初始狀態(tài)設(shè)置函數(shù)和最終狀態(tài)驗(yàn)證函數(shù)設(shè)置為測(cè)試用例[11]。
根據(jù)構(gòu)件初始狀態(tài),每個(gè)初始狀態(tài)表示可能的警戒條件或?qū)傩越M合,至少對(duì)應(yīng)一個(gè)初始狀態(tài)設(shè)置函數(shù)。由于同一個(gè)狀態(tài)可能具有多個(gè)值。在狀態(tài)警戒條件下,通過設(shè)置函數(shù)參數(shù)形式,觸發(fā)狀態(tài)的轉(zhuǎn)換。
3 實(shí)例分析
以某網(wǎng)站用戶登錄賬戶為例,闡明如何基于合約狀態(tài)檢查進(jìn)行構(gòu)件測(cè)試。如果用戶連續(xù)3次密碼輸入錯(cuò)誤,賬戶自動(dòng)鎖定;用戶通過綁定的手機(jī)號(hào)碼或電子郵箱,利用短信或電子郵件驗(yàn)證碼的方式申請(qǐng)賬戶解鎖;系統(tǒng)解鎖成功后,須等待一定延遲時(shí)間,賬戶激活,允許用戶重新登錄賬戶。用戶登錄狀態(tài)模型如圖2,賬戶包含三種獨(dú)立狀態(tài):鎖定、解鎖和激活。賬戶鎖定或解鎖時(shí)禁止用戶登錄,賬戶激活時(shí)允許用戶登錄,其中,激活狀態(tài)被擴(kuò)展成4個(gè)隱性狀態(tài):第1次登錄、第2次登錄、第3次登錄和登錄成功。每種賬戶狀態(tài)和允許登錄次數(shù)LOGIN_TIMES組合分別表示構(gòu)件狀態(tài)模型的一種狀態(tài)。構(gòu)件關(guān)鍵屬性允許登錄次數(shù)LOGIN_TIMES大于0時(shí),賬戶處于激活狀態(tài)。
表1是用戶登錄狀態(tài)轉(zhuǎn)換表。包含11種需要進(jìn)行的狀態(tài)轉(zhuǎn)換,由測(cè)試執(zhí)行前的初始狀態(tài)以及測(cè)試執(zhí)行完后的最終狀態(tài)組成,每次狀態(tài)轉(zhuǎn)換要輸入?yún)?shù)密碼(PASSWORD)、驗(yàn)證碼(CAPTCHA)或延遲時(shí)間(DELAYTIME),狀態(tài)轉(zhuǎn)換前驗(yàn)證前置條件,狀態(tài)轉(zhuǎn)換后驗(yàn)證后置條件。表2列出了對(duì)用戶登錄狀態(tài)轉(zhuǎn)換覆蓋的最小測(cè)試用例集,利用測(cè)試用例測(cè)試前驗(yàn)證相應(yīng)前置條件,測(cè)試后與預(yù)期結(jié)果比較,驗(yàn)證是否滿足。
4 結(jié) 語(yǔ)
本文提出的基于合約狀態(tài)檢查的構(gòu)件測(cè)試方法,將構(gòu)件的交互關(guān)系分為客戶方與服務(wù)方。根據(jù)構(gòu)件的權(quán)利和義務(wù),在客戶方的構(gòu)件中內(nèi)置用于對(duì)服務(wù)方進(jìn)行測(cè)試的接口,通過構(gòu)件狀態(tài)的轉(zhuǎn)換分析構(gòu)件的內(nèi)部信息,驗(yàn)證是否滿足前置條件;在服務(wù)方的構(gòu)件中內(nèi)置狀態(tài)設(shè)置與狀態(tài)驗(yàn)證的合約測(cè)試接口,狀態(tài)設(shè)置將構(gòu)件設(shè)置為測(cè)試所需要的前置條件狀態(tài),狀態(tài)驗(yàn)證根據(jù)構(gòu)件的內(nèi)部狀態(tài)驗(yàn)證是否滿足后置條件。
在今后的工作中,將進(jìn)一步完善該方法,盡可能應(yīng)用到實(shí)際的構(gòu)件開發(fā)和測(cè)試工作中。
參考文獻(xiàn)
[1] 單錦輝,姜瑛,孫萍.軟件測(cè)試研究進(jìn)展[J].北京大學(xué)學(xué)報(bào):自然科學(xué)版,2005,41(l):134?145.
[2] 張毅坤,葉濤,邢傳玉.面向構(gòu)件化軟件的合約檢查測(cè)試框架[J].計(jì)算機(jī)工程,2006,32(20):78?80.
[3] 吳立松,楊根興,蔡立志.基于構(gòu)件的測(cè)試腳本復(fù)用技術(shù)研究[J].計(jì)算機(jī)應(yīng)用研究,2009,26(4):1323?1326.
[4] 付劍平,陸民燕.軟件測(cè)試性設(shè)計(jì)綜述[J].計(jì)算機(jī)應(yīng)用,2008,28(11):2915?2918.
[5] MEYER B. Object?oriented software construction [M]. New Jersey: Prentice Hall, 1997.
[6] 劉永紅.構(gòu)件及基于構(gòu)件的軟件測(cè)試研究[D].成都:中國(guó)科學(xué)院,2006.
[7] 余金山,劉志偉.一種基于內(nèi)置合約檢查和可配置接口的軟構(gòu)件測(cè)試技術(shù)[J].計(jì)算機(jī)應(yīng)用研究,2011,28(5):1756?1760.
[8] 徐亮,曹萬華,陳靖,等.一種艦載指控系統(tǒng)構(gòu)件集成測(cè)試方法[J].計(jì)算機(jī)與數(shù)字工程,2010,38(6):54?58.
[9] 葉婷婷,王映輝.一種基于AOP的構(gòu)件合約化測(cè)試方法與實(shí)現(xiàn)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2012,22(6):71?74.
[10] 陳錦富,盧炎生,謝曉東.軟件錯(cuò)誤注入測(cè)試技術(shù)研究[J].軟件學(xué)報(bào),2009,20(6):1425?1443.
[11] 韋群,王玨.軟件缺陷及其對(duì)軟件可靠性的影響分析[J].計(jì)算機(jī)應(yīng)用與軟件,2011,28(001):145?149.
2.2 生成構(gòu)件狀態(tài)轉(zhuǎn)化表
在構(gòu)件整個(gè)運(yùn)行期間,根據(jù)合約對(duì)構(gòu)件產(chǎn)生的狀態(tài)進(jìn)行跟蹤檢查,對(duì)每次狀態(tài)轉(zhuǎn)換進(jìn)行嚴(yán)格測(cè)試。生成構(gòu)件狀態(tài)轉(zhuǎn)換表內(nèi)容[9]:
(1) 確定構(gòu)件狀態(tài)模型中所有關(guān)鍵屬性;
(2) 確定構(gòu)件狀態(tài)模型中的所有狀態(tài);
(3) 確定每個(gè)狀態(tài)對(duì)應(yīng)的值域;
(4) 確定狀態(tài)的隱性轉(zhuǎn)換和狀態(tài)顯性轉(zhuǎn)換;
(5) 針對(duì)關(guān)鍵狀態(tài)轉(zhuǎn)換,分別列出相應(yīng)的輸入?yún)?shù)、初始狀態(tài)、最終狀態(tài)、前置條件和后置條件。構(gòu)件狀態(tài)轉(zhuǎn)換表描述了構(gòu)件的所有行為,包含了狀態(tài)模型中的全部狀態(tài)轉(zhuǎn)換,是一個(gè)測(cè)試方案。
2.3 內(nèi)置構(gòu)件合約測(cè)試接口
構(gòu)件狀態(tài)轉(zhuǎn)換完全覆蓋是構(gòu)件合約狀態(tài)測(cè)試的目標(biāo)。一個(gè)測(cè)試用例表示構(gòu)件狀態(tài)模型中的一次狀態(tài)轉(zhuǎn)換,最小測(cè)試用例集覆蓋了構(gòu)件狀態(tài)模型中的全部狀態(tài)轉(zhuǎn)換,用于構(gòu)件合約測(cè)試的接口函數(shù)由最小測(cè)試用例集實(shí)現(xiàn)[10]。構(gòu)件合約測(cè)試接口包含初始狀態(tài)設(shè)置操作和最終狀態(tài)驗(yàn)證操作。
2.4 設(shè)計(jì)構(gòu)件合約測(cè)試用例
構(gòu)件狀態(tài)轉(zhuǎn)換表的初始狀態(tài)映射到合約測(cè)試接口的初始狀態(tài)設(shè)置函數(shù),而最終狀態(tài)映射到最終狀態(tài)驗(yàn)證函數(shù),可以把初始狀態(tài)設(shè)置函數(shù)和最終狀態(tài)驗(yàn)證函數(shù)設(shè)置為測(cè)試用例[11]。
根據(jù)構(gòu)件初始狀態(tài),每個(gè)初始狀態(tài)表示可能的警戒條件或?qū)傩越M合,至少對(duì)應(yīng)一個(gè)初始狀態(tài)設(shè)置函數(shù)。由于同一個(gè)狀態(tài)可能具有多個(gè)值。在狀態(tài)警戒條件下,通過設(shè)置函數(shù)參數(shù)形式,觸發(fā)狀態(tài)的轉(zhuǎn)換。
3 實(shí)例分析
以某網(wǎng)站用戶登錄賬戶為例,闡明如何基于合約狀態(tài)檢查進(jìn)行構(gòu)件測(cè)試。如果用戶連續(xù)3次密碼輸入錯(cuò)誤,賬戶自動(dòng)鎖定;用戶通過綁定的手機(jī)號(hào)碼或電子郵箱,利用短信或電子郵件驗(yàn)證碼的方式申請(qǐng)賬戶解鎖;系統(tǒng)解鎖成功后,須等待一定延遲時(shí)間,賬戶激活,允許用戶重新登錄賬戶。用戶登錄狀態(tài)模型如圖2,賬戶包含三種獨(dú)立狀態(tài):鎖定、解鎖和激活。賬戶鎖定或解鎖時(shí)禁止用戶登錄,賬戶激活時(shí)允許用戶登錄,其中,激活狀態(tài)被擴(kuò)展成4個(gè)隱性狀態(tài):第1次登錄、第2次登錄、第3次登錄和登錄成功。每種賬戶狀態(tài)和允許登錄次數(shù)LOGIN_TIMES組合分別表示構(gòu)件狀態(tài)模型的一種狀態(tài)。構(gòu)件關(guān)鍵屬性允許登錄次數(shù)LOGIN_TIMES大于0時(shí),賬戶處于激活狀態(tài)。
表1是用戶登錄狀態(tài)轉(zhuǎn)換表。包含11種需要進(jìn)行的狀態(tài)轉(zhuǎn)換,由測(cè)試執(zhí)行前的初始狀態(tài)以及測(cè)試執(zhí)行完后的最終狀態(tài)組成,每次狀態(tài)轉(zhuǎn)換要輸入?yún)?shù)密碼(PASSWORD)、驗(yàn)證碼(CAPTCHA)或延遲時(shí)間(DELAYTIME),狀態(tài)轉(zhuǎn)換前驗(yàn)證前置條件,狀態(tài)轉(zhuǎn)換后驗(yàn)證后置條件。表2列出了對(duì)用戶登錄狀態(tài)轉(zhuǎn)換覆蓋的最小測(cè)試用例集,利用測(cè)試用例測(cè)試前驗(yàn)證相應(yīng)前置條件,測(cè)試后與預(yù)期結(jié)果比較,驗(yàn)證是否滿足。
4 結(jié) 語(yǔ)
本文提出的基于合約狀態(tài)檢查的構(gòu)件測(cè)試方法,將構(gòu)件的交互關(guān)系分為客戶方與服務(wù)方。根據(jù)構(gòu)件的權(quán)利和義務(wù),在客戶方的構(gòu)件中內(nèi)置用于對(duì)服務(wù)方進(jìn)行測(cè)試的接口,通過構(gòu)件狀態(tài)的轉(zhuǎn)換分析構(gòu)件的內(nèi)部信息,驗(yàn)證是否滿足前置條件;在服務(wù)方的構(gòu)件中內(nèi)置狀態(tài)設(shè)置與狀態(tài)驗(yàn)證的合約測(cè)試接口,狀態(tài)設(shè)置將構(gòu)件設(shè)置為測(cè)試所需要的前置條件狀態(tài),狀態(tài)驗(yàn)證根據(jù)構(gòu)件的內(nèi)部狀態(tài)驗(yàn)證是否滿足后置條件。
在今后的工作中,將進(jìn)一步完善該方法,盡可能應(yīng)用到實(shí)際的構(gòu)件開發(fā)和測(cè)試工作中。
參考文獻(xiàn)
[1] 單錦輝,姜瑛,孫萍.軟件測(cè)試研究進(jìn)展[J].北京大學(xué)學(xué)報(bào):自然科學(xué)版,2005,41(l):134?145.
[2] 張毅坤,葉濤,邢傳玉.面向構(gòu)件化軟件的合約檢查測(cè)試框架[J].計(jì)算機(jī)工程,2006,32(20):78?80.
[3] 吳立松,楊根興,蔡立志.基于構(gòu)件的測(cè)試腳本復(fù)用技術(shù)研究[J].計(jì)算機(jī)應(yīng)用研究,2009,26(4):1323?1326.
[4] 付劍平,陸民燕.軟件測(cè)試性設(shè)計(jì)綜述[J].計(jì)算機(jī)應(yīng)用,2008,28(11):2915?2918.
[5] MEYER B. Object?oriented software construction [M]. New Jersey: Prentice Hall, 1997.
[6] 劉永紅.構(gòu)件及基于構(gòu)件的軟件測(cè)試研究[D].成都:中國(guó)科學(xué)院,2006.
[7] 余金山,劉志偉.一種基于內(nèi)置合約檢查和可配置接口的軟構(gòu)件測(cè)試技術(shù)[J].計(jì)算機(jī)應(yīng)用研究,2011,28(5):1756?1760.
[8] 徐亮,曹萬華,陳靖,等.一種艦載指控系統(tǒng)構(gòu)件集成測(cè)試方法[J].計(jì)算機(jī)與數(shù)字工程,2010,38(6):54?58.
[9] 葉婷婷,王映輝.一種基于AOP的構(gòu)件合約化測(cè)試方法與實(shí)現(xiàn)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2012,22(6):71?74.
[10] 陳錦富,盧炎生,謝曉東.軟件錯(cuò)誤注入測(cè)試技術(shù)研究[J].軟件學(xué)報(bào),2009,20(6):1425?1443.
[11] 韋群,王玨.軟件缺陷及其對(duì)軟件可靠性的影響分析[J].計(jì)算機(jī)應(yīng)用與軟件,2011,28(001):145?149.