LabVIEWコード複雑測定する

概要

このページ「LabVIEW使用したソフトウェアエンジニアリング」および「NI LabVIEW使用した大型アプリケーション開発」一部です。

他のページ一覧表示するは、こちらクリックください。


このドキュメントは、NI LabVIEWグラフィカル開発環境におけるコードの複雑度を測定する基準について説明します。コード複雑度測定を使用することによって、ソフトウェア開発プロジェクトの規模を見積もることができます。トピックには、推奨されるLabVIEWのコード複雑度測定基準、この測定基準をテキストベース言語を使用した従来型のコード複雑度測定基準に変換する方法、NIの推奨事項に関して説明しています。

内容

はじめに

プロジェクト計画における重要なタスクの1つは、プロジェクトが完了するまでの期間、必要な開発者の人数、またプロジェクトに必要なコストの見積もりです。見積もりをより正確に行うことで、スケジュールの遅れ、予算の超過、エンドユーザからの要求事項に対応できないなどの事態を最小限に抑えることができます。しかし、プロジェクトの初期段階では不確定な要素が多くあるため、正確な見積もりを立てることが困難になります。見積もりをより正確におこなうために、コード複雑度測定基準として知られるソフトウェア基準を使用して、プロジェクトのサイズを予測し、完了までに必要な期間を計算することができます。

LabVIEWプロジェクトを期限内に予算を超えずに完成できるよう改善するためのコード複雑度測定基準が必要な場合、ソフトウェア基準にLabVIEW ノードカウントを使用することができます。ノードカウントの詳細およびノードカウントを使用してコードの複雑度を測定する方法については、下記のLabVIEWのコード複雑度測定基準およびLabVIEWプロジェクトの見積もりを向上させるセクションを参照してください。

LabVIEW開発を従来型のコード複雑度測定基準を必要とするプロジェクト見積もりプロセスに統合したい場合、LabVIEWノードとソースのLOC(SLOC : Source Lines of Code)間の比率は概算で1対1であることが分かっています。この関係率の算出方法については、従来型サイズベースのコード複雑度測定基準およびLabVIEWノードをSLOCに変換するを参照してください。

LabVIEWコード複雑測定基準

NI LabVIEWプロフェッショナル開発システム(PDS)を含むVI複雑度測定ツールは、LabVIEWコードの測定を提供します。VI複雑度測定ツールは、 VIまたはVI階層で使用されているノード数をカウントすることができます。ノードとは、ブロックダイアグラム上の関数、VI、ストラクチャ(ループ、シーケンスなど)など、ラベルやグラフィックを除くあらゆるオブジェクトを指します。ノードは、テキストベース言語のステートメント、演算子、関数、およびサブルーチンに似ています。テキストベースのプログラミングノードに適用される従来型のソフトウェア測定基準のように、ノードカウントはソフトウェアの複雑性測定に使用されるサイズベース測定です。

LabVIEW PDSでは、ツール→プロファイル→VI複雑度測定をクリックしてVI複雑度測定ツールを起動します。さらに、VI複雑度測定ツールはグローバルおよびローカルの読み取り/書き込み数やダイアグラムの数などの情報も提供します。図1は、Memory Monitor.viという名前のVIを測定したVI複雑度測定ウィンドウです。この例では、VI複雑度測定がVI全体の階層におけるノードの合計数および個別のVI内のノード数を表示しています。


[+] 画像を拡大
図1.VI複雑度測定ウィンドウには、ノード数など複数の統計値が表示されます。

LabVIEWプロジェクト見積もり向上させる

LabVIEWプロジェクトに必要な期間と要求事項の見積もりに対する確度と信頼性を向上させたいが、複雑な測定基準をテキストベース基準に変換したくない場合、LabVIEWの複雑度測定を使用することで簡単に実行できます。LabVIEWノードはナショナルインスツルメンツで推奨されているソフトウェア測定基準です。

LabVIEWプロジェクトの見積もりをより正確にするには、まずLabVIEW複雑度測定基準を選択することから始めますが、その前に現行のプロジェクトと以前のプロジェクトのリポジトリを構築する必要があります。この履歴を使用して、既存システムの各コンポーネント開発にかかった時間を算出し、その情報を各コンポーネントのノード数に関連付けます。しかし、新規のプロジェクトに必要なノード数を見積もる前に、いくつか項目を実行する必要があります。

  1. 新規プロジェクトをサブプロジェクトに分割する ― これによって過去に終了したタスクとの比較が可能になります。サブプロジェクトに分割すると、各サブプロジェクトに必要な時間の見積もりが容易に行えます。
  2. 従事するプログラマの経験レベルを考慮する ― これはサブプロジェクトを完了するまでの時間の見積もりに必要です。LabVIEWは生産性の高い開発ツールですが、経験レベルは生産性やコードの効率性に影響します。
  3. 一貫したスタイルガイドに従う ― できるだけLabVIEWコードで使用します。それぞれの開発者やグループが異なる開発手段を使用していると、ノードカウントなどにサイズベース複雑度測定を適用する場合に問題が生じます。
  4. コードを再確認して最適な効率を実現できるようにする ― 堅固な設計を目標とします。すべてのコードが同じレベルの品質で作成されているわけではなく、同じタスクを実行する2つのVIでも、片方のVIの方がもう一方よりかなり少ないノードで構成されていることが多くあります。

従来サイズベースコード複雑測定基準

テキストベースのプログラミング言語では、コードのソースライン(SLOC : Source Lines of Code)と呼ばれるコード複雑度測定がよく使用されます。SLOCはコードのサイズ計算に使用し、これによってプロジェクトに必要な期間、コストの見積もり、またソフトウェアの作成完了までの生産性を算出することができます。SLOCがよく使用される理由の1つは、Cでのセミコロン(;)を簡単に計算できることです。SLOCは通常セミコロンで終端される任意のコードのライン(たとえば、コメントや空白でないマニュアル入力されたコードのラインなど)として定義されます。多くのベンダがソースファイルをSLOCに計算するツールを販売しています。プログラミング作業は、通常組織内で標準化されているため、SLOCを使用している組織では、プロジェクトの情報データベースを構築して見積もりの確度改善に役立てています。

LabVIEWノード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つのプロジェクト完成にあたり、ナショナルインスツルメンツでは同等のC SLOCとそれに対応するLabVIEWノード数とを比較したところ、LabVIEWノードとSLOC間の比率は約1対1であることがわかりました。

しかし、LabVIEW複雑度測定からSLOCへの変換は、サイズベースのコード複雑度測定が使用しているプログラミング言語に依存しているため、全く同じになることはない点に注意してください。たとえば、Cなどの高級プログラミング言語のステートメントは、アセンブリ言語などの低級言語よりも複雑な機能を記述することができます。またLabVIEW開発者においても各自の経験レベルおよびコーディングスタイルが異なるため、アプリケーションの開発にも影響します。通常LabVIEWは他の開発環境に比べて生産性が高く、LabVIEWノードとSLOC間の関連を近似させることができます。

代替SLOC変換

プロジェクトの見積もり担当者がLabVIEWノードの概念を理解できない懸念点がある場合、別の方法を使用してLabVIEWのコード複雑度測定を同等のSLOCに変換することができます。この代替方法では、ディスク上のLabVIEWコードのサイズを対応するCオブジェクトファイルのフットプリントと比較します。Cオブジェクトファイルの作成に使用したSLOCの知識があれば、LabVIEWコードをSLOCに変換することができます。LabVIEWでは、図2で示すようにファイル→VIプロパティ→メモリ使用と移動して、VIで使用されているメモリ量を表示することができます。


図2.VIプロパティの「メモリ使用」カテゴリはディスク上のこのコードのサイズ(10.0K)を示しています。


メモ: メモリ使用機能はディスク上のLabVIEWコードのサイズのみでなく、フロントパネルとブロックダイアグラムオブジェクトで使用されているメモリ、およびVIに保管されているデータも表示します。LabVIEW複雑度を対応するSLOCに変換する場合、コードに関連するメモリのみを含みます。

メモ: ナショナルインスツルメンツでは、ソフトウェア開発においてSLOC変換方法を使用しないため、現在LabVIEWコードサイズからSLOCへの変換因子については説明しません。

まとめ

LabVIEWはグラフィカル開発環境ですが、LabVIEWノードカウントなどのコード複雑度測定を使用して過去のプロジェクトに要した時間と努力を評価し、将来の開発における指針として役立てることができます。1つのLabVIEWノードと一行のテキストベースのソースコード間の関係は全く一致するわけではありませんが、対応するLabVIEWおよびCコードにおけるプロジェクトの内部検証によってLabVIEWノードとSLOC間の比率はわかっています。見積もりをより正確に行うためには、複数のプロジェクトにおけるLabVIEW複雑度測定を追跡し、それらのプロジェクトを小さなコンポーネントに分割して、各開発者のプログラミング経験や開発に使用してきたコードのタイプなどを考慮する必要があります。