2010-05-11 52 views
8

是否有任何SW在C和嵌入式應用程序中生成單元測試?我問的原因是,我的老闆告訴我他從某人那裏聽說,「你需要一個工具來分析代碼並自動創建所有相關測試用例的80%,剩下的20%用於你所有的時間並專注於」,否則這將需要「太多時間」。C嵌入式自動單元測試生成

我對這個陳述非常懷疑,不能清楚地看到什麼樣的測試可以自動生成,以及它們是否會有所幫助。

但是,我可以看到它可以自動爲API生成接口單元測試:s。

那麼有人可以在這個問題上給我啓發嗎?

回答

5

你的老闆得到了錯誤的結局。

我知道沒有工具可以爲你生成單元測試。

他可能會誤解的是code coverageunit testing。雖然相關,他們實際上是分開的問題。

代碼覆蓋率將代表您的代碼,並且一旦完成運行,就可以降低運行中使用的源代碼的數量。這在單元測試時非常有用,因爲它可以有效地向您顯示測試的位置以及需要將工作重點放在哪裏。

獲得前三分之二的代碼是相當容易的,但收益遞減意味着接近100%的魔法需要花費大量的時間和精力。

+0

我只是看着微軟Pex。它似乎爲C#代碼生成接口測試。也許類似的C可能是一個很大的優勢? – Henrik 2010-05-11 12:22:19

+1

仍然看起來像Pex需要測試您的代碼以生成測試結果。 – 2010-05-11 12:29:30

1

谷歌搜索「單元測試生成器」發現了很多東西,但我不知道它們是否有什麼好處,或者它們是否適合您的情況。

它不是單元測試,但您可以使用lint或相關工具進行一些代碼檢查。見:http://www.lysator.liu.se/c/ten-commandments.html我認爲目前的開源工具是夾板http://www.splint.org/

喬恩本特利的書有一些很好的討論「腳手架」代碼的作用,包括測試腳手架。

0

我們在這裏使用CANtata這裏我工作產生單元測試/代碼覆蓋。它的體面,雖然我想它有點貴。

5

我建議API Sanity Checker工具:

的基本單元測試共享的C的自動生成器/ C++庫。它能夠爲參數生成合理的(大多數但不是全部)輸入參數數據,並通過分析報頭中的聲明爲API中的每個函數構造簡單(「完整」或「淺」質量)測試用例文件。

生成的測試質量允許在簡單用例中檢查是否存在嚴重錯誤。該工具能夠構建並執行生成的測試,並檢測崩潰(段錯誤),異常終止,各種發出的信號,非零程序返回碼和程序掛起。

獨特的功能:

  • 自動生成的輸入參數和測試數據(即使對於複雜的數據類型)
  • 現代specialized types代替夾具和模板

FreeType2見的例子。

enter image description here

我是這個項目的作者,你可以問我關於它的任何問題。

+0

[建議](http://stackoverflow.com/help/promotion)在SO答案中引用您自己的項目時披露您的聯屬關係。 – 2015-10-02 07:52:37

+2

@DmitryGrigoryev:已添加。謝謝。 – aponomarenko 2015-10-02 18:16:57

2

首先,單元測試和生成單元測試是什麼意思?

你的意思是生成一個框架,一個測試工具或者你的意思是用數據和數據檢查或斷言實際調用你的代碼來生成一個測試。而在後一種情況下,該測試如何產生?

更基本的是,你爲什麼要測試?您是否遵循了需要一定水平測試的標準,還是您只是想在後期開發中降低風險和成本?或者,也許你正在建立一個現有的系統,只是想確保你不會破壞任何現有的功能。

以前的答案提到了康塔塔,我們最近發佈了一個名爲'基準測試'的組件的新版本。這可能就是你正在尋找的東西。它將爲C代碼創建一組單元測試,其中包含可充分利用每個源文件的好機會的測試用例。該工具通過讀取源代碼並生成一組測試來實現這一目標,從而實現您希望的覆蓋目標 - 100%陳述,決策甚至MC/DC覆蓋。其目的是將您的源代碼「作爲基準」,作爲遺留系統持續開發的一部分,或者在功能或系統測試之後填補覆蓋空白。

Cantata++網頁的信息越多(免費評估)

0

是否有SW,生成用C單元測試和嵌入式應用?

是的。 IBM的Rational Test Realtime將是不錯的選擇。

分析代碼,並自動創建所有相關的測試用例的80%的工具

號沒有工具,可以爲所有類型的C源代碼做這項工作。

但是對於某些情況。例如,就我而言,我有大量的C源代碼需要客戶測試。但是因爲每個源文件都非常相似,所以我們製作一個小工具來讀取每個文件並生成測試用例(單元測試工具的腳本語言),然後由單元測試工具執行。是的,在這種情況下,它可以節省80%的工作量。

所以你可以考慮做到這一點,找出類似的源代碼,並使你自己的工具,可以生成相似的測試用例。