專利名稱:一種基于擴(kuò)展?fàn)顟B(tài)機(jī)圖的測試用例自動產(chǎn)生方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種基于擴(kuò)展?fàn)顟B(tài)機(jī)圖的測試用例自動產(chǎn)生方法,屬于集成電路功能驗證的技術(shù)領(lǐng)域。
背景技術(shù):
現(xiàn)有的集成電路功能驗證方法主要通過限制性隨機(jī)驗證完成大部分應(yīng)用場景的模擬。對于很難在隨機(jī)情況中產(chǎn)生的邊角情況由驗證工程師手工編寫,并通過原有的驗證平臺加載到被測設(shè)計中,這時邊角情況種類的完全性、產(chǎn)生的復(fù)雜度、與現(xiàn)有驗證平臺的兼容性都直接影響到了驗證成本。驗證工程師會根據(jù)狀態(tài)機(jī)的狀態(tài)點和狀態(tài)之間的轉(zhuǎn)移功能是否被覆蓋到來決定手工編寫的測試案例的內(nèi)容,以達(dá)到兩者覆蓋率的完整。狀態(tài)機(jī)圖中只標(biāo)注了狀態(tài)和其之間的轉(zhuǎn)移連線,狀態(tài)內(nèi)部的各種情況沒有進(jìn)行圖形標(biāo)注,致使邊角情況的制造困難。在狀態(tài)機(jī)圖上的遍歷研究中,最優(yōu)解的查找往往比較復(fù)雜,根據(jù)功能驗證的特性,少量的重復(fù)減少大量的計算是更實用的方案。而且僅對簡單的狀態(tài)的遍歷,對其他覆蓋率指標(biāo)和一些邊角情況的功能測點效果不明顯。隨機(jī)加手工的方法產(chǎn)生的測試用例集合整體效率并不高,因為其中測試用例的針對性不強(qiáng),對某些覆蓋的重復(fù)測試過多,影響相同覆蓋率下仿真軟件的運(yùn)行時間。為解決高覆蓋率且高效的測試用例的產(chǎn)生問題,甚至是對于某些指標(biāo)的全覆蓋率和最高效問題,本專利將提出一種擴(kuò)展的狀態(tài)機(jī)模型,配以低復(fù)雜度的遍歷方法和測試用例產(chǎn)生方法,完成高效高覆蓋率測試用例的自動產(chǎn)生?,F(xiàn)有根據(jù)狀態(tài)序列產(chǎn)生測試信號的方法,僅考慮當(dāng)前運(yùn)行周期輸入信號對狀態(tài)轉(zhuǎn)移的影響,對復(fù)雜狀態(tài)機(jī),特別是由內(nèi)部變量引起的狀態(tài)轉(zhuǎn)移,現(xiàn)有方法無法滿足。
發(fā)明內(nèi)容
本發(fā)明要解決的主要技術(shù)問題是,提供一種擴(kuò)展的狀態(tài)機(jī)圖及其構(gòu)建方法,在此基礎(chǔ)上提供對應(yīng)的遍歷方法和測試用例的自動生成方法。為解決上述技術(shù)問題,本發(fā)明采用的技術(shù)方案如下:一種擴(kuò)展的狀態(tài)機(jī)圖及其構(gòu)建方法:1.狀態(tài)集合、狀態(tài)轉(zhuǎn)移集合、狀態(tài)轉(zhuǎn)移條件集合分別用帶有狀態(tài)名的圓圈、帶箭頭的曲線、曲線上轉(zhuǎn)移條件的文字表示。2.收集并分類每個狀態(tài)中涉及的輸入信號、內(nèi)部變量、輸出信號、輸出函數(shù)。3.對于每個狀態(tài)中的每個輸出函數(shù),收集和記錄實現(xiàn)該輸出函數(shù)對輸入信號和內(nèi)部變量的要求,以及該輸出函數(shù)輸出時所影響的內(nèi)部變量與輸出信號。4.將每個狀態(tài)中的每個輸出函數(shù),按照輸出后的下一狀態(tài)分類。即該狀態(tài)的狀態(tài)扇出數(shù)目為輸出函數(shù)的分類數(shù)目。5.在每個狀態(tài)圓圈中,構(gòu)建影響輸出函數(shù)選擇,由輸入信號和內(nèi)部變量取值約束構(gòu)成的,具有優(yōu)先級先后順序的路徑圖。進(jìn)一步地,狀態(tài)圓圈中的路徑圖,其特征在于,每個狀態(tài)有幾種下一狀態(tài),就有幾個路徑終點,即該狀態(tài)的狀態(tài)扇出數(shù)。該路徑圖上的每一條路徑都由一個統(tǒng)一的起點出發(fā),路經(jīng)該狀態(tài)所有輸入信號和內(nèi)部變量,最后匯聚到這幾個終點中的一個上,形成一條完整的路徑。該起點由該狀態(tài)的扇入狀態(tài)轉(zhuǎn)移曲線的終點匯合而成。每一條連接到終點的路徑都對應(yīng)著一種輸出函數(shù)的選擇。從起點走到終點的一條完整路徑,表示了如果要走到最后連接終點的線路所表示的輸出函數(shù),需要經(jīng)過一路上各相關(guān)輸入信號和內(nèi)部變量的約束,隨后通過終點對應(yīng)的狀態(tài)轉(zhuǎn)移曲線,進(jìn)入下一個狀態(tài)。更進(jìn)一步地,狀態(tài)圓圈中的路徑圖,其特征在于,在路徑上標(biāo)注通過該路徑時對輸入信號和內(nèi)部變量相關(guān)的約束條件,包括與多個信號或多個變量相關(guān)的組合約束條件,并且同一條路徑上相同的約束條件可以合并。同一個狀態(tài)圓圈中的各輸出函數(shù)的選取條件可能會存在重疊,根據(jù)設(shè)計中判斷輸出函數(shù)選擇的實際判斷條件的優(yōu)先級從上到下排列,高優(yōu)先級的選擇條件自動從低優(yōu)先級的選擇條件中減掉,使每條完整路徑上的約束條件不會重疊。在擴(kuò)展的狀態(tài)機(jī)圖上遍歷的方法:I)計算并保存狀態(tài)機(jī)圖上任意一個狀態(tài)到另一個狀態(tài)中間經(jīng)過的最少狀態(tài)路徑,即任意兩狀態(tài)間的最短路徑。從一個狀態(tài)到另一個狀態(tài),如果是不可達(dá)的,最短路徑則為無限大。進(jìn)入第二步。2)如果從復(fù)位后的初始狀態(tài)存在到某一個狀態(tài)的最短路徑是不可達(dá),停止該方法,打印狀態(tài)機(jī)設(shè)計錯誤信息,否則進(jìn)入第三步。3)統(tǒng)計每一個狀態(tài)到其每種下一個狀態(tài)可能通過的路徑圖中的路徑種類。并將種類數(shù)標(biāo)記在該狀態(tài)到其下一狀態(tài)的狀態(tài)轉(zhuǎn)移連線上。4)創(chuàng)建一條路徑,增加到遍歷路徑集合中,以復(fù)位后的初始狀態(tài)節(jié)點作為起始節(jié)點,進(jìn)入第5步。5)如果當(dāng)前狀態(tài)節(jié)點到任意下一狀態(tài)節(jié)點存在3步中標(biāo)記的大于零的轉(zhuǎn)移連線,從中選擇一個下一狀態(tài),并選擇一條可以連接到該狀態(tài)轉(zhuǎn)移的輸出函數(shù)的約束路徑通過,在4步中創(chuàng)建的路徑中記錄這個狀態(tài)轉(zhuǎn)移,并將這個轉(zhuǎn)移的連線上標(biāo)記的數(shù)字減一,再以進(jìn)入的下一狀態(tài)節(jié)點作為當(dāng)前節(jié)點,進(jìn)入5步驟。如果當(dāng)前狀態(tài)節(jié)點到任意下一狀態(tài)節(jié)點轉(zhuǎn)移連線上的數(shù)字都為零,則進(jìn)入6步驟。6)如果狀態(tài)機(jī)圖中所有狀態(tài)之間的轉(zhuǎn)移連線上的數(shù)字都不大于零時,則遍歷完成,停止該方法,打印所有遍歷路徑集合中的路徑。如果狀態(tài)機(jī)圖中狀態(tài)之間的轉(zhuǎn)移連線上的數(shù)字存在大于零的情況時,進(jìn)入步驟7。7)如果不存在路徑從當(dāng)前狀態(tài)節(jié)點到任何一個標(biāo)記的數(shù)字還大于零的狀態(tài)轉(zhuǎn)移連線的起始狀態(tài)節(jié)點,則進(jìn)入步驟4,建立另一個從復(fù)位動作開始的路徑。如果存在路徑從當(dāng)前狀態(tài)節(jié)點到一個標(biāo)記的數(shù)字還大于零的狀態(tài)轉(zhuǎn)移連線的起始狀態(tài)節(jié)點,從所有滿足該條件的起始狀態(tài)節(jié)點中選擇一個,從步驟I中保存的任意兩個可達(dá)節(jié)點的最短路徑中找到當(dāng)前狀態(tài)節(jié)點到所選大于零的狀態(tài)轉(zhuǎn)移連線的起始狀態(tài)節(jié)點的最短路徑,將該路徑記錄在遍歷路徑中,路徑中經(jīng)歷的連線上的數(shù)字減一。被選擇的大于零的連線的起始狀態(tài)節(jié)點作為當(dāng)前節(jié)點,進(jìn)入步驟5。
在擴(kuò)展的狀態(tài)機(jī)圖上遍歷的方法,其特征在于,先確定下一狀態(tài),再確定進(jìn)入該下一狀態(tài)的輸出函數(shù)。在擴(kuò)展的狀態(tài)機(jī)圖上遍歷的方法,其特征在于,選擇下一狀態(tài)的選擇條件按優(yōu)先級從高到低的排序為:優(yōu)先選擇沒有走過的狀態(tài)轉(zhuǎn)移和狀態(tài)、選擇在當(dāng)前條件下可實現(xiàn)該狀態(tài)轉(zhuǎn)移的、選擇該狀態(tài)轉(zhuǎn)移上標(biāo)記數(shù)字大的、選擇該狀態(tài)轉(zhuǎn)移上已減掉的數(shù)字小的、選擇該狀態(tài)轉(zhuǎn)移上可實現(xiàn)的輸出函數(shù)的種類數(shù)字大的、隨機(jī)選擇。在擴(kuò)展的狀態(tài)機(jī)圖上遍歷的方法,其特征在于,選擇輸出函數(shù)時,備選輸出函數(shù)集合是連接到選定的下一狀態(tài)的輸出函數(shù)路徑集合。選擇的優(yōu)先級從高到低的排序為:優(yōu)先選擇沒有走過的輸出函數(shù)路徑、選擇當(dāng)前條件下可實現(xiàn)的輸出函數(shù)、選取位置靠上的路徑即路徑圖中判斷條件處于較高優(yōu)先級的路徑。在擴(kuò)展的狀態(tài)機(jī)圖上遍歷的方法,其特征在于,記錄遍歷集合中每條路徑經(jīng)過各節(jié)點時狀態(tài)轉(zhuǎn)移的可實現(xiàn)性、選擇的輸出函數(shù)、輸入信號與內(nèi)部變量的約束條件、該輸出函數(shù)對內(nèi)部變量值的影響。需要產(chǎn)生具體輸入信號值時,按照約束條件產(chǎn)生。需要計算輸出信號和內(nèi)部變量時,根據(jù)所選輸出函數(shù)設(shè)計的功能計算輸出信號和內(nèi)部變量。在擴(kuò)展的狀態(tài)機(jī)圖上遍歷的方法,其特征在于,選擇標(biāo)記數(shù)字大于零的狀態(tài)轉(zhuǎn)移連線的起始狀態(tài)節(jié)點時優(yōu)先級從高到低的排序是:優(yōu)先選擇從當(dāng)前狀態(tài)節(jié)點到各大于零的狀態(tài)轉(zhuǎn)移連線的起始狀態(tài)節(jié)點的最短路徑中路徑長度最短的、選擇從該起始狀態(tài)節(jié)點所有狀態(tài)扇出連線上大于零的數(shù)字的總和最大的、選擇從當(dāng)前狀態(tài)節(jié)點到各大于零的狀態(tài)轉(zhuǎn)移連線的起始狀態(tài)節(jié)點的最短路徑中路徑上大于零的數(shù)字的總和最大的,隨機(jī)選擇。在擴(kuò)展的狀態(tài)機(jī)圖上遍歷的方法,其特征在于,可實現(xiàn)性的判斷由是否可以產(chǎn)生滿足該路徑選擇中所有約束條件的數(shù)據(jù)為依據(jù)。在擴(kuò)展的狀態(tài)機(jī)圖上遍歷的方法,其特征在于,對于選定的狀態(tài)轉(zhuǎn)移和輸出函數(shù),如果輸入信號的生成不可實現(xiàn),則用符合選定狀態(tài)轉(zhuǎn)移和輸出函數(shù)的內(nèi)部變量值替換當(dāng)時內(nèi)部變量的實際值,生成輸入信號,繼續(xù)向后計算,同時標(biāo)記該狀態(tài)轉(zhuǎn)移的不可實現(xiàn)性。在擴(kuò)展的狀態(tài)機(jī)圖上遍歷的方法,其特征在于,使用在僅對一般狀態(tài)機(jī)圖進(jìn)行遍歷的時候,只需要將所有狀態(tài)轉(zhuǎn)移曲線上的數(shù)字都標(biāo)記為一,并去除輸出函數(shù)選擇部分。基于狀態(tài)序列自動產(chǎn)生測試用例的方法:1.建立帶約束的激勵包結(jié)構(gòu)。包結(jié)構(gòu)中包含被測設(shè)計的所有輸入信號、存儲被測設(shè)計中傳來內(nèi)部變量的空間、對輸出信號預(yù)測的函數(shù)、產(chǎn)生隨機(jī)信號的約束條件。包在每次例化時,都要通過標(biāo)簽和加載激勵前被測設(shè)計中的內(nèi)部變量值作為參數(shù),對包中產(chǎn)生的輸入信號進(jìn)行約束和選擇。包結(jié)構(gòu)還可以接受對輸出信號的限制。包中所有要產(chǎn)生的輸入信號被定義為位寬一定的隨機(jī)變量,每次例化時根據(jù)約束條件賦予具體的信號值。包中存在一種設(shè)定約束條件的機(jī)制,該機(jī)制包括粗約束和細(xì)約束兩部分,當(dāng)只提供測試序列的狀態(tài)序列信息時只進(jìn)行粗約束,當(dāng)同時提供測試序列的狀態(tài)信息和輸出函數(shù)信息時,先粗約束再細(xì)約束。粗約束根據(jù)表示狀態(tài)轉(zhuǎn)移的標(biāo)簽選擇實現(xiàn)該狀態(tài)轉(zhuǎn)移的約束條件來限制輸入信號,細(xì)約束根據(jù)表示輸出函數(shù)的標(biāo)簽和對輸出值的要求選擇該輸出函數(shù)的約束條件來限制輸入信號。約束中包括對輸入信號、內(nèi)部變量、輸出信號和輸出的內(nèi)部變量的要求。2.在每次對設(shè)計加載激勵時,根據(jù)狀態(tài)轉(zhuǎn)移序列,為激勵包的例化提供狀態(tài)轉(zhuǎn)移標(biāo)簽和輸出函數(shù)標(biāo)簽,并通過驗證平臺中的接口,在例化包前,從設(shè)計中將內(nèi)部變量的值讀出傳入包中,作為影響約束的另一個因素,設(shè)定包中約束條件的選擇。3如果狀態(tài)序列中保存了每次狀態(tài)轉(zhuǎn)移時的輸入信號值,則直接使用這個保存,建立固定值的激勵包序列,即激勵包序列中的包里每個輸入信號都具有具體值,具體值可以為遍歷時保存的值;如果狀態(tài)序列中沒有指明輸入信號的具體值,則根據(jù)狀態(tài)序列的狀態(tài)轉(zhuǎn)移的標(biāo)簽和輸出函數(shù)選擇的標(biāo)簽,建立帶約束的激勵包序列,這種激勵包序列只有在進(jìn)入被驗證的設(shè)計之前才確定輸入信號的具體值;如果狀態(tài)序列中只保存了狀態(tài)節(jié)點沒有記錄輸出函數(shù),此時只能根據(jù)狀態(tài)轉(zhuǎn)移的標(biāo)簽限制輸入信號,完成狀態(tài)轉(zhuǎn)移。4.不插狀態(tài)點將不可實現(xiàn)的激勵包調(diào)整為可實現(xiàn)。4.1從固定值的激勵包序列的第一個,依次向后搜索每一個包。向后表示作為激勵加載到設(shè)計時,加載的時間更晚的包。4.2如果固定值的激勵包序列中出現(xiàn)了不可實現(xiàn)的狀態(tài)轉(zhuǎn)移或輸出函數(shù),這時通過每個包中所選擇的輸出函數(shù)對內(nèi)部變量的影響,向前尋找序列中離該不可實現(xiàn)包最近的且輸出可以影響該不滿足條件的內(nèi)部變量的包。如果找到了,進(jìn)入4.3步驟。如果沒有找至IJ,且4.1步驟的搜索還沒有結(jié)束,進(jìn)入4.1步驟。如果沒找到,且4.1的搜索已經(jīng)結(jié)束,進(jìn)入5步驟。如果固定值的激勵包序列中沒有出現(xiàn)不可實現(xiàn)的狀態(tài)轉(zhuǎn)移或輸出函數(shù),則以固定值的激勵包序列作為測試激勵。4.3將不可實現(xiàn)包中對內(nèi)部變量的要求,作為對該尋找到的包輸出值的要求,并以從尋找到的包到不可實現(xiàn)包中間的激勵包不能從可實現(xiàn)變?yōu)椴豢蓪崿F(xiàn)為約束條件,重新生成該尋找到的包的輸入信號值。4.4如果生成成功,用重新生成的新的輸入信號值代替該尋找到的包中原有的輸入信號值,再按照不可實現(xiàn)包中的約束條件,重新生成不可實現(xiàn)包中的輸入信號,并標(biāo)記不可實現(xiàn)包為可實現(xiàn)?;氐?.1步驟。4.5如果生成不成功,在該尋找到的包的原有約束中增加對該輸出值的要求。4.5.1如果影響該輸出的因素只有輸入信號,則停止,保持原有不可實現(xiàn)標(biāo)記。如果4.1步驟的搜索還沒有結(jié)束,進(jìn)入4.1步驟。如果4.1步驟的搜索結(jié)束,進(jìn)入5步驟。4.5.2如果影響該輸出的因素還包括內(nèi)部變量,則以該尋找到的包作為不可實現(xiàn)包,進(jìn)入4.2步驟,向前繼續(xù)尋找,直至尋找完第一個激勵包,如果還是無法生成成功,則結(jié)束。如果可以生成成功,不可實現(xiàn)包將被標(biāo)記為可實現(xiàn)并重新生成。如果4.1步驟的搜索還沒有結(jié)束,進(jìn)入4.1步驟。如果4.1步驟的搜索結(jié)束,進(jìn)入5步驟。4.6如果帶約束的激勵包序列中出現(xiàn)了不可實現(xiàn)的狀態(tài)轉(zhuǎn)移或輸出函數(shù),因為約束的激勵包是實時的,不能對以前進(jìn)入設(shè)計的包再修改,所以直接進(jìn)入5步驟。如果沒有出現(xiàn)不可實現(xiàn)的狀態(tài)轉(zhuǎn)移或輸出函數(shù),則正常產(chǎn)生符合約束測試激勵。5.插狀態(tài)點將不可實現(xiàn)的激勵包調(diào)整為可實現(xiàn)。:5.1對于固定值的激勵包序列,從第一個或當(dāng)前的搜索位置向后搜索不可實現(xiàn)包,將找到的不可實現(xiàn)包輸入5.2步驟。對于帶約束的激勵包序列,輸入為實時激勵產(chǎn)生的不可實現(xiàn)包。如果不存在不可實現(xiàn)包,搜索結(jié)束,測試用例產(chǎn)生完畢,如果存在不可實現(xiàn)包,進(jìn)入5.2步驟。5.2將該不可實現(xiàn)包實現(xiàn)的狀態(tài)轉(zhuǎn)移打斷。5.3尋找插入狀態(tài)點的產(chǎn)生方式
5.3.1如果該狀態(tài)轉(zhuǎn)移的前一個狀態(tài)到它自己本身不存在路徑:在狀態(tài)轉(zhuǎn)移的打斷處插入一個復(fù)位操作,用寬度優(yōu)先算法,尋找從復(fù)位后的初試狀態(tài)到被打斷的狀態(tài)轉(zhuǎn)移的前一個狀態(tài)的所有路徑,此時不考慮輸出函數(shù)的選擇問題,路徑中間可以出現(xiàn)環(huán)路的重復(fù),較先出現(xiàn)的路徑為距離較短的路徑。進(jìn)入5.4步驟。5.3.2如果該狀態(tài)轉(zhuǎn)移的前一個狀態(tài)到它自己本身存在路徑:用寬度優(yōu)先算法,尋找該狀態(tài)轉(zhuǎn)移的前一個狀態(tài)到它自己本身的所有路徑,此時不考慮輸出函數(shù)的選擇問題,路徑中間可以出現(xiàn)環(huán)路的重復(fù),較先出現(xiàn)的路徑為距離較短的路徑。進(jìn)入5.4步驟。5.4對先出現(xiàn)的路徑,在路徑最后一個狀態(tài)中,加入原有不可實現(xiàn)包中對內(nèi)部變量的要求作為約束,即用一條環(huán)路路徑的操作來代替一個狀態(tài)點,以滿足對不可實現(xiàn)包中內(nèi)部變量的要求,嘗試生成一個有具體信號值的激勵包序列取代原來的不可實現(xiàn)包,該激勵包序列引起的狀態(tài)轉(zhuǎn)移的路徑插入到被打斷的位置。如果生成不成功,寬度優(yōu)先算法向下繼續(xù)搜索,直到找到為止,如果生成成功,該不可實現(xiàn)包標(biāo)記為可實現(xiàn),然后進(jìn)入5.1步驟。5.5當(dāng)運(yùn)算時間超過預(yù)期設(shè)定,終止該搜索。報告運(yùn)算超時。測試用例自動產(chǎn)生的方法,其特征在于,插狀態(tài)點實現(xiàn)步驟中,可以通過人工填寫路徑的方式取代寬度優(yōu)先算法的方式產(chǎn)生路徑,再按照路徑上的約束生成固定值的序列包。測試用例自動產(chǎn)生的方法,其特征在于,如果被打斷的狀態(tài)轉(zhuǎn)移的前一個狀態(tài)到它自己本身存在路徑時,也可以插入從復(fù)位后的初試狀態(tài)到前一個狀態(tài)的路徑。測試用例自動產(chǎn)生的方法,其特征在于,對輸入信號、輸出信號、內(nèi)部變量,建立臨時存儲空間,該存儲空間采集當(dāng)前周期的輸入信號、執(zhí)行后的輸出信號和內(nèi)部變量值。在帶約束的激勵包例化產(chǎn)生下一周期輸入信號的具體值時,預(yù)測執(zhí)行后的輸出信號和內(nèi)部變量值,給予一個最低優(yōu)先級的約束,該約束條件為使存儲中表示的二進(jìn)制位發(fā)生盡可能多的跳轉(zhuǎn)變換,即O變1,I變O。所謂最低優(yōu)先級的約束,即如果該約束使在原有約束條件下本可以產(chǎn)生的輸入信號不可以產(chǎn)生,則放棄該約束條件。本發(fā)明的有益效果是:擴(kuò)展的狀態(tài)機(jī)圖比現(xiàn)有的狀態(tài)機(jī)圖對產(chǎn)生測試用例,產(chǎn)生了更大的指導(dǎo)意義,對自動產(chǎn)生測試用例提供了數(shù)據(jù)結(jié)構(gòu)和清晰的路線圖。和隨機(jī)測試相比,本發(fā)明產(chǎn)生的測試用例包含了更全面的情況,大大減少了驗證工程師對隨機(jī)不容易達(dá)到的邊角情況場景設(shè)計的工作量。和一般的狀態(tài)遍歷算法相比,本算法實現(xiàn)更簡單,使用局部最優(yōu)代替全局最優(yōu)解,用可能的少量狀態(tài)數(shù)的增長換取計算復(fù)雜度的大大降低。彌補(bǔ)了僅依據(jù)遍歷一般狀態(tài)機(jī)圖產(chǎn)生測試序列,只能達(dá)到狀態(tài)遍歷和狀態(tài)轉(zhuǎn)移遍歷的高覆蓋性,本發(fā)明同時對其他覆蓋率指標(biāo)包括行覆蓋率、語句覆蓋率、分支覆蓋率、翻轉(zhuǎn)覆蓋率都有更好的覆蓋效果。本發(fā)明實現(xiàn)了在給定狀態(tài)序列下的測試用例的自動產(chǎn)生,彌補(bǔ)了現(xiàn)有技術(shù)中在產(chǎn)生序列后,需要全部或半人工的設(shè)計測試用例。在某些邊角情況需要大量循環(huán)才能產(chǎn)生特定場景時,采用人工輔助指導(dǎo)的方式減輕計算量。一般根據(jù)狀態(tài)序列產(chǎn)生測試用例和測試信號的方法,僅考慮當(dāng)前執(zhí)行周期輸入的輸入信號,所以對于復(fù)雜狀態(tài)機(jī),特別是由內(nèi)部變量限定的狀態(tài)轉(zhuǎn)移,不能完成狀態(tài)轉(zhuǎn)移的實現(xiàn)。本發(fā)明很好的解決了這個問題。
圖1為本發(fā)明所述的一種擴(kuò)展?fàn)顟B(tài)機(jī)圖的實施例;圖2為本發(fā)明所述的一種擴(kuò)展?fàn)顟B(tài)機(jī)圖遍歷方法實施例的流程圖;圖3為本發(fā)明所述的一種測試用例自動產(chǎn)生方法實施例的流程圖的一部分;圖4為本發(fā)明所述的一種測試用例自動產(chǎn)生方法實施例的流程圖的另一部分;圖5為本發(fā)明所述遍歷方法和產(chǎn)生測試用例包的一個實施例;
具體實施例方式下面通過具體實施方式
結(jié)合附圖對本發(fā)明作進(jìn)一步詳細(xì)說明如圖1所示,一般的狀態(tài)機(jī)圖原本由reset初始條件(進(jìn)入初始狀態(tài)INIT),三個狀態(tài):INIT、ANALISI_REQ、ASSIGN,三個狀態(tài)轉(zhuǎn)移:INIT狀態(tài)在下一周期進(jìn)入ANALISI_REQ狀態(tài)、ANALISI_REQ狀態(tài)在下一周期進(jìn)入ASSIGN狀態(tài)、ASSIGN狀態(tài)在下一周期進(jìn)入ANALISI_REQ狀態(tài),構(gòu)成。擴(kuò)展?fàn)顟B(tài)機(jī)圖以后,在ANALISI_REQ狀態(tài)中,一共有5種輸出函數(shù),對應(yīng)著5種約束路徑的選擇。輸出函數(shù)它們分別是:rul =' ΓO'的輸出函數(shù)、ru2=’r &&fu2=' O'的輸出函數(shù)、ru3=' I' &&fu3 =' O'的輸出函數(shù)、ru4=' I' &&fu4 = / O1的輸出函數(shù)、除上述四種情況外其他情況的輸出函數(shù)。在ASSIGN狀態(tài)中,一共有6種輸出函數(shù),對應(yīng)著21種約束路徑的選擇。輸出函數(shù)它們分別是:(ful or fu2 or fu3 or fu4) =' I' McodaO =' 100'的輸出函數(shù)、(ful or fu2or fu3 or fu4) =' I' McodaO =' 010'的輸出函數(shù)、(ful or fu2 or fu3 or fu4)='I' McodaO = ' 001'的輸出函數(shù)、(ful or fu2 or fu3 or fu4) = ' I' McodaO='111'的輸出函數(shù)、(fu l or fu2 or fu3 or fu4) = ’ I’&&coda0 = else 的輸出函數(shù)、!(ful or fu2 or fu3 or fu4) =' I'的輸出函數(shù)。而由于在作圖時將(ful or fu2or fu3 or fu4) = / I'分別用4條獨立的線段作為優(yōu)先一級的路徑選擇,再和后面的codaO值進(jìn)行組合,這樣就出現(xiàn)了一個4*5 = 20種的路徑約束選擇,最后是!(ful or fu2or fu3 or fu4) =' I'的一條路徑約束選擇,加起來一共21種約束路徑可以選擇。其中相同始點和終點的路徑之間,按照約束判斷時優(yōu)先級的先后順序從上向下排列,比如優(yōu)先判斷rul=' Γ &&ful=' O'條件,然后判斷ru2=' Γ &&fu2 =' O'條件。連接到狀態(tài)轉(zhuǎn)移曲線起點的路徑圖的終點上面出現(xiàn)了幾條連線,就意味著對應(yīng)該種狀態(tài)轉(zhuǎn)移有幾種輸出函數(shù),而所有通過該狀態(tài)下路徑圖起點能走到該終點的路徑都可以調(diào)用對應(yīng)的輸出函數(shù),所以出現(xiàn)了 5種輸出函數(shù)對應(yīng)21種約束路徑的情況。也可以通過約束路徑圖的其他表示形式調(diào)整5種輸出函數(shù)對應(yīng)的約束路徑,比如調(diào)整成5對5的情況,這樣畫出的路徑圖就類似狀態(tài)ANALISI_REQ的路徑圖樣子了。即擴(kuò)展?fàn)顟B(tài)機(jī)圖中,狀態(tài)圓圈內(nèi)路徑圖的表現(xiàn)形式,可能因?qū)s束條件分析的梳理形式不同,產(chǎn)生不同的路徑形式,從而影響遍歷時需要考慮的細(xì)致程度和路徑條數(shù),但本質(zhì)是一致的。如圖2所示,為擴(kuò)展?fàn)顟B(tài)機(jī)圖遍歷方法的流程圖。本流程在一般狀態(tài)機(jī)圖中也可以使用,前提條件是所有轉(zhuǎn)移連線上的數(shù)字標(biāo)為一,去除輸出函數(shù)的選擇部分。根據(jù)發(fā)明內(nèi)容中描述的對下一狀態(tài)的選擇、對輸出函數(shù)的選擇、對標(biāo)記數(shù)字大于零的狀態(tài)轉(zhuǎn)移連線的起始狀態(tài)節(jié)點的選擇的要求進(jìn)行選擇。遍歷過程中,在確定細(xì)節(jié)且需要產(chǎn)生固定值時:需要產(chǎn)生具體輸入信號值時,按照約束條件產(chǎn)生。需要計算輸出信號和內(nèi)部變量時,根據(jù)設(shè)計的功能計算輸出信號和內(nèi)部變量。如圖3和圖4所示,為測試用例自動產(chǎn)生方法的流程圖。測試包結(jié)構(gòu)內(nèi)部包括要產(chǎn)生的輸入信號,從設(shè)計中傳來的內(nèi)部信號的存儲變量,預(yù)測的輸出信號、約束條件、接受標(biāo)簽的變量等內(nèi)容。如果遍歷時已經(jīng)記錄了狀態(tài)轉(zhuǎn)移時用的激勵包的具體輸入信號值,就直接使用該值,如果僅是一種帶約束的激勵包,即包中只有標(biāo)簽,而沒有具體信號值,則在需要例化時,實時產(chǎn)生并加載。在測試包序列中如果出現(xiàn)了不可實現(xiàn)的包,就意味著生成該包時的條件不滿足,這種不滿足會出現(xiàn)在產(chǎn)生有具體固定值的遍歷結(jié)果中,也會出現(xiàn)在帶約束的測試序列包的實時例化過程中。首先考慮不向遍歷結(jié)果增加其他激勵包,即不修改原來的狀態(tài)轉(zhuǎn)移的路徑,僅調(diào)節(jié)不可實現(xiàn)包之前各激勵包產(chǎn)生的輸入信號,以試圖滿足當(dāng)前激勵包的約束,使不可實現(xiàn)包變?yōu)榭蓪崿F(xiàn)。如果不能成功,則必須在遍歷結(jié)果中插入其他激勵包,修改狀態(tài)轉(zhuǎn)移的路徑,而實時例化遇到不可實現(xiàn)包的時候,必須使用插入其他激勵包的方法。插入包的方法,是為了實現(xiàn)該不可實現(xiàn)包要完成的狀態(tài)轉(zhuǎn)移和其規(guī)定的輸出函數(shù),所以在當(dāng)前狀態(tài)無法實現(xiàn)時,通過增加狀態(tài)轉(zhuǎn)移的路徑,再回到當(dāng)前狀態(tài)的方法,使再次回到當(dāng)前狀態(tài)時可以滿足該轉(zhuǎn)移的要求。為達(dá)到可實現(xiàn)的目的而增加的狀態(tài)轉(zhuǎn)移路徑,可以通過復(fù)位來完成,也可以不同過復(fù)位來完成。如圖5所示,為本發(fā)明所述遍歷方法和產(chǎn)生測試用例包的一個實施例。圖中擴(kuò)展?fàn)顟B(tài)機(jī)圖,如果按照一般狀態(tài)機(jī)圖進(jìn)行遍歷產(chǎn)生的狀態(tài)轉(zhuǎn)移結(jié)果為:INIT—>ANALISI_REQ—>ASSIGN—>ANALISI_REQ ;而作為擴(kuò)展?fàn)顟B(tài)機(jī)圖,根據(jù)狀態(tài)轉(zhuǎn)移曲線上標(biāo)記的數(shù)字和本發(fā)明的遍歷方法會產(chǎn)生如下的狀態(tài)轉(zhuǎn)移結(jié)果:INIT->ANALISI_REQ-->ASSIGN-->ANALISI_REQ-->ASSIGN—>…;該結(jié)果中 ANALISI_REQ—>ASSIGN 至少出現(xiàn)5次,保證ANAUSI_REQ內(nèi)的5種輸出函數(shù)對應(yīng)的5種輸出約束的路徑選擇都遍歷到;ASSIGN—>ANALISI_REQ至少出現(xiàn)21次,保證ASSIGN內(nèi)的6種輸出函數(shù)對應(yīng)的21種輸出約束的路徑選擇都遍歷到。輸出函數(shù)的種類和輸出約束的路徑的對應(yīng)關(guān)系已經(jīng)在圖1的實施例中介紹過了。當(dāng)需要通過ANALISI_REQ狀態(tài)中的rul =' Ii,ful=' (V路徑進(jìn)入ASSIGN狀態(tài)時,產(chǎn)生的帶約束的激勵包中的標(biāo)簽應(yīng)該是:TAG_AN2AS (狀態(tài)轉(zhuǎn)移標(biāo)簽)和TAG_rulful (輸出函數(shù)選擇標(biāo)簽:)。該兩個標(biāo)簽對激勵包結(jié)構(gòu)內(nèi)部構(gòu)成的約束為:(tag_s==TAG_AN2AS & & tag f = = TAG_rulful) -> (rul, ful) = (1,0);以上內(nèi)容是結(jié)合具體的實施方式對本發(fā)明所作的進(jìn)一步詳細(xì)說明,不能認(rèn)定本發(fā)明的具體實施只局限于這些說明。對于本發(fā)明所屬技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干簡單推演或替換,都應(yīng)當(dāng)視為屬于本發(fā)明的保護(hù)范圍。
權(quán)利要求
1.一種擴(kuò)展的狀態(tài)機(jī)圖及其構(gòu)建方法,其特征在于包括: 1)狀態(tài)集合、狀態(tài)轉(zhuǎn)移集合、狀態(tài)轉(zhuǎn)移條件集合分別用帶有狀態(tài)名的圓圈、帶箭頭的曲線、曲線上轉(zhuǎn)移條件的文字表示。
2)收集并分類每個狀態(tài)中涉及的輸入信號、內(nèi)部變量、輸出信號、輸出函數(shù)。
3)對于每個狀態(tài)中的每個輸出函數(shù),收集和記錄實現(xiàn)該輸出函數(shù)對輸入信號和內(nèi)部變量的要求,以及該輸出函數(shù)輸出時所影響的內(nèi)部變量與輸出信號。
4)將每個狀態(tài)中的每個輸出函數(shù),按照輸出后的下一狀態(tài)分類。即該狀態(tài)的狀態(tài)扇出數(shù)目為輸出函數(shù)的分類數(shù)目。
5)在每個狀態(tài)圓圈中,構(gòu)建影響輸出函數(shù)選擇,由輸入信號和內(nèi)部變量取值約束構(gòu)成的,具有優(yōu)先級先后順序的路徑圖。
2.如權(quán)利要求1所述的擴(kuò)展?fàn)顟B(tài)機(jī)圖及其構(gòu)建的方法,其特征在于,所述狀態(tài)圓圈中的路徑圖的特征包括: 每個狀態(tài)有幾種下一狀態(tài),就有幾個路徑終點,即該狀態(tài)的狀態(tài)扇出數(shù)。該路徑圖上的每一條路徑都由一個統(tǒng)一的起點出發(fā),路經(jīng)該狀態(tài)所有輸入信號和內(nèi)部變量,最后匯聚到這幾個終點中的一個上,形成一條完整的路徑。該起點由該狀態(tài)的扇入狀態(tài)轉(zhuǎn)移曲線的終點匯合而成。每一條連接到終點的路徑都對應(yīng)著一種輸出函數(shù)的選擇。從起點走到終點的一條完整路徑,表示了如果要走到最后連接終點的線路所表示的輸出函數(shù),需要經(jīng)過一路上各相關(guān)輸入信號和內(nèi)部變量的約束,隨后通過終點對應(yīng)的狀態(tài)轉(zhuǎn)移曲線,進(jìn)入下一個狀態(tài)。
3.如權(quán)利要求1所述的擴(kuò)展?fàn)顟B(tài)機(jī)圖及其構(gòu)建的方法,其特征在于,所述狀態(tài)圓圈中的路徑圖的特 征包括: 在路徑上標(biāo)注通過該路徑時對輸入信號和內(nèi)部變量相關(guān)的約束條件,包括與多個信號或多個變量相關(guān)的組合約束條件,并且同一條路徑上相同的約束條件可以合并。根據(jù)設(shè)計中判斷輸出函數(shù)選擇的實際判斷條件的優(yōu)先級高低,從上到下依次排列路徑,優(yōu)先級高的在上面。
4.一種在擴(kuò)展的狀態(tài)機(jī)圖上遍歷的方法,其特征在于包括: 1)計算并保存狀態(tài)機(jī)圖上任意一個狀態(tài)到另一個狀態(tài)中間經(jīng)過的最少狀態(tài)路徑,即任意兩狀態(tài)間的最短路徑。從一個狀態(tài)到另一個狀態(tài),如果是不可達(dá)的,最短路徑則為無限大。進(jìn)入第二步。
2)如果從復(fù)位后的初始狀態(tài)存在到某一個狀態(tài)的最短路徑是不可達(dá),停止該方法,打印狀態(tài)機(jī)設(shè)計錯誤信息,否則進(jìn)入第三步。
3)統(tǒng)計每一個狀態(tài)到其每種下一個狀態(tài)可能通過的路徑圖中的路徑種類。并將種類數(shù)標(biāo)記在該狀態(tài)到其下一狀態(tài)的狀態(tài)轉(zhuǎn)移連線上。
4)創(chuàng)建一條路徑,增加到遍歷路徑集合中,以復(fù)位后的初始狀態(tài)節(jié)點作為起始節(jié)點,進(jìn)入第5步。
5)如果當(dāng)前狀態(tài)節(jié)點到任意下一狀態(tài)節(jié)點存在3步中標(biāo)記的大于零的轉(zhuǎn)移連線,從中選擇一個下一狀態(tài),并選擇一條可以連接到該狀態(tài)轉(zhuǎn)移的輸出函數(shù)的約束路徑通過,在4步中創(chuàng)建的路徑中記錄這個狀態(tài)轉(zhuǎn)移,并將這個轉(zhuǎn)移的連線上標(biāo)記的數(shù)字減一,再以進(jìn)入的下一狀態(tài)節(jié)點作為當(dāng)前節(jié)點,進(jìn)入5步驟。如果當(dāng)前狀態(tài)節(jié)點到任意下一狀態(tài)節(jié)點轉(zhuǎn)移連線上的數(shù)字都為零,則進(jìn)入6步驟。
6)如果狀態(tài)機(jī)圖中所有狀態(tài)之間的轉(zhuǎn)移連線上的數(shù)字都不大于零時,則遍歷完成,停止該方法,打印所有遍歷路徑集合中的路徑。如果狀態(tài)機(jī)圖中狀態(tài)之間的轉(zhuǎn)移連線上的數(shù)字存在大于零的情況時,進(jìn)入步驟7。
7)如果不存在路徑從當(dāng)前狀態(tài)節(jié)點到任何一個標(biāo)記的數(shù)字還大于零的狀態(tài)轉(zhuǎn)移連線的起始狀態(tài)節(jié)點,則進(jìn)入步驟4,建立另一個從復(fù)位動作開始的路徑。如果存在路徑從當(dāng)前狀態(tài)節(jié)點到一個標(biāo)記的數(shù)字還大于零的狀態(tài)轉(zhuǎn)移連線的起始狀態(tài)節(jié)點,從所有滿足該條件的起始狀態(tài)節(jié)點中選擇一個,從步驟I中保存的任意兩個可達(dá)節(jié)點的最短路徑中找到當(dāng)前狀態(tài)節(jié)點到所選大于零的狀態(tài)轉(zhuǎn)移連線的起始狀態(tài)節(jié)點的最短路徑,將該路徑記錄在遍歷路徑中,路徑中經(jīng)歷的連線上的數(shù)字減一。被選擇的大于零的連線的起始狀態(tài)節(jié)點作為當(dāng)前節(jié)點,進(jìn)入步驟5。
5.如權(quán)利要求4所述的遍歷方法,其特征在于: 先確定下一狀態(tài),再確定進(jìn)入該下一狀態(tài)的輸出函數(shù)。
選擇下一狀態(tài)的選擇條件按優(yōu)先級從高到低的排序為:優(yōu)先選擇沒有走過的狀態(tài)轉(zhuǎn)移和狀態(tài)、選擇在當(dāng)前條件下可實現(xiàn)該狀態(tài)轉(zhuǎn)移的、選擇該狀態(tài)轉(zhuǎn)移上標(biāo)記數(shù)字大的、選擇該狀態(tài)轉(zhuǎn)移上已減掉的數(shù)字小的、選擇該狀態(tài)轉(zhuǎn)移上可實現(xiàn)的輸出函數(shù)的種類數(shù)字大的、隨機(jī)選擇。
選擇輸出函數(shù)時,備選輸出函數(shù)集合是連接到選定的下一狀態(tài)的輸出函數(shù)路徑集合。選擇的優(yōu)先級從高到低的排序為:優(yōu)先選擇沒有走過的輸出函數(shù)路徑、選擇當(dāng)前條件下可實現(xiàn)的輸出函數(shù)、選取路徑圖中判斷條件處于較高優(yōu)先級的路徑。
選擇標(biāo)記數(shù)字大于零的狀態(tài)轉(zhuǎn)移連線的起始狀態(tài)節(jié)點時優(yōu)先級從高到低的排序是:優(yōu)先選擇從當(dāng)前狀態(tài)節(jié)點到各大于零的狀態(tài)轉(zhuǎn)移連線的起始狀態(tài)節(jié)點的最短路徑中路徑長度最短的、選擇從該起始狀態(tài)節(jié)點所有狀態(tài)扇出連線上大于零的數(shù)字的總和最大的、選擇從當(dāng)前狀態(tài)節(jié)點到各大于零的狀態(tài)轉(zhuǎn)移連線的起始狀態(tài)節(jié)點的最短路徑中路徑上大于零的數(shù)字的總和最大的,隨機(jī)選擇。
6.如權(quán)利要求4所述的遍歷方法,其特征在于: 記錄遍歷集合中每條路徑經(jīng)過各節(jié)點時狀態(tài)轉(zhuǎn)移的可實現(xiàn)性、選擇的輸出函數(shù)、輸入信號與內(nèi)部變量的約束條件、該輸出函數(shù)對內(nèi)部變量值的影響。需要產(chǎn)生具體輸入信號值時,按照約束條件產(chǎn)生。需要計算輸出信號和內(nèi)部變量時,根據(jù)所選輸出函數(shù)設(shè)計的功能計算輸出信號和內(nèi)部變量。
可實現(xiàn)性的判斷由是否可以產(chǎn)生滿足該路徑選擇中所有約束條件的數(shù)據(jù)為依據(jù) 對于選定的狀態(tài)轉(zhuǎn)移和輸出函數(shù),如果輸入信號的生成不可實現(xiàn),則用符合選定狀態(tài)轉(zhuǎn)移和輸出函數(shù)的內(nèi)部變量值替換當(dāng)時內(nèi)部變量的實際值,生成輸入信號,繼續(xù)向后計算,同時標(biāo)記該狀態(tài)轉(zhuǎn)移的不可實現(xiàn)性。
7.如權(quán)利要求4所述的遍歷方法,其特征在于: 使用在僅對一般狀態(tài)機(jī)圖進(jìn)行遍歷的時候,只需要將所有狀態(tài)轉(zhuǎn)移曲線上的數(shù)字都標(biāo)記為一,并去除輸出函數(shù)選擇部分。
8.一種基于狀態(tài)序列自動產(chǎn)生測試用例的方法,其特征在于包括:1.建立帶約束的激勵包結(jié)構(gòu)。包結(jié)構(gòu)中包含被測設(shè)計的所有輸入信號、存儲被測設(shè)計中傳來內(nèi)部變量的空間、對輸出信號預(yù)測的函數(shù)、產(chǎn)生隨機(jī)信號的約束條件。包在每次例化時,都要通過標(biāo)簽和加載激勵前被測設(shè)計中的內(nèi)部變量值作為參數(shù),對包中產(chǎn)生的輸入信號進(jìn)行約束和選擇。包結(jié)構(gòu)還可以接受對輸出信號的限制。包中所有要產(chǎn)生的輸入信號被定義為位寬一定的隨機(jī)變量,每次例化時根據(jù)約束條件賦予具體的信號值。包中存在一種設(shè)定約束條件的機(jī)制,該機(jī)制包括粗約束和細(xì)約束兩部分,當(dāng)只提供測試序列的狀態(tài)序列信息時只進(jìn)行粗約束,當(dāng)同時提供測試序列的狀態(tài)信息和輸出函數(shù)信息時,先粗約束再細(xì)約束。粗約束根據(jù)表示狀態(tài)轉(zhuǎn)移的標(biāo)簽選擇實現(xiàn)該狀態(tài)轉(zhuǎn)移的約束條件來限制輸入信號,細(xì)約束根據(jù)表示輸出函數(shù)的標(biāo)簽和對輸出值的要求選擇該輸出函數(shù)的約束條件來限制輸入信號。約束中包括對輸入信號、內(nèi)部變量、輸出信號和輸出的內(nèi)部變量的要求。2.在每次對設(shè)計加載激勵時,根據(jù)狀態(tài)轉(zhuǎn)移序列,為激勵包的例化提供狀態(tài)轉(zhuǎn)移標(biāo)簽和輸出函數(shù)標(biāo)簽,并通過驗證平臺中的接口,在例化包前,從設(shè)計中將內(nèi)部變量的值讀出傳入包中,作為影響約束的另一個因素,設(shè)定包中約束條件的選擇。3.如果狀態(tài)序列中保存了每次狀態(tài)轉(zhuǎn)移時的輸入信號值,則直接使用這個保存,建立固定值的激勵包序列,即激勵包序列中的包里每個輸入信號都具有具體值;如果狀態(tài)序列中沒有指明輸入信號的具體值,則根據(jù)狀態(tài)序列的狀態(tài)轉(zhuǎn)移的標(biāo)簽和輸出函數(shù)選擇的標(biāo)簽,建立帶約束的激勵包序列,這種激勵包序列只有在進(jìn)入被驗證的設(shè)計之前才確定輸入信號的具體值;如果狀態(tài)序列中只保存了狀態(tài)節(jié)點沒有記錄輸出函數(shù),此時只能根據(jù)狀態(tài)轉(zhuǎn)移的標(biāo)簽限制輸入信號,完成狀態(tài)轉(zhuǎn)移。4.不插狀態(tài)點將不可實現(xiàn)的激勵包調(diào)整為可實現(xiàn)。
4.1從固定值的激勵包序列的第一個,依次向后搜索每一個包。向后表示作為激勵加載到設(shè)計時,加載的時間更晚的包。
4.2如果固定值的激勵包序列中出現(xiàn)了不可實現(xiàn)的 狀態(tài)轉(zhuǎn)移或輸出函數(shù),這時通過每個包中所選擇的輸出函數(shù)對內(nèi)部變量的影響,向前尋找序列中離該不可實現(xiàn)包最近的且輸出可以影響該不滿足條件的內(nèi)部變量的包。如果找到了,進(jìn)入4.3步驟。如果沒有找到,且4.1步驟的搜索還沒有結(jié)束,進(jìn)入4.1步驟。如果沒找到,且4.1的搜索已經(jīng)結(jié)束,進(jìn)入5步驟。如果固定值的激勵包序列中沒有出現(xiàn)不可實現(xiàn)的狀態(tài)轉(zhuǎn)移或輸出函數(shù),則以固定值的激勵包序列作為測試激勵。
4.3將不可實現(xiàn)包中對內(nèi)部變量的要求,作為對該尋找到的包輸出值的要求,并以從尋找到的包到不可實現(xiàn)包中間的激勵包不能從可實現(xiàn)變?yōu)椴豢蓪崿F(xiàn)為約束條件,重新生成該尋找到的包的輸入信號值。
4.4如果生成成功,用重新生成的新的輸入信號值代替該尋找到的包中原有的輸入信號值,再按照不可實現(xiàn)包中的約束條件,重新生成不可實現(xiàn)包中的輸入信號,并標(biāo)記不可實現(xiàn)包為可實現(xiàn)?;氐?.1步驟。
4.5如果生成不成功,在該尋找到的包的原有約束中增加對該輸出值的要求。
4.5.1如果影響該輸出的因素只有輸入信號,則停止,保持原有不可實現(xiàn)標(biāo)記。如果4.1步驟的搜索還沒有結(jié)束,進(jìn)入4.1步驟。如果4.1步驟的搜索結(jié)束,進(jìn)入5步驟。
4.5.2如果影響該輸出的因素還包括內(nèi)部變量,則以該尋找到的包作為不可實現(xiàn)包,進(jìn)入4.2步驟,向前繼續(xù)尋找,直至尋找完第一個激勵包,如果還是無法生成成功,則結(jié)束。如果可以生成成功,不可實現(xiàn)包將被標(biāo)記為可實現(xiàn)并重新生成。如果4.1步驟的搜索還沒有結(jié)束,進(jìn)入4.1步驟。如果4.1步驟的搜索結(jié)束,進(jìn)入5步驟。 `4.6如果帶約束的激勵包序列中出現(xiàn)了不可實現(xiàn)的狀態(tài)轉(zhuǎn)移或輸出函數(shù),因為約束的激勵包是實時的,不能對以前進(jìn)入設(shè)計的包再修改,所以直接進(jìn)入5步驟。如果沒有出現(xiàn)不可實現(xiàn)的狀態(tài)轉(zhuǎn)移或輸出函數(shù),則正常產(chǎn)生符合約束測試激勵。`5.插狀態(tài)點將不可實現(xiàn)的激勵包調(diào)整為可實現(xiàn)。: ` 5.1對于固定值的激勵包序列,從第一個或當(dāng)前的搜索位置向后搜索不可實現(xiàn)包,將找到的不可實現(xiàn)包輸入5.2步驟。對于帶約束的激勵包序列,輸入為實時激勵產(chǎn)生的不可實現(xiàn)包。如果不存在不可實現(xiàn)包,搜索結(jié)束,測試用例產(chǎn)生完畢,如果存在不可實現(xiàn)包,進(jìn)入`5.2步驟。
`5.2將該不可實現(xiàn)包實現(xiàn)的狀態(tài)轉(zhuǎn)移打斷。
`5.3尋找插入狀態(tài)點的產(chǎn)生方式 `5.3.1如果該狀態(tài)轉(zhuǎn)移的前一個狀態(tài)到它自己本身不存在路徑: 在狀態(tài)轉(zhuǎn)移的打斷處插入一個復(fù)位操作,用寬度優(yōu)先算法,尋找從復(fù)位后的初試狀態(tài)到被打斷的狀態(tài)轉(zhuǎn)移的前一個狀態(tài)的所有路徑,此時不考慮輸出函數(shù)的選擇問題,路徑中間可以出現(xiàn)環(huán)路的重復(fù),較先出現(xiàn)的路徑為距離較短的路徑。進(jìn)入5.4步驟。
`5.3.2如果該狀態(tài)轉(zhuǎn)移的前一個狀態(tài)到它自己本身存在路徑: 用寬度優(yōu)先算法,尋找該狀態(tài)轉(zhuǎn)移的前一個狀態(tài)到它自己本身的所有路徑,此時不考慮輸出函數(shù)的選擇問題,路徑中間可以出現(xiàn)環(huán)路的重復(fù),較先出現(xiàn)的路徑為距離較短的路徑。進(jìn)入5.4步驟。 ` 5.4對先出現(xiàn)的路徑,在路徑最后一個狀態(tài)中,加入原有不可實現(xiàn)包中對內(nèi)部變量的要求作為約束,即用一條環(huán)路路徑的操作來代替一個狀態(tài)點,以滿足對不可實現(xiàn)包中內(nèi)部變量的要求,嘗試生成一個有具體信號值的激勵包序列取代原來的不可實現(xiàn)包,該激勵包序列引起的狀態(tài)轉(zhuǎn)移的路徑插入到被打斷的位置。如果生成不成功,寬度優(yōu)先算法向下繼續(xù)搜索,直到找到為止,如果生成成功,該不可實現(xiàn)包標(biāo)記為可實現(xiàn),然后進(jìn)入5.1步驟。 ` 5.5當(dāng)運(yùn)算時間超過預(yù)期設(shè)定,終止該搜索。報告運(yùn)算超時。
9.權(quán)利要求8所述的測試用例自動產(chǎn)生的方法,其特征在于,插狀態(tài)點實現(xiàn)步驟中,可以通過人工填寫路徑的方式取代寬度優(yōu)先算法的方式產(chǎn)生路徑,再按照路徑上的約束生成固定值的序列包。如果被打斷的狀態(tài)轉(zhuǎn)移的前一個狀態(tài)到它自己本身存在路徑時,也可以插入從復(fù)位后的初試狀態(tài)到前一個狀態(tài)的路徑。
10.權(quán)利要求8所述的測試用例自動產(chǎn)生的方法,其特征在于,對輸入信號、輸出信號、內(nèi)部變量,建立臨時存儲空間,該存儲空間采集當(dāng)前周期的輸入信號、執(zhí)行后的輸出信號和內(nèi)部變量值。在帶約束的激勵包例化產(chǎn)生下一周期輸入信號的具體值時,預(yù)測執(zhí)行后的輸出信號和內(nèi)部變量值,給予一個最低優(yōu)先級的約束,該約束條件為使存儲中表示的二進(jìn)制位發(fā)生盡可能多的跳轉(zhuǎn)變換,即0變1,I變O。所謂最低優(yōu)先級的約束,即如果該約束使在原有約束條件下本可以產(chǎn)生的輸入信號不可以產(chǎn)生,則放棄該約束條件。
全文摘要
本發(fā)明公開了一種擴(kuò)展?fàn)顟B(tài)機(jī)圖的結(jié)構(gòu)和構(gòu)建方法,以及在其上實現(xiàn)遍歷的方法,還公開了根據(jù)遍歷結(jié)果產(chǎn)生測試用例的方法。該擴(kuò)展?fàn)顟B(tài)機(jī)圖對分析覆蓋率有很好的幫助。遍歷方法簡單實用,可以產(chǎn)生狀態(tài)序列、狀態(tài)轉(zhuǎn)移時選取的輸出函數(shù)、使?fàn)顟B(tài)轉(zhuǎn)移發(fā)生的測試激勵包的約束標(biāo)簽或其中產(chǎn)生的具體輸入信號值。測試用例產(chǎn)生方法,可以根據(jù)遍歷結(jié)果的不同形式,包括固定值的激勵包、帶約束的激勵包、帶不可實現(xiàn)標(biāo)記的激勵包,完成測試用例的產(chǎn)生,實現(xiàn)對更多覆蓋率指標(biāo)的高覆蓋效果。測試用例的產(chǎn)生過程,可以接受人工的指導(dǎo)來減少運(yùn)算量。該套方法對邊角情況的自動驗證非常有效,減低了驗證工程師制造邊角情況場景和測試用例的成本。
文檔編號G06F11/36GK103198012SQ201310034738
公開日2013年7月10日 申請日期2013年4月25日 優(yōu)先權(quán)日2013年4月25日
發(fā)明者謝崢, 羅永貴, 宋建龍, 伍國斌, 李姮樂 申請人:李姮樂