プログラムやシステムができたら,正しく処理できるか,処理速度は適切か,操作性はどうかなどの確認のためのテストをします。この工程が不十分だと稼動後になって大きなトラブルが発生する危険もあるし,利用者と開発者の間の責任問題にもなります。
シスアド試験では,プログラムやテストに関する問題が多く出題されます。ここでは,よく出題されるものを集めました。
単体テスト、ブラックボックステスト、限界値チェック、結合テスト、システムテスト、運用テスト、退化テスト
テストには多様なプロセスや方法があります。
共通フレーム2007では、企画開発工程とテストの関係を次のように示しています(図示)。
企画開発工程 共通フレームでの 上図での
テスト・評価名称 テスト名称
事業レベル
経営戦略 経営評価
システム化の方向性 情報化評価
システム化評価 運用評価
業務レベル
要件定義 運用テスト 運用テスト
システムレベル
システム要件定義 システム適格性確認テスト
システム方式設計 システム結合 システムテスト
ソフトウェアレベル
ソフトウェア要件定義 ソフトウェア適格性確認テスト
ソフトウェア方式設計 ソフトウェア結合 結合テスト
ソフトウェア詳細設計 ソフトウェアテスト 単体テスト
テストは,開発者と利用者が協力して行う必要がありますが,システムテストより前のテストは,プログラムに密着したチェックをするので,開発者が主体になり,それより後のテストは,システム全体の検収や運用での場面になるので,利用者が中心になります。
システムテストは、システム結合の意味では、結合テストの延長だとして、開発者が中心になるともいえますが、システム適格性確認テストの意味では、システム要件を満たしていること、すなわち外部設計仕様書通りになっていることを確認するテストですので、外部設計者が担当することになります。その外部設計者には利用部門が参画しているので、開発者と利用部門の両方が主体になるといえます。さらには、システムテストの最終段階が承認テスト(受入れテスト)であるとすれば、利用部門が主体になるともいえます。
1つのプログラム(モジュール)を単体でテストします。文法ミスなどはプログラム作成段階で解決しているので,実際にデータを与えてみて,正しく動くかどうかを確認します。
テストの方法から,次の二つに区分されます。
テストを効果的に行うには,適切なテストデータを作成することが大切です。正しいデータが正しく処理されるだけでなく,わざと誤りのデータを与えて,誤りであることを正しく認識していることを確かめる必要があります。
次のチェックができるようにテストデータを設定します。
ソースプログラムには多くの分岐やループなどがあります。それらのケースをくまなくテストすることが求められますが、すべてのケースをテストしようとすると、ケース数が非常に多くなり時間も費用もかかるので、重点的に選択したり、動的/静的を適切に組み合わせたりします。テストするケースの割合をカバレッジ(カバー率)といいます。
テストに用いるデータ量も多くなります。それを支援するツールをテストデータ支援ツールといいます。
誤った入力データが入力されると、誤った結果になりますが、いったんコンピュータに入った誤りデータを発見するには多大な手間がかかります。それで、入力時点で誤りを防ぐことが重要です。
特に長い数字列のコードの場合は入力誤りをしがちです。それで、コードの末尾に1桁たチェック用の桁をもうけておき、例えばコードの各桁を加算したときの1の位の数字を入れておき、コード入力したときに計算をして、答が合致するかどうかをチェックする方法があります。そのチェック用の桁をチェックデジットといいます。
POSシステムではJANコード(バーコード)をスキャンしますが、読み取りエラーを防ぐために、JANコードにはチェックデジットがつけられています。また、厳しく誤りを発見するために、複雑な計算方法を採用しています。
単体のプログラムは正しくても,複数のプログラム間でデータの受け渡しなどで誤りがないかをテストします。特に異なるプログラマが作成したプログラムでは,思い違いが発生する危険があります。
上位のプログラムから下位のプログラムを呼び出す構成もあります。例えば上位のプログラムでいくつかのメニューが示され,そこで指定されたの処理を,それぞれの下位のプログラムで行うようなケースです。このようなときの結合テストのときには,次の2通りがあります。

単体テストと結合テストの段階は,開発者が主体になるが,システムテスト(総合テスト)では,両者の共同作業になり(厳密には外部設計者),それ以降は利用者が主体になります。
ところが、利用者はテストに関心が低いのが通例です。しかも、テストには非常な労力を伴います。そのため、十分なテストが行えないことがよくあるのです。
ひどい場合には、先月のデータをもってきて「先月と同じ結果になればいいよ」などという利用者もいます。
「君たちはプロだし、誠実だから、君たちを信用するよ」という人もいます。テストの段階になると、奇妙に提供者は信用されるのですね。
単にロジックが正しいことを確認するだけではなく,後述のように総合的な観点からテストします。
システムの修正や機能追加をしたときに,その修正などにより、ほかの部分でエラーになることがないことを確認するテストです。このような場合には、
・短期間での解決が求められるので、正規の体制ではなく担当者個人で対処することになりやすい
保守運用ルールの徹底が必要
・影響を及ぼすプログラムを特定することが難しい
文書化(可視化)の徹底が必要
などのため、テストが不十分になることが多いのです。
システムに含まれるエラーのことをバグといい,それを発見して修正することをデバッグといいます。
最初の時点では単純なエラーが多く見つかるが,次第に発見が困難になるし,複雑なエラーで修正も困難になります。それで、バグ累積数をグラフにすると,指数曲線のようになると考えられます。ところが、最初の段階では準備などに時間がとられるため、実際にはゴンペルツ曲線のようになることが多いのです。

理想的にはすべてのバグを無くさなければならないのですが,システムにある真のバグ数は誰にもわかりません。でも,このような曲線を描くことにより,残っているバグの数を想定することができます。
ある時点を過ぎると、残っているバグは少ないのに,それを発見して修正する時間や費用が多くかかることになります。それで,実務的には致命的なバグが解決できているならば,この時点でテストを終了し,次の段階で発見されるのを待つことにするのが一般的です。