ソフトウェア開発パラダイムの進化

ソフトウェア開発におけるソフトウェアテスト(2)--開発者とテスターの違い - (page 2)

Atif Memon(メリーランド大学博士)

2017-05-10 16:00

ユニットテストが失敗する唯一の理由

 ここでは、ユニットテスト、インテグレーションテスト、システムテストを考えれば十分です。ユニットテスト(とテストするために設計されたユニットに最も近いもの、たとえば、メソッド、クラス、モジュール)は、その失敗がテスト中のユニット内のコード不具合だけに原因があることを保障すべきです。

 つまり、厳密に言えば、ユニットテストが失敗する唯一の理由は、コードユニットの不具合であり、ユニットが相互作用するコードの他の部分の不具合ではないのです。一方、インテグレーションテストは、より高度な抽象レベルになるように設計され、同時に相互作用する多数のユニットをテストします。最終的に、システムテストは、システム全体を部分ではなく、全システムとしてテストするように設計されます。

 ユニットテストは、そのユニットをコーディングした開発者によって作成されるべきであると、今日のソフトウェア業界では一般的に了解されています。さらに、開発者のコードのメンタルモデルを正確に捉えるため、コードと同時に作成すべきだと考えられています。ユニットテストはコード作成前に作成すべきだと提案する研究もあります。

 いずれにしても、このようなユニットテストは、現在そして今後のコード開発者に対して、コードユニットが意図する機能を伝えており、ある意味、コードを文書化する目的を担っています。インテグレーションテストも、実装という意味では最近ますます、相互作用する相手からユニットを遮蔽する必要がある足場コード(モック、スタブ、フェイク、シム<詰め物>など)がないことを除いて、ユニットテストと似ていますが、開発者によりテストの多くが作成されています。

 一方、システムテストは、全体としてのシステム全機能、それが使用される状況、エンドユーザがフィールドで実行させるフロー/シナリオ、それが用いるハードウェアプラットフォームの構成を詳しく理解している「テスター」により相変わらずその大部分が作成されています。システムテスターは、顧客と要件定義エンジニアと協力し合い、システムの最終的な使用方法をよく理解しています。従って、彼らは、さしあたりシステムテストを作成するためには本当に最適な人たちです。

 ユニットテストとインテグレーションテストは、例えばJunitのような開発とテストが十分進んだ自動化フレームワークを用いて現在コード化されているように、ソフトウェア開発全体工程の中でどう使用するかという点では万能です。最近のソフトウェア開発工程は、例えばgitでhookとして実現されているマルチステージチェック(multi-stage check)で表現されます。

 一般的に、各ステージは、(1) コードレポジトリの前のチェックアウトを使って pre-submitモードで(ローカルマシン上で) テスト、(2) 最新のコードレポジトリを使ってpre-submitモードで (おそらく、ローカルマシンまたはクラウド上で)テスト、(3) コード変更をレポジトリーにサブミット、(4) コードレポジトリの最新スナップショットを使ってpost-submitモードでテスト、そして(5)各CIサイクルでテストです。 ユニットテストとインテグレーションテストはこれらのステージで役割を果たします。

ZDNET Japan 記事を毎朝メールでまとめ読み(登録無料)

ホワイトペーパー

新着

ランキング

  1. セキュリティ

    「デジタル・フォレンジック」から始まるセキュリティ災禍論--活用したいIT業界の防災マニュアル

  2. 運用管理

    「無線LANがつながらない」という問い合わせにAIで対応、トラブル解決の切り札とは

  3. 運用管理

    Oracle DatabaseのAzure移行時におけるポイント、移行前に確認しておきたい障害対策

  4. 運用管理

    Google Chrome ブラウザ がセキュリティを強化、ゼロトラスト移行で高まるブラウザの重要性

  5. ビジネスアプリケーション

    技術進化でさらに発展するデータサイエンス/アナリティクス、最新の6大トレンドを解説

ZDNET Japan クイックポール

自社にとって最大のセキュリティ脅威は何ですか

NEWSLETTERS

エンタープライズ・コンピューティングの最前線を配信

ZDNET Japanは、CIOとITマネージャーを対象に、ビジネス課題の解決とITを活用した新たな価値創造を支援します。
ITビジネス全般については、CNET Japanをご覧ください。

このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]