BT

InfoQ ホームページ ニュース Multirubyでの1.8と1.9の互換性の検証

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

ブックマーク
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

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

BT

あなたのプロファイルは最新ですか?プロフィールを確認してアップデートしてください。

Eメールを変更すると確認のメールが配信されます。

会社名:
役職:
組織規模:
国:
都道府県:
新しいメールアドレスに確認用のメールを送信します。このポップアップ画面は自動的に閉じられます。