プログラムバグをワンクリックで発見してみよう:静的フロー解析(Visual Studio版)

※この章で扱いますフロー解析はEngine Edition (Server Edition)のライセンスが必要となります

このセクションの内容:

静的フロー解析とは

C/C++testの静的フロー解析は、複数の関数やファイルにまたがる全てのパス解析し、メモリ破壊などを引き起こすプログラムバグを自動で検出します。

[検出できるエラー列]

  • メモリリーク / リソースリーク

  • 未初期化変数の参照

  • NULLポインタの参照

  • バッファオーバーフロー / 配列の範囲外の書き込み

  • ゼロによる除算

  • コマンドインジェクション / SQLインジェクション

解析実行手順

  1. [ソリューション エクスプローラー]上のプロジェクトを選択した状態で、[緑の三角アイコン横の▼]>[テストの実行]>[ユーザー定義]>[Static Analysis]>[1 1_フロー解析(チュートリアル)]を選択します。緑の進捗バーが表示され、左から右に到達すると解析が完了になります。
    ※作成したユーザー定義コンフィギュレーションが表示されない場合、 Visual Studioを再起動すると表示されます。

     

  2. [品質タスク]ビューに解析結果が表示されます。 デフォルトでは違反のパスの一部のみ表示されているため、違反メッセージの黄色い三角アイコンを右クリックし、[完全な違反のパスを表示]を選択すると、下記のように違反のパス全体を確認することができます。

 

解析結果の見方

解析結果は、[品質タスク]ビューに表示され、下図に示す4つのポイントで確認します。

 

静的フロー解析機能 運用ワンポイント アドバイス

フロー解析結果を確認すると、大きく3種類のレビュー結果に分かれます。

  1. バグの可能性がある処理フロー

  2. デグレードの可能性がある処理フロー

  3. 冗長的な分岐がある処理フロー

このレビュー結果に分けるとき、開発現場の方々から「デグレードの可能性がある処理フロー」と「冗長的な分岐がある処理フロー」に対し、 「今はバグじゃないから問題ない」というコメントがでないか確認しましょう。
「今はバグじゃないから問題ない」というコメントは、「今、問題がなければどんなコードでもいい」という文化が開発現場に浸透している可能性が高いことを暗に示しています。
この文化が浸透している開発現場で「デグレードの可能性がある処理フロー」が多く存在する場合、コードの担当者が変更になる度に、バグが多発してしまい、担当者の変更や引継ぎが困難なコードを開発している例が多く存在します。
また、「冗長的な分岐がある処理フロー」を放っておくと言う事は、余計なデバッグ作業を行っている可能性があります。つまり、コードを修正する以上にテスト/デバッグ作業に工数を費やしていることがあります。
結果として、「今、問題がなければどんなコードでもいい」という文化が浸透している開発現場では、拡張性の低いコードを開発しており、限られた工数の中で機能追加や保守作業が困難になることが多々あります。
そのためにも、フロー解析結果を確認したら、バグの修正はもちろんのこと、 「現在のコードを少しでも拡張性の高いコードにするためにはどうしたらよいか?」を開発現場の皆様で考えていく事が大切になります。

 

Copyright © 2023 TechMatrix Corporation. All rights reserved