本页内容

Qt Test 安全注意事项

Qt Test 框架负责管理测试的执行并生成测试结果报告。在使用该框架时,应牢记许多与《安全使用Qt开发工具》相关的注意事项。正如《Qt共享安全模型》中针对Qt的通用说明所述,使用Qt Test 的用户需谨慎处理Qt Test 及其生成的数据。

一套完善的测试套件会在某些环节对被测代码施加压力,因此可能导致测试失败,包括程序崩溃或触发未定义行为。 随着被测代码的演进,测试将不时在错误传达到最终用户之前将其捕获。此类失败可能会产生出人意料的副作用,包括破坏测试进程可访问的其他资源,例如源代码或构建产物。

测试失败时可能会附带额外信息,用于描述失败的性质。即使测试通过,测试本身或被测代码也可能生成输出,这可能是由于触发了警告或调试信息,也可能是响应命令行选项所致。 在某些情况下,此类数据的形式可能导致难以生成报告,或者可能干扰包含该数据的任何报告的格式——无论是通过Qt Test 直接生成的报告,还是由其他进程处理Qt Test 生成的输出后生成的报告。

建议Qt Test 的用户牢记以下几点:

  • 测试输出可能包含敏感数据,从而使任何能够读取输出的人都能访问这些数据。
  • 特别是当测试代码或被测代码的可信度不足时,应尽可能由无特权的进程在沙箱(如虚拟机)中运行测试,且测试结束后仅保留测试结果报告。
  • 不应相信测试系统上的任何文件在测试结束后仍会保持测试运行前的原始状态。
  • 尽管Qt Test 会尽可能对嵌入测试输出的数据进行转义或调整,以确保输出符合要求的格式,但请确保处理该输出的工具能够稳健地处理您的测试可能产生的各类输出。

构建时生成物

甚至在测试代码编译之前,测试的构建时配置就可能调整构建环境,例如在构建配置中添加测试所涉及的软件要求。

因此,理解此类调整可能对构建本身产生的影响至关重要。这可能包括改变构建工具查找源代码(以供整合)或待链接库的位置。在可能的情况下,测试所需的调整不应应用于面向最终用户的可交付成果的构建,而仅应用于需要这些调整的每个测试的构建。

当构建时配置的变更来自不可信来源时,这一点尤为重要。此类变更曾导致软件包的安全漏洞。

一般注意事项

自动化测试并非万能良方。 现有测试可能无法捕获意外错误或恶意更改,而运行测试这一行为本身,反而可能为这类更改造成危害提供可乘之机。随着被测代码的变更而新增的测试,可能无法捕获该变更中的重大问题,也无法捕获因该变更而暴露的现有代码中的问题。

遵循《Qt Test 最佳实践》有助于使测试行为更可预测,并更轻松地规避风险,包括安全风险。如该文档所述,外部依赖关系可能导致问题,具体请参阅“避免外部依赖关系”部分。

关于《安全使用 Qt 开发工具》,您需对测试环境、测试代码及被测代码的完整性负责。Qt Test 并非设计用于应对恶意的测试代码或被测代码,其仅旨在提供一个便捷的框架,用于编写测试,并在测试失败时生成具有指导意义的报告。

将测试构建与生产构建分离

通常,将可交付软件工件与测试工件分开构建,并将可交付工件保存在既不会受到测试工件构建过程干扰,也不会受到测试运行影响的位置,是一种审慎的做法。

保持这种分离可以避免因测试构建、测试本身或被测代码出现故障而可能引发的问题。上述所有环节都可能修改磁盘上的文件。如果这些步骤中的任何一个使用网络连接到可能已被入侵的远程服务器,这将是一个特别值得关注的问题。

生产系统通常不需要测试工件。如果确实需要在生产系统上进行测试,明智的做法是将测试与被测代码分开打包,以便在系统上运行测试并验证一切正常后,能够轻松将其卸载。 此外,当已测试足够多的生产系统副本,并确信所有系统均能按预期运行后,便可仅在生产系统副本上安装主要交付物。

检查输出文件名

与任何向文件写入数据的软件一样,Qt Test 程序也提供了控制输出保存位置和格式的选项。

如果传递给这些选项的输出文件名是自动生成的(例如由构建系统或运行测试的质量管理系统生成),则必须小心确保生成的名称符合预期。 自动生成此类名称的系统应检查其生成的名称是否符合预期,并确保不会将输出放置在可能被其他系统误解的位置,不会覆盖或替换来自其他来源的数据,也不会自身容易被此类数据覆盖或替换。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.