ソフトウェアを実行せずに検証できる「静的テスト」は、ソフトウェア品質向上の鍵となるテスト手法です。
言葉から何となくはイメージできても、具体的な実施方法や使用するツールなど、疑問も多いのではないでしょうか。
今回は静的テストとは何か、基本をまとめてお伝えします。静的テストの実施方法やおすすめツールも紹介しますので、参考にしてみてください。
- もくじ
1.静的テストとは
1-1 静的テストとは?
静的テストとは、テスト対象となるソフトウェアを実行せずに検証するテスト手法のことです。ソフトウェアを動かして正しく振る舞うかを検証するのではなく、コードや成果物を目視やツールによって評価・解析します。
静的テストにより、コードに潜んだ脆弱性(セキュリティ上の弱み)、設計書の記載漏れや不整合といった問題を検出できます。ソフトウェアを実行して検証する前に静的テストを実施することで、早期に問題を検出できます。
1-2 動的テストの違い
静的テストと関連が深いテスト手法に「動的テスト」があります。
動的テストとは、テスト対象となるソフトウェアを実行し、その振る舞いを検証するテスト手法です。ソフトウェアの実行を伴うことが、静的テストとの違いといえます。
動的テストでは使いやすさやパフォーマンス、エラー処理など「ソフトを動かさないと分からない問題」を検出します。
一方、静的テストでは記述・設定ミスや構造上の問題など、「実行前に発見できる潜在的な問題」を検出できます。
ソフトウェア開発において静的テストと動的テストはいずれも欠かせません。静的テストを先に実行して潜在的な問題を検出・対処したうえで、動的テストを実施する流れが一般的です。
2.静的テストを実施する目的
「動的テストさえ実施すれば十分」と考えられがちですが、静的テストの実施には2つの大きな目的があります。
2-1 問題を早期検出する
静的テストの強みは、問題を早期検出できることです。動的テストの場合、動かせるレベルのコードや実行環境を用意しなければ実施できません。その点、静的テストはソフトウェアを実行する必要がないため、設計やコーディング段階でも実施できます。
手戻りによる修正コストを抑えるためには、問題を早期に発見・対処することが重要です。仮に動的テストの段階で手戻りが発生すると、静的テストに比べて、より多くの修正コストや時間が多く必要となります。
静的テストにより問題を早期検出すれば後々の手戻りが減り、修正コストを大幅に削減できるでしょう。
2-2 動的テストでは気づけない問題を検出する
静的テストを実施することで、動的テストでは気づけない問題も検出できます。
静的テストはコードや成果物の内部を検証対象とするため、動作に表れにくい問題も検出可能です。たとえば、コードを対象とした静的テストを実施すれば、変数の初期化漏れや内部構造上の不備に気付けるでしょう。こうした問題は、特定の状況下で実行しないと発生しないケースが多く、動的テストだけでは見逃してしまいがちです。
動的テストの実施前に適切な静的テストを実施することで、ソフトウェア細部の問題を事前に検出できます。
3.静的テストの主な実施方法
静的テストには、主に2つの実施方法があります。それぞれのメリットやデメリットを把握しておきましょう。
3-1 人力によるレビュー
1つ目の実施方法は、人力によるレビューです。コードやドキュメントを制作者以外の人間が目視でチェックし、問題を見つけます。設計レビューやコードレビューなど、静的テストの対象物に合わせたレビューを行います。
人力によるレビューは柔軟性が高く、幅広い成果物を検証できるのがメリットです。反面、レビューの実施にあたって複数のチームメンバーを拘束することになり、手間やコストがかかりやすいというデメリットもあります。
3-2 ツールによる静的解析
2つ目の実施方法は、ツールによる静的解析です。検証したい観点や成果物に合わせたツールを選定・設定し、コードやドキュメントを機械的にチェックします。脆弱性やコーディング規約違反、フォーマット不統一など多岐にわたる項目を自動解析できます。
人力のレビューと比べて手間やコストを抑えやすく、人間が見落としがちな問題も検出できるのがメリットです。ただし、特殊な形式のドキュメントに対応できないなど、人力のレビューよりも検証対象が限定されやすいデメリットもあります。また、精度が低いツールでは誤検出が多くなり、指摘内容の確認に余計な時間がかかるケースも考えられます。
4.代表的な静的テストツール3選
静的テストを実施する際には、ツールによる静的解析を取り入れて効率化することをおすすめします。ここでは、代表的な静的テストツールを3つ紹介します。
4-1 GitHub Code Scanning
「GitHub Code Scanning」は、バージョン管理プラットフォーム「GitHub」の1機能として提供されている静的解析ツールです。GitHub上にアップロードしたコードに対して静的解析を実施し、脆弱性や構文エラーなどの問題を検出します。
プッシュやプルリクエストといった操作に合わせて、自動的に静的テストを実施できるのが特徴です。Public(公開)リポジトリのコードに対しては無料で活用できますが、Private(非公開)リポジトリでの活用は「GitHub Enterprise」のみに限られます。
4-2 SonarQube
「SonarQube」は、オープンソースの静的解析ツールです。JavaやC#、Pythonなど幅広いプログラミング言語で書かれたコードの問題を検出できます。オープンソースのため、SonarQube自体は無料でインストールできるのが利点です。
静的解析を行う場合、SonarQubeをインストールしたサーバー環境の構築が必要です。導入に手間やコストはかかるものの、カスタマイズがしやすいというメリットがあります。導入の手間やコストを抑えたい場合は、クラウドサービス版の「SonarCloud」がおすすめです。
4-3 Fortify SCA
「Fortify SCA」は、脆弱性の検出に特化した静的解析ツールです。ソフトウェアに潜む脆弱性の根本原因を特定し、推奨される解決方法を提示します。30以上のプログラミング言語に対応しており、1,600を超えるカテゴリーの脆弱性を検出可能です。
CI/CDによる自動化に対応しており、効率的に脆弱性を検出できるため、セキュリティ対策を強化したい場合は活用すると良いでしょう。ただし商用ツールのため、基本的に導入コストがかかります。
5.静的テストを実施する際のポイント
静的テストは、ポイントを押さえて実施することが大切です。以下の2つのポイントを押さえておきましょう。
5-1 ツールの設定を適切に行う
静的テストでツールを活用する際は設定が適切であることが不可欠です。
静的解析ツールにはチェック項目や警告レベルなどさまざまな設定オプションが用意されています。しかし、初期設定では必ずしもチームに最適な状態であるとは限りません。
こうした設定を見直さずに利用すると、検出したい問題が見逃がされたり、無視したい事象が指摘されたりします。静的テストの成果向上・効率化のために、チームの目的に沿った設定を行ったうえでツールを利用しましょう。
5-2 レビューと静的解析を組み合わせる
静的テストでは、レビューと静的解析を組み合わるとよいでしょう。レビューだけでは気づけない問題や静的解析だけでは気づけない問題もあり、片方の実施だけでは不十分なケースがあります。
静的解析ツールで機械的に問題を検出したうえで、人力のレビューも行うのが理想的です。静的解析で事前に明らかな問題を除去しておくことでレビューでの見落としが減り、スムーズな進行が可能になるでしょう。
まとめ
静的テストとは、テスト対象となるソフトウェアを実行せずに検証するテスト手法のことです。
ソフトウェアの実行が不要なため問題を早期検出でき、動的テストでは気づけない問題も検出できます。
また、静的テストには、レビューと静的解析の2種類があります。人力でのレビューには手間やコストがかかるため、ツールによる静的解析も組み合わせると良いでしょう。
静的テストを実施する際には、今回の内容を参考にしてください。