我正在开发一个渲染引擎(一个很小的引擎)
我想编写回归测试,以确保在添加新特性时不会引入bug。
如果我开发了一个计算着色器,或者将数据从缓冲区传输到缓冲区的东西,那么测试就很容易了。我们填充第一个缓冲区,并检查在传输之后,第二个缓冲区是否有相应的数据。
但是对于渲染来说,似乎很难.最后我找到了几个解决方案
第一个解决办法是..。不是解决办法。第二个解决方案似乎很好,但是我认为我们失去了自动的东西是可悲的.
第三种解决办法似乎是最好的办法。然而,要真正有效,这意味着一种算法,如果它是在Nvidia卡,或AMD,或英特尔或.必须产生完全相同的结果。
所以问题是,我们可以依靠屏幕截图和一点一点的比较来进行回归测试吗?还是取决于司机和制造商?
发布于 2020-12-06 19:24:10
Vulkan和OpenGL都没有提供任何关于跨不同实现的二进制相同结果的保证。即使是同一张卡的驱动程序更新也会产生不同的结果。
你能做的最好的事情就是得到一个与预期结果“接近”的结果。
发布于 2020-12-06 21:29:01
老实说,硬件实现之间固有的差异是一个相对较小的问题,更大的问题是为逐位回归测试创建测试数据所花费的时间。
测试套件的真正功能是(正如您所说的)在添加新功能或解决bug时快速检查回归。使用您的示例,如果您更改了实现缓冲区的方式,那么在需要时可以很容易地修改单元测试,例如,缓冲区的内存类型可能会发生变化,因此重构单元测试是非常简单的。
将同样的方法应用于软件的可视化输出需要付出更多的努力,特别是当您做出要求您重新生成预期输出的更改时,即在单元测试中更改预期值比更改整个场景要简单得多。
即使对于web来说,大多数开发人员也不会费心去“测试”视觉效果并将注意力集中在功能上,只是不值得为维护测试而付出努力。
https://stackoverflow.com/questions/65171984
复制相似问题