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

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

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

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

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

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

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

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%免费】

软件测试面试文档

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


相关推荐
ThreeAu.1 天前
pytest 实战:用例管理、插件技巧、断言详解
python·单元测试·pytest·测试开发工程师
程序员二黑1 天前
Selenium元素定位总失败?这8种定位策略你必须掌握
单元测试·测试·ab测试
卓码软件测评2 天前
第三方课题验收测试机构:【API测试工具Apifox使用指南】
功能测试·测试工具·单元测试·压力测试·可用性测试
兮动人2 天前
Java 单元测试中的 Mockito 使用详解与实战指南
java·开发语言·单元测试
安冬的码畜日常2 天前
【JUnit实战3_01】第一章:JUnit 起步
测试工具·junit·单元测试
程序员二黑2 天前
自动化测试入门:从零开始搭建你的第一个WebUI项目
单元测试·测试·ab测试
zhonghaoxincekj3 天前
晶体管的定义,晶体管测量参数和参数测量仪器
功能测试·单片机·学习·测试工具·单元测试·制造
川石课堂软件测试3 天前
自动化测试之 Cucumber 工具
数据库·功能测试·网络协议·测试工具·mysql·单元测试·prometheus
执剑、天涯4 天前
通过一个typescript的小游戏,使用单元测试实战(二)
javascript·typescript·单元测试
啊森要自信4 天前
【GUI自动化测试】Python 自动化测试框架 pytest 全面指南:基础语法、核心特性(参数化 / Fixture)及项目实操
开发语言·python·ui·单元测试·pytest