2009-08-18 103 views
4

目前,我們的一個生產系統由1986年至今編寫的3000多個程序處理。代碼庫以非標準語言編寫,很不幸缺乏現代測試工具。爲了提高我們的代碼質量,我一直在努力整合流程和構建工具,以改進開發和測試。我只是完全使用了一個在線覆蓋工具,這樣我們可以在開發過程中幫助識別死代碼+未經測試的代碼。編寫路徑覆蓋工具

現在,我想開始將工作路徑覆蓋添加到工具。

我該怎麼辦?

鑑於:

1)線覆蓋工具用作預處理器,其注入代碼
2)我已經有收集統計​​餘集的功能,在所述代碼。

程序執行時應該記錄哪些數據,以及如何解釋?

如何通過HTML表示結果?

我已經閱讀了關於Java的How to get started 「writing」 a code coverage tool?這個問題,但它沒有幫助(包括論文「簡化任意語言的分支覆蓋」)。

在此先感謝您提供的任何指導!

+1

你有沒有看過這本書,「有效地使用遺留代碼」呢? – 2009-08-18 21:17:35

+1

我很好奇你爲什麼要路徑覆蓋。我一直致力於符合FAA的滿意度的航空電子設備(DO-178b僅B級和C級,從未達到A級),我們只做了聲明報道。如果您已經致力於高質量的單元測試(即:一位優秀的工程師會編寫出好的測試(即使沒有覆蓋工具),但是一個壞的工程師也不會(即使覆蓋率工具告訴他們他們的測試是有缺陷的))。當然有些時候,覆蓋工具會提示你寫一個你不知道需要寫的測試,但這似乎很少見。 – KeyserSoze 2009-08-18 21:22:12

+0

@Robert。直到現在。 @keysersoze。聲明的報道本身並不接近削減它。由於具體的,未經測試的條件組合,我們有很多生產中的代碼失敗的例子。此外,當前代碼庫的性質排除了自動化單元測試。路徑測試不僅可以作爲發現我們沒有想過測試的工具的工具,還可以驗證手動測試是否已經實際執行。我有沒有提到它是幾乎沒有文檔的代碼,包括我們應該測試的內容? – 2009-08-18 22:19:42

回答

3

要做路徑覆蓋,您需要以某種方式獲取程序控制流。一個顯而易見的方法是構造一個真正的控制流圖,然後遍歷它的各個段以挑選出要在路徑覆蓋率分析中使用的「路徑片段」(例如基礎路徑)。 (您可以嘗試通過黑客入侵源代碼來做到這一點,但您很可能會失敗; 解析和流分析過於複雜)。

參見What's the point of basis path coverage? 關於基礎路徑的一個很好的stackoverflow討論。

要實現所需的路徑覆蓋工具,您可能需要完全解析完整的遺留語言。對於3000個程序和強大的測試需求,使用工業強度分析器和基礎設施來做到這一點是有道理的。

我們DMS Software Reengineering Toolkit可以用來構建不僅解析器,但控制流分析收集路徑覆蓋數據所需的儀器。 (如果你想做的只是收集分支機構覆蓋數據,那麼「任意語言的分支覆蓋率」就表明了這一點,但除了解析以外,還有更多關於DMS的內容)。 DMS也支持構建控制(和數據流)圖,如果你需要它們, 正如你在這種情況下明顯做的那樣;見DMS constructed control flow graphs

DMS已被用於爲C,Java和COBOL構建控制和數據流分析器,並且已被用於構建30多種語言的解析器。如果你認真對待這件事,它可以處理你的遺留語言。

編輯10/31/2011:DMS現在可以爲C++計算控制流,因此它將成爲C++路徑覆蓋工具的良好基礎。

3

路徑覆蓋測量是一個棘手的問題。首先,你必須首先明確你的意思。一個循環執行了三次與循環執行四次不同的路徑嗎?如果是這樣,你有無數的路徑。如果不是,即使覆蓋了所有路徑,也會丟失測試用例。

這可能是更好的下一步是分支覆蓋:測量是否每個條件都執行true和false。這可以通過記錄行號序列來完成。