ユースケース:不具合分析

不具合分析とは、ソースコードを解析してエラーやバグなどの欠陥を検証する手法です。
デバックや単体テストなどでコーディングの誤りや脆弱性をテストツールで検出することが一般的ですが、依存関係やグローバル変数の多用など、構造的な観点から確認ができる欠陥もあります。

ここでは、Understandを用いた不具合分析の方法をご紹介します。

Understand_usecase_defectanalysis

課題

  • 構造が複雑化しており、テストが必要な要素の判断が難しい
  • デバックの際、最適な入力値がわからない
  • 不具合発生箇所の分析から修正箇所の確認をもっと効率的に分析したい

原因

ソースコードから最適なテスト項目と入出力値の判断ができない
例:グローバル変数が多用されていて、必要なテストパターンを網羅するのに時間がかかる。

テスト結果から変更が必要な箇所を把握できない
例:ソースコードが複雑化しており、修正箇所を判断するためにコードを読み解く必要がある。

解決策

Understandは、C/C++、Java、VB.NET、C#、Python、JavaScript、TypeScriptなどで開発されたプログラムを高速解析することができます。

Understandは、ビルド環境がなく、コンパイルできないソースコードであっても、ある程度の解析結果を得ることができます。
また、C/C++においては関数ポインターによる関数の呼び出しやポインター変数のアドレス操作の解析も行うことができます。
以下にUnderstandを使った、不具合分析の手順の一部をご紹介いたします。
可視化機能や連携機能を用いてコードの不具合箇所を確認します。

  1. 変数が取りうる値を構造から確認する
  2. 共有されている変数(割り込み干渉)を確認する
  3. 静的テストツールからの指摘結果を取り込む

1.変数が取りうる値を構造から確認する

ポイント

  • 変数へのアクセス関係を可視化して、値の取りうる範囲を確認する

Understandの機能

UnderstandのVariable Trackerグラフでは、変数がどのように使われていくのかを追跡できます。可能性があるすべての変数の値を追跡することで、バグをトレースするのに役立ちます。

2.共有されている変数(割り込み干渉)を確認する

ポイント

  • 競合して書き込みされるグローバル変数を可視化して、意図しない変数への参照/変更を確認する
  • レポートで競合変数一覧を検出する

Understandの機能

Shared Tasksグラフでは、登録したタスク(例えばmain関数、ルート関数)から、競合して書き込みされるグローバル変数を色付きで可視化できます。
全体の可視化だけではなく、1つのグローバル変数を起点にした部分的な割り込みグラフの表示や、レポートで競合変数一覧の出力も可能です。
また、下記の設定が可能です。

排他制御の設定
割り込み禁止区間(保護領域)からの共有変数へのアクセスと、保護領域外からのアクセスを区別し、意図しない変数への割り込み箇所を視覚的にわかりやすく表示します。
保護領域の設定には、制御関数またはマクロを使用可能です。

割り込み優先度、コアの情報の設定
グラフ上に優先度や、マルチコアシステムに対応したコア情報の表示ができます。

3.静的テストツールからの指摘結果を取り込む

ポイント

  • 静的テストツールの指摘レポート(SARIFレポート)をUnderstandに取り込む
  • レポートの違反結果からUnderstandの要素にジャンプして分析する

Understandの機能

SARIF(Static Analysis Results Interchange Format)は、異なるツール間で静的解析結果を共有するためのフォーマットです。
Understandでは、ツール上にドラッグアンドドロップするだけで、Parasoft C/C++testなど他のツールからの解析結果のインポートができます。
静的解析ツールの違反箇所をUnderstand上で確認することができ、またクリック操作で指摘箇所の要素にジャンプすることができます。これにより修正する際の影響分析を、効率よく行うことができます。

ソースコード解析ツール Understandに
関するお問い合わせ

  • テクマトリックス株式会社
    東京本社

    ソフトウェアエンジニアリング事業部

    03-4405-7853

メールでのお問い合わせ
scitools-info@techmatrix.co.jp

お問い合わせ

製品についてやテクマトリックスについてなど、
こちらよりお気軽にお問い合わせいただけます。