为什么很多互联网公司很少做单元测试?

软件单元测试分为狭义的单元测试和广义的单元测试。

前者是指对被测代码的各种函数、接口等进行测试,以验证它们的功能、性能和安全性。

后者是指对页面的每一个组件(如文本框、按钮等)进行测试,以验证它们的功能、性能和安全性,有时也被称为组件测试。

传统的软件开发方式是先写产品代码,再写测试代码,最后用测试代码来验证产品代码。

但是在敏捷方法中,特别是敏捷中的极限编程鼓励进行测试驱动开发,即先写测试代码,再写产品代码,最后对代码进行重构。

其好处是能够充分考虑程序需要处理的正常场景和异常场景,尽可能一次性地写出正确的产品代码,从而提高开发效率。

01 软件测试应该贯彻始终

DevOps下鼓励软件测试贯彻始终,即软件测试的左移和右移。

针对单元测试,主要考虑软件测试的左移,由于在开发阶段修改缺陷的代价非常小,因此建议尽可能做到让大部分缺陷在单元测试阶段被发现。

测试左移是指代码静态和动态的自动化和手工测试,并且结合测试驱动开发让测试人员配合开发人员,尽可能保障产品的质量。测试右移是指在生产环境中进行软件测试,如全链路测试、混沌测试等。

02 软件测试金字塔

谈到软件测试金字塔,就不得不提到Mike Cohn版本的测试金字塔,如图1所示。

图1 Mike Cohn版本的软件测试金字塔模型

Mike Cohn认为开发一个软件产品需要最多的是单元测试,其次是接口测试,最后是UI(User Interface,界面)测试。

在软件测试金字塔模型中,越往上需要集成得越多,修复缺陷的速度越慢,消耗的成本越高;反之,越往下需要集成得越少,修复缺陷的速度越快,消耗的成本越低。

2009年,在伦敦召开的XP日会议上,Google发布了一份报告,报告指出:在单元测试阶段修复缺陷的成本为5美元,构建阶段修复缺陷的成本为50美元,集成测试阶段修复缺陷的成本为500美元,系统测试阶段修复缺陷的成本为5000美元。

根据Mike Cohn测试金字塔模型,Google也提出了自己的测试金字塔模型,如图2所示。

图2 Google版本的软件测试金字塔模型

我们可以认为单元测试为小型测试,接口测试为中型测试,UI测试为大型测试,可见Mike Cohn版本的软件测试金字塔模型与Google版本的本质上是一致的。

上面所述的软件测试主要是指自动化测试,而探索式测试也是不可被忽略的。据统计,基于接口和UI的自动化测试在回归测试中占有重要作用,而探索式测试对于发现产品新功能中的缺陷起着至关重要的作用。因此,在Mike Cohn软件测试金字塔模型上加上探索式测试,就形成了图3所示的改进版的软件测试金字塔模型。

图3 Mike Cohn改进版的软件测试金字塔模型

单元测试的缺点是减缓研发的速度,特别是在产品初期,这显然不符合互联网公司提出的"快鱼吃慢鱼"的思想,由此提出缩小单元测试的规模,扩大接口测试的规模,故形成了蜂巢形模型或纺锤形模型,如图4和图5所示。

图4 蜂巢形模型

图5 纺锤形模型

03 单元测试在传统开发模式中的地位

单元测试在传统开发模式中的地位,如图6所示。

在传统开发模式中,单元测试是验证编码的活动。

图6 单元测试在传统开发模式中的地位

04 单元测试在敏捷开发模式中的地位

单元测试在敏捷开发模式中的地位,如图7所示。

图7 单元测试在敏捷开发模式中的地位

单元测试属于支持团队的面向技术的测试。支持团队说明单元测试是在特性团队中进行的;面向技术表示单元测试的技术含量比业务含量要重。这里需要特别指出,单元测试不是不注重业务知识。

虽然在很多互联网公司,为了提高研发速度缩小了单元测试的规模,然而单元测试的优势和地位依然是不可被取代的!

最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取 【保证100%免费】

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。


相关推荐
程序猿000001号8 小时前
探索Python的pytest库:简化单元测试的艺术
python·单元测试·pytest
星蓝_starblue1 天前
单元测试(C++)——gmock通用测试模版(个人总结)
c++·单元测试·log4j
whynogome2 天前
单元测试使用记录
单元测试
字节程序员2 天前
使用JUnit进行集成测试
jmeter·junit·单元测试·集成测试·压力测试
love静思冥想3 天前
Java 单元测试中 JSON 相关的测试案例
java·单元测试·json
乐闻x4 天前
如何使用 TypeScript 和 Jest 编写高质量单元测试
javascript·typescript·单元测试·jest
Cachel wood4 天前
Vue.js前端框架教程4:Vue响应式变量和指令(Directives)
前端·vue.js·windows·python·单元测试·django·前端框架
@TangXin5 天前
单元测试-Unittest框架实践
单元测试
十年一梦实验室5 天前
【C++】sophus : test_macros.hpp 用于单元测试的宏和辅助函数 (四)
开发语言·c++·单元测试
编码浪子5 天前
Springboot3.x配置类(Configuration)和单元测试
单元测试