全面思考:做测试比写代码难
很多人觉得,做程序最难的是写代码,后期测试是比较容易的部分,其实只要你真正写过一次程序就会发现,做测试比写代码难多了,因为做测试考验的是一个人全面思考的能力。
全面思考:做测试比写代码难
代码写好后,就要进入测试环节了。很多人对测试不够重视,匆匆上线,导致错误百出。其实测试是保证软件质量非常重要的一环。一般来说,程序测试包括单元测试、功能测试、集成测试、非功能测试、回归测试等。我们先来简单了解一下,它们分别有什么用。
1.单元测试,一般是白盒测试。每个软件都是靠一个个小模块组装起来的,就像汽车一样,里面可能有成千上万个零件。单元测试的目的就是测这些零件是否都能正常工作。可以说,单元测试是离问题最近的地方。离问题越近,解决问题的成本越低。反之,等汽车组装起来才发现有问题,再从上万个零件里找,难度不仅大很多,需要花费的时间也会多很多。
2.功能测试,一般是黑盒测试。每个零件都正常工作,并不意味着合起来也可以正常工作。一个功能是由很多个单元模块组装起来的,如果这些单元模块没有很好地配合在一起,互相矛盾,那整个功能也就不能正常实现了。因此,软件工程必须有功能测试,测一测各个模块合在一起能否正常运转。功能测试并不关心具体实现是什么,而是把软件当成一个黑盒(不知道里面是什么)来进行测试。
3.集成测试。软件内部由很多模块组成,同时外部还需要跟环境有交互,就像一个城市里有很多家庭,多个家庭组成一个社区,每个社区之间又通过交通、通信等方式互动。从测试的角度来讲,单元测试测的是家庭,功能测试测的是社区,集成测试测的是整个城市的交互。具体到软件工程上,集成测试其实模块和模块之间或者系统和系统之间的测试,比如“订单”模块和“支付”模块之间的测试。集成测试的难点有两个,一个是怎么把众多系统组织搭建起来,另一个是怎么定位测试过程中遇到的问题,这些需要很好的运维工具才能完成。
4.非功能测试。非功能测试是另外一大类测试,它测的是用户不直接关心,但开发者要关心的部分。比如性能测试、安全测试、稳定性测试、健壮性测试、破坏性测试、可用性测试、灵活性测试,等等。非功能测试主要用来检查软件应用程序的非功能性方面(性能、可用性、可靠性等),帮助降低与产品非功能性方面相关的生产风险和成本,优化产品的安装、配置、执行、管理和监控方式。
5.回归测试。回归测试的意思是把以前做过的测试以及犯过的错误再测一遍。它的主要目的是确保代码或配置的修改、需求的增加不会影响现有的功能。通常来说,回归测试的成本是非常大的,尤其是对那些使用人肉测试方式的公司来说。所以一般来说,回归测试意味着自动化测试。
关于测试的基本知识很多书都有介绍,这里就不多说,我在这里给两个建议。
第一,做测试很好的方式不是用人工,而是写代码。因为测试完全是重复劳动,而代码天生就是用来做重复的事的。所以,优质的测试是自动化,残酷无情地推动自动化测试,才是真正工程能力的体现。
第二,想要做好测试,先训练自己全面思考的能力。做测试比写程序代码难,核心在于边界条件非常难测。比如测支付,A付B5元钱,那测试就得考虑到如果A输入的不是5,是-5怎么办?系统会不会倒付给A5元钱?这只是个简单的例子,我想说的是,做测试需要你正着想、反着想、侧面想,脑补各种可能性。这种批判性思考、逻辑思考、系统思考,以及举一反三的思考能力很容易被忽略,但只要注意训练,你会有这个能力的。
【免责声明】
1、个别文章内容来源于网络善意转载,版权归原作者所有,如侵权,请联系删除;
2、所有图片来源于网络,版权归原作者所有。如有侵权问题请告知,我们会立即处理。