我正在手工编写新代码,希望确保不遗漏任何细节。
是否有特定的方法可以让 Pex 生成良好的数值密集型代码覆盖率,除了指定和使用代码契约?
请在http://research.microsoft.com/en-us/projects/pex/pexconcepts.pdf中搜索“float”关键字,以获取一些背景信息。
浮点数算术约束通过转换为有理数来近似处理,并使用 Z3 之外的启发式搜索技术来查找浮点数约束的近似解。
...还有...
符号推理。Pex 使用自动约束求解器确定哪些值对测试和被测试的代码是相关的。然而,约束求解器的能力是有限的,特别是 Z3 无法精确地推理浮点算术。
或者,你知道一个更适合在 .NET 下查找数字异常的工具吗?我知道http://fscheck.codeplex.com/,但它不执行符号推理。
==
相关的条件语句来处理float
类型。改用<
或>
。如果必须使用==
,则使用表达式Math.Abs(value - target) < epsilon
,其中epsilon是您关心的任何公差。由于“近似有理数”的原因,当您希望成功时,“==”关系太容易失败。但是Pex应该更容易处理<
。 - Jesse Chisholm