重读《从菜鸟到测试架构师》-- 开发人员也需要做测试

小艾经过了安装测试的历练,明显对软件测试又有了更深刻的了解。而在进行测试过程中,小艾遇到一个导致他手里大部分case失败的bug,而这个bug的幼稚简直令小艾忍不住想骂开发人员。 

而就在小艾质疑为什么开发人员没有发现这么简单的bug的时候,小艾作为支援人员被调进了开发组协助开发工作,忙碌的开发组也立刻给小艾下达了第一份任务,完成某user story的代码开发及单元测试。

可是小艾的编码能力有限,紧赶慢赶才在限定的时间里完成了开发任务,没时间做单元测试了,只是简单测了测,就提交了代码,于是出现了之前自己骂开发人员的幼稚的问题——边界值没处理,而再次提交的代码,也依然出现了或多或少的bug。小艾很好奇,明明编码的时候考虑得还算周到,debug 模式下也一再调试过代码,为什么总有那么多层出不穷的小bug呢?

更让小艾疑惑的是,交代给自己任务的组长按理说能力肯定比自己厉害,可是完成开发代码的时间看起来却并不是那么及时,这似乎不正常,但令小艾佩服的是,组长提交的代码确实bug比自己少很多。

小艾在疑惑,组长是怎么做到的,组长也发现了小艾的问题,于是,两个人开始了秉烛夜谈,哦不,促膝长谈……

 

吃一堑长一智,走出单元测试的误区

由于小艾说自己是做过单元测试的,但很多应该在单元测试被发现的bug却并未发现,于是,组长问小艾单元测试是如何做的,小艾给出了如下回答:

    1. 开发完代码之后,运行程序,试了几个功能测试发现没有问题

    2. 用断点调试过代码,对代码进行跟踪过 

组长告诉小艾,尽管这么做有一定的帮助,但没有关注到单元测试最核心的价值。有效的单元测试需要编写简单的、自动化的测试代码,且几乎和开发代码同时完成的。

小艾听着组长的话,产生了巨大的疑惑:测试不是有专门的组在做么,为什么开发需要写测试代码?

听过了组长的解释,小艾才知道,原来开发人员做单元测试不仅必要, 而且重要。

 

单元测试的特点及作用

保证代码质量:一旦代码有变更,都需要对新代码或更改的代码进行单元测试来保证已有代码不受影响,可以有效提高代码的质量。 

更容易发现bug:单元测试是在系统的最低级别进行的测试,与别的方法及模块隔离。 

可重复执行:有效的单元测试应该是自动化的 

代码更易维护:单元测试还可以起到文档的作用,有效记录了相应代码的功能及用法。

解决bug的成本更低:这一点是进行单元测试最主要的原因。

功能测试中解决bug的周期

1. 功能测试人员在正式build中发现bug

2. 在bug跟踪记录系统中创建bug并进行描述

3. 相关的开发人员接到bug并在开发环境中重现bug

4. 开发人员调试并解决问题,将代码再集成发布

5. 功能测试人员拿到新build,验证bug是否被解决

一般来说,在功能测试阶段解决bug的成本,是在单元测试阶段解决bug的成本的10倍,在系统集成测试阶段解决bug的成本,是在单元测试解决解决bug的成本的40倍

到这里,小艾终于明白为什么开发人员要做单元测试且将单元测试看得如此重要了,但是他心生另一个疑问:开发人员写代码的时间已经很紧张了,如果还要写单元测试岂不是完不成任务了么?

实际上,开发人员写单元测试的时间几乎和他写产品代码的时间相当,当做项目计划的时候,把单元测试考虑进去是合理的。尽管单元测试增加了开发工作量,让开发时间延长了,但对于一个长期不断改进和维护的项目而言,不能忽视级联效应,应该从项目整体来看。

单元测试的影响

如果单元测试做得不够,功能测试组就不可避免地遇到一些单元测试层面的bug,用来发现并验证bug的成本增加,没时间和精力去做更复杂的测试,功能测试进度会受到影响。 

大量的功能方面的bug若未在功能测试阶段发现,性能测试也会因功能bug而做不到足够的性能方面的工作。

而通过单元测试,能保证最基本的bug及时被发现及解决,可以削减项目整体成本。

 

潘多拉盒子里出来的怪物——开发人员眼中的测试

什么是单元测试?上面说了一堆,但还是没有提到单元测试的概念,单元测试是由开发人员在开发代码的同时进行的一种独立测试,验证其开发的每个代码单元。

谁来测试?开发人员

单元测试的目的是要确保程序的逻辑和开发人员对它的预期是一致的。再没有任何其他人比开发人员自己更了解他对这段程序的预期是什么了。所以要编写有效的单元测试,开发人员本人是最合适的人选。

什么时候进行单元测试?开发产品代码的同时

有效的单元测试要求在编写产品代码的同时进行单元测试,而在引入敏捷开发理论之后,更高的要求是测试驱动开发,即单元测试代码要在产品代码之前编写。 

测试对象?代码单元

单元是什么?是类的成员方法,也可以是任何具有明确功能、规格定义、明确接口定义,且规模一般比较小的程序代码模块的组合体。 

独立测试

即将代码从原始程序中隔离出来,尽可能地与程序其他部分或外界依赖隔离,即低耦合。

单元测试与功能测试

尾声

通过组长的详细讲解,小艾终于对单元测试有了初步的了解,单元测试其实有几个关键点,把握好了,也就能更好的完成单元测试了:

    单元测试记录预期的行为

    每个单元测试针对一个单独的行为进行测试

    尽可能地与程序其他部分或外界依赖隔离

    一旦失败,可清晰地定位失败原因

    可重复运行,且每次运行都有确定的行为,不受上次运行的影响

    可以快速执行,简单、实用、高效 

    有效的单元测试是自动化的

尽管有了初步了解,小艾依然不知道单元测试应该测点啥,怎么来测,没关系,项目的文档、网上的资料都会慢慢告诉小艾这些知识的~让我们期待下回对单元测试的范围、流程、工具的介绍吧~

 

想要第一时间看到这一系列文章的更新及更多精彩内容可以扫描下面二维码关注微信公众号: 倚楼听风雨的如月

 

posted @ 2016-12-13 17:14  Ribbon  阅读(533)  评论(0编辑  收藏  举报