ここ |
このドキュメントは、NI LabVIEWグラフィカル開発環境におけるコードの複雑度を測定する基準について説明します。コード複雑度測定基準を使用することによって、ソフトウェア開発プロジェクトの規模を見積もることができます。取り上げる内容には、推奨されるLabVIEWコード複雑度測定基準、この測定基準をテキストベースの言語で使用される従来型のコード複雑度測定基準に変換する方法、およびNIがその推奨事項を導き出した方法に関する情報が含まれます。
プロジェクト計画における重要なタスクの1つは、プロジェクトが完了するまでの期間、必要な開発者の人数、またプロジェクトに必要なコストの見積もりです。見積もりをより正確に行うことで、スケジュールの遅れ、予算の超過、エンドユーザからの要求事項に対応できないなどの事態を最小限に抑えることができます。しかし、プロジェクトの初期段階では不確定な要素が多くあるため、正確な見積もりを立てることが困難になります。見積もりをより正確に行うために、コード複雑度測定基準として知られるソフトウェア基準を使用して、プロジェクトのサイズを予測し、完了までに必要な期間を計算することができます。
LabVIEWプロジェクトを期限内に予算を超えずに完成できるよう改善するためのコード複雑度測定基準が必要な場合、ソフトウェア基準にLabVIEWノードカウントを使用することができます。ノードカウントの詳細およびノードカウントを使用してコードの複雑度を測定する方法については、下記の「LabVIEWのコード複雑度測定基準」および「LabVIEWの見積もりを向上させる」セクションを参照してください。
LabVIEW開発を、より従来型のコード複雑度測定基準を必要とするプロジェクト見積もりプロセスに統合しようとしている場合、NIはLabVIEWノードとソースコード行数 (SLOC) の比率がおおよそ1対1であることを確認しています。SLOCとNIによるこの関係率の算出方法の詳細については、下記の「従来型サイズベースのコード複雑度測定基準」および「LabVIEWノードをSLOCに変換する」セクションを参照してください。
LabVIEW Professional Development System (PDS) に含まれるVI複雑度測定ツールは、LabVIEWコードの計測を提供します。VI複雑度測定ツールは、任意のVIまたはVI階層内で使用されているLabVIEWノードの数をカウントできます。ノードとは、ブロックダイアグラム上のほぼすべてのオブジェクトを指し、関数、VI、ループやシーケンスなどのストラクチャを含みます。ただし、ラベルやグラフィックは除きます。ノードは、テキストベース言語のステートメント、演算子、関数、およびサブルーチンに似ています。テキストベースのプログラミング言語に適用される従来型のソフトウェア測定基準のように、ノードカウントはソフトウェアの複雑性測定に使用されるサイズベースの測定基準です。
LabVIEW PDSでは、ツール→詳細→VI複雑度測定をクリックしてVI複雑度測定ツールを起動できます。さらに、VI複雑度測定ツールはグローバルおよびローカルの読み取り/書き込み数やダイアグラムの数などの情報も提供します。図1は、Memory Monitor.viという名前のVIを測定したVI複雑度測定ウィンドウです。この例では、VI複雑度測定がVI全体の階層におけるノードの合計数および個別のVI内のノード数を表示しています。
LabVIEWプロジェクトに必要な期間と要求事項の見積もりに対する確度と信頼性を向上させたいが、複雑度測定基準をテキストベース基準に変換したくない場合、代表的なLabVIEWの複雑度測定基準を使用することで簡単に実行できます。LabVIEWノードはNIで推奨されているソフトウェア測定基準です。
しかし、LabVIEWプロジェクトの見積もり確度を向上させるには、LabVIEWの測定基準を選ぶだけでは不十分です。その前に現行のプロジェクトと以前のプロジェクトのリポジトリを構築する必要があります。この履歴を使用して、既存システムの各コンポーネント開発にかかった時間を算出し、その情報を各コンポーネントのノード数に関連付けます。しかし、新規のプロジェクトに必要なノード数を見積もる前に、いくつか項目を実行する必要があります。
テキストベースのプログラミング言語では、ソースコード行数 (SLOC) と呼ばれるコード複雑度測定基準がよく使用されます。SLOCはコードのサイズ計算に使用し、これによってプロジェクトに必要な期間、コストの見積もり、またソフトウェアの作成完了までの生産性を算出することができます。SLOCがよく使用される理由の1つは、Cでのセミコロン (;) を簡単に計算できることです。SLOCは通常セミコロンで終端される任意のコード行 (たとえば、コメントや空白でないマニュアル入力されたコード行など) として定義されます。多くのベンダがソースファイルをSLOCに計算するツールを販売しています。プログラミング作業は、通常組織内で標準化されているため、SLOCを使用している組織では、プロジェクトの情報データベースを構築して見積もりの確度改善に役立てています。
プロジェクトの見積もりでSLOCに慣れ親しんでいる人にとって、グラフィカルプログラミングの習得は新たな課題となります。ノードカウントなどのLabVIEWのコード複雑度測定基準は、SLOCに変換して多くの企業で行われているプロジェクト見積もり工程に組み込む必要があります。
最近の2つのNIソフトウェア開発プロジェクトでは、LabVIEWとCにおける同等なソフトウェアが開発されました。1つ目のプロジェクトはLabVIEW、LabWindows/CVI、NI ANSI-C開発環境用のNI DAQmx APIデプロイメントです。2つ目のプロジェクトでは、LabVIEWおよびLabWindows/CVIのオペレータインタフェースをテスト管理ソフトウェアであるNI TestStand用に再構築しました。この2つのプロジェクト完成にあたり、NIでは同等のC SLOCとそれに対応するLabVIEWノード数とを比較したところ、LabVIEWノードとSLOC間の比率は約1対1であることがわかりました。
しかし、LabVIEW複雑度測定基準からSLOCへの変換は、サイズベースのコード複雑度測定基準が使用しているプログラミング言語に依存しているため、全く同じになることはない点に注意してください。たとえば、Cなどの高級プログラミング言語のステートメントは、アセンブリ言語などの低級言語よりも複雑な機能を記述することができます。またLabVIEW開発者においても各自の経験レベルおよびコーディングスタイルが異なるため、アプリケーションの開発にも影響します。通常LabVIEWは他の開発環境に比べて生産性が高く、LabVIEWノードとSLOC間の関連を近似させることができます。
プロジェクトの見積もり担当者がLabVIEWノードの概念を理解できない懸念点がある場合、別の方法を使用してLabVIEWのコード複雑度測定基準を同等のSLOCに変換することができます。この代替方法では、ディスク上のLabVIEWコードのサイズを対応するCオブジェクトファイルのフットプリントと比較します。Cオブジェクトファイルの作成に使用したSLOCの知識があれば、LabVIEWコードをSLOCに変換することができます。LabVIEWでは、図2で示すようにファイル→VIプロパティ→メモリ使用と移動して、VIで使用されているメモリ量を表示することができます。
メモ:メモリ使用機能はディスク上のLabVIEWコードのサイズのみでなく、フロントパネルとブロックダイアグラムオブジェクトで使用されているメモリ、およびVIに保管されているデータも表示します。この方法でLabVIEW複雑度を対応するSLOCに変換する場合、コードに関連するメモリのみを含みます。
メモ:NIでは、ソフトウェア開発においてSLOC変換方法を使用しないため、現在LabVIEWコードサイズから対応するSLOCへの変換因子については説明しません。
LabVIEWはグラフィカル開発環境ですが、LabVIEWノードカウントなどのコード複雑度測定基準を使用して過去のプロジェクトに要した時間と努力を評価し、将来の開発における指針として役立てることができます。1つのLabVIEWノードとテキストベースのソースコード行 (SLOC) の関係は完全に一致するわけではありませんが、NIは、LabVIEWとCの同等なコードを含むプロジェクトの内部調査を通じて、1つのLabVIEWノードが1つのSLOCに相当するという比率を確認しています。見積もりをより正確に行うためには、複数のプロジェクトにおけるLabVIEW複雑度測定基準を追跡し、それらのプロジェクトを小さなコンポーネントに分割して、各開発者のプログラミング経験や開発に使用してきたコードのタイプなどを考慮する必要があります。