单元测试框架(如xUnit或GoogleTest)可以轻松运行一套测试,并且通过IDE集成,您只需点击几下鼠标即可在特定测试上运行完整的调试会话,无论出于何种原因失败。我觉得这很有帮助。
然而,在我的项目中,我经常发现自己希望我可以进行不同类型的测试,不是单元测试,而是某种系统测试,我不知道该怎么称呼它。从本质上讲,我想测试一个函数,给出所有可能的参数,或者一系列参数,并自动创建和运行类似于单元测试的东西,理想情况下使用相同类型的IDE集成,这样我就可以轻松地调试我的函数。
显然,这种类型的测试有其局限性,即使是一个带有单个64位“int”参数的普通函数,也不可能穷尽地测试所有可能的值。另一方面,这些天来运行数百万甚至数十亿类似的测试,对一个相对复杂的功能是很好的范围内的可能性,即使是低级的PC。
我可以通过编程方式生成单元测试,然后将生成的文件编译为我的testSuite来获得我想要的东西,但是我必须假设已经存在用于这种测试的工具。我希望得到一个答案,告诉我人们通常用于这种测试的解决方案。
我主要对C、C++,也许还有C#的工具感兴趣。但其他语言的例子也值得参考。
1条答案
按热度按时间yhqotfr81#
你提出了一个关于实际测试所有输入的时间成本的好观点。我认为你正在寻找的是“模糊测试”/“Fuzzing“或它的一些变体。有很多不同类型的模糊,你可以进一步研究:黑盒、灰盒、白盒、基于突变、基于生成、基于覆盖
我不太熟悉具体的模糊技术。我听说过AFL和PeachFuzzer,但我相信你可以通过进一步搜索找到更多。
另一种你可能想深入研究的测试相关的东西是“Symbolic execution”,它使用约束求解的技术来做一些事情,比如试图了解什么范围的输入将使程序沿着不同的执行路径运行。或者你可能还想更深入地研究“Concolic testing“,它结合了符号和具体的执行。