InfoQ

InfoQ

新闻

我的书签

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

该内容已经被标记书签!

标记书签错误,请重试!

Google SoC系列:为Ruby运行时创建RSpec规格

作者 Werner Schuster 译者 宋玮 发布于 2007年5月22日

领域
语言 & 开发
主题
JRuby ,
动态语言 ,
Ruby ,
单元测试
标签
Google编程之夏 ,
文档 ,
JRuby ,
IronRuby ,
Rubinius ,
RSpec

存在一个详细的规格规范所有Ruby运行时实现是很有必要的。当前,为了使Ruby运行时与松本行弘(Yukihiro Matsumoto,Matz)所提供的官方Ruby相兼容,实现者不得不核对C代码来了解它是怎么做的,或者如果做不到那样的话,直接问Matz或Ruby社区某某东西是如何工作的。随着越来越多的Ruby版本问世(JRuby、Rubinius、MS IronRuby等等),对于一个正式规格的呼声也已经不绝于耳。如果该规格是可执行的代码而非文字说明,那更就好了。有两个Google Soc项目打算解决这一问题,为Ruby创建RSpec规格。RSpec被描述为:

RSpec是一个框架,它为程序员提供了一个领域特定语言,使用易读的、可执行的例程,描述Ruby代码的行为。这些例程可以指导你的设计过程,并可以作为良好的文档和测试用例。

这有点像测试驱动开发(Test Driven Development,TDD),单元测试应在代码之前编写。实际上,RSpec专注于描述代码的行为,并试图使这些描述尽可能地易读。Pedro Del Galle正从事“使用RSpec覆盖Ruby内核(Cover the core of Ruby with RSpec)”的项目,而Florian Gross正着手于“用于Ruby实现的RSpec套件(RSpec suite for Ruby implementations)”项目。当被问到为什么会存在两个关注点类似的项目存在时,Pedro这样解释:

我和Florian在互不知情的情况下提出了这两个议题。两个GSoC项目十分相似说明了一种现象。在Ruby界创建一个中心测试仓库(Repository)是个热点话题。其中笹田耕一(Sasada Koichi)或Evan Phoenix在其他采访中谈到了这一点。我想我们的项目正是创建这样一个中心测试仓库的好机会。我们准备同Charles Nutter合作,他正在主持两个有趣的项目,RubySpec和RubyTest。Florian将主要精力集中在语言规格上,而我主要集中在类库规格上,但不能认为这是个非常严格的任务划分。我们将尽量使这些规格尽可能的完善和详细。

注:笹田耕一在支持一个叫做YARV的项目,这是一个新的Ruby VM,最近被并入到Ruby 1.9分支上。Evan Phoenix是Rubinius项目背后的推动者,这是一个主要用Ruby编写的Ruby实现。

当被问到为什么选择RSpec,Pedro解释到:

这是个有趣的问题,RSpec有一个很大的缺点,它没有小到让实现者可以在其VM上运行该框架。我们不想重新发明轮子,Rubinius拥有一个基于RSpec的漂亮而成熟的测试套件,并有机制可以依赖其他的Ruby实现运该测试。我所理解的测试不仅是一个避免错误的开发者工具,也是一个“活生生的文档(Living Document)”的良好来源。

为Ruby这样的系统创建一个规格说明,其工作量是很大的。Pedro详细说明了他和Florian计划将怎么解决这个问题,以及哪里是挑战所在:

我们将设法专注于核心基础架构、以及Ruby 1.8.6里的核心语言规格和核心类库规格。这样看我们做得如何了。优先去建立一个高质量规格说明,尽量避免边界情况的漏洞。我想,这是一个长期的项目,我们不可能在SoC计划的时间内满足所有这些要点。现在我们正在划分什么是重要的问题以及什么是我们优先要解决的问题。设法避免规格里的漏洞在软件系统里总是一个难题,当该系统是一种语言时困难更大,其可能性范围及边界情况也是非常多的。因此我认为面临的挑战是做出好的分析,覆盖面尽可能的完善和详细。我的指导者(John Hornbeck)将是一个很重要的角色。

为Ruby创建规格是一个庞大的任务,伸出援助之手总是有帮助的。Pedro指出感兴趣的人可以以该项目的Wiki作为起点,对RubySpecRubyTest项目也是如此。Pedro的Blog也是一个好的信息来源。

查看英文原文:Google SoC Series: Creating RSpec specs for Ruby runtimes


译者简介:宋玮,多年软件开发经验,从2002年开始就使用Java,在各个项目开发过程中先后使用过Struts、Oracle ADF、AspectJ等。最近正在使用Spring及Ruby on Rails,对敏捷方法有比较大的兴趣并做过一些尝试。他的blog为http://www.donews.net/victorsong。为InfoQ中文站贡献内容,请邮件至china-editorial[at]infoq.com

 

译者 宋玮 有多年软件开发经验,长期担任技术管理和项目管理工作,一直关心开源软件的发展动态以及软件过程和敏捷开发的实践探索。

深度内容

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

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

特性注入:成功三部曲

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