簡體   English   中英

如何生成浮點邏輯的良好代碼覆蓋?

[英]How to generate good code coverage of floating-point logic?

我正在手工制作新代碼。 我想確保我不遺余力。

除了指定代碼合同以指導Pex之外,我還能做些什么嗎?所以它在數字密集型代碼中產生了良好的覆蓋范圍?

嘗試在http://research.microsoft.com/en-us/projects/pex/pexconcepts.pdf中搜索關鍵字“float”以獲取一些背景信息。

浮點數的算術約束通過對有理數的轉換來近似,並且在Z3之外使用啟發式搜索技術來找到浮點約束的近似解。

...並且...

符號推理 Pex使用自動約束求解器來確定哪些值與測試和被測代碼相關。 但是,約束求解器的能力是,並且總是會受到限制。 特別是,Z3不能精確地推理浮點運算。

或者,您是否知道.NET下的工具更適合在.NET下查找數字異常的任務? 我知道http://fscheck.codeplex.com/但它不執行符號推理。

你想要什么好的報道? 只需要在一段代碼中運行每個分支的測試實際上不太可能意味着它是正確的 - 通常更多的是關於極端情況,並且您作為開發人員最好知道這些角落案例是什么。 它聽起來像只是說“這是一個有趣的輸入組合”,而你想要的更多可能是指定你想要看到的系統的行為 - 如果你在第一時間編寫錯誤的代碼然后有趣的話輸入可能與正確的代碼完全無關。

也許這不是您正在尋找的答案,但我想說最好的方法就是手工制作! 在開始編碼之前記下規范,並在知道/為您的類/子系統編寫API時將其轉換為大量測試用例。

當開始填寫API /編寫代碼時,你可能需要做一些額外的部分操作+找出困難的部分 - 如果你有條件等等你覺得有人重構你的代碼可能會出錯,然后寫一個涵蓋它們的測試用例。 我有時故意在這些點上編寫錯誤的代碼,然后進行測試失敗然后糾正它只是為了確保測試正在通過代碼檢查正確的路徑。

然后嘗試思考你可能沒有涵蓋的任何奇數值 - 負輸入,空值等。通常這些都是無效的情況,你不想滿足/不得不考慮 - 在這些情況下我會寫一些測試要說他們應該拋出異常 - 這基本上會阻止人們在沒有正確/無效數據的情況下濫用代碼。

您在上面提到過您正在使用數字密集型代碼 - 可能值得測試上面的級別,因此您可以測試您正在尋找的系統中的行為而不僅僅是數字運算 - 假設代碼不是純數字,這將是幫助您建立一些真實的執行條件,並確保無論數字運算位數實際上正在以您需要的方式與程序的其余部分進行交互 - 如果它是某種算法,您可能最好不要編寫驗收測試語言有助於描述在不同情況下所需輸出的特征 - 這可以清楚地顯示您想要實現的內容,它還允許您通過系統丟棄大量(實際)數據,這可能比計算機生成的更好輸入。 這樣做的另一個好處是,如果你意識到算法需要大量重寫以滿足一些新的要求,那么你所要做的就是添加新的測試用例然后重寫/重構; 如果你的測試只是查看算法的細節並假設對外界的影響,那么你會有一個實質性的頭痛試圖找出算法當前如何影響行為,哪些部分是正確的,哪些不是然后嘗試將大量單元測試遷移到新的API /算法上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM