30
Fitnesse ををををををををををををををを 第第第第第第第第第第第第 ( 第 ) 2011-04-23 HN:cac+

Fitnesse を用いたテストの効率化について

Embed Size (px)

Citation preview

Page 1: Fitnesse を用いたテストの効率化について

Fitnesse を用いたテストの効率化について

第一回デジタルエンタメ研究会 ( 仮 ) 2011-04-23HN:cac+

Page 2: Fitnesse を用いたテストの効率化について

1. Fitnesse とは 2. Fitnesse デモ 3. 展望 4. まとめ 5. 質疑応答

あじぇんだ的な何か

Page 3: Fitnesse を用いたテストの効率化について

1. Fitnesse とは…… の前に

Page 4: Fitnesse を用いたテストの効率化について

BDDって知ってますか?

Page 5: Fitnesse を用いたテストの効率化について

BDD = Behavior Driven Development 日本語では「振舞駆動開発」

ざっくり説明すると……要求仕様を満たしているかどうかのテスト ( コー

ド ) を先に作成し、プログラミングを行う手法。

BDD とは

Page 6: Fitnesse を用いたテストの効率化について

TDD(=Test Driven Development)プログラムの動作を保障するテストを ( 先に ) 作成する。テストケースの作成はテスト実行者の経験に委ねられる ( 事が

多い ) 。テスト工数が肥大化しがち。

BDD( 要求 ) 仕様に従った形でテストを作成する。テストケースの作成が明快である。不必要なテストケースを作成するのを抑える事ができる。

TDD と何が違うの?

Page 7: Fitnesse を用いたテストの効率化について

BDD は肥大化する開発規模とテストにおける解法の一つである……かも?

Page 8: Fitnesse を用いたテストの効率化について

前振りが長くなりましたが……

1. Fitnesse とは

Page 9: Fitnesse を用いたテストの効率化について

Fit を Wiki 形式の表で自動テスト駆動するように拡張した Java 製のテスト補助エンジン (+ フレームワーク )

BDD にとっても向いてる

対応言語は Java 、 C# 、 C/C++ etc...

Web サーバの機能を持ち Wiki としても利用可能 Wiki の表形式記法をベースにテストケースを作成可 プラグインによる拡張で blog 機能も持たせられるら

しい

Fitnesse ってなんぞ

※Fi t → HTML のテーブル形式でテストケースを作成可能な補助エンジン

Page 10: Fitnesse を用いたテストの効率化について

Fitnesse の構成

Fitnesse

連携用フレームワーク

Wiki形式で記載されたテストケースを独自のデータに変換して実際のテストフレームワークに渡す

テスト実行者Wikiの表形式でテストケースを記載する

受け取ったテストケースを元にテストを実行し、その結果を返す

Wikiの表形式でテスト結果を表示する

Page 11: Fitnesse を用いたテストの効率化について

Fitnesse はあくまで Wiki の表形式によるテストケース

を独自の形式に変換するツールなので、実際にテスト

を実行するコードに対するフレームワークが必要 言語毎に連携させるフレームワークは異なる C/C++ では「 cslim 」 Java では「 FitSharp 」 フレームワークは自作も可能 → 例えば、 Google Test をベースに作成すると

連携用フレームワークについて

Page 12: Fitnesse を用いたテストの効率化について

仕様作成者 or テスト実行者Wiki の表形式ベースでテストケース ( テストパラメータ ) を作成す

プログラマーCslim 等の連携用フレームワーク を用いてテストケースの雛形を作成

する

結局、何をすればいいの?

役割分担が明確!

Page 13: Fitnesse を用いたテストの効率化について

でも、使い辛いんでしょ?それじゃあ意味がない!!

Page 14: Fitnesse を用いたテストの効率化について

2. Fitnesse デモ

Page 15: Fitnesse を用いたテストの効率化について

環境: Visual Studio2010(Windows) 簡易的な仕様書を作成し、それをそのままテスト

ケースとして稼動させる例を実装する …… 予定でしたが、時間が無かったのでデフォル

トに用意してあるプロジェクトを見ていく事に

実際に見てみよう

Page 16: Fitnesse を用いたテストの効率化について

Wiki の表形式で作成したテスト ( ケース ) の自動実行

過去のテスト結果を自動で記録

テストケースのリファクタリング

テスト結果や Wiki ページの検索

Fitnesse で出来る事まとめ

Page 17: Fitnesse を用いたテストの効率化について

連携用フレームワークを用いた専用のテストプログラムの作成が必須なので、習熟しているテストフレームワークからの乗り換え ( 学習 ) コストが掛かる

欠点 1 : システム構築者の負担が重い

誰かが犠牲になって既存のフレームワークと互換の取れるフレームワークラッパを作るとプロジェクト全体が幸せになれる ( ボソッcppunit や Google Test を利用している場合ならそこまで手間無しにラッピングできるかも ( 検証中 )

Page 18: Fitnesse を用いたテストの効率化について

仕様がテストケースに成り得るのが Fitnesse の持ち味なのに、その仕様が既に存在していると……

更に、使用しているテストプログラムの書き換えが発生するとなると採用に二の足を踏まれ易い

テスト履歴の視認性アップや管理性の向上の恩恵は受けられる

導入する事によりテストケースの見直しを行える効果はあるかもしれない

欠点 2 : 既存のプロジェクトへの効果が薄い

Page 19: Fitnesse を用いたテストの効率化について

UI が英語当然ヘルプも英語国内での採用事例もほとんどないので、参考資料

もほぼ全部英語

欠点 3 : 英語ェ……

Page 20: Fitnesse を用いたテストの効率化について

3. 展望

Page 21: Fitnesse を用いたテストの効率化について

仕様とテストケース ( パラメータ ) の結合が可能 テスト作成工数の減少 テストプログラムのメンテ軽量化 テスト結果の可視化、共有化が容易 テスト結果の保持、比較が容易 テストの流れが明快になる

Fittnese 導入によるメリット

Page 22: Fitnesse を用いたテストの効率化について

仕様書を Fitnesse にそのまま食わせる事が可能な Wiki の表形式で作成する事で、 テスト実行者 ( 実装者 ) が仕様を勘違いしていてテスト

になっていなかった 仕様変更の度にテストプログラムを書き換える必要があ

り、そこでエンバグを引き起こしてしまったという残念だが「良くある」事態を防ぐ事ができる。

仕様とテストケース ( パラメータ ) の結合が可能

個人的に Fitnesse 導入の最大のメリットはこれ !

Page 23: Fitnesse を用いたテストの効率化について

便利なんだけどデータをテスト用に変換するのがめんどくさい各種テーブル等も気軽に利用可能になる

→ 例 : ディシジョンテーブル

テスト作成工数の減少

Page 24: Fitnesse を用いたテストの効率化について

Web サーバ形式なので、チームの共有サーバに設置すれば気軽に全ての人員がテスト結果を参照可能

テスト結果だけでなく、テストケースも気楽に参照可能

テスト結果の可視化、共有化が容易

Page 25: Fitnesse を用いたテストの効率化について

プログラム作成者はテストの雛形までを作成 テスト実行者がテストケース ( パラメータ ) を作

成 テストはデイリーで自動実行という流れを構築できる。

分業の範囲も明確になる若干プログラム作成者のコストが高めになるかも

テストの流れが明快になる

Page 26: Fitnesse を用いたテストの効率化について

自動化の推進Jenkins や Sikuli といったツールと組み合わせる事によりシステムテストの自動化まで持っていきたい

連携用フレームワーク (clism) の改造GoogleTest ばりにテスト用マクロを充実させたりしてみると採用への足掛かりになるかも?

Fitnesse 展望

Jenkins については粉川先生の CEDEC の講演を参考に!CEDiL で無料で見れますhttp://cedil.cesa.or.jp/

Page 27: Fitnesse を用いたテストの効率化について

BDD を採用すると無駄なテストを減らした上にテストの品質を向上できる! ……かも

まとめ

Fitnesse を採用すると BDD 的な、仕様とテストケースが一体化した開発を行う事ができる!……かもつまり、 Fitnesse を採用すればテスト工程の効率化を図れ、メインのアプリ開発に注力できる!……トイイナ

Page 28: Fitnesse を用いたテストの効率化について

BDD って便利そうだけど……

詳細な仕様が決まってないと 実装できないじゃん!ゲーム開発でそれはありえない!

Pre FAQ

Page 29: Fitnesse を用いたテストの効率化について

仕様先行が本来あるべき姿ゲーム業界にはよくある事、と仕様検討無しで実

装を 開始し、後で修正……という悪習から脱却する機

会 にもなりうる ただし、全てのプロジェクトに採用すれば上手く

回る、 という訳ではない。基幹系は向いてるけど、試行錯誤

前提のゲームシステム部には向いてないかもしれな

い。よく考えて採用するのが大事。

その考え方が悲劇を生むのです バ グ

Page 30: Fitnesse を用いたテストの効率化について

Cslim 導入http://schuchert.wikispaces.com/cpptraining.GettingStartedWithFitNesseInCpp

Java/C# での Fitnesse 導入資料http://www.jasst.jp/archives/jasst05e/pdf/S5-B-1.pdf

TDD,BDD,SDD,ATDD についての話題http://togetter.com/li/4220

Fitnesse公式http://www.fitnesse.org/FrontPage

参考文献・サイト