John Resig - JavaScript, Programming, and Web Applications

Webアプリケーションの開発において複数のブラウザとOSで組合試験を実施するのは容易な作業ではない。クロスブラウザに対応したJavaScriptライブラリを利用することでこの問題の軽減をはかることができるが、そもそもJavaScriptライブラリの開発ではどうやって試験が実施されているのだろうか。jQueryの開発者であるJohn Resig氏がJavaScript Testing Does Not ScaleにおいてjQueryにおける試験の方法と問題点、問題を解決するために現在取り組んでいるプロジェクトを紹介している。試験のアイディアはWebアプリケーションにも適用できるため開発者やテスターはチェックしておきたい。

jQeuryにはいくつも試験ツールがあるが、少なくとも次の10の試験用のXHTMLがあるという。

  • XHTML (HTML mimetype, 適切なdoctype): 詳細試験用 (コア機能試験、DOM詳細試験、セレクタ試験、Ajax試験など)
  • XHTML (HTML mimetype, 適切なdoctype): オフセットポジション試験用
  • XHTML (application/xhtml+xml mimetype, 適切なdoctype): 詳細試験用
  • XHTML (application/xhtml+xml mimetype, 適切なdoctype): オフセットポジション試験用
  • XHTML (application/xhtml+xml mimetype, doctypeなし): 詳細試験用
  • XHTML (application/xhtml+xml mimetype, doctypeなし): オフセットポジション試験用
  • PrototypeおよびScriptaculous混在版: 組合試験用
  • Mootools混在版: 組合試験用
  • 古いバージョンのjQuery混在版: 組合試験用
  • Object.prototype操作用

これに加え、jQueryがサポート対象にしているブラウザが12個ある。

  • IE 6、7、8
  • Firefox 2、3、ナイトリービルド
  • Safari 3.2、4
  • Opera 9.6、10
  • Chrome 1、2

試験に使われるOSはWindowsに限定されている。10試験を12のブラウザに対して、パッチをコミットする前と後で1回ずつ実行して動作に不具合がでないかどうか調査する必要がある。理想的にはMac OS XやLinuxを対象に含めるとともに、MobileSafari、Opera Mobile、NetFront、Blackberryなどのモバイルブラウザも含める必要がある。

試験すべき内容が増加するのに対して試験方法がスケールしないというのは致命的な問題だが、さらにもうひとつ問題があるという。人間が操作するインタラクティブ面を試験するために自動化ツールが用意されているものの、近似的に似せているだけでやはり人間が操作するものとは違っており、最終的には人の手によるインタラクティブ試験が必要になる。ここまでくるともはや首が回らない状況になる。

問題に対処しつつさらにスケールする試験方法としてJohn Resig氏はSelenium Gridを使う方法があると紹介しているが、Selenium Gridを使うにはSeleniumに対応する必要があることやモバイルデバイスへの対応が難しいこと。IE8やOpera 10、Firefoxナイトリービルドなどが使えないこと、試験用に常に動作するPCを用意するのは費用の面で困難であることをなどを理由にあげて採用できないとしている。

TestSwarm - JavaScript Testing Does Not Scaleより抜粋

そこでJohn Resig氏はこれら問題を解決するための取り組みとしてTestSwarmプロジェクトに取りかかっていることを発表。月末にはアルファテストを公開できるだろうと説明している。TestSwarmは前述した10の試験などのテストスィートを配布するためのセントラルサーバサービスだ。試験に参加したいユーザはJavaScriptで開発されたクライアントをインストールしておけばよく、定期的にサーバにアクセスして新しい試験ツールを取得し自動的に試験が実施される。多くのユーザが参加できる仕組みにすることでスケーラビリティや多様性への対処と手動入力試験への対処としているわけだ。

この取り組みは開発者とユーザの双方に利点があるという点で興味深い。jQueryを開発に使っているユーザは少なくともjQueryからバグが消えてほしいと思うだろう。ちょっとした手間で試験に参加でき、次のリリースバージョンの品質向上につながるというのなら悪くない話だ。John Resig氏はよく試験してくれたユーザにはjQeuryTシャツやマグカップを進呈するようにするのも手だと説明している。

OSSプロジェクトの最大の利点は多くの目が入るところにあるが、試験に一定のクオリティを確保できるケースとそうでないケースが分かれすぎるという問題も抱えている。John Resig氏の取り組みはOSSプロジェクトにおける試験フェーズに新しい流れをもたらすという点で興味深い。なおJohn Resig氏のSelenium Gridに対する意見に関しては同記事のコメントに反対意見が寄せられているほか、TestSwarmと同様の取り組みとしてGoogleのMap-Reduceモデルを使ったigvita.comが紹介されている点も言及しておきたい。