本發(fā)明涉及一種用于進(jìn)行軟件檢測(cè)的測(cè)試用例生成系統(tǒng)及記錄了測(cè)試用例的記錄介質(zhì)。
背景技術(shù):
伴隨著搭載于系統(tǒng)的軟件的規(guī)模增大,正在變得難以對(duì)軟件的規(guī)范、所有的代碼通過(guò)審查來(lái)確認(rèn),或?qū)嵤y(cè)試。此外,并行動(dòng)作的軟件中,有時(shí)會(huì)因?yàn)樘幚淼臅r(shí)機(jī)而發(fā)生不良情況,這樣的不良情況難以通過(guò)測(cè)試發(fā)現(xiàn)。作為針對(duì)這樣的問(wèn)題的處理,存在有應(yīng)用作為形式化驗(yàn)證技術(shù)之一的即模型檢測(cè)的方法。
在模型檢測(cè)中,作為檢測(cè)對(duì)象的設(shè)計(jì),具體地是使用形式化描述語(yǔ)言表示軟件規(guī)范、源代碼(以下,這些稱為“驗(yàn)證模型”)。此外,使用具有時(shí)間的概念和算符的邏輯式即時(shí)序邏輯式將檢測(cè)對(duì)象所要求的性質(zhì)作為屬性來(lái)表現(xiàn),或者通過(guò)沒(méi)有時(shí)間概念的邏輯式將檢測(cè)對(duì)象所要求的性質(zhì)作為斷言來(lái)表現(xiàn)。通過(guò)將這些驗(yàn)證模型、以屬性或者是斷言來(lái)表示的檢測(cè)式輸入至在計(jì)算機(jī)上工作的工具即模型檢測(cè)器,并通過(guò)窮舉狀態(tài)搜索等數(shù)理方法來(lái)判定檢測(cè)對(duì)象是否滿足所要求的性質(zhì)。此外,在不滿足所要求的性質(zhì)的情況下,反例被導(dǎo)出。
另一方面,源代碼被編譯而被轉(zhuǎn)換為目標(biāo)代碼,進(jìn)而作為以特定的形式被結(jié)合的可運(yùn)行形式而被搭載于系統(tǒng)。這個(gè)過(guò)程中,即使源代碼中沒(méi)有不良情況,但由于編譯器的錯(cuò)誤、最優(yōu)化的影響,也可能在目標(biāo)代碼中發(fā)生不良情況。此外,對(duì)制品的開發(fā)者來(lái)說(shuō),有想要確認(rèn)軟件的最終形態(tài)即目標(biāo)代碼是否有缺陷的需求。因此,如果可以對(duì)目標(biāo)代碼應(yīng)用模型檢測(cè)的話也有用。但是,由于根據(jù)目標(biāo)代碼工作的計(jì)算機(jī)而代碼的表現(xiàn)不同的原因,針對(duì)目標(biāo)代碼的模型檢測(cè)存在技術(shù)困難,非一般地實(shí)現(xiàn)的工具也不多。
作為針對(duì)該問(wèn)題的對(duì)策,存在應(yīng)用模型檢測(cè)而生成測(cè)試用例的技術(shù)。由于模型檢測(cè)器有通過(guò)驗(yàn)證模型對(duì)檢測(cè)對(duì)象的運(yùn)行路徑、可取得的動(dòng)作進(jìn)行窮舉搜索的功能,因此在測(cè)試用例生成技術(shù)中活用該功能。結(jié)構(gòu)如下所述。
由成為檢測(cè)對(duì)象即目標(biāo)代碼的初始代碼的源代碼制作驗(yàn)證模型,相對(duì)于源代碼中想要測(cè)試的運(yùn)行路徑的終點(diǎn)來(lái)定義所謂的“沒(méi)有到達(dá)該終點(diǎn)”的屬性或者是斷言。關(guān)于該屬性或者斷言的輸入,模型檢測(cè)器將到該終點(diǎn)的運(yùn)行路徑作為反例輸出。例如,利用模型檢測(cè)器SPIN(Simple Promela Interpreter),在驗(yàn)證模型中在最后被執(zhí)行的點(diǎn)上描述為assert(false)并執(zhí)行檢測(cè)。在描述了所述的斷言的點(diǎn)被執(zhí)行的用例存在的情況下,作為與從開始執(zhí)行的點(diǎn)到執(zhí)行結(jié)束的點(diǎn)為止的運(yùn)行路徑相關(guān)的信息的追跡(トレース)作為1個(gè)或者多個(gè)反例被輸出。追跡1對(duì)應(yīng)測(cè)試用例1(也可以對(duì)應(yīng)執(zhí)行了執(zhí)行條件的多個(gè)測(cè)試用例)。該追跡包括對(duì)中途非確定性地選擇的變量的賦值,也就是說(shuō)輸入值確定,在有多個(gè)進(jìn)程的情況下也包含該執(zhí)行順序。將該追跡變換為用于執(zhí)行測(cè)試的數(shù)據(jù),將成為檢測(cè)對(duì)象的目標(biāo)代碼設(shè)為在實(shí)體設(shè)備或者模擬器上執(zhí)行的系統(tǒng)的輸入。該數(shù)據(jù)成為測(cè)試用例或者是其的一部分。所謂測(cè)試用例,是表示測(cè)試條件的數(shù)據(jù)。在此,表示為“測(cè)試用例的一部分”的理由,是由于由追跡所變換的數(shù)據(jù)不包含合格與否基準(zhǔn)、成為檢測(cè)對(duì)象的程序的某幾個(gè)執(zhí)行條件。
由于該測(cè)試用例生成技術(shù)可以窮舉運(yùn)行路徑,因此可以期望與相對(duì)于目標(biāo)代碼實(shí)施模型檢測(cè)的情況同樣的效果。作為進(jìn)行應(yīng)用了模型檢測(cè)的測(cè)試用例生成的現(xiàn)有技術(shù),存在有專利文獻(xiàn)1。
現(xiàn)有技術(shù)文獻(xiàn)
專利文獻(xiàn)
專利文獻(xiàn)1:日本特開2010-102624號(hào)公報(bào)
技術(shù)實(shí)現(xiàn)要素:
發(fā)明要解決的問(wèn)題
在軟件的模型檢測(cè)中,可以使用時(shí)序邏輯式來(lái)表示合格與否基準(zhǔn)。但是,在目標(biāo)代碼的檢測(cè)時(shí),由于一個(gè)一個(gè)的測(cè)試是在實(shí)體設(shè)備或者模擬器上執(zhí)行的,不可以使用時(shí)序邏輯式表示合格與否基準(zhǔn)。在模型檢測(cè)中,由于是處理作為時(shí)序邏輯式的算符的“通?!?、“將來(lái)”,在所有的控制點(diǎn)(模型檢測(cè)中的執(zhí)行步驟)邏輯式被評(píng)價(jià)。但是,在目標(biāo)代碼的測(cè)試中,合格與否判定變?yōu)轭A(yù)先確定的時(shí)刻上的邏輯式的評(píng)價(jià)。通常,往往只在執(zhí)行后的一點(diǎn)評(píng)價(jià)合格與否判定的邏輯式。因此,不可以向使用實(shí)體設(shè)備、模擬器執(zhí)行測(cè)試的系統(tǒng)輸入時(shí)序邏輯式作為合格與否基準(zhǔn),不可以實(shí)施包含通過(guò)時(shí)序邏輯式表示那樣的時(shí)間概念的性質(zhì)的評(píng)價(jià)。
本發(fā)明的目的是在測(cè)試目標(biāo)代碼時(shí),提供一種可以使用時(shí)序邏輯式表現(xiàn)合格與否基準(zhǔn)的技術(shù)。
解決問(wèn)題的手段
為了解決上述課題,例如采用權(quán)利要求書內(nèi)記載的結(jié)構(gòu)。本申請(qǐng)包含多個(gè)解決上述課題的單元,但如果舉出一例的話,提供了一種測(cè)試用例生成系統(tǒng),其包括:控制內(nèi)容生成部,其根據(jù)運(yùn)行路徑信息,生成與測(cè)試運(yùn)行控制內(nèi)容相關(guān)的信息,所述運(yùn)行路徑信息是由成為檢測(cè)對(duì)象的目標(biāo)代碼或者可運(yùn)行形式文件的模型搜索到的;合格與否條件生成部,其根據(jù)針對(duì)所述檢測(cè)對(duì)象的包含時(shí)間要素的檢測(cè)式和所述運(yùn)行路徑信息,生成與合格與否條件相關(guān)的信息,所述合格與否條件是由沒(méi)有時(shí)間要素的判定式和運(yùn)行該判定式的時(shí)刻組合而成的;以及測(cè)試用例生成部,其根據(jù)與所述測(cè)試運(yùn)行控制內(nèi)容相關(guān)的信息和與所述合格與否條件相關(guān)的信息,生成具有和所述檢測(cè)式對(duì)應(yīng)的合格與否條件的測(cè)試用例。
此外,根據(jù)其他例子,提供一種計(jì)算機(jī)可讀取的記錄介質(zhì),其特征在于,記錄了具有數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù),所述數(shù)據(jù)結(jié)構(gòu)是用于使計(jì)算機(jī)執(zhí)行對(duì)成為檢測(cè)對(duì)象的目標(biāo)代碼或者可運(yùn)行形式文件檢測(cè)的處理的測(cè)試用例的數(shù)據(jù)結(jié)構(gòu),其包含與測(cè)試運(yùn)行控制內(nèi)容相關(guān)的信息,以及與由沒(méi)有時(shí)間要素的判定式和運(yùn)行該判定式的時(shí)刻組合而成的合格與否條件相關(guān)的信息。
發(fā)明的效果
根據(jù)本發(fā)明,在對(duì)目標(biāo)代碼測(cè)試時(shí),可以使用時(shí)序邏輯式表示合格與否基準(zhǔn)。由此,能夠檢測(cè)的內(nèi)容相比于只有沒(méi)有時(shí)間概念的邏輯式時(shí)也擴(kuò)大了。,通過(guò)將在運(yùn)用模型檢測(cè)生成了的測(cè)試用例中檢測(cè)目標(biāo)代碼與該合格與否基準(zhǔn)的表示相配合,可以實(shí)現(xiàn)和相對(duì)于目標(biāo)代碼通過(guò)模型檢測(cè)來(lái)檢測(cè)由時(shí)序邏輯描述的屬性時(shí)同樣的效果。
本發(fā)明關(guān)聯(lián)的進(jìn)一步的特征根據(jù)本說(shuō)明書的描述,附圖而變得明確。此外,上述以外的課題、結(jié)構(gòu)以及效果,通過(guò)以下實(shí)施例的說(shuō)明而明確。
附圖說(shuō)明
圖1是實(shí)現(xiàn)本發(fā)明的測(cè)試用例生成系統(tǒng)的系統(tǒng)的構(gòu)成圖。
圖2是示出和本發(fā)明的實(shí)施例中測(cè)試用例生成程序的功能關(guān)聯(lián)程序的構(gòu)成的圖。
圖3是本發(fā)明中的測(cè)試用例生成程序的處理流程圖。
圖4是本發(fā)明的實(shí)施例中的控制內(nèi)容生成部的處理流程圖。
圖5是本發(fā)明的實(shí)施例中的合格與否條件生成部的處理流程圖。
圖6是屬性的句法模式相關(guān)的數(shù)據(jù)庫(kù)的一例。
圖7是示出成為檢測(cè)對(duì)象的抽樣程序、該驗(yàn)證模型和追跡的一例。
圖8是示出本發(fā)明的實(shí)施例中的測(cè)試運(yùn)行控制內(nèi)容信息及合格與否判定信息的一例。
圖9是示出本發(fā)明的實(shí)施例中輸出的測(cè)試用例的一例。
具體實(shí)施方式
以下,參照附圖對(duì)本發(fā)明的實(shí)施例進(jìn)行說(shuō)明。再者,附圖表示遵循本發(fā)明的原理的具體的實(shí)施例,但這些是用于本發(fā)明的理解的圖,決不是用于限定地解釋本發(fā)明的圖。此外,關(guān)于各圖中共同的結(jié)構(gòu)附上同一參照編號(hào)。
圖1是實(shí)現(xiàn)本發(fā)明的測(cè)試用例生成系統(tǒng)的系統(tǒng)的構(gòu)成圖。本發(fā)明是生成測(cè)試用例的系統(tǒng),該測(cè)試用例用于對(duì)由源代碼編譯過(guò)的目標(biāo)代碼、可執(zhí)行形式進(jìn)行檢測(cè)的測(cè)試系統(tǒng)。測(cè)試用例如上所述,是表示測(cè)試條件的數(shù)據(jù)。
本發(fā)明是作為軟件工具被實(shí)現(xiàn)的。測(cè)試用例生成系統(tǒng)的各功能作為軟件被安裝。測(cè)試用例生成系統(tǒng)具備計(jì)算機(jī)110。計(jì)算機(jī)110具備:主運(yùn)算裝置(CPU)111、主存儲(chǔ)裝置(RAM)112、存儲(chǔ)介質(zhì)(ROM)113、輔助存儲(chǔ)裝置(硬盤)114、輸入裝置(鍵盤、指示設(shè)備等)130、顯示裝置(顯示器、打印機(jī)等)140。
實(shí)現(xiàn)本發(fā)明的軟件是作為測(cè)試用例生成程序120,存儲(chǔ)于計(jì)算機(jī)110的ROM113內(nèi),通過(guò)CPU111讀出并執(zhí)行。計(jì)算機(jī)110的CPU111根據(jù)測(cè)試用例生成程序120來(lái)執(zhí)行規(guī)定的處理。
將成為檢測(cè)對(duì)象即目標(biāo)代碼的初始代碼的源代碼的文件,或以該源代碼為基礎(chǔ)作成的驗(yàn)證模型的文件存儲(chǔ)于計(jì)算機(jī)110上的硬盤114中??梢詮逆I盤等輸入裝置130進(jìn)行對(duì)于測(cè)試用例生成程序120的用戶操作。測(cè)試用例生成程序120的輸出作為向顯示器等顯示裝置140的顯示、向硬盤114的數(shù)據(jù)文件生成而實(shí)現(xiàn)。作為另一例子,測(cè)試用例生成程序120的輸出,也可以是經(jīng)由網(wǎng)絡(luò)的向未圖示的外部計(jì)算機(jī)的輸出,通過(guò)向CD-ROM等外部存儲(chǔ)介質(zhì)的數(shù)據(jù)文件形式的寫入實(shí)現(xiàn)的輸出。此外,其他的程序也可以和測(cè)試用例生成程序120一樣地被處理,CPU111執(zhí)行其他的程序并進(jìn)行輸出。
圖2是示出ROM113內(nèi)存儲(chǔ)的測(cè)試用例生成程序120的構(gòu)成、以及與測(cè)試用例生成程序120相關(guān)的其他程序的構(gòu)成。驗(yàn)證模型生成程序210將成為作為檢測(cè)對(duì)象的目標(biāo)程序的初始代碼的源代碼200作為輸入,生成驗(yàn)證模型215。如上所述,在此的驗(yàn)證模型215使用形式化描述語(yǔ)言將軟件規(guī)范或者源代碼表現(xiàn)出來(lái)。
運(yùn)行路徑搜索程序220對(duì)關(guān)于檢測(cè)對(duì)象的驗(yàn)證模型215進(jìn)行搜索,輸出運(yùn)行路徑信息(例如,以下說(shuō)明的追跡225)。更詳細(xì)地說(shuō),運(yùn)行路徑搜索程序220將向驗(yàn)證模型215追加了測(cè)試用例生成用(狹義地是追跡生成用)的屬性或者斷言的文件作為輸入,將成為測(cè)試用例的初始的追跡組225作為反例而生成1個(gè)或多個(gè)。運(yùn)行路徑搜索程序220在反例的生成中使用公知的模型檢測(cè)器。本實(shí)施例中,利用SPIN作為模型檢測(cè)器。反例的生成數(shù)可以根據(jù)對(duì)模型檢測(cè)器的選項(xiàng)制定來(lái)調(diào)整。
測(cè)試用例生成程序120將追跡組225和時(shí)序邏輯式235作為輸入,生成測(cè)試用例組280。在此,時(shí)序邏輯式235是對(duì)于成為檢測(cè)對(duì)象的目標(biāo)代碼或者可執(zhí)行形式的屬性,是包含時(shí)間要素的檢測(cè)式。測(cè)試用例生成程序120采取以下的結(jié)構(gòu)。測(cè)試用例生成程序具備運(yùn)行路徑解析部230、控制內(nèi)容生成部240、合格與否條件生成部250、測(cè)試用例生成部260。
運(yùn)行路徑解析部230將驗(yàn)證模型215作為輸入而接收,對(duì)包含驗(yàn)證模型215所表示的源代碼200內(nèi)的處理調(diào)用關(guān)系的控制流進(jìn)行解析。源代碼用C語(yǔ)言描述的情況下,處理調(diào)用關(guān)系是函數(shù)調(diào)用樹。運(yùn)行路徑解析部230將控制流的信息作為解析結(jié)果輸出,該控制流的信息在測(cè)試用例生成程序120內(nèi)被利用。再者,追跡組225如果包含控制流的信息的話,也可以不從驗(yàn)證模型215,而從追跡組225解析控制流。也就是說(shuō),也可以將追跡組225作為運(yùn)行路徑解析部230的輸入。
控制內(nèi)容生成部240將追跡組225作為輸入,生成與對(duì)追跡組225的各追跡控制測(cè)試運(yùn)行的內(nèi)容有關(guān)的信息(以下,稱為“測(cè)試運(yùn)行控制內(nèi)容信息”)。在此,所謂測(cè)試運(yùn)行的控制內(nèi)容,具體地說(shuō)是對(duì)變量或個(gè)人計(jì)算機(jī)的寄存器等的數(shù)據(jù)進(jìn)行操作、中斷或?qū)崟r(shí)OS(Operation System(操作系統(tǒng)))中的任務(wù)啟動(dòng)等的處理運(yùn)行、將成為檢測(cè)對(duì)象的程序的運(yùn)行狀態(tài)作為條件的觸發(fā)(指定條件的成立為止的待機(jī))等,對(duì)包含檢測(cè)對(duì)象程序的舉動(dòng)的測(cè)試的執(zhí)行內(nèi)容造成影響的操作的信息。此外,測(cè)試運(yùn)行的控制內(nèi)容和執(zhí)行該操作的時(shí)刻的信息配對(duì)。測(cè)試運(yùn)行控制內(nèi)容信息對(duì)于1個(gè)追跡,作為1個(gè)或者多個(gè)事件隊(duì)列被規(guī)定。
合格與否條件生成部250將追跡組225、時(shí)序邏輯式235作為輸入而接收,對(duì)于追跡組225的各追跡,輸出與合格與否條件相關(guān)的信息(以下,稱之為“合格與否條件信息”)。該合格與否條件信息由沒(méi)有時(shí)間要素的判定式和執(zhí)行該判定式的時(shí)刻組合而成。此外,在合格與否條件信息中,對(duì)于1個(gè)追跡,規(guī)定1個(gè)或者多個(gè)的合格與否判定的事件隊(duì)列。
測(cè)試用例生成部260根據(jù)控制內(nèi)容生成部240輸出的測(cè)試運(yùn)行控制內(nèi)容信息和合格與否條件生成部250輸出的合格與否條件信息,輸出測(cè)試用例組280。測(cè)試用例組280是可以輸入至測(cè)試系統(tǒng)290的形式。測(cè)試用例生成部260使用來(lái)自運(yùn)行路徑解析部230的控制流的信息,將測(cè)試運(yùn)行控制內(nèi)容信息和合格與否條件信息的事件隊(duì)列作為1個(gè)事件隊(duì)列按運(yùn)行順序排列。其后,測(cè)試用例生成部260通過(guò)將按運(yùn)行順序排列的事件隊(duì)列轉(zhuǎn)換為輸入至測(cè)試系統(tǒng)的格式,生成測(cè)試用例組280。
測(cè)試用例組280被記錄于硬盤114等存儲(chǔ)裝置或者是規(guī)定的計(jì)算機(jī)可讀取的記錄介質(zhì)。測(cè)試系統(tǒng)290是運(yùn)行由源代碼200編譯的目標(biāo)代碼、可運(yùn)行形式文件的檢測(cè)的系統(tǒng)。測(cè)試系統(tǒng)290使用測(cè)試用例組280,對(duì)上述目標(biāo)代碼、可運(yùn)行形式文件檢測(cè)。由此,通過(guò)將時(shí)序算符導(dǎo)入至合格與否條件的測(cè)試用例組280,可以對(duì)檢測(cè)對(duì)象的目標(biāo)代碼、可運(yùn)行形式檢測(cè)。
圖3是測(cè)試用例生成程序120所運(yùn)行的處理流程圖。首先,步驟300中開始處理,接下來(lái),步驟310中,運(yùn)行路徑解析部230解析驗(yàn)證模型215的控制流并輸出控制流的信息。
從步驟320到步驟340被反復(fù)執(zhí)行。由于從步驟320到步驟340是對(duì)于追跡組225的各追跡而執(zhí)行的,因此僅反復(fù)與追跡組225所包含的追跡數(shù)相應(yīng)的次數(shù)。在步驟320中,控制內(nèi)容生成部240解析追跡組225從而輸出測(cè)試運(yùn)行控制內(nèi)容信息。在步驟330中,合格與否條件生成部250根據(jù)追跡組225和時(shí)序邏輯式235輸出合格與否條件信息。在步驟340中,測(cè)試用例生成部260根據(jù)測(cè)試運(yùn)行控制內(nèi)容信息和合格與否條件信息輸出測(cè)試用例組280的1個(gè)測(cè)試用例。反復(fù)以上操作,在步驟390結(jié)束處理。
圖4是將控制內(nèi)容生成部240的步驟320的處理流詳細(xì)化的圖。在步驟400開始處理。從步驟410開始到步驟440,僅反復(fù)與追跡組225的各追跡所包含的處理的步驟數(shù)相應(yīng)的次數(shù)。在步驟410中,控制內(nèi)容生成部240將成為處理對(duì)象的各追跡所包含的步驟從開頭一個(gè)一個(gè)地抽取。在此,在一次運(yùn)行中抽取未抽取的處理步驟中接下來(lái)要運(yùn)行的處理步驟之一并解釋內(nèi)容。
在步驟420中,控制內(nèi)容生成部240判定步驟410中抽取的處理的種類。如果處理是通過(guò)對(duì)變量(包含個(gè)人計(jì)算機(jī)的寄存器)賦值的輸入值設(shè)定的話,進(jìn)行步驟430。處理是進(jìn)程啟動(dòng)的話則進(jìn)行步驟440。判定為輸入值設(shè)定的條件是,處理是賦值語(yǔ)句,被賦值的變量被設(shè)定為輸入值。判定為啟動(dòng)進(jìn)程的條件是,該處理是作為進(jìn)程起點(diǎn)被指定的函數(shù)的最初處理??梢允褂脕?lái)自運(yùn)行路徑解析部230的控制流信息判定是否是函數(shù)的最初處理。
在步驟430中,控制內(nèi)容生成部240向輸出的測(cè)試運(yùn)行控制內(nèi)容信息追加對(duì)變量的賦值的處理。作為運(yùn)行時(shí)刻的信息,被賦予該處理的描述位置(函數(shù)、行等)。處理的描述位置可以由追跡取得,或者追溯來(lái)自運(yùn)行路徑解析部230的控制流信息而取得。
在步驟440中,和步驟430同樣的,控制內(nèi)容生成部240向測(cè)試運(yùn)行控制內(nèi)容信息追加用于使追跡的處理所表示的中斷、任務(wù)啟動(dòng)發(fā)生的控制處理。驗(yàn)證模型的各進(jìn)程在檢測(cè)對(duì)象的程序中相當(dāng)?shù)奶幚?中斷、任務(wù)啟動(dòng)等)的信息作為設(shè)定于控制內(nèi)容生成部240的內(nèi)容,選擇與處理相應(yīng)的控制處理。反復(fù)以上操作,在步驟490結(jié)束處理。
圖5是將合格與否條件生成部250的步驟330的處理流程圖詳細(xì)化的圖。在步驟500開始處理。在步驟510中,合格與否生成部250對(duì)輸入的時(shí)序邏輯式235的語(yǔ)法解析。解析了的語(yǔ)法以AST(Abstract Syntax Tree(抽象語(yǔ)法樹))的形式表示為內(nèi)部數(shù)據(jù)。在步驟520中,合格與否條件生成部250將通過(guò)步驟510解析了的時(shí)序邏輯式235的語(yǔ)法和與合格與否條件生成部250具有的屬性的語(yǔ)法模式相關(guān)的數(shù)據(jù)庫(kù)(檢測(cè)式解讀信息)對(duì)照,抽取一致的模式。
在步驟530中,合格與否條件生成部250從通過(guò)步驟510解析的屬性的語(yǔ)法中抽取利用于測(cè)試用例的合格與否判定的邏輯式(判定式)。此外,合格與否條件生成部250根據(jù)來(lái)自運(yùn)行路徑解析部230的控制流信息和在步驟520判定的屬性的模式,生成1個(gè)或多個(gè)有關(guān)進(jìn)行合格與否判定的時(shí)刻的信息。最終,合格與否條件生成部250通過(guò)把這些邏輯式(判定式)和有關(guān)判定時(shí)刻的信息配對(duì),生成合格與否條件信息。執(zhí)行以上的處理,在步驟590結(jié)束處理。
接下來(lái),對(duì)本實(shí)施例的測(cè)試用例生成系統(tǒng)中處理的信息進(jìn)行說(shuō)明。關(guān)于以下的幾個(gè)信息,使用“表格”結(jié)構(gòu)進(jìn)行說(shuō)明,但也不一定用表格的數(shù)據(jù)結(jié)構(gòu)來(lái)表示,也可以用其他的數(shù)據(jù)結(jié)構(gòu)來(lái)表示。因此,由于是表示不依賴于數(shù)據(jù)結(jié)構(gòu)的信息,以下中,將使用表格表示的數(shù)據(jù)簡(jiǎn)稱為“信息”。
圖6示出了與屬性的語(yǔ)法模式有關(guān)的數(shù)據(jù)庫(kù)即屬性解讀表格(檢測(cè)式解讀信息)600。屬性解讀表格600是圖5的步驟510中所參照的信息。屬性解讀表格600包含將屬性變換為合格與否條件的規(guī)則。屬性解讀表格600,例如存儲(chǔ)于硬盤114等存儲(chǔ)裝置中,合格與否條件生成部250讀取該信息并進(jìn)行上述的處理??梢栽跍y(cè)試用例生成程序120中僅處理具有屬性解讀表格600所規(guī)定的語(yǔ)法形式的屬性。
本實(shí)施例中,屬性解讀表格600包含對(duì)于每個(gè)屬性語(yǔ)法形式的模式所附上的規(guī)則編號(hào)601、屬性語(yǔ)法形式602、合格與否條件603和各合格與否判定間的關(guān)系(用于作為1個(gè)測(cè)試用例整體的合格與否判定時(shí)的各合格與否判定間的關(guān)系)604作為構(gòu)成項(xiàng)目。本例中,屬性解讀表格600中處理的屬性設(shè)為L(zhǎng)TL(Linear Temporal Logic(線性時(shí)序邏輯))。
屬性解讀表格600中存儲(chǔ)有2個(gè)時(shí)序邏輯式的模式。1個(gè)是G(expr),另1個(gè)是F(expr)。G是意味著“通?!钡臅r(shí)序算符,F(xiàn)是意味著“將來(lái)”的時(shí)序算符。此外expr在此是示出邏輯式的抽象表示。expr成為利用于合格與否判定的邏輯式。
在規(guī)則編號(hào)601的“R1”的記錄中,描述了“G(expr)”在測(cè)試用例中變換為“在(執(zhí)行的)各函數(shù)的出入口判定expr”的規(guī)則。這樣的規(guī)則是通過(guò)描述規(guī)則的語(yǔ)言、進(jìn)行變換的程序自身來(lái)表示。此外,在規(guī)則編號(hào)601的“R1”的記錄中,將基于expr的各判定的結(jié)果用于作為1個(gè)測(cè)試用例整體的合格與否判定時(shí),被指定取得各判定結(jié)果的“AND”。同樣的,在規(guī)則編號(hào)601的“R2”的記錄中,F(xiàn)(expr)被變換為“在各函數(shù)的出入口判定expr”,且在作為1個(gè)測(cè)試用例整體的合格與否判定時(shí),被指定取得各判定結(jié)果的“OR”。
屬性解讀表格600中所指定的內(nèi)容可以根據(jù)利用的測(cè)試系統(tǒng)的功能而變更。例如,測(cè)試系統(tǒng)可以在檢測(cè)對(duì)象的程序的各語(yǔ)句(ステートメント)中實(shí)施合格與否判定的情況下,也可以指定為G(expr)變換成“在(執(zhí)行的)各語(yǔ)句的執(zhí)行后判定expr”。此外,屬性解讀表格600可以處理圖6所示以外的語(yǔ)法形式。
圖7中示出如下內(nèi)容:成為檢測(cè)對(duì)象的實(shí)例程序的由C語(yǔ)言所描述的源代碼710;通過(guò)SPIN的模型描述語(yǔ)言Promela寫出源代碼710,還追加了測(cè)試用例用的斷言assert(0)的驗(yàn)證模型720;和通過(guò)SPIN執(zhí)行驗(yàn)證模型720的檢測(cè)而獲得追跡的一例730。
源代碼710的函數(shù)在驗(yàn)證模型720中被變換為inline宏。此外,源代碼中,DI0表示數(shù)字輸入的寄存器。對(duì)源代碼中的變量a的DI0的代入被表示為在驗(yàn)證模型720中對(duì)變量a的0或1的非決定性的代入。追跡730是對(duì)變量a代入1的用例。但是為了便于說(shuō)明,和實(shí)際的追跡(反例)的形式是不同的。再者,變量a相對(duì)于測(cè)試用例生成程序120被指定為輸入。此外,測(cè)試用例生成程序120中,將G(x≤1)指定為屬性。
運(yùn)行路徑解析部230解析驗(yàn)證模型720并生成AST,對(duì)AST搜索,在各inline中發(fā)現(xiàn)利用其他inline的描述,由此對(duì)原來(lái)的源代碼710的函數(shù)調(diào)用樹進(jìn)行解析。在此可知main→func1這樣的調(diào)用關(guān)系。
圖8和圖9示出將驗(yàn)證模型720和追跡730作為輸入,測(cè)試用例生成程序120運(yùn)行圖3的處理并輸出的數(shù)據(jù)。圖8示出了測(cè)試運(yùn)行控制內(nèi)容信息810以及合格與否條件信息820。測(cè)試運(yùn)行控制內(nèi)容信息810包含編號(hào)811、測(cè)試運(yùn)行控制處理的種類812和該處理的內(nèi)容813作為構(gòu)成項(xiàng)目。此外,合格與否信息820包含編號(hào)821、測(cè)試運(yùn)行控制處理的種類(合格與否判定也作為運(yùn)行控制的一種)822和該處理的內(nèi)容823作為構(gòu)成項(xiàng)目。圖9示出了測(cè)試用例900。在圖8及圖9中,各信息的1行表示一個(gè)事件、執(zhí)行測(cè)試系統(tǒng)的處理的1個(gè)步驟。再者,測(cè)試用例900被設(shè)為另外變換為向測(cè)試系統(tǒng)輸入的形式。
對(duì)控制內(nèi)容生成部240的處理進(jìn)行說(shuō)明??刂苾?nèi)容生成部240將追跡730作為輸入接收,其后,解析追跡730,抽取向輸入變量代入1的處理。控制內(nèi)容生成部240進(jìn)一步根據(jù)記載于追跡730的處理的位置(對(duì)應(yīng)于圖7的720的第12行)和控制流信息,判定該處理在函數(shù)main中實(shí)施。利用該判定結(jié)果,控制內(nèi)容生成部240輸出測(cè)試運(yùn)行控制內(nèi)容信息810。在控制內(nèi)容生成部240輸出的測(cè)試運(yùn)行控制內(nèi)容信息810中,事件隊(duì)列的長(zhǎng)度變?yōu)?。第1個(gè)事件是將進(jìn)入main函數(shù)作為條件的觸發(fā)。第2個(gè)事件是向變量a代入1的處理。
接下來(lái),對(duì)合格與否條件生成部250的處理進(jìn)行說(shuō)明。合格與否條件生成部對(duì)追跡730和屬性G(x≤1)進(jìn)行解析,從而輸出合格與否信息820。這時(shí),合格與否條件生成部250參照記載于屬性解讀表格600的規(guī)則。該例子中,合格與否條件生成部250在屬性解讀表格600中選擇(參照)規(guī)則“R1”,其結(jié)果按照控制流的信息,在main函數(shù)的入口、func1函數(shù)的入口、func1函數(shù)的出口、main函數(shù)的出口設(shè)定觸發(fā),在各觸發(fā)之后立刻設(shè)定合格與否判定。也就是說(shuō),輸出的合格與否條件信息820在main函數(shù)的入口、func1函數(shù)的入口、func1函數(shù)的出口、main函數(shù)的出口啟動(dòng)觸發(fā),在啟動(dòng)觸發(fā)之后變?yōu)榕卸閤≤1的內(nèi)容。再者,在圖8、圖9中省略了在作為1個(gè)測(cè)試用例整體的合格與否判定中取得各判定結(jié)果的AND的情況,但該信息被提供給了合格與否條件信息820和測(cè)試用例900。也就是說(shuō),合格與否條件生成部250將示出了在作為1個(gè)測(cè)試用例整體的合格與否判定中取得各判定結(jié)果的AND的信息添加于合格與否條件信息,最終,測(cè)試用例生成部260添加了上述信息并生成測(cè)試用例。
接下來(lái),對(duì)測(cè)試用例生成部260的處理進(jìn)行說(shuō)明。測(cè)試用例生成部260測(cè)試運(yùn)行控制內(nèi)容信息810和合格與否條件信息820輸出測(cè)試用例900。如圖9所示。測(cè)試用例900包含步驟編號(hào)901、測(cè)試運(yùn)行控制的處理種類(合格與否判定也作為測(cè)試運(yùn)行控制的一種)902和測(cè)試運(yùn)行控制的處理內(nèi)容903作為構(gòu)成項(xiàng)目。在此,在測(cè)試用例生成部260輸出的測(cè)試用例900中,測(cè)試運(yùn)行控制內(nèi)容信息810和合格與否條件信息820被合成而變?yōu)?個(gè)信息。測(cè)試用例生成部260判定為在main函數(shù)的入口的觸發(fā)重復(fù),將重復(fù)的部分匯集為1個(gè)。
圖8及圖9的例子中,輸入值設(shè)定、觸發(fā)、合格與否判定作為測(cè)試運(yùn)行的處理種類而被記下。假設(shè)除此之外還準(zhǔn)備了示出中斷、任務(wù)啟動(dòng)的描述。在取得運(yùn)行中斷、任務(wù)啟動(dòng)的處理的時(shí)刻的情況下也可以利用觸發(fā)。該觸發(fā)條件中,如果所利用的測(cè)試系統(tǒng)能以程序的語(yǔ)句單位指定時(shí)刻的話,只要在追跡中即將轉(zhuǎn)變進(jìn)程之前指定運(yùn)行的語(yǔ)句的運(yùn)行終止時(shí)間即可。在所利用的測(cè)試系統(tǒng)可以檢測(cè)函數(shù)的出入口的情況下,可能有將上述語(yǔ)句的函數(shù)的入口以及從此開始的規(guī)定時(shí)間的經(jīng)過(guò)作為觸發(fā)條件的方法。
綜上所述,由于在程序的運(yùn)行的各處判定了屬性的邏輯式(x≤1),因此可以實(shí)現(xiàn)和屬性的“通?!蓖瑯拥暮细衽c否判定。只在函數(shù)的出入口判定的情況雖不會(huì)完全地再現(xiàn)模型檢測(cè)的各語(yǔ)句中的判定,但是會(huì)進(jìn)行以其為標(biāo)準(zhǔn)的判定。此外,通過(guò)根據(jù)所利用的語(yǔ)句的功能而變更屬性解讀表格600的規(guī)則,也可以將判定頻率變?yōu)楹湍P蜋z測(cè)同等的。
接下來(lái),對(duì)屬性的時(shí)序算符是“將來(lái)”的情況進(jìn)行說(shuō)明。該例子中,合格與否條件生成部250在屬性解讀表格600中選擇(參照)規(guī)則“R2”,按照控制流的信息生成設(shè)定了觸發(fā)及合格與否判定的合格與否條件信息。這之后,測(cè)試用例生成部260通過(guò)該合格與否條件信息和由控制內(nèi)容生成部240輸出的測(cè)試運(yùn)行控制內(nèi)容信息,輸出測(cè)試用例900。
更詳細(xì)地說(shuō),在所輸入的屬性的時(shí)序算符是“將來(lái)”時(shí),在作為一個(gè)測(cè)試用例整體的合格與否判定中取得各判定結(jié)果的OR的情況,除了在測(cè)試用例900中被指定以外,作為最后的事件而追加合格與否判定的觸發(fā)。在此,測(cè)試用例生成程序120中,指定F(x>1)為屬性。如果F(x>1)的話,將x>1作為條件的觸發(fā)被追加至測(cè)試用例900的最后。觸發(fā)的超時(shí)(タイムアウト)時(shí)間設(shè)定于測(cè)試用例生成程序120中,被提供給測(cè)試用例900(圖中未記載)。是否運(yùn)行將邏輯式設(shè)為條件的觸發(fā)是在測(cè)試系統(tǒng)290中和合格與否條件同樣地被判定及記錄。此外,該判定結(jié)果在測(cè)試系統(tǒng)290中也可以利用于1個(gè)測(cè)試用例整體的合格與否判定。綜上所述,由于在程序的執(zhí)行中至少在1處以上屬性的邏輯式(x>1)成立的情況下可以對(duì)其檢測(cè),因此可以實(shí)現(xiàn)和屬性的“將來(lái)”同樣的合格與否判定。
綜上所述,在檢測(cè)目標(biāo)代碼時(shí),可以使用時(shí)序邏輯式作為合格與否基準(zhǔn)。由此,可以將“通?!?、“將來(lái)”這樣的時(shí)序算符的表示導(dǎo)入至合格與否條件。此外,在應(yīng)用了模型檢測(cè)的測(cè)試用例生成中向合格與否基準(zhǔn)導(dǎo)入時(shí)序邏輯式的話,可以針對(duì)目標(biāo)代碼實(shí)現(xiàn)和實(shí)施模型檢測(cè)同樣的檢測(cè)。通過(guò)這些,可以達(dá)到軟件不良情況減少和系統(tǒng)的可靠性提高。
本發(fā)明并不限于上述的實(shí)施例而包括了各種各樣的變形例。上述實(shí)施例是為了讓本發(fā)明容易理解而詳細(xì)說(shuō)明的實(shí)施例,未必要限定于具備所說(shuō)明的全部的結(jié)構(gòu)的實(shí)施例。此外,也可以將某個(gè)實(shí)施例的結(jié)構(gòu)的一部分替換為其他實(shí)施例的結(jié)構(gòu)。此外,也可以在某個(gè)實(shí)施例的結(jié)構(gòu)上加上其他實(shí)施例的結(jié)構(gòu)。此外,也可以對(duì)于各實(shí)施例的結(jié)構(gòu)進(jìn)行其他結(jié)構(gòu)的追加、刪除、置換。
上述的各結(jié)構(gòu)、功能等可以通過(guò)解釋、執(zhí)行處理器分別實(shí)現(xiàn)各個(gè)功能的程序由軟件來(lái)實(shí)現(xiàn)。實(shí)現(xiàn)各功能的程序等的信息可以存儲(chǔ)于一些記錄裝置或者是記錄介質(zhì)。此外,可以將擁有如圖9中例示那樣的數(shù)據(jù)結(jié)構(gòu)的測(cè)試用例的數(shù)據(jù)存儲(chǔ)于一些記錄裝置或者是記錄介質(zhì)。
符號(hào)說(shuō)明
100 :測(cè)試用例生成系統(tǒng)
110 :計(jì)算機(jī)
111 :CPU
113 :ROM
114 :硬盤
120 :測(cè)試用例生成程序
130 :輸入裝置
140 :顯示裝置
200 :源代碼
210 :驗(yàn)證模型生成程序
215 :驗(yàn)證模型
220 :運(yùn)行路徑搜索程序
225 :追跡組
230 :運(yùn)行路徑解析部
235 :時(shí)序邏輯式
240 :控制內(nèi)容生成部
250 :合格與否條件生成部
260 :測(cè)試用例生成部
280 :測(cè)試用例組
290 :測(cè)試系統(tǒng)
600 :屬性解讀表格
710 :源代碼
720 :驗(yàn)證模型
730 :追跡
810 :測(cè)試運(yùn)行控制內(nèi)容信息
820 :合格與否條件信息
900 :測(cè)試用例。