InfoQ

InfoQ

新闻

我的书签

登录注册 以永久保存书签。

该内容已经被标记书签!

标记书签错误,请重试!

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

作者 Sadek Drobi 译者 李剑 发布于 2007年10月19日

领域
语言 & 开发,
架构 & 设计,
过程 & 实践,
企业架构
主题
架构 ,
领域专用语言 ,
设计 ,
敏捷技术 ,
建模 ,
单元测试 ,
敏捷
标签
商业模式 ,
测试驱动开发 ,
面向语言编程 ,
协作技术
用户界面和用户期待,也即用户模型之间的不一致性,是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?

译者 李剑 李剑──ThoughtWorks高级咨询师,在持续集成、重构等领域具有丰富的经验;多次为国内大型企业敏捷组织转型提供咨询和培训服务。

貌似很cool 发表人 曹 云飞 发表于
不同意Ron Scott说的:TDD是用来找出代码中的变化是否造成了破坏的手段 发表人 熊 小 发表于
Re: 不同意Ron Scott说的:TDD是用来找出代码中的变化是否造成了破坏的手段 发表人 小刀 凉粉 发表于
对于一个DSL,怎么样才算是design-tuned呢? 发表人 熊 小 发表于
Re: 对于一个DSL,怎么样才算是design-tuned呢? 发表人 熊 小 发表于
  1. 返回顶部

    貌似很cool

    发表人 曹 云飞

    编程由编写商业逻辑转为编写书写商业逻辑的DSL,看起来很cool。从逻辑上讲应该会带来更的错误,只不过错误的分布与以前不同了。部分错误转移到DSL中了。这样的情况下出了bug后程序员不仅要在应用中找bug,也要在DSL中找。不要假设DSL没有错误,在真实工作环境中这不成立。

  2. 返回顶部

    不同意Ron Scott说的:TDD是用来找出代码中的变化是否造成了破坏的手段

    发表人 熊 小

    如果只是一个类似于扫雷器的工具,那么TDD还能受到现在这样的重视么?虽然我的TDD经验并不丰富,但是我确实体会到了test是如何drive design的。再看TDD的英文,TEST DRIVEN DESIGH。可将Test Driven看作是对design的修饰。

  3. 返回顶部

    对于一个DSL,怎么样才算是design-tuned呢?

    发表人 熊 小

    它的内涵和外延在哪里?如果statically locked down了,那么这个DSL能说是design-tuned吗?敏捷的重要作用是减少浪费,使用DSL,并对其进行设计优化,也应该是为了这个目的。根据边际效应递减原理,优化到某种程度之后,再做新的努力,不但不会提升整体,反而有可能产生新的浪费。也因为如此,文中提到的“如果一个经过设计优化的DSL‘功能上已经 全部完成,不再变化’,那么要是想通过关注业务或是技术领域来推进DSL的发展的话,那它就无法再像从前一样为我们带来同样的价值。”,从约束理论(《拥抱变化》中也有相关内容)来看,要确定当前影响产出的最大瓶颈在哪里,再对症下药。当然,如果是从纯技术的角度考虑DSL的发展,无可厚非,那就不要再幻想它能够像一开始那样带来同样的价值了。

  4. 返回顶部

    Re: 对于一个DSL,怎么样才算是design-tuned呢?

    发表人 熊 小

    加链接没加上,Amr Elssamadisy 关于约束理论的文章:www.agilejournal.com/articles/articles/theory-o...

  5. 返回顶部

    Re: 不同意Ron Scott说的:TDD是用来找出代码中的变化是否造成了破坏的手段

    发表人 小刀 凉粉

    我觉得Ron Scott说的就是扯淡

深度内容

大规模视频网站的计费与流量管理

本次分享将会就大规模视频网站的计费与流量管理这个话题,从操作层面细细进行讲解和分析,为系统工程师们揭示平日里我们没有关心的另一些内容。同时也希望本次分享能揭示行业中的一些“潜规则”,让互联网行业的流量与带宽管理更为开放与简洁。
本次演讲视频录制于QCon杭州2011

专访Jeffrey Richter:Windows 8是微软的重中之重

Jeffrey Richter以其多本Windows核心技术的经典著作而闻名,同时,他深入掌握微软的.NET等一系列核心技术,2012年1月,Jeffrey Richter在北京接受了InfoQ中文站的专访,谈到Windows 8和WinRT编程,并就异步编程、Windows编程中的可扩展性、性能和安全性方面给出自己的建议。

应用云平台的可用性——从新浪SAE看云平台设计

云计算平台的可用性,相比传统互联网服务而言,更加复杂和困难,也更具有挑战性。本文借助新浪SAE云平台为读者讲述了云平台可用性的定义、如何打造高可用的平台,以及对云计算的用户提出了建议。

JVM定制改进 @ 淘宝

淘宝高度重视Java平台的健康发展,组建了一个团队专注于Java平台的底层部分的性能、功能与稳定性改进;工作主要基于OpenJDK中的HotSpot VM开展,其中一些通用的功能随后也会逐渐反馈给OpenJDK社区。希望能与使用Java平台开发应用的大家交流经验。
本次演讲视频录制于QCon杭州2011

"伤得起"的云计算应用——对云端应用之架构的思考

2011年4月21日至22日是值得云计算从业者纪念的日子。Amazon的IaaS服务出现故障,导致许多商业网站的服务中断,影响非常严重。作为云计算用户,我们需要思考的是,如何保证即便在云服务不可用的情况,我们的应用架构仍然能够屹立不倒?本文正是站在云计算用户的角度试图探讨这一问题。

让交付的速度跟上思考的速度

12人的技术团队,4组刀片服务器,每月20亿的访问量,每日1次准时部署,99.9%的可用性。这可能吗?当然。想知道如何做的吗?百姓网将与您分享他们在DevOps实践过程中的经验和技巧。
本次演讲视频录制于QCon杭州2011

架构之路——穿行在产品和业务之间

篱笆作为一家起源于社区的电子商务公司,反映到技术层面就是同时要面对产品和业务,以及经营战略的变化调整。如何在产品和业务的夹缝之间完成技术架构的抽象与平衡,寻找更有效的价值定位,这当中有些经验教训和个人感悟愿与众人分享。
本次演讲视频录制于QCon杭州2011

特性注入:成功三部曲

本文将对特性注入以及相关方法做一个扫盲性的介绍。我们会解释这个框架的关键要素,并附上实例来证实它们。为了让文章保持相对较短,我们不会深入到某个工具或方法中,而是会给出一些参考资料,以便大家做进一步的研究。