查看源代码 关于测试的一些思考

目标

通过测试来证明程序是正确的,这是不可能的。相反,已经有正式的证明表明,通过测试来证明程序通常是不可能的。对于那些希望证明程序正确性的人来说,理论上的程序证明或对代码的简单检查是可行的选择。测试服务器,因为它基于测试,不能用于认证。它的预期用途是(经济有效地)发现错误。一个成功的测试套件是能够揭示错误的套件。如果一个测试套件的结果是 OK,那么我们知道的并不会比以前多多少。

测试什么

测试套件有很多种。有些专注于调用某个接口中的每个函数或命令(以文档化的方式)。另一些则做同样的事情,但使用各种非法参数,并验证服务器保持活动状态并以合理的错误代码拒绝请求。有些测试套件模拟一个应用程序(通常由一个应用程序的几个模块组成),有些则尝试执行一般的棘手请求,还有一些测试套件甚至借助目标上的特殊加载模块来测试内部函数。

另一个有趣的测试套件类别是检查已修复的错误是否会再次发生。当引入错误修复时,会编写一个检查该特定错误的测试用例,并将其提交到受影响的测试套件。

目标是发现错误。编写任何现在或将来最有可能发现错误的测试。更多地关注关键部分。关键子系统中的错误比其他错误代价更高。

目标是功能测试而不是实现细节。实现细节经常变化,而测试套件应该是长期存在的。实现细节在不同的平台和版本上通常会有所不同。如果必须测试实现细节,请尝试将它们分解为单独的测试用例。这些测试用例稍后可以重写或跳过。

此外,目标是每个测试都只测试一次,不多也不少。如果每个测试用例都因为接口中的一个函数发生更改而失败,那是无效的。