JP7059165B2 - プログラム生成装置、及びプログラム生成方法 - Google Patents

プログラム生成装置、及びプログラム生成方法 Download PDF

Info

Publication number
JP7059165B2
JP7059165B2 JP2018221532A JP2018221532A JP7059165B2 JP 7059165 B2 JP7059165 B2 JP 7059165B2 JP 2018221532 A JP2018221532 A JP 2018221532A JP 2018221532 A JP2018221532 A JP 2018221532A JP 7059165 B2 JP7059165 B2 JP 7059165B2
Authority
JP
Japan
Prior art keywords
screen
source code
scope
variable
program
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
JP2018221532A
Other languages
English (en)
Other versions
JP2020087033A (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 Systems Ltd
Original Assignee
Hitachi Systems 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 Systems Ltd filed Critical Hitachi Systems Ltd
Priority to JP2018221532A priority Critical patent/JP7059165B2/ja
Publication of JP2020087033A publication Critical patent/JP2020087033A/ja
Application granted granted Critical
Publication of JP7059165B2 publication Critical patent/JP7059165B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Description

本発明は、プログラム生成装置、及びプログラム生成方法に関する。
特許文献1には、プログラム設計変更における情報隠蔽作業を自動リファクタリング化することを目的として構成された情報隠蔽装置について記載されている。情報隠蔽装置は、入力されたプログラムにおける変数のうち、ユーザに指定された変数の生存範囲を算出し、ユーザに指定された変数の被覆メソッドを算出し、新規クラスの抽出が必要か否かを判定し、上記ユーザに指定された変数を、上記被覆メソッドまたはその上位にあるメソッドの局所変数とし、上記入力されたプログラムから新規クラスを抽出し、上記指定された変数をその新規クラスのメンバ変数とし、上記指定された変数にアクセスするメソッドを上記新規クラスに移動し、上記新規クラスのインスタンスを、上記被覆メソッドまたはその上位にあるメソッドの局所変数とする。
特開2006-201981号公報
Webサービス等を提供するソフトウェアの開発に際しては、プログラムで用いられる変数に割り当てた記憶領域が解放されずに確保されたままとなり、主記憶装置等の記憶資源を枯渇させてサービスに影響を与える、いわゆるメモリリーク(Memory leak)の発生
を予防することが求められる。メモリリークの予防策としては、変数のスコープを最小の範囲に限定することが効果的である。
しかし現状のソフトウェア開発工程では、複雑な判断が要求されるスコープの決定を変数毎に人手で行っており、作業負担やコストが課題となっている。尚、特許文献1では、メソッドやその上位メソッドの利用/被利用関係に基づき変数のスコープを判定している。そのため、利用/被利用関係がない場合は変数のスコープを判定することができない。
本発明はこのような背景に鑑みてなされたものであり、変数のスコープを効率よく適切に設定することが可能な、プログラム生成装置、及びプログラム生成方法を提供することを目的とする。
上記目的を達成するための本発明のうちの一つは、情報処理装置であって、画面に関する記述を含んだソースコードである解析対象ソースコード、及び、前記解析対象ソースコードにおいて画面に関する記述に用いられている変数である画面記述変数のスコープの決定に際して用いられ、前記画面の構造または挙動に関して設定された条件であるスコープ判定条件、を記憶し、前記解析対象ソースコードから前記画面記述変数を抽出し、抽出した前記画面記述変数によって記述される画面の構造または挙動を前記解析対象ソースコードに基づき取得される情報から特定し、特定した前記構造または挙動を前記スコープ判定条件と対照することにより前記画面記述変数に設定すべきスコープを決定し、前記解析対象ソースコードに基づき、前記画面記述変数が前記決定した前記スコープとなるように記述したソースコードである調整ソースコードを生成する、プログラム生成装置。
その他、本願が開示する課題、及びその解決方法は、発明を実施するための形態の欄、及び図面により明らかにされる。
本発明によれば、変数のスコープを効率よく適切に設定することができる。
情報処理システムの概略的な構成を示す図である。 情報処理システムを構成する情報処理装置の一例を示す図である。 プログラム生成装置が備える主な機能を示す図である。 ソフトウェア管理装置が備える主な機能を示す図である。 ソースコードの画面定義部、画面記述変数のスコープ、及び情報保存強度の関係を説明する図である。 解析対象ソースコードの一例を示す図である。 図6の解析対象ソースコードにおける画面(画面定義部)の構造を説明する図である。 (a)、(b)は、画面の遷移の挙動に関する記述を含むソースコードの例である。 画面記述変数表の一例である。 スコープ判定条件の一例である。 プログラム生成処理を説明するフローチャートである。 画面の遷移と画面記述変数の内容の保存状況を説明する図である。
以下、実施形態につき図面を参照しつつ説明する。
図1に一実施形態として示す情報処理システム1の概略的な構成を示している。同図に示すように、情報処理システム1は、プログラム生成装置10、及び一つ以上のソフトウェア管理装置20を含む。プログラム生成装置10とソフトウェア管理装置20は通信ネットワーク5を介して通信可能に接続されている。通信ネットワーク5は、有線または無線方式による通信手段であり、例えば、LAN(Local Area Network)、WAN(Wide Area Network)、インターネット等である。
ソフトウェア管理装置20は、情報処理装置であって、例えば、ソフトウェアの開発や保守のために用いられるリポジトリサーバ、ネットワークストレージ、ソフトウェアの開発者や保守者等が操作する端末装置等である。ソフトウェア管理装置20は、ソフトウェアを構成するプログラムのソースコードを管理(記憶)するとともに、上記のプログラムの実行に際して生成されるログ情報(以下、「実行ログ」と称する。)を生成する。
プログラム生成装置10は、情報処理装置であって、ソフトウェア管理装置20に管理されている上記のソースコードや実行ログに基づきソースコードを自動的に生成する機能を備える。
尚、本実施形態では、このようにプログラム生成装置10や各ソフトウェア管理装置20が夫々独立したハードウェア(情報処理装置)により実現されるとして説明するが、プログラム生成装置10やソフトウェア管理装置20のハードウェア構成は必ずしも限定されない。例えば、プログラム生成装置10とソフトウェア管理装置20の2つ以上を共通のハードウェアにより実現してもよい。またソフトウェア管理装置20をプログラム生成装置10として機能させるようにしてもよい。また上記のハードウェアは、その構成の全部または一部がクラウドシステム(cloud system)のクラウドサーバ(cloud server)の
ような仮想的な資源により実現されるものであってもよい。
図2は、上記のハードウェアの一例として示す情報処理装置100のブロック図である。同図に示すように、情報処理装置100は、プロセッサ11、主記憶装置12、補助記憶装置13、入力装置14、出力装置15、及び通信装置16の各構成を備える。これらは図示しないバス等の通信手段を介して通信可能に接続されている。
プロセッサ11は、CPU(Central Processing Unit)、MPU(Micro Processing Unit)等を用いて構成される。プロセッサ11が、主記憶装置12に格納されているプログラムを読み出して実行することにより、プログラム生成装置10やソフトウェア管理装置20の機能が実現される。
主記憶装置12は、プログラムやデータを記憶する装置であり、ROM(Read Only Memory)、RAM(Random Access Memory)、不揮発性半導体メモリ(NVRAM(Non Volatile RAM))等である。
補助記憶装置13は、SSD(Solid State Drive)、SDメモリカード等の各種不揮
発性メモリ(NVRAM:Non-volatile memory)、ハードディスクドライブ、光学式記憶装置
(CD(Compact Disc)、DVD(Digital Versatile Disc)等)、クラウドサーバの記憶領域等である。補助記憶装置13に格納されているプログラムやデータは主記憶装置12に随時読み込まれる。
入力装置14は、外部から情報の入力を受け付けるインタフェースであり、例えば、キーボード、マウス、タッチパネル、音声入力装置(マイクロフォン等)である。
出力装置15は、各種の情報を出力するインタフェースであり、画像表示装置(液晶モニタ、LCD(Liquid Crystal Display)、グラフィックカード)、印字装置、音声出力装置(スピーカ等)である。
通信装置16は、通信ネットワーク5を介した他の装置との間の通信を実現する有線方式または無線方式の通信インタフェースであり、例えば、NIC(Network Interface Card)、無線通信モジュール、USB(Universal Serial Interface)モジュール、シリアル通信モジュール等である。尚、通信装置16を他の装置からの情報の入力を受け付ける入力装置14として機能させてもよい。また通信装置16を他の装置に情報を出力する出力装置15として機能させてもよい。
情報処理装置100は、上記の構成に加え、例えば、デバイスドライバ、オペレーティングシステム、ファイルシステム、DBMS(DataBase Management System)等をさらに備えていてもよい。情報処理装置100は、各種の情報(データ)を、例えば、データベースのテーブルやファイルシステムによって管理されるファイルとして管理(記憶)する。
図3にプログラム生成装置10が備える主な機能を示している。プログラム生成装置10は、ソースコードを解析し、ソースコードに含まれている、画面に関して用いられている変数(画面の構造定義や遷移の制御に用いられている変数等。以下、「画面記述変数」と称する。)のスコープ(変数を参照可能な範囲(可視範囲))を決定する。尚、変数はソースコードにおいて関数として機能するものであってもよい。
同図に示すように、プログラム生成装置10は、記憶部110、ソースコード取得部111、実行ログ取得部112、ソースコード解析部113、スコープ判定部114、ソー
スコード生成部115、及びソースコード送信部116の各機能を有する。これらの機能は、プログラム生成装置10のプロセッサ11が、プログラム生成装置10の主記憶装置12に記憶されているプログラムを読み出して実行することにより実現される。
記憶部110は、ソースコード151、実行ログ152、画面記述変数表153、及びスコープ判定条件154を記憶する。
ソースコード151は、ソースコード取得部111によってソフトウェア管理装置20から取得(受信)され、ソースコード解析部113による解析の対象となるソースコード(以下、「解析対象ソースコード」と称する。)を含む。尚、解析対象ソースコードは、ソフトウェア管理装置20において管理されている既存のソースコードや、ソフトウェア管理装置20において設計情報等に基づき自動生成されたもの等、とくに限定されない。
またソースコード151は、ソースコード生成部115が、解析対象ソースコードに基づき生成したソースコード(以下、「調整ソースコード」とも称する。)を含む。
ソースコード生成部115は、画面記述変数がスコープ判定部114により決定されたスコープになるように調整ソースコードを生成する。調整ソースコードは、ソースコード送信部116によりソフトウェア管理装置20に送信される、
尚、本実施形態では、ソースコード151は、例えば、AngularJS(登録商標)等のフレ
ームワークを利用して生成される、JavaScript(登録商標)により記述されたものを例示するが、ソースコード151の種類は、特定のフレームワークによるものや特定の言語で記述されるものに限定されない。例えば、ソースコード151は、TypeScript(登録商標)やHTML(登録商標)等によって記述されたものであってもよい。
実行ログ152は、実行ログ取得部112によってソフトウェア管理装置20から取得(受信)された、ソースコードに基づくプログラムの実行ログである。
画面記述変数表153は、ソースコード解析部113がソースコード151から抽出した画面記述変数に関する情報を含む。画面記述変数表153はスコープ判定部114により参照される。
スコープ判定条件154は、画面記述変数のスコープの決定に用いる情報(以下、「スコープ判定条件」と称する。)を含む。スコープ判定条件154は、スコープ判定部114が、画面記述変数によって記述される画面の挙動を、解析対象ソースコードを解析することにより特定する際に参照する条件である「ソースコード判定条件」と、画面記述変数によって記述される画面の挙動を、実行ログにより解析することにより特定する際に参照する条件である「実行ログ判定条件」と、を含む。
プログラム生成装置10が有する上記機能のうち、ソースコード取得部111は、通信ネットワーク5を介してソフトウェア管理装置20からソースコードを取得(受信)する。取得したソースコードは記憶部110がソースコード151として記憶する。
実行ログ取得部112は、通信ネットワーク5を介してソフトウェア管理装置20から実行ログを取得(受信)する。取得した実行ログは記憶部110が実行ログ152として記憶する。
ソースコード解析部113は、ソースコード151を解析してソースコード151から画面記述変数を抽出して画面記述変数表153を生成する。
スコープ判定部114は、スコープ判定条件154に基づき、画面記述変数表153における各画面記述変数のスコープを決定する。
ソースコード生成部115は、解析対象ソースコードに基づき、画面記述変数表153における各画面記述変数がスコープ判定部114が決定したスコープになるように記述した調整ソースコードを生成する。
ソースコード送信部116は、ソースコード生成部115が生成したソースコード151をソフトウェア管理装置20に送信する。
図4にソフトウェア管理装置20が備える主な機能を示している。同図に示すように、ソフトウェア管理装置20は、記憶部210、ソフトウェア管理部211、プログラム実行部212、ソースコード送信部213、及び実行ログ送信部214の各機能を有する。これらの機能は、ソフトウェア管理装置20のプロセッサ11が、ソフトウェア管理装置20の主記憶装置12に記憶されているプログラムを読み出して実行することにより実現される。
記憶部210は、ソースコード251及び実行ログ252を記憶する。ソースコード251は、ソフトウェア管理部211が管理するソースコードであり、例えば、開発対象や保守対象のソースコードである。実行ログ252は、プログラム実行部212がソースコード251に基づくプログラムを実行することにより生成される実行ログである。
ソフトウェア管理部211は、例えば、統合開発環境(IDE:Integrated Development Environment)等のソフトウェアの開発/編集環境を提供し、開発対象もしくは編集対象のプログラムのソースコード251を管理する。
プログラム実行部212は、ソースコード251に基づくプログラムを実行してその実行ログ253を生成する。
図5は、ソースコードの画面定義部、画面記述変数のスコープ、及び、以下の説明で用いる用語である「情報保存強度」の関係を説明する図である。情報保存強度とは、ソースコード151に記述されている変数の内容の情報処理装置100の主記憶装置12への残りやすさ(記憶の維持されやすさ)を示す指標である。情報保存強度が高いほどメモリリーク(Memory leak)が生じる危険性(リスク)が高くなる。
例示するソースコードの画面定義部は、画面の入れ子関係を構成する、ルート画面定義部、親画面定義部、及び子画面定義部を有する。この構造(ルート画面の配下に親画面が定義され、親画面の配下に子画面が定義される構造)において、例えば、親画面定義部で定義されている変数は、制御がルート画面に移る(画面が遷移する)とその内容が失われてしまう。また子画面定義部で定義されている変数は、制御が親画面やルート画面に移るとその内容が失われてしまう。
同図に示すように、情報保存強度が高い変数ほどグローバル性が強く、情報保存強度が低い変数ほどローカル性が強くなる。例示するソースコードの画面定義部の構造では、各画面定義部に定義された変数の情報保存強度は、ルート画面定義部で定義された変数>親画面定義部で定義された変数>子画面定義部で定義された変数の順となる。
図6に解析対象ソースコードの一例を示す。例示する解析対象ソースコードは、ルーティングの定義(例えばリクエストURLに応じた処理の受け渡し先(コントローラ、テンプレート)の定義)に関して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(登録商標)のファイルに含まれていることが記述されている。
図7は、図6の解析対象ソースコードに基づく画面の構造を説明する図である。尚、例示するソースコードは、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画面定義部に定義された変数に対して
グローバルな関係となる。
図8(a)、(b)は、JavaScript(登録商標)で記述された、画面の遷移の挙動に関する記述を含むソースコードの例である。このうち(a)のソースコードは、parent.child1画面からparent.child2画面への遷移の挙動に関する記述を含む。また(b)のソースコードは、parent.child2画面からparent.child1画面への遷移の挙動に関する記述を含む。
図9に、画面記述変数表153の一例を示す。画面記述変数表153は、画面名1531で特定される各画面と、夫々に定義されている変数の変数名1532との対応を示す情報を含む。例示する画面記述変数表153の場合、ルート画面については画面記述変数は抽出されていない。一方、parent画面については「m0」という画面記述変数が抽出されている。またparent.child1画面については、「m1」と「m2」という画面記述変数が
、parent.child2画面については、「m3」と「m4」という画面記述変数が、夫々抽出
されている。
図10にスコープ判定条件154の一例を示す。スコープ判定条件154の内容は、例
えば、ソフトウェアの開発者や保守者等のユーザが設定する。
例示するスコープ判定条件154には、スコープ判定部114がソースコード151に記述されている変数をグローバル変数とすべきか否かを判定するための条件がスコープ判定条件として設定されている。また同図に示すように、例示するスコープ判定条件154は、前述したソースコード判定条件であるソースコード判定条件1541と、前述した実行ログ判定条件である実行ログ判定条件1542とを含む。
尚、本実施形態では、このようにスコープ判定条件としてソースコード151に記述されている変数をグローバル変数とすべきか否かを判定するための条件を例示するが、これとは逆にスコープ判定条件をソースコード151に記述されている変数をローカル変数とすべきか否かを判定するための条件としてもよい。またスコープ判定条件に、ソースコード151に記述されている変数をグローバル変数とすべきか否かを判定するための条件と、ソースコード151に記述されている変数をローカル変数とすべきか否かを判定するための条件とを混在させてもよい。
例示するスコープ判定条件154には、ソースコード判定条件1541として「画面記述変数が属する画面と双方向に遷移する画面はあるか」という条件(以下、条件(a)と称する。)と、「画面記述変数が属する画面定義部は遷移先画面で置き換わるか」という条件(以下、条件(b)と称する。)が設定されている。
また実行ログ判定条件1542として「画面記述変数が属する画面と双方向に遷移する画面との遷移の往復回数が閾値以上か」という条件(以下、条件(A)と称する。)と、「画面記述変数が属する画面と双方向に遷移する画面との遷移の往復で、同じ値を該変数に格納する回数が閾値以上か」という条件(以下、条件(B)と称する。)が設定されている。
尚、同図に示すパターンID1543は、上記の4つの条件(a)、条件(b)、条件(A)、条件(D)を選択して組み合わせることにより得られるパターン毎に付与される識別子(以下、パターンIDと称する。)である。スコープ判定部114は、画面記述変数のスコープの決定に際し、スコープ判定条件154に設定されているいずれかのパターンを選択して用いる。同図における「○」の記号は、当該パターンが該当する条件を選択することを意味している。また実行ログ判定条件1542の「○(閾値=7)」等における「閾値=7」等の表記は、実行ログ判定条件1542に記述されている閾値に設定する具体的な値を示している。
例えば、パターンIDが「1」のパターンを選択した場合、スコープ判定部114は、ソースコード判定条件である条件(a)及び条件(b)を用いた条件式に基づき画面記述変数のスコープを判定する。尚、上記条件式は、条件(a)と条件(b)とAND条件に基づくものとしてもよいし、条件(a)と条件(b)とのOR条件に基づくものとしてもよい。上記条件式が真となる場合、スコープ判定部114は、グローバル性が高くなるように画面記述変数のスコープを設定する。
一方、パターンIDが「2」のパターンを選択した場合、スコープ判定部114は、ソースコード判定条件である条件(a)及び条件(b)と、実行ログ判定条件である条件(A)及び条件(D)の4つの条件に基づく条件式によって画面記述変数のスコープを判定する。尚、上記条件式は、上記4つの条件の全てのAND条件としてもよいし、上記4つの条件の全てのOR条件としてもよい。また上記4つの条件をAND条件とOR条件とを混在させた条件式により真偽を判定するようにしてもよい。スコープ判定部114は、上記条件式が真となる場合、グローバル性が高くなるように画面記述変数のスコープを設定
する。
以上に示したスコープ判定条件154は一例に過ぎず、例えば、ソースコードの種類やソースコードによって実現されるアプリケーションの機能等に応じて様々な態様で設定することができる。
図11は、プログラム生成装置10が、解析対象ソースコードから画面記述変数を抽出し、抽出した画面記述変数のスコープを決定し、決定したスコープに基づき調整ソースコードを生成する処理(以下、プログラム生成処理S1100と称する。)を説明するフローチャートである。以下、同図とともにプログラム生成処理S1100について説明する。
まずソースコード取得部111が、ソフトウェア管理装置20からソースコードを取得する。取得したソースコードは記憶部110がソースコード151(解析対象ソースコード)として記憶する(S1111)。
続いて、実行ログ取得部112が、ソフトウェア管理装置20から解析対象ソースコードの実行ログ152を取得する。取得した実行ログは記憶部110が実行ログ152として記憶する(S1112)。尚、後述するスコープの判定においてスコープ判定条件として実行ログ判定条件を用いない場合には当該処理は必ずしも必要ない。
続いて、ソースコード解析部113が、解析対象ソースコードを解析することにより画面記述変数を抽出し、抽出した画面記述変数の情報を格納した画面記述変数表153を生成する(S1113)。
続いて、スコープ判定部114が、画面記述変数表153に格納されている画面記述変数を一つ選択する(S1114)。尚、S1114~S1151の処理は、画面記述変数表153に格納されている各画面記述変数について繰り返し実行される。
続いて、スコープ判定部114が、スコープ判定条件154に基づき、選択中の画面記述変数をグローバルにすべき(情報保存強度を高めるべき)か否かを判定する(S1115)。判定の結果が真であれば(S1115:YES)、S1116の処理へ進む。判定の結果が偽であれば(S1115:NO)、S1121の処理へ進む。
例えば、スコープ判定部114がparent.child1画面の画面定義部に含まれている「m
1」という変数を選択した場合には次のようになる。尚、遷移の挙動は図8(a)、(b)のように記述され、スコープ判定条件154は図10のように設定され、スコープ判定部114はパターンID1543が「1」のパターンに基づき条件(a)と条件(b)のAND条件を条件式として真偽を判定するものとする。
まず条件(a)「画面記述変数が属する画面と双方向に遷移する画面がある」に関し、変数「m1」が属する画面はparent.child1画面であり、その画面定義部はparent.child1画面定義部である。また図8(a)のソースコードによればparent.child1画面はparent.child2画面に遷移し、図8(b)のソースコードによればparent.child2画面はparent.child1画面へ遷移する。従って、スコープ判定部114は、変数「m1」は、「画面記述変数が属する画面と双方向に遷移する画面がある」と判定する。また条件(b)「画面記述変数が属する画面定義部は遷移先画面で置き換わるか」に関し、変数「m1」が属する画面はparent.child1画面であり、その画面定義部であるparent.child1画面定義部は、遷移先であるparent.child2画面に遷移した場合、図6に示すようにparent.child2画面定義部に置き換わる。従って、スコープ判定部114は、変数「m1」は、「画面記述変数が属
する画面の画面定義部は遷移先の画面で置き換わる」と判定する。以上より、条件式、即ち条件(a)と条件(b)のAND条件は真となり、スコープ判定部114は、画面記述変数「m1」はグローバル化すべきと判定し(S1115:YES)、処理はS1116に進む。
一方、スコープ判定条件154が図10のように設定され、スコープ判定部114が、スコープ判定条件154のパターンID1543が「2」のパターンに基づき画面記述変数のスコープを判定する場合は次のようになる。但し、スコープ判定部114は、図10のスコープ判定条件154における、条件(a)、条件(b)、条件(A)、及び条件(B)の全てをAND条件で結んだもの(=条件(a)、条件(b)、条件(A)、及び条件(B)のAND条件)を条件式として真偽を判定するものとする。
まず条件(a)、条件(b)の真偽の判定については前述と同様である。また条件(A)「変数が属する画面と双方向に遷移する画面との遷移の往復回数が閾値以上か」に関し、実行ログ152から往復回数が7回以上であることがわかり、また条件(B)「変数が属する画面と双方向に遷移する画面との遷移の往復で、同じ値を該変数に格納する回数が閾値以上か」に関し、実行ログ152から同じ値を該変数に格納する回数が5回以上であることがわかった場合、条件式は真となり(S1115:YES)。この場合、スコープ判定部114は画面記述変数「m1」はグローバル化すべきと判定し、処理はS1116に進む。
S1116では、スコープ判定部114は、S1114で取得した画面記述変数の情報保存強度が現在よりも高くなるように画面記述変数表153を設定する。具体的には、スコープ判定部114は、例えば、現在選択中の画面記述変数が現在定義されている画面の親画面であるparent画面定義部で定義されるように設定する。またこのとき、スコープ判定部114は、スコープを変更した画面記述変数の変数名が他の変数の変数名との間で重複(コンフリクト)するか否かを判定し、重複が生じる場合は一方の変数名を変更(画面記述変数表153の内容を変更)する(S1117)。
尚、以上の2つの例においてスコープ判定部114が画面記述変数「m1」をグローバル化すべきと判定して情報保存強度を現在よりも高く設定するのは、次の理由による。
即ち図12に示すように、parent.child1画面のparent画面の画面定義部で変数「m0
」が定義され、parent.child1画面の画面定義部で変数「m1」及び変数「m2」が定義
されている場合、parent.child1画面からparent.child2画面に遷移した際、parent.child1画面定義部はparent.child2画面定義部に置き換わり、変数「m1」及び変数「m2」の内容はいずれも主記憶装置12から消えてしまう。
一方、parent画面定義部は、parent.child2画面に遷移した後も存在するため、parent
画面定義部に定義されている変数「m0」のデータは主記憶装置12に残り続ける。
そこで、スコープ判定部114は、parent.child1画面定義部の変数「m1」が現在よ
りも情報保存強度が高くなるように設定する。
図11に戻り、S1121では、スコープ判定部114は、選択中の画面記述変数の情報保存強度を下げることができるか否かを判定する。この判定は、例えば、選択中の画面記述変数が現在定義されている画面の子画面内でのみ参照されるものであるか否かを判定することにより行う。判定が真であれば(S1121:YES)、S1122の処理に進む。判定が偽であれば(S1121:NO)、S1141の処理に進む。
S1122では、スコープ判定部114は、S1114で取得した画面記述変数の情報保存強度を下げる。前述の例であれば、スコープ判定部114は、例えば、画面記述変数「m0」が、parent画面定義部からそれよりも情報保存強度の低いparent.child1画面定
義部で定義されるように画面記述変数表153を設定する。S1122の処理の後、処理はS1114に戻る。
続いて、プログラム生成装置10は、S1114において未選択の画面記述変数があるか否かを判定する(S1141)。未選択の画面記述変数がある場合(S1141:YES)、処理はS1114に戻る。未選択の画面記述変数がない場合(S1141:NO)、S1151の処理に進む。
S1151では、ソースコード生成部115が、解析対象ソースコードに基づき、画面記述変数表153に従って画面記述変数のスコープを設定した調整ソースコードを生成する。尚、記憶部110は、生成された調整ソースコードをソースコード151として記憶する。以上でプログラム生成処理S1100は終了する。
尚、S1151で生成された調整ソースコードは、ソースコード送信部116によってソフトウェア管理装置20に送信され、例えば、ソフトウェアの開発や保守に用いるソースコードとして利用される。
以上に説明したように、本実施形態のプログラム生成装置10は、解析対象ソースコードから抽出した画面記述変数によって記述される画面の挙動を、解析対象ソースコードに基づき取得される情報(解析対象ソースコード、実行ログ)から特定し、特定した挙動をスコープ判定条件154と対照することにより、抽出した画面記述変数に設定すべきスコープを決定し、決定したスコープとなるように記述した調整ソースコードを生成する。そのため、画面記述変数のスコープを適切に設定した調整ソースコードを効率よく生成することができる。また解析対象ソースコードにメソッドやその上位メソッドの利用/被利用関係がない場合でも画面記述変数のスコープを効率よく適切に設定することができる。
またプログラム生成装置10は、ローカル化することが可能な画面記述変数については情報保存強度を下げる方向にスコープを設定して調整ソースコードを生成するので、メモリリークの発生を効果的に予防することができる。
また解析対象ソースコードの解析と実行ログの解析を併用することで、より高い精度で適切に画面記述変数のスコープを設定することができ、メモリリークの発生を予防するとともに記憶資源を効率よく利用することが可能な調整ソースコードを生成することができる。
以上、本発明について実施の形態に基づき具体的に説明したが、本発明は上記の実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能である。例えば、上記の実施の形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また上記実施形態の構成の一部について、他の構成の追加・削除・置換をすることができる。
また上記の各構成、機能部、処理部、処理手段等は、それらの一部または全部を、例えば、集積回路で設計する等によりハードウェアで実現してもよい。また上記の各構成、機能等は、プロセッサが夫々の機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリやハードディスク、SSD(Solid State Drive)等の記録装置、またはI
Cカード、SDカード、DVD等の記録媒体に置くことができる。
また各図において、制御線や情報線は説明上必要と考えられるものを示しており、必ずしも実装上の全ての制御線や情報線を示しているとは限らない。例えば、実際にはほとんど全ての構成が相互に接続されていると考えてもよい。
また以上に説明した情報処理装置の各種機能部、各種処理部、各種データベースの配置形態は一例に過ぎない。各種機能部、各種処理部、各種データベースの配置形態は、各情報処理装置がハードウェアやソフトウェアの性能、処理効率、通信効率等の観点から最適な配置形態に変更し得る。
1 情報処理システム
5 通信ネットワーク
10 プログラム生成装置
110 記憶部
111 ソースコード取得部
112 実行ログ取得部
113 ソースコード解析部
114 スコープ判定部
115 ソースコード生成部
116 ソースコード送信部
151 ソースコード(解析対象ソースコード、調整ソースコード)
152 実行ログ
153 画面記述変数表
154 スコープ判定条件
20 ソフトウェア管理装置
210 記憶部
211 ソフトウェア管理部
212 プログラム実行部
213 ソースコード送信部
214 実行ログ送信部
251 ソースコード
252 実行ログ
S1100 プログラム生成処理

Claims (15)

  1. 情報処理装置であって、
    画面に関する記述を含んだソースコードである解析対象ソースコード、及び、
    前記解析対象ソースコードにおいて画面に関する記述に用いられている変数である画面記述変数のスコープの決定に際して用いられ、前記画面の構造または挙動に関して設定された条件であるスコープ判定条件、
    を記憶し、
    前記解析対象ソースコードから前記画面記述変数を抽出し、
    抽出した前記画面記述変数によって記述される画面の構造または挙動を前記解析対象ソースコードに基づき取得される情報から特定し、特定した前記構造または挙動を前記スコープ判定条件と対照することにより前記画面記述変数に設定すべきスコープを決定し、
    前記解析対象ソースコードに基づき、前記画面記述変数が前記決定した前記スコープとなるように記述したソースコードである調整ソースコードを生成する、
    プログラム生成装置。
  2. 請求項1に記載のプログラム生成装置であって、
    前記画面記述変数によって記述される画面の構造または挙動を、前記解析対象ソースコードを解析することにより特定する、
    プログラム生成装置。
  3. 請求項1または2に記載のプログラム生成装置であって、
    前記解析対象ソースコードに基づくプログラムを実行することにより生成される実行ログを記憶し、
    前記抽出した画面記述変数によって記述される画面の挙動を、前記実行ログを解析することにより特定し、特定した前記挙動を前記スコープ判定条件と対照することにより、前記画面記述変数のスコープを決定する、
    プログラム生成装置。
  4. 請求項2に記載のプログラム生成装置であって、
    前記スコープ判定条件が、前記画面記述変数が属する画面と双方向に遷移する画面はあるかという条件、及び画面記述変数が属する画面定義部は遷移先画面で置き換わるかという条件、のうちの少なくともいずれかに基づくものである、
    プログラム生成装置。
  5. 請求項3に記載のプログラム生成装置であって、
    前記スコープ判定条件が、画面記述変数が属する画面と双方向に遷移する画面との遷移の往復回数が予め設定された閾値以上かという条件、及び画面記述変数が属する画面と双方向に遷移する画面との遷移の往復で、同じ値を該画面記述変数に格納する回数が予め設定された閾値以上かという条件、のうちの少なくともいずれかに基づくものである、
    プログラム生成装置。
  6. 請求項1に記載のプログラム生成装置であって、
    前記抽出した画面記述変数に設定すべきとして決定したスコープが現在よりもローカルなスコープである場合、当該画面記述変数のスコープが現在よりもローカルなスコープになるように前記解析対象ソースコードを変更することにより前記調整ソースコードを生成する、
    プログラム生成装置。
  7. 請求項1に記載のプログラム生成装置であって、
    前記抽出した画面記述変数に設定すべきとして決定したスコープが現在よりもグローバルなスコープである場合、当該画面記述変数のスコープが現在よりもグローバルなスコープになるように前記解析対象ソースコードを変更することにより前記調整ソースコードを生成する、
    プログラム生成装置。
  8. 請求項7に記載のプログラム生成装置であって、
    前記画面記述変数の変数名が重複しないように前記調整ソースコードを生成する、
    プログラム生成装置。
  9. 請求項7または8に記載のプログラム生成装置であって、
    前記解析対象ソースコードは、入れ子の関係を有する複数の画面の夫々に対応した画面定義部を有し、
    前記抽出した画面記述変数に設定すべきとして決定したスコープに応じて前記画面記述変数を記述する前記画面定義部を選択して前記調整ソースコードを生成する、
    プログラム生成装置。
  10. 情報処理装置が、
    画面に関する記述を含んだソースコードである解析対象ソースコード、及び、前記解析対象ソースコードにおいて画面に関する記述に用いられている変数である画面記述変数のスコープの決定に際して用いられ、前記画面の構造または挙動に関して設定された条件であるスコープ判定条件、を記憶するステップと、
    前記解析対象ソースコードから前記画面記述変数を抽出するステップと、
    抽出した前記画面記述変数によって記述される画面の構造または挙動を前記解析対象ソースコードに基づき取得される情報から特定し、特定した前記構造または挙動を前記スコープ判定条件と対照することにより前記画面記述変数に設定すべきスコープを決定するステップと、
    前記解析対象ソースコードに基づき、前記画面記述変数が前記決定した前記スコープとなるように記述したソースコードである調整ソースコードを生成するステップと、
    を実行する、プログラム生成方法。
  11. 請求項10に記載のプログラム生成方法であって、
    前記情報処理装置が、前記画面記述変数によって記述される画面の構造または挙動を、前記解析対象ソースコードを解析することにより特定するステップ
    を更に実行する、プログラム生成方法。
  12. 請求項10または11に記載のプログラム生成方法であって、
    前記情報処理装置が、
    前記解析対象ソースコードに基づくプログラムを実行することにより生成される実行ログを記憶するステップと、
    前記抽出した画面記述変数によって記述される画面の挙動を、前記実行ログを解析することにより特定し、特定した前記挙動を前記スコープ判定条件と対照することにより、前記画面記述変数のスコープを決定するステップと、
    を更に実行する、プログラム生成方法。
  13. 請求項11に記載のプログラム生成方法であって、
    前記スコープ判定条件が、前記画面記述変数が属する画面と双方向に遷移する画面はあるかという条件、及び画面記述変数が属する画面定義部は遷移先画面で置き換わるかという条件、のうちの少なくともいずれかに基づくものである、
    プログラム生成方法。
  14. 請求項12に記載のプログラム生成方法であって、
    前記スコープ判定条件が、画面記述変数が属する画面と双方向に遷移する画面との遷移の往復回数が予め設定された閾値以上かという条件、及び画面記述変数が属する画面と双方向に遷移する画面との遷移の往復で、同じ値を該画面記述変数に格納する回数が予め設定された閾値以上かという条件、のうちの少なくともいずれかに基づくものである、
    プログラム生成方法。
  15. 請求項10に記載のプログラム生成方法であって、
    前記情報処理装置が、
    前記抽出した画面記述変数に設定すべきとして決定したスコープが現在よりもグローバルなスコープである場合、当該画面記述変数のスコープが現在よりもグローバルなスコープになるように前記解析対象ソースコードを変更することにより前記調整ソースコードを生成するステップと、
    前記画面記述変数の変数名が重複しないように前記調整ソースコードを生成するステップと、
    を更に実行する、プログラム生成方法。
JP2018221532A 2018-11-27 2018-11-27 プログラム生成装置、及びプログラム生成方法 Active JP7059165B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2018221532A JP7059165B2 (ja) 2018-11-27 2018-11-27 プログラム生成装置、及びプログラム生成方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2018221532A JP7059165B2 (ja) 2018-11-27 2018-11-27 プログラム生成装置、及びプログラム生成方法

Publications (2)

Publication Number Publication Date
JP2020087033A JP2020087033A (ja) 2020-06-04
JP7059165B2 true JP7059165B2 (ja) 2022-04-25

Family

ID=70908306

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018221532A Active JP7059165B2 (ja) 2018-11-27 2018-11-27 プログラム生成装置、及びプログラム生成方法

Country Status (1)

Country Link
JP (1) JP7059165B2 (ja)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002049521A (ja) 2000-08-03 2002-02-15 Ntt Comware Corp 変数の伝達方法およびそのプログラムが記録されたコンピュータ読み取り可能な記録媒体
JP2009048259A (ja) 2007-08-14 2009-03-05 Seiko Epson Corp プログラム変換方法及び変換用プログラム
JP2017027331A (ja) 2015-07-22 2017-02-02 コニカミノルタ株式会社 画像形成装置及び情報表示方法
US20170161035A1 (en) 2015-12-03 2017-06-08 International Business Machines Corporation Method of Adding Local Variables In Place of Global in JavaScript
JP2018106556A (ja) 2016-12-27 2018-07-05 株式会社日立製作所 画面情報生成装置、画面情報生成方法、及びプログラム

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05241755A (ja) * 1992-02-29 1993-09-21 Fujitsu Ltd 変数記憶域管理方法
JP3266097B2 (ja) * 1998-03-20 2002-03-18 日本電気株式会社 非リエントラントプログラムの自動リエントラント化方法及びシステム

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002049521A (ja) 2000-08-03 2002-02-15 Ntt Comware Corp 変数の伝達方法およびそのプログラムが記録されたコンピュータ読み取り可能な記録媒体
JP2009048259A (ja) 2007-08-14 2009-03-05 Seiko Epson Corp プログラム変換方法及び変換用プログラム
JP2017027331A (ja) 2015-07-22 2017-02-02 コニカミノルタ株式会社 画像形成装置及び情報表示方法
US20170161035A1 (en) 2015-12-03 2017-06-08 International Business Machines Corporation Method of Adding Local Variables In Place of Global in JavaScript
JP2018106556A (ja) 2016-12-27 2018-07-05 株式会社日立製作所 画面情報生成装置、画面情報生成方法、及びプログラム

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
wakamsha,【AngularJS x TypeScript デザインパターン】 Controller と Routing 篇 - AngularJS + TypeScript #4,PSYENCE:MEDIA [online],2015年12月25日,[retrieved on 2022-03-28], Retrieved from the Internet: <URL: https://blog.recruit.co.jp/rmp/front-end/post-7730/>

Also Published As

Publication number Publication date
JP2020087033A (ja) 2020-06-04

Similar Documents

Publication Publication Date Title
CN103955367A (zh) 一种生成页面的方法及装置
EP2972827B1 (en) Collaborative editing
US8527254B2 (en) Simulator engine development system and simulator engine development method
JPWO2020008991A1 (ja) 検証自動化装置、検証自動化方法、およびプログラム
US20110126171A1 (en) Dynamic native editor code view facade
JP6692289B2 (ja) 画面情報生成装置、画面情報生成方法、及びプログラム
JP7059165B2 (ja) プログラム生成装置、及びプログラム生成方法
JP5354981B2 (ja) 文書管理装置、文書管理方法及びプログラム
US20100275183A1 (en) Source code auditor with a customized rules builder
JP2008165342A (ja) ソースコード生成方法及び装置並びにプログラム
JP7025104B2 (ja) 情報処理装置、方法およびプログラム
US11061664B2 (en) Code management system and code management method
JP2013235508A (ja) オブジェクト指向プログラム生成装置、その方法、プログラム
JP7260150B2 (ja) Webサイト設計支援装置、Webサイト設計支援方法、及びプログラム
JP2009053767A (ja) プログラム解析装置、および、プログラム解析方法
JP2007156898A (ja) 情報処理装置及びその制御方法、プログラム、記憶媒体
JP6623731B2 (ja) 情報処理装置、情報処理方法、及び、プログラム
JP2009093491A (ja) 検証シナリオ作成プログラム、該プログラムを記録した記録媒体、検証シナリオ作成装置、および検証シナリオ作成方法
US20170300179A1 (en) Display control apparatus, non-transitory computer-readable storage medium and display control method
JP2008176364A (ja) プログラム部品化支援装置
JPWO2015029242A1 (ja) ライセンス管理装置、ライセンス管理方法、及びプログラム
JP6983693B2 (ja) スタブ生成支援装置、スタブ生成支援方法、及びプログラム
JP6497087B2 (ja) 情報処理装置及び情報処理プログラム
CN115544626B (zh) 子模型抽取方法、装置、计算机设备及介质
KR100456631B1 (ko) 객체지향 프로그래밍 시스템의 설계 모델 적용장치와 그적용방법 및 이에 관련된 프로그램의 기록매체

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210415

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20220323

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220413

R150 Certificate of patent or registration of utility model

Ref document number: 7059165

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150