程序员修炼之道系列 | 无情的测试

2021-08-09 13:09:00
LuLu
原创
2969
摘要:好项目的测试代码可能比产品代码还要多。只有通过了全部测试,编码才算完成。

测试是怎么来的?

时间退回到很久之前,大多数程序员都不写测试。直到程序员葛丽丝·霍波发现了那只被夹扁在电脑主机内的飞蛾,开始了程序的调试工作,这就是软件测试的前身。

硬件工程中的Bug很难查,一旦出现,修复成本也很高,稍不留神就需要重新做一套模具。所以硬件工程往往有层层测试,来极早发现问题,尽量保证简单且质量高。

同样,软件开发也不甘示弱。毕竟Bug被发现得越早,维护的成本就越低。SmallTalk世界里不是有句话这样说:“编一点,测一点”。

怎样测试?

软件开发中,需要测试的工作很多,主要有以下分类:

  • 按测试阶段分类:单元测试、集成测试、系统测试、验收测试
  • 按测试手段分类:黑盒测试、白盒测试、手工测试、自动化测试
  • 按测试类型分类:功能测试、性能测试、兼容性测试

所有的软件功能最终都会被测试,这是一场测试人员和终端用户的赛跑。  

测试人员没有检查出的Bug,最终都会由用户测试出来,不良体验会增加我们的用户维护成本。为了避免这种情况,可以通过各种测试来抓住漏网的Bug:

1. 回归测试——确认今天的Bug修正有没有影响到昨天可以工作的代码

2. 测试数据——测试的数据不能局限于理想数据,要给出正常、异常状态下的各种数据 

3. 对测试进行测试——故意引入Bug,证实这个Bug确实是个Bug

4. 彻底测试——测试所有场景,但穷尽测试是不可能的,应设定及时终止的条件

5. 对测试进行设计——编码的同时,加入测试思维,使最终的代码不仅仅能工作,还有利于后期的代码维护

6. 自动化测试——易出错、需多次重复的测试,可以用自动化测试代替人力

测试中的二八原则

二八原则始于Pareto(帕雷托)原则,就是这个人(意大利经济学家Villefredo Pareto)发明的,其实他就想告诉我们,做事要抓重点。二八原则用在软件中,具体可以表达三个含义。

1、80%的错误是由20%的模块引起的

系统中20%拥有复杂逻辑的关键模块,往往会引起80%的错误,只有关键模块稳定了,整个系统才能稳定。

2、80%的测试成本花在20%的软件模块中

测试工作中,用低效且量多的用例来测试核心模块,在测试执行过程中必将导致一部分关键Bug找不到。

3、80%的测试时间花在20%的软件模块中

复杂的模块或全新系统,需要投入充足的时间来设计思考测试用例,用时越短,风险越大。

好项目的测试代码可能比产品代码还要多。而事实证明,编写这些测试所花的时间是值得的。因为只有通过了全部测试,编码才算完成,这份高度自信,就是测试给的。