#author("2021-03-10T03:49:14+00:00","default:admin","admin") #author("2021-03-10T03:51:26+00:00","default:admin","admin") -[[いま求められるソフトウェア静的解析・動的解析:https://monoist.atmarkit.co.jp/mn/series/3278/]] --[[組み込みソフトウェア開発者に贈る「静的解析・動的解析」の必要性:https://monoist.atmarkit.co.jp/mn/articles/1605/20/news004.html]] --[[いま求められるソフトウェア静的解析・動的解析 第2回:「根拠ある作業」のため「ソフトウェア解析」ができること:https://monoist.atmarkit.co.jp/mn/articles/1606/20/news015.html]] -[[今さら聞けない「動的テスト」「静的テスト」とは?:https://hldc.co.jp/blog/2018/03/29/1211/]] *静的解析 [#o76db734] -[[静的コード解析 - Wikipedia:https://ja.wikipedia.org/wiki/%E9%9D%99%E7%9A%84%E3%82%B3%E3%83%BC%E3%83%89%E8%A7%A3%E6%9E%90]] -ソースコードを対象として、ソフトウェアの構造や動作を解析する技術 **静的解析ツール [#o3005744] -[[List of tools for static code analysis:https://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis]] ***静的解析ツールで解析できること [#cd803ed6] -欠陥の可能性のある部分の検出 --メモリリーク、バッファーオーバーラン、到達不可能な部分、スレッド間でのデッドロックが起きそうな部分 -メトリクスの計測 --コード行数、複雑度、凝集度、結合度等のメトリクスをコードから集計 -コーディング規約の対応チェック --MISRA-C、CERT-C等のコーディング規約に対応していない部分の検出 -セキュリティ上の脆弱性の検出 --SQLインジェクションやクロスサイトスクリプティングの検出 -コードクローンの検出 --コピー&ペーストで作られている部分の検出(元のコードから変数名・関数名を変えていても検出可能) -オープンソースコードの混入の検出 --オープンソースプロジェクトのコードを流用している部分を検出 --オープンソースプロジェクトのライセンスによっては、無断使用やコードを公開しないことは問題になるため、意図しない混入は避けたい ***[[Cppcheck:http://cppcheck.sourceforge.net/]] [#a49026de] -[[Source Code:http://cppcheck.sourceforge.net/devinfo/]] -[[C/C++のソースコードをCppcheckで静的解析してみよう:https://www.clear-code.com/blog/2016/2/3.html]] -パッケージインストール(バージョンが古い) # apt install cppcheck -ソースからビルド $ git clone https://github.com/danmar/cppcheck.git $ cd cppcheck $ make PREFIX=/usr/local SRCDIR=build CFGDIR=/usr/local/share/cppcheck/cfg HAVE_RULES=yes CXXFLAGS="-O2 -DNDEBUG -Wall -Wno-sign-compare -Wno-unused-function" $ sudo make install --ビルド中「make: pcre-config: コマンドが見つかりませんでした」が出る場合 ---以下のパッケージをインストールしてから再実行 # apt install libpcre3-dev --ビルド中「collect2: error: ld returned 1 exit status」が出る場合 -コード解析 --カレントディレクトリのソースを解析 $ cppcheck --enable=all . 2> cppcheck.log --指定フォルダのソースを解析 $ cppcheck --enable=all [解析対象フォルダ] 2> cppcheck.log ***[[Moose:http://moosetechnology.org/]] [#f62f665c] ***[[Splint:https://sourceforge.net/projects/splint/]] [#i8c50f11] *動的解析 [#daf702c0] -[[動的プログラム解析 - Wikipedia:https://ja.wikipedia.org/wiki/%E5%8B%95%E7%9A%84%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E8%A7%A3%E6%9E%90]] -動作するソフトウェアを対象として、動作速度やメモリの使用状況、並列処理の実行状況を解析するための技術 **動的解析ツール [#mc996b94] ***動的解析ツールで解析できること [#c8275a9e] -メモリリークやメモリ破壊の検出 --対象機能を一度だけ動作させるような単純なテスト実行では見つけにくく、かといってテストケースも作りにくい問題の検出 -並列処理に関連した問題の検出 --スレッドのデッドロックのような、実行タイミングによって発生したり、しなかったりするような問題の検出 -実行時のボトルネックの検出 --関数の呼び出し回数や実行時間を計測し、ボトルネックとなっている部分を指摘 -カバレッジの計測 --動的解析ツール内でテストケースを実行していくことで、動作確認された部分/されていない部分を検出