InfoQ

InfoQ

News

マイブックマーク

ブックマークするためにログイン または 会員登録 する

ブックマークされました!

ブックマークがエラーになりました。もう一度お願いします。

RubySpecのオフィシャルWebサイトとGoogle Summer of CodeのRubySpec担当の学生

作者 Mirko Stocker , 翻訳者 編集部 投稿日 2008年6月14日

セクション
デベロップメント,
プロセス/プラクティス
トピック
Ruby ,
ユニットテスト ,
アジャイル技術
タグ
RubySpec ,
Google Summer of Code ,
テスト

Brian Ford氏はRubySpecプロジェクトのオフィシャルWebサイトを(サイト・英語)発表した(source)

 

このプロジェクトは、RSpecスタイルの仕様に基づいてRubyプログラミング言語向けに完全に実行可能な仕様を書くことを目的としています。当プロジェクトは、初期のRubiniusに(サイト・英語)貢献するというほんのささいなところからのスタートでしたが、以来献身的な人々のおかげで6900を超えるサンプル(example)と2560を超えるエクスペクテーション(expectation)に到達するまでに成長しました。

Ruby言語には望ましい振る舞いを明記した正式な標準がまったく存在しないが、Rubyの実装数増加に伴い、仕様書は明らかに必要になってきている。最新ソフトウェアを開発する精神からすれば、実行可能な仕様はその他のドキュメンテーション形式より望ましい。その理由は単純で、仕様集が実行可能であれば、適合性の実証がいっそう容易になり、ただちにフィードバックできるからである。

来たるGoogle Summer of Codeに参加する2人の学生、Federico BuilesとArthur Schreiberは、Ruby仕様の改良と拡張を行う予定である。この2人と話し、この夏、何に取り組むかを聞いた。

Federico Builesはコロンビアの学生で、Cの替わりとなるものを探していたおよそ2年前に、Rubyに関わるようになり、現在はRubiniusプロジェクトに貢献している。Google Summer of Codeにおける目標について尋ねた。

 

 

プロジェクトではまず、Standard内のライブラリとCore Lib、すなわちREXML、YAML、Logger、Socket、IO向けに仕様(テスト)を書きます。

私のプロジェクトのもうひとつの役割は(Charles Oliver Nutter氏に(source)提案されたものですが)、他のRuby実装で使用している異なるテストケースに注目し、それをRubyspecにポートし、可能な限り完全な仕様一式を作るよう努力することです。

テストが欠落しているコードを探し出す方法についても、Builesに聞いた。

 

 

 

すでに作業中の決まったライブラリ一式があるので、寄り道せずにこのライブラリのドキュメンテーションをすぐに見て、メソッドにさせるべきことを確かめてから、スペックを仕上げます。ドキュメンテーションどおりに機能するなら申し分ありませんが、機能しない場合はソースを読むことから始め、何が起こっているのかを確かめます。

すぐにコードに取り掛からず、ドキュメンテーションを読むことには利点がありますが、その1つは、ものによっては期待どおりに動作しないと判明することがたびたびあることです。REXMのスペックカバレッジを始めたとき、小さなバグや最新状態になっていなかったドキュメンテーション向けに、一日のうちに3つも4つもパッチを送らなければならなかったのですが、現在ではRuby 1.9になって修正されています。今ではRubyspecがMRIの一部になったので、この種のものはすぐに発見され、その修正もずっと早くなると思います。

Rubyspecで使うRSpecの単純なクローンMSpecにより(source)、まだテストがないライブラリでスタブ生成が可能になり、その後、XもしくはY実装向けにタグincomplete、タグready、タグfailingなどを付けることができます。 こうすれば、Ruby実装で問題を起こしているlibの存在が明らかになりますが、修正で加える変更をカバーしてくれるテストスイートが存在すると分かっているので、その問題の修正にすぐに取りかかれます。

Rubyの仕様に取り組む2人目の学生は、19歳のドイツ人、Arthur Schreiberである。Rubiniusとの関わりは2007年5月以来で、これまでに小規模のパッチやバグ修正、多数のスペックで貢献している。Schreiberにも同様の質問をした。

 

Google Summber of Codeにおける私の目標は、Ruby Standard Libraryの少数のスペックを作成もしくは改良することで、対象ライブラリはCGIやStringIO、Net、Set、その他の小規模ライブラリです。


RubiniusチームのBrian Ford氏がRSpec互換のBDDフレームワーク、MSpecを開発しましたが、このMSpecを主要ツールの1つとして使用します。裏側にあるアイデアは、Ruby言語の高等機能を回避することにより、それほど完璧でない実装でもスペックを実行できるようにすることです。


MSpecはかつて基本的なカバレッジユーティリティーをサポートし、まったくスペックを持たないメソッドを指し示すことができましたが、MSpecとRubyspecsが別々のライブラリに分かれたため、ユーティリティーは削除されてしまいました。Brian Ford氏は、できるだけ早い時期にこの機能の再追加を検討する予定です。RCovを(source)Standard LibraryスペックのSpecカバレッジに使うことについても、検討中です。

これをお読みのあなたも貢献したいなら、Vladimir Sizikov氏が書いたRubySpecのクィックスタート・ガイドに(source)基本的な始めの一歩が説明されている。プロジェクトの詳細については、RubySpecWebサイトをご覧あれ(サイト・英語)

原文はこちらです:http://www.infoq.com/news/2008/05/rubyspec-website-and-gsoc

特集コンテンツ一覧

GAE開発の落とし穴

Googleのクラウド環境をつかったGoogle App Engineによる開発するにあたり、初めての試みで苦悩する開発者達の経験をもとに、各開発フェーズにあわせて問題点やどう解決したかをご紹介します

イベントレポート:「Coqチュートリアル#1」

去る1月12日、定理証明支援系ツールCoqの初心者向けチュートリアルが開催さ れた(http://kokucheese.com/event/index/23667/)。今後も2月2日 (http://kokucheese.com/event/index/23744/)、2月9日、2月16日と引き続き開 催されていく予定である。本記事では、開催の様子をレポートする。

Javaの未来についてのNeal Gafter氏とのディスカッション

Choosing Options

Neal Gafter氏はOracleによるJava買収の影響に関する議論、Javaにセグメンテッドスタックやメタオブジェクトプロトコルを追加することについての主張、そしてJavaとC#との比較について話をしてくれた。

Google Dartのエッセンス:アプリケーションの構築、スナップショット、Isolate

GoogleはVMをともなう新しい言語であり、JSコンパイラでもあるDartをプレビューした。 InfoQはDartのアプリの構築に貢献する文法の裏側を探った:スナップショット、Isolate、モジュール方式

CSPベースのモデル検査ツール「Process Analysis Toolkit」

本記事ではCSPベースの「マルチドメイン・モデル検査ツール」である、PAT(Process Analysis Toolkit)について紹介する。モデル検査は、形式手法(Formal Method)という方法論を基礎とする技術であり、複雑さが増大しながらも安全性を求められる、現在のソフトウェア開発の状況に対する処方箋の1つとして注目されている手法である。

Jenkinsによる継続的インテグレーションのススメ(4) ~CloudBeesでJenkinsをサービスとして使う~

前回まで、Jenkinsの幾つかの側面に注目して解説をしてきました。シリーズ最後の今回は、Jenkinsをサービスとして使う方法を紹介します。

書籍『抽象によるソフトウェア設計-Alloyではじめる形式手法-』の紹介

Alloyは、MITにて開発された仕様記述言語であり、ツールによる自動解析を使い、インクリメンタルに形式仕様が書けることが特長である。筆者らはAlloy開発者による、Alloyを使った形式手法入門書を翻訳、今夏にオーム社より刊行した。本記事では、Alloyの簡単な概要と、翻訳書『抽象によるソフトウェア設計』(「Alloy本」)を紹介する。

Windows デバイスで開発するタッチユーザーインターフェイス

スマートフォンを中心としたマルチデバイスにおけるタッチユーザーインターフェイスへの対応は、既に必須の項目となりつつある。本記事では、Windows デバイスにおける UX のベースとなっている「メトロ」というデザイン言語を掘り下げながら、既存環境を意識しつつもどのようにタッチユーザーインターフェイス開発に取り組んでいくべきであるかについて解説していく。