どれぐらいお久しぶりかというと、JaSTT'11 Tokyo のレポート以来の投稿になります。
今回は、JaSTT'11 Tokyo のコープランド氏の講演で紹介されていたFitNesseのお話をしたいと思います。
コープランド氏は言っていた(言ってなかったかも)、FitNesseはイノベーションであると!
2.1 FitNesseとは?
FitNesseの公式サイトである fitnesse.org によると、FitNesseはソフトウェア開発におけるコラボレーションを強化するためのツールであり、機能としては、テストツールであり、wikiであり、ウェブサーバであると紹介されています。
私の感覚では、「テストを実行できるwiki」ですね。
1. テストケース継続的インテグレーションとは?
継続的インテグレーションは、継続的(Continuous)にソースコードなどの統合(Integration)を行うことです。
元々は、XP(eXtreme Programming)のプラクティスの1つで、 「すべてが自動化された再現可能なビルド・テストを日に何度も行うこと」を意味します。
このビルド・テスト対象を、開発コードだけでなく、テストケースについても行うことを、私はテストケース継続的インテグレーション(以下、テストケースCI)と名付けました!(ついさっき)
1.2 なぜテストケースCI?
シャノンでは開発手法にスクラムを採用しており、弊社の主力サービスである「SHANON MARKEGING PLATFORM」の拡張機能を毎月リリースしています。
シャノンのQAでは、一ヶ月のスプリントの間に以下の作業を行います。
- 新機能確認
- 既存機能確認(デグレチェック)
- 移行スクリプト確認
- 前回リリースとの差分確認(API, CSV, HTML, MAIL, 画像)
- 大規模環境のパフォーマンス確認
- リリースノートの作成、確認
このうち、「2. 既存機能確認(デグレチェック)」、「4. 前回リリースとの差分確認(API, CSV, HTML, MAIL, 画像)」、「5. 大規模環境のパフォーマンス確認」については、既に存在する内容の確認であるためあらかじめ自動化を作り込むことが可能であり、現在ではかなりの部分を自動化しています。
一方、「1. 新機能確認」、「3. 移行スクリプト確認」、「6. リリースノートの作成、確認」は、ゼロから作成する作業なので当月スプリント内で自動化を作成することが難しいです。
これらのうち、「1. 新機能確認」は、テストパータンを洗い出すためにスプレッドシートでマトリクスを作成したりします。作成したマトリクスは使い捨てになることが多いのですが、できれば再利用したいところですね。
また、QAでは「6.リリースノートの作成、確認」も行います。リリースノートには仕様や機能制限を記載しますが、条件マトリクスから想定される制限がどうだったかをすぐに確認できれば便利そうです。
Fitnesseでは、Wikiでテストケースを記載できるため、テーブル書式を使ってマトリクスを書くことが出来ます。また、そのマトリクス内容をテスト実行することもできます。
そういった意味で、Fitnesseで条件マトリクスをテスト仕様書として記載し、機能が実装されたらテスト実行して確認!といったことができれば効率がよさそうです。
また、内容を自由に記載できるので、後から見たときに何をやっていたかが分かりやすいこともメリットになります。
1.3 テストケースCIの構成
テストケースCI環境を構成するWebアプリケーションとして、FitNesse、Selenium、Jenkinsを使用します。
それぞれは別々のWebアプリケーションですが連携して使用できます。
以下に各役割を簡単に説明します。
FitNesse
先ほども説明しました、テストを実行できるWikiです。
テスト仕様(新機能の内容と確認事項(テスト内容))を記載し、テストを実行するために使用します。
公式サイト:http://fitnesse.org/
Selenium
Seleniumは、Webアプリケーションのためのテストツールです。
Firefox、Internet Explorer、Safari、Opera、Google Chromeなどの主要なブラウザで動作し、テスト対象のWebアプリケーションを操作するために使用します。
公式サイト:http://seleniumhq.org/
Jenkins
Jenkinsは、今、一番熱いオープンソースのCIツールです。
FitNesseで作成したテストケースを定期的に実行するために使用します。
公式サイト:http://jenkins-ci.org/
2.6 FitNesse / Selenium 連携
では、FitNesseとSeleniumを連携する方法を説明します。
連携には、FitNesseのSpiderFixtureを使用します。
Fixtureは、FitNesse内で使用可能なメソッドを実装したライブラリ群の名称です。
SpiderFixtureは、FitLibraryWebに含まれるのでこれをインポートします。
SpiderFixtureを宣言し、テストを記述します。
[Test]をクリックし、FitNesseを実行したところ。
バックグラウンドでFirefoxが起動し、6件のテストが通りました。
4.6 Jenkins / FitNesse 連携
最後に、JenkinsとFitNesseを連携する方法を説明します。
Jenkinsには、FitNesseプラグイン(Hudson Fitnesse plugin)があるので、これを使用します。
ジョブの設定にあるビルド手順から設定できます。
ビルド実行!
うまくいったようです♪
終わりに
今回は、FitNesse+Selenium+Jenkinsを使ったテストケースCIを一通り動かしてみました。
実際のスプリントでテスト仕様書を書きながらテストを行う!
実際のスプリントでテスト仕様書を書きながらテストを行う!
といった芸当が本当にできるかどうかは、やってみないと分かりません。
次回以降、そういった内容に挑戦してみたいと思いますが、もしできたら本当にイノベーションですね。