常言道,名正则言顺。对于一个概念,如果它没有恰当的名字,就会增加理解的难度,甚至容易引起歧义。
在这些年,不管是写公众号还是与同行交流,我都发现软件测试中的一个重要概念存在着“名不正,言不顺”的问题。这个重要概念就是回归测试。
到底什么是回归测试?为什么叫回归测试?据我观察,许多的答案都不能让人信服。今天,是时候为“回归测试”正个名了。
要理解“回归测试”,先要理解“回归”。回归,是常用的汉语词汇。它有两种含义。第一种是归还,返回的意思。例如:香港回归祖国,北回归线,回归初心等。这种含义大家都非常熟悉。
另外一种含义,熟悉的人就少一些。它来自数学领域,表示研究随机变量相互关系的统计分析方法。例如:回归分析,线性回归等。
这时候你会发现,不管哪一种含义都无法用来解释回归测试。于是,有人干脆就含糊其辞地把回归测试解释成“重复的测试”,“检测二次出现的/回归的bug的测试”等。
这些解释看似有些道理,但是离回归测试的真正含义还有距离。要理解回归测试这一舶来品的真正含义,需要回到它的原始出处。
回归测试翻译自英文“Regression Test”。什么是Regression呢?这也是一个多义词。它既有数学上回归的意思(例如Regression Analysis,回归分析),也有衰退,退化的意思(例如Economic Regression,经济衰退)。
说到这里,回归测试的含义也就明朗了。它其实是衰退测试的意思。正如维基百科所定义的:Regression testing is re-running tests to ensure that previously developed and tested software still performs after a change. If not, that would be called a regression.
根据这个定义,回归测试的目的是保证本来能够正常工作的软件在发生变化(change)的情况下不产生衰退。所有引起软件衰退的bug叫做regression bug(有时候直接叫regression)。回归测试可以暴露regression bug。当这种bug被发现并修复了,软件就不会发生衰退(regression)。
触发回归测试的变化(change)是多样的。它既可以是增加一个新功能,也可以是修复一个bug,还可以是修改软件配置。无论哪一种变化,都不应该导致软件衰退:即本来能够正常工作的部分(不管是功能点还是性能指标)被破坏。
通常来说,实现回归测试的方法是重新执行测试用例。根据执行结果是否成功,来鉴别软件是否发生衰退。回归测试与重复测试有关系,但不能将二者划等号。毕竟,回归没有重复的含义,并且重复测试不仅用于回归测试,还可以用于稳定性测试。
将回归测试理解为"发现再次出现的bug"也不准确。因为regression bug并不是re-happened bug。regression bug是导致软件衰退的bug。这种bug完全可能是第一次出现的,是全新的bug。没有道理认为它们一定曾经出现过。
或许有人会质疑,有必要这样抠字眼么?的确,不去深究这些含义,并不影响我们写个回归测试用例,建个回归测试job。但是根据我的经验,它会影响我们阅读这一领域的相关英文博客和论文。
根据上面的分析,我想回归测试的含义已经很明确了。回归测试之所以容易被误解,原因是翻译不精确。如果翻译成“衰退测试”或“退化测试”,就好理解得多了。
或者,我们将错就错,给“回归”增加第三种含义,以表示“衰退”,“退化”的意思?
来源:百度文库