2011年12月15日木曜日

統合テストの分類について #swtestadvent2011


@takanorigさんのお声がけによる
"Software Test & Quality Advent Calendar"の12/16版エントリです。

12/15は@shuji_w6eさんのエントリでした。
-----

明日からWACATE 2011 冬なのですが、ドタバタする前に上げておくことにします。
WACATEに興味のおありの方は是非、オフィシャルサイトや
MagazineManiaXなどで雰囲気を感じていただければ幸甚です。
-----
さて。たまたま書き貯めていたネタを投下させていただくことにする。
ニセコでミッキーさんとお話をしたときに考えたというか気づかされたことなど。

わたくしコヤマンは「統合テスト屋さん」を自称している。
で、その統合テストってなんぞ?というお話。

◆◆◆統合テストとは。
組織によって名称が異なるが、
・「結合テスト」
・「連結テスト」
・「インターフェーステスト」
・「インテグレーションテスト」
・「サブシステムテスト」
・「コンポーネント統合テスト」
・「システム統合テスト」
などと呼ばれるものの総称である。
明確な方法論が存在しないと言われており、組織によってさまざまな実施形態があるため、定義も困難になっていると思われる。
個人的にもっと整理しようと思っている領域である。

◆◆◆定義
ここは鉄板、JSTQB用語集(JSTQB-glossary.V2.0.J02)を見てみよう。

引用-----
●統合テスト(integration testing):
統合したコンポーネントやシステムのインターフェースや
相互作用の欠陥を摘出するためのテスト。
component integration testingおよび
system integration testingも参照のこと。
-----
参照先は以下。

引用-----
●コンポーネント統合テスト(component integration testing):
統合したコンポーネント間のインターフェースや相互作用の欠陥を検出するためのテスト

●システム統合テスト(system integration testing):
システムとパッケージを統合するテスト。また、外部システム(たとえば
電子データ交換やインターネット)とのインターフェースのテスト
-----
まぁ、塊をくっつけたときにするテストなのね、というのはご理解いただけるかと思う。
ちなみに統合テストについては、以下のURLに詳しい説明がある。


布川さんの連載には最上階は「システム」であると記載がされているが、ここ最近では「システムオブシステムズ」や「ソリューション」といった概念が出てきており統合テストの範囲は年々広がっていると言える。

つまり、以下のような粒度があると言える。
○コンポーネント間統合
○サブシステム間統合
○システム間統合

ちなみに、筆者は全ての粒度が担当であったりする。
※現在はシステム間統合が多めだが、基板上の通信内容を冶具を使って採取してProtocol Analyzerにかけたり、モジュール間の通信Logの内容の解析をしたりもするし、単にシステムの動作について確認したりなどもしている。

では、その中でどのようなテストをやっているのか、の話に移ろう。

◆◆◆統合テストの分類
今のところ、ざっくり統合テストというと以下の分類が存在する。

◆◆範囲の分類
○インターフェースに特化したテスト
・「連結」テストと呼ばれることもある。
・インターフェースのプロトコルやメッセージのやりとりに特化したテスト。
シーケンス図等を使ってやりとりが正しいことや有り得ないパターンの通信を受けたときの動作が妥当なものかどうかを評価するテスト
※とあるモジュールが出した命令を受けて、期待どおりに次のモジュールが動くこと、正しい通信を返すこと、といった点が主な焦点になる。
★結合することをテストする。

○サブシステムやシステムを結合した状態でのブラックボックステスト
・いわゆる「結合」テスト。
・既に「現在の対象が外部にリリースする単位」(=これを単体と定義する)では内部のテストが終了しており
 他のモジュールとの連動や
 組み合わせによって表現される機能に対してのテストを行う。
※要求から一つ一つブレイクダウンした「実現方法」が主な焦点になる。
★結合した状態の動作をテストする。

この結合テストでいう単位というのがテストレベルになったりする。
組織によっては細分化されたり、丸められたりする。
品質を厳しく見る組織では、細分化されたり、まったく違う軸のテストが定義されたりもする。

◆◆実施方法の分類
○トップダウンテスト
いわゆるスタブを使ったテスト。
モジュール構造において下位にあたるモジュールを仮に生成して上位モジュールから呼び出してテストをする。
・メインモジュールやモジュール間インターフェースに対して早めの段階でテストが可能になる。
・下位モジュールのテスト時にも上位モジュールのテストになるため潜在バグを発見しやすい
といった長所があるが、
・開発の初期の頃には、テストしながらの開発が難しい
・スタブの作成が割と難しい
といった短所がある。

○ボトムアップテスト
いわゆるドライバを使ったテスト。
モジュール構造において、上位にあたるモジュールを仮生成して下位モジュールから呼び出してテストをする。
・テストケースの作成や結果のチェックが容易。
・開発の初期からテストしながらの開発がしやすい
といった長所があるが
・最終的に接続した際に、インターフェースのバグがあったりすると修正量が多くなってしまう
といった短所がある。

◆◆◆特徴
統合テストとして特徴的なのは、スケジュールや対象物、環境によって
これらのパターンがコロコロと変わることである。

例えばスタブとなるシミュレータがあらかじめ用意されている環境では
トップダウンの方式を取ることがあり、納期が非常に厳しい対象であったりすると
ボトムアップの方式を取ることがある。

なので、最近はボトムアップが多い気がする。なので最終的に(ry

また、基本的にはがっつり開発中だったりするので、
・テスト期間中だが仕様が定まらずドキュメントが無い
・仕様がコロコロ変わる
・連結先の都合で止まる
・シミュレータのバグに翻弄される
・要求が変わる
・スケジュールが無い
といったことが当然のように発生する。
まぁ、上記は統合テストに限ったことではないが、より発生しやすい、と認識いただければ幸いである。

◆◆◆まとめ
統合テストの厄介なところはコンテキストが合わないことが多いところだと思う。

粒度も範囲も実施方法も色々な方法があるというところではないかと感じている。
またこれが組織によって(会社の中ですら)まちまちであったり、妥協の産物がごろごろしていたりなどする。
結合テストや統合テストといっても、どのイメージで話をしているかについては事前に話し、コンテキストを合わせた方がよいだろう。
その中でいくつかの分類を紹介したので、皆さん自身でマッピングしていただければ幸いである。

統合テストをしている人は
もしかしたらプロトコルのインターフェースを見ているかも知れないし、
システム間のデータのやりとりを見ているかも知れないし
ある値を与えられたときの関数の振る舞いと見ているかも知れないし、
ある操作をしたときの機械の動作を見ているかも知れない。

これらを整理したうえで、統合テストの方法論をみんなで構築できたら素晴らしいと考えている。

1 件のコメント:

  1. Excelでデータベースの取り込みやのデータ取得/更新するなら、ExcelDBToolをお勧めします。
    テーブルのデータをエクセルに取得、更新、削除することだけではなく、複数のSQLを実行して、結果を
    一括Excelの各シートに出力することもできます。

    http://www.superdbtool.com
    ベクターからもダウンロードできます。
    Oracle,SQL Server,DB2,Sybase,MySQL,Postgre,Sqlite対応。

    使い方動画:
    http://superdbtool.com/blog/basic-guide

    またExcelDBToolを使って、本番擬似ランダムテストデータを一括作成することは非常に簡単です。
    是非お試しください。
    作成できるダミーデータ種類(69種類):
    郵便番号, 都道府県, 企業名, 市区,町村,最寄駅,最寄駅ふりがな,路線,銀行コード, 銀行名, 銀行カタカナ, 支店コード, 支店名, 支店カタカナ,E-Mail, URL, 携帯, 苗字のみ, 氏名, 住所, 住所ふりがな,性別, 年齢, 血液型, 固定電話, 婚姻, ふりがな, 大学名,身長,体重固定値,国籍,国籍英語,国籍英語略,クレジットカード会社,クレジットカード番号,有効期限,IPアドレス,業種大分類,業種大分類名称,業種中分類,業種中分類名称,業種小分類,業種小分類名称,職種大分類,職種大分類名称,職種中分類,職種中分類名称,職種小分類,職種小分類名称,数値連番,整数・小数点数,英数混在,文字列+連番,文字列+全角連番全角漢字,ひらがな,全角カタカナ,半角カタカナ,全角英数,全角数値,全角英字,全半混在日付,時間,タイムスタンプ,特殊文字

    Oracle,SQL Server,DB2,Sybase,MySQL,Postgre,Sqliteもご利用できます。

    返信削除