【JSTQB対策】静的テストと動的テストの違いとは

静的テストと動的テストの違いとは
ソフトウェアテストの世界に足を踏み入れると、最初に戸惑うのが「静的テスト」と「動的テスト」という概念ではないでしょうか。
JSTQB Foundation Level(FL)の試験では、この2つの違いをしっかり理解していることが求められます。今回は、この重要なテーマを分かりやすく解説していきます。
動かすか、動かさないか
静的テストと動的テストの最大の違いは、実にシンプルです。ソフトウェアを実行するかしないか、それだけです。
動的テストは、プログラムを実際に動かして確認するテスト手法です。アプリケーションを起動し、ボタンをクリックし、データを入力して、期待通りに動作するかを検証します。多くの場合、「テスト」というと、この動的テストを思い浮かべる人が多いかもしれません。
一方、静的テストは、ソフトウェアを一切実行せずに行うテストです。設計書やソースコードを読んで問題点を見つけたり、ツールを使ってコードの構造を分析したりします。「実行しないでどうやってテストするの?」と疑問に思うかもしれませんが、実はこれが非常に強力な手法なのです。
静的テストのアプローチ
静的テストには、大きく分けてふたつのアプローチがあります。
1.レビュー
レビューとは、人間の目と経験を使って成果物をチェックする手法です。要件定義書に矛盾がないか、設計書に漏れがないか、ソースコードにバグの原因となりそうな記述がないかを確認します。
レビューの形式にはいくつかの種類があります。例えば、仲間同士で気軽にチェックし合う「非公式レビュー」、著者が参加者に説明しながら進める「ウォークスルー」、専門家が厳格にチェックする「インスペクション」などがあります。
JSTQBの試験では、これらの違いも問われることがあるので、しっかり押さえておきましょう。
(レビューの形式についての詳しい説明は、次回のコラムにて紹介します)
2.静的解析
静的解析は、専用のツールを使ってソースコードを自動的に解析する手法です。
コーディング規約違反、メモリリークの可能性、セキュリティの脆弱性など、人間の目では見落としがちな問題を機械的に検出します。
静的解析ツールは、コードの構造を解析し、パターンマッチングやルールベースのチェックを実行します。大規模なプロジェクトでは、この自動化された検証が品質保証の要となります。
動的テストの本質
動的テストの特徴は、実際にソフトウェアを動かすことで「故障」を発見するという点です。
ここで重要なのが、「欠陥」と「故障」の違いです。
・欠陥(Defect):ソースコードや設計書に存在する誤り
・故障(Failure):欠陥が原因で起こる、期待通りに動作しない現象
動的テストでは、テストケースを実行し、故障が発生するかを確認します。
故障が見つかれば、その原因となる欠陥を特定して修正します。つまり、動的テストは「故障を通じて間接的に欠陥を見つける」手法なのです。
一方、静的テストでは欠陥を直接発見できます。ソースコードを読んで「この変数、初期化されていないな」と気づけば、それが実際に故障を引き起こす前に修正できるのです。
静的テストの重要性
JSTQB FLの学習を進めていると、「テストの7原則」の1つに「早期テストで時間とコストを節約する」という考え方が出てきます。これはまさに静的テストの価値を示しています。
開発の初期段階である、要件定義や設計の段階で欠陥を見つけることができれば、修正コストは最小限で済みます。
もし実装が完了し、テストフェーズに入ってから欠陥が見つかれば、修正には何倍ものコストがかかります。さらに本番環境で欠陥が発覚すれば、その影響は計り知れません。
静的テストの最大のメリットは、動的テストが実施できない段階でも品質向上活動ができるという点です。まだコードが1行も書かれていなくても、要件定義書をレビューすることで、プロジェクトを正しい方向へ導くことができるのです。
静的テストと動的テストは競合しない
静的テストと動的テストは「どちらか一方を選ぶ」ものではないということです。この2つは相互補完的な関係にあります。
静的テストは、コードの構造的な問題、設計の不整合、要件の曖昧さなどを検出するのに優れています。しかし、実際に動かしたときの性能問題や、複数のコンポーネントが連携したときにしか現れない不具合は見つけられません。
動的テストは、実行時の挙動や実際の使用環境での動作を検証できますが、すべてのコードパスをテストすることは不可能です。また、設計書レベルの問題は、動的テストでは検出が困難です。
だからこそ、両方のアプローチを組み合わせることが、効果的な品質保証につながります。
試験対策のポイント
JSTQB FLの試験では、静的テストと動的テストに関して以下のような点が問われます。
・定義の理解:それぞれの定義を正確に説明できるか
・違いの明確化:実行する/しない、欠陥を直接発見/故障を通じて発見
・具体例:どのような活動が静的テスト(動的テスト)に該当するか
・メリット・デメリット:それぞれの長所と短所を理解しているか
・相互補完性:2つのテストがどう補い合うかを理解しているか
シラバスを読み込む際には、単に用語を暗記するのではなく、「なぜこの手法が必要なのか」「実際のプロジェクトでどう活用されるのか」を考えながら学習すると、より理解が深まります。
JSTQB(日本ソフトウェアテスト技術者資格)は、ソフトウェアテストの専門的な知識と技術を認定するための資格です。この資格は、ソフトウェアテストのプロフェッショナルとして必要なスキルを証明するものとして、業界で広く認知されています。
JSTQBは、国際的な基準であるISTQB(International Software Testing Qualifications Board)に基づいており、日本国内のソフトウェアテスト分野における実務能力を向上させるための指針となっています。
株式会社NSITでは、ソフトウェアテストに従事するエンジニアの約9割が、JSTQBの資格を取得しております。