專利名稱:程序測試系統(tǒng)及方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種程序測試系統(tǒng)及方法,特別涉及一種依據(jù)目前狀態(tài)(Current State)以及狀態(tài)變遷表(State Transition Table),產(chǎn)生一有效待測事件的程序測試系統(tǒng)及方法。
背景技術(shù):
隨著信息科技的進(jìn)步,人類的生活迅速邁入信息化、E化的時(shí)代,時(shí)至今日,在日常生活中已不能一日無信息科技。而推動及支撐信息科技發(fā)展的助力及基礎(chǔ)主要有二一為信息基礎(chǔ)建設(shè)的普及及硬件效能的提升,另一則為軟件技術(shù)的發(fā)展。信息基礎(chǔ)建設(shè)的普及及硬件效能的提升使信息科技的適用范圍及層面更加擴(kuò)大,并使復(fù)雜且硬件需求日益龐大的應(yīng)用成為可能;而軟件技術(shù)的發(fā)展則奠基于其上,并且還進(jìn)一步實(shí)現(xiàn)了每一個(gè)信息科技使用者的希冀及理想。
軟件開發(fā)的過程主要有系統(tǒng)分析、系統(tǒng)設(shè)計(jì)、程序撰寫,測試除錯、后續(xù)維護(hù)更新等,每一個(gè)環(huán)節(jié)缺一不可。而其中測試除錯還為軟件開發(fā)過程后段中重要的工作,一個(gè)程序是否能夠正常的執(zhí)行及其效能良好與否,除了程序撰寫時(shí)的投入之外,端賴是否能夠以一快速且周延的測試方法,有效針對程序的每一個(gè)狀態(tài)及其個(gè)別事件進(jìn)行測試,以驗(yàn)收程序是否如分析設(shè)計(jì)的初的規(guī)劃,正確的處理使用者的操作。
現(xiàn)有的測試方法,大部分采用「暴力測試法」,而所謂的「暴力測試法」便是隨機(jī)選取一事件,并利用隨機(jī)數(shù)產(chǎn)生器產(chǎn)生畫面上的任一坐標(biāo)后,將事件及坐標(biāo)一并送入待測程序,以考驗(yàn)待測程序的處理能力,其所憑借的是效能較佳的硬件,希望能通過大規(guī)模的測試,找出程序設(shè)計(jì)撰寫時(shí)疏漏的地方。此種測試方法的缺點(diǎn)為硬件需求較為嚴(yán)格,且所需的測試時(shí)間較長,此外,由于事件是由隨機(jī)數(shù)所產(chǎn)生,因此前后產(chǎn)生的事件種類之間并不具關(guān)連性,往往無法測試到某些狀況,此種情形在測試人機(jī)接口程序時(shí)尤為明顯,因此造成測試并無法達(dá)到預(yù)期的效果,而經(jīng)測試的程序仍隱藏許多未知的錯誤。
因此,如上所述,如何在一般效能的硬件下,快速且系統(tǒng)化地測試待測程序,且完整覆蓋所有可能發(fā)生的情形,以有效完成測試的工作,實(shí)是當(dāng)前亟待解決的課題。
發(fā)明內(nèi)容
針對上述問題,本發(fā)明的目的是提供一種程序測試系統(tǒng)及方法,其可依據(jù)目前狀態(tài)(Current State)以及狀態(tài)變遷表(State TransitionTable),產(chǎn)生一有效待測事件,以測試待測程序。
為達(dá)上述目的,本發(fā)明的程序測試系統(tǒng)主要包括一事件表(EventList)、一隨機(jī)選取器以及一狀態(tài)機(jī)器(State Machine)。事件表記錄了待測程序能夠處理的事件,隨機(jī)選取器則隨機(jī)自事件表選取一待測事件。狀態(tài)機(jī)器依據(jù)待測程序的目前狀態(tài)以及狀態(tài)變遷表內(nèi)容,判斷待測事件相對于目前狀態(tài)是否為有效。當(dāng)狀態(tài)機(jī)器判斷待測事件相對于目前狀態(tài)為有效時(shí),程序測試系統(tǒng)即依判斷結(jié)果,以一有效待測事件測試待測程序。
狀態(tài)變遷表記錄了各狀態(tài)及各事件的對應(yīng)關(guān)系。在本發(fā)明的一實(shí)施例中,當(dāng)待測事件相對于目前狀態(tài)為有效時(shí),坐標(biāo)產(chǎn)生器即依據(jù)目前狀態(tài)相對應(yīng)的使用者介面,輸出產(chǎn)生有效待測事件所需的坐標(biāo),使一事件產(chǎn)生器能夠依此坐標(biāo)產(chǎn)生出有效待測事件。
狀態(tài)變遷表可還記錄各個(gè)狀態(tài)的下一狀態(tài)。如此,狀態(tài)機(jī)器即可依據(jù)狀態(tài)變遷表,在待測程序處理有效待測事件完畢后,將下一狀態(tài)設(shè)定為目前狀態(tài)。此外,狀態(tài)機(jī)器亦可依據(jù)待測程序執(zhí)行有效待測事件的結(jié)果來更新目前狀態(tài)。
本發(fā)明還提供一種程序測試方法,其測試一待測程序,該待測程序包含多個(gè)狀態(tài),且能夠處理多個(gè)事件,該程序測試方法包含自一記錄該事件的事件表中隨機(jī)選取該待測事件;依據(jù)該待測程序的一目前狀態(tài)以及一狀態(tài)變遷表,判斷一待測事件相對于該目前狀態(tài)是否為有效,其中該狀態(tài)變遷表記錄該狀態(tài)及該事件之一對應(yīng)關(guān)系;以及依據(jù)該狀態(tài)機(jī)器的判斷結(jié)果以一有效待測事件測試該待測程序。
由于依本發(fā)明的程序測試系統(tǒng)及方法是依據(jù)目前狀態(tài)及狀態(tài)變遷表,判斷所選取的待測事件是否為有效待測事件,故在測試過程中所實(shí)際執(zhí)行測試的事件皆為有效事件,大幅減少測試無效事件的次數(shù)及所需的時(shí)間。又,由于其應(yīng)用了狀態(tài)變遷表,故前后產(chǎn)生的有效待測事件之間皆具關(guān)連性,因此可以快速且系統(tǒng)化地測試待測程序,并完整覆蓋所有可能發(fā)生的情形,有效地完成測試工作。
下面結(jié)合附圖及實(shí)施例對本發(fā)明進(jìn)行詳細(xì)說明圖1為一結(jié)構(gòu)圖,顯示依本發(fā)明較佳實(shí)施例的程序測試系統(tǒng)的結(jié)構(gòu);圖2a為一示意圖,顯示依本發(fā)明較佳實(shí)施例的例示的使用者介面(狀態(tài))及其對象;圖2b為一示意圖,顯示依本發(fā)明較佳實(shí)施例的事件表的例示欄位及其內(nèi)容;圖3為一示意圖,顯示依本發(fā)明較佳實(shí)施例的狀態(tài)變遷表的例示欄位及其內(nèi)容;圖4為一示意圖,顯示依本發(fā)明較佳實(shí)施例的例示的使用者介面中的對象坐標(biāo);圖5為一流程圖,顯示依本發(fā)明較佳實(shí)施例的程序測試方法的步驟。
圖中符號說明1 待測程序2 程序測試系統(tǒng)21事件表22隨機(jī)選取器23狀態(tài)機(jī)器231 狀態(tài)變遷表24事件產(chǎn)生器25坐標(biāo)產(chǎn)生器S501~S507程序測試方法的步驟
具體實(shí)施例方式
以下將參照相關(guān)附圖,說明本發(fā)明較佳實(shí)施例的程序測試系統(tǒng)及方法,其中相同的元件將以相同的符號加以說明。
請參照圖1所示,本發(fā)明較佳實(shí)施例的程序測試系統(tǒng)2是測試一待測程序1,待測程序1包含多個(gè)狀態(tài),且能夠處理多個(gè)事件。程序測試系統(tǒng)2包含一事件表(Event List)21,其記錄待測程序1能夠處理的事件;一隨機(jī)選取器22,其隨機(jī)選取事件表21中的事件之一為一待測事件;一狀態(tài)機(jī)器(State Machine)23,其依據(jù)待測程序1的目前狀態(tài)(Current State)以及一狀態(tài)變遷表(State Transition Table)231,判斷待測事件相對于目前狀態(tài)是否為一有效待測事件;以及一事件產(chǎn)生器(Event Generator)24,其依據(jù)狀態(tài)機(jī)器23的判斷結(jié)果產(chǎn)生有效待測事件。此外,程序測試系統(tǒng)2尚包含一坐標(biāo)產(chǎn)生器25,其依據(jù)目前狀態(tài)相對應(yīng)的一使用者介面,輸出產(chǎn)生有效待測事件所需的坐標(biāo)。
請參照圖2a所示,狀態(tài)一、狀態(tài)二及狀態(tài)三為待測程序1中的三個(gè)例示狀態(tài),使用者介面一、使用者介面二及使用者介面三分別為其相對應(yīng)的顯示畫面。其中使用者介面一包含二對象(Object),分別為TextBox1及Button1,使用者介面二包含三對象,分別為Label1、Button2及Button3,同樣的,使用者介面三包含三對象,分別為ListBox1、Button4及Button5。
請同時(shí)參照圖2b所示,事件表21包含二欄位,分別為事件識別碼Event ID及事件Event,其中事件001為「State1_TextBox1_Change」,代表狀態(tài)一相對應(yīng)的使用者介面一中的TextBox1的內(nèi)容改變,事件002為「State1_Button1_Click」,代表按壓狀態(tài)一相對應(yīng)的使用者介面一中的Button1,同理,事件003「State2_Button2_Click」代表按壓狀態(tài)二相對應(yīng)的使用者介面二中的Button2,事件004「State2_Button3_Click」代表按壓狀態(tài)二相對應(yīng)的使用者介面二中的Button3,依此類推。
需注意的是,在本實(shí)施例中,相同種類而作用于不同對象的事件視為不相同。如上所述,同樣為按壓Button事件,分別作用于不同狀態(tài)之下的不同對象如Button1及Button2,視為不同的事件,具有不同的事件識別碼002及003;即便是作用于相同狀態(tài)底下的不同對象如Button2及Button3,亦視為不同的事件,具有不同的事件識別碼003及004。此外,圖2b的事件表21僅為一例示格式,能夠記錄待測程序1的事件的任何其它格式或數(shù)據(jù)結(jié)構(gòu)均可使用。
請參照圖3所示,狀態(tài)變遷表231是記錄各狀態(tài)及各事件的對應(yīng)關(guān)系。以事件002為例,對應(yīng)至狀態(tài)一時(shí),將傳送TextBox1的資料,并改變目前狀態(tài)至狀態(tài)二;對應(yīng)至狀態(tài)二及狀態(tài)三時(shí),則為一NULL值,即為一無效事件。此外,各狀態(tài)及各事件的對應(yīng)關(guān)系可僅為「改變目前狀態(tài)」,如事件004對應(yīng)至狀態(tài)二,或僅為「執(zhí)行某動作」,如事件005對應(yīng)至狀態(tài)三等。
需注意的是,如同前述的事件表21,狀態(tài)變遷表231僅為一例示格式,能夠記錄各狀態(tài)及各事件的一對應(yīng)關(guān)系的任何其它格式或數(shù)據(jù)結(jié)構(gòu)均可使用。
請參照圖1所示,前述事件產(chǎn)生器24依據(jù)狀態(tài)機(jī)器23的判斷結(jié)果產(chǎn)生有效待測事件時(shí),尚需接收坐標(biāo)產(chǎn)生器25依據(jù)目前狀態(tài)所對應(yīng)的使用者介面,所輸出的產(chǎn)生有效待測事件所需的坐標(biāo)。請參照圖4所示,對應(yīng)至狀態(tài)一的使用者介面一中的Button1,其四個(gè)頂點(diǎn)的坐標(biāo)分別為(200,360)、(200,560)、(400,360)及(400,560),在目前狀態(tài)為狀態(tài)一時(shí),欲產(chǎn)生一有效待測事件「按壓Button1」,即「State1_Button1_Click」時(shí),坐標(biāo)產(chǎn)生器25即依據(jù)使用者介面一,輸出一位于(200,360)、(200,560)、(400,360)及(400,560)中的坐標(biāo)至事件產(chǎn)生器24,以產(chǎn)生有效待測事件。
為使本發(fā)明的內(nèi)容容易理解,以下將舉一實(shí)例,說明依本發(fā)明較佳實(shí)施例的程序測試方法的流程。
請參照圖5所示,本發(fā)明較佳實(shí)施例的程序測試方法的步驟包含自事件表21中隨機(jī)選取一待測事件(S501),接著狀態(tài)機(jī)器23依據(jù)待測程序1的目前狀態(tài)以及一狀態(tài)變遷表231,判斷待測事件相對于目前狀態(tài)是否為一有效待測事件(S502),如果否,則回到S501,重新隨機(jī)選取一待測事件再行判斷,如果是,則由坐標(biāo)產(chǎn)生器25依據(jù)目前狀態(tài)所對應(yīng)的使用者介面,輸出產(chǎn)生有效待測事件所需的坐標(biāo)(S503),并傳送至事件產(chǎn)生器24以產(chǎn)生有效待測事件(S504),同時(shí),如果狀態(tài)變遷表231所記錄的對應(yīng)關(guān)系包含改變目前狀態(tài),則狀態(tài)機(jī)器23還依據(jù)記錄內(nèi)容,將目前狀態(tài)及有效待測事件所對應(yīng)的下一狀態(tài)設(shè)定為目前狀態(tài)(S505),并在待測程序1執(zhí)行有效待測事件后,接收其反饋(S506),如果其中包含改變目前狀態(tài)的信息時(shí),則依據(jù)反饋內(nèi)容更新目前狀態(tài),最后,再檢查測試程序是否結(jié)束(S507),如果否,則回到S501,依據(jù)上述步驟繼續(xù)測試,如果是,則結(jié)束測試。
綜上所述,本發(fā)明的程序測試系統(tǒng)及方法是依據(jù)目前狀態(tài)及狀態(tài)變遷表,判斷所選取的待測事件是否為有效待測事件。所以,在測試時(shí)所實(shí)際執(zhí)行測試的事件皆為有效事件,大幅減少了測試無效事件的次數(shù)及所需的時(shí)間。又,由于其應(yīng)用狀態(tài)變遷表,故前后產(chǎn)生的有效待測事件之間皆具關(guān)連性,因此本發(fā)明的程序測試系統(tǒng)及方法可以快速且系統(tǒng)化地測試待測程序,并完整覆蓋所有可能發(fā)生的情形,有效地完成測試工作。
需注意的是,本領(lǐng)域技術(shù)人員可對其進(jìn)行等效的修改與變更,而不超出本發(fā)明的精神與范疇。例如,事件表中可直接儲存各個(gè)狀態(tài)下有效事件的坐標(biāo),如此即不需參照目前狀態(tài)所對應(yīng)的使用者介面,輸出產(chǎn)生有效待測事件所需的坐標(biāo)以得到有效事件。然而,如此事件表的資料量將相對較為龐大。本領(lǐng)域技術(shù)人員可視情況與實(shí)際的需要,選擇所需的實(shí)施方式。
此外,在上述的實(shí)施例中,相同種類而作用于不同對象的事件視為不相同。然而,若視為相同,藉由等效地修改事件表與狀態(tài)變遷表中的資料內(nèi)容,并配合事件產(chǎn)生器,仍可產(chǎn)生出目前狀態(tài)下的有效待測事件。
因此,以上所述僅為舉例性,而非為限制性。任何未脫離本發(fā)明的精神與范疇,而對其進(jìn)行的等效修改或變更,均應(yīng)包含于本專利的保護(hù)范圍中。
權(quán)利要求
1.一種程序測試系統(tǒng),其測試一待測程序,該待測程序包含多個(gè)狀態(tài),且能夠處理多個(gè)事件,該程序測試系統(tǒng)包含一事件表,其記錄該待測程序能夠處理的事件;一隨機(jī)選取器,其隨機(jī)自該事件表選取一待測事件;以及一狀態(tài)機(jī)器,其依據(jù)該待測程序的目前狀態(tài)以及一狀態(tài)變遷表,判斷該待測事件相對于該目前狀態(tài)是否為有效,其中該狀態(tài)變遷表記錄該狀態(tài)及該事件的一對應(yīng)關(guān)系,且當(dāng)該狀態(tài)機(jī)器判斷待測事件相對于目前狀態(tài)為有效時(shí),該程序測試系統(tǒng)即依判斷結(jié)果以一有效待測事件測試該待測程序。
2.根據(jù)權(quán)利要求1所述的程序測試系統(tǒng),其特征在于還包含一事件產(chǎn)生器,其依據(jù)該狀態(tài)機(jī)器的判斷結(jié)果產(chǎn)生該有效待測事件。
3.根據(jù)權(quán)利要求2所述的程序測試系統(tǒng),其特征在于還包含一坐標(biāo)產(chǎn)生器,其依據(jù)該目前狀態(tài)相對應(yīng)的一使用者介面,輸出該事件產(chǎn)生器產(chǎn)生該有效待測事件所需的一坐標(biāo)。
4.根據(jù)權(quán)利要求1所述的程序測試系統(tǒng),其特征在于該對應(yīng)關(guān)系還包含一下一狀態(tài),且該下一狀態(tài)為該狀態(tài)之一。
5.根據(jù)權(quán)利要求4所述的程序測試系統(tǒng),其特征在于該狀態(tài)機(jī)器還依據(jù)目前狀態(tài)及有效待測事件,將該狀態(tài)變遷表中相對應(yīng)的下一狀態(tài)設(shè)定為目前狀態(tài)。
6.根據(jù)權(quán)利要求1所述的程序測試系統(tǒng),其特征在于該狀態(tài)機(jī)器還依據(jù)該待測程序執(zhí)行有效待測事件的結(jié)果,更新目前狀態(tài)。
7.一種程序測試方法,其測試一待測程序,該待測程序包含多個(gè)狀態(tài),且能夠處理多個(gè)事件,該程序測試方法包含自一記錄該事件的事件表中隨機(jī)選取待測事件;依據(jù)該待測程序的目前狀態(tài)以及一狀態(tài)變遷表,判斷一待測事件相對于目前狀態(tài)是否為有效,其中該狀態(tài)變遷表記錄該狀態(tài)及該事件的一對應(yīng)關(guān)系;以及依據(jù)該狀態(tài)機(jī)器的判斷結(jié)果以一有效待測事件測試待測程序。
8.根據(jù)權(quán)利要求7所述的程序測試方法,其特征在于還包含產(chǎn)生該有效待測事件。
9.根據(jù)權(quán)利要求8所述的程序測試方法,其特征在于還包含依據(jù)該目前狀態(tài)相對應(yīng)的使用者介面,輸出產(chǎn)生該有效待測事件所需的坐標(biāo)。
10.根據(jù)權(quán)利要求7所述的程序測試方法,其特征在于該對應(yīng)關(guān)系還包含一下一狀態(tài),且該下一狀態(tài)為該狀態(tài)之一。
11.根據(jù)權(quán)利要求10所述的程序測試方法,其特征在于還包含依據(jù)該目前狀態(tài)及該有效待測事件,將該狀態(tài)變遷表中相對應(yīng)的下一狀態(tài)設(shè)定為目前狀態(tài)。
12.根據(jù)權(quán)利要求7所述的程序測試方法,其特征在于該狀態(tài)機(jī)器還依據(jù)待測程序執(zhí)行有效待測事件的結(jié)果,更新目前狀態(tài)。
13.一種計(jì)算機(jī)可讀取記錄媒體,其記錄了一計(jì)算機(jī)在加載后,能夠執(zhí)行下列程序的程序代碼自一記錄該事件的事件表中隨機(jī)選取待測事件;依據(jù)該待測程序的目前狀態(tài)以及一狀態(tài)變遷表,判斷一待測事件相對于目前狀態(tài)是否為有效,其中該狀態(tài)變遷表記錄該狀態(tài)及該事件的一對應(yīng)關(guān)系;以及依據(jù)該狀態(tài)機(jī)器的判斷結(jié)果以一有效待測事件測試待測程序。
14.根據(jù)權(quán)利要求13所述的計(jì)算機(jī)可讀取記錄媒體,其特征在于該計(jì)算機(jī)在加載該程序代碼后,還執(zhí)行下列程序依據(jù)該目前狀態(tài)相對應(yīng)的一使用者介面,輸出產(chǎn)生一有效待測事件所需的坐標(biāo),以產(chǎn)生該有效待測事件。
15.根據(jù)權(quán)利要求13所述的計(jì)算機(jī)可讀取記錄媒體,其特征在于該計(jì)算機(jī)在加載程序代碼后,還執(zhí)行下列程序依據(jù)該目前狀態(tài)及有效待測事件,將該狀態(tài)變遷表中目前狀態(tài)所對應(yīng)的下一狀態(tài)設(shè)定為目前狀態(tài)。
16.根據(jù)權(quán)利要求13所述的計(jì)算機(jī)可讀取記錄媒體,其特征在于該計(jì)算機(jī)在加載程序代碼后,還執(zhí)行下列程序依據(jù)該待測程序執(zhí)行有效待測事件的結(jié)果,更新目前狀態(tài)。
全文摘要
一種程序測試系統(tǒng),其包括事件表、隨機(jī)選取器及狀態(tài)機(jī)器。事件表記錄了待測程序能夠處理的事件,隨機(jī)選取器隨機(jī)選取一待測事件。狀態(tài)機(jī)器依待測程序目前狀態(tài)及狀態(tài)變遷表內(nèi)容,判斷待測事件相對目前狀態(tài)是否為有效。狀態(tài)機(jī)器判斷待測事件有效時(shí),程序測試系統(tǒng)即依判斷結(jié)果,以有效待測事件測試待測程序。本發(fā)明亦揭露了一種程序測試方法。本發(fā)明是依目前狀態(tài)及狀態(tài)變遷表,判斷選取的待測事件是否為有效待測事件,故測試過程中實(shí)際執(zhí)行測試的事件皆為有效事件,大幅減少測試的次數(shù)及時(shí)間。由于其應(yīng)用了狀態(tài)變遷表,故產(chǎn)生的有效待測事件間具關(guān)連性,可以快速且系統(tǒng)化地測試待測程序,完整覆蓋所有可能發(fā)生的情形,有效完成測試工作。
文檔編號G06F11/36GK1431598SQ0210164
公開日2003年7月23日 申請日期2002年1月11日 優(yōu)先權(quán)日2002年1月11日
發(fā)明者林潤生 申請人:互慧科技股份有限公司