恶性竞争 - 探究 bug 越改越多的原因
有没有发现,我们的 bug 总是越改越多?你会说做测试左移呀。没错,测试左移已经提倡很多年了,好处大家也都理解,不过在实际的工作中,有各种原因让团队还是望而却步。主要原因无外乎是时间紧、任务多、压力大。这些原因导致团队在开发的时候,往往会选择先做功能,而把测试先放一下。都不用说单元测试这种自动化测试,就连基本的人工测试都会大打折扣。这种情况下,团队往往会陷入一个怪圈,开发的速度慢、质量差、返工多。今天尝试用系统思考的方式来分析一下这个问题的原因。
图例说明
开始之前,让我们先了解绘制系统思考的因果回路图的一些基本元素:
增强回路,可以理解为各个因素随着箭头的方向持续地良性循环或者恶性循环。
调节回路图,可以理解为各个因素随着箭头的方向会自我调节,在一定范围内来回波动。
“+” 正向影响符号,表示箭头方向上的影响是正向的。左侧的因素增加,右侧的因素也会增加。左侧的减少,右侧的也会减少。
“-” 反向影响符号,表示箭头方向上的影响是反向的。左侧的因素增加,右侧的因素会相应减少。左侧的减少,右侧的会相应增加。
系统思考
团队中一般都会有两种声音,一种是测试优先,一种是功能优先。下面我们分别来看看这两种声音的思考方式。
测试优先: 先来看看测试优先的一方是如何思考的。可以看到下图是一个调节因果回路图。理想状况下,当测试覆盖率不高的时候,这里说的测试是泛指测试,无论是人工测试还是自动化测试,覆盖率指的是测试覆盖所有开发的功能的比率。当这个比率不高的时候,那么交付的不确定性几率就会增加。原因是测试不全,无法发现隐藏问题;改一个问题可能引发潜在的多个问题等情况。这种不确定提高带来的后果是测试压力增加。通过增加测试时间来增加测试覆盖率,从而希望降低交付的不确定性。这样就形成了一个调节回路。理想状态下,在一定的时间范围内,团队可以保持在一个相对稳定的状态。
功能优先: 再来看看功能优先一方的思考。下图仍然是一个调节因果回路。功能优先一方往往希望通过大比例的增加开发功能时间,来降低交付压力,认为功能做出来压力就小了。而为了大范围的交付功能,牺牲测试的范围,常见的做法是开发给测试提供测试建议,或者只测试主要功能的测试 case,不用测试所有情况等手段。这样大大减少测试需要的时间,从而给开发功能流出时间。之后随着开发功能越来越多,理想情况是交付压力会随之降低,这时候,期待的结果是,团队可以有时间和精力来补之前赶工减少的测试 case。这样就形成了一个调节回路。理想状态下,在一定的时间范围内,团队可以保持在一个相对稳定的状态。
恶性竞争: 如果把上面两个调节回路放在一起,形成一个整体的回路,可以看到,测试优先和功能优先相互影响,形成了一个增强回路。可以看到,降低测试覆盖率,并不会让你的交付压力减轻,反而会增加交付的不确定性。这个不确定性会带来更多的测试压力。这时候如果你是手工测试为主,在无法增加测试时间和测试人手的情况下,无法保证交付质量,而持续的功能开发,最后的结果就是各种“惊喜”——bug 越来越多,形成了一个恶性循环。
感受
测试优先里面提到为了应对不确定性,通过提高测试时间来增加覆盖率,这里面有一个隐含前提,如果是手工测试为主,提高测试覆盖率需要增加时间,如果时间固定,那么只能增加测试人数,这两种方式都造成成本增加,往往实际工作中是不被允许的。所以无法降低交付不确定性,也就是经常看到 bug 越来越多,改 1 个来 10 个的惨状了。那么破解之道目前只有提高自动化测试的程度。这样可以在不增加人力的情况下,提高测试覆盖率,降低交付不确定性。这样就可以形成一个良性循环,提高质量,降低返工,降低交付不确定性。
功能优先里面期待着等到功能稳定后,有时间和精力来补之前赶工减少的测试 case。而实际上永远不会发生,因为测试的时间永远都不够,还需要给开发功能让出更多的时间。这也回应了上面期望自动化测试可以解决问题,但是团队根本没有时间来做自动化测试,因为一旦有时间,都要留出来做功能。
“恶性竞争”是系统思考的基础模型之一,把测试优先和功能优先这两个回路放到一起,变成了恶性竞争的两方,他们相互作用掉进了一个竞争的深渊。有没有发现我们实际工作中,越希望交付更多的功能,越发现交付不了那么多。越希望提高质量增加测试,却越发现无法提高测试覆盖率。因为团队已经掉入了恶性循环中。
破局之道
通过上面的分析,我个人觉得停止上面恶性循环这个增强回路的关键点在测试覆盖率上。通过各种手段,尽快的提高覆盖率,从而降低交付不确定性,减少返工,提高质量。这样就可以形成一个良性循环。这里面的各种手段可以是例如:自动化测试方法或者工具的应用、限制功能 scope 来给团队增加测试时间等。总之需要团队和业务干系人的共同努力,才能够破解这个恶性循环。
参考引用
如何系统思考(第 2 版)(《第五项修炼》作者彼得·圣吉作品,系统思考入门指导书)邱昭良
践行敏捷实践,让工作去繁从简。欢迎留言,交流落地经验。
版权声明: 本文为 InfoQ 作者【Bruce Talk】的原创文章。
原文链接:【http://xie.infoq.cn/article/668913a5e0acd01b7e88dcad7】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论