“每次都要把所有的回归一遍,但很少发现问题,是不是可以不做了?”
“写这么多自动化测试,费时费力,但几乎没发现啥问题,这些测试的价值何在?”
你是不是也有上面的疑问?或者被这样质疑过?
关于这个,我想到一条定律。
温伯格双胞胎定律
杰拉尔德·温伯格在他的著作《咨询的奥秘》中讲述了一个有意思的故事,大意是这样的:
公交车是按年龄收费的,成人35美分,五岁以下儿童免票。
一位母亲带着8个孩子上车,交了车费35美分。司机对此质疑道:“你不会想让我相信这8个孩子都不到六岁吧?”
那位母亲说:“当然啦!这俩四岁,那俩姑娘三岁,两个刚走路的两岁,我手里的两个家伙一岁。”
司机目瞪口呆,充满歉意地说:“哎呀,真抱歉!您一直都在生双胞胎吗?”
“天啊!当然不是,多数时候我们什么也不生!”
啊哈!这对夫妇就是在做他们平常该做的事情,大部分时间并不在生孩子,更别说生双胞胎了。温伯格因此悟出双胞胎定律:
大部分时间,在世界上的大多数地方,不管人们有多努力,都不会发生什么大事。
这条定律指出:大部分努力都是徒劳的。
那么,不努力行不行呢?该定律还有一条有意思的颠倒型:
有些时候,在有些地方,有意义的改变会发生──尤其是当人们不很努力地进行改变时。
回归测试
有没有觉得回归测试与双胞胎定律及其颠倒型非常吻合?
每次努力细致的进行回归,但是却发现很少的bug,如果有一次没有很好地回归,说不定就冒出一个严重问题。
相信很多同仁会有同感吧!
可是,仍然有人对回归测试抱有不太准确的期望,总是觉得回归测试就是应该能发现很多bug,不然就认为回归就没有意义。
回归测试的目的是验证新开发功能或者修复bug的时候,是否破坏已有功能代码,导致产生新的bug。如果回归测试发现过多的bug,说明软件开发过程是存在很大问题的,是不正常的!
小结
这条定律讲到的内容大家都很熟悉,并已习以为常了,可能会觉得我借来聊回归测试没啥意义。
其实,我只希望利用这个类比,能更清晰地理解回归测试的价值所在:回归测试不是用来发现bug的,而是增加一层保障,降低出现bug的可能性。
回归测试不做不行,需要全流程持续、自动而精准地进行回归。