也谈软件回归测试 自动回归测试
开发人员对回归测试应该有所耳闻,但是并非都很清楚它的确切含义,比如我,以前老听到测试部门的头儿说回归回归,但也没具体去探讨什么叫回归测试,可能回归这个词太熟也太陌生吧,今天终于去探寻一番啥叫回归。
回归测试英文名叫regression testing,regression是复原退步的意思,当然不能想当然的理解为“退了步的测试”,描述为 “对退步再进行测试”可能较为恰当。既然是退步,那就还存在“原地踏步”这种状态,相对于“原地”往后退才叫做“退步”,为什么会退步,也就是说测试的缘由是什么,缘由是因为系统、程序或代码的状态被改变了。在系统发布前通常会做多次回归测试,比如第n次发布测试发现了m个bugs(这里假定系统此时处于第n状态),程序被QA部门reject回到开发部门当中,开发人员根据bug系统进行缺陷修正,修正完毕后提交给QA部门进行回归测试,这次回归是针对第n次发布测试,测试目标是m个bugs将得到fixed,回归结果将得到系统的一个新的状态(这里假定系统处于第n+1状态),在第n状态到第n+1状态中间,由于开发人员对代码进行更改,因此这时候系统状态的未知系数(不稳定性)是非常高的,可以称之为“退步”(regresssion),因此第 n+1次测试其实是针对这一“退步”状态进行,因而叫做回归,回归在这里可以有两重意思,一是回到系统的较低级状态,二是将系统的状态“拉回”到新的稳定状态(第n+1状态)。
回归测试并非局限于某一种测试,比如发布测试,它可以发生在单元测试(ut),功能测试(ft),集成测试(it)等等当中,当代码发生任何变动的时候,所执行的测试就可以说是一次回归测试,回归测试可以是自动的,也可以是手工的,比如前面所举的发布测试通常是手工完成,当回归测试可以自动执行的时候,系统可以较快地到达一个新的稳定状态,比如一个系统如果有良好的ut基础,那么代码的变更一旦检入代码库当中,就可以触发连续构建工具进行build and test(回归测试),失败的结果将在第一时间通知变更代码的程序员,或者通知配置管理员立即处理有问题的代码,这种just-in-time的处理方式将大大减少bug数目并提高代码质量,同时使团队的合作开发更加顺畅。
测试的自动化的程度越高,回归的周期就越短,效果越明显,软件的质量也越高,测试是否自动化也是开发是否敏捷的一个主要标志。