测试:开发人员理想与现实的大PK

2008 年 11 月 11 日

PDC 大会上进行了关于“单元测试的未来”的小组讨论,大部分的谈话内容聚焦于 Mock 测试,人们对于 Mock 框架(Mock frameworks)的过度使用取得了普遍共识。

共识如下:通常,实现所有必要的接口非常无聊,而且消耗时间。为了更方便,人们选择了 Mock 框架。但这遮盖了更本质的问题:API 被设计得过于复杂。

关于“开发人员测试”与其他人员的测试之间的区别,有一个热门的话题。一直以来的讨论中,人们都认为开发人员只需要做单元测试,而需求测试、验收测试、集成测试,以及所有其他形式的测试都是其他人的工作。

这里强调了在单元测试社区中存在的一个普遍误解。具体来说,就是假设所有开发人员都配备了 QA 团队,以处理所有其他类型的测试。不幸的是,即使是拥有数百万资金的公司也往往根本没有 QA 资源,所有的测试都留给了开发人员和最终用户。

开发人员无法进行更多类型测试的主要原因是速度。 单元测试已经太慢了,因此没有更多时间去进行那些更慢的测试了,比如包括网络通信的测试。 遗憾的是,并没有人考虑其他变通之策。

举个例子,单元测试框架其实可以更加智能,它们可以使用代码覆盖率的结果,只对发生变化的代码进行二次测试。一个类的变化,不应该触发重新运行所有的测试集合。所谓“单元测试”意味着你只需测试一个小的子集即可。

另外一种没有被提及的改进是利用分布式编程。代码和测试可以被快速上传到各个服务器并且得到执行。通过引入持续集成,我们已经拥有了所有需要的技术。

早些的讨论普遍觉得数据库方面被忽视了,大部分的数据库开发人员很少或几乎没有单元测试的概念,也缺乏相关支持工具。更可怕的是,他们甚至都没有被邀请来参加讨论。遗憾的是这就是目前的现状。讨论中也没有提供方法改善这些现实问题。

从好的方面看,已经有一些人在讨论使用建模工具来让单元测试更加简单。他们提供了很多可选的办法,例如从定义契约级别开始。这些契约可以被代码生成器用来编写实际的测试代码。显然,这并非一个 100% 完美的解决方案,但它能够减少经常遇到的困难。

另一个被看好的办法是采用 delta 状态管理。设想测试“取钱”这个功能,很多人会假设被测试帐户最开始有 100 美元,经过交易后,剩下 80 美元。这个方法就是首先查询一下账号余额,然后再看是否减少了 20 美元。这样一来,就不必在每次运行测试时都重新设置测试环境了。

查看英文原文: Testing: What Developers Are Expected To Do Versus What They Actually Do


译者简介:王速瑜,毕业于华中科技大学,就职于腾讯科技(深圳)有限公司,担任R&D 研发总监,现负责腾讯敏捷产品开发技术的实践和推广及研发基础平台的管理工作。熟悉Java、Microsoft.net、Lamp 等技术。对互联网大规模应用技术、高性能网格技术,SOA 等有非常浓厚的兴趣和深入的实践,喜欢Open Source,关注Ruby、Erlang 的发展并积极实践,愿意为技术而挥洒激情,为让更多人了解精彩技术而付出努力!志愿参与InfoQ 中文站内容建设,请邮件至 editors@cn.infoq.com 。也欢迎大家到 InfoQ 中文站用户讨论组参与我们的线上讨论。

2008 年 11 月 11 日 20:30541

评论

发布
暂无评论
发现更多内容

Spring Cloud 微服务实践(7) - 日志

xiaoboey

kafka 微服务 Spring Cloud 日志 spring cloud stream

MySQL事务隔离级别

长沙造纸农

MySQL 事务隔离级别 mysql事务 事务 MySQL 运维

震精,京东T8工程师每天熬夜到天明,竟只是为一套编程实战文档

周老师

Java 编程 程序员 架构 面试

产品分析

时间是一个人最好的证明

产品经理 产品设计

架构师训练营第 1 期 - 第四周学习总结

Anyou Liu

极客大学架构师训练营

java安全编码指南之:lock和同步的正确使用

程序那些事

java安全编码 java安全 java安全编码指南 java编码

JDK 中的栈竟然是这样实现的?

王磊

Java 数据结构和算法

古北水镇的夜

张晓楠

生活 摄影

对不起,学会这些 Linux 知识后,我有点飘

cxuan

Linux 后端 操作系统 计算机

LeetCode题解:104. 二叉树的最大深度,递归,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

架构师训练营第三周作业

Wee权

架构师作业第三周学习总结

Wee权

手把手教你AspNetCore WebApi:Serilog(日志)

AI代笔

ASP.NET Core web api serilog

区块链教育 丨 首批区块链专业新生正式入学

CECBC区块链专委会

区块链技术 区块链教育

用NOSql给高并发系统加速

架构师修行之路

nosql redis 分布式 微服务

内存条的讲解

亚兰—硅的传奇official

原创 内存 硬件 计算机 哔哩哔哩

典型的大型互联网应用系统的技术方案和手段

从联想ThinkStation工作站,窥见工具文明的新纪元

脑极体

20年开源老司机手把手教你玩开源——openEuler入门指南

openEuler

Linux 开源 系统操作

2020第十三届(南京)智慧城市技术与应用产品展览会

InfoQ_caf7dbb9aa8a

快讯2020第十三届亚洲国际物联网展览会-南京站

InfoQ_caf7dbb9aa8a

架构1期第四周作业1-大型互联网系统技术梳理

道长

极客大学架构师训练营

做好分库分表其实很难之二

架构师修行之路

微服务 分库分表

LeetCode题解:111. 二叉树的最小深度,递归,JavaScript,详细注释

Lee Chen

前端进阶训练营

Apache Doris在云真信智能决策分析平台的应用实践

DorisDB

数据库 数据仓库 金融科技

讲一讲我所认为的「人生三最」,你或许能够参悟到什么

非著名程序员

程序员 个人成长 时间管理 精力管理

全屋智能2020第十三届(南京)国际智能家居展览会

InfoQ_caf7dbb9aa8a

架构师训练营第1期第四周作业二

道长

极客大学架构师训练营

关于国际化语言 Intl

西贝

Java 前端 国际化 格式化

“海外同步优惠”与“中国专享折扣”十大必败榜抢先放送

爱极客侠

记一次MySQL日期范围查询优化

墨凡

MySQL SQL优化

测试:开发人员理想与现实的大PK-InfoQ