JP6880962B2 - プログラム分析装置、プログラム分析方法および分析プログラム - Google Patents

プログラム分析装置、プログラム分析方法および分析プログラム Download PDF

Info

Publication number
JP6880962B2
JP6880962B2 JP2017080776A JP2017080776A JP6880962B2 JP 6880962 B2 JP6880962 B2 JP 6880962B2 JP 2017080776 A JP2017080776 A JP 2017080776A JP 2017080776 A JP2017080776 A JP 2017080776A JP 6880962 B2 JP6880962 B2 JP 6880962B2
Authority
JP
Japan
Prior art keywords
data
program
service component
program group
candidate
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.)
Active
Application number
JP2017080776A
Other languages
English (en)
Other versions
JP2018181005A (ja
Inventor
学 上村
学 上村
昭彦 松尾
昭彦 松尾
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.)
Fujitsu Ltd
Original Assignee
Fujitsu 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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2017080776A priority Critical patent/JP6880962B2/ja
Priority to US15/938,475 priority patent/US10514908B2/en
Publication of JP2018181005A publication Critical patent/JP2018181005A/ja
Application granted granted Critical
Publication of JP6880962B2 publication Critical patent/JP6880962B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/36Software reuse

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Stored Programmes (AREA)

Description

本発明は、プログラム分析装置、プログラム分析方法および分析プログラムに関する。
従来から、コンピュータシステムの発達により、世の中の様々な場面でコンピュータシステムが活用されている。一度構築したコンピュータシステムでも歳月を経ることで、改良を行う必要性あるいはシステム全体を見直す必要性が生じることがある。このとき、既に作成したプログラムの一部に修正を行うことがあり、既存のシステムの仕様を理解する必要がある。しかし、ソフトウェアは大規模になるとその仕様は複雑なものとなり、仕様の把握や変更は容易ではない。また、膨大なプログラムを対象とした時、プログラム間の関係やデータとの関係数も膨大になるため、全ての関係を基にソフトウェアを分割することは容易ではない。
近年では、大規模システムを対象に、ソフトウェアなどの要素を理解可能な部分集合(サービス部品)に分割する技術として、プログラムの呼び出し関係から、自動的に部分集合を抽出する技術が知られている。例えば、部分集合が意味する役割を表すための本筋となる重要なエンティティとエンティティ間の依存関係とがその部分集合に含まれること、ソフトウェアの本筋の理解の妨げとなる枝葉末節のエンティティやエンティティ間の依存関係がその部分集合を形成する際に軽視されることを要件として部分集合が抽出される。
特開2013−148987号公報 特開2005−173645号公報
しかしながら、上記技術では、他のサービス部品にも含めることのできる要素が特定のサービス部品に含まれる形で分類されるので、サービス部品間の関係性を正確に表した分類ができない場合がある。具体的には、サービス部品内部の要素であるデータに対して、サービス部品外部の処理との強い関係が残ったままの部品単位が抽出されてしまうことで、サービスを提供する自立した部品として抽出できない。
例えば、上記技術は、一見軽視されるようなエンティティであっても、分割されたグループを特徴付けるようなエンティティならば、当該グループに包含させるように、ソフトウェア分割を実行する。このように、他の関係との相対的な比較によって、グループ化するかを判断しているので、分割された部分集合に含まれるデータを外部から更新する処理が残っている場合がある。
一つの側面では、プログラム資産内で自立した部品を適切に分類することができるプログラム分析装置、プログラム分析方法および分析プログラムを提供することを目的とする。
第1の案では、プログラム分析装置は、複数のプログラムと複数のデータを含むプログラム資産における前記複数のプログラム間の呼出関係に基づいて、前記複数のプログラムを各プログラム群に分類する分類部を有する。プログラム分析装置は、前記各プログラム群に含まれるプログラムがアクセスするデータを基に、前記各プログラム群とデータとを関連付ける複数のサービス部品候補を生成する候補生成部を有する。プログラム解析装置は、前記複数のサービス部品候補に関連付けられるデータのうち、他のサービス部品候補から更新されるデータを共通データとして抽出し、前記共通データを除く前記複数のサービス部品候補および前記共通データを、前記プログラム資産のサービス部品として生成する部品生成部を有する。
一つの側面では、プログラム資産内で他の部品との関係性が小さい部品を適切に分類することができる。
図1は、実施例1にかかる分析装置を説明する図である。 図2は、実施例1にかかる分析装置の機能構成を示す機能ブロック図である。 図3は、プログラム資産DBに記憶されるプログラム全体の例を示す図である。 図4は、プログラムの呼出構造および分類を説明する図である。 図5は、サービス部品候補の生成を説明する図である。 図6は、サービス部品候補の生成結果を示す図である。 図7は、サービス部品の生成結果を説明する図である。 図8は、全体的な処理の流れを示すフローチャートである。 図9は、解析処理の流れを示すフローチャートである。 図10は、共通データ抽出処理の流れを示すフローチャートである。 図11は、従来との比較を説明する図である。 図12は、起点情報が外部から指定されているときの分類を説明する図である。 図13は、サービス部品候補の再分類例を説明する図である。 図14は、ハードウェア構成例を示す図である。
以下に、本願の開示するプログラム分析装置、プログラム分析方法および分析プログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。また、各実施例は、矛盾のない範囲内で適宜組み合わせることができる。
[分析装置の説明]
図1は、実施例1にかかる分析装置を説明する図である。分析装置10は、複数のプログラムと複数のデータとを含むプログラム資産に対して疎結合分析を実行する。つまり、分析装置10は、プログラム資産の内部構造の把握と機能やデータをサービスとして切出しやすい形への再構造化を行う。
一般的に、あるシステムへ適用されたプログラム資産は、システムの改変、増築、ネットワークなどの周辺環境の変化に伴い、更新されていく。つまり、システムが長年使用されることにより、プログラム資産へプログラムやデータベースなどの部品(要素)の追加、プログラム資産内の部品の変更などが経年的に実行される。このように経年的に更新されるプログラム資産は、複数人によって更新されることから、正確な管理資料(更新資料)などがないことも珍しくない。このため、リバースエンジニアリングやプログラム構造の分析などを行う場合に、プログラム資産の全体を参照して、プログラム資産内に部品が他の部品とどのように関係しているのか、ある部品を更新するとどの部品に影響を与えるのかを分析して把握することは、システムエンジニアやプログラマーであっても簡単ではない。
このような場合に、分析装置10は、プログラム資産における複数のプログラム間の呼出関係に基づいて、複数のプログラムを各プログラム群に分類する。続いて、分析装置10は、各プログラム群に含まれるプログラムがアクセスするデータを基に、各プログラム群とデータとを関連付ける複数のサービス部品候補を生成する。そして、分析装置10は、複数のサービス部品候補に関連付けられるデータのうち、他のサービス部品候補から更新されるデータを共通データとして抽出し、共通データを含まない複数のサービス部品候補および共通データを、プログラム資産のサービス部品(処理)として生成する。
つまり、分析装置10は、プログラムとデータにそれぞれ異なるアプローチで部品化する。ここで想定するプログラムは、ライブラリのようにコピーして利用できるものとして複製を認めるのに対し、データは、具体的な値を内部に持つので、データは一か所に配置するようにして部品化する。分析装置10は、ソフトウェア分割技術等のクラスタリング技術を使って部品化を実行して、部品とするプログラムやデータを定義した後、部品の外部から更新されるデータ、および更新がないデータだが、複数の部品から参照されるデータは、外部に「共通データ」として定義し、「共通データ」を除いた上で、互いに疎な関係である部品を定義する。
具体的には、図1に示すように、分析装置10は、プログラムAからFと、データAと、データBとから構成されるプログラム資産において、プログラムの呼出関係から、プログラムA、B、C、Dを含むプログラム群Aと、プログラムE、D、Fを含むプログラム群Eとを生成する。また、分析装置10は、プログラム群に含まれるプログラムが参照または更新するデータを特定することで、各プログラム群と各データとの関係を特定する。そして、分析装置10は、分類した各プログラム群と各データとの関係性を示す情報を出力する。
この結果、分析装置10は、外部から更新されるデータを外部に「共通データ」として定義し、「共通データ」を除いたことで、新たに切り出しの単位を定義することで、自立した「部品」の要素として抽出できるので、プログラム資産内で他の部品との関係性が小さい部品を適切に分類することができる。
[機能構成]
図2は、実施例1にかかる分析装置10の機能構成を示す機能ブロック図である。図2に示すように、分析装置10は、通信部11、記憶部12、制御部20を有する。
通信部11は、他の装置との間の通信を制御する処理部であり、例えば通信インタフェースなどである。例えば、通信部11は、管理者端末から、処理開始の指示や分析対象のプログラム資産の入力を受け付ける。また、通信部11は、管理者端末などに、分析結果を送信する。
記憶部12は、プログラムやデータを記憶する記憶装置の一例であり、例えばメモリやハードディスクなどである。この記憶部12は、プログラム資産DB13と分析結果DB14を記憶する。
プログラム資産DB13は、分析対象のプログラム資産を記憶するデータベースである。ここで記憶されるプログラム資産は、管理者等によって格納される。図3は、プログラム資産DB13に記憶されるプログラム全体の例を示す図である。図3に示すように、プログラム資産は、プログラムA、プログラムB、プログラムC、プログラムD、プログラムE、プログラムFを含む。図3は、6つのプログラムの記述例を模式的に示した例で、プログラム呼出部分およびデータアクセスのみを記述している。
図3に示すように、プログラムAは、プログラムBおよびプログラムDを呼び出して処理を実行する。同様に、プログラムBは、プログラムCを呼び出し、プログラムCは、データAを読み込むあるいは参照する処理する。プログラムDは、プログラムFを呼び出し、データBに書き出す。プログラムEは、プログラムDを呼び出し、プログラムFは、呼び出し関係やデータ参照関係がない。なお、図3に示すプログラム資産は、本実施例で分析対象とするプログラム資産の一部であり、図示しない他のプログラムも含む。
分析結果DB14は、後述する制御部20によるプログラム資産の分析結果を記憶するデータベースである。例えば、分析結果DB14は、プログラム資産を示す識別子、分析結果、分析日時などを対応付けて記憶する。
制御部20は、分析装置10全体を司る処理部であり、例えばプロセッサなどである。この制御部20は、分類部21、候補生成部22、分析部23を有する。なお、分類部21、候補生成部22、分析部23は、プロセッサが有する電子回路の一例やプロセッサが実行するプロセスの一例などである。
分類部21は、プログラム資産内のプログラム間の呼出関係に基づいて、プログラムを各プログラム群に分類する処理部である。具体的には、分類部21は、プログラム資産を入力として、プログラムの呼び出し関係およびプログラムとデータの関係を取得する。分類部21は、一つの処理が実行されるときに関係するプログラムを取得する。分類部21は、プログラム内でどこからも呼び出されていないものを起点として決定し、起点のプログラムから呼び出し関係を追跡して、処理で関係するプログラムとからプログラムの呼び出し構造全体を作成し、「プログラム群」として定義する。その後、分類部21は、プログラムとデータの関係から、プログラム群とデータの関係を作成する。
例えば、分類部21は、図3に示すプログラム資産に対して、プログラムの呼出構造を作成する。プログラムの呼出構造は、プログラムの起点を決定するところから決定する。分類部21は、プログラムAについて、他のプログラムから呼び出されていないため起点として取得し、プログラムBについては、プログラムAから呼び出されるため他のプログラムから呼び出されるものとなり、起点ではないとする。同様に、分類部21は、プログラムCについては、プログラムBから呼ばれるため、起点ではないと判定し、プログラムDについては、プログラムAから呼ばれるため起点ではないと判定する。しかし、分類部21は、プログラムEについては、他のプログラムから呼んでいるものがないため、起点と判定する。また、分類部21は、プログラムFについて、プログラムDから呼び出されるため、起点ではないと判定する。この結果、分類部21は、プログラムAとプログラムEを起点と特定する。
続いて、分類部21は、プログラムAを起点に呼出構造を作成する。プログラムAは、プログラムBとプログラムDを呼び出す。プログラムBはプログラムCを呼び出し、プログラムDは、プログラムFを呼び出す。このことから、プログラムAは、プログラムB、C、D、Fと合わせて呼び出し構造を保持すると判定できる。したがって、分類部21は、プログラムAを起点として、プログラムAから追跡できるプログラムB、プログラムC、プログラムD、プログラムFをプログラム群Aに分類する。
同様に、プログラムEは、プログラムDを呼び出し、プログラムDは、プログラムFを呼び出すので、プログラムEは、プログラムD、Fと合わせて呼び出し構造を保持すると判定できる。したがって、分類部21は、プログラムEを起点として、プログラムEから追跡できるプログラムD、プログラムFをプログラム群Eに分類する。
続いて、分類部21は、各プログラム群がアクセスするデータを対応付ける。具体的には、プログラムCは、データAを参照し、プログラムDは、データBを更新し、プログラムCおよびプログラムDはプログラム群Aの一部である。このため、分類部21は、プログラム群AがデータAを参照しデータBを更新するという関係を定義する。また、分類部21は、プログラム群Eに対しては、プログラムDのみを内部に含むので、データBを更新する関係のみを定義する。
これらの結果を図4に示す。図4は、プログラムの呼出構造および分類を説明する図である。分類部21は、図4の(a)に示す呼出関係を基に、図4の(b)に示すように、プログラム群AがデータAを参照しデータBを更新する関係、プログラム群EがデータBを更新する関係を生成して、記憶部12や候補生成部22に出力する。なお、出力形式は、これに限定されず、出力先のツール等にあわせて様々な形式を採用できる。例えば、図4の(c)に示すように、カンマ区切りで関係形成を定義し、プログラム群とデータおよび参照関係を#read、更新関係を#writeと言う形で追記することで関係を記述することもできる。例えば、図4の(c)の1行目は、プログラム群AがデータAを参照(read)していることを記述している。
候補生成部22は、分類部21によって分類された各プログラム群とデータとの関係性から、プログラム群とデータの関係で特に近いものをグループ化した部分集合であるサービス部品候補を生成する処理部である。具体的には、候補生成部22は、特開2013−148987号公報などのクラスタリング技術を用いて、サービス部品候補を生成する。この技術では、部分集合が意味する役割を表すための本筋となる重要なエンティティとエンティティ間の依存関係とが、その部分集合に含まれることとし、ソフトウェアの本筋の理解の妨げとなる枝葉末節のエンティティやエンティティ間の依存関係が、その部分集合を形成する際に軽視されることとする。重要か枝葉末節かの判断は、依存関係の数で判断される。
例えば、候補生成部22は、各データへの入力数が多いほど関係性が強いと判断して、関係性が強いプログラム群とデータとを同一グループとなるように、サービス部品候補を生成することもできる。また、候補生成部22は、例えばWriteの場合は2倍にするなど、各入力数のうちReadよりもWriteの重みを大きくして、関係性を判断して、サービス部品候補を生成することもできる。
ここで、分類部21から出力された結果が図5に示す場合を例にして説明する。図5は、サービス部品候補の生成を説明する図である。この例では、図5に示すように、候補生成部22に、プログラム群A、プログラム群E、データA、データBと合わせて、プログラム群1、プログラム群2、データC、データDの関係もあるものが入力されたとする。
そして、候補生成部22は、式(1)を用いて、各プログラム群とデータとの関係性を生成する。なお、式(1)におけるE(A,B)は、エンティティAからエンティティBへの依存関係の本質度(重み)であり、d_in(B)は、エンティティBへの入次数であり、nは、データが参照の場合は2、データが更新の場合は1とする。
Figure 0006880962
すなわち、多くのプログラムから読み出されているデータは関係が弱いと判断されるとともに、データを更新プログラムと更新されるデータとの関係は強いと判断されて、多くのプログラムからアクセスされるデータは、いずれかの部分集合(サービス部品候補)に含まれる形で出力される。例えば、プログラム群Aおよびプログラム群Eは、データBを更新することから、他のデータと比べてデータBとの関係性が強く、プログラム群1は、データAを更新するが他のデータへのアクセスも多いことから、各データとの関係性がそこまで強くなく、プログラム群2は、データDを更新することから他のデータと比べてデータDとの関係性が強いなどと判断される。
そして、候補生成部22によってクラスタリングされた結果を図6に示す。図6は、サービス部品候補の生成結果を示す図である。図6に示すように、候補生成部22は、プログラム群Aとプログラム群EとデータAとデータBとを含むサービス部品候補(ID=1)、プログラム群1とデータCとを含むサービス部品候補(ID=2)、プログラム群2とデータDを含むービス部品候補(ID=3)の3つのサービス部品候補を生成する。また、候補生成部22は、サービス部品候補IDと部品とを対応付けた一覧として、「(1,プログラム群A)、(1,データA)、(1,データB)、(1,プログラム群E)、(2,データC)、(2,プログラム群1)、(3,データD)、(3,プログラム群2)」なども生成できる。その後、候補生成部22は、生成したサービス部品候補を記憶部や分析部23に出力する。
分析部23は、複数のサービス部品候補に関連付けられるデータのうち、他のサービス部品候補から更新されるデータを共通データとして抽出し、共通データを含まない複数のサービス部品候補および共通データを、プログラム資産のサービス部品として生成する処理部である。また、分析部23は、複数のサービス部品候補に関連付けられるデータのうち、当該データが含まれるサービス部品候補内のプログラム群および他のサービス部品候補内のプログラム群から更新されないデータを共通データとして抽出する処理部である。すなわち、分析部23は、得られたサービス部品候補とプログラム群とデータの参照・更新関係を入力として、共通データと最終的なサービス部品を出力する。
図6を例にして具体的に説明する。まず、分析部23は、サービス部品候補を取得し、サービス候補部品内部のデータに対する更新処理を取得する。例えば、分析部23は、サービス部品候補(ID=1)の内部のデータを取得して、データAとデータBを検出し、データAがプログラム群A、プログラム群E、プログラム群1から更新されることを特定する。このとき、分析部23は、プログラム群Aおよびプログラム群EがデータAと同じサービス部品内部の処理であるが、プログラム群1が他のサービス部品候補であるサービス部品候補(ID=2)の内部に含まれる処理であると特定する。したがって、分析部23は、データAが外部から更新されるデータと判定して共通データに分類し、サービス部品候補(ID=1)の外部に定義する。ここで、データAは、各サービス部品候補から更新されるデータであることから、グローバルアクセスデータと定義される。
次に、分析部23は、サービス部品候補(ID=1)に他にデータがないかを調査し、サービス部品候補(ID=1)にはデータBが内部に含まれているのでデータBへの参照や更新関係を調査する。例えば、分析部23は、データBについて、プログラム群Aおよびプログラム群Eから更新されるが、他の処理(サービス部品候補)からの更新はない。また、分析部23は、プログラム群Aとプログラム群Eはいずれもサービス部品候補(ID=1)内部の処理であり、データBに対する外部からのアクセスがない。また、分析部21は、このデータBに対しては参照のみではないため、外部に出すデータには該当しないと判定する。
したがって、分析部23は、サービス部品候補(ID=1)に対しては、データAのみ、共通データとして外部に定義する。なお、分析部23は、データAがサービス部品候補(ID=1)のデータではなくなったことで、サービス部品候補(ID=1の内部で関係がなくなるかどうかを確認する。ここでは、分析部23は、プログラム群Aとプログラム群EとデータBが要素として残っているが、プログラム群AとEはいずれもデータBと更新関係にあるため、3つの要素は関連があると言えるので、残りのサービス部品を分割しいと判断する。
続いて、分析部23は、サービス部品候補(ID=2)について調査する。分析部23は、サービス部品候補(ID=2)内にデータCを検出し、データCに対するプログラム群からのアクセスを調査する。ここで、分析部23は、データCに対して、プログラム群Eおよびプログラム群1から参照のみされ、プログラム群Eが外部のサービス部品候補であることを特定する。この結果、分析部23は、データCを共通データとして外部に定義する。ここで、データCは、各サービス部品候補から参照のみが実行されるデータであることから、マスターデータと定義される。その後、分析部23は、サービス部品候補(ID=2)に残った要素がプログラム群1のみであるので、プログラム群1のみでサービス部品候補(ID=2)を定義する。
最後に、分析部23は、サービス部品候補(ID=3)に対して各データを調査する。分析部23は、サービス部品候補(ID=3)内にデータDを検出する。そして、分析部23は、データDがプログラム群2から更新され、プログラム群1から参照されることを特定する。さらに、分析部23は、プログラム群2とデータDとが同じサービス部品候補(ID=3)内部の要素であるため、外部からの更新はなく、プログラム群2のみがデータDを更新するため、外部からの更新もないと判定する。また、分析部23は、データDに対して更新処理があるので、参照処理のみではないと判定する。したがって、分析部23は、データDを共通データに分類しないと決定する。
上述した処理によって生成された結果を図7に示す。図7は、サービス部品の生成結果を説明する図である。図7に示すように、分析部23は、サービス部品候補(ID=1)に含まれていたデータAについて、外部のサービス部品候補(ID=2)のプログラム群1からも更新されることから、共通データとして外部に分類し直す。同様に、分析部23は、サービス部品候補(ID=2)に含まれていたデータBについて、外部のサービス部品候補(ID=1)のプログラム群Eからも参照されることから、共通データとして外部に分類し直す。
この結果、分析部23は、「サービス部品ID,部品名」として「1,プログラム群A」、「1,データB」、「1,プログラム群E」、「2,プログラム群1」、「3,データD」、「3,プログラム群2」を生成する。また、分析部23は、「共通データID,部品名」として「c1,データA」と「c2,データB」を生成する。そして、分析部23は、生成したサービス部品および共通データを分析結果DB14に格納する。
[全体処理の流れ]
図8は、全体的な処理の流れを示すフローチャートである。図8に示すように、分析装置10は、解析処理を実行し(S101)、解析処理による解析結果に基づいてプログラム群とデータの関係性を生成する(S102)。
続いて、分析装置10は、分割処理を実行して(S103)、分割処理の結果に基づいてサービス部品候補を抽出する(S104)。なお、分割処理は、特開2013−148987号公報などのクラスタリング技術などを用いた公知の処理なので、詳細な説明は省略する。
その後、分析装置10は、サービス部品候補を解析して共通データの抽出処理を実行し(S105)、抽出結果に基づいて、サービス部品と共通データを生成する(S106)。
[解析処理の流れ]
次に、図8のS101で実行される解析処理について説明する。図9は、解析処理の流れを示すフローチャートである。図9に示すように、分類部21は、プログラムの呼出関係を取得する(S201)。例えば、分類部21は、各プログラムのソースコードを参照し、CALL文などの他のプログラムを呼び出す命令を検索して、プログラムの呼出関係を取得する。
そして、分類部21は、どのプログラムからも呼び出されていないプログラムを取得し(S202)、呼び出されていないプログラムを起点として定義する(S203)。
続いて、分類部21は、起点から呼出構造を取得し(S204)、全ての起点に対して呼出構造を生成する(S205)。そして、分類部21は、全ての起点に対して呼出構造を生成するまで(S205:No)、S204以降を繰り返す。
そして、分類部21は、全ての起点に対して呼出構造を生成すると(S205:Yes)、プログラムがアクセスするデータを取得する(S206)。続いて、分類部21は、プログラム群内にデータにアクセスするプログラムがあるか否かを判定する(S207)。
ここで、分類部21は、プログラム群内にデータにアクセスするプログラムがある場合(S207:Yes)、プログラム群とデータの関係を定義し(S208)、すべてのプログラム群に対してデータを確認したか否かを判定する(S209)。なお、分類部21は、プログラム群内にデータにアクセスするプログラムがない場合(S207:No)、S208を実行することなく、S209を実行する。
そして、分類部21は、すべてのプログラム群に対してデータを確認した場合(S209:Yes)、すべてのデータに対してプログラムとの関係を確認したか否かを判定する(S210)。
ここで、分類部21は、すべてのデータに対してプログラムとの関係を確認すると(S210:Yes)、プログラム群とデータの関係を候補生成部22等に出力する(S211)。なお、S209において、分類部21は、データとの関係を確認していないプログラム群がある場合(S209:No)、S207以降を繰り返す。同様に、S210において、分類部21は、プログラムとの関係を確認していないデータがある場合(S210:No)、S206以降を繰り返す。
[共通データ抽出処理の流れ]
次に、図8のS105で実行される解析処理について説明する。図10は、共通データ抽出処理の流れを示すフローチャートである。図10に示すように、分析部23は、サービス部品候補を取得し(S301)、サービス部品候補内のデータへの更新処理を取得する(S302)。例えば、分析部23は、サービス部品候補内の各データに対して、更新を行うプログラム群があるかないかを検出する。
そして、分析部23は、サービス部品候補内のデータが外部のサービス部品候補から更新されない場合(S303:No)、サービス部品候補内のデータへの参照処理を取得する(S304)。例えば、分析部23は、サービス部品候補内の各データに対して、参照を行うプログラム群があるかないかを検出する。
ここで、分析部23は、サービス部品候補内のデータを参照するのみかつ部品外部から参照のみのデータがある場合(S305:Yes)、該当のデータを共通データとして外部に定義する(S306)。
一方、S303において、分析部23は、サービス部品候補内のデータが外部のサービス部品候補から更新される場合(S303:Yes)、該当のデータを共通データとして外部に定義する(S307)。
そして、サービス部品候補内のデータを参照するのみかつ部品外部から参照のみされるデータに該当するデータがない場合(S305:No)、または、S306が実行された後、または、S307が実行された後、分析部23は、サービス部品候補内の全てのデータの関係を取得したか否かを判定する(S308)。
ここで、分析部23は、サービス部品候補内で未判定のデータが存在する場合(S308:No)、S302以降を繰り返す。一方で、分析部23は、サービス部品候補内で未判定のデータが存在しない場合、すなわち、サービス部品候補内の全てのデータの関係を取得した場合(S308:Yes)、サービス部品候補内で関係がないものが存在するか否かを判定する(S309)。
ここで、分析部23は、サービス部品候補内で関係がないものが存在する場合(S309:Yes)、関係がある範囲で部品を分割する(S310)。その後、分析部23は、全てのサービス部品を取得した場合、すなわち、サービス候補部品に分類された各部品についての判定が終了した場合(S311:Yes)、得られたサービス部品および共通データを出力する(S312)。
なお、分析部23は、未判定のサービス部品が存在する場合(S311:No)、S301以降を繰り返す。また、S309において、分析部23は、サービス部品候補内で関係がないものが存在しない場合(S309:No)、S310を実行することなく、S311を実行する。
[効果]
上述したように、分析装置10は、部分的にシステムを切り出した部品間で、共通に使われる「共通データ」を自動的に抽出できる。このことで、共通データが自動的に明確になり、共通サービスの中心となるデータが定義できる。従来技術では、外部からデータを更新される関係等が残ってしまい、他の部品との強い関係が残ったままの部品が抽出されてしまうことでサービスを提供する自立した「部品」の要素として抽出できない。また、従来技術では、あらかじめ、omnipresent module(多くの箇所からアクセスされるモジュール)を除外してから、クラスタリングすることや重みづけすることを推奨しているが、これを実現するためには多くの調査作業が発生するので、現実的ではない。
図11は、従来との比較を説明する図である。図11ではプログラムをP、データをDで表すこととする。従来手法では、各要素(部品)がいずれかのサービス部品に分類されるので、図11の(a)に示すように、他のサービス部品であるP1、P2、P3、P4からアクセスされるD3がサービス部品(ID=3)に分類される。つまり、データの更新を行う処理は、データの内容・状態を変更する処理で影響が大きいので、データに対して大きな影響を与える「データに対するオーナー」と言える。したがって、D3は、どこかに分類されずに、自立した1つの部品として定義される方が好ましい。
一方で、図11の(b)に示すように、実施例1による手法では、D3は、他のサービス部品であるP1、P2、P3、P4からアクセスされることから、サービス部品(ID=3)の外部に定義される。この結果、D3についても、自立した1つの部品として定義することができる。つまり、分析装置10は、データを中心にして関係するプログラム群をクラスタリングし、活用したい機能やデータの影響範囲を分析して疎結合化を支援することができる。
このように、分析装置10は、部分的にシステムを切り出した単位間で、共通に使われる「共通データ」を自動的に抽出できる。したがって、従来では、サービス部品の要素に分類されていたマスターデータやログデータ等を、1つの部品として抽出することができる。また、同時に外部からデータを更新されることがないサービスの候補(サービス部品)を提示できるため、実際にシステムを切り出す上で参考となる部品で表されるプログラム群とデータの部分集合を取得できる。
ところで、実施例1では、プログラム構造から起点となるプログラムを探索する例を説明したが、これに限定されるものではない。例えば、管理者等によって起点情報を外部から指定することもできる。
図12は、起点情報が外部から指定されているときの分類を説明する図である。図12に示すように、分析装置10は、図4の(a)と同様のプログラム構造を有する状態で、起点情報として「プログラムB,プログラムD」が指定された場合、指定された起点から呼出構造を追跡することができる。
図12の例では、分析装置10は、プログラムBを起点として呼出構造を追跡することで、プログラムB、プログラムCおよびデータAへの参照で1つの処理と判定することができる。したがって、分析装置10は、プログラムBおよびプログラムCをプログラム群Bとして定義し、プログラム群BがデータAを参照する関係が得られる。
また、分析装置10は、プログラムDを起点として呼出構造を追跡することで、プログラムD、プログラムFおよびデータBへの参照で1つの処理と判定することができる。したがって、分析装置10は、プログラムDおよびプログラムFをプログラム群Dとして定義し、プログラム群DがデータBを参照する関係が得られる。
このようにすることで、プログラム資産のすべてではなく一部を解析した場合に、起点以降のプログラム構造およびデータとの関係性を抽出することができる。したがって、管理者による解析範囲の設定が可能となり、利便性が向上する。
ところで、実施例1では、共通データをプログラム群が分離する例を説明したが、これに限定されるものではない。例えば、共通データが分離されたプログラム群について再分類を実行することもできる。
図13は、サービス部品候補の再分類例を説明する図である。図13の(a)に示すように、この例では、サービス部品候補としては、プログラム群10とプログラム群20とプログラム群30とデータAAとデータBBを含むサービス部品候補(X)と、プログラム群40とプログラム群50とデータCCを含むサービス部品候補(Y)の2つが得られているとする。
そして、分析部23は、ここで得られたサービス部品候補に対して、共通データおよびサービス部品を調査する。まず、分析部23は、サービス部品候補として1つ目のサービス部品候補(X)を調査する。このサービス部品候補(X)には、データAA、データBBが存在する。データAAは、プログラム群10、プログラム群20、プログラム群30、プログラム群40の4つからアクセスされていて、プログラム群20を除く3つから更新される。また、プログラム群40は、データAAとは異なるサービス部品候補(Y)から更新を実行する。この結果、分析部23は、データAAを共通データとして分類する。また、他のデータとしてデータBBに関しては、プログラム群30が参照するのみで、サービス部品候補(X)の外部からの参照はない。したがって、分析部23は、データBBを共通データには分類しない。
次に、分析部23は、データAAを共通データとして外部に定義することとした場合、サービス部品候(X)補内部の関係を確認する。このとき、分析部23は、サービス部品候補内部(X)の関係において、データAAの関係を除いた上でデータやプログラム群でデータアクセス関係があるかを確認する。例えば、プログラム30は、データBBにアクセスするため、プログラム30とデータBBはアクセス関係があると判定される。
データAAを除いた場合、プログラム群10およびプログラム群20は、他のデータに対してアクセス関係がない。したがって、サービス部品候補(X)内部のデータBBやプログラム群30とは関係がない。したがって、分析部23は、プログラム群10、プログラム20、プログラム群30とデータBBの3つの部品に分割する。
なお、対象の部品が分割できるかどうかは、データアクセス関係でつながりがあるかどうかで判断している。この判断にはプログラム群とデータの関係をノードとエッジのグラフと見た場合に到達不可能なノードがないかどうかで判断する方法を利用することが出来る。
次に、分析部23は、データCCを含むサービス部品候補(Y)について、データCCは、プログラム群40とプログラム群50からアクセスされるだけで共通データではないとして分類する。ここで特に共通データとして外部に出すデータがないため、プログラム群とデータの関係は変化がない。
このようにして得られたサービス部品と共通データを図13の(b)に示す。分析部23は、プログラム群10をサービス部品(X−1)、プログラム群20をサービス部品(X−2)、プログラム群30およびデータBBをサービス部品(X−3)、プログラム群40およびプログラム群50およびデータCCをサービス部品(Y)に再分類することができる。したがって、分析装置10は、共通データを外部に抽出後のサービス部品候補を再分類することができ、関係性の弱い部品を正確に抽出することができる。
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下に異なる実施例を説明する。
[プログラム解析]
上記実施例で説明した呼び出し関係やデータへの読み出し関係を取得する手法としては、パーサなどの公知のプログラム解析技術を採用することができる。
[システム]
記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られない。つまり、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、CPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
[ハードウェア構成]
図14は、ハードウェア構成例を示す図である。図14に示すように、分析装置10は、通信インタフェース10a、HDD(Hard Disk Drive)10b、メモリ10c、プロセッサ10dを有する。
通信インタフェース10aは、他の装置の通信を制御するネットワークインタフェースカードなどである。HDD10bは、プログラムやデータなどを記憶する記憶装置の一例である。
メモリ10cの一例としては、SDRAM(Synchronous Dynamic Random Access Memory)等のRAM(Random Access Memory)、ROM(Read Only Memory)、フラッシュメモリ等が挙げられる。プロセッサ10dの一例としては、CPU(Central Processing Unit)、DSP(Digital Signal Processor)、FPGA(Field Programmable Gate Array)、PLD(Programmable Logic Device)等が挙げられる。
また、分析装置10は、プログラムを読み出して実行することでプログラム分析方法を実行する情報処理装置として動作する。つまり、分析装置10は、分類部21、候補生成部22、分析部23と同様の機能を実行するプログラムを実行する。この結果、分析装置10は、分類部21、候補生成部22、分析部23と同様の機能を実行するプロセスを実行することができる。なお、この他の実施例でいうプログラムは、分析装置10によって実行されることに限定されるものではない。例えば、他のコンピュータまたはサーバがプログラムを実行する場合や、これらが協働してプログラムを実行するような場合にも、本発明を同様に適用することができる。
このプログラムは、インターネットなどのネットワークを介して配布することができる。また、このプログラムは、ハードディスク、フレキシブルディスク(FD)、CD−ROM、MO(Magneto−Optical disk)、DVD(Digital Versatile Disc)などのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行することができる。
10 分析装置
11 通信部
12 記憶部
13 プログラム資産DB
14 分析結果DB
20 制御部
21 分類部
22 候補生成部
23 分析部

Claims (6)

  1. 複数のプログラムと複数のデータを含むプログラム資産における前記複数のプログラム間の呼出関係に基づいて、前記複数のプログラムを各プログラム群に分類する分類部と、
    前記各プログラム群に含まれるプログラムがアクセスするデータを基に、前記各プログラム群とデータとを関連付ける複数のサービス部品候補を生成する候補生成部と、
    前記複数のサービス部品候補内の各プログラム群が前記データを参照する関係にある参照関係および前記複数のサービス部品候補内の各プログラム群が前記データを更新する関係にある更新関係に基づき、前記複数のサービス部品候補に関連付けられるデータからいずれのサービス部品候補にも属さない共通データ抽出し、前記共通データを除く前記複数のサービス部品候補および前記共通データを、前記プログラム資産のサービス部品として生成する部品生成部と
    を有することを特徴とするプログラム分析装置。
  2. 前記部品生成部は、前記複数のサービス部品候補に関連付けられるデータのうち、当該データが含まれるサービス部品候補内のプログラム群および他のサービス部品候補内のプログラム群から参照のみされるデータを前記共通データとして抽出することを特徴とする請求項1に記載のプログラム分析装置。
  3. 前記部品生成部は、前記共通データが外部に分類された第1のサービス部品候補について、前記第1のサービス部品候補に含まれるプログラム群が前記第1のサービス部品候補に含まれるデータへアクセスしない場合、当該プログラム群を前記第1のサービス部品候補から抽出して、別の第2のサービス部品候補に再分類することを特徴とする請求項1または2に記載のプログラム分析装置。
  4. 前記候補生成部は、前記データに参照するプログラム群よりも、前記データを更新するプログラム群の方が強い関係性があると判定して、前記各プログラム群とデータとを関連付ける複数のサービス部品候補を生成することを特徴とする請求項1から3のいずれか一つに記載のプログラム分析装置。
  5. コンピュータが
    複数のプログラムと複数のデータを含むプログラム資産における前記複数のプログラム間の呼出関係に基づいて、前記複数のプログラムを各プログラム群に分類し、
    前記各プログラム群に含まれるプログラムがアクセスするデータを基に、前記各プログラム群とデータとを関連付ける複数のサービス部品候補を生成し、
    前記複数のサービス部品候補内の各プログラム群が前記データを参照する関係にある参照関係および前記複数のサービス部品候補内の各プログラム群が前記データを更新する関係にある更新関係に基づき、前記複数のサービス部品候補に関連付けられるデータからいずれのサービス部品候補にも属さない共通データ抽出し、前記共通データを除く前記複数のサービス部品候補および前記共通データを、前記プログラム資産のサービス部品として生成する
    処理を実行することを特徴とするプログラム分析方法。
  6. コンピュータに
    複数のプログラムと複数のデータを含むプログラム資産における前記複数のプログラム間の呼出関係に基づいて、前記複数のプログラムを各プログラム群に分類し、
    前記各プログラム群に含まれるプログラムがアクセスするデータを基に、前記各プログラム群とデータとを関連付ける複数のサービス部品候補を生成し、
    前記複数のサービス部品候補内の各プログラム群が前記データを参照する関係にある参照関係および前記複数のサービス部品候補内の各プログラム群が前記データを更新する関係にある更新関係に基づき、前記複数のサービス部品候補に関連付けられるデータからいずれのサービス部品候補にも属さない共通データ抽出し、前記共通データを除く前記複数のサービス部品候補および前記共通データを、前記プログラム資産のサービス部品として生成する
    処理を実行させることを特徴とする分析プログラム。
JP2017080776A 2017-04-14 2017-04-14 プログラム分析装置、プログラム分析方法および分析プログラム Active JP6880962B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2017080776A JP6880962B2 (ja) 2017-04-14 2017-04-14 プログラム分析装置、プログラム分析方法および分析プログラム
US15/938,475 US10514908B2 (en) 2017-04-14 2018-03-28 Program analysis device for classifying programs into program groups based on call relationship between programs, program analysis method for classifying programs into program groups based on call relationship between programs, and recording medium storing analysis program for classifying programs into program groups based on a call relationship between programs

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2017080776A JP6880962B2 (ja) 2017-04-14 2017-04-14 プログラム分析装置、プログラム分析方法および分析プログラム

Publications (2)

Publication Number Publication Date
JP2018181005A JP2018181005A (ja) 2018-11-15
JP6880962B2 true JP6880962B2 (ja) 2021-06-02

Family

ID=63789998

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017080776A Active JP6880962B2 (ja) 2017-04-14 2017-04-14 プログラム分析装置、プログラム分析方法および分析プログラム

Country Status (2)

Country Link
US (1) US10514908B2 (ja)
JP (1) JP6880962B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6729742B1 (ja) * 2019-03-27 2020-07-22 日本電気株式会社 情報処理装置、情報処理システム、情報処理方法、及びプログラム
JP7255420B2 (ja) * 2019-08-22 2023-04-11 富士通株式会社 資産管理装置、資産管理方法および資産管理プログラム

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002041287A (ja) * 2000-07-26 2002-02-08 Fujitsu Ltd 再利用部品抽出装置、再利用部品抽出方法及びその装置での処理をコンピュータに行なわせるためのプログラムを格納した記憶媒体
US8074201B2 (en) * 2002-07-10 2011-12-06 National Instruments Corporation Deployment and execution of a program on an embedded device
JP2005173645A (ja) 2003-12-05 2005-06-30 Ibm Japan Ltd プログラム開発支援装置、プログラム開発支援方法、プログラム、及び、記録媒体
US7627861B2 (en) * 2003-12-05 2009-12-01 The University Of North Carolina Methods, systems, and computer program products for identifying computer program source code constructs
JP2006302135A (ja) * 2005-04-22 2006-11-02 Fujitsu Ltd アプリケーション資産分析プログラム、アプリケーション資産分析方法およびアプリケーション資産分析装置
JP2009237762A (ja) * 2008-03-26 2009-10-15 Toshiba Corp プログラム解析装置、プログラム解析方法および解析プログラム
US8352630B2 (en) * 2010-09-01 2013-01-08 Sonus Networks, Inc. Dynamic classification and grouping of network traffic for service application across multiple nodes
US9075993B2 (en) * 2011-01-24 2015-07-07 Mcafee, Inc. System and method for selectively grouping and managing program files
JP5899946B2 (ja) 2012-01-17 2016-04-06 富士通株式会社 分割装置、分割方法、および分割プログラム
JP6326886B2 (ja) * 2014-03-19 2018-05-23 富士通株式会社 ソフトウェア分割プログラム、ソフトウェア分割装置およびソフトウェア分割方法
JP2016224579A (ja) * 2015-05-28 2016-12-28 スタビリティ株式会社 情報処理装置及び情報処理方法

Also Published As

Publication number Publication date
JP2018181005A (ja) 2018-11-15
US10514908B2 (en) 2019-12-24
US20180300126A1 (en) 2018-10-18

Similar Documents

Publication Publication Date Title
US10394694B2 (en) Unexplored branch search in hybrid fuzz testing of software binaries
US9632916B2 (en) Method and apparatus to semantically connect independent build and test processes
KR20160018588A (ko) 이벤트 저장소의 구축 방법 및 장치
JP2017525039A (ja) 系統情報の管理
CN110674360B (zh) 一种用于数据的溯源方法和系统
JP2016505956A (ja) 最適化されたデータサブセット化のための方法、装置及びコンピュータ読み取り可能媒体
JP6880962B2 (ja) プログラム分析装置、プログラム分析方法および分析プログラム
CN113032794A (zh) 安全漏洞知识图谱的构建方法、装置、设备和存储介质
CN110737437A (zh) 一种基于代码集成的编译方法和装置
CN114936269A (zh) 文档搜索平台、搜索方法、装置、电子设备及存储介质
JP2023553220A (ja) マルチインスタンスプロセスのためのプロセスマイニング
WO2019069507A1 (ja) 特徴量生成装置、特徴量生成方法および特徴量生成プログラム
Gregorio-Rodríguez et al. Extending mCRL2 with ready simulation and iocos input-output conformance simulation
JP2021002326A (ja) ソフトウェアプログラムにおける静的分析違反の修復パターンの精緻化
US9396239B2 (en) Compiling method, storage medium and compiling apparatus
JP2013077124A (ja) ソフトウェアテストケース生成装置
CN115878592A (zh) 一种政务数据治理方法、装置、存储介质及电子设备
CN106681910B (zh) 一种基于主机代码解析生成测试案例的方法及装置
CN115270731A (zh) 混合文档的协同编辑方法及装置
JP7255420B2 (ja) 資産管理装置、資産管理方法および資産管理プログラム
JP7501782B2 (ja) 活動痕跡抽出装置、活動痕跡抽出方法および活動痕跡抽出プログラム
US8769460B1 (en) Device recognition engine
CN114328149B (zh) 编译时长的统计方法、装置、电子设备及可读介质
TWI844091B (zh) 特徵匹配規則構建、特徵匹配方法、裝置、設備及介質
CN115543227B (zh) 跨系统数据迁移方法、系统、电子设备及存储介质

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200115

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20201111

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20201117

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210118

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20210406

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210419

R150 Certificate of patent or registration of utility model

Ref document number: 6880962

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150