- コーディング高度化
「ソースコード解析」を安全・確実に行う方法!ツール導入で効率大幅アップ
2023.10.11
開発しているプログラムの不具合がリリース直前で見つかり手戻りになってしまった、納期直前でビジネス部門から催促され、時間的猶予もない……開発現場にとっては、あってはならない事態で、想像するだけで胃がキリキリとしてしまいそうです。
プログラムの重大な不具合や脆弱性を、開発の早い段階から確実に見つけ出して対処するためには、どのような方法があるでしょうか?
本記事では、ソースコード解析の概要から重要性、手段などについて専門ツールでの自動化を含めて解説します。
開発の初期からソースコードを解析することの重要性
ソフトウェアやシステムの開発工程においては、機能単位ごとに細かな開発タームを分けて、段階的に開発をすすめていく場合が多いでしょう。したがって不具合検出のためのソースコード解析は、開発の初期段階からこまめに、回数を分けて行っておくことが重要です。
万が一、開発終盤や、リリース直前で致命的な不具合や脆弱性が発覚し、手戻りが初期の工程にまで及んでしまった場合、取返しがつかないほどの大きな納品遅延が発生してしまいます。
ソースコード解析にはどのような方法がある?
そもそも、ソースコード解析とはどのような手段で行うものでしょうか。旧来の方法から含め、大きく分けて以下のようなパターンがあります。
・高度な知識を持った解析担当者が、ソースコードを目視し、チートシートなどの資料・ツールも
活用しながら検証する(レビュー)
・ソースコードに解析用のアルゴリズムを適用し、データフローや制御フローを解析する
(フロー解析)
・プログラムをサンドボックスのような安全な環境下で、実際の利用想定で本番と同じよう
動作させて動きや機能を調査する
・ソースコード解析用の専門ツールを活用し、解析を自動で行う
「動的解析」と「静的解析」
|
ソースコード解析は、解析時に実際にプログラムを動作させるか否かという観点で、「動的解析」と「静的解析」の2種類に分けられます。
動的解析(Dynamic Analysis)とは?
動的解析は、解析対象のプログラムを実際に動作させて行う解析方法です。
動的解析には、解析の手順や観点によって、さらにいくつかのパターンに分かれます。
一つめのパターンは、テストの担当者(テスター)が実際の製品を動かしながら、仕様通りの機能になっているのか、動作に問題はないのかを確認する方法です。この場合テスターはプログラムの中身やソースコードの構造などを意識することはなく、いわばブラックボックステストの状態で、表面上の結果のみに注目してテストを行います。
二つめのパターンは、開発者がデバッガなどを使用して、作成したプログラムが意図した通りに動いているのかを確認します。この場合には、テスターはプログラムの内部の構造自体を把握した上で動作を確認するため、ホワイトボックステストに該当します。
三つめのパターンは、動的テストツールを使用して、内部構成を把握したテスターが機能テストを行うケースです。
動的テストツールは実行時間の測定やカバレッジの計測など、動的解析に適した機能をもっているため、テスト結果の詳細な分析を簡単に行うことができます。このケースは、いわばブラックボックステストとホワイトボックステストの中間にあたるため、グレーボックステストと呼ばれます。
動的解析の特徴
動的解析ではプログラムを実際に動作させるため、パフォーマンスやユーザビリティの観点から実際的なテストを行うことができます。そもそもの仕様に問題はないのかという点まで検証可能で、プログラムが実行され動的に状態や論理が変化していく過程で引き起こされる、タイミング依存の問題なども発見できます。
一方、後述する静的解析と比較した場合のデメリットとしては、以下のような点が挙げられます。
・動的テストを行うためには、モジュールを作成したり、ソフトウェアを動作できる
状態にする必要がある
・実際のサービスリリース時とまったく同じ環境下での動作確認を行うのは難しい場合が多く、
またある程度の想定環境でテストを行う場合も環境用意に時間がかかる
・不具合の検出レベルは、テスターのテクニックなどによって個人差が出やすい
静的解析(Static Analysis)とは?
静的解析では、プログラムを実際に実行するのではなく、ソースコードを直接チェックするかたちで解析を行います。
前述した、目視によるレビューも静的解析にあたります。また、静的解析ツールを用いてほぼ自動的にソースコードを解析する方法もあり、この方法が現在ではさまざまな開発現場で導入されています。
静的解析の業界内における歴史をたどると、古くはUNIX系でよく知られた「lintコマンド」などで、書かれたプログラムの構文自体のおかしな部分や、コンパイルは通るものの危険な状態のプログラムなどを検出していました。しかしこの方法では誤検出も多く発生し、解析時間も膨大になるという欠点があったのです。
現在多くの現場で活用されている静的解析ツールは、誤検出も減り、PCの性能向上によって解析時間も格段と短くなっています。
静的解析の特徴
現代の解析ツールを用いた静的解析においては、欠陥を検出するためにテストケースを準備したり、テストを実行するための膨大な時間を用意する必要がありません。
この記事で以下からは、ソースコードの問題を早い段階で見つけ、対策を行う最適な方法として、この「静的解析」を行うためのツールについて解説します。
「静的解析」については、こちらの記事もあわせてご覧ください。
「Fortify SCA」ならコード品質からセキュリティまで一括で自動チェック
|
「Fortify SCA」は、ソースコードの静的解析ツールです。
開発プロジェクトの初期段階からソースコードファイルのエラー検索をこまめに行い、致命的な問題を検出することを目的に設計されているため、導入することによりプロジェクト全体の開発時間の短縮と、コスト削減を見込めます。
解析できる言語としてはPHPやPythonなどのWeb系言語、C#、C/C++、Java、JavaScriptやRuby、.NET Frameworkなどを始めとして、現代の開発現場で使われる幅広い言語に対応しています。また、770種以上もの脆弱性カテゴリを検出可能で、セキュリティ面まで含め、プログラムの品質を一元管理できます。ただ静的解析ツールを使うと、意図せずたくさんの脆弱性が検出されてしまい、検出された脆弱性の対処方針を人が判断する必要性が出てくることがあります。
Fortify SCAは、検出された脆弱性の対処要否や優先度を独自の機能を用いてスコアリングする機能があり、人手の判断を効率的にアシストします。
「Fortify SCA」のご相談ならアシストへ
|
静的解析の有用性を理解できたものの、実際に導入できるか不安、現場の混乱なく現在の環境にマッチさせられるものか心配、とお悩みのご担当者様もいらっしゃるかもしれません。
株式会社アシストでは、「Fortify SCA」の詳細説明やデモンストレーションなど、導入するためのサポートを行っております。「Fortify SCA」の詳細や価格が記載された説明資料もダウンロードできますので、ぜひ導入検討時にお役立てください。
開発初期から静的解析ツールのご利用をおすすめ
ソースコード解析には大きく分けて「動的解析」と「静的解析」の2種類があり、スピーディー且つ高品質を目指す開発プロジェクトにおいては、開発初期段階から静的解析を行うことが重要です。静的解析は、現代ではFortify SCAなどの高品質な解析ツールによって簡単に行えます。
本記事でご紹介した情報を参考に、ぜひ静的解析ツールを取り入れてみてください。
関連ソリューション
-
コーディング高度化
アプリケーション構造の可視化とコード解析による脆弱性混入の防止により、開発の早期段階で不具合や脆弱性のリスクを回避します。
お客様の状況に合わせて詳しい情報をお届けします。
お気軽にご相談ください。