2008-10-16 132 views
6

我最近開始研究一個非常大的C++項目,在完成90%的實現後,已經確定他們需要在測試期間展示100%的分支覆蓋率。該項目託管在一個嵌入式平臺上(Green Hills Integrity)。我正在尋找StackOverflow上的其他人在使用類似環境中的代碼覆蓋率產品時的建議和經驗。我對這些類型的工具有正面和負面評論感興趣。嵌入式C++項目的代碼覆蓋率分析

回答

5

100%分支機構覆蓋率?這是非常必要的,尤其是因爲某些分支(例如狀態機的case語句中的缺省值)應該無法運行。我希望有一些例外,如果沒有,你可能需要了解什麼覆蓋率測試可以和不能完成之前開始 - 否則你最終會拉你的頭髮,或更糟 - 給不正確的數據。

嵌入式系統的大多數覆蓋測試實際上是在PC上執行的。代碼被移植,微控制器的某些方面在軟件中被仿真,並且運行Bullseye或另一個類似的PC代碼覆蓋實用程序。這樣做的原因是,有太多的微控制器和編譯器/調試器/測試環境來爲每個開發代碼覆蓋工具。

當代碼覆蓋工具確實存在於特定的嵌入式平臺時,它們並不像爲PC平臺開發的那樣功能強大,可配置,易於使用且無bug。處理器通常不具備執行良好代碼覆蓋率所需的跟蹤功能(無需高端仿真硬件),而無需在您的固件中插入額外的調試代碼,因而會產生難以控制的後果和副作用,特別是在時序問題實時系統。只要你可以抽象出特定於硬件的代碼(因爲你正在使用C++,這應該很容易,對吧?; D),移植代碼並不是非常困難。您遇到的最大問題是類型,儘管在C++中指定的類型比在C中指定的類型仍然存在一些問題。確保你使用的是types.h或類似的設置來明確地告訴編譯器你使用的每種類型是什麼以及它應該如何解釋。

之後,你可以去鎮上測試PC上的核心邏輯。如果您有興趣開發所需的軟件仿真,您甚至可以測試低級硬件驅動程序,但時序問題可能會有些麻煩。

軟件測試工具(如MxVDev)爲您執行了很多微控制器仿真,並幫助解決了時序問題,但即使有這種幫助,您仍然有一些工作量。

如果您必須在系統本身上執行此操作,您需要爲具有覆蓋功能的處理器購買仿真器 - 這不是一個便宜的命題(許多仿真器對於全套工具和仿真硬件的花費高達3萬美元),但它是高可靠性環境中使用的衆多工具之一,例如汽車和航空航天工業。

-Adam

聲明:我爲產生MxVDev的公司工作。

+0

只是一張紙條,上面舷窗似乎並不支持格林希爾誠信的人正在考慮使用它。 – Gary 2010-05-12 11:29:14

2

與Adam一樣,我們將我們的嵌入式代碼移植到基於PC的線束上,並完成大部分的覆蓋和分析。我已經使用了AutomatedQA AQTime和Compuwares DevPartner,兩者都是好產品,

如果您必須進行coverage覆蓋,則需要使用覆蓋率分析器來創建源代碼的檢測版本。有這樣的商業和開源工具可以做到這一點,但海事組織,它增加了很多工作,沒有太大的收穫。

100%的覆蓋率是雄心勃勃的,因爲您需要大量的錯誤注入才能進入所有錯誤處理程序和異常處理程序。國際海事組織,這也比船上更容易做一個線束。

同樣值得指出的是,誰要求100%的代碼覆蓋範圍,100%的代碼覆蓋率絕不等於100%的測試覆蓋範圍。考慮例如以下功能;

int div(int a, int b) 
{ 
return (a/b); 
} 

100%的代碼覆蓋率只要求我們調用這個函數一次,100%的測試覆蓋率將需要更多的調用。我自己的測試戰略涉及開發自動化測試案例,使我獲得測試覆蓋範圍的可接受水平,並僅使用代碼覆蓋工具來幫助查找未經測試的區域。在一定程度上取決於您的測試預算;對我來說,100%的代碼覆蓋面對於它所提供的內容來說是昂貴的。

3

過去我們使用Cantatavectorcast進行單元測試和代碼覆蓋。我們也使用Greenhills工具,並且這兩種工具都與greenhills開發工具配合使用。我們在PPC仿真器上運行大部分測試,並通過JTAG窗口運行依賴目標硬件硬件的測試。Canatata和Vector cast與catata非常相似,使用起來稍微簡單一點,功能略多,但小額外功能在用戶體驗上有很大的不同。

一般來說,如果你想達到高水平的分支覆蓋率,你需要設計你的可測性代碼。測試得越多,您就可以學習更多關於編寫可測試代碼的知識。

我們也試過PC測試與嵌入式測試給我們帶來了一些問題,因爲它們存在永久性,但這只是硬件層的一個問題。

此外,這些工具已通過R​​TCA/DO-178B標準認證。

+0

+1 for cantata ...我們也必須使用它! – espais 2010-03-05 16:15:49

0

請參閱SD C++ Test Coverage。這是一個針對各種C++(ANSI,GNU,MS ...)方言的(分支)測試覆蓋工具系列,即使在實際的嵌入式系統硬件中,它也具有非常小的佔用空間,並且易於使用導出收集的測試覆蓋率數據的方式。有一個GUI覆蓋顯示不依賴於您的實際嵌入式硬件,這也會產生一個完整的覆蓋報告摘要。

[我在提供這些工具的公司的負責人。]