1. 程式人生 > >業務システムの開発ドキュメント標準化 第7回:結合テストと総合テスト

業務システムの開発ドキュメント標準化 第7回:結合テストと総合テスト

セス


   ソフトウェアの開発におけるテスト作業は、「テスト計畫」「テスト設計」「テスト実施」「テスト管理」という4つのプロセスで構成されます(図1)。

テストの4つのプロセス
図1:テストの4つのプロセス

   テスト計畫プロセスでは、テスト全體の指標や概要をまとめます。テストの目的、対象範囲、実施方法、テスト體制、テスト環境、スケジュール、合格基準など、テスト全般に関わる方針を「テスト計畫書」にまとめ、ユーザを含むプロジェクトメンバー全員で方向性を共有します。

   テスト設計プロセスでは、策定されたテスト計畫に基づいて、実際のテスト作業內容を設計します。テストのシナリオやテスト內容、確認すべき專案などを「テスト仕様書」に具體的に定義します。

   テスト実施者は、このテスト仕様書に基づいてテストを実施します。障害を発見した際は、障害番號を採番し、障害管理票に記載して殘管理します。これらの障害が片づいて、テストが正常に行われた場合は「テスト報告書」で報告します。

   弊社では、これらのテストプロセスに対応したドキュメントをプロジェクト管理手法(PYRAMID)と開発ドキュメント標準(DUNGEON)にて定義しています。前回は、この中から「単體テスト仕様書」について説明しました。今回は、「結合テスト仕様書」と「総合テスト仕様書」について説明します。


結合テストの設計


   DUNGEONでは、業務アプリケーションの結合テストを「複數の機能を組み合わせた一連の流れをテストすること」というように定義づけています。つまり、基本設計工程で作成した業務フローにそって、「受注入力」「受注伝票出力」「出荷依頼」「出荷」などの個々の"機能"を結合してテストし、データが正しくターンアラウンドされ、整合性が保たれることを確認することになります。

   テスト設計プロセスでは、このようなテストのシナリオを設定します。一連のシステムが業務要件を保つことを確認するためのシナリオを用意し、そのシナリオにそったテストケースを設定する作業ということになります。

   DUNGEONの結合テストの設計では、図2のようにテストシナリオとその具體的な試験內容となるテストケースを定義します。

テスト設計書の作成手順
図2:テスト設計書の作成手順

   テストシナリオで全體のテストの流れ(機能確認の順番など)を想定し、テストケース定義で個々のテスト內容(どんなテストデータを入力して、どういうテスト結果を想定するかなど)を定義します。

   結合テストでは、何パターンかのテストシナリオを作成します。そして、シナリオごとに複數のテストケース定義し、どんなテストで何を確認するかを定義します。テストケース策定の際に必要となるマスタデータも、テストデータとして定義しておいた方がやりやすいでしょう。


テストシナリオ


   テストシナリオは、一連のテストの流れをパターン化したものです。図3は、DUNGEONのテストシナリオを表したものです。

結合テスト仕様書のテストシナリオ
図3:結合テスト仕様書のテストシナリオ
(畫像をクリックするとExcelファイルをダウンロードできます。57.0/KB)

   例えばシナリオ「J01-01 出荷依頼の取消&受注変更」では、「受注新規 → 出荷依頼 → 出荷依頼取消 → 受注変更 → 出荷依頼 → 出荷確認 → 売上計上」という一連の業務の流れを想定し、各業務の概要を「1-1〜1-7」で説明しています。

   テストシナリオでは、どのようなテスト手順にすれば確認したいテスト內容をカバーできるかを考えます。この例は、すでに出荷依頼済みの受注伝票を変更するために、いったん出荷依頼を取り消してから受注変更を行った場合の動作を確認するシナリオです。

試験內容(テストパターン)

   図4は、テストシナリオに対する詳細の試験內容を定義したものです。 結合テスト仕様書のテストパターン
図4:結合テスト仕様書のテストパターン
(畫像をクリックすると別ウィンドウに拡大図を表示します)

   まず試験準備として、どのようなテストデータを用意するかを定義します。そしてテストシナリオにそって、どのようなテストを行い(試験実施方法欄)、どのようなことを確認するか(確認する內容欄)の詳細を定義します。

   そして、これらのテストパターンを実施した結果を図4の右端の確認欄に記述します。
テストデータ

   図5は、先ほど解説した試験準備でセットしておくべきテストデータの定義フォームです。

結合テスト仕様書のテストデータ
図5:結合テスト仕様書のテストデータ
(畫像をクリックすると別ウィンドウに拡大図を表示します)

   あらかじめ部門マスタや社員マスタなどテストに関連するマスタデータをいくつかのパターンで用意しておくことにより、実際のテスト作業の効率があがります。

   規模の大きなシステムでは、マスタデータの全情報を記載するのは大変なので、ここではテストパターンに影響のありそうな專案のみを抜き出して記述しています。

   また必要に応じて、テストの中で入力するトランザクションデータも定義しておきます。この例では、受注入力で入力すべきトランザクションデータをパターン化して定義しています。
テスト結果データ

   バッチ処理など、テストデータ(INPUT)とテスト結果データ(OUTPUT)が定義しやすい場合は、テスト結果データも定義します。

テストデータとテスト結果データ
図6:テストデータとテスト結果データ
コラム
テスト工數と品質のトレードオフ

   一般に、範囲が限定できるモジュールや機能の単體テストは網羅型テストが可能です。しかし、複數の機能を組み合わせた結合テストとなると、條件の組み合せが乗算で膨れあがり、その全パターンを網羅的にテストするのが困難になってきます。

   そのときに大切なのがシナリオの設定です。基本的に業務想定にあるシナリオは、すべてのパターンを確認する必要があるのですが、ほかのパターンですでに実証されてテスト內容が重複するような部分は省略します。

   同じようなテスト工數と品質のトレードオフは、テスト仕様書の作成においてもいえます。

   例えば複雑な業務パターンがいくつもあるケースにおいて、テストデータやテスト結果データをすべて書きだすのは、膨大な工數がかかり現実的ではありません。品質のトレードオフというと「だからソフト業界は」などと目くじらを立てる人がいますが、必要な品質をあきらめるというわけではありません。いたずらに網羅性、綿密性を追求するのではなく、ここまでやれば十分というゴールを定めてテストする姿勢が大切なのです。
総合テストの手順

   総合テストは、一般にシステムテストとも呼ばれています。業務アプリケーションにおいては、実際に業務で使うデータを使って、業務を運用するテストを意味します。既存のシステムがある場合は、現行業務と平行して同じデータを使って比較確認する平行本番テストということになります。

   総合テストを行う際は、図7のような手順になります。

総合テストの手順
図7:総合テストの手順


環境構築

   結合テストまでは、開発マシンもしくはテスト用マシン上での確認試験となりますが、総合テストは原則として本番マシン上でのテストとなります。アプリケーションのテストだけでなく、ハードウェアやOS、ミドルウェアなどのシステム全體が正常に動作することを確認します。Webサーバや開発言語、DBMSなどのバージョンの組み合せによるトラブルや個別の障害なども少なくありませんので、本番とまったく同じ環境を構築してテストを行う必要があります。
データ移行

   総合テストは、原則として本番と同じデータを使います。本番データを使うことにより、想定外のデータが存在していることが発覚したり、思うようにパフォーマンスがでないという問題が明らかになります。

   そのために、マスタデータおよび殘データ、そしてトランザクションデータの移行を行う必要があります。これらの移行は、総合テストが終了した本番直前にも行うことになりますので、できる限り移行プログラミングを作成して何度でも移行できるようにします。

   過去データを照會および分析用に移行したいケースもありますので、トランザクションデータに関しても、どのデータをいつからの分まで移行するかを事前によく検討し、必要なデータの移行プログラムを用意しておきます。
ユーザ教育

   総合テストの主役はエンドユーザです。エンドユーザに業務を行ってもらうことにより、開発サイドでは気づかなかったような問題點が指摘されます。そのために、操作マニュアルや運用マニュアルを用意して、ユーザに対して何回か教育を行う必要があります。
テストシナリオ実施

   総合テストのシナリオは、基本的に結合テストのシナリオと一緒です。結合テストが開発環境において行うのに対し、総合テストは本番環境で実施するという違いになります。

   テスト仕様書も結合テストのものをコピー利用することになりますが、それに加えてパフォーマンステストやハードやネットワーク障害対応(イレギュラーテスト)、データのバックアップと復元など、運用面のシナリオも追加します(もちろん、これらのテストも結合テスト段階で実施している方が望ましいです)。
結果の照合・判定

   平行本番テストの場合は、現行業務と同じデータを平行して入力し、その結果を照合して差異のないことを確認します。それに加えて、操作性や運用の容易さ、パフォーマンスなどの総合的な評価を得て、ユーザの合格をもらいます。不具合があれば、タイムリーに修正して再テストします。修正に時間のかかるものは、とりあえずできるシナリオから先にテストを進めることになります。

   予定のシナリオがすべて終了し、発生した障害も対応して業務に支障がないことが確認できた段階で、ユーザ検収となりテスト終了です。ただし、月次処理や年次処理など、1ヶ月から數ヶ月後でなければ運用確認ができないような機能に関しては、擬似的に処理してその結果を確認したら検収をもらうことになります。
まとめ

   今回は、結合テストのテスト計畫プロセスにおけるドキュメントとして「結合テスト仕様書」のテンプレートを紹介しました。テストのシナリオとテストケース、テストデータの定義パターンについて理解できたと思います。

   また、最終のテストとなる総合テストについては、手順や作業內容を簡単に説明しました。あくまでも業務アプリケーションをテスト対象としていますので、組み込み系ソフトウェアなどの場合は、少し內容が異なるということをご了承ください。

相關推薦

業務システムのドキュメント標準化 結合テストとテスト

セス    ソフトウェアの開発におけるテスト作業は、「テスト計畫」「テスト設計」「テスト実施」「テスト管理」という4つのプロセスで構成されます(図1)。 図1:テストの4つのプロセス    テスト計畫プロセスでは、テスト全體の指標や概要をまとめます。テストの目的、

業務システムのドキュメント標準化 機能一覧表とI/O関連図

請負で仕事をするために必要な2つの作業    システム開発の仕事では、仕様の追加や変更は日常茶飯事です。「これで仕様凍結!と宣言して、仕様変更を受け付けなければ良い」などとこちらの勝手を言う人もいますが、事はそう簡単にはいきません(安易な変更を抑制する効果はありますが

業務システムのドキュメント標準化 詳細設計書(前半)

機能設計書のドキュメント體系    設計ドキュメント標準「DUNGEON」で定義されている設計工程のアウトプットは表1の通りです。「DUNGEON」では、基本設計書で骨組みを定義し、詳細設計書で肉付けを行います。つまり、基本設計書で作成したドキュメントはそのまま(必要

一起Talk Android吧(一百Android中使用自定義控制元件)

各位看官們,大家好,上一回中咱們說的是Android中使用自定義佈局的例子,這一回說的例子是Android中使用自定義控制元件。閒話休提,言歸正轉。讓我們一起Talk Android吧! 看官們,我們在上一回中通過自定義佈局巧妙地實現了分隔線,不過這個分隔線中看

[從設計到架構]依賴的哲學(上)

http://www.cnblogs.com/anytao/archive/2008/12/02/1345389.html  本文將介紹以下內容: 關於依賴和耦合 面向抽象程式設計 依賴倒置原則 控制反轉 依賴注入 工廠模式 Unity框架應用 說在,開篇之前 在老

一起talk C栗子吧(一百C語言例項--使用訊號量進行程序間同步與互斥一)

各位看官們,大家好,上一回中咱們說的是程序間同步與互斥的例子,這一回咱們說的例子是:使用訊號量進行程序間同步與互斥。閒話休提,言歸正轉。讓我們一起talk C栗子吧! 看官們,訊號量是由著名電腦科學家迪傑斯特拉(Dijkstra)提出的一種概念,專門用來

Revit二次開發模型線的建立與偏移

對於模型線ModelCurve的偏移,研究了好幾天,終於搞定。先稍微談下自己中間遇到的情況。 1.首先,API中並沒有提供直接的方法對ModelCurve進行偏移; 2.考慮到模型線的建立,需要用到引數Curve,因此想到了對先Curve進行偏移,API提供了相應的方法:

C#同一個解決方案中不同的CS檔案之間的合作問題

在Revit二次開發中,一個外掛往往附帶很多功能,不同功能,對應一個不同CS檔案,那若是大家都需要用到同一種方法,怎麼辦呢?比如a.cs中的A類中的A1()方法;b.cs檔案中B類中的B1()方法;方法1(不推薦):b中需要用到A1方法,則A a=new A();a.A1()

品味型別---值型別與引用型別(中)-規則無邊

 本文將介紹以下內容: 型別的基本概念  值型別深入 引用型別深入 值型別與引用型別的比較及應用   1. 引言 上回[第八回:品味型別---值型別與引用型別(上)-記憶體有理]的釋出,受到大家的不少關注,我們從記憶體的角度瞭解了值型別和引用型別的所以然,留下的任務當然是

Revit二次開發判斷直線之間的關係

Curve.Intersect判斷兩條曲線之間的空間位置關係,返回值為1. SetComparisonResult.Overlap2. SetComparisonResult.Subset,3. SetComparisonResult.Superset,共線;注:使用前需將其

一起talk GDB吧(GDB呼叫棧除錯)

各位看官們,大家好,上一回中我們說的是GDB的斷點除錯功能,並且說了如何使用GDB進行斷點除錯。 這一回中,我們繼續介紹GDB的除錯功能:呼叫棧除錯。當然了,我們也會介紹如何使用GDB進行呼叫棧 除

一起talk GDB吧(GDB監視功能)

各位看官們,大家好,上一回中我們說的是GDB修改程式執行環境的功能,並且說了如何使用GDB修改變數 的值。這一回中,我們繼續介紹GDB的除錯功能:監視功能。當然了,我們也會介紹如何使用GDB的監視功

五篇文件並與文件歸檔

方式 文件的 打包 指定 name 輸出內容 參數 tex -c 文件合並與文件歸檔 1.> 表示把>左邊命令的輸出內容覆蓋到右邊 >> 表示把>>左邊命令的輸出內容追加到右邊 例:文件合並 cat a.txt b.txt>c.

一起talk C栗子吧(三十四C語言實例--巧用溢出計算最值)

gcc 空間 代碼 讓我 計算 max value 其他 存儲 點擊 各位看官們。大家好,上一回中咱們說的是巧用移位的樣例,這一回咱們說的樣例是:巧用溢出計算最值。 閑話休提,言歸正轉。讓我們一起talk C栗子吧! 大家都知

一起talk C栗子吧(九十六C語言實例--使用共享內存進行進程間通信二)

class mar net 表示 func clas ber 數字 標記 各位看官們。大家好,上一回中咱們說的是使用共享內存進行進程間通信的樣例,這一回咱們接著上一回內容繼續說使用共享內存進行進程間通信。閑話休提,言歸正轉。讓我們一起talk C栗子

一起talk C栗子吧(八十四C語言實例--使用信號進行進程間通信一)

split article 語言 方法 pin 第一個 ping num ont 各位看官們,大家好,上一回中咱們說的是進程間通信的樣例。這一回咱們說的樣例是:使用信號進行進程間通信。閑話休提,言歸正轉。讓我們一起talk C栗子吧! 我們在上一

Django入門與實踐-19章主題復(完結)

borde comm object created ade tro blank type temp http://127.0.0.1:8000/boards/1/topics/1/reply/ http://127.0.0.1:8000/boards/1/topics/1

易學筆記--2章spring中的Bean/2.5 Bean的週期

  第2章:spring中的Bean/2.5 Bean的週期回撥/2.5.1  概念 概念   這裡的宣告週期指的是Bean在建立完成後和銷燬時這兩個時間點,對於不同的作用域這兩個時間點有所不同

一起Talk Android吧(九十九Android中使用自定義佈局)

各位看官們,大家好,上一回中咱們說的是Android中的分隔線的例子,這一回咱們說的例子是Android中使用自定義佈局。閒話休提,言歸正轉。讓我們一起Talk Android吧! 看官們,我們在上一

五期崔永元公佈逃稅、我不是藥神投資方本|網際網路行業公會

整理:網際網路行業公會題圖:網際網路行業公會國內要聞1、Find X成安卓首款支付寶刷臉支付手機2、歐洲電信巨頭Altice與華為合作 打造葡萄牙5G網路3、百度減持愛奇藝股權:套現2.59億美元4、美團迴應在京招司機:不是在為美團打車招聘司機,而是行政服務司機5、蘋果註冊十