根拠 ツールによって実行される分析の高度さは、個々のステートメントや宣言の動作のみを考慮するもの[ 4 ] から、プログラムのソースコード 全体を分析対象に含めるものまで様々です。分析から得られた情報の用途は、コーディングエラーの可能性を強調表示すること(例:lint ツール)から、特定のプログラムに関する特性を数学的に証明する形式手法 (例:その動作が仕様と一致すること)まで多岐にわたります。
ソフトウェアメトリクス とリバースエンジニアリングは 、静的解析の一形態として説明できます。ソフトウェアメトリクスと静的解析の導出は、特に組み込みシステムの作成において、いわゆるソフトウェア品質目標を 定義することによって、ますます一緒に使用されるようになっています。[ 5 ]
静的解析の商業的な用途として、安全性が極めて重要な コンピュータシステムで使用されるソフトウェアの特性の検証や、潜在的に脆弱な コードの特定がますます増えています。[ 6 ] 例えば、以下の業界では、ますます高度化・複雑化するソフトウェアの品質向上手段として、静的コード解析の利用が認識されています。
医療ソフトウェア :米国食品医薬品局 (FDA)は、医療機器における静的解析の使用を認めています。[ 7 ] 原子力ソフトウェア:英国では、原子力規制局(ONR)が原子炉保護システム の静的解析の使用を推奨している。[ 8 ] 航空ソフトウェア(動的解析 との組み合わせ)。[ 9 ] 自動車および機械(機能安全機能は、自動車製品開発の各段階において不可欠な部分を構成する、ISO 26262 、セクション8)。 VDC Research が 2012 年に実施した調査では、調査対象となった組み込みソフトウェアエンジニアの 28.7% が静的解析ツールを使用しており、39.7% が 2 年以内に使用する予定であると報告されています。[ 10 ] 2010 年の調査では、ヨーロッパの研究プロジェクトでインタビューを受けた開発者の 60% が、基本的な IDE に組み込まれている静的アナライザーを少なくとも使用していることがわかりました。しかし、追加の (おそらくより高度な) 解析ツールを使用しているのは約 10% に過ぎません。[ 11 ]
アプリケーションセキュリティ業界では、静的アプリケーションセキュリティテスト (SAST)という名称も使用されています。SASTは、Microsoftが定義したSDL [ 12 ] などのセキュリティ開発ライフサイクル (SDL)の重要な部分であり、ソフトウェア企業では一般的な手法です[ 13 ] 。
OMG(オブジェクト管理グループ)は 、ソフトウェア品質の 測定と評価に必要なソフトウェア分析の種類に関する研究を発表しました。この「CISQ推奨事項に沿った、回復力があり、安全で、効率的で、変更しやすいITシステムを提供する方法」という文書では、3つのレベルのソフトウェア分析について説明しています。[ 14 ]
ユニットレベル 特定のプログラムまたはサブルーチン内で行われる分析であり、そのプログラムのコンテキストとは関連付けられていない。 技術レベル ユニットプログラム間の相互作用を考慮に入れた分析により、プログラム全体のより包括的かつ意味論的な視点を得て、問題点を発見し、明らかな誤検出 を回避する。 システムレベル ユニットプログラム間の相互作用を考慮した分析であり、特定の技術やプログラミング言語に限定されない。 ソフトウェア分析のさらなるレベルを定義することができる。
ミッション/ビジネスレベル 企業活動またはプログラム/ミッション活動の一環としてソフトウェアシステムが運用される際に、システム内部に実装されるビジネス/ミッション層の用語、ルール、プロセスを考慮した分析。これらの要素は、特定の技術やプログラミング言語に限定されずに実装され、多くの場合、複数の言語にまたがって実装されますが、ミッションの確実性を確保するためのシステム理解を目的として、静的に抽出・分析されます。 多くの静的解析ツールは、プログラムを実行せずにソースコードの構造を調べるために、プログラムの中間表現を使用します。この目的のために、プログラムの構文要素を構造的に表現できる抽象構文木(AST)が一般的に使用されます。
データ駆動型静的解析 データ駆動型静的解析は、広範なコードベースを活用してコーディング規則を推論し、解析の精度を向上させます。[ 17 ] [ 18 ] 例えば、GitHub で入手可能なすべての Java オープンソース パッケージを使用して、優れた解析戦略を学ぶことができます。規則の推論には機械学習技術を使用できます。[ 19 ] また、大量の過去の修正と警告から学習することも可能です。[ 17 ]
参考文献 ↑ Wichmann, BA; Canning, AA; Clutterbuck, DL; Winsbarrow, LA; Ward, NJ; Marsh, DWR (1995年3月). "静的解析に関する産業界の視点" (PDF) . Software Engineering Journal . 10 (2): 69– 75. doi : 10.1049/sej.1995.0010 . 2011年9月27日にオリジナル(PDF) からアーカイブ済み。 ↑ Egele, Manuel; Scholte, Theodoor; Kirda, Engin; Kruegel, Christopher (2008-03-05). "自動動的マルウェア解析技術とツールに関する調査" . ACM Computing Surveys . 44 (2): 6:1–6:42. doi : 10.1145/2089125.2089126 . ISSN 0360-0300 . S2CID 1863333 . ↑ Leivant, Daniel (2020). "多項式時間のための汎用命令言語". arXiv : 1911.04026 [ cs.CC ]. ↑ Khatiwada, Saket; Tushev, Miroslav; Mahmoud, Anas (2018-01-01). "Just enough semantics: An information theoretic approach for IR-based software bug localization" . Information and Software Technology . 93 : 45–57 . doi : 10.1016/j.infsof.2017.08.012 . ↑ 「ソースコードのソフトウェア品質目標」 2015年6月4日にWayback Machine に アーカイブされました(PDF)。会議録:Embedded Real Time Software and Systems 2010 Conference 、ERTS2010.org、フランス、トゥールーズ:Patrick Briand、Martin Brochet、Thierry Cambois、Emmanuel Coutenceau、Olivier Guetta、Daniel Mainberte、Frederic Mondot、Patrick Munier、Loic Noury、Philippe Spozio、Frederic Retailleau。 ↑ 精密な静的解析と実行時解析によるソフトウェアセキュリティの向上 ( Wayback Machine に 2011 年 6 月 5 日に アーカイブ) (PDF)、Benjamin Livshits、セクション 7.3「セキュリティのための静的手法」。スタンフォード大学博士論文、2006 年。↑ FDA (2010-09-08). 「FDAにおける輸液ポンプソフトウェアの安全性研究」 . 食品医薬品局. 2010-09-01 の オリジナルからアーカイブ済み . 2010-09-09 に取得. ↑ コンピュータベースの安全システム - デジタルコンピュータベースの保護システムのソフトウェア面を評価するための技術ガイダンス、「コンピュータベースの安全システム」 (PDF) 。2013年 1 月 4 日に オリジナル (PDF) からアーカイブ済み。2013 年 5 月 15 日 に取得 。 ↑ ポジションペーパーCAST-9。ソフトウェア保証に対する安全工学的アプローチの評価に関する考慮事項。 2013年10月6日にWayback Machine に アーカイブ済み// FAA、認証機関ソフトウェアチーム(CAST)、2002年1月:「検証。申請者/開発者は、静的解析と動的解析の両方の組み合わせを指定し、ソフトウェアに適用する必要があります。」 ↑ VDC Research (2012-02-01). "組み込みソフトウェア品質のための自動欠陥防止" . VDC Research. 2012-04-11 のオリジナルから アーカイブ済み。2012-04-10 に 取得 。 ↑ Prause, Christian R.、René Reiners、Silviya Dencheva。「高度に分散された研究プロジェクトにおけるツールサポートの実証的研究」。2010年第5回IEEE国際ソフトウェアエンジニアリング会議(ICGSE)。IEEE、2010年https://ieeexplore.ieee.org/Xplore/login.jsp?url=%2Fielx5%2F5581168%2F5581493%2F05581551.pdf&authDecision=-203 ↑ M. ハワード、S. リプナー著『セキュリティ開発ライフサイクル:SDL:より安全なソフトウェアを開発するためのプロセス』マイクロソフトプレス、2006年。ISBN 978-0735622142 ↑ Achim D. Brucker および Uwe Sodan。「大規模における静的アプリケーションセキュリティテストの展開」 。Wayback Machine に 2014 年 10 月 21 日に アーカイブ済み。GI Sicherheit 2014。Lecture Notes in Informatics、228、91-101 ページ、GI、2014 年。 ↑ 「OMG ホワイトペーパー | CISQ - 情報およびソフトウェア品質コンソーシアム」 (PDF) 。 2013年12月28日にオリジナルから アーカイブされました (PDF) 。 2013年10月18日 に取得 。 ↑ Vijay D'Silva 他 (2008). "形式的ソフトウェア検証のための自動化技術の調査" (PDF) . Transactions On CAD. 2016-03-04 のオリジナルから アーカイブ (PDF) . 2015-05-11 に取得 . ↑ Jones, Paul (2010-02-09). "医療機器ソフトウェア分析のための形式手法に基づく検証アプローチ" . Embedded Systems Design. 2011年7月10日の オリジナルからアーカイブ済み。 2010年9月9日 取得 。 1 2 「他人の失敗から学ぶ:データ駆動型コード分析」 www.slideshare.net 2015 年4月13日 ↑ Söderberg, Emma; Church, Luke; Höst, Martin (2021-06-21). "Open Data-driven Usability Improvements of Static Code Analysis and its Challenges" . Evaluation and Assessment in Software Engineering . EASE '21. New York, NY, USA: Association for Computing Machinery. pp. 272–277 . doi : 10.1145/3463274.3463808 . ISBN 978-1-4503-9053-8 。↑ Oh, Hakjoo; Yang, Hongseok; Yi, Kwangkeun (2015). "ベイズ最適化によるプログラム解析適応戦略の学習". 2015 ACM SIGPLAN 国際オブジェクト指向プログラミング、システム、言語、アプリケーション会議 - OOPSLA 2015 論文集 . pp. 572–588 . doi : 10.1145/2814270.2814309 . ISBN 9781450336895 . S2CID 13940725 . ↑ Logozzo, Francesco; Ball, Thomas (2012-11-15). "モジュール式で検証済みの自動プログラム修復" . ACM SIGPLAN Notices . 47 (10): 133– 146. doi : 10.1145/2398857.2384626 . ISSN 0362-1340 .
さらに読む Ayewah, Nathaniel; Hovemeyer, David; Morgenthaler, J. David; Penix, John; Pugh, William (2008). "静的解析を使用してバグを見つける". IEEE Software . 25 (5): 22–29 . CiteSeerX 10.1.1.187.8985 . doi : 10.1109/MS.2008.130 . S2CID 20646690 . Brian Chess、Jacob West (Fortify Software) (2007).静的解析によるセキュアプログラミング . Addison-Wesley. ISBN 978-0-321-42477-8 。 フレミング・ニールソン、ハンネ・R・ニールソン、クリス・ハンキン(2004年12月10日)。プログラム分析の原理 (1999年版(2004年改訂 版))。シュプリンガー。ISBN 978-3-540-65410-0 。 「抽象解釈と静的解析」、 2003年国際意味論・応用冬季スクール、デビッド・A・シュミット著