11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

使用高度抽象的 DSL 来减轻测试负担?

  • 2007-10-19
  • 本文字数:926 字

    阅读完需:约 3 分钟

用户界面和用户期待,也即用户模型之间的不一致性,是 bug 的一个重要来源。如果没有面面俱到的信息来描述软件的工作方式,那么用户就会觉得它的行为是不可预知的。Leonardo Vernazzade 的观点是,用户和 UI 所使用的并不是同一种语言,所以需要进行翻译。

他在自己最近的 blog 上说到,“语言之间的差异越大,翻译时出现的问题也会越多”,同时,为了保证翻译的一致性而带来的测试压力也就越大。所以,在很多 情况下,比较好的解决方式就是提供一个用户模型和用户界面可以共享的“高度抽象的语言”,也就是领域特定语言(DSL)。这可以帮助我们避免翻译和相应的 测试所造成的浪费。Leonardo 认为,从更通用的角度来说,提高抽象级别可以减轻测试负担,而且这一做法可以被应用到任何其他模型中,如软件设计、实 现等等:

当你站在合适的抽象层次上表达一些事情的时候,就无需测试了,[……] 你会对 C#或者 Java 中的 += 运算符进行测试么?反正我不会。

Andres Aguiar 也曾经在他的 blog 上谈论说,如果我们在完善抽象这一方面投入足够的精力,那么就没有必要进行TDD,甚至是单元测试了。但还是有一些问题是需要考虑周全的。

使用DSL 来减轻测试的负担,其前提就是要对DSL 本身进行彻底的测试。Leonardo Vernazza 声称,“在大多数情况下,这比测试所有的用户界面要简单的多,而且工作量也会大大减少”。这种方法会带来“责任的再分配”,把测试的负担转移到DSL 的作者身上。不过Gareth Jones 相信,“很多DSL 的作者都不会用大量的语言变量来测试他们的代码生成器”。

Scott Bellware 在 Andres Aguiar 的帖子后面着重说到, 判断“抽象所固有的最佳层次”并非易事,但Brad Head 指出,这正好就是TTD 所做的事情:“用‘试试看’来挑战你的设计抽象”。然而Ron Scott 却争论说,TDD 是用来找出代码中的变化是否造成了破坏的手段。Bellware 实际上所强调的是,如果一个经过设计优化的DSL“功能上已经 全部完成,不再变化”,那么要是想通过关注业务或是技术领域来推进DSL 的发展的话,那它就无法再像从前一样为我们带来同样的价值。

您是怎样看待抽象 vs. 测试的呢?你认为可以用DSL 来减轻测试的负担么? 查看英文原文 High abstraction level of DSLs to reduce the testing burden?

2007-10-19 03:35657
用户头像

发布了 197 篇内容, 共 49.0 次阅读, 收获喜欢 20 次。

关注

评论

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

阿里码农肝了2晚,整理的Java语法总结,网友:考试复习全靠它了

飞飞JAva

让电影票房飞一会儿,五一换个姿势重温经典

华为云开发者联盟

音视频 电影修复 视频超分 媒体处理 混合失真

LeetCode题解:191. 位1的个数,位运算,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

软件 IT 专业大学生职业方向情况调查

李孟

大学生日常 IT 大学生

GitHub开源的中国亲戚关系计算器

不脱发的程序猿

GitHub 开源 程序员 4月日更 中国亲戚关系

SpringSecurity+JWT认证流程解析

学Java关注我

Java 编程 程序人生 计算机 架构】

一文带你了解华为云GaussDB的五大黑科技

华为云开发者联盟

数据库 华为云 GaussDB(for Influx) 时间线 tpmC

人类视觉神经科学助力音视频产业革命-弱网下的极限实时通信

张音乐

音视频 笔记 弱网下的极限实时视频通信

云图说|ModelArts Pro,为企业级AI应用打造的专业开发套件

华为云开发者联盟

AI 企业应用 ModelArts Pro 开发套件

让宝妈宝爸告别安全顾虑,区块链构建母婴行业新生态

CECBC

母婴

量化策略倍投系统搭建,马丁策略交易

CloudQuery v1.3.7版本更新,新增「导出限制」

CloudQuery社区

数据库 sql 数据安全 数据库管理

ceph-csi源码分析(3)-rbd driver-服务入口分析

良凯尔

Kubernetes 源码分析 Ceph CSI

Python3 print变量打印输出功能后面隐含的几个知识点

老猿Python

Python print str repr

Kubernetes 上如何控制容器的启动顺序?

张晓辉

Kubernetes istio

流水线成功涨薪到年薪30W 只有努力才能成功

学Java关注我

Java 架构 程序人生 编程语言

Boss直聘转发超100W次Java面试突击手册 火遍全网

比伯

Java 编程 程序员 架构 计算机

耗时5小时,用低代码搭了2套应用,我才明白它为什么能火了

优秀

低代码 低代码开发 低代码开发平台 低代码平台

抵制羊毛党,图计算“加持”互联网电商风控

华为云开发者联盟

风控 图计算 互联网电商 羊毛党

迪安精选:那些好用的浏览器扩展

迪安

浏览器 插件 扩展

yarn的applicationMaster介绍

五分钟学大数据

YARN

Faiss源码剖析:类结构分析

华为云开发者联盟

机器学习 KNN Faiss 类结构 Quantizer

飞桨中国行落地合肥,与当地企业共话产业智能化升级

百度大脑

智能化 飞桨中国行

vue+webpack+vue-cli

Vue js 打包 webpack vuecli

NumPy之:数据类型对象dtype

程序那些事

Python 数据分析 Numpy 程序那些事

uni-app rtm插件集成指南及常见问题--iOS

anyRTC开发者

uni-app ios 音视频 WebRTC sdk

群英荟萃 | UINO优锘科技ThingJS平台亮相华为开发者大会

森友小锘

物联网 3D可视化 数字孪生

ceph-csi源码分析(4)-rbd driver-controllerserver分析

良凯尔

Kubernetes 源码分析 Ceph CSI

中国区块链产业全景图

CECBC

技术应用

浙江宁波市区块链研究机构发布首个全国性公证联盟运营链

CECBC

区块链

SpringCloud-技术专题-Feign组件基本使用(1)

洛神灬殇

Configuration Hystrix spring-cloud Fegin Ribbon

使用高度抽象的DSL来减轻测试负担?_敏捷_Sadek Drobi_InfoQ精选文章