專利名稱:一種基于嵌入式軟件的測試分析方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于軟件測試領(lǐng)域,尤其涉及一種基于嵌入式軟件的測試分析方法及系統(tǒng)。
背景技術(shù):
隨著計算機(jī)硬件技術(shù)的進(jìn)步和元件質(zhì)量逐步提高,元件的集成量也大大增加,從而使嵌入式設(shè)備的硬件性能得到了極大的提高;與此同時,通過采用成熟的商用嵌入式操作系統(tǒng),使整個系統(tǒng)運行在一個高性能的、可靠的軟件平臺上,為實現(xiàn)各種大型的復(fù)雜的應(yīng)用打下了良好的基礎(chǔ)。面對系統(tǒng)復(fù)雜性的增加,自然需要功能強(qiáng)大、性能穩(wěn)定的嵌入式應(yīng)用軟件與之相適應(yīng)。所以,在嵌入系統(tǒng)開發(fā)中軟件的代碼量也越來越大,電子類產(chǎn)品的代碼量以每兩年就翻一翻的速度增長。同時,系統(tǒng)又要求應(yīng)用要精簡高效、穩(wěn)定可靠,這使得軟件的開發(fā)在整個系統(tǒng)開發(fā)中所占的重要性越來越高,開發(fā)時間也越來越長,軟件的質(zhì)量對產(chǎn)品的最終質(zhì)量起到了決定性的作用。因此,迫切需要一種工具能夠在軟件開發(fā)的單板階段、 集成階段、系統(tǒng)階段等各階段,對嵌入式系統(tǒng)的軟件進(jìn)行實時在線的測試與分析,以保證系統(tǒng)的性能和穩(wěn)定可靠性。市面上流行的測試工具大致分為普通純軟件的測試工具和純硬件的測試工具。其中,普通純軟件的測試工具采用的是軟件打點技術(shù),即在被測代碼中插入一些函數(shù),主要在函數(shù)的入口、出口處,以及分支等地,插入特定的函數(shù),以便計算函數(shù)執(zhí)行的時間,利用這些函數(shù)來實現(xiàn)測試數(shù)據(jù)的生成,同時將測試數(shù)據(jù)送到目標(biāo)板系統(tǒng)的共享內(nèi)存中。并在目標(biāo)系統(tǒng)中運行一個預(yù)處理任務(wù),完成這些測試數(shù)據(jù)的預(yù)處理,然后將處理后的數(shù)據(jù),通過目標(biāo)機(jī)的網(wǎng)口或串口上送回到主機(jī)上,進(jìn)行后續(xù)的分析。通過這個過程,測試者得以知道程序當(dāng)前的運行狀態(tài)。從此分析可知,純軟件的測試工具,需借助于用戶的目標(biāo)處理器來完成,即需要占用目標(biāo)板上的資源。同時,純軟件的測試工具的測試原理,有兩個必然存在的特點——插樁函數(shù)和預(yù)處理任務(wù)。分析由于插入了插樁函數(shù)和預(yù)處理任務(wù)的存在,使系統(tǒng)的代碼增大, 更嚴(yán)重的是這些代碼會對系統(tǒng)的運行效率有很大的影響(超過50% )。同時,函數(shù)本身要有它的實現(xiàn)過程,它要完成數(shù)據(jù)的生成和暫存,而且這些函數(shù)在它的實現(xiàn)過程中,還可能被其他優(yōu)先級更高的中斷程序所中斷。預(yù)處理任務(wù)需要占用目標(biāo)系統(tǒng)CPU處理時間、共享內(nèi)存和通信通道完成數(shù)據(jù)的處理、數(shù)據(jù)的上送。由于這些弊端的存在,當(dāng)采用純軟件測試工具對目標(biāo)系統(tǒng)進(jìn)行測試時,用戶目標(biāo)系統(tǒng)是在一種不真實的環(huán)境下運行的,我們所捕獲的數(shù)據(jù)也是不夠精確的。采用純軟件的測試工具有以下不足缺陷1 插入的是函數(shù),本身要有實現(xiàn)過程,同時需要完成測試數(shù)據(jù)的生成和暫存,而且實現(xiàn)過程中,還易被其他優(yōu)先級更高的中斷程序所中斷。缺陷2 做覆蓋率分析的時候,因為要大量打點,而打點過多就會影響系統(tǒng)的運行,所以只能做單元覆蓋率分析且單元的程序量不能太大。缺陷3 沒有對內(nèi)存分配進(jìn)行分析和檢查的能力。
純硬件測試工具以邏輯分析儀為例,邏輯分析儀通過雙端口標(biāo)志寄存器,當(dāng)代碼執(zhí)行時,雙端口標(biāo)志寄存器同時對執(zhí)行的代碼置1,通過對代碼是否置1,來判斷程序當(dāng)前運行的狀況。分析當(dāng)系統(tǒng)打開緩存(CACHE)時,取一條指令則對此代碼置1。而這條指令并不一定執(zhí)行。采用純硬件的測試工具有以下不足缺陷1 當(dāng)CACHE打開我們會采用指令預(yù)取技術(shù),從外存中讀取一段代碼到一級 CACHE中,這時邏輯分析儀就會報告這些代碼已經(jīng)被執(zhí)行了,但實際上被送到CACHE中的代碼可能根本沒有被命中。為了避免這種誤差必須把CACHE關(guān)閉掉,而CACHE關(guān)掉就不是系統(tǒng)真實的運行環(huán)境了,有時甚至?xí)捎贑ACHE關(guān)閉而導(dǎo)致系統(tǒng)無法正常運行。缺陷2 沒有對內(nèi)存分配進(jìn)行分析和檢查的能力。綜上,現(xiàn)有技術(shù)通過軟件或硬件測試工具進(jìn)行嵌入式軟件測試時,存在著代碼膨脹率過高、容易被中斷,占有的硬件板資源較多,測試精度和準(zhǔn)確率不高,測試分析對象不夠多樣化等等的問題。
發(fā)明內(nèi)容
本發(fā)明實施例的目的在于提供一種基于嵌入式軟件的測試分析方法,旨在解決現(xiàn)有技術(shù)進(jìn)行嵌入式軟件測試分析時,膨脹率過高,容易被中斷,占有的硬件板資源較多,測試精度和準(zhǔn)確率不高,測試分析對象不夠多樣化的問題。本發(fā)明實施例是這樣實現(xiàn)的,一種基于嵌入式軟件的測試分析方法,包括以下步驟對經(jīng)過編譯器預(yù)編譯的源代碼進(jìn)行插樁;根據(jù)所述預(yù)編譯的源代碼的插樁結(jié)果生成插樁標(biāo)識數(shù)據(jù)庫;監(jiān)控并采集目標(biāo)板上可執(zhí)行目標(biāo)代碼的運行結(jié)果,對所述可執(zhí)行目標(biāo)代碼的運行結(jié)果進(jìn)行處理生成測試數(shù)據(jù),所述可執(zhí)行目標(biāo)代碼由插樁后的源代碼經(jīng)過所述編譯器編譯、鏈接生成;對所述插樁標(biāo)識數(shù)據(jù)庫和所述測試數(shù)據(jù)進(jìn)行關(guān)聯(lián)對比和分析,得到測試分析結(jié)果。進(jìn)一步地,所述對源代碼進(jìn)行插樁的步驟具體為確定插樁位置和插樁內(nèi)容,根據(jù)所述插樁位置在完成預(yù)編譯的源代碼中插入插樁內(nèi)容;所述插樁位置包括至少一個插樁點,所述插樁內(nèi)容為賦值語句,所述根據(jù)所述預(yù)編譯的源代碼的插樁結(jié)果生成插樁標(biāo)識數(shù)據(jù)庫的步驟具體為根據(jù)所述插樁點和賦值語句生成對應(yīng)的插樁標(biāo)識信息;根據(jù)所述插標(biāo)識信息生成插樁標(biāo)識數(shù)據(jù)庫。進(jìn)一步地,所述監(jiān)控并采集所述目標(biāo)板上所述可執(zhí)行目標(biāo)代碼的運行結(jié)果步驟具體為當(dāng)監(jiān)控到所述目標(biāo)板上的信號時,通過捕獲所述目標(biāo)板可執(zhí)行目標(biāo)代碼的運行結(jié)果并保存;所述對可執(zhí)行目標(biāo)代碼的運行結(jié)果進(jìn)行處理生成測試數(shù)據(jù)的步驟具體為對所述可執(zhí)行目標(biāo)代碼的運行結(jié)果進(jìn)行保存,預(yù)處理,生成測試數(shù)據(jù)上傳。
進(jìn)一步地,所述插樁內(nèi)容為賦值語句。進(jìn)一步地,當(dāng)所述源代碼為程序文件時,所述程序文件至少為一個,程序文件為多個時程序文件的保存路徑至少為一個;所述插樁標(biāo)識信息包括覆蓋率標(biāo)識信息、內(nèi)存標(biāo)識信息、代碼流標(biāo)識信息、測試報告標(biāo)識信息;所述測試分析結(jié)果包括以下內(nèi)容覆蓋率分析結(jié)果、內(nèi)存調(diào)用信息、代碼流跟蹤結(jié)果、測試報告。本發(fā)明實施例的另一目的在于提供基于嵌入式軟件的測試分析系統(tǒng),包括插樁器,用于對經(jīng)過編譯器預(yù)編譯的源代碼進(jìn)行插樁;插樁標(biāo)識數(shù)據(jù)庫生成單元,用于根據(jù)所述插樁器對所述預(yù)編譯的源代碼的插樁結(jié)果生成插樁標(biāo)識數(shù)據(jù)庫;軟件探針及采集單元,用于從目標(biāo)板上監(jiān)控并采集可執(zhí)行目標(biāo)代碼的運行結(jié)果, 對所述可執(zhí)行目標(biāo)代碼的運行結(jié)果進(jìn)行處理生成測試數(shù)據(jù)并保存,所述可執(zhí)行目標(biāo)代碼由插樁后的源代碼經(jīng)過所述編譯器編譯、鏈接生成;結(jié)果分析器,根據(jù)所述插樁標(biāo)識數(shù)據(jù)庫生成單元生成的插樁標(biāo)識數(shù)據(jù)庫和軟件探針及采集單元保存的測試數(shù)據(jù)對源代碼的測試結(jié)果進(jìn)行關(guān)聯(lián)對比和分析,得到測試分析結(jié)果。進(jìn)一步地,所述插樁標(biāo)識數(shù)據(jù)庫包括標(biāo)識信息,所述標(biāo)識信息包括覆蓋率標(biāo)識信息、內(nèi)存標(biāo)識信息、代碼流標(biāo)識信息、測試報告標(biāo)識信息,所述測試分析結(jié)果包括以下內(nèi)容 覆蓋率分析結(jié)果、內(nèi)存調(diào)用信息、代碼流跟蹤結(jié)果、測試報告。進(jìn)一步地,所述插樁器進(jìn)一步包括驅(qū)動模塊,用于調(diào)用所述編譯器進(jìn)行編譯處理;執(zhí)行模塊,用于確定插樁位置和插樁內(nèi)容,根據(jù)所述插樁位置在所述編譯器完成預(yù)編譯的源代碼中插入插樁內(nèi)容;所述插樁位置包括至少一個插樁點,所述插樁內(nèi)容為賦值語句,所述插樁標(biāo)識數(shù)據(jù)庫生成單元進(jìn)一步包括第一處理模塊,根據(jù)所述執(zhí)行模塊確定的插樁位置和插值內(nèi)容生成對應(yīng)的插樁標(biāo)識信息;第二處理模塊,根據(jù)所述第一處理模塊生成的插樁標(biāo)識信息生成插樁標(biāo)識數(shù)據(jù)庫。進(jìn)一步地,所述軟件探針及采集單元進(jìn)一步包括監(jiān)控模塊,用于監(jiān)控所述目標(biāo)板的信號;采集模塊,用于在所述監(jiān)控模塊監(jiān)控到所述目標(biāo)板的信號時,捕獲所述目標(biāo)板上可執(zhí)行目標(biāo)代碼的運行結(jié)果并保存。進(jìn)一步地,所述當(dāng)所述源代碼為程序文件時,所述程序文件至少為一個,程序文件為多個時程序文件的保存路徑至少為一個。本發(fā)明實施例,通過對經(jīng)過編譯器預(yù)編譯的源代碼進(jìn)行插樁,根據(jù)預(yù)編譯的源代碼的插樁結(jié)果生成插樁標(biāo)識數(shù)據(jù)庫,監(jiān)控并采集目標(biāo)板上可執(zhí)行目標(biāo)代碼的運行結(jié)果,對可執(zhí)行目標(biāo)代碼的運行結(jié)果進(jìn)行處理生成測試數(shù)據(jù),可執(zhí)行目標(biāo)代碼由插樁后的源代碼經(jīng)過編譯器編譯、鏈接生成,對插樁標(biāo)識數(shù)據(jù)庫和測試數(shù)據(jù)進(jìn)行關(guān)聯(lián)對比和分析,得到測試分析結(jié)果,實現(xiàn)了內(nèi)存調(diào)用分析,滿足降低代碼膨脹率、避免中斷,占有較小硬件板上資源的同時提高測試精度和準(zhǔn)確率的要求,且測試分析對象多樣化。
圖1是本發(fā)明實施例提供的基于嵌入式軟件測試分析方法的流程圖;圖2是本發(fā)明一個示例提供的基于嵌入式軟件測試的流程圖;圖3是本發(fā)明另一個示例提供的內(nèi)存插樁示意圖;圖4是本發(fā)明實施例提供的基于嵌入式軟件測試分析系統(tǒng)的工作原理圖。
具體實施例方式為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。本發(fā)明實施例,提供一種基于嵌入式軟件的測試分析方法,通過對經(jīng)過編譯器預(yù)編譯的源代碼進(jìn)行插樁,從目標(biāo)板上監(jiān)控并采集可執(zhí)行目標(biāo)代碼的運行結(jié)果,對可執(zhí)行目標(biāo)代碼的運行結(jié)果進(jìn)行處理生成測試數(shù)據(jù)并保存,根據(jù)插樁標(biāo)識數(shù)據(jù)庫和測試數(shù)據(jù)對源代碼的測試結(jié)果進(jìn)行對比和分析,得到測試分析結(jié)果。如圖1示出了為本發(fā)明實施例,提供的嵌入式軟件測試分析方法的流程圖。在步驟SlOl中,對經(jīng)過編譯器預(yù)編譯的源代碼進(jìn)行插樁。本發(fā)明實施例支持對C語言以及51、ARM、PPC、68K等匯編語言的插樁。可以對一個文件,也可以對一個目錄下的文件進(jìn)行插樁。步驟SlOl步驟具體為確定插樁位置和插樁內(nèi)容,根據(jù)插樁位置在完成預(yù)編譯的源代碼插入插樁內(nèi)容?,F(xiàn)實應(yīng)用中,插樁位置包括至少一個插樁點,在本發(fā)明實施例中,軟件探針的植入要做到緊湊精干,才能保證信息收集的全面無冗余,同時減少代碼的膨脹率。通常將程序基于“塊”結(jié)構(gòu)基本劃分。按照塊結(jié)構(gòu)的劃分,插樁的位置位于預(yù)編譯的源代碼以下幾處 a.程序的第一條語句;b.分支語句的開始;c.循環(huán)語句的開始;d.下一個入口語句之前的語句;e.程序的結(jié)束語句;f.分支語句的結(jié)束;g.循環(huán)語句的結(jié)束;h.在內(nèi)存調(diào)用函數(shù)的定義處。除此之外,根據(jù)覆蓋測試要求的不同,除了上面所說的幾種情況外,插樁的位置也會隨著覆蓋測試要求的不同有所變化。具體不再詳述。在本發(fā)明優(yōu)選實施例中,插樁內(nèi)容為賦值語句,插入賦值語句也能夠?qū)Υa進(jìn)行覆蓋率跟蹤分析,同時,由于賦值語句在匯編時也是一條語句,且執(zhí)行的時間非常短,避免了被其它的中斷請求所中斷,效率高。另外,根據(jù)不同的測試要求插入不同的軟件探針,采用相應(yīng)的插樁策略插在不同的關(guān)鍵位置,也可減少代碼的膨脹率,保證程序執(zhí)行的效率。其中,編譯器和源代碼由待測源代碼對應(yīng)的提供商提供。在步驟S102中,根據(jù)預(yù)編譯的源代碼的插樁結(jié)果生成插樁標(biāo)識數(shù)據(jù)庫。具體應(yīng)用時,插樁位置包括至少一個插樁點,插樁內(nèi)容為賦值語句,步驟S102步驟具體為根據(jù)插樁點和賦值語句生成對應(yīng)的插樁標(biāo)識信息;根據(jù)插標(biāo)識信息生成插樁標(biāo)識數(shù)據(jù)庫。
其中,插樁標(biāo)識信息記錄了插樁的相關(guān)信息,例如插樁位置信息,在本發(fā)明實施例中,插樁標(biāo)識信息以文件信息進(jìn)行保存,為了便于與測試數(shù)據(jù)進(jìn)行關(guān)聯(lián)、比較、分析管理使用,插樁完成后,根據(jù)生成的多個插樁標(biāo)識信息對應(yīng)的文件自動構(gòu)建插樁標(biāo)識數(shù)據(jù)庫。在步驟S103中,監(jiān)控并采集目標(biāo)板上可執(zhí)行目標(biāo)代碼的運行結(jié)果,對可執(zhí)行目標(biāo)代碼的運行結(jié)果進(jìn)行處理,生成測試數(shù)據(jù)。其中,所述可執(zhí)行目標(biāo)代碼由插樁后的源代碼經(jīng)過所述編譯器編譯、鏈接生成,目標(biāo)板上由待測源代碼對應(yīng)的廠商提供。步驟S103中監(jiān)控并采集目標(biāo)板上可執(zhí)行目標(biāo)代碼的運行結(jié)果步驟具體為當(dāng)監(jiān)控到目標(biāo)板上的信號時,到目標(biāo)板上捕獲相應(yīng)的目標(biāo)代碼執(zhí)行結(jié)果,并保存。步驟S103中對可執(zhí)行目標(biāo)代碼的運行結(jié)果進(jìn)行處理,生成測試數(shù)據(jù)的步驟具體為對可執(zhí)行目標(biāo)代碼的運行結(jié)果進(jìn)行預(yù)處理,生成測試數(shù)據(jù),然后上傳回結(jié)果分析
ο在步驟S104中,對插樁標(biāo)識數(shù)據(jù)庫和測試數(shù)據(jù)進(jìn)行關(guān)聯(lián)對比和分析,得到測試分析結(jié)果。在本發(fā)明實施例中,采用圖形化分析目標(biāo)板上代碼的運行狀況。主要包括文件代碼注釋等靜態(tài)詳細(xì)信息,統(tǒng)計信息。文件的調(diào)用關(guān)系。函數(shù)的靜態(tài)調(diào)用、動態(tài)調(diào)用關(guān)系。具體為1)文件代碼注釋統(tǒng)計顯示插樁文件數(shù),每個文件的代碼行,注釋行,空格行等靜
態(tài)fe息。2)文件調(diào)用圖形化顯示文件動態(tài)、靜態(tài)調(diào)用關(guān)系。當(dāng)動態(tài)顯示的時候,執(zhí)行過的文件將變成亮色。3)函數(shù)調(diào)用樹狀結(jié)構(gòu)直觀地顯示函數(shù)動態(tài)、靜態(tài)調(diào)用關(guān)系。當(dāng)動態(tài)顯示的時候, 執(zhí)行過的函數(shù)將變成亮色。其中,當(dāng)源代碼為程序文件時,程序文件至少為一個,程序文件為多個時程序文件的保存路徑至少為一個;插樁標(biāo)識信息包括覆蓋率標(biāo)識信息、內(nèi)存標(biāo)識信息、代碼流標(biāo)識信息、測試報告標(biāo)識信息;測試分析結(jié)果包括以下內(nèi)容覆蓋率分析結(jié)果、內(nèi)存調(diào)用信息、 代碼流跟蹤結(jié)果、測試報告。圖2示出了本發(fā)明一個示例提供的嵌入式軟件測試的處理流程。作為本發(fā)明的一個示例,該示例使用C/C++語言進(jìn)行編寫,軟件測試工作流程具體如下在步驟S201中,對源代碼進(jìn)行預(yù)編譯。在步驟S202中,對預(yù)處理后的源代碼進(jìn)行插樁,生成.idb文件,作為插樁標(biāo)識數(shù)
據(jù)庫保存。源代碼插樁技術(shù),是第一個核心步驟和關(guān)鍵技術(shù)。是為全面分析源代碼做標(biāo)記的。 例如
if (SzMStk <= MSPtr) {
MStk = (Move (*)
) estc_realloc(MStk, (SzMStk + 100U) *
sizeof(move),0x67239936);紅色=內(nèi)存標(biāo)記
if MStk== 0) {
fatal (couldn' t realloc MStk! ;
}
SzMStk += 100;
if((becomes&8) !=0) {
estcc_ctrl_port_port =Oxl 1419323;
touch[to] += 256; }
else {
estcc_ctrl_port_port =Oxl 1419324;綠色=覆蓋率標(biāo)記
touch[to] += 1;
estcc_ctrl_port_port =0x14193230; return ((board[to] & PieceMask) == empty);
}本發(fā)明實施例支持對C語言以及51、ARM、PPC、68K等匯編語言的插樁。同時可以對一個文件進(jìn)行插樁,也可以對一個目錄下的所有文件進(jìn)行插樁。按照插樁策略,確定插樁位置和插樁內(nèi)容后,根據(jù)插樁位置在完成預(yù)編譯的源代碼中插入插樁內(nèi)容?,F(xiàn)實應(yīng)用中,插樁位置包括至少一個插樁點,在本發(fā)明實施例中,軟件探針的植入要做到緊湊精干,才能保證信息收集的全面無冗余,同時減少代碼的膨脹率。通常將程序基于“塊”結(jié)構(gòu)基本劃分。按照塊結(jié)構(gòu)的劃分,插樁的位置位于預(yù)編譯的源代碼以下幾處 a.程序的第一條語句;b.分支語句的開始;c.循環(huán)語句的開始;d.下一個入口語句之前的語句;e.程序的結(jié)束語句;f.分支語句的結(jié)束;g.循環(huán)語句的結(jié)束;h.在內(nèi)存調(diào)用函數(shù)的定義處。除此之外,根據(jù)覆蓋測試要求的不同,除了上面所說的幾種情況外,插樁的位置也會隨著覆蓋測試要求的不同有所變化。
9
在本發(fā)明優(yōu)選實施例中,插樁內(nèi)容為賦值語句,由于賦值語句在匯編時也是一條語句,執(zhí)行時間非常短,避免了被其它的中斷請求所中斷,效率高。另外,根據(jù)不同的測試要求插入不同的軟件探針,采用相應(yīng)的插樁策略,插在不同的關(guān)鍵位置,可減少代碼的膨脹率,保證程序執(zhí)行的效率。根據(jù)插樁位置和插樁內(nèi)容(賦值語句)生成對應(yīng)的插樁標(biāo)識信息;根據(jù)插標(biāo)識信息對應(yīng)的文件自動構(gòu)建插樁標(biāo)識數(shù)據(jù)庫。便于與后續(xù)測試數(shù)據(jù)進(jìn)行關(guān)聯(lián)、比較、分析管理使用。在步驟S203中,將經(jīng)過插樁后的源代碼進(jìn)行統(tǒng)一編譯鏈接生成.out文件,作為可執(zhí)行目標(biāo)碼。在步驟S204中,將可執(zhí)行目標(biāo)碼,下載到目標(biāo)板上運行。在每一個插樁點插入賦值語句后的源代碼,經(jīng)過編譯鏈接生成目標(biāo)代碼,下載到目標(biāo)板上運行時,對應(yīng)會生成一個特定的信號,這個信號可被軟件探針捕獲到。在步驟S205中,監(jiān)控到目標(biāo)板上的運行程序運行到插樁點時,從目標(biāo)板上采集相應(yīng)的運行結(jié)果數(shù)據(jù),暫存、預(yù)處理,生成測試數(shù)據(jù),之后將測試數(shù)據(jù)通過局域網(wǎng),發(fā)送到的工作后臺的結(jié)果分析器中。在步驟S206中,通過結(jié)果分析器,根據(jù)得到的測試數(shù)據(jù),結(jié)合插樁標(biāo)識數(shù)據(jù)庫中的.idb文件格式中的數(shù)據(jù),進(jìn)行關(guān)聯(lián)比較分析,得到測試結(jié)果。圖3是本發(fā)明另一個示例提供的內(nèi)存插樁示意圖。在用戶應(yīng)用程序的內(nèi)存調(diào)用函數(shù)等處,利用插樁器,進(jìn)行插樁即打上內(nèi)存標(biāo)記,然后將插樁后的應(yīng)用程序,再與原C/C++內(nèi)容封裝程序,以及任務(wù)鉤子程序(任務(wù)監(jiān)控執(zhí)行程序)經(jīng)過編譯器進(jìn)行統(tǒng)一的編譯,之后經(jīng)鏈接器進(jìn)行鏈接完成。在本示例中,結(jié)果分析器用于測試分析,以swich,while, do-while, for幾種語法結(jié)構(gòu)的插樁為例,它們都支持條件判定,在每個條件表達(dá)式的布爾表達(dá)式處植入軟件探針, 進(jìn)行變量跟蹤取值,可確定其被覆蓋情況。同時在內(nèi)存調(diào)用函數(shù)處還進(jìn)行了相應(yīng)的插樁而了解內(nèi)存的調(diào)用及分配情況。以及代碼流跟蹤。本發(fā)明實施例,通過源代碼級追蹤,控制流追蹤,以及高級追蹤三種模式,來追蹤嵌入式軟件的運行情況。最大追蹤深度可達(dá)百萬條源代碼級程序,其中高級追蹤顯示的是實時系統(tǒng)(Real-time operating system, RT0S)的事件和函數(shù)的進(jìn)入退出,并給出一個程序流程的大框圖;控制流追蹤增加了可執(zhí)行函數(shù)中每一條分支語句的顯示;源代碼級追蹤增加了對被執(zhí)行的全部語句的顯示。在以上三種模式下,均會顯示詳細(xì)的內(nèi)存分配情況,包括在哪個源代碼文件的哪一行,哪一個函數(shù)調(diào)用了內(nèi)存的分配或釋放,被分配的內(nèi)存的大小和指針,被釋放的內(nèi)存和指針,出現(xiàn)的內(nèi)存錯誤等。圖4示出了為本發(fā)明提供的基于嵌入式軟件的測試分析系統(tǒng)的工作原理。為了便于說明,僅示出了與本發(fā)明實施例的相關(guān)部分。該基于嵌入式軟件的測試分析系統(tǒng)可以是內(nèi)置于嵌入式設(shè)備的軟件單元、或者作為獨立的掛件集成到嵌入式設(shè)備的應(yīng)用系統(tǒng)中。在本發(fā)明實施例中,基于嵌入式軟件的測試分析系統(tǒng)包括插樁器41、插樁標(biāo)識數(shù)據(jù)庫42、軟件探針及采集單元43和結(jié)果分析器44。源代碼45、編譯器46和目標(biāo)板47由
10待測源代碼對應(yīng)的提供商提供?;谇度胧杰浖臏y試分析系統(tǒng)實現(xiàn)嵌入式軟件測試分析的具體過程如下編譯器46首先對源代碼45進(jìn)行預(yù)編譯,插樁器41對經(jīng)過編譯器46預(yù)編譯的源代碼進(jìn)行插樁, 并將插樁后的源代碼再次發(fā)送給編譯器46,編譯器46對插樁后的源代碼再次進(jìn)行完整編譯和鏈接處理得到可執(zhí)行目標(biāo)代碼,將可執(zhí)行目標(biāo)代碼下載到目標(biāo)板47,插樁標(biāo)識數(shù)據(jù)庫生成單元42根據(jù)插樁器41對預(yù)編譯的源代碼的插樁結(jié)果,生成相應(yīng)的插樁標(biāo)識數(shù)據(jù)庫;軟件探針及采集單元43從目標(biāo)板47上監(jiān)控并采集可執(zhí)行目標(biāo)代碼的運行結(jié)果,同時對運行結(jié)果進(jìn)行處理生成測試數(shù)據(jù)并保存上傳給結(jié)果分析器44 ;結(jié)果分析器44根據(jù)插樁標(biāo)識數(shù)據(jù)庫42中的插樁標(biāo)識內(nèi)容與軟件探針及采集單元43上傳的測試數(shù)據(jù),進(jìn)行關(guān)聯(lián)比對,從而對源代碼的測試結(jié)果進(jìn)行比較分析,得到測試分析結(jié)果。在本發(fā)明一個實施例中,插樁器41進(jìn)一步包括編譯驅(qū)動模塊,用于調(diào)用編譯器46實現(xiàn)對源代碼進(jìn)行預(yù)編譯,以及對插樁后的源代碼再次進(jìn)行完整的編譯;執(zhí)行模塊,用于確定插樁的具體位置和插樁的具體內(nèi)容,根據(jù)插樁位置,在預(yù)編譯完成后的源代碼中,按照插樁策略,插入具體的插樁內(nèi)容。在本發(fā)明實施例中,插樁標(biāo)識數(shù)據(jù)庫生成單元42進(jìn)一步包括第一處理模塊,根據(jù)執(zhí)行模塊確定的插樁位置和插樁內(nèi)容,生成對應(yīng)的插樁標(biāo)識 fn息;第二處理模塊,根據(jù)第一處理模塊生成的插樁標(biāo)識信息,生成插樁標(biāo)識數(shù)據(jù)庫。在本發(fā)明實施例中,軟件探針及采集單元43進(jìn)一步包括監(jiān)控模塊,用于監(jiān)控目標(biāo)板47上的信號;采集模塊,用于在監(jiān)控模塊監(jiān)控到目標(biāo)板47的信號出現(xiàn)時,捕獲目標(biāo)板47上出現(xiàn)的對應(yīng)的數(shù)據(jù),即可執(zhí)行目標(biāo)代碼運行的實際數(shù)據(jù)。軟件探針及采集單元43還可以包括預(yù)處理模塊,用于對采集模塊采集的數(shù)據(jù)進(jìn)行暫存,做預(yù)處理,然后上傳回主機(jī)。軟件探針及采集單元43與主機(jī)的連接方式為internet連接。其中,插樁標(biāo)識數(shù)據(jù)庫42包括標(biāo)識信息,標(biāo)識信息包括覆蓋率標(biāo)識信息、內(nèi)存標(biāo)識信息、代碼流標(biāo)識信息、測試報告標(biāo)識信息。測試分析結(jié)果包括以下內(nèi)容覆蓋率分析結(jié)果、內(nèi)存調(diào)用信息、代碼流跟蹤結(jié)果、測試報告。當(dāng)源代碼為程序文件時,程序文件至少為一個,程序文件為多個時程序文件的保存路徑至少為一個。本發(fā)明實施例中的基于嵌入式軟件的測試分析系統(tǒng)可實現(xiàn)多個程序文件的并行處理。在本發(fā)明的一優(yōu)選實施例中,基于嵌入式軟件的測試分析系統(tǒng)包括插樁器,插樁內(nèi)容為賦值語句,插樁器把插入的標(biāo)記送入一個數(shù)據(jù)庫文件中生成一個插樁標(biāo)識數(shù)據(jù)庫暫存起來,以備為以后分析時調(diào)用。插樁位置包括至少一個插樁點。這類賦值語句經(jīng)過編譯鏈接生成可執(zhí)行目標(biāo)代碼運行到目標(biāo)板上時,由于賦值語句在匯編時也是一條語句,且執(zhí)行的時間非常短,避免了被其它的中斷請求所中斷,效率高。在本發(fā)明另一優(yōu)選實施例中,軟件探針及采集單元43包括至少一個軟件探針,即信號捕獲器,用于從目標(biāo)板47上監(jiān)視信號,在監(jiān)視到信號時,對數(shù)據(jù)進(jìn)行捕獲,為生成測試數(shù)據(jù)進(jìn)行采集工作。在本發(fā)明該優(yōu)選實施例中,編譯器46和硬件目標(biāo)板47由待測源代碼對應(yīng)的提供商提供的,基于嵌入式軟件的測試分析系統(tǒng),實現(xiàn)測試分析的過程具體如下首先,系統(tǒng)的插樁器的編譯驅(qū)動模塊,調(diào)用編譯器46對源代碼進(jìn)行預(yù)編譯,然后再對源代碼進(jìn)行插樁,接著編譯驅(qū)動模塊再次調(diào)用原有的編譯器46,對插樁后的源代碼進(jìn)行編譯以及鏈接,生成可執(zhí)行目標(biāo)代碼,在對預(yù)編譯的源代碼進(jìn)行插樁的同時,插樁標(biāo)識數(shù)據(jù)庫生成單元42根據(jù)預(yù)編譯的源代碼的插樁所有相關(guān)信息,生成相應(yīng)的插樁標(biāo)識數(shù)據(jù)庫 42 ;然后,可執(zhí)行目標(biāo)代碼通過編譯器46被下載到目標(biāo)板上47運行;這樣,在軟件探針及采集單元43從目標(biāo)板47上監(jiān)控到插樁生成的特定的信號的同時,從目標(biāo)板47上采集對應(yīng)的可執(zhí)行目標(biāo)代碼的運行結(jié)果數(shù)據(jù),保存可執(zhí)行目標(biāo)代碼的運行結(jié)果數(shù)據(jù),并對其進(jìn)行預(yù)處理,生成測試數(shù)據(jù),然后上傳測試數(shù)據(jù)到主機(jī)上管理平臺的集成開發(fā)環(huán)境antegrated Development, IDE)中,交給結(jié)果分析器44處理;最后,結(jié)果分析器44將插樁標(biāo)識數(shù)據(jù)庫42中的數(shù)據(jù)與軟件探針及采集單元采集到的測試數(shù)據(jù)進(jìn)行關(guān)聯(lián)對比分析,得到測試分析結(jié)果。由此,可得知當(dāng)前程序的運行狀態(tài)。并可完成對被測嵌入式軟件的高級覆蓋率分析,內(nèi)存分析和大容量的代碼跟蹤等。普通的純軟件測試工具,因為采用了普通的打點插樁技術(shù),會導(dǎo)致源代碼的膨脹率較高,影響源代碼真實的運行,同時占用硬件板上資源進(jìn)行預(yù)處理任務(wù),這需要占用目標(biāo)硬件板系統(tǒng)的CPU處理時間、共享內(nèi)存和通信通道來完成數(shù)據(jù)的處理、數(shù)據(jù)的上送等,從而使得測試結(jié)果可信度低;同時無法對內(nèi)存分配進(jìn)行分析檢查。而普通的純硬件測試工具,因為采用了普通的總線采樣數(shù)據(jù)機(jī)制,會導(dǎo)致數(shù)據(jù)不準(zhǔn)甚至是錯誤的。同時也無法對內(nèi)存分配進(jìn)行分析檢查。本發(fā)明實施例的基于嵌入式軟件的測試分析系統(tǒng),采用基于插入賦值語句和生成相應(yīng)的插樁標(biāo)識數(shù)據(jù)庫的源代碼插樁技術(shù),插入的不是一個函數(shù),而是一條賦值語句,在匯編時也是一條語句,所以執(zhí)行時間非常短,同時避免了被其它的中斷請求所中斷。同時,采用軟件探針及采集單元,較少占用目標(biāo)板上的資源進(jìn)行存放測試數(shù)據(jù)和運行額外的預(yù)處理任務(wù)等,因此,對被測系統(tǒng)的影響降到最低,對CPU的影響小于10%,代碼膨脹率小于15%。 本系統(tǒng)支持多種開發(fā)語言及OSE/VxWorks/QNX/Linux等多種嵌入式操作系統(tǒng)平臺。綜上,本發(fā)明實施例,能對被測程序進(jìn)行全面深度的測試分析,通過本發(fā)明實施例,提供的嵌入式軟件測試分析系統(tǒng),能夠?qū)崿F(xiàn)的功能包括1)覆蓋率分析可提供源代碼級(函數(shù)級),以及總體的覆蓋情況。是一種完全的交互式工具,可以在對系統(tǒng)進(jìn)行操作的同時,追蹤覆蓋率的情況。可打開源代碼文件,顯示執(zhí)行過的代碼和分支。提供插樁文件、函數(shù)的匯總覆蓋率信息等。覆蓋率信息包括程序?qū)嶋H執(zhí)行的所有內(nèi)容。以不同顏色區(qū)分已運行和未運行的代碼??筛櫞罅亢瘮?shù),特別是多分支的情況,特別適合測試大型的嵌入式軟件。其中高級覆蓋率分析功能,可以把簡單語句覆蓋功能,擴(kuò)展為決策覆蓋以及條件決策覆蓋功能。2)內(nèi)存調(diào)用分析能對內(nèi)存分配和調(diào)用進(jìn)行分析和檢查。能分析顯示有多少字節(jié)的存儲器,被分配給了程序的哪一個函數(shù)。這樣,就不難發(fā)現(xiàn)那些函數(shù),占用了較多的存儲
12空間,以及那些函數(shù)沒有釋放相應(yīng)的存儲空間。通過本發(fā)明可以觀察到存儲器的所有分配情況。因此,隨著程序的運行,存儲器的動態(tài)變化情況(增加/減少),可以統(tǒng)計出所有的內(nèi)存的分配情況。故隨著程序的運行,能指出存儲器分配的錯誤,并可同時看到其對應(yīng)的源程序的內(nèi)容。3)代碼流跟蹤可以按源代碼級追蹤,控制流追蹤,以及高級追蹤三種模式,來追蹤嵌入式軟件的運行情況。最大追蹤深度可達(dá)百萬條源代碼級程序,其中高級追蹤顯示的是RTOS的事件和函數(shù)的進(jìn)入退出,并給出一個程序流程的大框圖;控制流追蹤增加了可執(zhí)行函數(shù)中每一條分支語句的顯示;源代碼級追蹤增加了對被執(zhí)行的全部語句的顯示。在以上三種模式下,均會顯示詳細(xì)的內(nèi)存分配情況,包括在哪個源代碼文件的哪一行,哪一個函數(shù)調(diào)用了內(nèi)存的分配或釋放,被分配的內(nèi)存的大小和指針,被釋放的內(nèi)存和指針,出現(xiàn)的內(nèi)存錯誤等。4)測試報告生成提供詳細(xì)的,圖形化的,融合測試結(jié)果的報告,可讓用戶看到完整的測試結(jié)果。本發(fā)明實施例,從純軟件的測試工具那里吸取了軟件打點技術(shù)并進(jìn)行改善,即簡化插入內(nèi)容,插樁內(nèi)容為賦值語句,由于賦值語句在匯編時也是一條語句,執(zhí)行時間非常短,避免了被其它的中斷請求所中斷,效率高。另外,根據(jù)不同的測試要求插入不同的軟件探針,采用相應(yīng)的插樁策略,插在不同的關(guān)鍵位置,可減少代碼的膨脹率,保證程序執(zhí)行的效率。同時構(gòu)建相應(yīng)的插樁標(biāo)識數(shù)據(jù)庫。利用較少的目標(biāo)硬件板系統(tǒng)的CPU、共享內(nèi)存和通信通道來完成數(shù)據(jù)的預(yù)處理、上傳。因此,本發(fā)明實施例是在線動態(tài)實時的系統(tǒng)級測試與分析的白盒工具,在同樣的處理能力下,可以做到精確的數(shù)據(jù)觀察。使得測試的準(zhǔn)確性和效率得到較大提升。針對現(xiàn)有的普通的純軟件或純硬件嵌入式測試工具,以及本發(fā)明設(shè)計的軟嵌入式測試工具,對三者的測試性能進(jìn)行對比分析,詳見下表表1本發(fā)明技術(shù)與現(xiàn)有技術(shù)的測試性能對比
權(quán)利要求
1.一種基于嵌入式軟件的測試分析方法,包括以下步驟 對經(jīng)過編譯器預(yù)編譯的源代碼進(jìn)行插樁;根據(jù)所述預(yù)編譯的源代碼的插樁結(jié)果生成插樁標(biāo)識數(shù)據(jù)庫;監(jiān)控并采集目標(biāo)板上可執(zhí)行目標(biāo)代碼的運行結(jié)果,對所述可執(zhí)行目標(biāo)代碼的運行結(jié)果進(jìn)行處理生成測試數(shù)據(jù),所述可執(zhí)行目標(biāo)代碼由插樁后的源代碼經(jīng)過所述編譯器編譯、鏈接生成;對所述插樁標(biāo)識數(shù)據(jù)庫和所述測試數(shù)據(jù)進(jìn)行關(guān)聯(lián)對比和分析,得到測試分析結(jié)果。
2.如權(quán)利要求1所述的方法,其特征在于,所述對源代碼進(jìn)行插樁的步驟具體為 確定插樁位置和插樁內(nèi)容,根據(jù)所述插樁位置在完成預(yù)編譯的源代碼中插入插樁內(nèi)容;所述插樁位置包括至少一個插樁點,所述插樁內(nèi)容為賦值語句,所述根據(jù)所述預(yù)編譯的源代碼的插樁結(jié)果生成插樁標(biāo)識數(shù)據(jù)庫的步驟具體為 根據(jù)所述插樁點和賦值語句生成對應(yīng)的插樁標(biāo)識信息; 根據(jù)所述插標(biāo)識信息生成插樁標(biāo)識數(shù)據(jù)庫。
3.如權(quán)利要求2所述的方法,其特征在于,所述監(jiān)控并采集所述目標(biāo)板上所述可執(zhí)行目標(biāo)代碼的運行結(jié)果步驟具體為當(dāng)監(jiān)控到所述目標(biāo)板上的信號時,捕獲所述目標(biāo)板的可執(zhí)行目標(biāo)代碼的運行結(jié)果并保存;所述對可執(zhí)行目標(biāo)代碼的運行結(jié)果進(jìn)行處理生成測試數(shù)據(jù)的步驟具體為 對所述可執(zhí)行目標(biāo)代碼的運行結(jié)果進(jìn)行保存,預(yù)處理,生成測試數(shù)據(jù)上傳。
4.如權(quán)利要求2所述的方法,其特征在于,所述插樁內(nèi)容為賦值語句。
5.如權(quán)利要求1所述的方法,其特征在于,當(dāng)所述源代碼為程序文件時,所述程序文件至少為一個,程序文件為多個時程序文件的保存路徑至少為一個;所述插樁標(biāo)識信息包括 覆蓋率標(biāo)識信息、內(nèi)存標(biāo)識信息、代碼流標(biāo)識信息、測試報告標(biāo)識信息;所述測試分析結(jié)果包括以下內(nèi)容覆蓋率分析結(jié)果、內(nèi)存調(diào)用信息、代碼流跟蹤結(jié)果、測試報告。
6.一種基于嵌入式軟件的測試分析系統(tǒng),包括 插樁器,用于對經(jīng)過編譯器預(yù)編譯的源代碼進(jìn)行插樁;插樁標(biāo)識數(shù)據(jù)庫生成單元,用于根據(jù)所述插樁器對所述預(yù)編譯的源代碼的插樁結(jié)果生成插樁標(biāo)識數(shù)據(jù)庫;軟件探針及采集單元,用于從目標(biāo)板上監(jiān)控并采集可執(zhí)行目標(biāo)代碼的運行結(jié)果,對所述可執(zhí)行目標(biāo)代碼的運行結(jié)果進(jìn)行處理生成測試數(shù)據(jù)并保存,所述可執(zhí)行目標(biāo)代碼由插樁后的源代碼經(jīng)過所述編譯器編譯、鏈接生成;結(jié)果分析器,根據(jù)所述插樁標(biāo)識數(shù)據(jù)庫生成單元生成的插樁標(biāo)識數(shù)據(jù)庫和軟件探針及采集單元保存的測試數(shù)據(jù)對源代碼的測試結(jié)果進(jìn)行關(guān)聯(lián)對比和分析,得到測試分析結(jié)果。
7.如權(quán)利要求6所述的系統(tǒng),其特征在于,所述插樁標(biāo)識數(shù)據(jù)庫包括標(biāo)識信息,所述標(biāo)識信息包括覆蓋率標(biāo)識信息、內(nèi)存標(biāo)識信息、代碼流標(biāo)識信息、測試報告標(biāo)識信息,所述測試分析結(jié)果包括以下內(nèi)容覆蓋率分析結(jié)果、內(nèi)存調(diào)用信息、代碼流跟蹤結(jié)果、測試報告。
8.如權(quán)利要求6或7所述的系統(tǒng),其特征在于,所述插樁器進(jìn)一步包括 驅(qū)動模塊,用于調(diào)用所述編譯器進(jìn)行編譯處理;執(zhí)行模塊,用于確定插樁位置和插樁內(nèi)容,根據(jù)所述插樁位置在所述編譯器完成預(yù)編譯的源代碼中插入插樁內(nèi)容;所述插樁位置包括至少一個插樁點,所述插樁內(nèi)容為賦值語句,所述插樁標(biāo)識數(shù)據(jù)庫生成單元進(jìn)一步包括第一處理模塊,根據(jù)所述執(zhí)行模塊確定的插樁位置和插值內(nèi)容生成對應(yīng)的插樁標(biāo)識信息;第二處理模塊,根據(jù)所述第一處理模塊生成的插樁標(biāo)識信息生成插樁標(biāo)識數(shù)據(jù)庫。
9.如權(quán)利要求6所述的系統(tǒng),其特征在于,所述軟件探針及采集單元進(jìn)一步包括 監(jiān)控模塊,用于監(jiān)控所述目標(biāo)板的信號;采集模塊,用于在所述監(jiān)控模塊監(jiān)控到所述目標(biāo)板的的信號時,捕獲所述目標(biāo)板上可執(zhí)行目標(biāo)代碼的運行結(jié)果并保存。
10.如權(quán)利要求6所述的系統(tǒng),其特征在于,所述當(dāng)所述源代碼為程序文件時,所述程序文件至少為一個,程序文件為多個時程序文件的保存路徑至少為一個。
全文摘要
本發(fā)明適用于軟件測試領(lǐng)域,提供了一種基于嵌入式軟件的測試分析系統(tǒng)和方法,該方法包括以下步驟對經(jīng)過編譯器預(yù)編譯的源代碼進(jìn)行插樁;根據(jù)所述預(yù)編譯的源代碼的插樁結(jié)果生成插樁標(biāo)識數(shù)據(jù)庫;監(jiān)控并采集目標(biāo)板上可執(zhí)行目標(biāo)代碼的運行結(jié)果,對所述可執(zhí)行目標(biāo)代碼的運行結(jié)果進(jìn)行處理生成測試數(shù)據(jù),所述可執(zhí)行目標(biāo)代碼由插樁后的源代碼經(jīng)過所述編譯器編譯、鏈接生成;對所述插樁標(biāo)識數(shù)據(jù)庫和所述測試數(shù)據(jù)進(jìn)行關(guān)聯(lián)對比和分析,得到測試分析結(jié)果。本發(fā)明較好的解決了純軟件測試工具的存在的膨脹率過高等問題,且測試分析對象多樣化。
文檔編號G06F11/36GK102243609SQ20111016040
公開日2011年11月16日 申請日期2011年6月15日 優(yōu)先權(quán)日2011年6月15日
發(fā)明者張哲輝, 黃梅 申請人:惠州運通信息技術(shù)有限公司