AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

单元测试 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:171910

评论

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

事务处理对持久统计信息自动收集的影响

GreatSQL

离线VS强制登录?Apipost与Apifox的API工具理念差异深度解析

数据追梦人

美国数学奥赛题,六套AI模型得分不足5%!

grandocean

Claude LLM模型 openai o1 QwQ DeepSeek R1 模型

新疆中泰携手用友开启智慧司库建设新征程

用友智能财务

财务 会计

百观科技基于阿里云 EMR 的数据湖实践分享

阿里云大数据AI技术

数据库 大数据 OSS OLAP EMR

混合APP开发框架及性能

北京木奇移动技术有限公司

软件外包公司 APP外包公司 APP外包开发

南京大学首上和鲸科技人工智能通识课!校企共育 AI 人才

ModelWhale

人工智能 大数据 教育 高等教育 南京大学

新晋 IoTDB Committer 经验谈:开源代码为用户创造价值

Apache IoTDB

深入理解 StarRocks Bitmap 索引和 Bitmap 去重

镜舟科技

StarRocks Bitmap 索引 Bitmap 去重 高基数列 精确去重

Cursor搭配专业编程显示器:点燃你的代码激情

默语

Apache SeaTunnel MCP Server:让AI成为你的ETL助手

Apache SeaTunnel

音乐 NFT 项目的上线流程

北京木奇移动技术有限公司

区块链技术 软件外包公司 音乐NFT

原生APP开发的性能优势

北京木奇移动技术有限公司

软件外包公司 原生APP开发 APP外包公司

阿里云 AI 搜索开放平台新发布:增加 QwQ 模型

阿里云大数据AI技术

人工智能 阿里云 强化学习 AI搜索 QwQ

全流程覆盖,闭环管理:中烟创新案卷评审评查系统实现精细化管理

中烟创新

西电整体替换SAP!用友BIP支撑装备制造业务运营和成本精细化管控升级!

用友BIP

智能体 数智化 用友BIP 一体化

Apple Safari 18.4 - macOS 专属浏览器 (独立安装包下载)

sysin

safari

2025年春招:如何使用DeepSeek优化简历,轻松敲开心仪公司的大门

安全乐谷

Java 面试 简历 笔试 春招

等保整改服务

黑龙江陆陆信息测评部

1688商品列表数据接口(1688.item_search)

tbapi

1688商品列表接口 1688API 1688商品数据采集 1688数据采集

新疆中泰携手用友开启智慧司库建设新征程

用友BIP

智能体 数智化 用友BIP 智慧司库建设

人工智能中的RAG技术在测试领域的探索

测试人

人工智能

「DeepSeek-V3 技术解析」:无辅助损失函数的负载均衡

Baihai IDP

AI LLMs Baihai IDP MoE 混合专家模型

感受一下『迅雷』的面试强度

王中阳Go

Go 面试 后端 迅雷

中小企业怎么低成本实现智改数转

积木链小链

数字化转型 智能制造 中小企业

拼多多商品详情接口(pdd.item_get)

tbapi

拼多多商品详情接口 拼多多API 拼多多商品数据采集

后 Web时代:AI 代理驱动的互联网

PowerVerse

智能合约 去中心化 web3 AI‘’

1688API系列:1688图片搜索拍立淘接口指南

tbapi

1688图片搜索接口 1688拍立淘接口 1688图片识别接口 1688图片搜索API

音乐NFT软件项目的性能优化

北京木奇移动技术有限公司

软件外包公司 音乐NFT 体育NFT

低代码时代来临,中小企业如何抓住数字化转型机遇?

天津汇柏科技有限公司

低代码 数字化转型

AI to B奇点将至,“伙伴+华为”体系如何跨越数智鸿沟?

Alter

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