JP6011988B2 - 影響範囲調査方法及び影響範囲調査装置 - Google Patents

影響範囲調査方法及び影響範囲調査装置 Download PDF

Info

Publication number
JP6011988B2
JP6011988B2 JP2015210674A JP2015210674A JP6011988B2 JP 6011988 B2 JP6011988 B2 JP 6011988B2 JP 2015210674 A JP2015210674 A JP 2015210674A JP 2015210674 A JP2015210674 A JP 2015210674A JP 6011988 B2 JP6011988 B2 JP 6011988B2
Authority
JP
Japan
Prior art keywords
influence
statement
instruction
command
range
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
JP2015210674A
Other languages
English (en)
Other versions
JP2016015175A (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.)
Hitachi Social Information Services Ltd
Original Assignee
Hitachi Government and Public Sector System Engineering 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 Hitachi Government and Public Sector System Engineering Ltd filed Critical Hitachi Government and Public Sector System Engineering Ltd
Priority to JP2015210674A priority Critical patent/JP6011988B2/ja
Publication of JP2016015175A publication Critical patent/JP2016015175A/ja
Application granted granted Critical
Publication of JP6011988B2 publication Critical patent/JP6011988B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Description

本発明は、プログラムの影響範囲調査方法及び影響範囲調査装置に関する。
大規模システムの改修の時にプログラムの改修に伴なって他のプログラムへの影響波及調査の精度向上と作業効率向上が求められる。
従来、影響波及調査のために「メソッドの呼出関係」を中心とした影響波及洗い出し方法が用いられて来た。
特許文献1には、設計上の論理構造であるモジュール、ファイル、関数、ソースコードの階層構造ごとに比較すべき項目を定義し、比較を行うことが記載されている。
特許文献2には、従来、分析ルールを規定し、これに基づいて変更の影響度分析を行うこと、この方法ではルールの作成に時間がかかるので、ソースコードの変更対象項目毎にその変更で想定されるすべての検証方法が記載された影響度分析図を記憶することが記載されている。
特開2006−277127号 特開2009−157505号
従来のメソッドの呼出関係による影響波及の洗い出しでは、影響のないクラス/メソッド大量に抽出される、呼出関係を辿る階層を指定する必要があるなどの問題がある。
また、影響度分析図を記憶する方法では、この影響度分析図の構成に多大な時間を要するなどの問題がある。
本発明は、かかる点に鑑みて影響波及のないクラス及びメソッドは抽出することがなく、影響波及の範囲を機械的に設定することができ、大規模システムの改修の時に、影響波及調査の精度向上を図り、作業効率向上を図ることができるようにすることを目的とする。
本発明は、構文解析手段が、ソースコードの命令文の意味を解析して抽象構文木を生成する構文解析工程と、
依存関係分析手段が、前記抽象構文木に含まれる命令文を検索し命令文同士の繋がりを分析することで、前記命令文の依存関係を生成する依存関係分析工程と、
影響波及分析手段が、影響元の命令文と影響先の命令文を特定した前記依存関係に基づいて、影響元の命令文から影響先の命令文を辿り、さらに当該影響先の命令文を影響元の命令文として他の命令文を影響先の命令文として辿ることを、抽象構文木内の命令文について基点から繰り返すことで、影響波及範囲を特定する影響範囲分析工程と、
を行う影響範囲調査方法を提供する。
本発明は、ソースコードの文法を解析して抽象構文木を生成する構文解析手段と、
前記抽象構文木に含まれる命令文を検索し命令文同士の繋がりを分析することで、前記命令文の依存関係を生成する依存関係分析手段と、
影響元の命令文から前記依存関係に基づいて影響先の命令文を特定し、当該影響先の命令文を影響元の命令文として前記依存関係に基づいて他の命令文を影響先の命令文として特定することを、抽象構文木内の命令文について基点から繰り返すことで、影響波及範囲を特定する影響範囲分析手段と、
を備えた影響範囲調査装置を提供する。
なお、本発明では、ソースコードをインプットすることとしているが、ここではバイトコードを含む概念で使用する。バイトコードとは、特定のOSやハードウェアに依存しないように定義された命令によって記述された実行形式のプログラムを意味し、人間の書いた設計図であるソースコードと実際にコンピュータで実行可能なネイティブコードの中間に当たる形式のものであり、ここではソースコードとして取り扱って差しつかえない。
本発明によれば、上述したようにソースコードの構文解析によって命令文同士の依存関係を付与し、影響波及範囲の設定及び特定を行うようにしているので、影響のないクラス/メソッドを抽出することがなく、影響波及の範囲を命令文から機械的に設定でき、大規模システムの改修の時に、影響調査の精度向上を図り、作業効率の向上を図ることができる。
本発明の実施例の構成をブロックで示す図。 本実施例で採用されるエンジンの構成を示す図。 本実施例の処理の流れを示す図。 構文の解析例を示す図。 命令文同士の依存関係の付与の例を示す図。 影響波及範囲の設定による依存関係グラフを示す図。 図6にクラス及びメソッド関係を加えた図。 図6に示す命令文と命令文の繋がりの具体例を示す図。 依存関係を辿った影響波及調査の例を示す図。 影響波及範囲の結果を示す図。 従来例による影響波及の結果を示す図。 従来例による影響波及の結果を示す図。 従来例による影響波及の結果を示す図。 本実施例による影響波及の結果を示す図。
以下、本発明の実施例を図面に基づいて説明する。
図1は、本発明の実施例のプログラムの影響範囲設定装置の構成をブロックで示す図である。
図1において、プログラムの影響範囲設定装置100は、入力手段1、演算処理手段2、出力手段3及びデータベース4から構成される。
入力手段1には、外部から大規模システムの時に改修対象となるプログラム5及び基点となる命令文6が入力される。
演算処理手段2は次のような処理手段(機能)を備える。
・ソースコードの構文解析(すなわち文法解析)
・抽出構文木分析
・命令文検索
・命令文繋がりの形成
・共有命令文の抽出
・命令文による依存関係
・グラフの形成
・影響範囲の設定
・影響範囲の特定
出力手段3は、
・依存関係の辿り
・設定された影響範囲
・特定された影響範囲
を出力し、画面表示装置7の画面8に表示する。
データベース4は、演算処理手段2で演算処理されることで生成された命令文による依存関係グラフ(すなわちデータ)を格納する。
演算処理手段2について説明する。
ソースコードの構文解析手段は、プログラムのソースコードを構文解析する。
抽象構文木分析手段は、構文解析に基づいて階層構造としての抽象構文木に分析する。
命令文検索手段は、抽象構文木を形成する命令文を検索する。抽象構文木に表現されている全てのノード(行、命令文)について依存関係を分析し、命令文を検索する。
命令文繋がり作成手段は、検索された命令文から命令文の依存関係に従って命令文の繋がりを形成する。命令文の繋がりは複数のソースコードについて形成される。
共有命令文の抽出手段は、同一であるときに当該命令文はそれぞれのソースコードに共有された命令文として抽出する。
命令文による依存関係グラフの形成手段は、他のプログラムとの関係で、共有された命令文と依存関係で繋がった命令文との組み合わせを含んで複数のソースコードについて命令文による依存関係グラフを形成する。
影響波及範囲設定手段は、依存関係グラフを基にして、依存関係にある影響波及範囲を設定する。
影響波及範囲特定手段は、設定された影響波及範囲を基に、影響波及範囲を特定する。
図2は、本実施例を用いるエンジンの構成を示す。
エンジンは、言語依存部分と言語非依存部分とから構成される。(1)構文解析に際しては、各種のプラグイン、例えばA分析プラグイン、B分析プラグイン、C分析プラグインが用いられる。1つのプラグインでもよい。
図2に示すように、構文解析がなされ、抽出構文木が解析され、(2)依存関係分析がなされる。この分析によって依存関係が形成され、次いで(3)影響波及分析がなされる。この分析によって影響波及結果が生成される。
図3は、処理の流れを示す。
ソースコードについて(1)文法解析を行う(S1)。ソースコードだけでは不足する型情報等をバイトコードなどの補完情報で補完するようにしてもよい。ここで補完するとは、ソースコードだけでは不足する情報を補うための補足情報をいう。例えばJava(登録商標)言語におけるclassやjarファイルの情報を指す。
(1)構文解析に基づいて抽象構文木を形成し(S2)、(2)依存関係分析を行う(S3)。この分析結果により依存関係を形成し(S4)、影響の基点を基に、(3)影響波及分析を行う(S5)。この分析結果により影響波及結果を生成する(S6)。
図4は、ソースコードの構文解析手段及び抽象構文木分析手段によってソースコードの文法を解析し、抽象構文木を分析し形成することを示す。ここでは、人間の目で追うことに近付けるために、ソースコードの各命令文の意味を解析し、その結果を抽象構文木に変換する。抽象構文木を分析し、命令用語から命令文を検索する。
図5は、命令文同士の繋がりを分析することを示す。
例えば、メソッド呼出し文は、呼出先のメソッド宣言に繋がる。このように、メソッド呼出しだけでなく、変数の利用と宣言など、全ての命令文について繋がりを付与する。これを依存関係と呼ぶ。
依存関係は影響波及を辿る道筋として用いる。
図6は、影響波及範囲の設定及び影響波及範囲の特定を示す。
図6には、命令文1及び命令文2を基点とするソースコードの一連の命令文の繋がりが記載されている。
命令文1を起点とするソースコードと命令文2を起点とするソースコードは、命令文5は同一であると、それぞれのソースコードに共有された命令文となっていることを示す。
命令文5は命令文7、命令文8が繋がり、命令文7には命令文9が繋がる。
図に示すように命令文5、命令文7、命令文9は、他のプログラムとの関係で、それぞれのソースコードに共有された命令文の繋がりを形成している。
共有された命令文と依存関係で繋がった命令文との組み合わせを含んで複数のソースコードについての命令文による依存関係グラフが形成され、影響波及範囲が設定される。影響波及の調査は、命令文同士の依存関係を辿ることで行う。今、起点とされたソースコードの内、命令文2についてのソースコードを基点のソースコードとする。基点となる命令文2を指定し、基点となる命令文の依存関係を辿ることで設定された影響波及範囲が特定される。
図7は、図6に示す状態でクラスやメソッドとの関係を示す。
図7において、命令文はクラスやメソッドに所属している。
よって命令文を辿ることで、所属しているクラスやメソッドを特定することができる。例えば、命令文1はクラスAのメソッドαに所属している。
図8は、図6に示す命令文と命令文の繋がりを具体例で示す。
図8において、ソースコードの命令文単位で影響波及のルートが示され、影響波及対象の命令文は命令用語から自動的に抽出される。
図9は、依存関係を辿った影響波及調査の例を示す。
図9は、UseInfoクラスに定義されたnameプロパティが及ぼす影響範囲を特定する例を示す。この例では、nameプロパティが持つ値の変更に伴なって、改修またはテストが必要となる範囲を特定する。例えば、従来3桁で表現していた値を、10桁で表現するように修正する場合である。
図9の説明は次の通りである。
UserInfoクラスのフィールドに定義されたnameプロパティの変更に対する影響波及を調査する。
〔UserInfoクラスの影響波及〕
1.nameプロパティは、getName()メソッドおよびsetName(String)メソッドで用いられている。
getName()メソッドのreturn文でnameプロパティが返却されるため、getName()メソッドの呼出元に影響が波及する。
⇒UtilityクラスのmakeKey(Date, String)メソッドへ。
2.setName(String)メソッドでは、setName(String)メソッドの引数の値をnameプロパティに上書きするため、nameプロパティの変更に対する影響はなく、これ以上の波及はしない。
〔Utilityクラスの影響波及〕
1.userInfo.getName()の値に影響があるため、その値を用いた計算結果を格納するstring変数に影響が波及する。
2.string変数は、encryption.encrypt(String)メソッドに渡されるため、その計算結果であるencryptedString変数、およびencrypt(String)メソッドに影響が波及する
⇒Encryptionクラスのencrypt(String)メソッドへ。
3.encryptedString変数はmakeKey(Date, String)メソッドの戻り値となるため、makeKey(Date, String)メソッドの呼出元へ影響が波及する。
⇒Logicクラスのlogic()メソッドへ。
〔Encryptionクラスの影響波及〕
1.encrypt(String)メソッドのstring引数に影響があるため、その値を用いた命令文「process(string)」の引数に影響がある。
2.process(String)メソッドの引数のstring変数に影響があるため、その値を用いている「return string」命令文に影響がある。return文に影響があるため、process(String)メソッドの戻り値に影響するため、process(String)メソッドの呼出元に影響が波及する。
⇒Encryptionクラスのencrypt(String)メソッド(3)へ。
3.encryptedString変数をreturn文で返却しているため、encrypt(String)メソッドの呼出元に影響が波及する。
⇒UtilityクラスのmakeKey(Date, String)メソッドへ。
〔Logicクラスの影響波及〕
UtilityクラスのmakeKey(Date, String)の戻り値に影響があるため、その値をセットしているkey変数に影響がある。
key変数はその後に用いられていないため、ここで影響波及は終了となる。
図10は、本実施例による影響波及範囲調査による結果を呼出関係による影響波及調査との比較によって示す。呼出関係による影響波及調査方法では、影響のないクラス/メソッドが大量に抽出されるため、どこまで辿るかを人間が判断し、絞り込むことが必要となる。これに対して、本実施例では、影響波及調査された結果は、必要充分な結果であるため、どこまで辿るかという判断を必要としない。
本実施例によれば、文法を命令文単位に構文解析することで、
・命令文同士の依存関係を分析できる
・処理の流れを分析できる
という特徴を得ることができる。これにより、影響する命令文を辿ることができ、例えば「呼出関係」を中心とした影響波及調査の問題を解決できる。そして、図6、図7に示すように、影響の終着点を機械的に判断することができる。スパゲティコードのような場合にあっても必要な命令文関係を抽出することができる。
図11から図14は、本実施例による影響波及範囲調査による結果を呼出関係による影響波及調査との比較を具体的に示す。
図11から図13は、従来の呼出関係による影響波及調査の結果を示す。詳細内容は、これらの図に記述した。
図14は、本実施例による影響波及調査の結果を示す。
したがって、これらの比較から本実施例によれば、影響のないクラス及びメソッドが大量に抽出されることはなく、命令文と命令文の繋ぎによる依存関係を辿ることで影響波及範囲を特定することができる。
このように、本実施例は、大規模なシステムの改修の時に実施する影響波及調査の制度を向上させ、作業効率を向上させることができる。
1…入力手段、2…演算処理手段、3…出力手段、4…データベース、5…プログラム、6…基点となる命令文、7…画面表示装置、8…画面、100…プログラムの影響波及範囲設定装置。

Claims (2)

  1. 構文解析手段が、ソースコードの命令文の意味を解析して抽象構文木を生成する構文解析工程と、
    依存関係分析手段が、前記抽象構文木に含まれる命令文を検索し命令文同士の繋がりを分析することで、前記命令文の依存関係を生成する依存関係分析工程と、
    影響波及分析手段が、影響元の命令文と影響先の命令文を特定した前記依存関係に基づいて、影響元の命令文から影響先の命令文を辿り、さらに当該影響先の命令文を影響元の命令文として他の命令文を影響先の命令文として辿ることを、抽象構文木内の命令文について基点から繰り返すことで、影響波及範囲を特定する影響範囲分析工程と、
    を行う影響範囲調査方法。
  2. ソースコードの文法を解析して抽象構文木を生成する構文解析手段と、
    前記抽象構文木に含まれる命令文を検索し命令文同士の繋がりを分析することで、前記命令文の依存関係を生成する依存関係分析手段と、
    影響元の命令文から前記依存関係に基づいて影響先の命令文を特定し、当該影響先の命令文を影響元の命令文として前記依存関係に基づいて他の命令文を影響先の命令文として特定することを、抽象構文木内の命令文について基点から繰り返すことで、影響波及範囲を特定する影響範囲分析手段と、
    を備えた影響範囲調査装置。
JP2015210674A 2015-10-27 2015-10-27 影響範囲調査方法及び影響範囲調査装置 Active JP6011988B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2015210674A JP6011988B2 (ja) 2015-10-27 2015-10-27 影響範囲調査方法及び影響範囲調査装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015210674A JP6011988B2 (ja) 2015-10-27 2015-10-27 影響範囲調査方法及び影響範囲調査装置

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2011077018A Division JP2012212281A (ja) 2011-03-31 2011-03-31 プログラムの影響範囲設定装置、並びにこれを用いた影響範囲特定方法及び影響波及のあるプログラムの抽出方法

Publications (2)

Publication Number Publication Date
JP2016015175A JP2016015175A (ja) 2016-01-28
JP6011988B2 true JP6011988B2 (ja) 2016-10-25

Family

ID=55231248

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015210674A Active JP6011988B2 (ja) 2015-10-27 2015-10-27 影響範囲調査方法及び影響範囲調査装置

Country Status (1)

Country Link
JP (1) JP6011988B2 (ja)

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08328904A (ja) * 1995-03-31 1996-12-13 Hitachi Software Eng Co Ltd プログラム開発支援装置
JPH09101880A (ja) * 1995-10-04 1997-04-15 Fujitsu Ltd プログラム分析装置
JP2008191963A (ja) * 2007-02-06 2008-08-21 Nec Corp ソースコード検証システム、ソースコード検証方法、およびソースコード検証用プログラム

Also Published As

Publication number Publication date
JP2016015175A (ja) 2016-01-28

Similar Documents

Publication Publication Date Title
US20200293293A1 (en) Pruning Engine
US9389849B2 (en) Test case pattern matching
US20130179863A1 (en) Bug variant detection using program analysis and pattern identification
Svajlenko et al. Fast and flexible large-scale clone detection with CloneWorks.
US9569177B2 (en) Service extraction and application composition
US11775414B2 (en) Automated bug fixing using deep learning
Androutsopoulos et al. State-based model slicing: A survey
Nguyen et al. Cross-language program slicing for dynamic web applications
US9311058B2 (en) Jabba language
CN110059006B (zh) 代码审计方法及装置
Solanki et al. Comparative study of software clone detection techniques
Rahimian et al. RESource: a framework for online matching of assembly with open source code
KR101583932B1 (ko) 프로그램의 시그니처를 생성하는 시그니처 생성 장치 및 방법, 시그니처의 악성 코드를 검출하는 악성 코드 검출 장치 및 방법
WO2012133606A1 (ja) プログラムの影響範囲設定装置、並びにこれを用いた影響範囲特定方法及び影響波及のあるプログラムの抽出方法
Anderson et al. Supporting analysis of SQL queries in PHP AiR
JP6011988B2 (ja) 影響範囲調査方法及び影響範囲調査装置
Pirapuraj et al. Analyzing source code identifiers for code reuse using NLP techniques and WordNet
US8819645B2 (en) Application analysis device
JP6502044B2 (ja) データ解析装置、データ解析方法、および、プログラム。
Ali et al. An enhanced generic pipeline model for code clone detection
Mubarak-Ali et al. Enhancing Generic Pipeline Model for Code Clone Detection using Divide and Conquer Approach.
Grigorev et al. String-embedded language support in integrated development environment
WO2018116522A1 (ja) 判定装置、判定方法及び判定プログラム
JP2015035174A (ja) 制御プログラム分割装置、制御プログラム分割方法及びその記録媒体
Farah et al. Analysis of intercrossed open-source software repositories data in GitHub

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20151118

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20160817

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: 20160823

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160909

R150 Certificate of patent or registration of utility model

Ref document number: 6011988

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250