2010-07-23 154 views
25

我注意到,雖然我有很多的doctests在我們的Python代碼,當我使用這裏描述的方法跟蹤測試:確保單元測試中的代碼覆蓋率?

traceit

我發現有一些是某些代碼行從未執行過。我目前正在篩查traceit日誌以確定永遠不會運行的代碼塊,然後嘗試提出不同的測試用例來鍛鍊這些特定的塊。正如你可以想象的那樣,這是非常耗時的,我想知道我們是否正在做這個錯誤的方式,以及你們是否有其他的建議或建議來處理這個問題,我相信,隨着軟件變得越來越普遍足夠複雜。

回答

28

coverage.py是一個非常方便的工具。除其他外,它提供了branch coverage

+11

如果您提供了一個關於如何使用coverage.py的簡短例子,這個答案會更有用。 – SimplyKnownAsG 2015-04-10 15:34:29

+6

@SimplyKnownAsG鏈接的頁面有一個快速啓動部分正面和中心,幷包含示例用法。而不是複製和粘貼隨着新版本發佈而變化的文檔,我發現最好只是鏈接。 – 2015-04-10 19:17:21

+1

如何使用'coverage.py':https://github.com/audreyr/how-to/blob/master/python/use_coverage_with_unittest.rst – dm295 2017-03-14 15:58:14

18

你有沒有從管理層的授權中獲得100%的代碼覆蓋率以及你的測試用例?如果沒有,你是否認爲觸摸每一行代碼是在代碼中查找錯誤的最有效方法?假設你沒有無限的時間和人力資源,那麼你應該專注於合理地測試所有非平凡的代碼,重點是開發人員知道編寫或容易出錯的部分。

儘管代碼覆蓋率很高,因爲您肯定不能說一段代碼被測試,直到它被觸摸,我只是不等同觸摸一段代碼來調用它測試。我並不反對代碼覆蓋率,但它很容易落入使用代碼覆蓋率作爲知道測試完成時的指標。我認爲這是一個錯誤。

+7

這是一個很好的評論。在我的情況下,我們有科學家,而不是程序員,編寫Python代碼。因此,即使科學家非常聰明,代碼的構建也很糟糕。這意味着最終的整合和測試是一場噩夢,我們必須努力工作才能在這個階段發現嚴重問題。我試圖讓他們爲每個負責的代碼編寫更好的測試用例,並且我打算使用代碼覆蓋作爲驗證他們集成的測試的一種方式。我可以理解,不是100%的代碼需要被觸及,但它會有所幫助。 – reckoner 2010-07-23 23:40:01

+0

擁有100%的覆蓋率並不能保證有足夠的測試,但沒有足夠的測試通常表示沒有足夠的測試。我們也不要忘記,coverage模塊允許評論,如'#pragma:no cover'和'#pragma:no branch'。 – 2017-03-30 14:02:41

相關問題