Boost 测试策略和协议
Boost 库旨在既可靠又可移植。每个经验丰富的程序员都知道,这意味着每个库都必须针对足够数量的测试用例进行测试,并在各种平台上进行测试,然后在每次更改后以及每次发布之前再次进行测试(回归测试)。
“基于广泛的定向测试的质量保证”作为对 C.A.R Hoare 的问题“在没有证明的情况下,软件是如何变得如此可靠的”的关键答案之一。
回归测试
Boost 使用一个自动的 回归测试套件,它生成 HTML 编译器状态表。
测试策略
必备
- 每个 Boost 库都应该提供一个或多个合适的测试程序,供 Boost 回归测试套件 使用。除了通常的编译-链接-运行测试期望成功完成之外,还可以执行仅编译或编译和链接测试,并且测试的成功可以定义为步骤的失败。
- 测试程序执行必须通过返回非零值来报告错误。它们还可以写入标准输出或标准错误,但该输出应该相对简短。无论其他输出如何,非零返回值是回归测试框架识别发生错误的唯一方式。请注意,要包含在状态表中的测试程序必须能够快速编译、链接和运行,因为测试会执行很多很多次。
- 具有耗时测试的库应分为一个用于状态表的快速执行基本测试程序和一个用于详尽测试用例的单独的全面覆盖测试程序。基本测试应专注于编译问题,以便状态表准确反映库在平台上正确编译的可能性。
- 如果由于任何原因,通常的测试策略不适用于特定库,则必须实施备用测试策略。
- 一个 Jamfile 来驱动库的回归测试。
可选(但强烈推荐)
Boost 测试库 提供了许多有用的组件,可以简化测试程序的构建。
建议的修复错误或添加功能的协议。
- 首先,添加检测错误或测试功能的回归测试用例。有时添加一个用例会提示类似的未测试用例,这些用例也会被添加。
- 其次,对于错误,运行回归测试并验证现在是否检测到该错误。
- 第三,然后,并且仅在然后,修复错误或添加功能。
- 最后,重新运行完整的回归测试 - 有时更改会破坏其他内容。
历史
鸣谢
作者:Beman Dawes。Jens Maurer、Paul Moore、Gary Powell 和 Jeremy Siek 提供了有益的建议。