B-5 ソースコードの複雑化や劣化を防止するには?~アーキテクチャ検証と静的解析の自動化によるアプローチ

デブサミでメモしたことをつらつら書いていきます。

ソフトウェアの劣化とは?

ソフトウェアの複雑度

アーキテクチャ違反と隠れた依存関係の影響

例えば上記の例で、
展示会に出展することになり、現状のアーキテクチャ仕様から変更する必要があった
誤った前提で再設計をしてしまい本来Bを経由するはずが、A→Cで設計してしまった
展示会仕様としては問題が出なかったが、そのまま製品として出荷されてしまった
展示会仕様の対応でアーキテクチャ違反のみだった仕様が、回避策で依存関係まで生み出してしまった

クローン管理システムによる生産性向上とエラーの削減
コピペできるということは実績があるが、コピペした箇所にバグがあると他製品にも影響する場合がある
スタイル違反を注入してしまう可能性があるので、静的解析することにより回避できる

例
squere(5)=25
squere(2+3)=11

静的解析
 ・実行せずに解析できる
 ・実行不可能コードも解析できる

様々な手法
 ・抽象解釈
  ソースのモデル化
 ・テインと解析
  特定の位置で変更されたデータの検出
 ・字句解析
  ソースをトークンに分解
 ・データフロー解析
  実行せずにソース内データの流れをモデリング

メリット
 ・バグの早期発見
  コードベースの品質改善
 ・コンプラ検証
  MISRA等規約に準拠が強制された業界
 ・脆弱性の検出
  メトリックスの測定・ドキュメント化
 ・コードレビューの自動化
 ・開発効率の向上
  コミュニケーションツールとしても活用できる
  本国で開発したプロダクトを他国で利用されるときに使える

課題
 ・処理速度
  実行時間が長い
  ランタイムチェックが特に遅い
 ・膨大な検出数
  1000〜100万件
 ・誤検知
 ・検出不可エラー
 ・ランタイムエラー
  動的テストの併用で対策することが多い
 ・ツールのライセンス・維持費

解決方法
 ・処理速度が遅い
  継続的な実行
  CI/CDの活用
 ・検出数
  差分解析
  ローカル実行
  単一ファイル解析
 ・誤検出
  処理速度・網羅性・誤検出のトレードオフ
  検出ルールの絞り込み
 ・コスト
  全体の20%削減できる可能性がある
  既存ソフトウェア理解コストのうち25%は隠れ依存性が原因
  隠れ依存エラーコストは全体エラーコストの7%


この記事が気に入ったらサポートをしてみませんか?