專利名稱:一種軟件產(chǎn)品健壯性的測試方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及軟件產(chǎn)品可靠性驗證技術(shù),特別是涉及一種軟件產(chǎn)品健壯性的測試方法及裝置。
背景技術(shù):
隨著信息技術(shù)的發(fā)展,軟件產(chǎn)品的應用日益廣泛,影響著人們的工作、學習和生活等諸多領(lǐng)域,而軟件產(chǎn)品在設計或運行時,需要對其應用可靠性進行測試,以便進行針對性的改善,例如,對軟件產(chǎn)品的健壯性的測試。對軟件產(chǎn)品的測試通常包括對軟件系統(tǒng)或軟件組件的測試,所謂軟件組件是指具有獨立接口,能完成一定功能的軟件模塊。
軟件健壯性是軟件系統(tǒng)或組件在異常輸入或壓力環(huán)境條件下正常運行的程度。健壯性測試就是制造、模擬異常輸入或環(huán)境來驗證軟件系統(tǒng)或組件運行的健壯性。
軟件健壯性測試隨著軟件測試概念的發(fā)展,從最早白盒、灰盒測試,發(fā)展到目前的黑盒測試(白盒測試是指根據(jù)被測程序的內(nèi)部結(jié)構(gòu)設計測試用例的一種測試方法;灰盒測試介于白盒與黑盒測試之間,關(guān)注函數(shù)或模塊間的測試用例的實現(xiàn);黑盒測試則基于規(guī)格說明書的分析去選擇測試用例,且不考慮其內(nèi)部實現(xiàn));測試對象也從原來的函數(shù)、模塊,擴展到軟件系統(tǒng)、組件;但測試的思想、概念并沒有太大變化。隨著被測軟件可靠性要求不斷地提高,促使測試技術(shù)需要不斷地發(fā)展,對健壯性測試的效果、效率也提出了更高的要求。
請參閱圖1,是現(xiàn)有技術(shù)中一種人工實現(xiàn)軟件組件健壯性黑盒測試方法的示意。被測模塊包括若干API(Application Progress Interface,應用程序接口)函數(shù),其中函數(shù)API_n(intn)的n值的合法取值范圍為n<0或者n>10。在進行測試前,由測試人員構(gòu)造測試用例test_API_n(),根據(jù)對被測函數(shù)的分析,取0-10之間的非法隨機值作為輸入,對被測函數(shù)進行異常取值注入;隨后,在測試環(huán)境中調(diào)用該測試用例進行軟件健壯性測試;并監(jiān)測被測系統(tǒng)運行狀態(tài),不斷更正、驗證測試設計。
該方法的缺陷在于人員參與測試用例的設計、構(gòu)造程度較高,對人員素質(zhì)、工作量等也有較高要求,整個測試中前期設計、構(gòu)造花費大量時間和人力成本。特別在涉及測試用例更改、移置中會出現(xiàn)較多問題,如不同人員的設計經(jīng)驗會對測試用例的理解產(chǎn)生偏差,因此在測試用例的設計、更改、移置上會存在測試用例完備、可用性、可維護性等問題;測試用例代碼量大,會造成設計、更改、移置的難度增加,不便于調(diào)測;測試用例的設計、更改、移置,也會給問題定位帶來影響。
總之,采用該方法進行測試用例的設計、構(gòu)造,需要人工的方式編寫測試數(shù)據(jù)及測試用例,必然會造成測試數(shù)據(jù)不能共享、測試代碼重復編寫、測試效率降低、代碼可移置性變差、用例維護管理難的問題,最終導致上述工作的重復性。
另一種軟件健壯性測試的現(xiàn)有技術(shù)可以參閱CMU(卡內(nèi)基梅隆大學,CARNEGIE MELLON UNIVERSITY)的一篇名為《HIGH PERFORMANCEROBUST COMPUTER SYSTEMS》的論文。該論文揭示了一種針對軟件組件API接口異常輸入的健壯性測試工具Ballista測試工具。
參照圖2,該工具提供數(shù)據(jù)類型描述摸板,將被測函數(shù)中的參數(shù)進行分類,如文件類、內(nèi)存類、取值類等,并在每種類中用不同的符號代表其取值,每個符號都是取值方式的一種定義(類似于函數(shù)或宏)。
在測試過程中,將測試對象API(write(……)函數(shù))按照數(shù)據(jù)類型描述摸板轉(zhuǎn)換為參數(shù)類型,工具構(gòu)造測試用例(代碼)時,根據(jù)用戶從數(shù)據(jù)類型描述摸板取用的符號構(gòu)造各參數(shù)的取值。如圖2的實例中箭頭所指的三種符號分別是FD_OPEN_RD、BUFF_NULL、SIZE_16,分別表示參數(shù)1取用一個可讀寫的打開文件句柄;參數(shù)2取用一個空指針;參數(shù)3取用數(shù)值16。最后的測試用例為write(FD_OPEN_RD、BUFF_NULL、SIZE_16)。也就是說,工具在構(gòu)造測試用例(代碼)時,會根據(jù)所選用的符號為被測函數(shù)構(gòu)造出測試環(huán)境及取值。
相對于圖1所示的傳統(tǒng)的黑盒測試方法,該Ballista測試工具用數(shù)據(jù)類型描述模板、數(shù)據(jù)類型來定義描述測試對象及數(shù)據(jù),進而生成測試用例,一定程度上避免了健壯性測試數(shù)據(jù)的重復構(gòu)造,實現(xiàn)了不同函數(shù)間測試數(shù)據(jù)的共享,達到了測試用例的自動生成。具體說,用類的概念來管理數(shù)據(jù)類型,使數(shù)據(jù)類型具有可繼承性、可擴展性,便于對數(shù)據(jù)類型的維護管理;用數(shù)據(jù)類型來管理測試數(shù)據(jù),測試用例不依賴被測函數(shù)的功能,而是函數(shù)使用的不同數(shù)據(jù)類型在工具中取值的組合;該工具以數(shù)據(jù)類型及模板構(gòu)造測試對象及取值,即通過不同標識符,構(gòu)造測試環(huán)境,完成測試取值,從而實現(xiàn)健壯性測試數(shù)據(jù)共享,達到測試用例的自動生成。
但是該Ballista測試工具仍然脫離不了傳統(tǒng)人工參與測試用例設計的復雜過程,需要按工具提供的模板來描述相關(guān)的數(shù)據(jù)類型及取值(如,需要用戶用工具提供的數(shù)據(jù)類型描述模板,來定義說明工具中沒有的新類型取值方法或補充已有類型的取值,以便測試用),因此仍舊無法避免傳統(tǒng)測試用例設計中遇到的一些問題。并且,帶來了一些新的問題首先,數(shù)據(jù)類型及模板描述,限制了用戶使用。雖然工具提供一些基本類型,但無法解決大量新的數(shù)據(jù)結(jié)構(gòu)測試需要。對于這樣的數(shù)據(jù),用戶需要用模板來描述新數(shù)據(jù)類型的構(gòu)造方法及取值,工作量大,要求高。
其次,測試數(shù)據(jù)范圍有限。用數(shù)據(jù)類型來管理測試數(shù)據(jù),為工具自動化生成測試用例帶來了方便,同時也限制了數(shù)據(jù)本身的使用范圍,使得測試僵化,測試數(shù)據(jù)不合理等,造成測試的不充分。
再次,測試數(shù)據(jù)重用性有限。被測對象接口參數(shù),復雜多變,形式多樣,用類型模板描述某種類型,往往不能完全表達測試對象的意義,即便被描述了,也會因為使用環(huán)境等因素導致其重用性下降。
第四,測試深度不足。數(shù)據(jù)結(jié)構(gòu)的內(nèi)部定義的復雜、多樣性,使模板對結(jié)構(gòu)內(nèi)部成員域的描述變的復雜多變,也使工具數(shù)據(jù)類型模板對測試數(shù)據(jù)的構(gòu)造變得不太可能,無法滿足復雜結(jié)構(gòu)大量內(nèi)部成員域的測試。
第五,大量數(shù)據(jù)類型的情況下,不便于維護。在使用中數(shù)據(jù)類型及數(shù)據(jù)會不斷增加,而數(shù)據(jù)類型及數(shù)據(jù)是通過模板描述出來的(類似于編碼),因此會造成后期維護上的問題。
最后,測試數(shù)據(jù)缺少靈活性。數(shù)據(jù)類型定義出的測試取值,要在工具模板中給出說明,這樣對用戶及工具來說就不能隨意改動或產(chǎn)生出需要的數(shù)據(jù),造成取值上不靈活,增加操作難度。
發(fā)明內(nèi)容
本發(fā)明解決的技術(shù)問題是提供一種軟件產(chǎn)品健壯性的測試方法及裝置,可以實現(xiàn)對被測對象測試信息的自動生成和自動提取,避免對測試信息人工描述構(gòu)造的過程,進而實現(xiàn)測試用例(測試代碼)的自動生成。
為此,本發(fā)明解決技術(shù)問題的技術(shù)方案是提供一種軟件產(chǎn)品健壯性的測試方法,包括步驟1)解析被測對象,從所述被測對象中提取測試信息;2)顯示所述提取的測試信息,接收用戶的測試信息輸入;3)根據(jù)前述提取的測試信息和測試信息輸入,生成測試用例;4)結(jié)合所述測試用例與被測對象,生成測試目標代碼;5)運行所述測試目標代碼,實現(xiàn)軟件產(chǎn)品健壯性的測試。
優(yōu)選地,所述步驟1)中的提取過程具體是通過語法解析器對被測對象進行編譯和語法分析,將得到的語法分析結(jié)果轉(zhuǎn)換為測試信息;所述測試信息包括數(shù)據(jù)類型及其層次結(jié)構(gòu)。
優(yōu)選地,所述步驟1)中,還包括數(shù)據(jù)類型庫提供基類測試信息支持,所述基類測試信息包括基本類型識別和取值。
優(yōu)選地,所述步驟2)中的顯示和接收過程通過圖形用戶接口實現(xiàn);所述測試信息輸入包括是否測試、測試類型、測試方式和測試數(shù)據(jù)。
優(yōu)選地,所述步驟3)的生成測試用例具體包括31)對前述提取的測試信息和測試信息輸入進行信息預處理,生成測試信息表項和接口,所述測試信息表項包括測試信息轉(zhuǎn)換表和取值表;32)針對復雜數(shù)據(jù)類型的測試信息生成構(gòu)造函數(shù);33)完成測試信息的取值構(gòu)造,生成測試代碼。
優(yōu)選地,所述步驟3)中,還包括數(shù)據(jù)類型庫提供基類測試信息、測試數(shù)據(jù)。
優(yōu)選地,所述步驟5)的運行過程具體包括
51)完成測試系統(tǒng)的初始化及對外測試控制接口的注冊,測試控制任務、測試執(zhí)行任務的創(chuàng)建啟動;52)按預定要求對已注冊的測試用例進行調(diào)用,監(jiān)控測試過程行為,記錄測試過程數(shù)據(jù);53)記錄控制信息、測試信息和測試數(shù)據(jù)。
優(yōu)選地,所述步驟5)的運行過程還包括動態(tài)查詢測試信息數(shù)據(jù)。
本發(fā)明還提供一種軟件產(chǎn)品健壯性的測試裝置,包括測試信息解析提取單元,用于解析被測對象,從所述被測對象中提取測試信息;用戶測試信息輸入單元,用于顯示所述提取的測試信息,相應接收用戶的測試信息輸入;測試用例產(chǎn)生單元,用于根據(jù)前述提取的測試信息和測試信息輸入,生成測試用例;目標代碼執(zhí)行單元,用于結(jié)合所述測試用例與被測對象,生成測試目標代碼;以及運行所述測試目標代碼,實現(xiàn)軟件產(chǎn)品健壯性的測試;數(shù)據(jù)類型庫,用于存儲基類測試信息、測試數(shù)據(jù),為測試用例的生成和運行提供測試數(shù)據(jù)支持和基本類型識別信息服務。
優(yōu)選地,所述測試用例產(chǎn)生單元包括測試信息預處理單元,用于結(jié)合提取的測試信息以及用戶的測試信息輸入,形成測試信息數(shù)據(jù);復雜結(jié)構(gòu)生成單元,用于針對復雜數(shù)據(jù)類型的測試信息生成構(gòu)造函數(shù);測試代碼生成單元,用于完成測試信息的取值構(gòu)造,生成測試代碼。
優(yōu)選地,所述數(shù)據(jù)類型庫包括通用類型庫、擴展類型庫和專用類型庫。
優(yōu)選地,所述目標代碼執(zhí)行單元包括測試控制單元,用于完成測試系統(tǒng)的初始化及對外測試控制接口的注冊,測試控制任務、測試執(zhí)行任務的創(chuàng)建啟動;測試執(zhí)行單元,用于按預定要求對已注冊的測試用例進行調(diào)用,監(jiān)控測試過程行為,記錄測試過程數(shù)據(jù);測試記錄單元,用于記錄控制信息、測試信息和測試數(shù)據(jù)。
相對于現(xiàn)有技術(shù),本發(fā)明的有益效果是首先,由于本發(fā)明自動分析獲取被測API接口的參數(shù)信息,將復雜結(jié)構(gòu)、指針等參數(shù)分解到基類,不用通過類型模板來描述、定義參數(shù)類型,徹底解決了測試信息人工描述構(gòu)造的過程。并且該技術(shù)方案不依賴于測試對象語言類型,對測試對象的要求簡單明確,其實現(xiàn)原理先進、合理,有較強的通用性。其次,完全按測試信息、測試數(shù)據(jù),全自動地生成測試用例(測試代碼)及數(shù)據(jù),不需要人為地干預。該技術(shù)方案實現(xiàn)測試信息到測試代碼的自動轉(zhuǎn)換,不需要人工參與代碼的生成,使人工設計代碼負荷降至零,用戶可隨心所欲更改測試設計,而不必擔心為此負出的代碼設計工作量,極大地提高生產(chǎn)率。再次,由于無需對測試信息人工描述構(gòu)造,從而提高工具的自化程度,降低人工操作難度,提高了工作效率。
此外,在本發(fā)明的優(yōu)選方案中,由于將測試信息在GUI(圖形用戶界面)上一目了然顯示出來,用戶可輕松地根據(jù)接口參數(shù)信息,按需要分層、分域進行設置、選擇,避免了通過操作數(shù)據(jù)類型模板來描述接口參數(shù)及成員取值過程。該工具無論從操作性、可用性、適用性上沒有太多要求,對操作人員只要具有基本W(wǎng)INDOWS圖形工具操作經(jīng)驗及基本編程知識人員勻可操作。
增加了測試選項、類型、取值(范圍)等信息輸入,使生成的用例(測試代碼)對測試數(shù)據(jù)及測試調(diào)用更靈活性,滿足實際測試需要。從工具啟動到測試用例(測試代碼)輸出,全程用戶只要按工具要求設置測試對象、錄入測試信息,即可完成。在默認情況下無需人員干預即可實現(xiàn)用例的生成。該技術(shù)方案的實現(xiàn)為用戶提供了靈活多樣的測試設置功能,從而間接地也提供了豐富多樣的問題定位手段、方法,從而為測試問題的盡快解決提供了良好途徑。
可以對測試信息、數(shù)據(jù)進行保存、調(diào)用、修改,提高測試信息、數(shù)據(jù)的可維護性,辟免了重復生成、設置帶來的不便,減少了日后維護量。對測試用例的管理不再需要針對代碼或書面文字進行,只需保存用戶在視圖上設置的信息即可。從而一改過去對大量測試代碼或文件的管理,重復使用歷史信息變得輕松自如,而不必再擔心因為人員更換或長時間放置,而需對設計理解或更改,再花費工作量。該技術(shù)方案能靈活實現(xiàn)用例測試調(diào)度,問題重現(xiàn)等能力,及良好的過程記錄、信息打印機制,確保每一個執(zhí)行的測試用例,能按用戶的意圖完成測試。
該技術(shù)方案可以根據(jù)需要,可進一步擴展實現(xiàn)其它多種測試功能,如單元測試、消息包測試等等,具有較大應用空間;該技術(shù)方案實現(xiàn)了用例設計新模式,使煩瑣復雜的書面用例設計,改為以視圖形式,用戶進行選擇、組合、輸入等手段,使設計、更改、增加更為容易,提高了設計效率。本發(fā)明設計原理合理、流程清楚,工作穩(wěn)定性高;能在較短時間內(nèi)根據(jù)用戶設計的信息,產(chǎn)生出測試用例(測試代碼),具有較強的響應速度。
圖1是一種現(xiàn)有技術(shù)的軟件健壯性測試方法的示意圖;圖2是另一種現(xiàn)有技術(shù)的軟件健壯性測試方法的示意圖;圖3是實施本發(fā)明健壯性測試方法的系統(tǒng)示意圖;圖4是本發(fā)明軟件產(chǎn)品健壯性測試方法的流程圖;圖5是本發(fā)明中提取的測試信息示意圖;圖6是本發(fā)明中接收用戶的測試信息輸入的示意圖;圖7是本發(fā)明采用的數(shù)據(jù)類型庫功能結(jié)構(gòu)示意圖;圖8是本發(fā)明中生成測試用例的流程圖;圖9是本發(fā)明實施例中生成測試代碼的示意圖;圖10是本發(fā)明的軟件產(chǎn)品健壯性測試裝置的框圖;圖11是本發(fā)明中目標代碼執(zhí)行部分的框圖。
具體實施例方式
請參閱圖3,為實施本發(fā)明健壯性測試方法的系統(tǒng)示意圖。本發(fā)明方法包括測試用例自動生成部分和測試目標代碼執(zhí)行部分。
首先,在計算機910上自動生成測試用例,即自動完成測試用例(測試代碼)的自動生成;再通過編譯、連接等手段,與被測對象一起生成可執(zhí)行目標測試代碼;隨后,由計算機910將此可執(zhí)行目標測試代碼通過網(wǎng)線、串口線等連接線920加載到被測對象運行硬件平臺930上,并啟動該可執(zhí)行目標測試代碼運行。目標測試代碼運行中通過網(wǎng)線、串口線等連接線920與計算機910交換信息,包括監(jiān)控信息、運行控制信息,測試數(shù)據(jù)動態(tài)查詢、控制等,計算機910則提供信息分析、控制、數(shù)據(jù)服務等。
本發(fā)明中,所述被測對象運行硬件平臺930包括但不限于電腦、單板等供軟件運行的硬件平臺。所述測試數(shù)據(jù)是指在方法實施過程中生成的測試信息數(shù)據(jù)表,可根據(jù)需要存儲在計算機910上或與測試目標代碼一起編譯連接后加載到硬件平臺930上。
請參閱圖4,是本發(fā)明軟件產(chǎn)品健壯性測試方法的流程圖。
步驟S1,被測對象API測試信息解析提取。
對于健壯性測試來說,在自動生成測試用例(測試代碼)時,需要知道如何構(gòu)造出被測對象及測試環(huán)境。作為健壯性測試工具測試信息的重要來源,本步驟就是對被測對象進行分析,從中提取出相關(guān)信息,如被測函數(shù)名稱、參數(shù)數(shù)目、參數(shù)類型、參數(shù)內(nèi)成員域的結(jié)構(gòu)層次關(guān)系等。
本步驟的具體過程是輸入包含有前述測試信息的被測對象文件,以C語言為例就是*.h、*.obj等。通過語法解析器,對這類文件進行編譯,得到語法分析結(jié)果,進而從中提取出每個被測API的信息,并轉(zhuǎn)換成可被計算機識別的數(shù)據(jù)信息,以一定結(jié)構(gòu)方式暫存到內(nèi)存中,供后續(xù)步驟使用。
其中,語法解析器的作用就是語法檢測,將被檢文件進行語法分析,從而達到分解復雜信息至基本單元(基本數(shù)據(jù)類型)的目的,以便于提取出這些測試信息。語法解析器可以是代碼編譯工具(GCC)中的一個模塊,在經(jīng)過語法合法性檢查、預處理后生成語法信息樹。語法分析就是從生成的語法信息樹中提取出本發(fā)明需要的信息,如各種數(shù)據(jù)類型及層次關(guān)系等。
下面以C語言為例進行說明,假定被測對象為testfile.h文件,被測對象API函數(shù)TestApi_n(……)在testfile.h中的文本格式描述如下……struct b{struct c{int c1;int c2;}
char*d;}……TestApi_n(int a,struct b m);……將testfile.h作為輸入對象進行語法分析,完成信息提取后得到TestApi_n信息。如圖5所示,方框內(nèi)容表示函數(shù)、參數(shù)、節(jié)點域的信息,虛線及箭頭表示前后及所屬關(guān)系,從而完成對被測API函數(shù)TestApi_n(int a,struct b m)基本信息的分解與提取。
步驟S2,用戶測試信息輸入。
作為測試信息的另一個來源,本步驟完成用戶對每個域的測試信息輸入。也就是說,在對被測對象API測試信息提取的基礎(chǔ)上,通過GUI(圖形用戶接口,graphics user interface)界面顯示,將用戶輸入的被測對象每個域的測試信息進行記錄,測試信息包括是否測試、測試類型、測試方式、測試數(shù)據(jù)。通過用戶對被測對象域的測試信息設置,完成用戶測試信息的輸入。
如圖6所示,對于某一函數(shù)、參數(shù)或節(jié)點成員域,用戶通過GUI界面進行操作,設置該域成員用戶測試信息,并通過界面實現(xiàn)對節(jié)點成員用戶測試信息的保存、查詢、調(diào)用。虛箭頭表示該域與其它成員域的前后、上下所屬關(guān)系。
請參閱圖7,為了完成本發(fā)明的目的,需要采用數(shù)據(jù)類型庫。
數(shù)據(jù)類型庫維護相關(guān)數(shù)據(jù)類型庫中模板信息,并對外提供基本類型識別、測試數(shù)據(jù)等相關(guān)信息及接口,若用戶有必要對某一類型庫中的數(shù)據(jù)進行補充,可根據(jù)提供的模板描述文件或打開原有定義的相關(guān)類型模板描述文件補充測試數(shù)據(jù)及信息。
數(shù)據(jù)類型庫是對現(xiàn)有技術(shù)的模板描述技術(shù)的繼承和發(fā)展,所不同的是其在方案中的地位與作用有所改變,由于本發(fā)明引入對測試對象參數(shù)信息解析,因此模板描述復雜數(shù)據(jù)類型取值方式只在特殊情況使用。
數(shù)據(jù)類型庫用于提供基類測試信息(基本類型識別、取值),特別是當用戶選擇某一域的測試類型是默認方式時,它為最終目標執(zhí)行代碼提供測試數(shù)據(jù)因為對一些基本數(shù)據(jù)類型(如char\int等)在自動生成測試用例時,要進行識別,由數(shù)據(jù)類型庫完成這些信息的識別;數(shù)據(jù)類型庫存放著一些基本通用測試數(shù)據(jù),如果用戶選用的就是這其中的數(shù)據(jù),那么就要提供接口函數(shù),以便測試用例在執(zhí)行時,可獲取這些測試數(shù)據(jù)。
另外,為便于模板文件的管理,可以將數(shù)據(jù)類型庫進行分類,如通用類型庫、擴展類型庫、專用類型庫等,分別用于存放不同作用、級別的模板描述文件。
通用類型庫用戶不能隨便改動提供的數(shù)據(jù)類型取值,只能由專業(yè)人員操作,適用于通用測試。
數(shù)據(jù)類型庫存放的是一些獨立的數(shù)據(jù)類型文件,這些類型文件中存放的是以代碼的形式給出的該類型各種取值構(gòu)造過程。如文件Rchar.TPL/Rint.TPL等,其中描述該類型通用的取值構(gòu)造及析構(gòu)過程。
如char construct_char(int i){……switct(i)case 1return 0;case2return 255;……}擴展類型庫用戶可根據(jù)需要自行追加需要的數(shù)據(jù)到相關(guān)的數(shù)據(jù)類型中,作為通用測試數(shù)據(jù)的補充。
專用類型庫可根據(jù)用戶對特定數(shù)據(jù)類型取值方式的描述,生成特殊的取值及環(huán)境描述代碼,以補充用戶在GUI界面上輸入的測試信息不足。
也就是說,數(shù)據(jù)類型庫的作用是根據(jù)模板提供的信息,為測試數(shù)據(jù)、測試代碼(測試用例)的生成、運行起到支持(提供測試數(shù)據(jù))與服務(提供基本類型識別信息)的作用??梢酝ㄟ^一些接口函數(shù),如查詢類型信息,基本類型的取值等來實現(xiàn)。
步驟S3,生成測試代碼、測試數(shù)據(jù)。
該步驟用于將被測試API測試信息轉(zhuǎn)換成測試用例即測試數(shù)據(jù)、測試代碼,與被測目標聯(lián)合編譯生成可執(zhí)行文件后,加載到目標運行設備上,對被測對象實施測試。
由于用戶對被測對象每個域設置的隨機性、數(shù)據(jù)、類型、選項等組合的多樣性,如何將這些信息及時準確地體現(xiàn)在測試代碼運行中,完成用戶期望的測試設計,便是本步驟的關(guān)鍵。為更好的理解,將測試用例分成兩部分,即測試數(shù)據(jù)和測試代碼進行描述。當然,測試數(shù)據(jù)與代碼在實現(xiàn)中并非一定是分開或合并的,這里只是為描述方便而定義成兩塊,以便對本發(fā)明有更好的表達與理解。
請參閱圖8,本步驟可以分為三個子步驟,分別是測試信息預處理、復雜結(jié)構(gòu)生成、測試代碼生成。
步驟S31,進行測試信息預處理。
結(jié)合步驟S1對測試對象信息的提取描述以及步驟S2用戶測試信息的輸入,形成一份完整的測試信息數(shù)據(jù)結(jié)構(gòu),用于后續(xù)測試用例的生成。每一份這樣的信息表結(jié)構(gòu)都可獨立實現(xiàn)信息的保存、調(diào)用、再處理,從而提高后續(xù)使用的可維護性。
具體過程是將測試信息(提取的API信息、用戶輸入的信息)進一步分類、整理、加工后,將信息轉(zhuǎn)換成一定數(shù)據(jù)表項、接口輸出,供下一個子步驟或生成的測試用例(測試代碼)使用。
所述一定的數(shù)據(jù)表項包括測試信息轉(zhuǎn)換表及取值表等,而接口輸入的接口函數(shù)完成用戶對測試信息表及取值表的訪問。
生成的測試信息數(shù)據(jù)表中存放的是用戶對每一個參數(shù)域或成員域的測試信息,如數(shù)據(jù)類型、取值方式、測試類型、數(shù)據(jù)等。對外提供接口函數(shù),可以通過調(diào)用接口函數(shù)來索引不同參數(shù)或成員域的信息、取值,為測試用例的執(zhí)行提供動態(tài)信息服務。相對于現(xiàn)有技術(shù)來說,本發(fā)明實現(xiàn)的測試用例的取值在未執(zhí)行前是不可知的,只有測試用例運行到時,才能根據(jù)測試用例的索引調(diào)用表項接口函數(shù),得到成員取值信息,因此這些數(shù)據(jù)是動態(tài)構(gòu)造出來的。
步驟S32,實現(xiàn)復雜結(jié)構(gòu)生成。
由前述步驟可知,對于非基本類型數(shù)據(jù)類,已經(jīng)通過語法解析將其按一定層次關(guān)系分解到基類。對非基本類型數(shù)據(jù)類用戶測試信息的輸入,是基于組成該類型數(shù)據(jù)類基本類型的選擇與輸入,因此對非基本類型數(shù)據(jù)類的取值,在測試前一定需要將組成該類型數(shù)據(jù)類的基本類型,通過解析出的層次關(guān)系及信息,用基本數(shù)據(jù)類型構(gòu)造函數(shù)或取值構(gòu)造出非基本類型數(shù)據(jù)類的取值,這個過程的結(jié)果就是生成復雜類型數(shù)據(jù)類取值的構(gòu)造函數(shù)代碼。
需要進一步說明的是,復雜結(jié)構(gòu)包括但不限于結(jié)構(gòu)、共同體、枚舉、指針、函數(shù)等非基本類型。
步驟S33,生成測試代碼。
本步驟生成對被測對象調(diào)用的測試封裝代碼。具體是通過解析的信息,完成對被測函數(shù)每個參數(shù)的取值構(gòu)造;這些構(gòu)造函數(shù)或取值來自數(shù)據(jù)類型庫、復雜結(jié)構(gòu)生成過程提供的構(gòu)造函數(shù)、接口或預處理過程產(chǎn)生的信息數(shù)據(jù)表,通過接口函數(shù)提供數(shù)據(jù)。
請參閱圖9,以C語言為例,說明測試用例(測試代碼)產(chǎn)生的過程及關(guān)系。
對被測函數(shù)API_n(struct c a)進行語法分析提取測試信息、并接收用戶輸入的測試信息后,首先進行信息預處理,生成測試信息表及取值表等,并提供接口函數(shù)get_data(),用于完成對測試信息及數(shù)據(jù)的查詢與獲??;其次,對復雜類型進行處理,通過表項接口函數(shù)及數(shù)據(jù)類型庫接口函數(shù)來獲取測試信息及數(shù)據(jù),產(chǎn)生構(gòu)造函數(shù)test_c_construct(),用于完成復雜結(jié)構(gòu)取值過程的構(gòu)造;隨后,測試代碼調(diào)用構(gòu)造函數(shù)及數(shù)據(jù)類型庫接口函數(shù),完成測試環(huán)境構(gòu)造,進而調(diào)用測試對象,實施測試對象的調(diào)用測試。
步驟S4,目標測試代碼的執(zhí)行。
生成的測試代碼、數(shù)據(jù),必需與被測對象編譯、連接生成可執(zhí)行目標文件,才能最終實現(xiàn)測試。具體就是將本發(fā)明生成的測試代碼、數(shù)據(jù)與被測對象一起用編譯連接工具(如GCC)生成可執(zhí)行目標文件(也就是常見的類似于*.EXE文件)。
首先,完成測試系統(tǒng)的初始化(如,測試控制與測試執(zhí)行相關(guān)表項、數(shù)據(jù)、控制信號的創(chuàng)建、初始化)及對外測試控制接口的注冊,測試控制任務、測試執(zhí)行任務等的創(chuàng)建啟動。
隨后,按用戶要求(如測試用例執(zhí)行次序、調(diào)用次數(shù)、調(diào)用方式等)實現(xiàn)對已注冊的測試用例進行調(diào)用,并監(jiān)控測試過程行為,記錄測試過程數(shù)據(jù)。
此外,為確保信息、數(shù)據(jù)能及時輸出或按要求還原再現(xiàn)測試過程,本發(fā)明還提供共享空間及管理,用于對用戶輸入的控制信息及測試過程信息、數(shù)據(jù)進行記錄保存。
請參閱圖10,為實現(xiàn)軟件產(chǎn)品健壯性測試方法,本發(fā)明還提供一種軟件產(chǎn)品健壯性測試裝置。
所述軟件健壯性測試包括測試用例自動生成部分100和目標代碼執(zhí)行部分200。所述測試用例自動生成部分100主要用于將測試信息(包括自動提取的API測試信息及用戶輸入的測試信息)轉(zhuǎn)換為測試信息數(shù)據(jù)表及測試代碼,實現(xiàn)測試信息到代碼的轉(zhuǎn)換,完成測試用例設計;所述目標代碼執(zhí)行部分200用于將測試代碼、被測對象API與測試控制單元、測試執(zhí)行單元和測試記錄單元一起編譯連接,生成可執(zhí)行文件,并在硬件平臺上運行,由外部模塊來對運行狀態(tài)進行監(jiān)控,實現(xiàn)測試用例的調(diào)用測試及監(jiān)控。
測試用例自動生成部分100包括測試信息解析提取單元110、用戶測試信息輸入單元120、數(shù)據(jù)類型庫130和測試用例產(chǎn)生單元140。
測試信息解析提取單元110實現(xiàn)對被測對象API測試信息的解析提取。
作為健壯性測試工具測試信息的重要來源,測試信息解析提取單元110對被測對象進行分析,從中提取出相關(guān)信息,如被測函數(shù)名稱、參數(shù)數(shù)目、參數(shù)類型、參數(shù)內(nèi)成員域的結(jié)構(gòu)層次關(guān)系等。
測試信息解析提取單元110的輸入對象是包含有前述測試信息的被測對象文件。通過語法解析器,對這類文件進行編譯,得到語法分析結(jié)果,進而從中提取出每個被測API的信息,并轉(zhuǎn)換成可被計算機識別的數(shù)據(jù)信息,以一定結(jié)構(gòu)方式暫存到內(nèi)存中,供后續(xù)單元使用。
作為測試信息的另一個來源,用戶測試信息輸入單元120完成用戶對每個域的測試信息輸入。也就是說,在對被測對象API測試信息提取的基礎(chǔ)上,通過GUI(圖形用戶接口,graphics user interface)界面顯示,將用戶輸入的被測對象每個域的測試信息進行記錄,測試信息包括是否測試、測試類型、測試方式、測試數(shù)據(jù)。通過用戶對被測對象域的測試信息設置,完成用戶測試信息的輸入。
數(shù)據(jù)類型庫130根據(jù)模板提供的信息,用于為測試數(shù)據(jù)、測試代碼(測試用例)的生成、運行起到支持(提供測試數(shù)據(jù))與服務(提供基本類型識別信息)的作用??梢酝ㄟ^一些接口函數(shù),如查詢類型信息,基本類型的取值等來實現(xiàn)。
測試用例產(chǎn)生單元140用于將被測試API測試信息轉(zhuǎn)換成測試用例即測試數(shù)據(jù)、測試代碼。
測試用例產(chǎn)生單元140可以分為三個子單元,分別是測試信息預處理單元141、復雜結(jié)構(gòu)生成單元142和測試代碼生成單元143。
測試信息預處理單元141結(jié)合對測試對象信息的提取描述以及用戶測試信息的輸入,生成測試信息數(shù)據(jù)表,用于生成的測試用例執(zhí)行時動態(tài)獲取相關(guān)信息與數(shù)據(jù)。
生成的測試信息數(shù)據(jù)表中存放的是用戶對每一個參數(shù)域或成員域的測試信息,如數(shù)據(jù)類型、取值方式、測試類型、數(shù)據(jù)等。對外提供接口函數(shù),可以通過調(diào)用接口函數(shù)來索引不同參數(shù)或成員域的信息、取值,為測試用例的執(zhí)行提供動態(tài)信息服務。
對非基本類型數(shù)據(jù)類的取值,在測試前一定需要復雜結(jié)構(gòu)生成單元142將組成該類型數(shù)據(jù)類的基本類型,通過解析出的層次關(guān)系及信息,用基本數(shù)據(jù)類型構(gòu)造函數(shù)或取值構(gòu)造出非基本類型數(shù)據(jù)類的取值,這個過程的結(jié)果就是生成復雜類型數(shù)據(jù)類取值的構(gòu)造函數(shù)代碼。
測試代碼生成單元143生成對被測對象調(diào)用的測試封裝代碼。具體是通過解析的信息,完成對被測函數(shù)每個參數(shù)的取值構(gòu)造;這些構(gòu)造函數(shù)或取值來自數(shù)據(jù)類型庫、復雜結(jié)構(gòu)生成過程提供的構(gòu)造函數(shù)、接口或預處理過程產(chǎn)生的信息數(shù)據(jù)表,通過接口函數(shù)提供數(shù)據(jù)。
上述三個單元141、142和143分工產(chǎn)生測試數(shù)據(jù)、測試代碼,由于參數(shù)信息的復雜多樣性及用戶測試信息設置的隨意性,對測試數(shù)據(jù)與測試代碼中測試取值的要求是一一對應,以確保每個函數(shù)域、每個參數(shù)域,每個節(jié)點域及每個成員域?qū)≈档恼_性。正因為如此,雖然數(shù)據(jù)、代碼是分在不同單元產(chǎn)生,但在生成數(shù)據(jù)、與代碼之前,這些單元已按照內(nèi)部定制的規(guī)則進行了統(tǒng)一處理,從而確保了數(shù)據(jù)類型在構(gòu)造過程,能夠取到對應的數(shù)據(jù),保證了測試數(shù)據(jù)、信息的準確。所述按內(nèi)部定制的規(guī)則進行了統(tǒng)一處理是指測試用例執(zhí)行中為能準確地索引到測試表中對應的測試數(shù)據(jù)及信息,對被解析出的測試信息進行分類及統(tǒng)一編號,這樣就能在動態(tài)構(gòu)造測試數(shù)據(jù)時,根據(jù)索引得所要的測試數(shù)據(jù)、信息。
以C語言為例,在整個裝置的實際操作流程中,用戶首先要在圖形界面上完成測試對象的選擇與輸入(即*.h),并將配置信息輸入到相關(guān)設置中,啟動語法分析提取,完成測試對象測試信息的提取,之后會將這些信息以圖形方式顯示在終端上,供用戶查看及設置測試信息。完成上述操作后,即可啟動用例生成功能,此時會依次調(diào)用測試信息預處理單元141、復雜結(jié)構(gòu)生成單元142、測試代碼生成單元143,完成最終測試信息到測試用例(測試代碼、數(shù)據(jù))的轉(zhuǎn)換。
請一并參閱圖11,目標代碼執(zhí)行部分200包括測試控制單元210、測試執(zhí)行單元220和測試記錄單元230。負責目標測試代碼的啟動、執(zhí)行、并實時記錄測試命令、數(shù)據(jù)等信息,以便測試執(zhí)行時進行實時控制,監(jiān)測測試過程。
生成的測試代碼、數(shù)據(jù),必需與被測對象編譯、連接生成可執(zhí)行目標文件,才能最終實現(xiàn)測試。因此,將本發(fā)明生成的測試代碼、數(shù)據(jù)與被測對象一起用編譯連接工具(如GCC)生成可執(zhí)行目標文件(也就是常見的類似于WIN32下的*.EXE文件或其它操作系統(tǒng)下的可執(zhí)行文件)。
測試控制單元210用于完成測試系統(tǒng)的初始化(如,測試控制與測試執(zhí)行相關(guān)表項、數(shù)據(jù)、控制信號的創(chuàng)建、初始化)及對外測試控制接口的注冊,測試控制任務、測試執(zhí)行任務等的創(chuàng)建啟動。通過測試控制任務和接口,實現(xiàn)對外測試控制命令的解析,指導測試執(zhí)行任務按用戶的要求實現(xiàn)對測試用例的調(diào)用測試,同時在此基礎(chǔ)上實現(xiàn)更高層次的控制,如測試問題的分析、定位、復現(xiàn)操作等功能。
測試執(zhí)行單元220按用戶要求(如測試用例執(zhí)行次序、調(diào)用次數(shù)、調(diào)用方式等)實現(xiàn)對已注冊的測試用例進行調(diào)用,并監(jiān)控測試過程行為,記錄測試過程數(shù)據(jù)。完成與測試控制單元210之間的信息交互,實現(xiàn)用戶對測試用例的控制意圖。
測試記錄單元230提供共享空間及管理,用于對用戶輸入的控制信息及測試過程信息、數(shù)據(jù)進行記錄保存,確保所述信息、數(shù)據(jù)能及時輸出或按要求還原再現(xiàn)測試過程。
為實現(xiàn)復雜、繁多的測試功能,目標執(zhí)行部分200分為三個單元,通過接口、信息表、消息等完成相互間的功能及協(xié)調(diào);對外接口提供測試過程的動態(tài)控制操作及命令,便于用戶在進行測試過程中隨時改變測試進程。測試記錄起到信息及測試數(shù)據(jù)記錄、緩存功能,隨時根據(jù)需要將測試信息、數(shù)據(jù)輸出到外部。如圖11所示,測試控制單元210接收外部的命令需要提供對外接口函數(shù),這些函數(shù)就是通知測試控制單元210執(zhí)行所要功能或命令;信息則是控制單元210與測試執(zhí)行單元220交互測試信息的一個內(nèi)存塊,動態(tài)存儲測試用例執(zhí)行中需要保存或交互的信息,如索引號、等;消息則兩個單元為實現(xiàn)與外部功能的交互而傳遞的數(shù)據(jù)包。
以上是整個裝置用例生成、用例執(zhí)行方案及各單元功能實現(xiàn)的說明,通過上述單元功能的實現(xiàn),本發(fā)明較好地解決了設計時提出的目標,有效地實現(xiàn)測試用例設計、生成、執(zhí)行的流程,確保在操作、使用、維護上提高工效,降低了難度。
綜上所述,本發(fā)明是基于對組件API的健壯性測試而開發(fā)設計的一種自動化測試方法及其裝置。該方法及裝置主要實現(xiàn)了對被測對象測試信息的自動生成和自動提取,并提供用戶接口,實現(xiàn)對測試信息加工、完善,進而自動生成被測組件健壯性測試用例(測試代碼)。通過控制、執(zhí)行單元,實現(xiàn)對測試用例的控制、調(diào)用,完成測試對象健壯性測試。整個測試用例生成與執(zhí)行,不需要用戶對被測對象有深入了解,按要求輸入測試對象及測試信息,即可自動完成上述過程,從而大大提高測試自動化程度,降低人工工作量及難度。
以上所述僅是本發(fā)明的優(yōu)選實施方式,應當指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應視為本發(fā)明的保護范圍。
權(quán)利要求
1.一種軟件產(chǎn)品健壯性的測試方法,其特征在于,包括步驟1)解析被測對象,從所述被測對象中提取測試信息;2)顯示所述提取的測試信息,接收用戶的測試信息輸入;3)根據(jù)前述提取的測試信息和測試信息輸入,生成測試用例;4)結(jié)合所述測試用例與被測對象,生成測試目標代碼;5)運行所述測試目標代碼,實現(xiàn)軟件產(chǎn)品健壯性的測試。
2.根據(jù)權(quán)利要求1所述的軟件產(chǎn)品健壯性的測試方法,其特征在于,所述步驟1)中的提取過程具體是通過語法解析器對被測對象進行編譯和語法分析,將得到的語法分析結(jié)果轉(zhuǎn)換為測試信息;所述測試信息包括數(shù)據(jù)類型及其層次結(jié)構(gòu)。
3.根據(jù)權(quán)利要求2所述的軟件產(chǎn)品健壯性的測試方法,其特征在于,所述步驟1)中,還包括數(shù)據(jù)類型庫提供基類測試信息支持,所述基類測試信息包括基本類型識別和取值。
4.根據(jù)權(quán)利要求1所述的軟件產(chǎn)品健壯性的測試方法,其特征在于,所述步驟2)中的顯示和接收過程通過圖形用戶接口實現(xiàn);所述測試信息輸入包括是否測試、測試類型、測試方式和測試數(shù)據(jù)。
5.根據(jù)權(quán)利要求1至4任一項所述的軟件產(chǎn)品健壯性的測試方法,其特征在于,所述步驟3)的生成測試用例具體包括31)對前述提取的測試信息和測試信息輸入進行信息預處理,生成測試信息表項和接口,所述測試信息表項包括測試信息轉(zhuǎn)換表和取值表;32)針對復雜數(shù)據(jù)類型的測試信息生成構(gòu)造函數(shù);33)完成測試信息的取值構(gòu)造,生成測試代碼。
6.根據(jù)權(quán)利要求5所述的軟件產(chǎn)品健壯性的測試方法,其特征在于,所述步驟3)中,還包括數(shù)據(jù)類型庫提供基類測試信息、測試數(shù)據(jù)。
7.根據(jù)權(quán)利要求5所述的軟件產(chǎn)品健壯性的測試方法,其特征在于,所述步驟5)的運行過程具體包括51)完成測試系統(tǒng)的初始化及對外測試控制接口的注冊,測試控制任務、測試執(zhí)行任務的創(chuàng)建啟動;52)按預定要求對已注冊的測試用例進行調(diào)用,監(jiān)控測試過程行為,記錄測試過程數(shù)據(jù);53)記錄控制信息、測試信息和測試數(shù)據(jù)。
8.根據(jù)權(quán)利要求7所述的軟件產(chǎn)品健壯性的測試方法,其特征在于,所述步驟5)的運行過程還包括動態(tài)查詢測試信息數(shù)據(jù)。
9.一種軟件產(chǎn)品健壯性的測試裝置,其特征在于,包括測試信息解析提取單元,用于解析被測對象,從所述被測對象中提取測試信息;用戶測試信息輸入單元,用于顯示所述提取的測試信息,相應接收用戶的測試信息輸入;測試用例產(chǎn)生單元,用于根據(jù)前述提取的測試信息和測試信息輸入,生成測試用例;目標代碼執(zhí)行單元,用于結(jié)合所述測試用例與被測對象,生成測試目標代碼;以及運行所述測試目標代碼,實現(xiàn)軟件產(chǎn)品健壯性的測試;數(shù)據(jù)類型庫,用于存儲基類測試信息、測試數(shù)據(jù),為測試用例的生成和運行提供測試數(shù)據(jù)支持和基本類型識別信息服務。
10.根據(jù)權(quán)利要求9所述的軟件產(chǎn)品健壯性的測試裝置,其特征在于,所述測試用例產(chǎn)生單元包括測試信息預處理單元,用于結(jié)合提取的測試信息以及用戶的測試信息輸入,形成測試信息數(shù)據(jù);復雜結(jié)構(gòu)生成單元,用于針對復雜數(shù)據(jù)類型的測試信息生成構(gòu)造函數(shù);測試代碼生成單元,用于完成測試信息的取值構(gòu)造,生成測試代碼。
11.根據(jù)權(quán)利要求9所述的軟件產(chǎn)品健壯性的測試裝置,其特征在于,所述數(shù)據(jù)類型庫包括通用類型庫、擴展類型庫和專用類型庫。
12.根據(jù)權(quán)利要求9至11任一項所述的軟件產(chǎn)品健壯性的測試裝置,其特征在于,所述目標代碼執(zhí)行單元包括測試控制單元,用于完成測試系統(tǒng)的初始化及對外測試控制接口的注冊,測試控制任務、測試執(zhí)行任務的創(chuàng)建啟動;測試執(zhí)行單元,用于按預定要求對已注冊的測試用例進行調(diào)用,監(jiān)控測試過程行為,記錄測試過程數(shù)據(jù);測試記錄單元,用于記錄控制信息、測試信息和測試數(shù)據(jù)。
全文摘要
本發(fā)明公開了一種軟件產(chǎn)品健壯性的測試方法,包括步驟解析被測對象,從所述被測對象中提取測試信息;顯示所述提取的測試信息,接收用戶的測試信息輸入;根據(jù)前述提取的測試信息和測試信息輸入,生成測試用例;結(jié)合所述測試用例與被測對象,生成測試目標代碼;運行所述測試目標代碼,實現(xiàn)軟件產(chǎn)品健壯性的測試。本發(fā)明還涉及一種軟件產(chǎn)品健壯性的測試裝置。本發(fā)明可以實現(xiàn)對被測對象測試信息的自動生成和自動提取。
文檔編號G06F11/36GK1776643SQ20041008867
公開日2006年5月24日 申請日期2004年11月15日 優(yōu)先權(quán)日2004年11月15日
發(fā)明者廣遠偉, 王云鵬, 陳億發(fā) 申請人:華為技術(shù)有限公司