製品

製品情報1::PRA  Program Relation Analyzer

製品情報 : ProgramRelationAnalyzer (略称PRA)

PRAは、ごく僅かな入力をもとに、自動的に programの構造を解析して、programのTree構造を作成するprogramです。

Topから順次、呼んでいる関数(部品に相当する)やClass(モジュール部品に相当する)を辿り、その正順のTree構造を作成します。

また、記憶領域である変数や定数も、どの関数から参照されているかを、逆順のTree構造として作成します。

これがものづくりの世界の部品表に相当します。作成されたTree構造を参照することにより、programmerが関数/Class/変数/定数を変更

する場合どの関数に影響が及ぶかを確実に把握することができ、後退不具合の発生を防ぐことが出来ます。

また、Tree構造の表示機能は、program構造の「見える化」を実現するものの1つであり、programmerやmanagerが共に見て「知の共有化」を図ることが可能となります。


PRAの効果を再整理すると以下のようになります。

①開発・保守段階でdebugによる変更がどの範囲に影響が及ぶかを確認ができ、後退不具合を避けることが可能。

②開発段階で設計変更の影響範囲の事前確認ができ、適切な設計変更が可能。

③開発・保守段階においてprogramを変更した場合、テストすべきコマンドを知ることが可能。

④部品化を進める場合、その部品の適用範囲を知ることで、適切な機能強化を行うことが可能で、派生部品の発生を抑制できる。

⑤リファクタリングを行う場合のproject全体状況の把握「見える化」が可能。

⑥document作成時に有用である。

(対象のapplicationによっては、カスタマイズの必要もありえます。)


PRAには大きく分けて下記の4つの機能があります(c,c++版)。

(1) NewtreTreeStructure (NTS)       ::main/wndprocなどをTopにしたTreeStructureを作成する機能

(2) NewtreCrossreferenceTable (NCT) ::DLLなどのCrossReferenceTableを作成する機能

(3) NewtreStatusInspector (NSI)     ::同種の2つのPRADS間の差異分析をする機能

(4) DisplayTreeComparer (DTC)       ::同種の2つのTree表示データを比較表示機能

・NTS,NCTへの入力はbscFileであり、NSI,DTCへの入力は、NTS,NCTで作成したPRADSです。

・出力は順逆のTree構造を始めとする種々の情報を出力する機能を持っています。

・PRAは、下記製品情報2の1種上に実装しています。


(1) NTS::main/wndproc/FuncをTopにしたTreeStructureを作成する。class内の多くの関数・変数・定数から使用されているもののみを

 選別してTree構造が作成されます。(NTSCT::main/wndproc/FuncをTopにしたTreeStructureを作成するのはNTSと同じだが、

 使用されているclass内では、全てのclass Functionを対象に解析して、CrossReferenceTableを作成します。)

  下図は、NTSのMain(WndProc)から呼ばれている関数の正順(call)の出力サンプルである。

(2) NCT::Class,DLLなどの全ての関数のCall_Calledの関係を解析したCrossreferenceTableを作成します。

 変数・定数も全ての関数を対象に解析して、逆順のTree構造を作成します。

 下図は、NTCまたはNTSによる全てのClassFunctionの逆順(called)の出力サンプルである。

下図は、NTCによる全てのClassVariableの逆順(called)の出力サンプルである。

(3) NSI::同種の2つのNTS/NCTのDS間の差異分析をします。

 NSIへの入力はNTS/NCTで作成したDSであり、差異を.h/.cppファイル単位に一覧表にして出力する。下段は NSIの出力Sampleで、

 現在のExeと1つ前のExeの差異分析結果を示してします。1つ前のExeが正しい結果を出していたとすれば、差異のあるファイルを

 重点的にデバッグすればよい。

(4) DTC::NTS/NCTの同種の2つのDS間の同種の2つのTree表示データを比較表示をする。(市販のcomparerを使用しています。)

下図は、Class Function一覧とClassVariable一覧のDisplayTreeComparer実行結果の比較表示例です。

製品情報2::N-ASP Toolkit

製品情報 : C++版N-ASP Toolkit

ASPとは、Associative Structure Packageの略称であり、ケンブリッジ大学のProf.C.A.LangおよびProf.J.C.Grayが

CAD/CAMの形状Model表現のためのData構造として、CAD/CAMの黎明期1966年に発表したものである。

Programming Techniques: ASP-a ring implemented associative structure package  http://dl.acm.org/citation.cfm?id=363576

データ構造の一般的な分類によれば、ASPは、ネットワーク型データ構造の一種であり、ツリー型やリレーショナル型とは異なる。

Packageとは、対象とするData構造をコンピュータ内に構築するためのプログラムライブラリのことを示している。

ASPの構成要素

ASPは、任意の数のDataとこれらData間の関係を表現できる汎用のデータ構造(DataStructure::DSと略記する)のことを意味し、3種の構成要素とそれらを関連付けるRingから成っている。

ASPにおいては、上図に示すような、対象とするDataを格納する第1種の構成要素であるElementBlockと、ElementBlock同士を関連付ける

第2種の構成要素であるRingstartBlock、および第3種の構成要素であるAssociativeBlockという構成要素を用いて、ツリー/ネットワーク構造の双方をシンプルに表現することができる。

また、ElementBlockが持つ複数の属性の表現には、Ringstartブロックを複数使用することによって、重層的な表現が可能である。 ASPは、構造をシンプルな図式で表現できるため、データ構造の設計者の意図を明確に表現できる特長を持っている。

データ構造設計の「見える化」である。下記参考製品情報のAspEditor をN-ASP構造CADに発展させていけば、強力な設計toolとなろう。

ここでN-ASPとしたのは、ASPの概念の成立時(1960年代後半)に較べて、格段に進歩した情報技術と新たな知見を入れて実装したため、「New-」の字を付与した。また、N-ASPは、オンメモリーデータ構造であり、実装において階層の深さは、address limitによる制限のみとなるように配慮し、性能の良さ、application実装の容易さを目標とした。

N-ASP Toolkitは、VC++上で、N-ASPのプログラムライブラリ(DLL)を使用したSampleProgramを包含したもので、直ちにC++baseのApplicationが開発可能なものである。

以下 N-ASPの記法による構造設計図の例を示します。このように「見える化」の難しいデータ構造を図化できることが

複数人で開発するプロジェクトで「知の共有化」を可能にする。このことが、ASPの最大の利点といえるかもしれない。

[A]は、組織とスキルと要員を構造化したもので、これに人事情報や、組織の変遷など種々の構造を追加して組織モデルの

充実を図ることができる。

左の図は、トポロジーとDataを1つのDSに保持させるDSの設計例であり、下記1,2種のToolkitで実装されている。

右の図は、トポロジーをMainDSに保持し、Dataを分離してSubBlock構造を持たせた設計例である。3種のToolkitで実装されている。

[B]は、列車と停車駅と通過時間をDS表現するための設計例である。programmerは、この図を見ながら、N-ASPで実装すればよい。

[C]は、PRAの実際の構造設計図の一部である。1種ののToolkit上に実装している。

[A] SkillMapSampleのN-ASP構造設計図 

[B] TrainTimeTableSampleのN-ASP構造設計図 .

[C] PRAの実際の構造設計図(部分) .

実際のN_ASPとしては3種類のToolkitを準備しています。

1種  EL/RS/ASのcreate,delete,change,GarbageCollection,store,loadなど

2種 1種 + create,delete,change に対するundo,redo機能

3種 2種 + トポロジ構造とデータの分離機能


組み込みソフト・ゲームや普通の事務処理系のapplicationは、1種で十分である。上記[C]のPRAは、この1種の上に実装している。

会話的な処理を必要とするapplicationは2種のundo,redo機能を活かすとよい。 専用CADなどの開発に適している。

検索が多い場合や、データ量が多い場合は、3種が適している。専用CADで大きなデータを扱う場合も3種が適している。

参考製品情報::AspEditor

参考製品情報 : AspEditor(参考展示)

N-Aspは構造の図化が容易であるという特長を活かしたN-Aspパッケージ用構造表示ソフトウェアである。

Asp構造をscreenに表示し構造が想定通り出来ているか確認したり、CADのようなinteractiveなアプリケーションを開発できる。

名古屋大学大学院工学研究科機械理工学専攻 松本研究室と共同研究したものである。下図は、screen上にDS構造をoutputした実例である。

上記[A]の組織モデルのASP構造設計例を1種のN-ASPを使って実装し、実際にprogramを実行し、DSを作成して、AspEditorに渡し出力したものである。(N-ASP設計図との実装例との違いは後者はSkillの項でLevelA,B,Cと細分している)