データフロー解析
未知のコードで初めて作業を行う際に、Imagix 4D の [サブシステムアーキテクチャ] ダイアグラムを使用することで、プログラムの構造と、そのコンポーネントの全体像を把握することができます。最初に高いレベルのビューを用いることで、ソフトウェアを構成する基本的なサブシステム、階層、インターフェイス、および依存性を見て取ることが可能です。
プログラムの理解における次のステップは、[構造] ビューを使用して実施します。これらのグラフィカルなビューは、ファイル、クラスまたはコードの特定部分を含む関数などの構造的な特徴を示し、さらにプログラム・ロジック特有の問題の追跡をする場合に、きわめて有用です。Imagix 4D は、ソースコードやコード内のテキストのコメントなどを、グラフ上でワンクリックすることによりブラウジングする精巧なプログラム・システムを提供します。
これにくわえデータフロー解析では、さまざまなレベルでプログラムの制御フローをたどる静的解析や、これらの実行パスにおけるデータの処理方法を追跡することにより、プログラムの動作や潜在的に問題のある箇所を識別をする上での手がかりを明示するのです。あらゆる変数や処理可能な実行パスをすべて調べる、プログラム全体を対象としたこのような処理を、グローバル・データフロー解析と呼びます。呼び出しシーケンスやあらゆる文の間に実行される変数を追跡する以外にも、この解析では参照パラメータ(変数に設定されるポインタ)として渡される変数、ならびに関数ポインタを介した呼び出しも追跡します。
出力された情報から、本解析では変数が設定あるいは読み取られる場所、つまり変数それ自体の明確な代入だけではなく、ポインタがその変数へ設定する際に使用される箇所も含め、可能性のあるすべての場所を特定することが可能です。さらにこの解析では、設定される前に読み取られる変数のように、規則に反するプログラム・パスの有無や、同時アクセスを同期する関数への呼び出し範囲に限定して設定される変数か否かを、判断することも可能です。
データフロー・ディスプレイ
Imagix 4D は、数多くのグラフィカルなビューや、ハイパーリンクされたレポート([フローチェック] レポート)を活用し、グローバル・データフロー解析で取得した情報を表示します。すなわちレポートおよびグラフには、以下のソフトウェアに関する課題の解決策や、潜在的な問題のある箇所が示されます。
設定や読み取りが行われていない変数の 有無 | | [未使用変数] は、論理的に問題のありそうな符号に関する変数の使用をレポートします。このレポートは、上位レベルの変数のみならず、無秩序に使用される構造体のメンバもしくはクラス変数も表示します。 |
代入式そのものにおける変数の代入連鎖を 介した変数の値の計算方法 | | [変数の依存関係] は、各変数の計算に使用される、変数の値のフローをレポートします。データフローは、一度にある特定の変数を対象に、これをグラフで表します。または、フローダイアグラムの値の1つとなる代入文を示すことが可能です。これらの機能により、値の計算における潜在的で論理的な問題の特定と、場合により発生する予期せぬ値の原因究明に役立ちます。 |
設定前に使用された変数の有無 | | [未初期化読み取り変数] は、まだ設定されていない変数を使用する、共通のプログラミング・エラーの発生をレポートします。 |
その後に使用されていない変数に対する、 あらゆる代入の有無 | | [無用の代入] は、今後、使用されることのない代入をレポートします。特に、別の変数が設定されるか、あるいは代入を使用する一部のコードが欠如している符号が該当します。 |
プログラムロジックに起因して到達できない文はありますか? | | [到達不能な文]は、関数定義内の制御フローで到達不可能な行を報告します。これは、ロジックの問題を示している可能性があります。 |
リアルタイムおよび並列プログラミング向けに、Imagix 4D はタスク、クリティカル領域、イベント定義(ユーザ指定)を連動させることで、この情報の質をさらに高めます。これにより、以下のビューやレポートの表示を可能とします。
共有データを使用し相互連動するタスクの 特定。 | | [UMLタスクコラボレーション図] は、システム内のタスクの連携や共有データをグラフ化します。 |
タスク間における共有データフローの把握。 | | [タスク間の変数フロー] は、タスク間の共有データの生成方法や消費方法における、規則違反の可能性をレポートします。これは、[UMLタスクコラボレーション図] の改良版です。 |
タスクが共有データを設定または読み取る 場所の特定。 クリティカル領域を使用する共有の保護。 | | [複数のタスクでセットされる変数] は、タスクが使用する共有データの場所に関する完全なリストと、同時アクセスに対する保護の有無をレポートします。データの共有は、[UMLタスクコラボレーション図] より低いレベルで示され、並列処理における問題を特定します。 |
タスク内における共有データフローの把握。 | | [Out of Step(Z)変数]は、タスク内の関数を用いる典型的なパスにおいて、共有データがどのように処理されるかをレポートします。本レポートは、通常、古い値の読み取りが問題となるような(タスクが周期遅れである可能性のある)新しい入力データに基づいて出力を計算する、反復的なタスクでの論理エラーを見つけ出す際に、特に役に立ちます。 |
クリティカル領域の一貫性。 | | [クリティカルセクションの不一致] および [クリティカルセクションでの呼出し] は、C / C++ で入出力文としてマークされた、クリティカル領域の使用をレポートします。本レポートは入出力が一致しないことで、デッドロックが発生したり、システム全体の処理を低下させたりするリソースの制限があるような問題をチェックします。 |
イベントを介してタスクが相互連動する方法。 | | [タスク間のイベントの遷移] および [タスク内のイベント呼出し] は、タスク間における制御のやりとりや転送を行うイベントを活用するタスクシステムをレポートします。本レポートは、タスクの相互作用における理解や潜在的なデッドロック問題の検出に有用です。 |
|