InfoQ

News

Multirubyでの1.8と1.9の互換性の検証

作者 Werner Schuster, 翻訳者 編集部 投稿日 2008年2月13日 午前6時20分

コミュニティ
Ruby
トピック
ユニットテスト
タグ
テスト,
ZenTest
Rubyライブラリまたはアプリケーションに取り組んでいるデベロッパは、新たなタスクを抱え込んでいる。Rubyのバージョンに関わらず、コードが正 常に機能するよう確実にすることである。代わりのRubyを実装することが1つの理由であるが、一般的にMRIとほぼ同じように機能することを目的として いる。Ruby 1.9のリリースに伴い、この状況は変わった。Ruby 1.9に互換性がない変更があり、または少なくともコードの振る舞いに変更がある(参考記事・英語)

たとえば、1.9以前でブロックにおいて、ローカル変数に関する問題が生じた。以下は例である。
 a = 1
 foo.do_something {|a|
 a = 42
 }
 puts a
Ruby 1.8で、このコードは「42」とプリントされる。その訳は、実際ブロック変数は含まれているスコープのそれと同じであるからである。Ruby 1.9ではこれを固定して、期待通りにブロックを振る舞わせる。すなわち、「1」とプリントする。もちろん、ライブラリまたはアプリケーションのコード が以前の振る舞いに依存している場合、Ruby 1.9では違った振る舞いをする。

Zentestのパッケージがこのことを回避する。つまりMultirubyである。Zentestの作成者であるRyan Davis氏が、Ruby 1.8と1.9をMultirubyで扱う方法を紹介する(ブログ・英語)
1.9が発表された今、multirubyを使用したマルチバージョンのテストについて考えるべきではないか。multirubyはzentestファミ リーの中ではそれほど知られていないツールである。複数のパージョンのRubyや多重化コマンドを自動的にビルドしたり、個人的にインストールしたりし て、一度にそろって複数のバージョンのRubyをテストすることができる。
Zentestのインストールは単純である。
gem install ZenTest 
Multirubyは以下のように機能する。
  • たとえばRuby 1.8および1.9をダウンロードし、コンパイルする。
  • そして、 利用可能はRubyのバージョンのいずれかとの引数を実行する。
multirubyコマンドは、単にすべての指定された引数をRubyバイナリにパスするだけである。上記のコードサンプルを実行すると、以下のような出力が得られる。
VERSION = 1.8.6-p111
 42
RESULT = 0

VERSION = 1.9.0-0
 1
RESULT = 0

TOTAL RESULT = 0
 failures out of 2

Passed: 1.8.6-p111, 1.9.0-0
Failed:
ご覧のように、1.8.xでの出力は「42」であるが、1.9では「1」となる。(ここで「RESULT」は、Ruby解釈プログラムの終了コードである)。

必然的に、十分に高い割合のコードがテストでカバーされている場合に、Multirubyは単に問題を浮き彫りにするのに役立つだけである。さらにバージョンの高いRubyや、JRuby 1.0や1.1、IronRubyやRubiniusが利用可能になれば、ランタイムを越えたテストを簡略化するツールが極めて有用となる。

Ruby1.9を使用して、アプリケーションまたはライブラリを移植しただろうか。少なくともテストはしただろうか。

原文はこちらです:http://www.infoq.com/news/2008/02/multiruby-testing
ブックマーク
digg+,
reddit+,
del.icio.us+,
dzone+,
Hatena

No comments

返信

ジャンル別一覧

クラウドコンピューティング ~ EC2、Mosso、GoGrid

クラウドコンピューティングのプロバイダーであるEC2、Mosso、GoGridの新しいユーザーエクスペリエンスと、それぞれの機能の違いについて学びます。

仮想化入門

このArticleでは仮想化に関する利点と欠点を見ながら、仮想化の違いについて詳しく追っていきます。

Java 6のスレッド最適化は実際に動作しているのか? - パートII

パート2では、ベンチマークの結果を検証するために用いられるテクニックについてさらに深く見ていきたいと思います。最後に、「なぜプロセッサが異なるとロックのコストも大きく異なるのか」と言う真の疑問に答えます。

RESTアンチパターン

本稿では、Stefan Tilkov氏が「RESTful」な設計であると主張するアプリケーションに見受けられる最も一般的なアンチパターンのいくつかについて説明し、それらを避けるための方法を提案しています。

モデル駆動ソフトウェア開発のためのベストプラクティス

Sven Efftinge氏、Peter Friese氏とJan Köhnlein氏が、MDDを取り入れて成功した経験から、ベストプラクティスの解説を行います。

スケーラビリティの構築とパフォーマンスの達成:バーチャルパネル

Our panel of leading experts explores some of the challenges and thought processes that go into making their apps as scalable and performant as possible.

Spring 2.5:Spring MVCの新機能

この記事は、Spring 2.5で導入されたアノテーションを探究する3部作の第2弾です。Web層におけるアノテーションのサポートを扱います。最後の論文では、統合と検査で利用できる追加機能を説明する予定です。

"YUKATA"から始まるコミュニケーション(Agile2008 ライトニングトークより)

私は「浴衣」を着てパーティーに参加したことで、たくさん声を掛けていただけました。 そこで感じたことは、このカンファレンスが人との繋がりを生み出し、また言葉の壁を越えて積極的に交流する場所であることです。民族衣装はそれらを助けてくれるものでした。きっとこの交流が、新たなムーブメントをアジア圏の仲間たちにも与えてくれると確信しています。