静的コード解析ってなに?
- ソフトウェアの欠陥につながる書き方を存在しないかどうか解析すること
静的コード解析のメリット
- 開発の早い段階でエラー検出できる
- バグ修正コストを抑制できる
- プロジェクト共通のコーディング規約を推進できる
- コードの可読性、保守性が向上する
- ツールによって自動化しやすい
- 導入が簡単
静的コード解析のデメリット
- パフォーマンスや仕様の欠陥の検出は難しい
- 実際にアプリケーションを動かさないと検出しにくい問題には不向き
- 機械的にチェックをするため、指摘事項が膨大になりやすい
- チェックレベルやルールの設定をしたり、エラーの解析に時間がかかる場合がある
ソフトウェアの品質向上する手段
- 最初から優れたソフトウェア設計
- ユニットテスト
- インテグレーションテスト
- E2Eテスト
パターンベース解析
- ルールセットに照らして問題のある記述があるかどうかを確認
- コード内の該当パターンを検出し、エラーの可能性がある箇所を特定できる
- 開発者が以下に従っていることを保証できる
- コーディング規約
- 単体テストのベストプラクティス
- 組織の開発ポリシー
フロー解析
- パターンベース解析と同じく、ルールセットに照らして問題のある記述があるかどうかを確認
- 複雑なパスを特定してトレースするため、人間によるテストや検査では発見が難しいバグを検出できる
- 検出できるバグは
- 未初期化メモリ
- null ポインターの間接参照
- ゼロによる除算
- メモリリークなど
- コードの実行順序やパスに起因する問題、実行時の例外を検出できる
重複コード解析
- その名の通り重複コードがないかチェックする
- アプリケーションの設計の向上とメンテナンス コストの削減を支援
メトリクス解析
- オブジェクト間の結合や継承の深さなど、コードの保守性や再利用性の指標となるメトリクスを計測
- メトリクスを使って、潜在的な不具合を特定する
- 誤検知することもある
Unity で使える静的コード解析
- .NET Compiler Platform (Roslyn)
- https://docs.microsoft.com/ja-jp/visualstudio/code-quality/roslyn-analyzers-overview?view=vs-2019
- Unity 2020.2以降、Unityエディタ上でRoslynアナライザによる静的解析が実行可能になったとのこと
- UnityEngineAnalyzer
参考文献