ITpro Special
週間WEEKLY ITpro Special ITpro

豊富な実績を持つ静的解析ツールの定番製品

グローバルで豊富な実績を持つ静的解析ツールの定番製品

日本シノプシス合同会社 営業本部 ソフトウェア インテグリティ グループ シニアプロダクトマーケティングマネージャー 津村 直史 氏

 一般にソフトウエア開発における不具合の修正コストは、問題の発見が後工程になればなるほど膨らんでしまう。例えば、リリース直前に実施するセキュリティ診断でソフトウエアに脆弱性が発見されれば、実装工程に戻って修正を行い、改めて各種テストを実施しなければならなくなるなど手戻りが大きく、想定外の工数がかさんでしまうことになる。その結果、予定されたリリース時期に間に合わなくなってしまう事態にもなりかねない。

 「開発ライフサイクルのより早い段階で、ソフトウエアに含まれるバグや脆弱性を検出し、確実に潰していける体制を整えることが重要です。そこで効果的な対処方法となるのが、静的解析ツールの活用です」と日本シノプシスの津村直史氏は語る。静的解析ツールを利用することで、コーディングのフェーズにおいて人手では捉えきれないコードに内在する不具合を網羅的に顕在化することができる。それによって、確実に問題点を解消し、開発プロセスの次なる段階へと進んでいくアプローチが可能となる。

 そうした静的解析の領域で、市場をリードする製品として知られているのがシノプシスが提供する「Coverity Enterprise Code Advisor」(以下、Code Advisor)である。「Code Advisorは、自動車や家電、携帯、医療機器など製造分野の組み込み系を中心に、金融やパッケージソフト、さらにはゲームやエンタープライズ系の開発などにおいても広く利用されており、グローバルで1100社以上の導入実績を誇ります」と津村氏は紹介する。

高度なアルゴリズムを駆使して10%という低誤検知率を実現

 Code Advisorでは、メモリーリークやデータ破壊、データ競合など、通常は実行時でなければ捉えることのできないソフトウエアのバグを静的に検出できる点が大きな特徴となっている。併せて、SQLインジェクションやクロスサイト・スクリプティングといったセキュリティ上の攻撃に対する潜在的な脆弱性の検出も可能だ。検出した問題点についてCode Advisorでは、その不具合に関する詳細な説明、そこに至るマクロや関数間呼び出しなどのシーケンスのインラインによる表示が行われるほか、どのようにコードを修正すべきかについてのガイダンスも示されるようになっている。

 対応する言語としては、C/C++やJava、C#といった、現在、開発現場で利用されている主要な処理系を広くサポート。「これら言語の100以上のコンパイラに対応しており、それぞれのコンパイラの特性を理解し、ビルドごとの正確な挙動をキャプチャーしています。さらに様々な高度なアルゴリズムを適用することで、10%という業界トップクラスの誤検知率の低さを実現しています」と津村氏は強調する。

 またCode Advisorでは、プロシージャ間をまたがって複雑に分岐する全制御パスのシミュレーションが可能となっており、人的な確認では捕捉困難な不具合も確実に検出できるほか、コードの傾向などに基づく統計的解析の機能も備える。「例えば、10回の同様の呼び出しの中で、9回は変数のNullチェックを行っているのに、1回だけ行っていないような場合、その1回についてはチェック漏れではないかといったことを指摘するわけです」と津村氏は説明する。

 さらに、Code Advisorにおいて特筆されるのが、構成管理(SCM)や継続的インテグレーション(CI)などに基づくチーム開発のワークフローの中に組み込んで運用できる点だ。検出された問題の修正をメール通知などで適切な開発者にアサインするといったことも可能となっている。

Code Advisorの画面例 ソフトウエアのバグを静的に検出でき、ワークフロー情報も管理できる
Code Advisorの画面例
ソフトウエアのバグを静的に検出でき、ワークフロー情報も管理できる

動的型付け言語の先進的研究がJavaScriptの静的解析に結実

 このように静的解析により、ソフトウエアのコードに内在する問題点を容易に特定し、そのレビュー、修正に要するコストの削減に貢献するCode Advisorだが、先ごろ、その最新バージョンとなる「Coverity Enterprise Code Advisor 7.7」が登場。そこでは、サポート言語の拡張、セキュリティ機能の拡充をはじめとする大幅な強化が施されている。

 対応言語の拡張に関しては、先に述べたC/C++、Java、C#に加え、JavaScriptおよびObjective-C/C++にも対応した。

 まず、JavaScriptについては、動的な型付けを持つ同言語の静的解析となると、JSHintのような構文チェックを行うためのツールは登場していたものの、フロー解析やプロシージャ間解析などをサポートするツールの実現は困難とされていた。

 「シノプシスでは、動的型付け言語に関するコールフローの生成方法についての先進的な研究を進めてきており、それがようやく実用段階に入りました。その第1弾として今回、ツールにおけるJavaScriptへの対応を実現しました」と津村氏は紹介する。具体的には、ECMAScript 5に準拠したJavaScriptにおける解析をサポート。JSHintの構文チェック機能を内蔵するとともに、独自の品質チェッカーを提供している。

 またObjective-C/C++は、iOSやOS X上のアプリケーション開発において需要が高まっている開発言語だが、Code AdvisorではこれまでC/C++のコード解析で培ってきた豊富な技術、ノウハウをベースに対応を実現。LLVM、Apple、Android NDKのClangコンパイラをサポートし、C/C++と同様の70種類以上のチェッカーが利用できるようになっている。

 一方のセキュリティ機能の拡充については、これまでJavaベースのWebアプリケーションに関して提供していた脆弱性検出を、C#で記述されたASP.NETのアプリケーションについても行えるようにした。「Code Advisorのセキュリティチェック機能では、開発者が実装時に行う品質チェックの中で、同時にコードに含まれる脆弱性の検知を手軽に行えるようにすることを主眼としており、システムの最終的なセキュリティ監査からの手戻りを最小限にとどめることに貢献します」と津村氏は語る。

 そのほかにも、今回のCode Advisorの新バージョンでは、任意のスコアリング設定によるコード品質の可視化が可能なセキュリティ監査レポート機能、さらには自動車業界における組み込みソフトウエアの設計標準規格である「MISRA」に準じたコーディング規約違反を検出、管理する機能も新たに追加しているなど、多様な側面からの拡充が図られている。

 シノプシスでは、今後も静的解析の対応言語や検知ロジックのさらなる強化を目指していく。一方、特にセキュリティの領域については、業界をリードするネットワークのファジングツールとして知られる「Codenomicon Defensics」や、バイナリデータを解析して既知の脆弱性を把握できるソフトウエアコンポジット解析(SCA)のための「Codenomicon AppCheck」、あるいは次世代のWebアプリケーションセキュリティ検査手法であるインタラクティブアプリケーションテスト(IAST)のための「Seeker」といった各製品を企業買収により獲得するなど、ポートフォリオの拡張にも積極的に取り組んでいる。

 ソフトウエア開発における、より高度な品質管理を目指す企業にとって、こうしたシノプシスの動向は、今後も要注目である。

関連リンク

pdf無料ダウンロード(日本語版)

【無料ダウンロード】
Coverity Scan オープンソースレポート2014(日本語版)

米シノプシスが無料で開発テスト技術をオープンソースコミュニティに提供しているのが、「Coverity Scan」。オープンソースの品質を測定する標準として広く普及している。このレポートは、そのテスト結果をまとめたものの最新版。2500以上のオープンソースのC/C++、Java、C#プロジェクトの100億行を超えるコードや、匿名の商用プロジェクトのサンプルも分析している。

お問い合わせ