写点什么

单元测试 VS 异步代码随机测试的随想

  • 2014-08-26
  • 本文字数:907 字

    阅读完需:约 3 分钟

众多“任务 + 异步 / 等待”模式有意思的特性之一是用户能够比较容易地对任何操作的结果进行装饰。微软的 Lucian Wischik 展示了如何采用这种特性的优势,以使得您的端到端测试结果更加健壮。

使用 Mr.Flakey 就跟在 Windows 8 或者 Windows Phone 8 应用的每一个 await 语句后面加上“.Flakey()”一样简单。

复制代码
Dim r = Await
http.GetStringAsync(uri).Flakey()

启用之后,每个异步调用都将会触发一个对话框,用户可以选择点击“ok”按钮, 这样会像正常一样返回结果,或者点击“fail”按钮来模拟一个网络或者服务器异常。

为什么使用这种随机测试而不编写一套全面的单元测试用例呢?Lucian 解释如下:

单元测试:以我个人的经验,单元测试在测试分布式算法中并不是非常有效。测试的时候需要花费相当多的努力建立环境(比如,模拟网络环境),而且这种测试方法注定不够全面,并且以我个人经验来看,单元测试实在是不太适合于发现分布式环境下的缺陷。我怀疑这是因为程序员的大脑经常会沿着他们算法中“正确”的路径进行思考,而不太擅长面对其他各种错误路径。

(想一想:当你查看并发程序代码的时候,你是不是一个仅仅通过查看代码就能够发现竞争条件的人?你团队中有人能够做到这个吗?你曾经写过一个发现竞争条件的单元测试用例吗?至少我还没有过)

随机测试: 发现缺陷的一个非常棒的方式是交互式的随机测试。如果通过用户界面就能非常容易地模拟错误,你就几乎可以将自己的脑袋设置成自动导航模式,随机地点击界面上的各个位置,很快就能发现应用程序运行行为不正确的地方。

我被 Leslie Lampor 在 1990 年研究的“时态逻辑检查器”迷住了 -- 这是一种自动探索巨大指数空间可能性的方法(类似于我们在分布式算法中所面对的问题)。他所发现的在可能性空间“自动随机遍历”最后在实践中证明确实能够发现所有的缺陷,并且远远比对每一个可能性进行详尽测试更加有效。

查看英文原文 Thoughts on Unit Testing vs Ad-hoc Testing with Asynchronous Code


感谢赵震一对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014-08-26 17:171892

评论

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

「超级右键」

非著名程序员

macos 程序员 效率工具 软件 Mac

加班能解决交付的期望么?

拖地先生

项目管理 领导力 管理 时间管理

爱他,就让他走?

Selina

团队管理 领导力 团队协作

小论互联网项目管理

南方

项目管理 互联网 个人成长 碧海潮生曲

Java并发编程系列——线程

孙苏勇

Java 并发编程 线程

很不幸,自动化测试永远只能是必要非充分条件

刘华Kenneth

DevOps 敏捷 自动化 测试 金字塔

知乎开发了一个搜索引擎

红泥

搜索引擎 百度 知乎

敏捷开发 | 张三与需求管理

易成研发中心

敏捷开发 需求管理

程序员5分钟:你了解32位带符号的整型吗?

顾仲贤

程序员

随手记备忘录的好习惯

changyou

除了负载均衡的算法,你还应该知道这些

松花皮蛋me

Java 负载均衡 分布式

回"疫"录(3):让人怀念的普通一天

小天同学

疫情 回忆录 现实纪录 纪实

世界知识产权日碎碎念

Yin

成长 随笔 知识产权

我为什么选择infoq写作平台

三爻

决定我们认知深度的究竟是什么?

石君

深度思考 方法论 连接

漫谈哲学与编程

keelii

编程 哲学

如何阅读源码?

武培轩

Java 源码 面试 进阶 后端

在谈判中,你有哪些属于自己的独特的方法和技巧?

Yolanda

Java并发编程系列插曲——对象的内存结构

孙苏勇

Java 内存模型 面向对象 ClassLayout

程序员陪娃漫画系列——看医生

孙苏勇

程序员 生活 陪伴 漫画

程序员都应该了解的运维知识经验

松花皮蛋me

DevOps 分布式 运维

克制文章长度

changyou

程序员陪娃漫画系列——修龙头

孙苏勇

程序员 生活 陪伴 漫画

前端如何搞监控总结篇

大前端洞见

大前端 监控 全链路监控

最近的一些人生感悟

小智

人生 哲学

程序员5分钟:你的程序占用了多少内存?

顾仲贤

程序员

基于Kubernetes的多云和混合云

倪朋飞

云计算 架构 Kubernetes 微服务 Service Mesh

微信朋友圈为什么没有阅读数?

彭宏豪95

微信 产品 产品设计

别总说CMS、G1,该聊聊ZGC了

猿人谷

CMS G1 ZGC JVM

Golang 真的好用吗?

极客时间

编程语言 Go 语言

聊聊苹果公司技术部门的宫斗和冷战

赵钰莹

程序员 外包 apple

单元测试VS异步代码随机测试的随想_软件工程_Jonathan Allen_InfoQ精选文章