CAE解析でよく使われるTet4(一次要素)とTet10(二次要素)の違いを図解で解説。節点数の違いだけでなく、ラグランジュ補間による形状表現の差異、曲面形状での応力集中リスク、計算コストとのトレードオフなど、実務での使い分け基準を現役設計者がまとめました。. 静的解析はプログラムを実行せずにソースコードや中間表現を分析する手法であり、動的解析はプログラムを実際に実行しながらその動作を観察・分析する手法です。 「実行するかしないか」という点が2つの解析手法の最も根本的な違い となります。
静的コード解析 (せいてきコードかいせき、static code analysis) または静的プログラム解析 (static program analysis) とは、コンピュータのソフトウェアの解析手法の一種であり、実行ファイルを実行することなく解析を行うこと。逆にソフトウェアを実行して行う解析を動的プログラム解析と呼ぶ。静的コード解析はソースコードに対して行われることが多いが、少数ながらオブジェクトコードに対して行う場合もある。また、この用語は以下に列挙するツールを使用した解析を意味することが多い。人間が行う作業はインスペクション、コードレビューなどと呼ぶ。日本語では静的コード分析とも訳される。
概要
ツールが行う静的コード解析の洗練度は、個々の文や宣言だけを検証するものから、プログラム全体を解析するものまで様々である。解析結果の利用も様々で、Lintのように単に指摘するだけのものから、形式手法を使ってそのプログラムの特性を数学的に証明する(仕様記述と振る舞いが一致しているかどうかを検証する)ものまである。
ソフトウェア測定法やリバースエンジニアリングも静的解析の一部とみなすこともある。特に組み込みシステムの開発において、ソフトウェア測定法と静的コード解析が品質向上の一助として活用されることが多くなっている。
静的解析の商業利用が増えているのは、重要なコンピュータシステムで使用されるソフトウェアの検証や潜在的なセキュリティホールを検出する必要性が増大したことを意味する。以下のような分野で、複雑さを増していくソフトウェアの品質向上に静的コード解析が使われている。
- 医療用ソフトウェア – アメリカ食品医薬品局 (FDA) は医療機器で静的コード解析が活用されているとしている。
- 原子力関連のソフトウェア – イギリスの Health and Safety Executive は原子炉保護系での静的コード解析の活用を推奨している。
VDC Research が行った調査(2012年)によれば、組み込みシステムのソフトウェア技術者の28.7%が静的コード解析ツールを既に使っており、39.7%が2年以内に使いたいと答えた。
アプリケーションのセキュリティの分野では Static Application Security Testing (SAST) という用語が使われている。
形式手法
形式手法は、ソフトウェアやハードウェアの解析に用いられる用語であり、厳密に数学的な手法によって解析結果を得ることを意味する。数学的手法としては、表示的意味論、公理的意味論、操作的意味論、抽象解釈などがある。
実行時エラーを全て検出することは不可能であることが証明されており、任意のプログラムが正しく動作するかエラーになるかを判定する機械的手法はない。これは1930年代のアラン・チューリングやライスの研究で判明した(チューリングマシンの停止問題およびライスの定理)。決定不能な問題ではあるが、近似的な解でも有効である。
形式的な静的コード解析の実装方法には以下のようなものがある:
- モデル検査は、有限の状態を持つシステムを対象とし、無限に状態を持つシステムを抽象化によって状態数を有限個に減らして行うこともある。
- データフロー解析は、プログラムの各点で変数群の取りうる値についての情報を集める技法である。
- 抽象解釈は、プログラムの個々の文が抽象機械の状態に何らかの影響を与える様子をモデル化したものである(つまり、ソフトウェアを個々の文の数学的属性と宣言に基づいて「実行」する)。抽象機械は解析しやすいようになるべく単純化されるので、実際のプログラムを完全に表すわけではない(もとのシステムで真である属性が抽象システムで常に真とは限らない)。うまくいけば、抽象解釈は「健全」とされる(抽象システムで真である全属性はもとのシステムでも真だといえる)。例えば、Frama-cやPolyspaceといったツールは、抽象解釈の技法を使っている。
- 表明をプログラム内で使うことは、ホーア論理で最初に示唆された。一部のプログラミング言語は表明をツールとしてサポートしている。
静的コード解析ツール
事前コンパイラ(AOTコンパイラ)は、言語仕様には適合しているもののロジックの正当性が疑わしいようなコードや、未定義動作を引き起こすようなコードを検出して、警告を出すものがほとんどである。ただし、コンパイラではカバーしきれない事項もあるため、独立した静的コード解析専用のツールを補助的に併用することも多い。統合開発環境に標準搭載されているものもあれば、プラグインやアドオンとして開発者が追加できるようになっているものもある。コードエディター上で問題のある個所をハイライト表示するなど、ソースコードをコンパイルすることなくリアルタイムに指摘してくれるものもある。
C言語とC++
- anyWarp CodeDirector for C/C++ (商用, 日立ソリューションズ)
- BLAST (Apache License) → CPA checker
- Parasoft C++test (商用, Parasoft)
- C99parser (GPL)
- CCured – 一部動的解析 (BSDライセンス)
- CodeSonar (商用)
- Coverity (商用)
- cppcheck (GPL)
- Cqual (GPL)
- CScout – ソースコード解析とリファクタリング・ブラウザ。プリプロセッサの構文も扱う。
- Checkmarx CxSuite – コンパイル不要。ソースコードのみで解析可能。 (商用)
- Flawfinder (GPL)
- Goanna (商用)
- Fortify SCA (商用)
- introspector (GPL) – C言語用だが、他の言語にも対応中。
- Klocwork Insight (商用)
- LDRA MISRA主要メンバ(商用)
- MOPS (BSD風ライセンス)
- OpenC++
- QAC,QAC++ (商用)
- 富士通ソフトウェア PGRelief C/C++ (商用)
- PMD’s Copy/Paste Detector (BSD風ライセンス)
- PolySpace (商用)
- PREfast – Windows用のデバイスドライバを開発するのに使用するWDKの一部
- Review-C (商用)
- Smatch – C言語ソースチェッカー。主にLinuxカーネル用。
- Sparse (GPL)
- Stacktool
- Splint (GPL)
- Visual Studio
- Clang Static Analyzer (BSD風ライセンス)
- Clang-Tidy
- AdLint (GPL)
C#
- Klocwork Insight (商用)
- Visual Studio
- Coverity (商用)
- Checkmarx CxSuite (商用)
- DevMetrics and DevAdvantage
- Julia (商用)
- Parasoft dotTEST (商用)
- Fortify SCA (商用)
CoffeeScript
- Sider (商用)
FORTRAN
- FTNCHEK
HTML
- Fortify SCA (商用)
- W3C Markup Validation Service
- SonarQube
Go
- Sider (商用)
- SonarQube
Java
- AntiC
- anyWarp CodeDirector (商用)
- Checkstyle
- Cobertura – 単体テスト網羅率を自動計算
- Coverity (商用)
- Checkmarx CxSuite (商用)
- ESC/Java2
- FindBugs
- Fortify SCA (商用)
- Hammurapi
- Julia (商用)
- Klocwork Insight (商用)
- Oracle JDeveloper
- PMD
- RIPS (商用)
- SonarQube
- Spoon
- WALA
- 富士通ソフトウェア PGRelief J (商用)
- Parasoft Jtest (商用)
- IntelliJ IDEA
AndroidのJava言語
- Coverity (商用)
- Checkmarx CxSuite (商用)
- Fortify SCA (商用)
- Julia (商用)
- Android Studio
Perl
- Checkmarx CxSuite (商用)
- fluff
- Perl::Critic
PHP
- php は -l をつけて起動すれば Lint 風の基本的なチェックを行う。例えば: for i in `find . -name \*.php`; do php -l $i | grep -v “No syntax errors”; done
- Sider (商用)
- Checkmarx CxSuite (商用)
- PMD’s Copy/Paste Detector
- RIPS (商用)
- Fortify SCA (商用)
- PhpMetrics
- SonarQube
Python
- Sider (商用)
- Fortify SCA (商用)
- PyChecker
- Pyflakes
- PyLint
- SonarQube
JSP
- Checkmarx CxSuite (商用)
- Fortify SCA (商用)
- RIPS (商用)
VB.NET
- Checkmarx CxSuite (商用)
- Fortify SCA (商用)
- Parasoft dotTEST (商用)
- Visual Studio
- SonarQube(商用)
ASP.NET
- Checkmarx CxSuite (商用)
- Fortify SCA (商用)
Cold Fusion
- Fortify SCA (商用)
SAP の ABAP
- Fortify SCA (商用)
SQL
- Fortify SCA (商用)
JavaScript
- Sider(商用)
- Checkmarx CxSuite (商用)
- Fortify SCA (商用)
- Parasoft WebTest (商用)
- SonarQube
- ESLint
ASP
- Checkmarx CxSuite (商用)
- Fortify SCA (商用)
COBOL
- Fortify SCA (商用)
WSDL
- WSDL validator (Eclipse)
- Parasoft SOAtest (商用)
Ruby
- Sider (商用)
- Checkmarx CxSuite (商用)
- SonarQube
Objective-C
- Checkmarx CxSuite (商用)
- SonarQube(商用)
脚注
注釈
出典
参考文献
- Syllabus and readings for Alex Aiken’s Stanford CS295 course.
- Nathaniel Ayewah, David Hovemeyer, J. David Morgenthaler, John Penix, William Pugh, “Using Static Analysis to Find Bugs,” IEEE Software, vol. 25, no. 5, pp. 22–29, Sep./Oct. 2008, doi:10.1109/MS.2008.130
- Brian Chess, Jacob West (Fortify Software) (2007). Secure Programming with Static Analysis. Addison-Wesley. ISBN 978-0-321-42477-8
- Flemming Nielson, Hanne R. Nielson, Chris Hankin (2004) [1999]. Principles of Program Analysis. Springer. ISBN 978-3-540-65410-0
- “Abstract interpretation and static analysis,” International Winter School on Semantics and Applications 2003, by David A. Schmidt
関連項目
- 動的プログラム解析
- Static Application Security Testing(SAST)
- シェープ解析
- プログラム意味論
- 形式的検証
- ソフトウェアテスト
- ドキュメンテーションジェネレータ
外部リンク
- The SAMATE Project
- ASTRÉE project
- Type Inference and Static Analysis for Object-Oriented Software by Jens Palsberg
- Securing Web Application Code by Static Analysis and Runtime Protection
- Integrate static analysis into a software development process
- Code Quality Improvement – Coding standards conformance checking (DDJ)
- .NET Static Analysis (InfoQ)
静解析CAE屋さんのための動解析FEM(有限要素法)入門 2010年11月
実践 気体軸受の設計と解析 有限要素法による動圧・静圧気体軸受解析 CDROM付 コロナ社
第二回01 静力学と動力学/解析解と数値解
【Ansys Mechanical】ペットボトル容器の強度評価とラベルのゆがみ評価【パートナー様解析事例】|技術ブログ|C&S
fem 非線形解析 非線形静解析 MKALL
建築構造計算入門032要約編 地震荷重 YouTube
CATIAV5CAEAnalysis【静解析】アナリシス・シミュレーション YouTube
動的解析(2) 時刻歴応答解析(動的陰解法と動的陽解法)~実践非線形有限要素法シミュレーション8章より YouTube
イナータンス イナータンス コンプライアンス VISHUJI
動摩擦トルクと静摩擦トルクの違い _ 静止摩擦係数と動摩擦係数の関係 YNRPO
構造解析 と は 構造解析 計算方法 HEJDT
静解析動解析 動的解析と静的解析の違い耐震 落下解析 INHEPO
線形解析と非線形解析の違い|コラム|株式会社ファソテック
構造解析とは?目的・種類・製品・活用事例などを詳しく紹介
連成解析とは?材料力学からさらに踏み込む有限要素法(FEM)の教室【応用編】
静磁場解析とは マクスウェル方程式とローレンツ力との関係 SimScale
解析力学 共立出版
飛行機の安定性を完全解説|三軸と静的・動的安定性の基礎 空の勉強帳
地中構造物の耐震解析について 富士通Japan
収束させるのが難しい非線形静解析は、陽解法動解析ソルバー RADIOSS で準静解析を行いましょう Altair Community
静的・動的とはなにか 静的 動的 静的実験・動的実験 静的実験 動的実験 静的な力・動的な力と変形 力と変形の関係 建物の崩壊 静的解析・動的解析と構造設計 静的・動的とはなにか 静的 静的の「静」は、静止の「静」でもあり、動きがない静かな状態を表しています。つまり 「静的」とは.. 動解析の実用例について 静解析と比較して動解析は少々難解です。 静解析とは対照的に、動解析は動的な荷重や回転を伴う 振動問題 を扱い、慣性力や遠心力を想定した解析なので、機械設計においても重要な検討手段になります。 振動解析の一つとして代表する 固有値解析 では、主に 部品.