繁体   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