基于jtag調試方式實現通用型目標碼覆蓋率測試系統和測試方法
【技術領域】
[0001]本發明涉及一種測試系統和測試方法,具體地,涉及一種基于JTAG調試方式實現通用型目標碼覆蓋率測試系統和測試方法。
【背景技術】
[0002]嵌入式程序往往具有高可靠性和穩定性的特點,因此需要對嵌入式程序進行嚴格的測試,確定程序代碼的覆蓋率是否達到要求,如代碼覆蓋率、分支覆蓋率和調用覆蓋率。
[0003]目前確定嵌入式程序覆蓋率的方法一般是通過修改嵌入式程序源代碼,在源代碼中植入探針代碼,重新編譯并執行嵌入式程序,然后通過分析探針的輸出結果來確定該嵌入式程序的各種代碼覆蓋率。現有方案因為要在源代碼中植入探針代碼,必然導致嵌入式程序目標代碼的膨脹,而嵌入式設備的存儲空間往往是非常有限的,可能會無法容納膨脹后的程序代碼,并且因為探針的存在,可能無法反映目標代碼的真實執行情況。
【發明內容】
[0004]針對現有技術中的缺陷,本發明的目的是提供一種基于JTAG調試方式實現通用型目標碼覆蓋率測試系統和測試方法,其不需要對嵌入式程序的源碼進行插粧,不改變被測程序的源代碼的程序結構,目標代碼不會產生膨脹。另外,不修改嵌入式程序的二進制目標代碼的程序結構,直接測試運行于嵌入式設備上的程序代碼,確保被測代碼和最終代碼完全一致,可以反映目標代碼的真實執行情況。
[0005]根據本發明的一個方面,提供一種基于JTAG調試方式實現通用型目標碼覆蓋率測試系統,其特征在于,包括:
[0006]覆蓋率監控模塊,用于對目標代碼進行分析處理,劃分指令執行單元,驅動測試正常執行和生成測試結果;
[0007]測試執行控制模塊,用于接收覆蓋率監控模塊的指令并轉換為JTAG命令,控制被測件執行相應的指令并返回指令執行結果。
[0008]優選地,所述測試執行控制模塊由帶有JTAG功能的仿真器組成。
[0009]優選地,所述測試執行控制模塊通過網絡與覆蓋率監控模塊連接。
[0010]優選地,所述覆蓋率監控模塊包含五個子模塊:代碼分析模塊、代碼管理模塊、運行控制模塊、結果整合模塊和報告生成模塊;其中,代碼分析模塊用于對被測目標代碼進行反匯編,解析指令類型,分析每條指令之間的邏輯關系,并根據指令間的邏輯關系劃分指令執行單元,在每個指令執行單元設置一個或多個程序斷點,并根據程序的實際執行過程調整斷點的設置;代碼管理模塊用于管理被測代碼,解析與被測代碼相關的符號信息,必要時建立被測二進制代碼與源代碼之間的關聯關系,維護被測二進制程序、符號信息和源代碼之間的關聯關系,并通過匯編、混合匯編等方式展現被測程序的內容;運行控制模塊用于管理與測試執行模塊之間的通信,管理并驅動被測代碼的執行,標記當前斷點觸發的指令地址,根據觸發斷點的位置重新調用代碼分析模塊對當前代碼塊進行分析,調整斷點的設置位置,調整程序執行方式,讓被測程序走單步或者運行;結果整合模塊用于被測程序的執行結果進行整理,根據代碼分析模塊劃分的指令執行單元和運行控制模塊在被測程序執行過程中所標記的斷點執行位置,分析被執行過的指令單元,整理出被執行過的代碼塊、分支執行情況和函數調用執行情況,計算語句覆蓋率、分支覆蓋率、調用覆蓋率和MCDC覆蓋率;報告生成模塊用于將測試結果生成各種格式的測試報告,根據用戶設置和測試報告模板,將測試結果生成html報告、pdf報告等常見格式的報告文件,便于用戶對測試結果進行管理。
[0011]優選地,所述測試執行控制模塊包含通信控制模塊和JTAG執行模塊兩個子模塊;通信控制模塊通過網絡與上述運行控制模塊連接并接收運行控制模塊的指令信息,控制指令執行流程、解析指令內容并反饋指令執行結果;JTAG執行模塊通過JTAG數據線直接連接嵌入式被測設備的JTAG接口,將通信控制模塊的指令轉換為JTAG命令,驅使被測設備執行該JTAG命令并反饋命令執行結果給通信控制模塊。
[0012]本發明還提供一種基于JTAG調試方式實現通用型目標碼覆蓋率測試方法,其特征在于,包括以下步驟:
[0013]步驟一:建立與JTAG仿真器的連接,加載被測程序的二進制代碼,對被測程序進行反匯編處理,分析被測范圍內各條指令的指令類型;
[0014]步驟二:加載并解析與被測程序相關的符號信息,管理被測程序與符號信息、源代碼之間的關聯關系,通過符號窗口、匯編窗口、混合匯編等窗口展示被測程序內容,讓用戶選擇覆蓋率監控范圍;
[0015]步驟三:根據上述步驟的執行結果,對監控范圍內的指令依據某種策略劃分指令執行單元,在每個指令執行單元設置一個或若干個程序斷點;
[0016]步驟四:通過JTAG仿真器下載被測程序,將步驟三中每個指令單元中設置的程序斷點設置到被測嵌入式設備中,復位被測嵌入式設備;
[0017]步驟五:利用JTAG仿真器,驅動程序走單步或者運行,走單步停止或者觸發斷點后對該指令地址進行標記,計算出當前的指令覆蓋、分支覆蓋、調用覆蓋和MC/DC等覆蓋率數據;
[0018]步驟六:依據當前指令執行情況和程序PC所在的指令地址,對后續指令進行分析,移除某些斷點或設置新的軟件斷點,調整驅動方式和驅動策略;
[0019]步驟七:重復步驟五和步驟六,直到程序運行到目標地址或者被用戶終止運行;
[0020]步驟八:整理程序執行結果,依據被測程序執行過程中所觸發的程序斷點的位置和步驟三種劃分的指令執行單元,分析每個指令執行單元的語句、分支、調用、MCDC等執行情況;
[0021]步驟九:匯總步驟八中每個指令執行單元的執行情況,統計出整個被測范圍的指令語句覆蓋率、分支覆蓋率、調用覆蓋率和MCDC覆蓋率;
[0022]步驟十:根據用戶設置和用戶自定義的測試報告模板,將步驟九中整理的測試結果生成測試報告,同時以其它方式展示目標代碼實際執行情況。
[0023]與現有技術相比,本發明具有如下的有益效果:本發明可以采用不插粧,不在被測程序中植入探針的方式測試嵌入式程序的語句、分支、調用和MC/DC等覆蓋率信息。本發明不改變被測目標代碼的程序邏輯和程序結構,被測目標代碼不會產生代碼膨脹,同時可以更真實地反映被測程序在被測設備上的運行情況。
【附圖說明】
[0024]通過閱讀參照以下附圖對非限制性實施例所作的詳細描述,本發明的其它特征、目的和優點將會變得更明顯:
[0025]圖1為本發明基于JTAG調試方式實現通用型目標碼覆蓋率測試系統的簡易原理框圖。
[0026]圖2為本發明基于JTAG調試方式實現通用型目標碼覆蓋率測試系統的具體原理框圖。
【具體實施方式】
[0027]下面結合具體實施例對本發明進行詳細說明。以下實施例將有助于本領域的技術人員進一步理解本發明,但不以任何形式限制本發明。應當指出的是,對本領域的普通技術人員來說,在不脫離本發明構思的前提下,還可以做出若干變形和改進。這些都屬于本發明的保護范圍。
[0028]如圖1和圖2所示,本發明基于JTAG調試方式實現通用型目標碼覆蓋率測試系統包括:
[0029]覆蓋率監控模塊:本模塊用于對目標代碼進行分析處理,劃分指令執行單元,驅動測試正常執行和生成測試結果。本模塊包含五個子模塊:代碼分析模塊、代碼管理模塊、運行控制模塊、結果整合模塊和報告生成模塊;其中,代碼分析模塊用于對被測目標代碼進行反匯編,解析指令類型,分析每條指令之間的邏輯關系,并根據指令間的邏輯關系劃分指令執行單元,在每個指令執行單元設置一個或多個程序斷點,并根據程序的實際執行過程調整斷點的設置;代碼管理模塊用于管理被測代碼,解析與被測代碼相關的符號信息,必要時建立被測二進制代碼與源代碼之間的關聯關系,維護被測二進制程序、符號信息和源代碼之間的關聯關系,并通過匯編、混合匯編等方式展現被測程序的內容;運行控制模塊用于管理與測試執行模塊之間的通信,管理并驅動被測代碼的執行,標記當前斷點觸發的指令地址,根據觸發斷點的位置重新調用代碼分析模塊對當前代碼塊進行分析,調整斷點的設置位置,調整程序執行方式,讓被測程序走單步或者運行;結果整合模塊用于被測程序的執行結果進行整理,根據代碼分析模塊劃分的指令執行單元和運行控制模塊在被測程序執行過程中所標記的斷點執行位置,分析被執行過的指令單元,整理出被執行過的代碼塊、分支執行情況和函數調用執行情況,計算語句覆蓋率、分支覆蓋率、調用覆蓋率和MCDC覆蓋率;報告生成模塊用于將測試結果生成各種格式的測試報告,根據用戶設置和測試報告模板,將測試結果生成html報告、pdf報告等常見格式的報告文件,便于用戶對測試結果進行管理。
[0030]測試執行控制模塊:本模塊主要由帶有JTAG功能的仿真器組成,用于接收運行控制模塊的指令并轉換為JTAG命令,控制被測件執行相應的指令并返回指令執行結果。該模塊包含通信控制模塊和JTAG執行模塊兩個子模塊。通信控制模塊通過網絡與上述運行控制模塊連接并接收