JP2010231513A - リファクタリング支援装置およびプログラム - Google Patents

リファクタリング支援装置およびプログラム Download PDF

Info

Publication number
JP2010231513A
JP2010231513A JP2009078451A JP2009078451A JP2010231513A JP 2010231513 A JP2010231513 A JP 2010231513A JP 2009078451 A JP2009078451 A JP 2009078451A JP 2009078451 A JP2009078451 A JP 2009078451A JP 2010231513 A JP2010231513 A JP 2010231513A
Authority
JP
Japan
Prior art keywords
variable
global
unit
software component
usage
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
JP2009078451A
Other languages
English (en)
Inventor
Naoki Yamazaki
直紀 山崎
Keiko Noda
桂子 野田
Kenichi Kamon
健一 賀門
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.)
Panasonic Corp
Original Assignee
Panasonic Corp
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 Panasonic Corp filed Critical Panasonic Corp
Priority to JP2009078451A priority Critical patent/JP2010231513A/ja
Publication of JP2010231513A publication Critical patent/JP2010231513A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

【課題】プログラムにおいて、適切に使用されていないグローバル変数を提示するリファクタリング支援装置を提供すること。
【解決手段】リファクタリング支援装置1に、プログラム内部で使用している関数とグローバル変数、およびグローバル変数に格納される全データを抽出する関数・変数情報抽出部4と、ソフトウェア部品内部のグローバル変数の使用データ比率を算出する変数データ解析部9と、前記変数データ解析部9で算出された使用データ比率が予め設定された判定比率以上かどうかを判定し、ソフトウェア部品内部のグローバル変数の用途を判定する変数用途判定部9とを備え、ソフトウェア部品間で依存関係にあるグローバル変数が適切に使用されているかどうかを判定する
【選択図】図1

Description

本発明は、システムのソフトウェア構造を解析し、リファクタリングを支援する支援装置およびそのプログラムに関するものである。
近年、システムの複合化や多機能化に伴い、製品に占めるソフトウェアの割合が大きくなり、ソフトウェアの開発量が増加し続けている。ソフトウェアの分野においては、開発効率を向上させるためにソフトウェアの再利用性や保守性が求められ、ソフトウェアの部品化や、品質を向上させる取り組みが進められている。
しかしながら、ソフトウェアの大規模化や開発期間の短縮につれて、複数人での開発が必要となり、ソフトウェア構造全体を把握しないまま開発に参加せざるを得ないといった状況も多くなり、そうした中で行われた機能拡張・変更等のソフトウェアの修正は、必ずしも適切に行なわれているとは限らず、長年、修正を繰り返すことによってソフトウェア構造や部品化が崩れてきたり、保守性が悪化してきたりする、といった状況が発生するようになった。
そこで、ソフトウェア構造を見直し改善すること、つまりリファクタリングの必要性が高くなり、効率よくリファクタリングを行なう手段としてソフトウェア構造を解析し、対象とするソフトウェア部品のインターフェース情報を出力する手段(例えば、特許文献1参照)や、ソフトウェア構造の解析結果を基に、最適なソフトウェアの分割箇所を提示する手段(例えば、特許文献2参照)を備えたリファクタリング支援装置があった。
ここで、特許文献1、および特許文献2に記載されたリファクタリング支援装置の原理モデルを図6に示す。図6において、リファクタリング支援装置1はプログラムを記憶するプログラム記憶部2と、前記プログラム記憶部2に記憶されたプログラムを解析する構文解析部3と、プログラム内部の関数・変数情報を抽出する関数・変数情報抽出部4と、ステートメント間の依存関係とステートメント・変数間の依存関係を解析する依存関係解析部5と、ユーザーが必要なステートメントを選択する情報入力部6と、解析結果を出力する解析結果出力部7から構成される。
以上のように構成されたリファクタリング支援装置は、プログラムを解析し、任意ステートメントにおけるインターフェース情報をユーザーに提示したり、解析された依存関係を基に最適なソフトウェアの分割箇所を提示したりすることができる。
特開2005−18114号公報 特開2008−176364号公報
しかしながら、前記従来の手段では、プログラム内部で使用している変数が最適化されており、適切に使用されている場合は問題ないが、必要以上に変数が存在したり、参照したりしている場合においては、インターフェース情報が肥大化し、ソフトウェアの最適な分割箇所を決定することが困難になる、といった課題を有していた。
そこで本発明は、前記従来の課題を解決するために、ソフトウェア部品間で依存関係にある変数を解析し、適切に使用されていない変数をユーザーに提示することにより、効率よくソフトウェアの部品化やリファクタリングが行なえるリファクタリング支援装置を提供することを目的とする。
本発明は、前記従来の課題を解決するために、プログラム内部で使用している関数とグローバル変数、およびグローバル変数に格納される全データを抽出する関数・変数情報抽出部と、前記関数・変数情報抽出部で抽出されたグローバル変数の全データ情報を基にソフトウェア部品内部のグローバル変数の使用データ比率を算出する変数データ解析部と、前記変数データ解析部で解析された使用データ比率が予め設定された判定比率以上かどうかを判定し、ソフトウェア部品内部でグローバル変数の用途を判定する変数用途判定部を備えたリファクタリング支援装置としたものである。
本発明は、ソフトウェア部品間で依存関係にあるグローバル変数の使用状況を解析し、必要以上にグローバル変数が存在したり、参照したりしている、といった適切に使用されていないグローバル変数を抽出することが可能となるため、リファクタリング時の問題点を容易に把握することを可能とし、効率よくリファクタリングを行なうことが可能となる。
第1の発明は、プログラム内部で使用している関数とグローバル変数、およびグローバル変数に格納される全データを抽出する関数・変数情報抽出部と、前記関数・変数情報抽出部で抽出されたグローバル変数の全データ情報を基に、ソフトウェア部品内部のグローバル変数の使用データ比率を算出する変数データ解析部と、前記変数データ解析部で算出された使用データ比率が予め設定された判定比率以上かどうかを判定し、ソフトウェア部品内部のグローバル変数の用途を判定する変数用途判定部とを備え、前記変数用途判定部において、ソフトウェア部品間で依存関係にある変数が適切に使用されているかどうかを判定し、不適切に使用されている変数を抽出することが可能となるため、ソフトウェア部品間のインターフェース情報の整理を支援することができる。
第2の発明は、特に、第1の発明の変数用途判定部において、ソフトウェア部品内部のグローバル変数の書込み回数と参照回数を解析し、ソフトウェア部品間で依存関係にあるグローバル変数がどのソフトウェア部品に所属するのかを判定する所属部品判定部を備え、グローバル変数が所属するソフトウェア部品と参照先のソフトウェア部品を提示することが可能となるため、ソフトウェア部品間のインターフェース情報の整理を支援することができる。
第3の発明は、特に、第1または第2の発明の変数用途判定部において、ソフトウェア部品内部のグローバル変数の使用状況を判定し、関連する他の変数を抽出する関連変数抽出部を備え、ソフトウェア部品間で依存関係にあるグローバル変数と関連する変数を抽出することが可能となるため、ソフトウェア部品間で依存関係にあるグローバル変数の役割を容易に把握することができる。
第4の発明は、特に、第1から第3のいずれか1つの発明の変数用途判定部において、ソフトウェア部品間で依存関係にあるグローバル変数の参照箇所の関数階層を解析し、予め設定された判定階層以内で参照されているかどうかを判定する参照階層判定部を備え、特別に深い関数階層で使用されている変数を抽出することが可能となるため、不適切に使用されている可能性がある変数を容易に把握することができる。
第5の発明は、特に、第1から第4の発明の変数用途判定部において、外部設定手段を備え、前記変数用途判定部の判定比率、参照階層判定部の判定階層を任意に設定・変更することができる。
第6の発明は、特に、第1から第5の全てもしくはいずれか1つの発明を機能させるための構成として、コンピュータを全てもしくは一部として機能させるものであり、汎用コンピュータやサーバーを用いて本発明の全てもしくは一部を容易に実現することができる。
以下、本発明の実施の形態について、図面を参照しながら説明する。なお、この実施の形態によって本発明が限定されるものではない。
(実施の形態1)
図1は、本発明における第1の実施の形態におけるリファクタリング支援装置の構成図を示したものである。
図1において、リファクタリング支援装置1は、プログラムを記憶するプログラム記憶部2と、前記プログラム記憶部2に記憶されたプログラムを解析する構文解析部3と、プログラム内部で使用している関数とグローバル変数、およびグローバル変数に格納される全データを抽出する関数・変数情報抽出部4と、情報入力部6を介して解析対象とするソフトウェア部品を指定するソフトウェア部品指定部8と、前記関数・変数情報抽出部4で抽出された関数・変数情報と前記ソフトウェア部品指定部8で指定されたソフトウェア部品間の依存関係を解析し、依存関係にあるグローバル変数とソフトウェア部品内部の使用箇所を抽出する依存関係解析部5と、前記関数・変数情報抽出部4で抽出されたグローバル変数の全データ情報を基に、前記依存関係解析部5で抽出されたグローバル変数の使用データ比率を算出する変数データ解析部9と、前記変数データ解析部9で算出された使用データ比率が予め設定された判定比率以上かどうかを判定し、前記依存関係解析部5で解析された使用箇所情報とからソフトウェア部品のグローバル変数の用途を判定する変数用途判定部10と、解析結果を出力する解析結果出力部7から構成される。ここで、変数用途判定部10には前記変数データ解析部9で算出された使用データ比率に応じてグローバル変数の用途を判定する判定比率が予め設定されているものとする。
以上のように構成されたリファクタリング支援装置について、以下その動作・作用を図3および図4のフローチャートを使用して説明する。
まず、リファクタリング支援装置1の構文解析部3において、プログラム記憶部2に記憶されたプログラムを取得し、前記構文解析部3の関数・変数情報抽出部4は取得したプログラムを解析し、使用している関数とグローバル変数、および前記グローバル変数に格納される全データを抽出する(ステップ1)。ソフトウェア部品指定部8は情報入力部6を介して解析対象とするソフトウェア部品を取得する(ステップ2)。依存関係解析部5は、前記関数・変数情報抽出部4で抽出されたグローバル変数と前記ソフトウェア部品指定部8で指定されたソフトウェア部品情報を基にソフトウェア部品間で使用されるグローバル変数とその使用データを抽出し、変数データ解析部9へ受け渡すと同時に、前記グローバル変数の使用箇所を抽出し、変数用途判定部10へ受け渡す(ステップ3)。前記変数データ解析部9は前記依存関係解析部5から取得したグローバル変数の使用データと前記関数・変数情報抽出部4で抽出されたグローバル変数の全データ情報を比較し、使用データ比率を算出し、変数用途判定部10へ受け渡す(ステップ4)。前記変数用途判定部10は、前記変数データ解析部9から取得したグローバル変数の使用データ比率と、依存関係解析部5から取得した前記グローバル変数の使用箇所情報を基に、前記グローバル変数のソフトウェア部品における用途を判定する(ステップ5)。ここで、前記変数データ解析部9から取得した使用データ比率が予め設定された判定比率以上(ステップ51)で、依存関係解析部5から取得した使用箇所において書込みを行なっていた場合、判定結果を「書込み」とし(ステップ52)、書込みを行なっていない場合、判定結果を「参照」
とする(ステップ53)。また、前記変数データ解析部9から取得した使用データ比率が予め設定された判定比率以下で、依存関係解析部5から取得した使用箇所において書込みを行なっていた場合、判定結果を「部分書込み」とし(ステップ54)、書込みを行なっていない場合、判定結果を「部分参照」とする(ステップ55)。例えば、前記依存関係解析部5から取得したグローバル変数の使用データが前記関数・変数情報抽出部4で抽出されたグローバル変数の全データ情報を満たしている場合、使用データ比率は100となり、依存関係解析部5から取得した使用箇所において書込みを行なっていた場合、全てのデータの変更を対象のソフトウェア部品で行なっていることになる。上記のように判定された判定結果を、解析結果出力部7を介して外部出力する(ステップ6)。
以上のように、本実施の形態においては、ソフトウェア部品間で依存関係にあるグローバル変数の用途を判定し、判定結果を基にグローバル変数が適切に使用されているかどうかを判定することが可能となるため、ソフトウェア部品間のインターフェース情報の整理を支援することができる。
例えば、ソフトウェア全体でグローバル変数が多く使用されている場合、各ソフトウェア部品でグローバル変数がどのように使用されているかどうかを把握することは困難であり、かなりの工数を費やしてソース自体を解析する必要があるが、本実施の形態においては、各プログラム部品で前記グローバル変数が変更されているのか、単に参照するために使用されているのか容易に把握することが可能となるので、プログラム部品で予期しない変更をされていても早期に発見することが可能となる。
また、本実施の形態においては、前記判定比率は情報入力部6を介して任意に設定・変更してもよいものとする。
(実施の形態2)
次に、本発明における第2の実施の形態について図2を使用して説明する。図2は実施の形態1を示す図1に対して、前記変数用途判定部10において、ソフトウェア部品間で依存関係にある変数の書込み回数と参照回数から変数が所属するソフトウェア部品と参照先のソフトウェア部品を判定する所属部品判定部11と、ソフトウェア部品内の変数の使用状況を判定し、関連する他の変数を抽出する関連変数抽出部12と、ソフトウェア部品間で依存関係にある変数の参照先ソフトウェア部品内において、参照箇所の関数階層を解析し、予め設定された関数階層以上で参照されている変数を抽出する参照階層判定部13を備えた構成とする。実施の形態2においては、実施の形態1に対して、所属部品判定部11を備えた構成とする。
以上のように構成されたリファクタリング支援装置について、以下その動作・作用を図5のフローチャートを使用して説明する。
まず、リファクタリング支援装置1の構文解析部3において、プログラム記憶部2に記憶されたプログラムを取得し、前記構文解析部3の関数・変数情報抽出部4は取得したプログラムを解析し、使用している関数とグローバル変数、および前記グローバル変数に格納される全データを抽出する(ステップ1)。ソフトウェア部品指定部8は情報入力部6を介して解析対象とするソフトウェア部品を取得する(ステップ2)。依存関係解析部5は、前記関数・変数情報抽出部4で抽出されたグローバル変数と前記ソフトウェア部品指定部8で指定されたソフトウェア部品情報を基にグローバル変数の使用箇所を抽出し、変数用途判定部10へ受け渡す(ステップ3)。所属部品判定部11は、前記依存関係解析部5から取得した前記グローバル変数の使用箇所情報を基に、各ソフトウェア部品内部の前記グローバル変数の書込み回数と参照回数を解析する(ステップ4)。全ソフトウェア部品内部の前記グローバル変数の書込み回数と参照回数を解析終了後、最も書込み回数が
大きいソフトウェア部品を所属するソフトウェア部品と判定(ステップ5)し、最も参照回数が大きいソフトウェア部品を参照先のソフトウェア部品と判定(ステップ6)し、解析結果を解析結果出力部7を介して外部出力する。
以上のように、本実施の形態においては、ソフトウェア部品内部の変数の書込み回数と参照回数を解析し、グローバル変数が所属するソフトウェア部品と参照先のソフトウェア部品を抽出することが可能となるため、ソフトウェア部品間のインターフェース情報の整理を支援することができる。
(実施の形態3)
次に、本発明における第3の実施の形態について図2を使用して説明する。実施の形態3においては、実施の形態2に対して、ソフトウェア部品内部の変数の使用状況を判定し、関連する他の変数を抽出する関連変数抽出部12を備えた構成とする。
これによってリファクタリング支援装置1は、依存関係解析部5で抽出されたグローバル変数情報とソフトウェア部品内部の使用箇所情報を基に、前記グローバル変数と関連するソフトウェア内部の変数を抽出することが可能になるため、ソフトウェア部品間で依存関係にあるグローバル変数の役割を容易に把握することができる。
例えば、ソフトウェア部品間でグローバル変数が多く使用されており、インターフェース情報が煩雑になっている場合、本実施の形態においては、関連する変数を抽出することが可能となるため、各グローバル変数の役割を容易に把握することを可能とし、容易にインターフェースを集約することが可能となる。
(実施の形態4)
次に、本発明における第4の実施の形態について図2を使用して説明する。実施の形態4においては、実施の形態3に対して、ソフトウェア部品間で依存関係にあるグローバル変数の参照箇所の関数階層を解析し、予め設定された関数階層以内で参照されているかどうかを判定する参照階層判定部13を備えた構成とする。ここで、前記参照階層判定部13にはグローバル変数が適切な階層で使用されているかどうかを判定する判定階層が予め設定されているものとする。
これによってリファクタリング支援装置1は、依存関係解析部5で抽出されたグローバル変数情報とソフトウェア部品内部の使用箇所情報を基に、前記グローバル変数が参照されている関数階層を判定し、予め設定された判定階層以上の関数階層で参照されている場合、前記グローバル変数を抽出することが可能となるため、特別に深い関数階層で使用されているグローバル変数を不適切に使用されている可能性がある変数として抽出することができる。
また、本実施の形態においては、前記判定階層は情報入力部6を介して任意に設定・変更してもよいものとする。
(実施の形態5)
次に本発明の実施の形態5について図2を用いて説明する。本実施例は、コンピュータを、プログラム記憶部2と、構文解析部3と、関数・変数情報抽出部4と、依存関係解析部5と、情報入力部6と、解析結果出力部7と、ソフトウェア部品指定部8と、変数データ解析部9と、変数用途判定部10と、所属部品判定部11と、関連変数抽出部12と、参照階層判定部13の全てもしくは一部として機能させるためのプログラムとする構成として、コンピュータを全てもしくは一部として機能させるものである。
以上のように本実施例によれば、汎用コンピュータやサーバーを用いて本発明の全てもしくは一部を容易に実現することができる。
以上のように本発明にかかるソフトウェア部品間で依存関係にあるグローバル変数を解析し、不適切に使用されているグローバル変数を抽出する方法は、ソフトウェア部品の独立化を促進し、リファクタリングの効率を上げることが可能となるため、ソフトウェアの品質や再利用性を向上させることができる。
本発明の実施の形態1におけるリファクタリング支援装置構成図 本発明の実施の形態2から携帯6におけるリファクタリング支援装置構成図 本発明の実施の形態1におけるフローチャート 本発明の実施の形態1における判定方法のフローチャート 本発明の実施の形態2におけるフローチャート 従来のリファクタリング支援装置の構成図
1 リファクタリング支援装置
2 プログラム記憶部
3 構文解析部
4 関数・変数情報抽出部
5 依存関係解析部
6 情報入力部
7 解析結果出力部
8 ソフトウェア部品指定部
9 変数データ解析部
10 変数用途判定部
11 所属部品判定部
12 関連変数抽出部
13 参照階層判定部

Claims (6)

  1. プログラム内部で使用している関数とグローバル変数、およびグローバル変数に格納される全データを抽出する関数・変数情報抽出部と、前記関数・変数情報抽出部で抽出されたグローバル変数の全データ情報を基に、ソフトウェア部品内部のグローバル変数の使用データ比率を算出する変数データ解析部と、前記変数データ解析部で算出された使用データ比率が予め設定された判定比率以上かどうかを判定し、ソフトウェア部品内部のグローバル変数の用途を判定する変数用途判定部とを備え、ソフトウェア部品間で依存関係にあるグローバル変数が適切に使用されているかどうかを判定するリファクタリング支援装置。
  2. 前記変数用途判定部において、ソフトウェア部品内部のグローバル変数の書込み回数と参照回数を解析し、ソフトウェア部品間で依存関係にあるグローバル変数がどのソフトウェア部品に所属するのかを判定する所属部品判定部を備え、グローバル変数が所属するソフトウェア部品と参照先のソフトウェア部品を抽出する請求項1記載のリファクタリング支援装置。
  3. 前記変数用途判定部において、ソフトウェア部品内部のグローバル変数の使用状況を判定し、関連する他のグローバル変数を抽出する関連変数抽出部を備えた請求項1または請求項2に記載のリファクタリング支援装置。
  4. 前記変数用途判定部において、ソフトウェア部品間で依存関係にあるグローバル変数の参照箇所の関数階層を解析し、予め設定された判定階層以内で参照されているかどうかを判定する参照階層判定部を備えた請求項1〜3いずれか1項に記載のリファクタリング支援装置。
  5. 外部設定手段を備え、前記変数用途判定部の判定比率、参照階層判定部の判定階層を任意に設定・変更可能とする請求項1〜4いずれか1項に記載のリファクタリング支援装置。
  6. コンピュータを請求項1〜5のいずれか1項に記載のリファクタリング支援装置の全てもしくは一部として機能させるためのプログラム。
JP2009078451A 2009-03-27 2009-03-27 リファクタリング支援装置およびプログラム Pending JP2010231513A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2009078451A JP2010231513A (ja) 2009-03-27 2009-03-27 リファクタリング支援装置およびプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009078451A JP2010231513A (ja) 2009-03-27 2009-03-27 リファクタリング支援装置およびプログラム

Publications (1)

Publication Number Publication Date
JP2010231513A true JP2010231513A (ja) 2010-10-14

Family

ID=43047258

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009078451A Pending JP2010231513A (ja) 2009-03-27 2009-03-27 リファクタリング支援装置およびプログラム

Country Status (1)

Country Link
JP (1) JP2010231513A (ja)

Similar Documents

Publication Publication Date Title
US9454467B2 (en) Method and apparatus for mining test coverage data
US9612946B2 (en) Using linked data to determine package quality
CN102902621A (zh) 应用性能评价和报告
US8671397B2 (en) Selective data flow analysis of bounded regions of computer software applications
JP2008210213A (ja) プロセス動作表示装置及びプロセス動作表示方法並びにプログラム
CN106886535A (zh) 一种适配多种数据源的数据抽取方法和装置
JP2017538996A5 (ja)
EP3244347A1 (en) Object recognition in an adaptive resource management system
JP4968325B2 (ja) ソフトウェア最適化装置、および最適化方法
JP2009211622A (ja) 契約定義関数検証装置、その方法及びそのプログラム
US9256405B1 (en) Code generation based on regional upsampling-based delay insertion
CN107590044B (zh) 一种分布式存储集群的测试方法、装置及设备
JP2013242709A (ja) 情報処理システム及びプログラム
Raheja et al. An efficient code clone detection model on Java byte code using hybrid approach
JP2010231513A (ja) リファクタリング支援装置およびプログラム
JP2009134360A (ja) モデル検査システム、モデル検査方法およびモデル検査用プログラム
JP5545133B2 (ja) 静的解析処理システム、方法、およびプログラム
US8495033B2 (en) Data processing
JP2005071372A (ja) コンピュータ支援設計ツールのデータモデルの一貫性を確認するためのシステムおよび方法
JP6398456B2 (ja) ソフトウェア生成装置
JP6085481B2 (ja) プログラマブル回路、演算処理方法
KR101705254B1 (ko) 장치 및 프로그램
JP2011028598A (ja) リファクタリング支援装置およびプログラム
WO2015085737A1 (en) Method and apparatus for mining test coverage data priority claim and related application
JP6677068B2 (ja) 実行時間推定装置、実行時間推定方法、及びプログラム