新しい IBM Developer JP サイトへようこそ!サイトのデザインが一新され、旧 developerWorks のコンテンツも統合されました。 詳細はこちら

developerにもテストを 第3回

はじめに -オープンソース製品を使ったテストの実現-

オープンソース製品というと、開発ツール、データベース、運用監視ツール、OS、ネットワークツールなどのイメージが強いですが、sourceforge.netなどのオープンソースプロジェクトのサーバーで検索してみると、非常に数多くのテストツールがオープンソースで開発されています。おそらく読者のみなさんの中でもJUnitなどのユニットテストツール、Jakartaプロジェクトで開発されている負荷検証ツールであるJMeterなどを利用されている方もおおいでしょう。この記事はこれらのオープンソースのテストツールを利用し、テストを効率よく実施することについて考えてみましょう。

どんなツールがあるかを紹介する前に

これから紹介するさまざまな製品を大まかに分類し、どのプロセス、どのテストで使えるか考えてみたいと思います。表1は今回紹介するOSSのテスト関連ツールの一覧です。この表に書かれている製品の概要については後半で説明しますが、今回は次のようなカテゴリで製品を分類しています。テスト作業だけでなく、レビュー作業に必要な上流の工程およびプロジェクト管理のような全体工程の製品も含め、広義のテストで利用できるツールを洗い出しています。

  • プロジェクト管理ツール – 製品プロジェクトおよびテストプロジェクトの管理で利用できるツール。ガントチャートの作成やWBSの作成が可能で、それらの管理ができるツール
  • 要求管理ツール – 製品に関する要求の管理ができるツール。要件とのトレーサビリティや仕様のレビューが行われたかなどの管理ができるツール
  • 構成管理ツール – 製品のドキュメントおよびソース管理ができる製品。管理単位がファイル単位かプロジェクト単位かは問わない。
  • テスト管理ツール – テストケースの登録・管理・評価実行、評価結果の集計や不具合管理との連携が可能なツール。
  • 単体テストツール – 単体テストの作成および実施用のツール。
  • メトリクス計測ツール – ソースコードの規模やコメント量の測定が可能で生産性を判断するための情報を提供するツール。
  • コード解析ツール – ソースやクラスファイルを構造的に解析し、一般的に知られている問題が実装したプログラムに潜んでいないかどうかを確認するツール。
  • 不具合管理ツール – 開発しているアプリケーションのインシデントや不具合を管理するツール。
  • 機能テストツール – 開発しているアプリケーションの機能テストの作成および実施を行われるツール。あるいは機能テストを効率よく行うための補助ツール。
  • 負荷/性能検証ツール – 開発しているアプリケーションの性能テストおよび負荷テストを実施できるツール。
  • 脆弱性検査ツール – 開発しているアプリケーションおよびシステムの脆弱性を検査できるツール。
  • 文書管理ツール – プロジェクトで利用および作成するさまざまなドキュメントを管理できるツール。

    Table 1. 表1.オープンソースのテスト関連ツール一覧
    製品名 カテゴリ ライセンス コメント
    GanttProject プロジェクト管理 GPL WBSの作成が可能な進捗管理ツール。日本語リソースも用意されている。
    Open Source Requirements Management Tool(OSRMT) 要求管理 GPL 製品およびマニュアルの日本語対応済み。
    CVS 構成管理 GPL ファイル単位でのバージョン管理ツール
    Subversion 構成管理 Apache BSD スタイル プロジェクト単位でのバージョン管理ツール
    TestLink テスト管理ツール GPL Webベースのテスト管理ツール。日本語化プロジェクトあり。
    jUnit 単体テスト CPL Java用の単体テストツール
    NUnit 単体テスト zlib/libpng C#用の単体テストツール
    CppUnit 単体テスト LGPL C 用の単体テストツール
    JDepend メトリクス計測ツール BSD Eclipse plugIn対応のJavaパッケージ単位でのメトリクス計測ツール
    FindBugs コード解析ツール LGPL Javaコードのバグを発見するためのツール
    mantis 不具合管理 GPL wikiとの統合が可能な不具合管理ツール
    Bugzilla 不具合管理 MPL オープンソースの不具合管理のデファクト製品
    影舞 不具合管理 GPL DBなしでも動作する不具合管理ツール
    Burp proxy 機能テスト補助 独自 HTTP/HTTPSのPOST/GET処理をデータ加工して再送できるツール
    Jameleon 機能テスト LGPL 機能テスト・回帰テストが可能なテストフレームワーク
    Selenium 機能テスト Apache 2.0 Webブラウザを使ってWebアプリケーションのテストするツール
    JMeter 負荷/性能検証 Apache 2.0 Webアプリケーションの負荷/性能テストツール
    WebLOAD 負荷/性能検証 GPL 元商用のWebアプリケーションの負荷/性能テストツール
    Nessus 脆弱性検査 GPL vers .3.0からはクローズドソースに以降
    WebFileSystem 文書管理 MPL 文書ワークフローにも対応した文書管理ツール

この他にも数多くのオープンソースのテストツールがありますが、今回は日本語を取り扱える製品でかつそれなりに国内でも利用者のいる製品だけに絞っています。ここであげただけでもテストプロセスのほとんどが対応可能であることが分かるでしょう。

どの工程でツールの利用を計画するか

では表1でまとめたツールをどこで利用すればいいのでしょうか。すでにツールをよく利用している方であれば最初のカテゴリ分けの段階でツールの利用時期は明確でしょう。しかし、ツールを利用するかどうかの判断はどこですればいいのでしょうか。ツールを利用することで効率が上がると思いますが、プロジェクトメンバーのスキルによってはツール利用はリスクになるだけでなく、プロジェクトを混乱させます。 ツール利用の計画はどこですればいいのでしょうか。これはツールの種類によって異なります。

次のようなツールの場合ではプロジェクト計画書で利用するツールとそのツールの効果およびリスクを検討しておく必要があります。開発ツールも同様ですね。ツールを使うことに工数がかかりすぎる場合やトレーニング期間を十分にとれない場合は導入を見送る必要があるでしょう。特に今回紹介するようなオープンソースの製品の場合、日本語のマニュアルやドキュメントがない場合や日本語で質問できるメーリングリストやWebサイトがないなどの問題もあると導入には高い敷居となります。 プロジェクトで利用する前に十分な評価が必要です。

プロジェクト全体に影響するツール

  • プロジェクト管理ツール
  • 構成管理ツール
  • 要求管理ツール
  • 不具合管理ツール
  • 文書管理ツール

続いて開発に関係する次のようなツールですが、こちらはシステム基本設計書でツールの利用を検討する必要があるでしょう。特にどのような目的を達成するために導入するかを決めておく必要があるだけでなく、結果の分析をどのように行うのかルールを決めておく必要があるでしょう。

開発関連のツール

  • メトリクス計測ツール
  • コード解析ツール

最後にテスト関連のツールですが、こちらはマスターテスト計画書でツールの利用を検討する必要があるでしょう。特にツールを利用するためのシナリオ作成やスクリプト作成にはそれなりの経験も必要ですし、コーディング能力が必要となります。テストチーム内での役割分担や作成したスクリプトをどのように活用するかについても明確にしておく必要があります。

テスト関連のツール

  • 単体テストツール
  • 機能テストツール
  • 負荷/性能検証ツール
  • 脆弱性検査ツール

ツールの利用について

紹介したツールをどの工程で利用するか、分類しながら説明していきましょう。

1

)プロジェクト全体

まずプロジェクト全体に影響するツールです。ここでは次の3つのツールを紹介します。

a. GanttProject b. Open Source Requirements Management Tool(OSRMT) c. mantis

a. WBSの作成が可能なGanttProject

GanttProjectは、WBSの作成が可能なツールです。プロジェクト管理というとMS Projectを利用している人が多いかと思いますが、このGanttProjectでもタスクを作成し、管理していくことが可能です。担当者のメールアドレスを設定しておくことで、各タスクに問題が起きた場合にメールで連絡することが可能です。一部の入出力機能を除いて日本語の取り扱いは問題ありません。

GanttProjectの大きな機能としてWebサーバとの連携があります。Webサーバに格納したファイルをHTTPを利用して取得し、ファイルを開くことができます。WebサーバにWebDAVの設定がなされていれば、進ちょく情報をWebサーバを介して共有することができます。また、PNGやHTMLに出力する機能も用意されています。

その他、PDFのレポート機能などの機能も用意されていますが、現時点ではこの機能は日本語の取り扱いができません。今後に期待したいものです。

このGanttProjectはWBSを簡単に作成ツールであるため、WBSから完了予測を行ったり、コストを記録したりすることはできません。非常に簡単なプロジェクト管理ツールとして利用することになります。

b. 要求管理が可能な Open Source Requirements Management Tool(OSRMT)

Open Source Requirements Management Tool(以後、『OSRMT』と表記)は要求管理が可能なツールです。ドキュメントもすべて日本語化されています。各成果物をツリー構造で管理していくことができますし、担当者へのアサインやレビュー状況の確認も可能です。また、変更による影響をツリーで確認する機能も用意されており、要求管理として基本的な機能がすべて用意されています。

グリープ管理機能やユーザ管理機能もあり、ユーザの変更権限の設定なども可能になっています。

変更管理の履歴も一覧で見ることが可能です。

OSRMTは非常に強力なツールですが、このツールにてどのように要求管理を実施するかにはそれなりのスキルが必要です。これは要求をどのように管理していくかについては利用者が検討する必要があるためです。また、粒度についても細かすぎると管理が複雑になりますし、粗いと意味のないものになります。過去のプロジェクトを参考にどのような管理か評価してみると良いでしょう。

単純に各成果物の管理として利用するのも良いでしょう。

c. mantis

mantisはBugzillaや影舞と同様に不具合管理ツールです。mantisはWebベースの不具合管理ツールであり、Bugzillaに比べるとインストールが簡単で不具合の履歴管理がわかりやすい製品です。影舞と比較すると、非常に機能が豊富であるといえるでしょう。mintisとSubversionなどの構成管理ツールと連携することも可能です。また、後述するテスト管理ツールTestLinkとも連携可能です。

2

)開発に関わるツール

続いて開発に関わるツールとしては次のようなツールがあります。構成管理ツールはプロジェクト全体に関係するツールとしてとらえることができますが、ここでは開発者が使うツールとします。同様に単体テストツールやメトリクス計測ツール、コード解析ツールは開発者が利用することが一般的に多いですので、開発に関わるツールとして位置づけています。

a. Subversion b. xUnit c. JDepend d. FindBugs

a. プロジェクト単位での構成管理が可能なSubversion

CVSがファイルのみのバージョン管理ツールで、ファイル名の変更などについて管理することができませんでした。SubversionはCVSの考え方を基にしてCVSの問題点を解決するように拡張されたツールです。コマンドラインベースで利用することもできますし、Windowsのエクスプローに組み込んで使えるTortoiseSVNなども用意されています。現在では主要なLinuxのディストリビューションに納められています。

b. 単体テストのテストフレームワークxUnit

xUnit系のツールは単体テストのテストフレームワークとしてもっとも使われている製品だといえるでしょう。それぞれの開発言語をサポートする形に、jUnit、CppUnit、NUnit、PHPUnitなどさまざまな製品が存在しています。EClipseなどの開発ツールにも統合されており、実装と単体テストを統合開発環境内で簡単に実施することもできます。また、テストケースを作成してから実装を行うテスト駆動型開発でも利用されています。

c. Javaパッケージ単位のメトリクスを測定するツールJDepend

JDepend は、単体でもEclipseと連携して利用することも可能です。JDependを利用することで次のことが分かります。

  • パッケージに依存する外部パッケージの数
    この数値が大きいほどこのパッケージは外部から参照されている箇所が多いという意味になります。このパッケージの内容を変更することは外部パッケージに大きな影響を与えることになります。
  • パッケージが依存する外部パッケージの数
    この数値が大きいことは、外部パッケージの変更がこのパッケージに大きな影響を与えることを意味します。
  • 抽象度
    この値が大きくなると、パッケージの実装を変更してもインターフェイスを変えない限り、外部へ与える影響は少なくなります。逆に、外部から全く参照されていないパッケージの場合では抽象度を高くするメリットはありません。
  • 不安定性
    この値が大きいことは、このパッケージは外部に依存する割合が高いということを意味します。逆にこの値が小さい場合、このパッケージは外部から依存される割合が高いということを意味し、外部から多く依存されているため、このパッケージは簡単には変更できません。不安定性とは「今後どれだけ変更の可能性が高いか」を意味するものであるとも言えるでしょう。

JDependを開発ツールと連携して利用することで、ソースコードの修正に与える影響も確認することが可能になります。Javaで開発を行っている場合、こちらのツールを導入し、修正に与える影響を確認してから修正の実施および回帰テストを行うと、修正による品質低下を防ぐことができるでしょう。

d. 不具合を発見してくれる FindBugs

FindBugsはJava言語に対応した静的解析ツールの一つで、クラスやJARファイルを検査する静的解析ツールであり、バイトコードとバグ・パターン・リストを比較することで潜在的な問題を探し出してくれます。FindBugsを使うことで、実際にプログラムを実行せずに開発しているプログラムを解析することができ、コードの品質改善や隠れているバグを取り除くことが可能になります。

FindBugsはAntのタスクとして利用することもできますし、Eclipseのプラグインを利用することでEclipse上で利用することも可能です。Eclipse内で利用すると、検出された問題に関する説明を参照したり、問題のあるコードを参照することが可能です。

FindBugsのような静的解析ツールは非常に軽微な不具合も発見してしまうため、すべての問題に対して対応をすると非常にコストがかかってしまう問題が発生します。また、大量の問題を見つけ出すため、本当に修正すべき問題を見落としてしまう問題もあります。そのため、どのような設定で利用するかを事前に検討する必要があるだけでなく、利用方法についてのガイドライン作りが必要になります。すでに終了したプロジェクトの成果物を利用するなどしてまずはガイドラインを作成することをお勧めします。

3

)テストに関連するツール

最後にテストに関連するツールとして次の4つを紹介します。これらのツールは機能テスト、性能/負荷検証、脆弱性検査を行えるツールです。こういったテスト関連のツールが非常に多く開発されているだけでなく、WebLOADのように元々は商用ツールであった製品がオープンソースとして公開されたり、Nessusのように特定のバージョンからクローズドソースに移行する製品があったり、さまざまな動きがあります。オープンソースだけでなく、フリーのツールを加えると、すでに50以上の製品が存在しています。

JameleonやSeleniumなどの自動化テストツールは利用に適したテスト設計が必要になります。これらのツールを利用するには、テストチームの体制や開発プロセスの変更を必要とする場合があります。これらのツールを利用するときは必ず評価プロジェクトを実施するようにしてください。

a. TestLink b. Jameleon c. Selenium d. Apache JMeter e. Nessus

a. テスト管理を実現するTestLink

TestLinkはテスト技術者交流会(TEF)の有志によって日本語化されているテスト管理ツールです。TestLinkはWebベースで利用でき、次のような機能を提供しています。

  • WEBベースのフリーのテスト管理ツール
  • テストケースの登録・管理・評価実行
  • 評価結果の集計をリアルタイムに行う
  • 登録したテストケースを仕様書(WORD)の形で出力
  • テストケースをテスト担当者に割り当て
  • Mantis等のバグ管理システムと連携
  • テストケースのバージョン管理・ネット共有
  • 要件定義とテストケースの関連付け

TestLinkは登録したテストケースを仕様書の形で出力したり、テストケースをまとめてテストスィートを作成しユーザーに割り当てることが可能になっているだけでなく、要求仕様を登録しテストケースと関連づけることが可能になっています。また、不具合管理システムであるMantisと連携し、要件定義→テストケース→バグ票の連携が可能となっています。

また、テスト計画全体のメトリクスで全体のテスト結果を表示するような機能が提供されています。

テスト工程を効率よく管理するための数多くの機能が提供されています。

b. 機能テストのテストフレームワークJameleon

JameleonはWebアプリケーションの単体テストからWebブラウザを利用した機能テスト、回帰テストの自動実行を実現できるテストフレームワークです、プラグイン機能が豊富でこのプラグインを利用することで、JUnitやJHttpUnitを使った単体テストをこのテストフレームワークに組み込むことができます。また、Jiffieプラグインを利用することで、Internet Explorerを使ったWebアプリケーションの機能テストの自動化を実現することができます。また、現在開発されている最新版ではSelenium用のプラグインも用意されており、このプラグインを利用することで、SeleniumのテストもJameleonから実行することができます。

もともと単体テストと機能テストを自動実行するためのフレームワークですが、Seleniumプラグインの登場によって、機能系テストの自動化ツールとして脚光をあびています。まだまだ日本語で書かれた情報が少ない状況ですが、国内においても利用者が多くなってきていますので、JMeterと同様に主要なテストツールの一つとして認識されるようになるでしょう。

c. ブラウザでテストスクリプトの作成が可能なSelenium

SeleniumはWebアプリケーション用テストツールでmJavaScript/DHTML/iframesをベースに構築されています。テストの記録、編集、デバッグなどをWebブラウザにおいて実施するための統合開発環境としてFirefox拡張機能Selenium IDEが用意されています。Selenium IDEにはSelenium Coreが含まれており、素早く簡単にあつかえるほか、テストのプレイバックも簡単に実現できるようになっています。

Selenium IDEには次のような機能が用意されています。

  • テストの記録やプレイバック
  • 必要になるID、名前、XPathなどを使うためのインテリジェントフィールド選択機能
  • Seleniumコマンドの自動入力補間機能
  • テストのウォークスルー
  • ブレイクポイントが設定可能なデバック機能
  • HTMLほかRubyスクリプトまたそれ以外のフォーマットでテストを保存する機能
  • Selenium user-extensions.jsのサポート

Seleniumはキャプチャー・リプレイツールというカテゴリの製品で、スクリプトを作成するためにテストオペレーションを記録する必要があります。非常に高度なプログラミング機能を持っているテスト担当者であれば、生成したスクリプトを変更し、テストパターンを増やしたり、変えたりすることも可能です。

d. Webアプリケーションの性能/負荷検証ツールApache JMeter

Apache JMeterはTomcatやStrutsで有名なJakartaプロジェクトで開発されている100% Javaで書かれたWebアプリケーション用の性能/負荷テストツールです。すでに7年以上の歴史がある製品で国内で、国内でも非常に多くの利用者がいます。同様なツールととしてWebLOADやOpenSTAなどがありますが、JMeterに比べると日本語で書かれたドキュメントが少なく、利用者も少ないようです。

Apache JMeterにはさまざな負荷をかける機能が用意されており、これらを利用することでいろんな角度で負荷検証/性能検証を実施することができます。

Apache JMeterを利用することはそれほど難しくありません。しかし、効果的な負荷検証を行うためには、ユースケースに合わせたシナリオを作成することが必要であり、負荷検証の設計には非常に高いスキルが必要です。また、一般的に負荷検証は複数のシナリオを同時に実行して行うものですので、どんなユースケースを組み合わせれば実際の利用に近いかどうかを見極める能力が必要となります。負荷検証もシステムの設定を変えながら複数回行うのが一般的で、チューニングの効果を見極めるための手段となることもあります。

最近は単純に負荷検証を行うだけでなく、一定の負荷をかけながら機能テストを実施するなど、ツールの利用方法も幅広くなっています。

Apache JMeterはHTTP/HTTPSベースの負荷だけでなく、JDBCを使った性能/負荷検証も実施可能です。このため、DBレベル、アプリケーションサーバーレベル、システムレベルといった各レイヤーごとでの性能検証でも利用することができます。

Apache JMeterの使い方については数多くのWebサイトで開設されていますので、興味のある方は参照してみると良いでしょう。シナリオの作成方法についてはテスト設計の書籍を参考にされるといいでしょう。

e. システムの脆弱検査を実現するNessus

Nessusはクライアント/サーバー型で動作する、セキュリティ・ホールを探すツールです。ポート・スキャンや実際に攻撃を仕掛けることでシステムの弱い部分を探し出すことができ、さまざまなプラグインにより最新のセキュリティ・ホールを探すこともできるようになっています。

セキュリティツールはテストツールではないと思われる方もいますが、システムの設定によって生じた脆弱性がないかを確認することはテストの一部となります。Nessusを利用することで、ポート・スキャンを簡単に行うことができるので、ファイアウォールやロードバランサの設定に問題がないかを簡単に確認できます。また、各ミドルウェアのセキュリティパッチが当たっているかどうかもプラグインを利用すれば確認することができるため、非常に簡単に脆弱性検査を実現できます。

まずは、機能テストでクロスサイトスクリプティングやインジェクションのテストを行った後に、このツールを使ってその他の脆弱性を確認してみるのも良いでしょう。

Nessusは非常に機能が豊富であり更新も頻繁であるため、このツールを利用する場合は選任の担当者を決めておく必要があるでしょう。

ツールの効果を測定しよう

どのツールにも得手不得手があり、万能ではありません。また、継続的に利用しなければ意味のないツールもあります。いざツールを導入してみようと思っても、プロジェクトの予算などで商用ツールが購入できないことも多いと思います。まずはオープンソースの製品を利用し、ツールを利用するとどのような問題が生じ、どのような利点が得られるかを記録しておく必要があります。効果を測定していくことで、プロジェクトごとにツールを利用した方が良いのかどうかの指針を作ることできるでしょう。

筆者はオープンソースの製品と商用の製品との違いを次のように感じています。

  • 統合された製品は商用製品だけである
  • ツールの信頼性はオープンソースだろうか商用だろうが変わらない
  • 積極的に情報を入手しなければツールの情報は入手できない
  • 商用製品の方は一般的に効果は高いが、導入コストも非常に高い
  • 社内に先任者が必要であり、ナレッジベースの構築が必要

最近は商用製品はスイートと呼ばれる複数の製品がセットになった構成になっており、連携しての利用が可能になっています。そのため、導入のための敷居は非常に高くなっており、効果も高いですが、導入コストも非常に高くなっています。信頼性という面でいうと、オープンソース製品だから信頼性がないということはありません。これは他のオープンソース製品と同様に、利用者が多くなればなるほど品質は高くなっています。

情報についてですが、商用ツールの場合ベンダに問い合わせればある程度の情報は入手できますが、高度な使い方になるとほとんど情報がないのはオープンソース製品と同様です。ツール専任者が積極的に情報を入手したり、ナレッジベースを構築し蓄えていく必要があるでしょう。

各企業、各プロジェクトに合わせてツールを選んでいく目が必要であると思います。

まとめ

オープンソースのテストツールはどちらかというと今までは下流工程で利用できるものばかりでしたが、最近は上流工程で利用できるツールも数多く登場しています。Eclipseなどの開発ツール、オープンソースのデータベース、TomcatやJBossなどのアプリケーションサーバーなど、開発ではオープンソースは一般的になっています。テストの世界でもオープンソースの波が大きくなっており、プロジェクト管理や要求管理の分野でもこの波は高くなっています。将来的にはすべてオープンソース製品ですませられることも可能になり、商用製品との境は製品や分野ではなく、利用者の好みになっていくのではないかと思います。ただ、非常に大規模やミッションクリティカルな世界では商用製品の良さはなかなか揺らがないと思います。

テストの分野でもツールの使い分けができるかどうかもスキルの要となっていくでしょう。今回紹介したツールを実際に検証し、自分のスキルアップにもつなげてみて欲しいと思います。

有益なツールを提供している各ツールのプロジェクトメンバーのためにも、興味を持ったツールのプロジェクトに参加し、さらに良いツールになるようにフィードバックしていくことが重要です。オープンソース製品を利用するときは必ず何らかの貢献をすることを礼儀として持っていたいものです。