RubySpec 官方网站及其参与 Google 编程之夏的学生

  • Mirko Stocker
  • 贾晓楠

2008 年 5 月 27 日

话题:Ruby测试语言 & 开发文化 & 方法

Brian Ford 宣布开通了RubySpec 项目的官方网站:  

该项目的目标是基于 RSpect 风格的规范(specs)为 Ruby 编程语言建立一个完整的可执行规范。这个项目一开始只是一个早期Rubinius开发者眼里的小火苗。后来它发展到由热心的人们贡献的超过 6900 个实例和 25600 个期望。

Ruby 语言并没有一个正式的标准来规定它的表现和性能。而且 Ruby 的实现版本越来越多,因此必然需要一个规范。在现代软件开发的精神下,可执行的规范要好于用其他形式的规范。因为它能够执行,而且几乎可以立即给出反馈。这样就很容易对一致性进行验证。

Federico Builes 和 Arthur Schreiber 两位同学正准备参加即将开始的 Google 编程之夏(Google Summer of Code)活动。他们打算对 Ruby 规范进行改进和扩展。我们访问了他们两个,谈了他们准备在这个夏天做哪些工作。

Federico Builes 是哥伦比亚大学的学生。他是两年前在寻找用什么来代替 C 时开始接触 Ruby 的。现在他正在参与 Rubinius 项目的开发。我们问了他在这次在 Google 编程之夏活动中的目标:  

项目的第一部分是为一些标准库和内核库写规范(测试),包括 REXML、YAML、 Logger、Socket 和 IO。

剩下的部分(由Charles Oliver Nutter所建议)是看一看其他 Ruby 实现版本所使用的不同的测试用例,并把它们移植到 Rubyspec 中,使我们的规范尽可能完整。 

我们还问了 Federico 怎样找出缺少测试的代码:  

由于我已经确定了要用的哪些库,我就直接找出这些库的文档,查看一个方法的功能,然后写出相应的规范。如果这个方法像文档所写的那样工作,就非常好。如果不是,我就去读源代码,看看到底是怎么回事。

先 阅读文档而不是直接去读代码的一个好处是,你能经常看到有些东西不按照要求来工作。当我阅读 REXML 规范时,我在一天内就为一些小错误和过时的文档发了 三四个补丁。现在,他们在 Ruby 1.9 中都修补好了。由于 Rubyspec 是 MRI 的一部分,我想这类错误应该会被很快发现并修补。

另外,MSpec 是一个我们在 Rubyspec 中使用的 RSpec 复制品,它能帮你为还没有测试的库建立标志,然后你可以把它们标记成未完成、就绪、在 X 或 Y 实现版本上失败等状态。这样你就能看到一些库会在某些 Ruby 实现版本中出问题,然后着手去解决。慢慢地你就会发现测试用例覆盖了所有的改变。

19 岁的 Arthur Schreiber 来自德国,他是另一个参与此项目的学生。他从 2007 年 5 月开始接触 Rubinius,提交了许多补丁,修补了一些错误和许多文档。我们问了他同样的问题: 

在这次 GSoC 活动中,我的目标是为一些 Ruby 标准库建立或者改进规范,包括 CGI、StringIO、Net、Set 以及其它一些更小的库。

我们使用的主要工具之一是 MSpec。它是一个兼容 RSpec 的 BDD 框架,是由 Rubinius 团队的 Brian Ford 开发的。MSpec 的目的是通过回避 Ruby 语言的高级特性,让未完成的实现也能运行规范。

MSpec 支持一种基本的覆盖功能,可以指出尚没有规范的方法。可是这个功能已经被去掉了,分别放进了 MSpec 和 Rubyspecs 各自的库里。Brian Ford 准备尽快把这个功能重新加进去。还有一种想法,是采用RCov来检查标准库的规范覆盖情况。

如果你想做一些贡献,Vladimir Sizikov 写了一篇RubySpec 快速入门指南,讲解了入门的基本步骤。要了解该项目的详细情况,请访问RubySpec 网站

查看原文:The Official RubySpec Website and Its Google Summer of Code Students

Ruby测试语言 & 开发文化 & 方法