写点什么

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

  • 2007-05-22
  • 本文字数:1631 字

    阅读完需:约 5 分钟

存在一个详细的规格规范所有 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 作为起点,对 RubySpec RubyTest 项目也是如此。 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

2007-05-22 23:001256
用户头像

发布了 150 篇内容, 共 52.6 次阅读, 收获喜欢 10 次。

关注

评论

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

昇腾AI4S图机器学习:DGL图构建接口的PyG替换

Splendid2025

机器学习

基于 Agentic AI + Amazon Redshift MCP Server 实现 Agentic Data Analysis

亚马逊云科技 (Amazon Web Services)

远程访问代理+内网穿透:火山引擎边缘网关助力自部署模型公网调用与全链路管控

火山引擎开发者社区

火山引擎

HarmonyOS运动开发:打造便捷的静态快捷菜单

王二蛋和他的张大花

工业涂装领域里的匠心代表

科技热闻

千数平台(qData)正式开源,打造最强开源数据中台!

千桐科技

数据中台 数据治理 数据开发 大数据平台 数据集成

政务行业一体化平台的小程序化实践路径:生态融合与数字化转型创新

xuyinyin

如何在 Go 中获取 goroutine 的 ID?

左诗右码

大数据-10-HDFS集群 Java实现MapReduce WordCount计算 Hadoop序列化 编写Mapper和Reducer和Driver 附带POM 详细代码 图文等内容

武子康

大数据 hadoop mapreduce hive

Focus for Mac:告别分心,效率拉满的终极神器

Rose

观测云产品更新 | 场景AI智能分析、指标分析、云账号管理等

观测云

产品迭代

OpenFold2.0 基于NPU的推理适配与测试

Splendid2025

机器学习

BOE(京东方)携钙钛矿、新能源产品及解决方案亮相2025 SNEC 科技创新赋能行业绿色发展

科技热闻

从 Facebook 到阿里再到小质科技,王绍翾携 ProtonBase 在全球数据库市场"打怪升级"

猫头虎

postgresql 数据库、

装备管理系统(源码+文档+讲解+演示)

深圳亥时科技

Microsoft PowerPonit LTSC 2024 16.98 微软幻灯片演示制作

晨光熹微

指挥中心室内LED显示屏:技术与应用价值

Dylan

信息 LED显示屏 全彩LED显示屏 led显示屏厂家 户内led显示屏

CrossOver软件怎么用?CrossOver25中文免费版下载安装教程,CrossOver25激活码分享,CrossOver618年中大促最新优惠活动

阿拉灯神丁

Mac软件 苹果软件精选 CrossOver Mac下载 crossover mac 破解版 618特惠

Java 组件封装方法与使用指南详解

小焱

TruBit Pro:深化全球布局,拓展战略合作

科技汇

豆包全新视频生成模型、视觉深度思考模型发布

火山引擎开发者社区

模型 豆包

企业级AI Agent爆发,CoCo如何用结果说话?

ToB行业头条

AI 大模型 agent 智谱

Proxyman Premium for mac 5.21.0 HTTP 调试代理应用程序

晨光熹微

vivo Pulsar 万亿级消息处理实践(2)-从0到1建设 Pulsar 指标监控链路

vivo互联网技术

大数据 消息队列 pulsar Kafka Producer

NocoBase 本周更新汇总:优化及缺陷修复

NocoBase

开源 低代码 零代码 无代码 版本更新

Java 语言基础概念与常识之主要特点详解

小焱

每秒处理超22W条日志!云服务中的高效、自适应日志解析框架 ByteBrain-LogParser

火山引擎开发者社区

火山引擎

AI 口语练习APP的开发

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

软件外包公司 AI口语练习 AI英语学习

AI口语陪练APP的核心功能

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

软件外包公司 AI口语练习 AI英语学习

智能查重防串标:筑牢烟草行业招投标诚信“防火墙”

中烟创新

火山引擎 veFuser:面向扩散模型的图像与视频生成推理服务框架

火山引擎开发者社区

视频 火山引擎

Google SoC系列:为Ruby运行时创建RSpec规格_Ruby_Werner Schuster_InfoQ精选文章