(57)【要約】【課題】プログラムの実装中に、好適に既存プログラムの再利用を支援する。【解決手段】ソースファイル監視部２２２は、実装を行うためにエディタでソースファイルが開かれたり変更されると、このソースファイルをアクティブソースファイルとして、ソースファイル解析部２３２に通知する。ソースファイル解析部２３２は、アクティブソースファイルから参照可能な定義データ（関数、変数等）に関する関数名、変数名、処理概要等の情報を取得し、解析結果格納部２７に格納する。補助画面制御部２６は、解析結果格納部２７に格納された情報を、補助画面１３２に表示する。【選択図】図２
2013097470.tif 000002
【特許請求の範囲】
【請求項１】
エディタでソースファイルが開かれた際に、前記ソースファイルをアクティブソースファイルとして検出する監視手段と、
前記監視手段がアクティブソースファイルを検出した際に、前記アクティブソースファイルを解析して、前記アクティブソースファイルから参照可能な定義データに関する情報を取得する解析手段と、
前記解析手段が取得した定義データに関する情報を補助画面に表示する補助画面表示手段と、
を備えることを特徴とするソースファイル再利用支援装置。
【請求項２】
前記監視手段は、前記エディタで開かれたソースファイルに変更が加えられたことを検知し、
前記解析手段は、前記監視手段がソースファイルの変更を検知した際に、前記ソースファイルを解析して、前記ソースファイルから参照可能な定義データに関する情報を再取得する、
ことを特徴とする請求項１に記載のソースファイル再利用支援装置。
【請求項３】
前記定義データは、前記アクティブソースファイル内で定義されているローカル定義データと、前記アクティブソースファイルから参照可能な他のソースファイル内で定義されている外部定義データとを含み、
前記解析手段は、前記ローカル定義データに関する情報と、前記外部定義データに関する情報とを取得し、
前記補助画面表示手段は、前記解析手段が取得した前記ローカル定義データに関する情報と前記外部定義データに関する情報とを区分して補助画面に表示する、
ことを特徴とする請求項１又は２に記載のソースファイル再利用支援装置。
【請求項４】
前記アクティブソースファイルに所定文字数以上の文字列が入力されたことを検出する入力監視手段と、
前記入力監視手段が所定文字数以上の文字列の入力を検出した際に、前記解析手段が取得した情報を検索して該文字列に前方一致する前記定義データの名称を取得する入力候補解析手段と、
前記入力候補解析手段が取得した定義データの名称を、前記アクティブソースファイルへの入力の候補として、ユーザが選択可能に表示する入力候補表示手段と、をさらに備える、
ことを特徴とする請求項１乃至３の何れか１項に記載のソースファイル再利用支援装置。
【請求項５】
前記補助画面に表示されている定義データに関する情報に変更が加えられた際に、該定義データを定義、及び、利用するソースファイルの部分を、加えられた変更内容と同様に変更する変更内容反映部をさらに備える、
ことを特徴とする請求項１乃至４の何れか１項に記載のソースファイル再利用支援装置。
【請求項６】
ソースファイル内の各関数の定義部分を比較して、複数の関数の間で処理内容が共通する部分を共通処理部分として検出する関数比較手段と、
前記関数比較手段が検出した共通処理部分が示す処理を関数化した共通処理関数を生成する共通処理関数生成手段と、
前記複数の関数の定義部分のうち前記共通処理部分があった部分を、前記共通処理関数を呼び出す部分に置換する置換手段と、
を備えることを特徴とするソースファイル再利用支援装置。
【請求項７】
前記関数比較手段は、前記複数の関数の間で処理内容が共通する部分を所定の基準と比較することで該共通する部分を共通化することの有用性を判別し、有用性があると判別した場合に、該共通する部分を共通処理部分として検出する、
ことを特徴とする請求項６に記載のソースファイル再利用支援装置。
【請求項８】
エディタで開かれたソースファイル、又は、エディタで変更が加えられたソースファイルをアクティブソースファイルとして検出し、
前記アクティブソースファイルを検出した際に、前記アクティブソースファイルを解析して、前記アクティブソースファイルから参照可能な定義データに関する情報を取得し、
取得した定義データに関する情報を補助画面に表示する、
ことを特徴とするソースファイル再利用支援方法。
【請求項９】
ソースファイル内の各関数の定義部分を比較して、複数の関数の間で処理内容が共通する部分を共通処理部分として検出し、
検出した共通処理部分が示す処理を関数化した共通処理関数を生成し、
前記複数の関数の定義部分のうち前記共通処理部分があった部分を、前記共通処理関数を呼び出す部分に置換する、
ことを特徴とするソースファイル再利用支援方法。
【請求項１０】
コンピュータを、
エディタで開かれたソースファイル、又は、エディタで変更が加えられたソースファイルをアクティブソースファイルとして検出する監視手段、
前記監視手段がアクティブソースファイルを検出した際に、前記アクティブソースファイルを解析して、前記アクティブソースファイルから参照可能な定義データに関する情報を取得する解析手段、
前記解析手段が取得した定義データに関する情報を補助画面に表示する補助画面表示手段、
として機能させるプログラム。
【請求項１１】
コンピュータを、
ソースファイル内の各関数の定義部分を比較して、複数の関数の間で処理内容が共通する部分を共通処理部分として検出する関数比較手段、
前記関数比較手段が検出した共通処理部分が示す処理を関数化した共通処理関数を生成する共通処理関数生成手段、
前記複数の関数の定義部分のうち前記共通処理部分があった部分を、前記共通処理関数を呼び出す部分に置換する置換手段、
として機能させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、既存のソースファイルの再利用を支援するソースファイル再利用支援装置、ソースファイル再利用支援方法、及び、プログラムに関する。
【背景技術】
【０００２】
設備機器用のコントローラの機能をアップデートするためには、組み込まれている既存のプログラム（ソースファイル）に新たなプログラムを追加したり修正する必要がある。このようなプログラムの追加や修正を行う場合、機能が類似している既存のプログラム内の関数等を利用（流用）すれば、プログラムの作成やテストなどに費やす工数を削減することができ、生産性を向上させることができる。
【０００３】
しかしながら、このように既存のプログラムの関数等を流用するためには、人が手作業により、既存のプログラムを比較的詳細に解析する必要がある。従って、既存のプログラムを解析しきれないなどの理由により、プログラム内の関数等を流用できない場合も多かった。
【０００４】
また、このような問題を解決するため、プログラムを解析するための技術も知られている。例えば、特許文献１には、ソースコードを解析して、関数の呼び出し関係と、関数とモジュールとの包含関係とを得て、設定したモジュール単位で表した、モジュール間呼出関連図を作成する技術について開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００８−２９３４８６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、このような技術は開発前のプログラム全体の構造を解析する構造調査で利用されるのが一般的である。従って、プログラムを実装（コーディング）する際には、構造調査で出力された資料から関連する部分を人が手作業で探して既存関数を流用できるか否かを検討する必要があり、調査結果の有効な活用が出来ていなかった。
【０００７】
本発明は、上記実情に鑑みてなされたものであり、プログラムの実装中に、好適に既存プログラムの再利用を支援することができるソースファイル再利用支援装置、ソースファイル再利用支援方法、及び、プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するため、本発明のソースファイル再利用支援装置は、
エディタでソースファイルが開かれた際に、前記ソースファイルをアクティブソースファイルとして検出する監視手段と、
前記監視手段がアクティブソースファイルを検出した際に、前記アクティブソースファイルを解析して、前記アクティブソースファイルから参照可能な定義データに関する情報を取得する解析手段と、
前記解析手段が取得した定義データに関する情報を補助画面に表示する補助画面表示手段と、
を備えることを特徴とする。
【発明の効果】
【０００９】
本発明によれば、エディタでソースファイルが開かれた際、又は、エディタでソースファイルに変更が加えられた際に、このソースファイルの解析がなされる。従って、プログラムの実装中に、好適に既存プログラムの再利用を支援することができる。
【図面の簡単な説明】
【００１０】
【図１】本発明の第１の実施形態に係るソースファイル再利用支援装置の物理的な構成を示す図である。
【図２】本発明の第１の実施形態に係るソースファイル再利用支援装置の機能構成図である。
【図３】フォルダとソースファイルとの関係を説明するための図である。
【図４】指定フォルダ解析処理の動作を説明するためのフローチャートである。
【図５】アクティブソースファイル解析処理の動作を説明するためのフローチャートである。
【図６】補助画面の例を示す図である。
【図７】入力候補表示処理の動作を説明するためのフローチャートである。
【図８】入力候補が選択可能に表示されるエディタ画面の例を示す図である。
【図９】本発明の第２の実施形態に係るソースファイル再利用支援装置の機能構成図である。
【図１０】関数名を変更した際に実行される変更内容反映処理の動作を説明するためのフローチャートである。
【図１１】関数の処理概要を変更した際に実行される変更内容反映処理の動作を説明するためのフローチャートである。
【図１２】関数の引数を変更した際に実行される変更内容反映処理の動作を説明するためのフローチャートである。
【図１３】本発明の第３の実施形態に係るソースファイル再利用支援装置の機能構成図である。
【図１４】共通関数処理の動作を説明するためのフローチャートである。
【図１５】共通関数処理を具体的に説明するための図である。
【発明を実施するための形態】
【００１１】
以下、本発明の各実施形態について、図面を参照しながら詳細に説明する。なお、図中同一または相当部分には同一符号を付す。また、特に言及が無い場合、ソースファイル（ソースコード）はＣ言語で記載されているものとして説明する。
【００１２】
<<第１の実施形態>>
本発明の第１の実施形態に係るソースファイル再利用支援装置１００について説明する。このソースファイル再利用支援装置１００は、既存のソースファイル（ソースコード）内で定義されている関数や変数等の再利用（流用）を支援するための装置である。
【００１３】
ソースファイル再利用支援装置１００は、物理的には、図１に示すように、通信部１１と、操作部１２と、表示部１３と、記憶部１４と、入出力Ｉ／Ｆ部１５と、制御部１６と、を備える。各部はバス１７を介して互いに接続されている。
【００１４】
通信部１１は、通信ネットワーク２を介して、ネットワーク２上の図示せぬ情報処理装置等と通信を行うものであり、通信インタフェース等を備える。例えば、通信部１１は、再利用の対象とするソースファイル等を、これらネットワーク２上の情報処理装置から受信してもよい。
【００１５】
操作部１２は、ソースファイル再利用支援装置１００に様々な情報を入力するために使用するものであり、キーボード等の入力装置を備える。
【００１６】
表示部１３は、様々な情報を出力するものであり、液晶ディスプレイ等の表示装置を備える。また、表示部１３には、エディタ画面１３１と補助画面１３２とが表示される。エディタ画面１３１は、ソースファイルを実装（コーディング）用の専用のエディタで開いた際に表示される画面であり、エディタ画面１３１上から、ソースファイルを編集等することが可能である。補助画面１３２は、エディタ画面１３１に表示されているソースファイル内から参照可能な関数、変数、定数等に関する各種の情報が表示される画面である。補助画面１３２の詳細については後述する。
【００１７】
記憶部１４は、様々な情報、プログラム、及び、ソフトウェア開発ツールやエディタなどのアプリケーション等を記憶するものであり、ハードディスク等の補助記憶装置を備える。
【００１８】
入出力Ｉ／Ｆ部１５は、入出力機器３を接続するためのインタフェースである。例えば、処理の対象となるソースファイルを、通信部１１ではなく、入出力Ｉ／Ｆ部１５を介して、ＣＤ−ＲＯＭドライブ等の入出力機器３から取り込むこともできる。
【００１９】
制御部１６は、データの演算処理を行うと共に、バス１７を介して通信部１１、操作部１２、出力部１３、記憶部１４、入出力Ｉ／Ｆ部１５を制御するものであり、ＣＰＵ（Central Processing Unit）１６ａ、ＲＯＭ（Read Only Memory）１６ｂ、ＲＡＭ（Random Access  Memory）１６ｃ等を備える。制御部１６における演算処理及び制御処理は、具体的には、ＣＰＵ１６ａが、ＲＡＭ１６ｃを作業領域として使用して各種データを一時的に記憶させながら、ＲＯＭ１６ｂに記憶されている制御プログラムを実行することにより行われる。
【００２０】
ソースファイル再利用支援装置１００は、機能的には、図２に示すように、ソースファイル格納部２１と、解析対象監視部２２と、ファイル解析部２３と、エディタ画面制御部２４と、入力候補解析部２５と、補助画面制御部２６と、解析結果格納部２７とを備える。なお、これらの各構成要素のうち解析対象監視部２２と、ファイル解析部２３と、エディタ画面制御部２４と、入力候補解析部２５と、補助画面制御部２６とは、図１に示した制御部１６が、同じく図１に示した通信部１１、操作部１２、出力部１３、記憶部１４、又は入出力Ｉ／Ｆ部１５を制御することにより実現される。また、ソースファイル格納部２１と解析結果格納部２７とは、図１に示す記憶部１４により主に実現される。
【００２１】
ソースファイル格納部２１には、再利用の対象となるソースファイルが格納されている。なお、各ソースファイルは、機能やプロジェクトやライブラリ等に対応したフォルダ毎に格納されており、ソースファイル格納部２１には、ソースファイルが格納されているフォルダの構成情報も含めて記憶されている。
また、ソースファイルが格納されるフォルダのなかから指定フォルダが設定される。ソースファイルで定義されている外部変数と外部関数は、指定フォルダおよび指定フォルダ以下のフォルダ内の他のソースファイルからのみ参照可能となる。
【００２２】
ここで、図３を参照して、フォルダとソースファイルとの関係について説明する。フォルダＡには、ソースファイル「ａａａ．ｃ」、「ｂｂｂ．ｃ」、「ｃｃｃ．ｃ」、及び、フォルダＢ、Ｃが格納されている。また、フォルダＢ、Ｃには、それぞれ、ソースファイル「ｄｄｄ．ｃ」、「ｅｅｅ．ｃ」とソースファイル「ｆｆｆ．ｃ」、「ｇｇｇ．ｃ」とが格納されている。また、例えば、フォルダＡが指定フォルダに設定されている場合は、この図の全てのソースファイル間で、外部変数、外部関数を参照可能である。
【００２３】
図２に戻り、解析対象監視部２２は、フォルダ監視部２２１と、ソースファイル監視部２２２とを備える。
【００２４】
フォルダ監視部２２１は、ソースファイル格納部２１内のソースファイルが格納されているフォルダを監視して、指定フォルダが新たに設定された場合、または、指定フォルダの変更があった場合に、その旨をファイル解析部２３に通知する。
【００２５】
ソースファイル監視部２２２は、ソースファイル格納部２１内のソースファイルを監視し、エディタで開かれた、又は、エディタ上で変更が加えられたソースファイル（アクティブソースファイル）を検知し、その旨をファイル解析部２３に通知する。
【００２６】
ファイル解析部２３は、フォルダ解析部２３１と、ソースファイル解析部２３２とを備える。
【００２７】
フォルダ解析部２３１は、フォルダ監視部２２１によって通知された指定フォルダ以下に格納されている全てのソースファイル内で定義されている関数や変数や定数等に関する情報を取得し、フォルダデータ格納部に格納する。なお、本実施形態では、define構文で定義されているものを定数として扱う。
【００２８】
ソースファイル解析部２３２は、ソースファイル監視部２２２によって通知されたアクティブソースファイルを解析して、アクティブソースファイル内から参照可能な、関数や変数等の定義データに関する情報を取得する。この際、フォルダ解析部２３１は、アクティブソースファイル内で定義された定義データ（ローカル定義データ）と、アクティブソースファイル以外のソースファイルで定義された定義データ（外部定義データ）とを区別して各定義データに関する情報を取得し、取得した情報を解析結果格納部２７のローカルデータ格納部２７１および外部データ格納部２７２に格納する。
【００２９】
エディタ画面制御部２４は、エディタでソースファイルを開いた際に表示部１３に表示されるエディタ画面１３１の表示を制御する。エディタ画面制御部２４は、ファイル内容表示部２４１と、入力データ監視部２４２と、入力候補表示部２４３とを備える。
【００３０】
ファイル内容表示部２４１は、エディタ画面制御部２４の主要な機能を担い、エディタ画面１３１に表示されるソースファイルの内容を制御する。例えば、ファイル内容表示部２４１は、ユーザからの操作に応じて、エディタ画面１３１に表示されているソースファイルをスクロールさせたり、ハイライト表示させたりする表示制御を行う。
【００３１】
入力データ監視部２４２は、エディタ画面１３１に表示されているソースファイルへの入力を監視し、所定文字数以上（例えば、３文字以上）のスペースを含まない連続した文字列の入力が有った際に、その文字列を入力候補解析部２５に出力する。
【００３２】
入力候補表示部２４３は、入力候補解析部２５によって検出された現在入力中の文字列に対応する入力の候補を、エディタ画面１３１上に表示する。
【００３３】
図２に戻り、入力候補解析部２５は、入力データ監視部２４２から入力された文字列で入力候補格納部２７４内のローカル候補リスト２７４ａと外部候補リスト２７４ｂとを検索し、入力の候補となる関数や変数の一覧を取得する。
【００３４】
補助画面制御部２６は、補助画面１３２の表示を制御する。また、補助画面制御部２６は、ローカルデータ表示部２６１と、外部データ表示部２６２と、フォルダデータ表示部２６３とを備える。ローカルデータ表示部２６１は、ローカルデータ格納部２７１に格納されている情報を補助画面１３２に表示するための制御を行う。外部データ表示部２６２は、外部データ格納部２７２に格納されている情報を補助画面１３２に表示するための制御を行う。フォルダデータ表示部２６３は、フォルダデータ格納部２７３に格納されている情報を補助画面１３２に表示するための制御を行う。
【００３５】
解析結果格納部２７には、ファイル解析部２３と入力候補解析部２５とによって解析された解析結果が格納される。解析結果格納部２７は、ローカルデータ格納部２７１と、外部データ格納部２７２と、フォルダデータ格納部２７３と、入力候補格納部２７４とを備える。
【００３６】
ローカルデータ格納部２７１には、ソースファイル解析部２３２によって取得されたローカル定義データに関する情報が記憶される。具体的には、ローカルデータ格納部２７１には、アクティブソースファイル内で定義された関数、変数、及び、定数に関する情報のリスト（ローカル関数リスト２７１ａ、ローカル変数リスト２７１ｂ、ローカル定数リスト２７１ｃ）が格納される。
なお、関数に関する情報は、例えば、関数名、処理概要、引数の型、及び、戻り値の型等を示す情報である。また、変数に関する情報は、例えば、変数名、変数の内容、及び、変数の型等を示す情報である。また、定数に関する情報は、例えば、定数名、定数の内容、及び、定数の値等を示す情報である。
【００３７】
外部データ格納部２７２には、ソースファイル解析部２３２によって取得された外部定義データに関する情報が記憶される。具体的には、外部データ格納部２７２には、アクティブソースファイル以外のソースファイルで定義され、且つ、アクティブソースファイルから外部参照可能な関数、変数、及び、定数に関する情報のリスト（外部関数リスト２７２ａ、外部変数リスト２７２ｂ、外部定数リスト２７２ｃ）が格納される。
【００３８】
フォルダデータ格納部２７３には、フォルダ解析部２３１によって取得された情報が記憶される。具体的には、フォルダデータ格納部２７３には、指定フォルダ以下に格納されている全てのソースファイル内で定義されている関数、変数、及び、定数に関する情報のリスト（全関数リスト２７３ａ、全変数リスト２７３ｂ、全定数リスト２７３ｃ）が格納される。
【００３９】
入力候補格納部２７４には、入力候補解析部２５によって取得された入力の候補となる関数や変数のリスト（ローカル候補リスト２７４ａ、外部候補リスト２７４ｂ）が格納される。
【００４０】
続いて、ソースファイル再利用支援装置１００の動作について説明する。
【００４１】
（指定フォルダ解析処理）
始めに、指定フォルダ内のソースファイルを解析する指定フォルダ解析処理について説明する。
【００４２】
ユーザは、例えば、ソースファイル再利用支援装置１００の操作部１２を操作して、ＩＤＥ（Integrated Development Environment）等のプログラム開発ツールのメニュー画面から指定フォルダ設定メニューを開き、指定フォルダを新たに指定したり、指定フォルダを変更するための操作を行う。フォルダ監視部２２１は、常時（あるいは定期的に）、指定フォルダを監視しており、指定フォルダが新たに作成されたり、又は、変更された場合、その旨をフォルダ解析部２３１に通知する。フォルダ解析部２３１は、フォルダ監視部２２１からの通知に応答して、図４のフローチャートに示す指定フォルダ解析処理を実行する。
【００４３】
指定フォルダ解析処理が実行されると、まず、フォルダ解析部２３１は、フォルダデータ格納部２７３に格納されている全関数リスト２７３ａ、全変数リスト２７３ｂ、全定数リスト２７３ｃをクリアする（ステップＳ１０１）。
【００４４】
続いて、フォルダ解析部２３１は、フォルダ監視部２２１から、新たに設定された、又は変更されたと通知された指定フォルダおよび指定フォルダ以下のフォルダに格納されているソースファイルのなかから、未処理のソースファイルを１つ選択する（ステップＳ１０１）。
【００４５】
続いて、フォルダ解析部２３１は、選択したソースファイルを解析して、ソースファイル内で定義されている関数(但し、main関数は除く)を抽出する（ステップＳ１０１）。そして、フォルダ解析部２３１は、抽出した関数毎に、関数名、処理概要、引数の型、戻り値の型、等の情報を取得し、所定の形式（例えば、ＣＳＶ（Comma Separated Values）形式）でリスト化した全関数リスト２７３ａを作成して、フォルダデータ格納部２７３に登録する（ステップＳ１０２）。なお、既に全関数リスト２７３ａが存在している場合、フォルダ解析部２３１は、全関数リスト２７３ａに取得した情報を追加する。
なお、関数の抽出、および、抽出した関数の関数名、引数及び戻り値の型等の取得は、ソースファイルを公知の手法により構文解析することで実現可能である。また、関数の処理概要は、予め決められたルールに基づいて、関数定義文の直前のコメント文等から取得すればよい。
【００４６】
続いて、フォルダ解析部２３１は、選択したソースファイルを解析して、このソースファイル内で定義されている変数を抽出する（ステップＳ１０１）。そして、フォルダ解析部２３１は、抽出した各変数の、変数名、概要、型等の情報を取得し、所定の形式でリスト化した全変数リスト２７３ｂを作成して、フォルダデータ格納部２７３に登録する（ステップＳ１０２）。なお、既に全変数リスト２７３ｂが存在している場合、フォルダ解析部２３１は、全関数リスト２７３ａに取得した情報を追加する。
なお、変数の抽出、および、抽出した変数の変数名、型等の取得は、ソースファイルを公知の手法により構文解析することで実現可能である。また、変数の概要等の情報は、予め決められたルールに基づいて、変数定義文の直前のコメント文等から取得すればよい。
【００４７】
続いて、フォルダ解析部２３１は、選択したソースファイルを解析して、このソースファイル内で定義されている定数を抽出する（ステップＳ１０１）。そして、フォルダ解析部２３１は、抽出した各定数の、定数名、概要、値等の情報を取得し、所定の形式でリスト化した全定数リスト２７３ｃを作成して、フォルダデータ格納部２７３に登録する（ステップＳ１０２）。なお、既に全定数リスト２７３ｃが存在している場合、フォルダ解析部２３１は、全定数リスト２７３ｃに取得した情報を追加する。
なお、定数の抽出、および、抽出した定数の定数名、値等の取得は、ソースファイルを公知の手法により構文解析することで実現可能である。また、定数の概要等の情報は、予め決められたルールに基づいて、定数定義文の直前のコメント文から取得すればよい。
【００４８】
続いて、フォルダ解析部２３１は、指定フォルダおよび指定フォルダ以下のフォルダに格納されている全てのソースファイルについて、ステップＳ１０１〜ステップＳ１０２の処理が完了したか否かを判別する（ステップＳ１０１）。全てのソースファイルで処理が完了していないと判別した場合（ステップＳ１０１；Ｎｏ）、フォルダ解析部２３１は、未処理のソースファイルを選択し、選択したソースファイルで定義されている関数、変数、定数を抽出し、関連する情報をフォルダデータ格納部２７３に格納する一連の処理（ステップＳ１０１〜ステップＳ１０２）を繰り返す。全てのソースファイルで処理が完了したと判別した場合（ステップＳ１０１；Ｙｅｓ）、指定フォルダ解析処理は終了する。
【００４９】
なお、指定フォルダ解析処理が終了時に、その旨を補助データ制御部のフォルダデータ表示部２６３に通知し、フォルダデータ表示部２６３が、フォルダデータ格納部２７３に格納されている情報を補助画面１３２に表示してもよい。
【００５０】
（アクティブソースファイル解析処理）
続いて、エディタ画面１３１に表示したり、エディタ画面１３１から変更を加えたアクティブソースファイルを解析するアクティブソースファイル解析処理について説明する。
【００５１】
ユーザは、例えば、ソースファイル再利用支援装置１００の操作部１２を操作して、ソースファイルをエディタ画面１３１上に開いたり、表示させたソースファイルを編集（変更）する。ソースファイル監視部２２２は、このように、エディタ画面１３１上に開かれたり、変更が加えられたソースファイル（アクティブソースファイル）を検知し、その旨をソースファイル解析部２３２に通知する。ソースファイル解析部２３２は、ソースファイル監視部２２２からの通知を受けて、図５のフローチャートに示すアクティブソースファイル解析処理を実行する。
なお、本実施形態では、エディタ画面上で変更したソースファイルが保存されたタイミングで、ソースファイルに変更が加えられたことを検知する。なお、このタイミング以外にも、エディタ画面上で改行が入力されたタイミングや、エディタ画面上で変更が加えられてから所定時間が経過したタイミングで、ソースファイルに変更が加えられたことを検知してもよい。
【００５２】
アクティブソースファイル解析処理が実行されると、まず、ソースファイル解析部２３２は、ローカルデータ格納部２７１と外部データ格納部２７２に記憶されているリストをクリアする（ステップＳ２０１）。
【００５３】
続いて、ソースファイル解析部２３２は、ソースファイル解析部２３２から通知されたアクティブソースファイルを解析して、アクティブソースファイル内で定義されているmain関数以外の関数（ローカル関数）を抽出する（ステップＳ２０２）。
【００５４】
続いて、ソースファイル解析部２３２は、アクティブソースファイルを解析して、抽出した各ローカル関数に関する情報（関数名、処理概要、引数の型と概要、戻り値の型と概要等）を取得し、所定の形式（例えば、ＣＳＶ形式）でリスト化したローカル関数リスト２７１ａを作成して、ローカルデータ格納部２７１に登録する（ステップＳ２０３）。
【００５５】
続いて、ソースファイル解析部２３２は、アクティブソースファイルを解析して、アクティブソースファイル内で定義されている変数（ローカル変数）を抽出する（ステップＳ２０４）。
【００５６】
続いて、ソースファイル解析部２３２は、アクティブソースファイルを解析して、抽出した各ローカル変数の、変数名、概要、型等の情報を取得し、所定の形式でリスト化したローカル変数リスト２７１ｂを作成して、ローカルデータ格納部２７１に登録する（ステップＳ２０５）。
【００５７】
続いて、ソースファイル解析部２３２は、アクティブソースファイルを解析して、アクティブソースファイル内で定義されている定数（ローカル定数）を抽出する（ステップＳ２０６）。具体的には、ソースファイル解析部２３２は、アクティブソースファイル内のdefine構文で定義されている定数をローカル定数として抽出すればよい。
【００５８】
続いて、ソースファイル解析部２３２は、アクティブソースファイルを解析して、抽出した各ローカル定数の、定数名、概要、値等の情報を取得し、所定の形式でリスト化したローカル定数リスト２７１ｃを作成して、ローカルデータ格納部２７１に登録する（ステップＳ２０７）。
【００５９】
続いて、ソースファイル解析部２３２は、アクティブソースファイルを解析して、アクティブソースファイルから参照可能であり、且つ、アクティブソースファイル以外のソースファイルで定義されている関数（外部関数）を抽出する（ステップＳ２０８）。例えば、ソースファイル解析部２３２は、アクティブデータファイルがインクルードしているヘッダファイル（stdio.h、math.hなどの標準Ｃライブラリで定義されているものは除く）を解析して、ヘッダファイル内で定義されている関数を外部関数として抽出すればよい。
【００６０】
続いて、ソースファイル解析部２３２は、ヘッダファイルを解析して、抽出した各外部関数の、関数名、処理概要、引数の型と概要、戻り値の型と概要、等の情報を取得し、所定の形式でリスト化した外部関数リスト２７２ａを作成して、外部データ格納部２７２に登録する（ステップＳ２０９）。
【００６１】
続いて、ソースファイル解析部２３２は、アクティブソースファイルを解析して、アクティブソースファイルから参照可能であり、且つ、アクティブソースファイル以外のソースファイルで定義されている変数（外部変数）を抽出する（ステップＳ２１０）。例えば、ソースファイル解析部２３２は、アクティブデータファイルがインクルードしているヘッダファイル（stdio.h、math.hなど標準Ｃライブラリで定義されているものは除く）を解析して、ヘッダファイル内で定義されている変数を外部変数として抽出すればよい。
【００６２】
続いて、ソースファイル解析部２３２は、抽出した各外部変数の、変数名、概要、型等の情報を取得し、所定の形式でリスト化した外部変数リスト２７２ｂを作成して、外部データ格納部２７２に登録する（ステップＳ２１１）。
【００６３】
続いて、ソースファイル解析部２３２は、アクティブソースファイルを解析して、アクティブソースファイルから参照可能であり、且つ、アクティブソースファイル以外のソースファイルで定義されている定数（外部定数）を抽出する（ステップＳ２１２）。例えば、ソースファイル解析部２３２は、アクティブデータファイルがインクルードしているヘッダファイル（stdio.h、math.hなど標準Ｃライブラリで定義されているものは除く）を解析して、ヘッダファイル内のdefine構文で定義されている定数を外部定数として抽出すればよい。
【００６４】
続いて、ソースファイル解析部２３２は、抽出した各外部定数の、定数名、概要、値等の情報を取得し、所定の形式でリスト化した外部定数リスト２７２ｃを作成して、外部データ格納部２７２に登録する（ステップＳ２１３）。
【００６５】
続いて、補助画面制御部２６は、ローカルデータ格納部２７１、外部データ格納部２７２、および、フォルダデータ格納部２７３に格納されている情報を表示するための補助画面１３２を表示部１３に表示する（ステップＳ２１４）。
【００６６】
ここで、補助画面１３２の例を図６（Ａ）〜（Ｃ）に示す。ユーザは、操作部１２を操作して、補助画面の上下に並んだタブからそれぞれ１つを選択する。補助画面制御部２６は、選択されたタブに応じて、表示内容を適宜切り替える。
【００６７】
例えば、図６に示す補助画面の左の縦に並んだ３つの「ローカル」タブ、「外部」タブ、「フォルダ」タブは、定義データが定義されている場所に応じて情報の種類を切り換えるためのタブである。また、補助画面の上の横に並んだ３つの「関数」タブ、「変数」タブ、「定数」タブは、表示される情報の種類を切り換えるためのタブである。
【００６８】
例えば、「ローカル」タブと「関数」タブとが選択された場合、補助画面制御部２６のローカルデータ表示部２６１は、ローカルデータ格納部２７１内のローカル関数リスト２７１ａの内容を一覧表示する図６（Ａ）に示すような補助画面を制御部に表示する。
【００６９】
また、「外部」タブと「変数」タブとが選択された場合、補助画面制御部２６の外部データ表示部２６２は、外部データ格納部２７２内の外部変数リスト２７２ｂの内容を一覧表示する図６（Ｂ）に示すような補助画面を制御部に表示する。
【００７０】
また、「フォルダ」タブと「定数」タブとが選択された場合、補助画面制御部２６のフォルダデータ表示部２６３は、フォルダデータ格納部２７３内の全定数リスト２７３ｃの内容を一覧表示する図６（Ｃ）に示すような補助画面を制御部に表示する。
【００７１】
なお、補助画面１３２上の項目をクリックすることで、クリックした項目で表示される内容を昇順、降順にソートしたり、補助画面１３２内に表示されている内容から指定文字列の検索や、指定文字列を含むものだけを一覧表示する等のテキスト操作も、補助画面１３２上から行えるものとする。以上でアクティブソースファイル解析処理は終了する。
【００７２】
（入力候補表示処理）
続いて、入力候補表示処理について説明する。
【００７３】
ユーザは、操作部１２を操作して、エディタ画面１３１上に表示されているソースファイルに文字を入力する。エディタ画面制御部２４の入力データ監視部２４２は、ソースファイルへの入力を常時監視しており、スペースや等号等を含まない連続した所定文字数以上（例えば、３文字以上）の連続した文字の入力を検知すると、入力された文字列を入力候補解析部２５に通知し、入力候補解析部２５は、図７に示す入力候補表示処理を実行する。
【００７４】
まず、入力候補解析部２５は、入力データ監視部２４２から通知された所定文字数の文字列に前方一致する開発言語（本実施形態ではＣ言語）の予約語（while，switch，return等）が有るか否かを判別する（ステップＳ３０１）。
前方一致する予約語があると判別した場合（ステップＳ３０１；Ｙｅｓ）、入力候補解析部２５は、その予約語を入力候補表示部２４３に通知する。そして、入力候補表示部２４３は、通知された予約語を、入力の候補としてエディタ画面１３１上に表示し（ステップＳ３０２）、入力候補表示処理は終了する。
【００７５】
前方一致する予約語がないと判別した場合（ステップＳ３０１；Ｎｏ）、入力候補解析部２５は、ローカルデータ格納部２７１内のローカル関数リスト２７１ａ、ローカル変数リスト２７１ｂ、及び、ローカル定数リスト２７１ｃを検索して、入力データ監視部２４２から通知された所定文字数の文字列に前方一致する関数名、変数名、定数名が有るか否かを判別する（ステップＳ３０３）。
【００７６】
一致するものがないと判別した場合（ステップＳ３０３；Ｎｏ）、入力候補解析部２５は、ステップＳ３０５に処理を移す。
一致するものがあると判別した場合（ステップＳ３０３；Ｙｅｓ）、入力候補解析部２５は、一致した関数名、変数名、定数名を所定の形式でリスト化したローカル候補リスト２７４ａを作成して、入力候補格納部２７４に格納し（ステップＳ３０４）、ステップＳ３０５に処理を移す。
【００７７】
ステップＳ３０５において、入力候補解析部２５は、外部データ格納部２７２内の外部関数リスト２７２ａ、外部変数リスト２７２ｂ、及び、外部定数リスト２７２ｃを検索して、入力データ監視部２４２から通知された所定文字数の文字列に前方一致する関数名、変数名、定数名が有るか否かを判別する。
【００７８】
一致するものがないと判別した場合（ステップＳ３０５；Ｎｏ）、入力候補解析部２５は、ステップＳ３０７に処理を移す。
一致するものがあると判別した場合（ステップＳ３０５；Ｙｅｓ）、入力候補解析部２５は、一致した関数名、変数名、定数名を所定の形式でリスト化した外部候補リスト２７４ｂを作成して、入力候補格納部２７４に格納（ステップＳ３０６）し、ステップＳ３０７に処理を移す。
【００７９】
ステップＳ３０７において、入力候補表示部２４３は、入力候補格納部２７４にローカル候補リスト２７４ａと外部候補リスト２７４ｂの少なくとも何れかが格納されているか否かを判別する。
【００８０】
格納されていない場合（ステップＳ３０７；Ｎｏ）、入力候補は存在しないこととなり、入力候補表示処理は終了する。
ローカル候補リスト２７４ａと外部候補リスト２７４ｂの少なくとも何れかにリストが格納されている場合（ステップＳ３０７；Ｙｅｓ）、入力候補表示部２４３は、格納されているリストに登録されている関数名、変数名、定数名を、現在入力中の文字列に対応する入力の候補としてユーザが選択可能に表示する（ステップＳ３０８）。また、この際、入力候補表示部２４３は、ローカル候補リスト２７４ａと外部候補リスト２７４ｂとのどちらの候補リストに登録されていたものであるのかがユーザに分かるように、入力候補を表示する。
【００８１】
続いて、ユーザは、操作部１２を操作して、この表示から、入力したい入力候補を選択する。この選択操作に応じて、入力候補表示部２４３は、選択された入力候補を、エディタ画面１３１上に反映させる（ステップＳ３０９）。以上で入力候補表示処理は終了する。
【００８２】
ここで、ステップＳ３０８の処理で作成される画面について、図８の画面例を参照して説明する。この画面では、「get」に続く入力の候補として、「getTemperature()」と「getTempoutdoor」がエディタ画面１３１上に表示されている。ユーザは、操作部１２を操作して、この表示から入力候補を選択可能であり、入力候補表示部２４３は、選択された入力候補をエディタ画面１３１上の「get」以降に反映させる。
また、この画面では、各入力候補の右側に、入力候補がローカル候補リスト２７４ａと外部候補リスト２７４ｂとのどちらに登録されていたかを示す識別記号が付される。具体的には、ローカル候補リスト２７４ａに登録されていた入力候補には「Ｌ」、外部候補リスト２７４ｂに登録されていた入力候補には「Ｇ」が付されて表示される。ユーザはこの識別記号を確認することで、入力候補が現在開いているソースファイルで定義されているのか、他のソースファイルで定義されているのかを確認することができる。
【００８３】
このように、本実施形態によれば、実装を行うためにエディタでソースファイルが開かれたり、開いたソースファイルが変更されると、このソースファイル（アクティブソースファイル）の解析（変更された場合は再解析）がなされて、アクティブソースファイルから参照可能な定義データ（関数、変数等）に関する情報（関数名、処理概要等）が補助画面１３２に自動的に表示される。従って、実装作業中のユーザは、自身がコーディングしている（又はコーディングしようとしている）ソースファイル内の各関数や変数等の概要を、補助画面１３２を通して瞬時に把握することができるため、これらの関数や変数等の再利用を容易に行うことが可能となる。従って、本実施形態に係るソースファイル再利用支援装置１００によれば、プログラムの実装中に、好適に既存プログラムの再利用を支援することが可能となる。
【００８４】
また、本実施形態では、アクティブソースファイルから参照可能な定義データを、アクティブソース内で定義されているローカル定義データとアクティブソース以外のソースファイル内で定義されている外部定義データとに区分して、各定義データに関する情報を取得、表示する。従って、ユーザにとっては、全ソースファイルで利用可能なグローバル変数も容易に検出可能となり、同一データを意味するグローバル変数の重複等を防ぐことができ、より有意義な情報をユーザに提供することができる。
【００８５】
また，この本実施形態に係るソースファイル再利用支援装置１００によれば、エディタ画面１３１に入力した文字列と前方一致した関数や変数の入力候補が選択可能に表示されて、選択することで入力を行うことが可能となるため、関数名や変数名の入力ミスや関数や変数で指定する型の間違い違いを防止することができ，開発時間を短縮することが可能となる。なお、入力した文字列と前方一致するだけでなく、後方一致や部分一致するものを入力候補としてもよい。
【００８６】
なお、図６で示した補助画面１３２に表示される関数名、変数名、定数名、処理概要、型、値等の項目はあくまで一例であり、これら以外の情報を取得して表示してもよい。例えば、コメント文等から関数の利用例や、同一関数を利用している他のファイルなど、解析に有用な他の情報を取得して表示しても良い。また、表示区分も関数、変数、定数としているが、これ以外にもマクロなどを表示しても良い。
【００８７】
また、本実施の形態では、エディタ画面１３１を実装用の専用のエディタで開いた画面として説明した。しかし、本発明は、このような専用のエディタが無ければ利用できないものではなく、市販の一般的なエディタを利用した場合でも、開いたり変更が加えられたソースファイルなどを検知した信号を取り出して、同様に連携して動作するようしてもよい。
【００８８】
<<第２の実施形態>>
続いて、第２の実施形態に係るソースファイル再利用支援装置２００について説明する。ソースファイル再利用支援装置２００は、図９に示すように、第１の実施形態に係るソースファイル再利用支援装置１００と比較して、補助画面制御部２６が変更内容反映部２６４を備える点のみが異なる。
【００８９】
変更内容反映部２６４は、補助画面１３２上から関数や変数の内容を変更した際に、その変更をソースファイルに反映させるための変更内容反映処理を行う。
【００９０】
続いて、ソースファイル再利用支援装置２００で実施される変更内容反映処理の動作について説明する。
【００９１】
ユーザは、操作部１２を操作して、前述したアクティブソースファイル解析処理で表示した補助画面１３２に表示されている情報（関数名、処理概要、引数、型）等を変更する。この変更の処理に応答して、変更内容反映部２６４は、変更内容反映処理を実施する。
【００９２】
（変更内容反映処理：関数名変更）
図１０は、補助画面から関数名が変更された場合に実施される変更内容反映処理の動作を説明するためのフローチャートである。
【００９３】
まず、変更内容反映部２６４は、エディタ画面１３１に開かれているアクティブソースファイルおよび、アクティブソースファイルがインクルードしているソースファイルを検索して、補助画面１３２で関数名が変更された関数の定義部分を抽出する（ステップＳ４０１）。
【００９４】
そして、変更内容反映部２６４は、抽出した定義部分で定義されている関数名を、補助画面１３２で変更された内容と同じになるように変更する（ステップＳ４０２）。
【００９５】
続いて、変更内容反映部２６４は、指定フォルダ以下の全ソースファイルを検索して、関数名を変更した関数を利用（参照）している部分を抽出し、ステップＳ４０２と同様に関数名を変更する（ステップＳ４０３）。
【００９６】
以上で、関数名を変更した際の変更内容反映処理は終了する。なお、補助画面上から変数名や定数名が変更された場合にも、同様の変更内容反映処理が行われる。
【００９７】
（変更内容反映処理：関数処理概要変更）
図１１は、補助画面から関数の処理概要が変更された場合に実施される変更内容反映処理の動作を説明するためのフローチャートである。
【００９８】
まず、変更内容反映部２６４は、エディタ画面１３１に開かれているアクティブソースファイルおよび、アクティブソースファイルがインクルードしているソースファイルを検索して、補助画面で処理概要が変更された関数の定義部分を抽出する（ステップＳ５０１）。
【００９９】
そして、変更内容反映部２６４は、抽出した関数定義部分の直前にあるコメント文の内容を、補助画面１３２で変更された処理概要と同じになるように変更する（ステップＳ５０２）。なお、補助画面１３２の関数の処理概要が空欄であった場合、ソースファイルには対応するコメント文が存在しない。従って、変更内容反映部２６４は、補助画面１３２上に新規入力された処理概要を含むコメント分を、抽出した関数定義部分の直前に新たに作成する。
【０１００】
以上で、関数の処理概要を変更した際の変更内容反映処理は終了する。なお、補助画面１３２上から変数や定数の概要が変更された場合にも、同様の変更内容反映処理が行われる。
【０１０１】
（変更内容反映処理：関数の引数を変更）
図１２は、補助画面から関数の引数が変更された場合に実施される変更内容反映処理の動作を説明するためのフローチャートである。
【０１０２】
まず、変更内容反映部２６４は、エディタ画面１３１に開かれているアクティブソースファイルおよび、アクティブソースファイルがインクルードしているソースファイルを検索して、補助画面１３１で引数が変更された関数の定義部分を抽出する（ステップＳ６０１）。
【０１０３】
そして、変更内容反映部２６４は、抽出した定義部分で定義されている引数を、補助画面１３１で変更された内容と同じになるように変更する（ステップＳ６０２）。例えば、補助画面上で新たに引数が加えられたり引数が削除されたりした場合は、抽出した定義部分でも同様に変更を行う。また、補助画面１３１上で引数の型が変更された場合は、抽出した定義部分でも同様に引数の型の変更を行う。
【０１０４】
続いて、変更内容反映部２６４は、指定ファイル以下の全ソースファイルを検索して、引数を変更した関数を利用（参照）している部分を抽出し、ステップＳ６０２と同様に引数を変更する（ステップＳ６０３）。なお、引数の型をlong型からshort型へ変更する等の、値範囲が狭くなる変更をする場合は、明示的型変換（キャスト）をする等して、変更により値範囲の整合性が取れなくなることを防ぐようにする。
【０１０５】
以上で、関数の引数を変更した際の変更内容反映処理は終了する。なお、補助画面上から関数の戻り値や、変数や定数の型、値が変更された場合にも、同様の変更内容反映処理が行われる。
【０１０６】
このように、本実施形態によれば補助画面１３２で変更した内容が、関数や変数等を利用している全てのソースファイルに自動的に反映されるため、ユーザーが手作業で１つずつ変更を行う場合よりも、迅速且つ正確に行うことができる。
【０１０７】
また、本実施形態によれば、補助画面１３２から変更をすることで修正の漏れなく引数の追加が行えるため、従来、既存コードへの反映漏れに不安があり、ほぼ同様の処理でも新たに関数を作成していたために発生していたコード量の増加や、同様のコードが複数あることによる修正時の修正漏れなどの問題が解決でき、処理を統合した関数を容易に作成することが可能となる。
【０１０８】
また、本実施形態によれば、補助画面１３２から変更をすることで修正漏れの心配なく関数名の変更が行えるため、統一性の無かった既存の関数名を一定の決まりのある統一性のある関数名に変更することが比較的用に行え、関数の再利用時に、より分かりやすく利用することが可能となる。
【０１０９】
<<第３の実施形態>>
続いて、第３の実施形態に係るソースファイル再利用支援装置３００について説明する。ソースファイル再利用支援装置３００は、図１３に示すように、第１の実施形態に係るソースファイル再利用支援装置１００に新たに共通関数処理部２８が追加された構成である。
【０１１０】
共通関数処理部２８は、関数比較部２８１と共通関数生成部２８２とを備える。関数比較部２８１は、対象とする複数の関数を比較し、処理内容が一致する部分を特定する。共通関数生成部２８２は、処理内容が一致する部分を抜き出した共通関数を作成し、複数の関数それぞれから参照可能にするための処理を行う。
【０１１１】
（共通関数処理）
続いて、ソースファイル再利用支援装置３００で実施される共通関数処理の動作について説明する。
【０１１２】
ユーザは、操作部１２を操作して、共通関数生成処理の対象としたい複数の関数を選択して、プログラム開発ツールのメニュー画面等から、共通関数生成処理の開始を指示する。この指示操作に応答して、共通関数処理部２８は、図１４に示す共通関数処理を開始する。
【０１１３】
まず、関数比較部２８１は、ユーザが選択した複数の関数を比較し、２つの以上の関数で共通する処理部分（共通処理部分）があるか否かを判別する（ステップＳ７０１）。
具体的には、関数比較部２８１は、比較する各関数の関数定義部分をソースファイルから取得する。そして、関数比較部２８１は、取得した各関数の関数定義部分のうち、空白（スペース、タブ）やコメント部分を除いた部分を公知のテキスト比較ソフト等を用いて比較し、一致する部分を各関数で共通する処理部分であると判別すればよい。
【０１１４】
共通処理部分がないと判別した場合（ステップＳ７０１；Ｎｏ）、共通関数処理は終了する。共通処理部分があると判別した場合（ステップＳ７０１；Ｙｅｓ）、関数比較部２８１は、判別した共通処理部分を共通関数化することに有用性（メリット）があるか否かを判別する（ステップＳ７０２）。
例えば、関数比較部２８１は、共通処理部分のサイズ（ソースファイル内の対応部分の行数や文字数等）が所定の閾値以上である場合、共通関数化することでソースファイル全体のコーディング量を削減できるため、有用性があると判別する。若しくは、共通処理部分が、所定数以上の関数内で定義されている場合、共通関数化することでこの処理部分を一元管理できて保守性が大幅に向上するため、有用性があると判別してもよい。さらには、これら２つの条件を組み合わせて、共通処理部分のサイズが所定の閾値以上であり、且つ、共通処理部分が所定数以上の関数内で定義されている場合に、有用性があると判別してもよく、共通処理部分の有用性の判別は任意の基準が採用可能である。
【０１１５】
共通処理部分を共通関数化することに有用性がないと判別した場合（ステップＳ７０２；Ｎｏ）、共通関数処理は終了する。共通処理部分を共通関数化することに有用性があると判別した場合（ステップＳ７０２；Ｙｅｓ）、共通関数生成部２８２は、この共通処理部分を各関数から抜き出して関数化した共通関数を生成する（ステップＳ７０３）。具体的には、共通関数生成部２８２は、各関数の定義部分から、共通処理部分を切り取る。そして、共通関数生成部２８２は、ソースファイルを新規作成し、このソースファイルに切り取った共通処理部分を関数化して貼り付ける処理を行う。
【０１１６】
続いて、共通関数生成部２８２は、共通処理部分が抜き出された各関数内で、生成した共通関数を呼び出せるように、ソースファイルを変更する（ステップＳ７０４）。以上で共通関数処理は終了する。
具体的には、共通関数生成部２８２は、共通処理部分が抜き出された各関数が定義されているソースファイルの先頭部分に、共通関数が定義されているソースファイルをインクルードする記載を追加する。そして、共通関数生成部２８２は、共通処理部分が抜き取られた部分に、生成した共通関数を呼び出す記載を追加する。以上で共通関数処理は終了する。
【０１１７】
ここで、共通関数処理について、図１５を参照して具体的に説明する。ソースファイル「aaa.c」に定義されている関数Ａとソースファイル「bbb.c」に定義されている関数Bとが共通化する対象として選択されて共通関処理が開始された場合を考える。
【０１１８】
この場合、関数Aと関数Bとで共通する処理１が共通部分として抜き出され、新たにソースファイル（ヘッダファイル）「c.h」が作成さる。ヘッダファイル「c.h」内に共通処理部分である処理１が共通関数Cとして定義される。
【０１１９】
また、共通処理部分として処理１が抜き出されたソースファイル「aaa.c」と「bbb.c」では、ファイルの先頭に共通関数Cが定義されている「c.h」をインクルードする記載が追加される。また、処理１が抜き出された部分には、共通関数Cを呼び出す記載が挿入される。
【０１２０】
このように、本実施形態によれば、複数の関数で記述されている使用頻度の高い同一処理を、共通関数として抜き出す。これにより、コード量の削減を図ることが可能となり、
ソースファイルの可読性が向上し、新機関数からの再利用もより容易に行えることが可能となる。
【０１２１】
また、本実施形態によれば、関数間での共通処理部分を切り出して共通関数化することに有用性があるか否かを判断し、有用性が低い場合は、共通処理部分を共通関数と抜き出す処理を行わない。従って、処理内容が各関数で共通しているものの、共通している部分（範囲）が非常に狭かったり、極めて少数の関数間でしか共通していないような、共通化することでかえって可読性が悪化するようなケースを防止することも可能となる。
【０１２２】
なお、本発明は、上記各実施形態に限定されず、本発明の要旨を逸脱しない部分での種々の変更は勿論可能である。
【０１２３】
例えば、上記各実施形態では、Ｃ言語で記載されているソースファイルを例にして主に説明したが、ＪＡＶＡ（登録商標）やＢＡＳＩＣ等の他のプログラム言語で記載されているソースファイルにも本願発明が適用できるのは勿論である。なお、その場合、それぞれの言語の文法に沿った手法で、ローカル関数、ローカル変数、外部関数、外部変数等に関する情報を取得しなければならないのは勿論である。
【０１２４】
また、例えば、本発明に係るソースファイル再利用支援装置１００，２００，３００の動作を規定する動作プログラムを既存のパーソナルコンピュータや情報端末機器等に適用することで、当該パーソナルコンピュータ等を本発明に係るソースファイル再利用支援装置１００，２００，３００として機能させることも可能である。
【０１２５】
また、このようなプログラムの配布方法は任意であり、例えば、ＣＤ−ＲＯＭ（Compact Disk Read-Only Memory）、ＤＶＤ（Digital Versatile Disk）、ＭＯ（Magneto Optical Disk）、メモリカードなどのコンピュータ読み取り可能な記録媒体に格納して配布してもよいし、インターネットなどの通信ネットワークを介して配布してもよい。
【符号の説明】
【０１２６】
１００，２００，３００ ソースファイル再利用支援装置
１３１ エディタ画面
１３２ 補助画面
２１ ソースファイル格納部
２２ 解析対象監視部
２２１ フォルダ監視部
２２２ ソースファイル監視部
２３ ファイル解析部
２３１ フォルダ解析部
２３２ ソースファイル解析部
２４ エディタ画面制御部
２４１ ファイル内容表示部
２４２ 入力データ監視部
２４３ 入力候補表示部
２５ 入力候補解析部
２６ 補助画面制御部
２６１ ローカルデータ表示部
２６２ 外部データ表示部
２６３ フォルダデータ表示部
２６４ 変更内容反映部
２７ 解析結果格納部
２７１ ローカルデータ格納部
２７１ａ ローカル関数リスト
２７１ｂ ローカル変数リスト
２７１ｃ ローカル定数リスト
２７２  外部データ格納部
２７２ａ 外部関数リスト
２７２ｂ 外部変数リスト
２７２ｃ 外部定数リスト
２７３ フォルダデータ格納部
２７３ａ 全関数リスト
２７３ｂ 全変数リスト
２７３ｃ 全定数リスト
２７４ 入力候補格納部
２７４ａ ローカル候補リスト
２７４ｂ 外部候補リスト
２８ 共通関数処理部
２８１ 関数比較部
２８２ 共通関数生成部
【図１】
2013097470.tif 000003
【図２】
2013097470.tif 000004
【図３】
2013097470.tif 000005
【図４】
2013097470.tif 000006
【図５】
2013097470.tif 000007
【図６】
2013097470.tif 000008
【図７】
2013097470.tif 000009
【図８】
2013097470.tif 000010
【図９】
2013097470.tif 000011
【図１０】
2013097470.tif 000012
【図１１】
2013097470.tif 000013
【図１２】
2013097470.tif 000014
【図１３】
2013097470.tif 000015
【図１４】
2013097470.tif 000016
【図１５】
2013097470.tif 000017