2012-07-19 283 views
1

任何人都可以請告訴我如何在ARM處理器上執行代碼覆蓋率分析嗎?BullsEye代碼覆蓋範圍

我可以通過編寫測試用例並在我的計算機上運行測試用例來進行代碼覆蓋率分析,但可以在目標設備(arm處理器)上安裝代碼覆蓋率工具來執行覆蓋率分析,而代碼在手臂處理器上運行?

這樣可以節省很多時間,因爲我不會爲嵌入式C代碼中涉及的所有函數和條件明確編寫測試用例。

+1

所以你的問題沒有什麼特別與「牛眼」有關。 – 2012-07-19 12:19:10

+1

......您如何避免爲嵌入式程序中的「所有功能和條件」編寫測試用例? *您在哪裏測試該程序不會改變您必須測試的內容。 – 2012-07-19 12:21:30

+0

不,它確實與BullsEye有關,因爲它是我用於脫離目標測試環境的代碼覆蓋工具。如果我可以在目標測試期間將其整合,我將能夠實時測試覆蓋率,而無需編寫測試案例,我可以模擬實時場景。 – gmish27 2012-07-19 15:43:11

回答

2

我沒有具體的手臂經驗。我有經驗(作爲嵌入式測試覆蓋工具的設計者)如何在嵌入式系統中收集測試覆蓋率數據。

您需要:

  • 一個工具,它收集運行測試覆蓋率數據在一個緊湊的格式,以簡單和容易定位結構,嵌入式系統。
  • 一些額外的空間在您的嵌入式系統,足以容納運行時測試覆蓋率數據。在一些空間有限的嵌入式系統中,這可能是一個問題。
  • 一種導出機制,可以在方便的時刻將數據從嵌入式系統複製到開發系統。
  • 在工具的導入機制,可以接受這樣的出口數據

有了這三個要素,你現在可以收集測試覆蓋率數據:

  1. 儀器,你的代碼的基礎上開發系統並編譯它。
  2. 將目標文件導出到嵌入式系統。
  3. 運行嵌入式應用程序,執行測試以任何方式您認爲合適的
  4. 出口的覆蓋率數據開發系統
  5. 導入到測試覆蓋率工具來解釋結果。

我不能說「牛眼」,它確實會做某種儀器。我們的Test Coverage tools涵蓋了各種語言(Java,C,C#,C++等),並具有所有必需的屬性(儘管我無法想象嵌入式PL/SQL應用程序!)。

我們的工具將測試覆蓋數據存儲爲緊密排列的布爾型字節/位矢量(您爲C和C++選擇,其他語言的字節矢量)的密集塊。這可以最大限度地減少嵌入式系統上的額外存儲需求。即使這樣做太多了,我們的工具也可以讓您收集應用程序中較小部分的測試覆蓋率數據,並將結果組合起來,爲整個嵌入式應用程序提供測試覆蓋率。您可以作爲折衷運行多次測試,但您至少可以做到這一點,而腳本可以幫助緩解步驟的乏味。

我們並不規定如何從嵌入式系統導出測試覆蓋矢量(TCV),因爲這會限制我們的工具可以處理的系統。我們提供了一個「標準」導出功能,只需將矢量塊直接寫入開發系統磁盤文件;在開發系統本身進行測試覆蓋收集時(如您已經表明您已經在某種程度上已經在做),那麼該出口系統將保持不變。導出功能被添加到,編譯/鏈接到檢測的應用程序以啓用使用。通常在程序退出時調用它,但是您可以在應用程序的任何方便的位置調用它,包括由外部事件觸發的點。該工具包含一個交互式組件,它將讀取這些文件並構造摘要報告,並以交互方式向您展示哪些代碼已被執行/未執行。

在嵌入式上下文中,使用您自己的替換導出函數。它只有大約50行代碼,所以沒有太多可替代的東西。在大多數嵌入式系統中,都有可用的額外I/O端口(並行輸出位,串行端口,您將其命名);一個代碼將檢測二進制測試覆蓋數據的例程編碼到該輸出位。任何嵌入式工程師都可以編寫一個位串行器或一個發送字節到串行端口的代碼塊,而不會有任何問題。此時,測試覆蓋數據可以從嵌入式系統輸出。 如果您的嵌入式系統具有文件系統,那麼對代碼所做的更改如果不是不存在,那麼也是微不足道的。

最後一步是以捕獲這個比特流。這需要在開發系統上構建一個定製程序,該程序讀取一些可用的硬件輸入(串行端口很容易找到,因此很受歡迎),並在內存中重新生成測試覆蓋率數據的位圖。可以通過稍微更改將默認導出功能複製到自定義程序中,以將此數據移動到磁盤文件。在這一步之後,測試覆蓋交互組件可以讀取覆蓋數據;它並不關心它來自哪裏。

因此,通過一些自定義的導出過程,您可以在幾乎任意的嵌入式上下文中使用我們的工具。 (我們有一位客戶用它來測試嵌入在筆記本電腦電池中的微處理器!)。需要花費大約一天的時間,一名有能力的嵌入式工程師可以調整導出功能的嵌入式版本以及開發系統駐留部分,然後您可以收集測試內容以查看您心中的內容。我們的客戶已經使用我們的C,C++,C#和Java測試覆蓋工具在嵌入式系統上實現了這項技術。