JPH0667870A - ソフトウエア分析装置 - Google Patents

ソフトウエア分析装置

Info

Publication number
JPH0667870A
JPH0667870A JP4222352A JP22235292A JPH0667870A JP H0667870 A JPH0667870 A JP H0667870A JP 4222352 A JP4222352 A JP 4222352A JP 22235292 A JP22235292 A JP 22235292A JP H0667870 A JPH0667870 A JP H0667870A
Authority
JP
Japan
Prior art keywords
program
structure information
program structure
function
unit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP4222352A
Other languages
English (en)
Inventor
Yasutaka Tominaga
保隆 富永
Hironori Nagatomo
宏憲 長友
Toshiaki Tani
敏明 谷
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fuji Electric Co Ltd
Original Assignee
Fuji Electric Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fuji Electric Co Ltd filed Critical Fuji Electric Co Ltd
Priority to JP4222352A priority Critical patent/JPH0667870A/ja
Publication of JPH0667870A publication Critical patent/JPH0667870A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

(57)【要約】 【目的】 所望の情報を短時間で得ることができ、汎用
性に富むソフトウエア分析装置を提供する。 【構成】 ソースファイル読込手段1によりソースプロ
グラムSPからプログラムの構造情報を取り出し、これ
をプログラム構造情報格納手段2を介してデータベース
3に格納しておき、プログラム構造情報検索手段4によ
り必要なプログラム構造情報を抽出し、これを図形式作
成手段5により図形式に加工し表示装置6にて表示可能
とすることにより、必要なプログラム構造情報を抽出す
る都度ソースファイルを読まなくても済むようにし、作
成時間を短縮し汎用性を高める。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】この発明は、中,大規模ソフトウ
エアの開発において、そのプログラム構造を解析するこ
とにより、品質の高いプログラムを作成するために役立
てるソフトウエア分析装置に関する。
【0002】
【従来の技術】従来、この種のソフトウエア分析装置
(ソフトウエアツールとも言う)としては、プログラム
の呼出関係図作成ツール,プログラムとデータ間のリー
ド/ライト相関表作成ツールなど、個別または専用のツ
ールが知られている。
【0003】
【発明が解決しようとする課題】上記ツールはそれぞれ
独立しており、プログラムの呼出関係図を必要とする場
合には、プログラムの呼出関係図作成ツールにソースフ
ァイルを入力してプログラムの呼出関係図を作成する一
方、プログラムとデータとの間のリード/ライト相関表
が必要ならば、プログラムとデータとの間のリード/ラ
イト相関表作成ツールにソースファイルを入力してリー
ド/ライト相関表を作成する、というようにそれぞれの
ツールにソースファイルを入力して必要な表や図を作成
するようにしている。そのため、ソースファイルを各ツ
ールに入力して図/表を作成するので、手間が掛かって
いた。
【0004】また、それぞれのツールは入力したソース
ファイルの全てに対して図や表を作成するので、大規模
なソフトウエアでは大量の図や表を出力していた。つま
り、ソフトウエアの分析では現在注目している部分につ
いての図/表だけが欲しいのにもかかわらず、従来のツ
ールで出力する図や表では必要な部分を探すのに時間が
掛かるという問題がある。さらに、プログラムの品質を
調べる方法として、プログラムの複雑度を求めることが
行なわれている。そこで、従来も各プログラム毎の複雑
度を測定するツールは提供されている。しかしながら、
複数のプログラムを組み合わせて大規模なシステムを作
成する場合では、そのシステム内の各プログラムの複雑
度がどのようになっているか、その分布を知ることはシ
ステムの品質を決める上からも重要である。しかるに、
このようなツールがないため、これを人間が行なわねば
ならず、この場合も手間や時間が掛かかるという問題が
ある。したがって、この発明の課題は作成に余り時間を
要せず、しかも汎用性に富むソフトウエア分析装置を提
供することにある。
【0005】
【課題を解決するための手段】このような課題を解決す
るため、この発明では、プログラムを記述したソースフ
ァイルを読み込み、このソースファイルからプログラム
の構造情報を取り出すソースファイル読込手段と、この
ソースファイル読込手段を介して抽出されたプログラム
構造情報をデータベースに格納するプログラム構造情報
格納手段と、外部から指定されるプログラム構造情報を
データベースから取り出すプログラム構造情報検索手段
と、このプログラム構造情報検索手段により取り出され
たプログラム構造情報を図表形式に加工する加工手段と
を備え、プログラム構造を図表形式で表示可能にしたこ
とを特徴としている。なお、この発明では、プログラム
の複雑度を2つの異なる手法によりそれぞれ求めてその
一方を第1軸に、他方を第2軸にしてマトリックス状に
表示することができる。
【0006】
【作用】ソースファイルからプログラムの構造情報を取
り出してデータベースに格納しておき、格納したプログ
ラム構造情報から必要な図や表を作成,表示可能とする
ことにより、各ツール毎にソースファイルを入力する手
間を省き、プログラム解析のための時間を短縮する。
【0007】
【実施例】図1はこの発明の実施例を示すブロック図
で、1はソースファイル読込手段、2はプログラム構造
情報格納手段、3はデータベース、4はプログラム構造
情報検索手段、5は図形式作成手段、6は表示装置、S
Pはソースプログラムをそれぞれ示している。すなわ
ち、ソースファイル読み込み手段1はソースプログラム
SPから関数のステップ数,複雑度,関数の呼び出し関
係,関数とデータの読み書き関係等の情報を取り出し、
プログラム構造情報格納手段2はこれらをデータベース
3に格納する。プログラム構造情報検索手段4はデータ
ベース3から必要な情報を取り出し、その情報を図形式
作成手段5を介して表形式または図形式で表示装置6上
に表示する。
【0008】以下、各手段について個別に説明する。 1)ソースファイル読込手段 ソースファイル読込手段1は、例えば図2に示す如きC
言語で書かれたソースプログラムSPを解析し、データ
ベース3に格納するためのプログラム構造情報を作成す
る。プログラム構造情報はここではユニットテーブルフ
ァイルと親子関係テーブルファイルの2つで構成される
が、そのデータ構造はデータベースの構造と同じであ
る。データ構造を図3に示す。以下、図3を参照してユ
ニットテーブルファイルの構造につき具体的に説明す
る。
【0009】(1)ユニット番号 これは、各ユニット名を識別するための番号で、この実
施例で用いたデータベースで管理するために用いる。 (2)ユニット名 関数(プログラムの単位を示し、サブルーチンまたはモ
ジュールに相当する)名,変数(データ)名を示す。 (3)属性 ユニット名が関数か変数かを示すものであり、属性値が
「F」のときは関数、「D」のときはデータを示すもの
とする。 (4)ファイル名 ユニット名が格納されているファイルの名称を示す。 (5)概要 ユニットがどんな機能を持っているかを記述したもので
あり、Cソースプログラムのコメントに記述してある内
容を取り出している。
【0010】(6)ステップ数 ユニット名が関数の場合、その関数のステップ数(行
数)を示す。また、ユニット名が変数の場合(属性値が
「D」のとき)は−1を示す。 (7)H複雑度 ユニット名が関数の場合、その関数のHalstead
の複雑度を示す。ユニット名が変数の場合(属性値が
「D」のとき)は−1を示す。 (8)M複雑度 ユニット名が関数の場合、その関数のMaCabeの複
雑度を示す。ユニット名が変数の場合(属性値が「D」
のとき)は−1を示す。 なお、Halsteadの複雑度およびMaCabeの
複雑度は、それぞれプログラムの複雑度を測る方法とし
て一般に良く知られているものなので、その詳細は省略
する。
【0011】次に、親子関係テーブルファイルの構造に
ついて説明する。 (1)親ユニット番号 親になるユニットのユニット番号を示す。このユニット
番号はユニットテーブルファイルに定義されているユニ
ット番号であり、その属性は関数(「F」)である。 (2)子ユニット番号 子になるユニットのユニット番号を示す。 (3)R/W属性 子ユニットの属性を示す。子ユニットが変数の場合、親
ユニットの関数が子ユニットをどのように使っているか
を示す。その関係を表1に示す。
【0012】
【0013】図4はソースファイル読み込み手段の動作
を説明するためのフローチャートである。まず、ステッ
プ401では読み込んだCソースプログラムのファイル
名を記憶する。なお、ここで用いるファイル名は「MK
TABLE」とする。次に、ステップ402では読み込
んだCソースプログラムから、プログラム構造情報の1
つであるユニットテーブルファイルを作成し、ステップ
403ではもう1つのプログラム構造情報である親子関
係テーブルファイルを作成する。
【0014】図5は図4のステップ402の動作、すな
わちユニットテーブルファイル作成動作の詳細を示すフ
ローチャートである。まず、ステップ411ではCソー
スファイルをオープンし、ステップ412でCソースプ
ログラムからシンボルを1つ読み出す。なお、シンボル
とは空白文字で区切られた文字列を云う。ステップ41
3でCソースプログラムの終わりまで読み出してしまっ
たかどうかを判断し、読み出してしまったならばステッ
プ422へ行き、Cソースプログラムをクローズして終
了する。ステップ414ではシンボルの種類を調べ、概
要の記述ならばステップ415、ユニット名の記述なら
ばステップ416へと進み、その他ならばステップ41
2へ戻って次のシンボルを読み出す。
【0015】ここに、シンボルの種類が「概要の記述」
とは、シンボルが「変数概要」または「関数概要」の場
合である。また、シンボルの種類が「ユニット名」と
は、シンボルが関数か変数の場合である。シンボルが関
数宣言や変数宣言であるかどうかの判定は、コンパイラ
で一般に行なっている方法なので、その説明はここでは
省略する。また、この実施例では、関数内のローカル変
数宣言は無視するようにした。これは、関数間の関係を
調べるには、特定の関数内のみ使用されているローカル
変数に着目するよりは、グローバルなデータのみを取り
出した方が理解し易いからである。なお、全データを対
象にしたい場合は、関数内のローカル変数宣言も取り出
すようにすれば良い。ステップ415では概要を取り出
す。概要はシンボル「変数概要:」または「関数概
要:」の次からシンボル「*/」が現れるまでに書かれ
ている文字列である。図2の例では第8,10,14お
よび34行目などに記述されており、第8行目の例では
「入力データを保持する」が概要ということになる。
【0016】ステップ416ではユニット名を取り出
し、ステップ417ではユニット名が関数ならばステッ
プ418,419,420へと進み、関数のステップ
数,Halsteadの複雑度,MaCabeの複雑度
を求める。その求め方は良く知られているので、説明は
省略する。ステップ421ではステップ415からステ
ップ420で取り出した情報をまとめ、ユニットテーブ
ルファイルを作成する。図6(イ)に、以上のようにし
て作成されるユニットテーブルファイルの1例を示す。
【0017】図7は図4のステップ403の動作、すな
わち親子関係テーブルファイル作成動作の詳細を示すフ
ローチャートである。まず、ステップ431でCソース
ファイルをオープンし、ステップ432でCソースプロ
グラムからシンボルを1つ読み出す。次に、ステップ4
33ではCソースプログラムの終わりまで読み出したか
どうかを判断し、読み出してしまったならばステップ4
43へ行き、そうでなかったらステップ434へ行く。
ステップ434は、シンボルが関数宣言である部分まで
シンボルを読み飛ばすことを示している。関数宣言に出
会ったら、ステップ435でそのユニット(関数)を親
関数として記憶する。ステップ436で次のシンボルを
取り出し、ステップ437でそのシンボルが関数の終了
を示すならばステップ432に戻り、そうでなければス
テップ438へ進む。
【0018】ステップ438ではシンボルがユニットか
どうかを調べ、ユニットならばステップ439へ進み、
そうでなければステップ436に戻る。ステップ439
では取り出したユニットを子ユニットとして記憶する。
ステップ440ではユニットが関数かどうかを調べ、関
数ならばステップ441でR/W属性が関数であること
を記憶するし、そうでなかったらステップ442でR/
W属性が読み込み,書込み,読み書き,読み書き不明の
いずれかであるかを調べてそれを記憶し、ステップ43
6に戻る。ここで、変数のR/W属性の決め方はコンパ
イラ等で一般に行なわれている方法なので、その説明は
省略する。図8にこの実施例のステップ443に来る直
前の親子関係テーブルファイルを示す。つまり、図8は
ユニットテーブルファイルにないユニットを記述してい
るテーブルを削除し、重複したテーブルをまとめる過程
を示している。ステップ443では重複している親子関
係テーブルファイルを1つにまとめる。このとき、R/
W属性が異なるものをまとめるときは、予め決められて
いる規則に従って変更する。ここでの規則を示すと表2
のようになる。
【0019】
【0020】この実施例では、ステップ443直後の親
子関係テーブルファイルを図6(ロ)または図8に示
す。ステップ444ではすでに作成したユニットテーブ
ルファイルを参照し、親ユニット名,子ユニット名をユ
ニット番号に変換する。このとき、ユニットテーブルフ
ァイルにないユニット名は、親子関係テーブルファイル
から削除する。ただし、C言語の標準ライブラリは予め
標準ユニットテーブルファイルとして持っている。ステ
ップ445ではCソースファイルをクローズして終了す
る。
【0021】2)プログラム構造情報格納手段 このプログラム構造情報格納手段2は、ソースファイル
読込手段1で作成したプログラム構造情報(ユニットテ
ーブルファイルと親子関係テーブルファイル)をデータ
ベース3に格納する。これは、リレーショナルデータベ
ースの操作制御を行なう言語として良く知られているS
QL(Structured Query Langu
age)を用いて行なうことができるので、詳細は省略
する。 3)プログラム構造情報検索手段 このプログラム構造情報検索手段4は、上記SQL言語
を用いてデータベース3から所望の情報を取り出す。な
お、どのような情報を取り出すかの指定は、図示されな
い入力手段等を介して行なわれる。
【0022】4)図形式作成手段 SQL用いた検索は複雑な検索が可能である反面、デー
タベースの構造を理解していなければならないため、ソ
フトウエア分析ツールとしては必ずしも充分ではない。
そこで、ここではデータベース3に格納してあるプログ
ラム構造情報を、その目的に合わせて検索するコマンド
を準備している。これらのコマンドにより、プログラム
構造情報検索手段4はデータベース3からプログラム構
造情報を取り出し、表形式または図形式に変換して表示
する。
【0023】図9は表形式の表示例を説明するための説
明図である。同図(イ)は関数名を指定し、その関数が
呼び出している関数(子関数)の一覧を表示する例を示
す。なお、関数「main」が呼び出している関数(子
関数)の一覧を表示する場合のコマンドは「ko ma
in」である。同図(ロ)は関数名を指定し、その関数
でが呼び出している関数(親関数)の一覧を表示する例
を示す。なお、関数「dsptable」が呼び出して
いる関数(親関数)の一覧を表示する場合のコマンドは
「oya dsptable」である。
【0024】同図(ハ)は関数名を指定し、その関数で
使用しているデータの一覧を表示する例を示す。なお、
関数「main」で使用しているデータの一覧を表示す
る場合のコマンドは「data main」である。同
図(ホ)はデータを指定し、そのデータを使用している
関数一覧を表示する例を示す。なお、データ「scor
es」を使用している関数の一覧を表示する場合のコマ
ンドは「func scores」である。
【0025】図10は図形式の表示例を説明するための
説明図である。同図(イ)はプログラム構造図を表示す
る例を示す。関数「main」が呼び出しているプログ
ラム構造を表示する場合の指定方法は「struct
main」である。同図(ロ)はプログラムの複雑度を
表示する例を示す。関数「main」が呼び出している
関数全ての複雑度分布を表示する場合の指定方法は「c
plx main」である。同図(ハ)はプログラムと
データの読み書き関係を表示する例である。関数「ma
in」が呼び出している全ての関数とデータの読み書き
関係を表示する場合の指定方法は「func mai
n」である。
【0026】ここで、プログラムの複雑度の分布を表示
する場合について説明する。プログラムの複雑度分布の
表示は図10(ロ)のように、例えば縦方向にMaCa
beの複雑度(M複雑度)の値、横方向にHalste
adの複雑度(H複雑度)の値をとり、その交点位置に
それらの複雑度を持つ関数の数をプロットしたものであ
る。図11はプログラムの複雑度の分布を表示する場合
の動作を説明するためのフローチャート、図12はプロ
グラム構造情報の例とプログラムの複雑度分布の表示例
を説明するための説明図である。
【0027】まず、ステップ901ではプログラム構造
情報検索手段4により、指定した関数が呼び出している
関数すべての関数名,H複雑度およびM複雑度を取り出
す。図12(イ)にデータベースから取り出したプログ
ラム構造情報の例を示す。ステップ902では、取り出
したプログラム構造情報のH複雑度およびM複雑度の各
最大値を求める。ステップ903ではM複雑度の最大値
を行の添字、H複雑度の最大値を列の添字とした2次元
配列を作成し、その要素すべてを値0に初期化する。な
お、ここではH複雑度の最大値の方が大きいので、50
0ずつまとめて1つの列として示すようにしている。つ
まり、H複雑度の0〜499までが1列目、500〜9
99までが2列目で、以下同様ということになる。ステ
ップ904,905では、データベースから取り出した
プログラム構造情報に対して、関数のM複雑度を行の添
字、H複雑度を列の添字とした2次元配列の要素の値に
1を加える。図12(ロ)にステップ904,905を
実行したときの2次元配列の例を示す。ステップ906
では、以上のように作成した2次元配列を、例えば図1
0(ロ)のように表示する。
【0028】
【発明の効果】この発明によれば、ソースファイルから
プログラムの構造情報を取り出してデータベースに格納
し、格納したプログラム構造情報から必要な図や表を作
成,表示するようにしたので、各ツール毎にソースファ
イルを入力する手間を省くことができ、プログラムの解
析を短時間で行なうことが可能となる利点が得られる。
また、現在注目しているプログラムの部分をソフトウエ
ア分析装置に指示し、その部分の図や表を作成すること
ができるので、従来の如く大量の図や表の中から必要な
ものを探す手間と時間を節約することができる。さらに
は、指定したプログラムの複雑度の分布を示すマトリッ
クスを自動的に作成できるので、従来人間が手作業で行
なっていた作業を省略することができ、作成時間を短縮
することが可能となる。
【図面の簡単な説明】
【図1】この発明の実施例を示すブロック図である。
【図2】Cソースプログラムの例を説明するための説明
図である。
【図3】プログラム構造情報のデータ構造を示す構成図
である。
【図4】ソースファイル読込手段の動作を概略的に説明
するためのフローチャートである。
【図5】ユニットテーブルファイルの作成方法を詳細に
説明するためのフローチャートである。
【図6】ユニットテーブルファイルと親子関係テーブル
ファイルの例を説明するための説明図である。
【図7】親子関係テーブルファイルの作成方法を詳細に
説明するためのフローチャートである。
【図8】親子関係テーブルファイルの作成過程を説明す
るための説明図である。
【図9】表形式の表示例を説明するための説明図であ
る。
【図10】図形式の表示例を説明するための説明図であ
る。
【図11】プログラムの複雑度の分布を表示する場合の
動作を説明するためのフローチャートである。
【図12】プログラム構造情報の例とプログラムの複雑
度分布の表示例を説明するための説明図である。
【符号の説明】
1…ソースファイル読込手段、2…プログラム構造情報
格納手段、3…データベース、4…プログラム構造情報
検索手段、5…図形作成手段、6…表示装置。

Claims (2)

    【特許請求の範囲】
  1. 【請求項1】 プログラムを記述したソースファイルを
    読み込み、このソースファイルからプログラムの構造情
    報を取り出すソースファイル読込手段と、このソースフ
    ァイル読込手段を介して抽出されたプログラム構造情報
    をデータベースに格納するプログラム構造情報格納手段
    と、外部から指定されるプログラム構造情報をデータベ
    ースから取り出すプログラム構造情報検索手段と、この
    プログラム構造情報検索手段により取り出されたプログ
    ラム構造情報を図表形式に加工する加工手段とを備え、
    プログラム構造を図表形式で表示可能にしてなることを
    特徴とするソフトウエア分析装置。
  2. 【請求項2】 プログラムの複雑度を2つの異なる手法
    によりそれぞれ求めてその一方を第1軸に、他方を第2
    軸にしてマトリックス状に表示可能にしてなることを特
    徴とする請求項1に記載のソフトウエア分析装置。
JP4222352A 1992-08-21 1992-08-21 ソフトウエア分析装置 Pending JPH0667870A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP4222352A JPH0667870A (ja) 1992-08-21 1992-08-21 ソフトウエア分析装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP4222352A JPH0667870A (ja) 1992-08-21 1992-08-21 ソフトウエア分析装置

Publications (1)

Publication Number Publication Date
JPH0667870A true JPH0667870A (ja) 1994-03-11

Family

ID=16780999

Family Applications (1)

Application Number Title Priority Date Filing Date
JP4222352A Pending JPH0667870A (ja) 1992-08-21 1992-08-21 ソフトウエア分析装置

Country Status (1)

Country Link
JP (1) JPH0667870A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0926873A (ja) * 1995-05-31 1997-01-28 Internatl Business Mach Corp <Ibm> オブジェクト指向システムのクラス関係を識別する方法およびシステム
JP2018073054A (ja) * 2016-10-27 2018-05-10 株式会社Dtsインサイト オブジェクト分析装置、オブジェクト分析方法、及びプログラム

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0926873A (ja) * 1995-05-31 1997-01-28 Internatl Business Mach Corp <Ibm> オブジェクト指向システムのクラス関係を識別する方法およびシステム
JP2018073054A (ja) * 2016-10-27 2018-05-10 株式会社Dtsインサイト オブジェクト分析装置、オブジェクト分析方法、及びプログラム

Similar Documents

Publication Publication Date Title
US6594669B2 (en) Method for querying a database in which a query statement is issued to a database management system for which data types can be defined
US6718336B1 (en) Data import system for data analysis system
JP3030786B2 (ja) ユーザー拡張の可能なデータベースシステム
JP3362125B2 (ja) 情報処理方法
JPH0475170A (ja) データベース操作方法
JP2003162545A (ja) ファイル検索装置、インデックスファイル作成装置及びファイル検索プログラム
JPH0683598A (ja) ジョブフロー仕様書自動作成方法
JP3828379B2 (ja) テスト仕様生成支援装置、方法、プログラム及び記録媒体
US6405189B1 (en) Method and apparatus for amplifying design information into software products
US5649180A (en) Method for generating hierarchical specification information from software
KR100284580B1 (ko) 웹 문서 자동 생성장치 및 그 방법
JPH11265368A (ja) 作業手順管理システム
JPH0667870A (ja) ソフトウエア分析装置
US5551036A (en) Method and system for generating operation specification object information
JP2008077285A (ja) Sql管理システムとsql管理方法およびプログラム
JP2002366401A (ja) 統合的データマート構築及び運用支援システム
JPH11161656A (ja) データベース検索・抽出システムおよびデータベース検索・抽出用制御プログラムを記録した記録媒体
US5553278A (en) Method and system for manipulation of database and issuing report thereof
JP2798147B2 (ja) データベース入出力方法および入出力装置
JP2000181691A (ja) プログラム構造解析方式
JPS6254337A (ja) プログラムの階層指定表示方式
JP3419483B2 (ja) 自然言語処理装置及びその方法
JPH11161666A (ja) ドキュメントデータ検索方法および装置、並びにドキュメント編集装置
EP0864989A2 (en) Method and apparatus for searching for files and for utilizing the found files
US20030236849A1 (en) Data linkage method and system