你将如何测试一个应该运行很长时间的程序?
在我的项目中,该程序旨在保持运行多年。QA 人员不可能真正测试程序那么长时间。那么我应该应用什么测试策略来保证程序真的可以运行那么长时间呢?
你将如何测试一个应该运行很长时间的程序?
在我的项目中,该程序旨在保持运行多年。QA 人员不可能真正测试程序那么长时间。那么我应该应用什么测试策略来保证程序真的可以运行那么长时间呢?
完全取决于它应该做什么?
例如,如果您通过接口抽象出所有与计时器相关的东西,那么您可以“伪造”时间的流逝并以 1,000,000 倍的速度运行您的应用程序。因此,如果您进行 1 分钟的测试,就好像您已经测试了 1,000,000 分钟。
当然,这完全取决于您正在做什么,因为时间的流逝可能不会导致您的测试实际上需要很长时间才能执行。
1)单元测试——如果组件工作正常,整个程序就更有可能正常工作。
2) 简化的集成测试——尝试在一个不需要很长时间运行的小问题上运行它。
您可以通过提供假对象来对程序的更高级别组件进行单元测试,以完成通常运行成本太高的低级别工作。
测试它更短的时间。通常,由于内存泄漏等原因,程序不会运行多年。如果您在一天或一周内没有任何泄漏,那么您可能在一年内也不会发生泄漏。
在任何时间点,当程序执行时,程序可能会进入导致它崩溃的无效状态(我猜这是你真正感兴趣的)。所以你真的在问“我怎样才能确保我的程序进入无效状态的可能性很低”。你的测试策略必须是彻底的。您可能需要考虑专注于测试执行错误恢复的软件部分,以确保内部检测到的错误不会导致崩溃。
编辑
让我进一步解释一下。
所有长时间运行的程序本质上都服务于一系列输入或请求,每个输入或请求都会创建一个要处理的任务。一旦处理完毕,每个任务都会被丢弃。您将希望确保一个此类任务的问题不会阻止后续任务的处理,即使该任务的问题是由于处理该任务的代码中的错误造成的。实际上,这意味着服务器有一些用于错误恢复的代码。
再加上其他人,想想你期望软件运行多年后的状态。考虑会发生什么变化,并尝试在更短的时间内产生相同的情况。例如,如果您认为数据库会在几年后增长并拥有数千万个条目,那么现在通过添加这些条目来模拟这种情况,并验证系统仍然可以运行。