(57)【要約】      （修正有）【課題】変数のスコープを効率よく適切に設定する。【解決手段】プログラム生成装置１０は、画面に関する記述を含んだソースコードである解析対象ソースコード１５１と、画面に関する記述に用いられている変数である画面記述変数のスコープの決定に際して用いられ、画面の構造または挙動に関して設定された条件であるスコープ判定条件１５４を記憶する。プログラム生成装置１０は、解析対象ソースコード１５１から画面記述変数を抽出し、抽出した画面記述変数によって記述される画面の構造または挙動を解析対象ソースコード１５１に基づき取得される情報から特定し、特定した構造または挙動をスコープ判定条件と対照することにより画面記述変数に設定すべきスコープを決定し、解析対象ソースコード１５１に基づき、画面記述変数が決定したスコープとなるように記述したソースコードである調整ソースコードを生成する。【選択図】図３
2020087033.tif 000002
【特許請求の範囲】
【請求項１】
情報処理装置であって、
画面に関する記述を含んだソースコードである解析対象ソースコード、及び、
前記解析対象ソースコードにおいて画面に関する記述に用いられている変数である画面記述変数のスコープの決定に際して用いられ、前記画面の構造または挙動に関して設定された条件であるスコープ判定条件、
を記憶し、
前記解析対象ソースコードから前記画面記述変数を抽出し、
抽出した前記画面記述変数によって記述される画面の構造または挙動を前記解析対象ソースコードに基づき取得される情報から特定し、特定した前記構造または挙動を前記スコープ判定条件と対照することにより前記画面記述変数に設定すべきスコープを決定し、
前記解析対象ソースコードに基づき、前記画面記述変数が前記決定した前記スコープとなるように記述したソースコードである調整ソースコードを生成する、
プログラム生成装置。
【請求項２】
請求項１に記載のプログラム生成装置であって、
前記画面記述変数によって記述される画面の構造または挙動を、前記解析対象ソースコードを解析することにより特定する、
プログラム生成装置。
【請求項３】
請求項１または２に記載のプログラム生成装置であって、
前記解析対象ソースコードに基づくプログラムを実行することにより生成される実行ログを記憶し、
前記抽出した画面記述変数によって記述される画面の挙動を、前記実行ログを解析することにより特定し、特定した前記挙動を前記スコープ判定条件と対照することにより、前記画面記述変数のスコープを決定する、
プログラム生成装置。
【請求項４】
請求項２に記載のプログラム生成装置であって、
前記スコープ判定条件が、前記画面記述変数が属する画面と双方向に遷移する画面はあるかという条件、及び画面記述変数が属する画面定義部は遷移先画面で置き換わるかという条件、のうちの少なくともいずれかに基づくものである、
プログラム生成装置。
【請求項５】
請求項３に記載のプログラム生成装置であって、
前記スコープ判定条件が、画面記述変数が属する画面と双方向に遷移する画面との遷移の往復回数が予め設定された閾値以上かという条件、及び画面記述変数が属する画面と双方向に遷移する画面との遷移の往復で、同じ値を該画面記述変数に格納する回数が予め設定された閾値以上かという条件、のうちの少なくともいずれかに基づくものである、
プログラム生成装置。
【請求項６】
請求項１に記載のプログラム生成装置であって、
前記抽出した画面記述変数に設定すべきとして決定したスコープが現在よりもローカルなスコープである場合、当該画面記述変数のスコープが現在よりもローカルなスコープになるように前記解析対象ソースコードを変更することにより前記調整ソースコードを生成する、
プログラム生成装置。
【請求項７】
請求項１に記載のプログラム生成装置であって、
前記抽出した画面記述変数に設定すべきとして決定したスコープが現在よりもグローバルなスコープである場合、当該画面記述変数のスコープが現在よりもグローバルなスコープになるように前記解析対象ソースコードを変更することにより前記調整ソースコードを生成する、
プログラム生成装置。
【請求項８】
請求項７に記載のプログラム生成装置であって、
前記画面記述変数の変数名が重複しないように前記調整ソースコードを生成する、
プログラム生成装置。
【請求項９】
請求項７または８に記載のプログラム生成装置であって、
前記解析対象ソースコードは、入れ子の関係を有する複数の画面の夫々に対応した画面定義部を有し、
前記抽出した画面記述変数に設定すべきとして決定したスコープに応じて前記画面記述変数を記述する前記画面定義部を選択して前記調整ソースコードを生成する、
プログラム生成装置。
【請求項１０】
情報処理装置が、
画面に関する記述を含んだソースコードである解析対象ソースコード、及び、前記解析対象ソースコードにおいて画面に関する記述に用いられている変数である画面記述変数のスコープの決定に際して用いられ、前記画面の構造または挙動に関して設定された条件であるスコープ判定条件、を記憶するステップと、  
前記解析対象ソースコードから前記画面記述変数を抽出するステップと、
抽出した前記画面記述変数によって記述される画面の構造または挙動を前記解析対象ソースコードに基づき取得される情報から特定し、特定した前記構造または挙動を前記スコープ判定条件と対照することにより前記画面記述変数に設定すべきスコープを決定するステップと、
前記解析対象ソースコードに基づき、前記画面記述変数が前記決定した前記スコープとなるように記述したソースコードである調整ソースコードを生成するステップと、
を実行する、プログラム生成方法。
【請求項１１】
請求項１０に記載のプログラム生成方法であって、
前記情報処理装置が、前記画面記述変数によって記述される画面の構造または挙動を、前記解析対象ソースコードを解析することにより特定するステップ
を更に実行する、プログラム生成方法。
【請求項１２】
請求項１０または１１に記載のプログラム生成方法であって、
前記情報処理装置が、
前記解析対象ソースコードに基づくプログラムを実行することにより生成される実行ログを記憶するステップと、
前記抽出した画面記述変数によって記述される画面の挙動を、前記実行ログを解析することにより特定し、特定した前記挙動を前記スコープ判定条件と対照することにより、前記画面記述変数のスコープを決定するステップと、
を更に実行する、プログラム生成方法。
【請求項１３】
請求項１１に記載のプログラム生成方法であって、
前記スコープ判定条件が、前記画面記述変数が属する画面と双方向に遷移する画面はあるかという条件、及び画面記述変数が属する画面定義部は遷移先画面で置き換わるかという条件、のうちの少なくともいずれかに基づくものである、
プログラム生成方法。
【請求項１４】
請求項１２に記載のプログラム生成方法であって、
前記スコープ判定条件が、画面記述変数が属する画面と双方向に遷移する画面との遷移の往復回数が予め設定された閾値以上かという条件、及び画面記述変数が属する画面と双方向に遷移する画面との遷移の往復で、同じ値を該画面記述変数に格納する回数が予め設定された閾値以上かという条件、のうちの少なくともいずれかに基づくものである、
プログラム生成方法。
【請求項１５】
請求項１０に記載のプログラム生成方法であって、
前記情報処理装置が、
前記抽出した画面記述変数に設定すべきとして決定したスコープが現在よりもグローバルなスコープである場合、当該画面記述変数のスコープが現在よりもグローバルなスコープになるように前記解析対象ソースコードを変更することにより前記調整ソースコードを生成するステップと、
前記画面記述変数の変数名が重複しないように前記調整ソースコードを生成するステップと、
を更に実行する、プログラム生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム生成装置、及びプログラム生成方法に関する。
【背景技術】
【０００２】
特許文献１には、プログラム設計変更における情報隠蔽作業を自動リファクタリング化することを目的として構成された情報隠蔽装置について記載されている。情報隠蔽装置は、入力されたプログラムにおける変数のうち、ユーザに指定された変数の生存範囲を算出し、ユーザに指定された変数の被覆メソッドを算出し、新規クラスの抽出が必要か否かを判定し、上記ユーザに指定された変数を、上記被覆メソッドまたはその上位にあるメソッドの局所変数とし、上記入力されたプログラムから新規クラスを抽出し、上記指定された変数をその新規クラスのメンバ変数とし、上記指定された変数にアクセスするメソッドを上記新規クラスに移動し、上記新規クラスのインスタンスを、上記被覆メソッドまたはその上位にあるメソッドの局所変数とする。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００６−２０１９８１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
Ｗｅｂサービス等を提供するソフトウェアの開発に際しては、プログラムで用いられる変数に割り当てた記憶領域が解放されずに確保されたままとなり、主記憶装置等の記憶資源を枯渇させてサービスに影響を与える、いわゆるメモリリーク（Memory leak）の発生
を予防することが求められる。メモリリークの予防策としては、変数のスコープを最小の範囲に限定することが効果的である。
【０００５】
しかし現状のソフトウェア開発工程では、複雑な判断が要求されるスコープの決定を変数毎に人手で行っており、作業負担やコストが課題となっている。尚、特許文献１では、メソッドやその上位メソッドの利用／被利用関係に基づき変数のスコープを判定している。そのため、利用／被利用関係がない場合は変数のスコープを判定することができない。
【０００６】
本発明はこのような背景に鑑みてなされたものであり、変数のスコープを効率よく適切に設定することが可能な、プログラム生成装置、及びプログラム生成方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記目的を達成するための本発明のうちの一つは、情報処理装置であって、画面に関する記述を含んだソースコードである解析対象ソースコード、及び、前記解析対象ソースコードにおいて画面に関する記述に用いられている変数である画面記述変数のスコープの決定に際して用いられ、前記画面の構造または挙動に関して設定された条件であるスコープ判定条件、を記憶し、前記解析対象ソースコードから前記画面記述変数を抽出し、抽出した前記画面記述変数によって記述される画面の構造または挙動を前記解析対象ソースコードに基づき取得される情報から特定し、特定した前記構造または挙動を前記スコープ判定条件と対照することにより前記画面記述変数に設定すべきスコープを決定し、前記解析対象ソースコードに基づき、前記画面記述変数が前記決定した前記スコープとなるように記述したソースコードである調整ソースコードを生成する、プログラム生成装置。
【０００８】
その他、本願が開示する課題、及びその解決方法は、発明を実施するための形態の欄、及び図面により明らかにされる。
【発明の効果】
【０００９】
本発明によれば、変数のスコープを効率よく適切に設定することができる。
【図面の簡単な説明】
【００１０】
【図１】情報処理システムの概略的な構成を示す図である。
【図２】情報処理システムを構成する情報処理装置の一例を示す図である。
【図３】プログラム生成装置が備える主な機能を示す図である。
【図４】ソフトウェア管理装置が備える主な機能を示す図である。
【図５】ソースコードの画面定義部、画面記述変数のスコープ、及び情報保存強度の関係を説明する図である。
【図６】解析対象ソースコードの一例を示す図である。
【図７】図６の解析対象ソースコードにおける画面（画面定義部）の構造を説明する図である。
【図８】（ａ）、（ｂ）は、画面の遷移の挙動に関する記述を含むソースコードの例である。
【図９】画面記述変数表の一例である。
【図１０】スコープ判定条件の一例である。
【図１１】プログラム生成処理を説明するフローチャートである。
【図１２】画面の遷移と画面記述変数の内容の保存状況を説明する図である。
【発明を実施するための最良の形態】
【００１１】
以下、実施形態につき図面を参照しつつ説明する。
【００１２】
図１に一実施形態として示す情報処理システム１の概略的な構成を示している。同図に示すように、情報処理システム１は、プログラム生成装置１０、及び一つ以上のソフトウェア管理装置２０を含む。プログラム生成装置１０とソフトウェア管理装置２０は通信ネットワーク５を介して通信可能に接続されている。通信ネットワーク５は、有線または無線方式による通信手段であり、例えば、ＬＡＮ（Local Area Network)、ＷＡＮ（Wide Area Network）、インターネット等である。
【００１３】
ソフトウェア管理装置２０は、情報処理装置であって、例えば、ソフトウェアの開発や保守のために用いられるリポジトリサーバ、ネットワークストレージ、ソフトウェアの開発者や保守者等が操作する端末装置等である。ソフトウェア管理装置２０は、ソフトウェアを構成するプログラムのソースコードを管理（記憶）するとともに、上記のプログラムの実行に際して生成されるログ情報（以下、「実行ログ」と称する。）を生成する。
【００１４】
プログラム生成装置１０は、情報処理装置であって、ソフトウェア管理装置２０に管理されている上記のソースコードや実行ログに基づきソースコードを自動的に生成する機能を備える。
【００１５】
尚、本実施形態では、このようにプログラム生成装置１０や各ソフトウェア管理装置２０が夫々独立したハードウェア（情報処理装置）により実現されるとして説明するが、プログラム生成装置１０やソフトウェア管理装置２０のハードウェア構成は必ずしも限定されない。例えば、プログラム生成装置１０とソフトウェア管理装置２０の２つ以上を共通のハードウェアにより実現してもよい。またソフトウェア管理装置２０をプログラム生成装置１０として機能させるようにしてもよい。また上記のハードウェアは、その構成の全部または一部がクラウドシステム（cloud system）のクラウドサーバ（cloud server）の
ような仮想的な資源により実現されるものであってもよい。
【００１６】
図２は、上記のハードウェアの一例として示す情報処理装置１００のブロック図である。同図に示すように、情報処理装置１００は、プロセッサ１１、主記憶装置１２、補助記憶装置１３、入力装置１４、出力装置１５、及び通信装置１６の各構成を備える。これらは図示しないバス等の通信手段を介して通信可能に接続されている。
【００１７】
プロセッサ１１は、ＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）等を用いて構成される。プロセッサ１１が、主記憶装置１２に格納されているプログラムを読み出して実行することにより、プログラム生成装置１０やソフトウェア管理装置２０の機能が実現される。
【００１８】
主記憶装置１２は、プログラムやデータを記憶する装置であり、ＲＯＭ（Read Only Memory）、ＲＡＭ（Random Access Memory）、不揮発性半導体メモリ（ＮＶＲＡＭ（Non Volatile RAM））等である。
【００１９】
補助記憶装置１３は、ＳＳＤ（Solid State Drive）、ＳＤメモリカード等の各種不揮
発性メモリ（NVRAM:Non-volatile memory）、ハードディスクドライブ、光学式記憶装置
（ＣＤ（Compact Disc）、ＤＶＤ(Digital Versatile Disc)等）、クラウドサーバの記憶領域等である。補助記憶装置１３に格納されているプログラムやデータは主記憶装置１２に随時読み込まれる。
【００２０】
入力装置１４は、外部から情報の入力を受け付けるインタフェースであり、例えば、キーボード、マウス、タッチパネル、音声入力装置（マイクロフォン等）である。
【００２１】
出力装置１５は、各種の情報を出力するインタフェースであり、画像表示装置（液晶モニタ、ＬＣＤ（Liquid Crystal Display）、グラフィックカード）、印字装置、音声出力装置（スピーカ等）である。
【００２２】
通信装置１６は、通信ネットワーク５を介した他の装置との間の通信を実現する有線方式または無線方式の通信インタフェースであり、例えば、ＮＩＣ（Network Interface Card）、無線通信モジュール、ＵＳＢ（Universal Serial Interface）モジュール、シリアル通信モジュール等である。尚、通信装置１６を他の装置からの情報の入力を受け付ける入力装置１４として機能させてもよい。また通信装置１６を他の装置に情報を出力する出力装置１５として機能させてもよい。
【００２３】
情報処理装置１００は、上記の構成に加え、例えば、デバイスドライバ、オペレーティングシステム、ファイルシステム、ＤＢＭＳ（DataBase Management System）等をさらに備えていてもよい。情報処理装置１００は、各種の情報（データ）を、例えば、データベースのテーブルやファイルシステムによって管理されるファイルとして管理（記憶）する。
【００２４】
図３にプログラム生成装置１０が備える主な機能を示している。プログラム生成装置１０は、ソースコードを解析し、ソースコードに含まれている、画面に関して用いられている変数（画面の構造定義や遷移の制御に用いられている変数等。以下、「画面記述変数」と称する。）のスコープ（変数を参照可能な範囲（可視範囲））を決定する。尚、変数はソースコードにおいて関数として機能するものであってもよい。
【００２５】
同図に示すように、プログラム生成装置１０は、記憶部１１０、ソースコード取得部１１１、実行ログ取得部１１２、ソースコード解析部１１３、スコープ判定部１１４、ソー
スコード生成部１１５、及びソースコード送信部１１６の各機能を有する。これらの機能は、プログラム生成装置１０のプロセッサ１１が、プログラム生成装置１０の主記憶装置１２に記憶されているプログラムを読み出して実行することにより実現される。
【００２６】
記憶部１１０は、ソースコード１５１、実行ログ１５２、画面記述変数表１５３、及びスコープ判定条件１５４を記憶する。
【００２７】
ソースコード１５１は、ソースコード取得部１１１によってソフトウェア管理装置２０から取得（受信）され、ソースコード解析部１１３による解析の対象となるソースコード（以下、「解析対象ソースコード」と称する。）を含む。尚、解析対象ソースコードは、ソフトウェア管理装置２０において管理されている既存のソースコードや、ソフトウェア管理装置２０において設計情報等に基づき自動生成されたもの等、とくに限定されない。
【００２８】
またソースコード１５１は、ソースコード生成部１１５が、解析対象ソースコードに基づき生成したソースコード（以下、「調整ソースコード」とも称する。）を含む。
ソースコード生成部１１５は、画面記述変数がスコープ判定部１１４により決定されたスコープになるように調整ソースコードを生成する。調整ソースコードは、ソースコード送信部１１６によりソフトウェア管理装置２０に送信される、
【００２９】
尚、本実施形態では、ソースコード１５１は、例えば、AngularJS(登録商標)等のフレ
ームワークを利用して生成される、JavaScript(登録商標)により記述されたものを例示するが、ソースコード１５１の種類は、特定のフレームワークによるものや特定の言語で記述されるものに限定されない。例えば、ソースコード１５１は、TypeScript(登録商標)やHTML(登録商標)等によって記述されたものであってもよい。
【００３０】
実行ログ１５２は、実行ログ取得部１１２によってソフトウェア管理装置２０から取得（受信）された、ソースコードに基づくプログラムの実行ログである。
【００３１】
画面記述変数表１５３は、ソースコード解析部１１３がソースコード１５１から抽出した画面記述変数に関する情報を含む。画面記述変数表１５３はスコープ判定部１１４により参照される。
【００３２】
スコープ判定条件１５４は、画面記述変数のスコープの決定に用いる情報（以下、「スコープ判定条件」と称する。）を含む。スコープ判定条件１５４は、スコープ判定部１１４が、画面記述変数によって記述される画面の挙動を、解析対象ソースコードを解析することにより特定する際に参照する条件である「ソースコード判定条件」と、画面記述変数によって記述される画面の挙動を、実行ログにより解析することにより特定する際に参照する条件である「実行ログ判定条件」と、を含む。
【００３３】
プログラム生成装置１０が有する上記機能のうち、ソースコード取得部１１１は、通信ネットワーク５を介してソフトウェア管理装置２０からソースコードを取得（受信）する。取得したソースコードは記憶部１１０がソースコード１５１として記憶する。
【００３４】
実行ログ取得部１１２は、通信ネットワーク５を介してソフトウェア管理装置２０から実行ログを取得（受信）する。取得した実行ログは記憶部１１０が実行ログ１５２として記憶する。
【００３５】
ソースコード解析部１１３は、ソースコード１５１を解析してソースコード１５１から画面記述変数を抽出して画面記述変数表１５３を生成する。
【００３６】
スコープ判定部１１４は、スコープ判定条件１５４に基づき、画面記述変数表１５３における各画面記述変数のスコープを決定する。
【００３７】
ソースコード生成部１１５は、解析対象ソースコードに基づき、画面記述変数表１５３における各画面記述変数がスコープ判定部１１４が決定したスコープになるように記述した調整ソースコードを生成する。
【００３８】
ソースコード送信部１１６は、ソースコード生成部１１５が生成したソースコード１５１をソフトウェア管理装置２０に送信する。
【００３９】
図４にソフトウェア管理装置２０が備える主な機能を示している。同図に示すように、ソフトウェア管理装置２０は、記憶部２１０、ソフトウェア管理部２１１、プログラム実行部２１２、ソースコード送信部２１３、及び実行ログ送信部２１４の各機能を有する。これらの機能は、ソフトウェア管理装置２０のプロセッサ１１が、ソフトウェア管理装置２０の主記憶装置１２に記憶されているプログラムを読み出して実行することにより実現される。
【００４０】
記憶部２１０は、ソースコード２５１及び実行ログ２５２を記憶する。ソースコード２５１は、ソフトウェア管理部２１１が管理するソースコードであり、例えば、開発対象や保守対象のソースコードである。実行ログ２５２は、プログラム実行部２１２がソースコード２５１に基づくプログラムを実行することにより生成される実行ログである。
【００４１】
ソフトウェア管理部２１１は、例えば、統合開発環境(IDE:Integrated Development Environment)等のソフトウェアの開発／編集環境を提供し、開発対象もしくは編集対象のプログラムのソースコード２５１を管理する。
【００４２】
プログラム実行部２１２は、ソースコード２５１に基づくプログラムを実行してその実行ログ２５３を生成する。
【００４３】
図５は、ソースコードの画面定義部、画面記述変数のスコープ、及び、以下の説明で用いる用語である「情報保存強度」の関係を説明する図である。情報保存強度とは、ソースコード１５１に記述されている変数の内容の情報処理装置１００の主記憶装置１２への残りやすさ（記憶の維持されやすさ）を示す指標である。情報保存強度が高いほどメモリリーク（Memory leak）が生じる危険性（リスク）が高くなる。
【００４４】
例示するソースコードの画面定義部は、画面の入れ子関係を構成する、ルート画面定義部、親画面定義部、及び子画面定義部を有する。この構造（ルート画面の配下に親画面が定義され、親画面の配下に子画面が定義される構造）において、例えば、親画面定義部で定義されている変数は、制御がルート画面に移る（画面が遷移する）とその内容が失われてしまう。また子画面定義部で定義されている変数は、制御が親画面やルート画面に移るとその内容が失われてしまう。
【００４５】
同図に示すように、情報保存強度が高い変数ほどグローバル性が強く、情報保存強度が低い変数ほどローカル性が強くなる。例示するソースコードの画面定義部の構造では、各画面定義部に定義された変数の情報保存強度は、ルート画面定義部で定義された変数＞親画面定義部で定義された変数＞子画面定義部で定義された変数の順となる。
【００４６】
図６に解析対象ソースコードの一例を示す。例示する解析対象ソースコードは、ルーティングの定義（例えばリクエストＵＲＬに応じた処理の受け渡し先（コントローラ、テンプレート）の定義）に関してJavaScript(登録商標)により記述されたソースコードである
。解析対象ソースコードは、「parent」画面の定義に関する記述、「parent.child1」画
面の定義に関する記述、及び「parent.child2」画面の定義に関する記述を含む。
【００４７】
例示する解析対象ソースコードには、「parent」画面のソースコードが、「templates/parent.html」というファイルと、「ParentCtrl」というコントローラが定義されたJavaScript(登録商標)のファイルに含まれていることが記述されている。また例示する解析対
象ソースコードには、「parent.child1」画面のソースコードが、「templates/child1.html」というファイルと、「Child1Ctrl」というコントローラが定義されたJavaScript(登
録商標)のファイルに含まれていることが記述されている。また例示する解析対象ソース
コードには、「parent.child2」画面のソースコードが、「templates/child2.html」というファイルと、「Child2Ctrl」というコントローラが定義されたJavaScript(登録商標)のファイルに含まれていることが記述されている。
【００４８】
図７は、図６の解析対象ソースコードに基づく画面の構造を説明する図である。尚、例示するソースコードは、parent画面、parent.child1画面、parent.child2画面、及びparent画面の親画面となる大元の画面である「ルート画面」を含む。
【００４９】
同図に示すように、parent画面のソースコードは、ルート画面の定義部であるルート画面定義部と、parent画面の定義部であるparent画面定義部とを有する。ルート画面定義部に定義された変数は、parent画面定義部に定義された変数に対してグローバルな関係となる。
【００５０】
また同図に示すように、parent.child1画面のソースコードは、ルート画面の定義部で
あるルート画面定義部と、parent画面の定義部であるparent画面定義部と、parent.child1画面の定義部であるparent.child1画面定義部と、を有する。ルート画面定義部に定義された変数は、parent画面定義部に定義された変数に対してグローバルな関係となり、parent画面定義部に定義された変数は、parent.child1画面定義部に定義された変数に対して
グローバルな関係となる。
【００５１】
また同図に示すように、parent.child2画面のソースコードは、ルート画面の定義部で
あるルート画面定義部と、parent画面の定義部であるparent画面定義部と、parent.child2画面の定義部であるparent.child2画面定義部と、を有する。ルート画面定義部に定義された変数は、parent画面定義部に記述された変数に対してグローバルな関係となり、parent画面定義部に定義された変数は、parent.child2画面定義部に定義された変数に対して
グローバルな関係となる。
【００５２】
図８（ａ）、（ｂ）は、JavaScript(登録商標)で記述された、画面の遷移の挙動に関する記述を含むソースコードの例である。このうち（ａ）のソースコードは、parent.child1画面からparent.child2画面への遷移の挙動に関する記述を含む。また(ｂ)のソースコードは、parent.child2画面からparent.child1画面への遷移の挙動に関する記述を含む。
【００５３】
図９に、画面記述変数表１５３の一例を示す。画面記述変数表１５３は、画面名１５３１で特定される各画面と、夫々に定義されている変数の変数名１５３２との対応を示す情報を含む。例示する画面記述変数表１５３の場合、ルート画面については画面記述変数は抽出されていない。一方、parent画面については「ｍ０」という画面記述変数が抽出されている。またparent.child1画面については、「ｍ１」と「ｍ２」という画面記述変数が
、parent.child2画面については、「ｍ３」と「ｍ４」という画面記述変数が、夫々抽出
されている。
【００５４】
図１０にスコープ判定条件１５４の一例を示す。スコープ判定条件１５４の内容は、例
えば、ソフトウェアの開発者や保守者等のユーザが設定する。
【００５５】
例示するスコープ判定条件１５４には、スコープ判定部１１４がソースコード１５１に記述されている変数をグローバル変数とすべきか否かを判定するための条件がスコープ判定条件として設定されている。また同図に示すように、例示するスコープ判定条件１５４は、前述したソースコード判定条件であるソースコード判定条件１５４１と、前述した実行ログ判定条件である実行ログ判定条件１５４２とを含む。
【００５６】
尚、本実施形態では、このようにスコープ判定条件としてソースコード１５１に記述されている変数をグローバル変数とすべきか否かを判定するための条件を例示するが、これとは逆にスコープ判定条件をソースコード１５１に記述されている変数をローカル変数とすべきか否かを判定するための条件としてもよい。またスコープ判定条件に、ソースコード１５１に記述されている変数をグローバル変数とすべきか否かを判定するための条件と、ソースコード１５１に記述されている変数をローカル変数とすべきか否かを判定するための条件とを混在させてもよい。
【００５７】
例示するスコープ判定条件１５４には、ソースコード判定条件１５４１として「画面記述変数が属する画面と双方向に遷移する画面はあるか」という条件（以下、条件（ａ）と称する。）と、「画面記述変数が属する画面定義部は遷移先画面で置き換わるか」という条件（以下、条件（ｂ）と称する。）が設定されている。
【００５８】
また実行ログ判定条件１５４２として「画面記述変数が属する画面と双方向に遷移する画面との遷移の往復回数が閾値以上か」という条件（以下、条件（Ａ）と称する。）と、「画面記述変数が属する画面と双方向に遷移する画面との遷移の往復で、同じ値を該変数に格納する回数が閾値以上か」という条件（以下、条件（Ｂ）と称する。）が設定されている。
【００５９】
尚、同図に示すパターンＩＤ１５４３は、上記の４つの条件（ａ）、条件（ｂ）、条件（Ａ）、条件（Ｄ）を選択して組み合わせることにより得られるパターン毎に付与される識別子（以下、パターンＩＤと称する。）である。スコープ判定部１１４は、画面記述変数のスコープの決定に際し、スコープ判定条件１５４に設定されているいずれかのパターンを選択して用いる。同図における「○」の記号は、当該パターンが該当する条件を選択することを意味している。また実行ログ判定条件１５４２の「○（閾値＝７）」等における「閾値＝７」等の表記は、実行ログ判定条件１５４２に記述されている閾値に設定する具体的な値を示している。
【００６０】
例えば、パターンＩＤが「１」のパターンを選択した場合、スコープ判定部１１４は、ソースコード判定条件である条件（ａ）及び条件（ｂ）を用いた条件式に基づき画面記述変数のスコープを判定する。尚、上記条件式は、条件（ａ）と条件（ｂ）とＡＮＤ条件に基づくものとしてもよいし、条件（ａ）と条件（ｂ）とのＯＲ条件に基づくものとしてもよい。上記条件式が真となる場合、スコープ判定部１１４は、グローバル性が高くなるように画面記述変数のスコープを設定する。
【００６１】
一方、パターンＩＤが「２」のパターンを選択した場合、スコープ判定部１１４は、ソースコード判定条件である条件（ａ）及び条件（ｂ）と、実行ログ判定条件である条件（Ａ）及び条件（Ｄ）の４つの条件に基づく条件式によって画面記述変数のスコープを判定する。尚、上記条件式は、上記４つの条件の全てのＡＮＤ条件としてもよいし、上記４つの条件の全てのＯＲ条件としてもよい。また上記４つの条件をＡＮＤ条件とＯＲ条件とを混在させた条件式により真偽を判定するようにしてもよい。スコープ判定部１１４は、上記条件式が真となる場合、グローバル性が高くなるように画面記述変数のスコープを設定
する。
【００６２】
以上に示したスコープ判定条件１５４は一例に過ぎず、例えば、ソースコードの種類やソースコードによって実現されるアプリケーションの機能等に応じて様々な態様で設定することができる。
【００６３】
図１１は、プログラム生成装置１０が、解析対象ソースコードから画面記述変数を抽出し、抽出した画面記述変数のスコープを決定し、決定したスコープに基づき調整ソースコードを生成する処理（以下、プログラム生成処理Ｓ１１００と称する。）を説明するフローチャートである。以下、同図とともにプログラム生成処理Ｓ１１００について説明する。
【００６４】
まずソースコード取得部１１１が、ソフトウェア管理装置２０からソースコードを取得する。取得したソースコードは記憶部１１０がソースコード１５１（解析対象ソースコード）として記憶する（Ｓ１１１１）。
【００６５】
続いて、実行ログ取得部１１２が、ソフトウェア管理装置２０から解析対象ソースコードの実行ログ１５２を取得する。取得した実行ログは記憶部１１０が実行ログ１５２として記憶する（Ｓ１１１２）。尚、後述するスコープの判定においてスコープ判定条件として実行ログ判定条件を用いない場合には当該処理は必ずしも必要ない。
【００６６】
続いて、ソースコード解析部１１３が、解析対象ソースコードを解析することにより画面記述変数を抽出し、抽出した画面記述変数の情報を格納した画面記述変数表１５３を生成する（Ｓ１１１３）。
【００６７】
続いて、スコープ判定部１１４が、画面記述変数表１５３に格納されている画面記述変数を一つ選択する（Ｓ１１１４）。尚、Ｓ１１１４〜Ｓ１１５１の処理は、画面記述変数表１５３に格納されている各画面記述変数について繰り返し実行される。
【００６８】
続いて、スコープ判定部１１４が、スコープ判定条件１５４に基づき、選択中の画面記述変数をグローバルにすべき（情報保存強度を高めるべき）か否かを判定する（Ｓ１１１５）。判定の結果が真であれば（Ｓ１１１５：ＹＥＳ）、Ｓ１１１６の処理へ進む。判定の結果が偽であれば（Ｓ１１１５：ＮＯ）、Ｓ１１２１の処理へ進む。
【００６９】
例えば、スコープ判定部１１４がparent.child1画面の画面定義部に含まれている「ｍ
１」という変数を選択した場合には次のようになる。尚、遷移の挙動は図８（ａ）、（ｂ）のように記述され、スコープ判定条件１５４は図１０のように設定され、スコープ判定部１１４はパターンＩＤ１５４３が「１」のパターンに基づき条件（ａ）と条件（ｂ）のＡＮＤ条件を条件式として真偽を判定するものとする。
【００７０】
まず条件（ａ）「画面記述変数が属する画面と双方向に遷移する画面がある」に関し、変数「ｍ１」が属する画面はparent.child1画面であり、その画面定義部はparent.child1画面定義部である。また図８（ａ）のソースコードによればparent.child1画面はparent.child2画面に遷移し、図８（ｂ）のソースコードによればparent.child2画面はparent.child1画面へ遷移する。従って、スコープ判定部１１４は、変数「ｍ１」は、「画面記述変数が属する画面と双方向に遷移する画面がある」と判定する。また条件（ｂ）「画面記述変数が属する画面定義部は遷移先画面で置き換わるか」に関し、変数「ｍ１」が属する画面はparent.child1画面であり、その画面定義部であるparent.child1画面定義部は、遷移先であるparent.child2画面に遷移した場合、図６に示すようにparent.child2画面定義部に置き換わる。従って、スコープ判定部１１４は、変数「ｍ１」は、「画面記述変数が属
する画面の画面定義部は遷移先の画面で置き換わる」と判定する。以上より、条件式、即ち条件（ａ）と条件（ｂ）のＡＮＤ条件は真となり、スコープ判定部１１４は、画面記述変数「ｍ１」はグローバル化すべきと判定し（Ｓ１１１５：ＹＥＳ）、処理はＳ１１１６に進む。
【００７１】
一方、スコープ判定条件１５４が図１０のように設定され、スコープ判定部１１４が、スコープ判定条件１５４のパターンＩＤ１５４３が「２」のパターンに基づき画面記述変数のスコープを判定する場合は次のようになる。但し、スコープ判定部１１４は、図１０のスコープ判定条件１５４における、条件（ａ）、条件（ｂ）、条件（Ａ）、及び条件（Ｂ）の全てをＡＮＤ条件で結んだもの（＝条件（ａ）、条件（ｂ）、条件（Ａ）、及び条件（Ｂ）のＡＮＤ条件）を条件式として真偽を判定するものとする。
【００７２】
まず条件（ａ）、条件（ｂ）の真偽の判定については前述と同様である。また条件（Ａ）「変数が属する画面と双方向に遷移する画面との遷移の往復回数が閾値以上か」に関し、実行ログ１５２から往復回数が７回以上であることがわかり、また条件（Ｂ）「変数が属する画面と双方向に遷移する画面との遷移の往復で、同じ値を該変数に格納する回数が閾値以上か」に関し、実行ログ１５２から同じ値を該変数に格納する回数が５回以上であることがわかった場合、条件式は真となり（Ｓ１１１５：ＹＥＳ）。この場合、スコープ判定部１１４は画面記述変数「ｍ１」はグローバル化すべきと判定し、処理はＳ１１１６に進む。
【００７３】
Ｓ１１１６では、スコープ判定部１１４は、Ｓ１１１４で取得した画面記述変数の情報保存強度が現在よりも高くなるように画面記述変数表１５３を設定する。具体的には、スコープ判定部１１４は、例えば、現在選択中の画面記述変数が現在定義されている画面の親画面であるparent画面定義部で定義されるように設定する。またこのとき、スコープ判定部１１４は、スコープを変更した画面記述変数の変数名が他の変数の変数名との間で重複（コンフリクト）するか否かを判定し、重複が生じる場合は一方の変数名を変更（画面記述変数表１５３の内容を変更）する（Ｓ１１１７）。
【００７４】
尚、以上の２つの例においてスコープ判定部１１４が画面記述変数「ｍ１」をグローバル化すべきと判定して情報保存強度を現在よりも高く設定するのは、次の理由による。
【００７５】
即ち図１２に示すように、parent.child1画面のparent画面の画面定義部で変数「ｍ０
」が定義され、parent.child1画面の画面定義部で変数「ｍ１」及び変数「ｍ２」が定義
されている場合、parent.child1画面からparent.child2画面に遷移した際、parent.child1画面定義部はparent.child2画面定義部に置き換わり、変数「ｍ１」及び変数「ｍ２」の内容はいずれも主記憶装置１２から消えてしまう。
【００７６】
一方、parent画面定義部は、parent.child2画面に遷移した後も存在するため、parent
画面定義部に定義されている変数「ｍ０」のデータは主記憶装置１２に残り続ける。
【００７７】
そこで、スコープ判定部１１４は、parent.child1画面定義部の変数「ｍ１」が現在よ
りも情報保存強度が高くなるように設定する。
【００７８】
図１１に戻り、Ｓ１１２１では、スコープ判定部１１４は、選択中の画面記述変数の情報保存強度を下げることができるか否かを判定する。この判定は、例えば、選択中の画面記述変数が現在定義されている画面の子画面内でのみ参照されるものであるか否かを判定することにより行う。判定が真であれば（Ｓ１１２１：ＹＥＳ）、Ｓ１１２２の処理に進む。判定が偽であれば（Ｓ１１２１：ＮＯ）、Ｓ１１４１の処理に進む。
【００７９】
Ｓ１１２２では、スコープ判定部１１４は、Ｓ１１１４で取得した画面記述変数の情報保存強度を下げる。前述の例であれば、スコープ判定部１１４は、例えば、画面記述変数「ｍ０」が、parent画面定義部からそれよりも情報保存強度の低いparent.child1画面定
義部で定義されるように画面記述変数表１５３を設定する。Ｓ１１２２の処理の後、処理はＳ１１１４に戻る。
【００８０】
続いて、プログラム生成装置１０は、Ｓ１１１４において未選択の画面記述変数があるか否かを判定する（Ｓ１１４１）。未選択の画面記述変数がある場合（Ｓ１１４１：ＹＥＳ）、処理はＳ１１１４に戻る。未選択の画面記述変数がない場合（Ｓ１１４１：ＮＯ）、Ｓ１１５１の処理に進む。
【００８１】
Ｓ１１５１では、ソースコード生成部１１５が、解析対象ソースコードに基づき、画面記述変数表１５３に従って画面記述変数のスコープを設定した調整ソースコードを生成する。尚、記憶部１１０は、生成された調整ソースコードをソースコード１５１として記憶する。以上でプログラム生成処理Ｓ１１００は終了する。
【００８２】
尚、Ｓ１１５１で生成された調整ソースコードは、ソースコード送信部１１６によってソフトウェア管理装置２０に送信され、例えば、ソフトウェアの開発や保守に用いるソースコードとして利用される。
【００８３】
以上に説明したように、本実施形態のプログラム生成装置１０は、解析対象ソースコードから抽出した画面記述変数によって記述される画面の挙動を、解析対象ソースコードに基づき取得される情報（解析対象ソースコード、実行ログ）から特定し、特定した挙動をスコープ判定条件１５４と対照することにより、抽出した画面記述変数に設定すべきスコープを決定し、決定したスコープとなるように記述した調整ソースコードを生成する。そのため、画面記述変数のスコープを適切に設定した調整ソースコードを効率よく生成することができる。また解析対象ソースコードにメソッドやその上位メソッドの利用／被利用関係がない場合でも画面記述変数のスコープを効率よく適切に設定することができる。
【００８４】
またプログラム生成装置１０は、ローカル化することが可能な画面記述変数については情報保存強度を下げる方向にスコープを設定して調整ソースコードを生成するので、メモリリークの発生を効果的に予防することができる。
【００８５】
また解析対象ソースコードの解析と実行ログの解析を併用することで、より高い精度で適切に画面記述変数のスコープを設定することができ、メモリリークの発生を予防するとともに記憶資源を効率よく利用することが可能な調整ソースコードを生成することができる。
【００８６】
以上、本発明について実施の形態に基づき具体的に説明したが、本発明は上記の実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能である。例えば、上記の実施の形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また上記実施形態の構成の一部について、他の構成の追加・削除・置換をすることができる。
【００８７】
また上記の各構成、機能部、処理部、処理手段等は、それらの一部または全部を、例えば、集積回路で設計する等によりハードウェアで実現してもよい。また上記の各構成、機能等は、プロセッサが夫々の機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリやハードディスク、ＳＳＤ（Solid State Drive）等の記録装置、またはＩ
Ｃカード、ＳＤカード、ＤＶＤ等の記録媒体に置くことができる。
【００８８】
また各図において、制御線や情報線は説明上必要と考えられるものを示しており、必ずしも実装上の全ての制御線や情報線を示しているとは限らない。例えば、実際にはほとんど全ての構成が相互に接続されていると考えてもよい。
【００８９】
また以上に説明した情報処理装置の各種機能部、各種処理部、各種データベースの配置形態は一例に過ぎない。各種機能部、各種処理部、各種データベースの配置形態は、各情報処理装置がハードウェアやソフトウェアの性能、処理効率、通信効率等の観点から最適な配置形態に変更し得る。
【符号の説明】
【００９０】
１  情報処理システム
５  通信ネットワーク
１０  プログラム生成装置
１１０  記憶部
１１１  ソースコード取得部
１１２  実行ログ取得部
１１３  ソースコード解析部
１１４  スコープ判定部
１１５  ソースコード生成部
１１６  ソースコード送信部
１５１  ソースコード（解析対象ソースコード、調整ソースコード）
１５２  実行ログ
１５３  画面記述変数表
１５４  スコープ判定条件
２０  ソフトウェア管理装置
２１０  記憶部
２１１  ソフトウェア管理部
２１２  プログラム実行部
２１３  ソースコード送信部
２１４  実行ログ送信部
２５１  ソースコード
２５２  実行ログ
Ｓ１１００  プログラム生成処理
【図１】
2020087033.tif 000003
【図２】
2020087033.tif 000004
【図３】
2020087033.tif 000005
【図４】
2020087033.tif 000006
【図５】
2020087033.tif 000007
【図６】
2020087033.tif 000008
【図７】
2020087033.tif 000009
【図８】
2020087033.tif 000010
【図９】
2020087033.tif 000011
【図１０】
2020087033.tif 000012
【図１１】
2020087033.tif 000013
【図１２】
2020087033.tif 000014