前言
软件测试需遵循系统化和破坏性测试原则,确保软件正确性并发现潜在缺陷。破坏性测试需严格设计,权衡破坏程度,适用于单元测试和功能测试。分布式系统下的混沌工程可模拟真实混乱以检验系统健壮性。充分有效的测试能降低软件缺陷风险。1 软件测试基础知识之系统化和破坏性测试原则
软件测试既要验证软件的正确性,还要通过破坏软件来发现软件的不正确性,系统化测试可以减少软件中未被发现的缺陷。
1.1 破坏性测试
软件测试中,破坏性测试,是指通过有效的测试手段,使软件应用程序出现失效或崩溃,验证软件系统产生的结果是否符合预期。使用的测试手段必须是有效的。
(1)破坏性测试的手段和过程,必须被严格设计和执行。不能把破坏性测试当作探索性测试。破坏性测试不该有“试试这样会不会出问题”的假设,并且检验破坏性测试的结果必须有预期。
(2)破坏性测试需权衡破坏的量和度,因为会产生实际的破坏作用。不仅会破坏软件,也有可能破坏硬件。通常情况下,软件被破坏后的修复成本较低,而硬件被破坏后,修复成本不可控。所以,事先要考虑好破坏的量和度。
通过破坏性测试可以很好地测试分布式系统的健壮性,但因为它的破坏特点,让它在持续交付中无法显示真正的威力。大部分情况下,在单元测试、功能测试阶段执行破坏性测试,并且在局部测试子环境中执行。在分布式系统架构的不断进步的情况下,传统的破坏性测试有如下问题:
(1)它被设计得过于严格,以至失真。真实有破坏力的故障是随机的、并行的、胡乱的。
(2)它无法覆盖生产环境,只能做到类似抽样检验的能力,并且难以重复和持续。
根据分布式系统固有的混乱属性:即使所有的部件都可以正常工作,但把它们结合后,你还是很难预知会发生什么,找出分布式系统的弱点:
(1)当服务不可用时,不可用或不完整的回退能力;
(2)不合理的设置超时时间引起的重试风暴;
(3)依赖服务接收过多的流量,从而导致中断;
(4)由单个故障点引起的级联故障。
经实践证明,通过一些受控实验,可以观察这些弱点在系统中的行为。这种受控实验,被称为混沌工程。它可以探知和管理这些系统固有的混乱。混沌工程是在分布式系统上建立的实验,其目的是建立对系统承受混乱冲击能力的信心。
1.2 使用原则
(1)充分、有效、系统的测试可以减少软件中未被发现缺陷的可能性;
(2)测试既要验证软件的正确性,更要通过破坏软件,发现缺陷的不正确性。