JP2010033249A - プログラム分析方法及びプログラム作成方法 - Google Patents

プログラム分析方法及びプログラム作成方法 Download PDF

Info

Publication number
JP2010033249A
JP2010033249A JP2008193652A JP2008193652A JP2010033249A JP 2010033249 A JP2010033249 A JP 2010033249A JP 2008193652 A JP2008193652 A JP 2008193652A JP 2008193652 A JP2008193652 A JP 2008193652A JP 2010033249 A JP2010033249 A JP 2010033249A
Authority
JP
Japan
Prior art keywords
program
common
source
common element
quasi
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.)
Granted
Application number
JP2008193652A
Other languages
English (en)
Other versions
JP5020184B2 (ja
Inventor
Kotaro Sanai
孝太郎 佐内
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.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric 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 Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Priority to JP2008193652A priority Critical patent/JP5020184B2/ja
Publication of JP2010033249A publication Critical patent/JP2010033249A/ja
Application granted granted Critical
Publication of JP5020184B2 publication Critical patent/JP5020184B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

【課題】構造化プログラミングされていないプログラムでも、再利用可能な部品単位に分割するプログラム分析方法及びプログラム作成方法を得る。
【解決手段】単語/記号/数字の単位抽出部2により複数のソースプログラム1からプログラム文を抽出し、共通要素抽出部3により、各ソースプログラム内で一つしかないプログラム文で、かつ全てのソースプログラム1に共通なプログラム文を共通要素として抽出し、共通要素間プログラム文抽出部4により、各ソースプログラム内で連続する共通要素間にあるプログラム文を抽出し、準共通要素抽出部5により、それらのプログラム文を比較して、一致するプログラム文を準共通要素として抽出し、非共通要素抽出部6により、共通要素及び準共通要素を除くプログラム文を非共通要素として抽出して、流用可能な単位のプログラム文を保存するようにした。
【選択図】図1

Description

この発明は、構造化プログラミングがされていない複数のソースプログラムを分析し、プログラムの再利用可能な単位を特定するプログラム分析方法及びプログラム作成方法に関するものである。
大規模なソフトウエアシステムを開発・保守する組織において、長期にわたるシステム保守の中で作成された膨大な類似プログラム資産を管理することが難しくなっている。特に、システムの信頼性と安全性確保のために、納入実績のあるプログラムを、生産性向上のためにプログラム構造を大きく組み直すようなことは許容されにくく、既存のプログラムを流用して作成することが基本となっている。
また、流用元のプログラムが開発されたのは事業創設期であり、構造化プログラミングがされていないことが多い。
構造化プログラミングされているソースプログラムの共通部分を類型化する方法については、特許文献1が提案されている。
特開2005−316707号公報(第3〜8頁、図1)
大規模ソフトウエアのプログラムの流用設計をする上で、構造化プログラミングされていないプログラムのカスタマイズ範囲や改造範囲を抽出するためには、大規模プログラムのソースプログラムを人間系で一行一行確認する他に方法がないため、解析に時間を要する問題があった。
また、あるプログラムに動作不良が発生した場合、納入実績のあるプログラムのうちで改修対象となる対象を選定するにも、ソースプログラムを人間系で確認する必要があるため、ヒューマンエラーが入り込み易いという問題があった。
特許文献1は、構造化プログラミングされているソースプログラムの共通部分を類型化するものであり、構造化プログラミングされていないソースプログラムについてのものではなかった。
この発明は、上記のような課題を解決するためになされたものであり、構造化プログラミングされていないプログラムでも、再利用可能な部品単位に分割し、これらを組合せてプログラムを再構築することができるプログラム分析方法及びプログラム作成方法を得ることを目的としている。
この発明に係わるプログラム分析方法においては、複数のソースプログラムからソースプログラムごとにプログラムの構成要素であるプログラム文を抽出する第一のステップ、
プログラム文のうち、各ソースプログラム内で一つしかないプログラム文であり、かつ複数のソースプログラムのすべてに存在するプログラム文を共通要素として抽出する第二のステップ、
各ソースプログラムの共通要素で区切られた同じ範囲において、複数のソースプログラムに存在するプログラム文を準共通要素として抽出する第三のステップ、
共通要素と準共通要素のどちらでもないプログラム文を非共通要素として抽出する第四のステップ、
抽出した共通要素、準共通要素および非共通要素のいずれかである各要素を記憶装置に保存するステップを含み、
共通要素は各ソースプログラムにおける順番がすべてのソースプログラムで同じであり、
準共通要素の各ソースプログラムにおける順番は、準共通要素を有するすべてのソースプログラムで同じであり、
各要素には、抽出された元のソースプログラムと、そのソースプログラムの中での位置を示す分類コードが付与されているものである。
この発明は、以上説明したように、複数のソースプログラムからソースプログラムごとにプログラムの構成要素であるプログラム文を抽出する第一のステップ、
プログラム文のうち、各ソースプログラム内で一つしかないプログラム文であり、かつ複数のソースプログラムのすべてに存在するプログラム文を共通要素として抽出する第二のステップ、
各ソースプログラムの共通要素で区切られた同じ範囲において、複数のソースプログラムに存在するプログラム文を準共通要素として抽出する第三のステップ、
共通要素と準共通要素のどちらでもないプログラム文を非共通要素として抽出する第四のステップ、
抽出した共通要素、準共通要素および非共通要素のいずれかである各要素を記憶装置に保存するステップを含み、
共通要素は各ソースプログラムにおける順番がすべてのソースプログラムで同じであり、
準共通要素の各ソースプログラムにおける順番は、準共通要素を有するすべてのソースプログラムで同じであり、
各要素には、抽出された元のソースプログラムと、そのソースプログラムの中での位置を示す分類コードが付与されているので、構造化プログラミングされていないプログラムでも、再利用可能な部品単位に分割することができる。
実施の形態1.
図1は、この発明の実施の形態1によるプログラム分析方法を示す概念図である。
図1において、プログラム分析方法は、5つの抽出部と3つの一覧データを有している。
3つの一覧データは、以下に示すプログラム文の3分類のそれぞれに対応するものである。
共通要素:1つのソースプログラム内で唯一無二のプログラム文であり、すべてのソースプログラムに存在しているもの。プログラムにより順番が入れ替わっているものは、共通要素とはしない。
準共通要素:複数のソースプログラムに存在する文であって、共通要素でないもの。ただし、共通要素により区切られた同じ範囲にあるものに限る。複数の連続するプログラム文が準共通要素に該当する場合は、まとめて1個の準共通要素とする。なお、他の準共通要素との前後関係も考慮するが、それについては後で説明する。
非共通要素:共通要素でも準共通要素でもないもの。
単語/記号/数字の単位抽出部2は、ソースプログラム1が入力され、単語/記号/数字の単位で区切ったプログラムの断片を抽出して、1個のプログラム文が1行に対応するように表形式で保存する。(図2のステップS01参照)。共通要素抽出部3は、1つのプログラム内で唯一無二のプログラム文で、すべてのソースプログラムに存在しているものを共通要素として抽出し、発見された順番に共通要素一覧データ7に保存する。(図2のステップS02、ステップS03参照)。
共通要素間プログラム文抽出部4は、一つのソースプログラム内で連続する共通要素の間に存在しているプログラム文を抽出する。準共通要素抽出部5は、複数のソースプログラムについて共通要素間プログラム文抽出部4によって抽出された、同じ共通要素の間に存在していたプログラム文同士を比較することを繰り返して、発見した準共通要素を準共通要素一覧データ8に登録する。(図2のステップS04参照)。
非共通要素抽出部6は、共通要素一覧データ7および準共通要素一覧データ8に登録されている各要素を、単語/記号/数字の単位で区切った表形式のデータから削除し、残ったプログラム文を、発見された順番に非共通要素一覧データ9に登録する。(図2のステップS05参照)。
なお、共通要素、準共通要素、非共通要素をまとめてプログラム要素ということもある。
図2は、この発明の実施の形態1によるプログラム分析方法の処理を示すフローチャートである。
図3は、この発明の実施の形態1によるプログラム分析方法において表形式のデータであるプログラム文を作成する処理を説明するフローチャートである。
図3(a)はフローチャートであり、図3(b)はステップS12の処理内容を示す図である。
図4は、この発明の実施の形態1によるプログラム分析方法においてプログラム中で唯一無二のプログラム文を抽出する処理を説明するフローチャートである。
図5は、この発明の実施の形態1によるプログラム分析方法において共通要素を抽出する処理を説明するフローチャートである。
図6は、この発明の実施の形態1によるプログラム分析方法において準共通要素を抽出する処理を説明するフローチャートである。
図7は、この発明の実施の形態1によるプログラム分析方法において準共通要素を抽出する処理での共通要素で区切られた範囲を説明する例を示す図である。
図8は、この発明の実施の形態1によるプログラム分析方法において準共通要素を抽出する処理を説明する例を示す図である。
図9は、この発明の実施の形態1によるプログラム分析方法において非共通要素を抽出する処理を説明するフローチャートである。
次に、動作について説明する。
プログラム分析方法を実現するプログラムによる制御動作は、図2のフローチャートのとおりである。
図2で、ステップS01(第一のステップ)は、ソースプログラム1から、単語/記号/数字の単位で区切った表形式により抽出する。次に、ステップS02にて、1つのプログラム内で1つしかないプログラム文を抽出し、次いで、ステップS03では、ステップS02で抽出したプログラム文がすべてのプログラム文に共通して存在しているプログラム文であれば、共通要素として、発見された順番に共通要素一覧データ7に保存する。(ステップS02、S03は、第二のステップを構成する。)
次に、ステップS04(第三のステップ)で、ソースプログラム内に存在する共通要素で区切られた範囲を前から順に処理して、その範囲に存在するプログラム文を各ソースプログラムから抜粋する。そして、異なるソースプログラムの同じ共通要素の間に存在していたプログラム文同士を比較し、少なくとも二つのプログラムで共通なプログラム文を、共通であるプログラム数ができるだけ多くなるようにして切り出し、順番に準共通要素一覧データ8に登録する。加えて、最初に一致する行と共通要素との相対行/列を記録する。
最後に、ステップS05(第四のステップ)で、ステップS01で保存された表形式のデータから、共通要素一覧データ7および準共通要素一覧データ8に登録されている各要素を、単語/記号/数字の単位で削除し、空き行で挟まれたプログラム文を切り出し、発見された順番に非共通要素一覧データ9に登録する。加えて、プログラム内の非共通要素と共通要素との相対行/列を記録する。
ここで、登録とは、プログラム文がもつ分類コード(1)〜(9)を使い、ファイル名“(1)(2)(3)(4)(5)(6)(7)(8)(9)”としてTXTファイルで保存することをいう。なお、分類コード(1)〜(9)については後述する。
上述の手法を用いることにより、構造化されていないプログラム文においても、共通するプログラム文を機械的に抽出し、分類することができるようになっている。
なお、共通要素一覧データ7、準共通要素一覧データ8、非共通要素一覧データ9に保存されたプログラム文は、分類コードを付けて保存する。
ここで、分類コードとは、以下の情報を意味する。
(1):分析対象の複数のソースプログラムのすべてに含まれる共通要素か、2つ以上のソースプログラムに含まれる準共通要素か、1つだけ発見された非共通要素かという分類記号(共通要素:1、準共通要素:2、非共通要素:3)
(2):共通要素、準共通要素、非共通要素としてそれぞれ見つかった順番
(3):分析対象である複数のプログラムに含まれる要素であれば、要素を含んでいるプログラム数
(4): そのプログラム文よりも前にある共通要素の中で最も近くに存在する共通要素の番号。共通要素の場合は、自分の番号が入る。
(5):(4)に記録した共通要素との相対行数。共通要素の場合は、0になる。
(6):プログラム文の構成要素数。表形式における列の数。
(7):プログラムが作成された日付
(8):解析元プログラム番号
(9):解析元プログラム内の要素の行数
次に、分類コードの例について説明する。
「解析プログラムがソースプログラム内を解析している際に3番目に見つかった準共通要素で、5つのソースプログラムの中で2つのソースプログラムに含まれている準共通要素は、3列であり、ソースプログラムBにおいて10行目に存在し、最も近い共通要素は3行目にある2番目の共通要素であり、この共通要素からの相対行数は7行である。ソースプログラムB(番号2)は2007/08/03に作成されている。」
という場合、上記「」内の文章を分類コードが決まる毎に区切って説明すると、以下の通りである。
解析プログラムがソースプログラム内を解析している際に、
3番目に見つかった・・・・・・(2)は3
準共通要素で、・・・・・・・・(1)は2
5つのソースプログラムの中で2つのソースプログラムに含まれている・・・(3)は2
準共通要素は3列であり、・・・・・・・・・・・・・・・・・・(6)は3
ソースプログラムBにおいて10行目に存在し、・・・・・・・・(9)は10
最も近い共通要素は3列目にある2番目の共通要素であり、・・・(4)は2
この共通要素からの相対行数は7行である。・・・・・・・・・・(5)は7
ソースプログラムB(番号2)は ・・・・・・・・・・・・・・(8)は2
2007/08/03に作成されている。・・・・・・・・(7)は2007/08/03
以上をまとめると、
(1)2 (2)3 (3)2 (4)2 (5)7 (6)3
(7)20070803 (8)2 (9)10
となる。
次に、図3により、図2のステップS01について詳細に説明する。
図3(a)で、まず、ステップS11で、比較対象となる複数のソースプログラムにプログラム番号(1〜N)を付ける。これにより、分類コード(7)(8)が取得される。次いで、ステップS12で、次のプログラム番号のソースプログラムを空白・カンマ・括弧で区切り、単語/記号/数字の単位で表形式のフォーマットに読み込む。これにより、図3(b)のように読み込まれる。
次いで、ステップS13で、プログラム行間の改行、プログラム文内の構成要素間のスペースを削除する。ステップS14で、要素の行列を取得する。これにより、分類コード(9)(6)が取得される。次いで、ステップS15で、未確定な分類コードは♯とし、(1)〜(9)の分類コードをファイル名としてソースプログラム文を“♯♯♯♯♯♯(6)(7)(8)(9)”という名前で保存する。
次に、図4により、図2のステップS02の処理について詳細説明する。
先ず、ステップS21で、プログラム番号N番の表形式のファイルを読み込む。ステップS22で、次の行に含まれている単語/記号/数字(プログラム文)を読み込む。次いで、ステップS23で、プログラム番号N番の表形式のファイルの全行を順に処理して、S22で読み込んだ行と同一の行が、1行以上あるかどうかを判定し、NOであれば、ステップS24で、読み込まれた単語/記号/数字を基準キーワードとして登録する。YESであれば、ステップS22に戻る。ステップS24に次いで、ステップS25で、プログラム番号N番の最後の行かどうかを判定し、YESであれば、終了し、NOであれば、ステップS22に戻る。
次に、図5により、図2のステップS03の処理について詳細に説明する。
まず、ステップS31で、次の基準キーワードを読み出す。ステップS32で、基準キーワードがすべてのソースプログラムにおいて、最も新しく見つかった共通要素よりも後の位置に含まれるかどうかを判定し、(これにより、分類コード(3)=N、(5)=0を取得する。)、NOであれば、ステップS31に戻り、YESであれば、ステップS33で、基準キーワードを行単位で共通要素として採番する。これにより、分類コード(1)(2)及び(4)=(2)を取得する。
次いで、ステップS34で、最後の基準キーワードかどうかを判定し、NOであれば、ステップS31に戻り、YESであれば、ステップS35で、(1)〜(9)の分類コードをファイル名としてソースプログラム文を“(1)(2)(3)(4)(5)(6)(7)(8)(9)”という名前に変更して保存する。
次に、図6ないし図8により、準共通要素を抽出するステップS04の処理について例を用いて説明する。
まず、図6に示すフローチャートにおけるステップS41で、共通要素で区切られた範囲の先頭を処理対象とする。具体的には、ソースプログラムの先頭から1個目の共通要素までの範囲を処理対象とする。図7が処理対象の範囲の例である。
ステップS42では、各ソースプログラムについて処理対象の範囲を取り出す。ステップS43では、すべての2個のソースプログラムの組み合わせについて、同じプログラム文が存在するかどうか検索し、同じプログラム文を1行単位で準共通要素の候補として抽出する。ステップS44では、連続した行が準共通要素の候補として抽出されている場合に、それらをまとめられるかどうかチェックし、まとめられる場合はまとめる。ステップS45では、準共通要素のデータを作成する。ステップS46では、未処理の範囲があるかチェックする。未処理の範囲があれば、ステップS47で次の範囲を処理対象として、ステップS42に戻る。未処理の範囲がなければ、処理を終了する。
ステップS43の処理を、図8により説明する。図8(a)はプログラム1とプログラム2の間でのチェックが終了した段階であり、図8(b)はステップS43が終了した段階であり、図8(c)はステップS44が終了した段階である。2個のソースプログラムの組を処理する順番は、図8(a)の上部に示した順番とする。2個のソースプログラムの組は、1個のソースプログラム(基準プログラムと呼ぶ)について他のソースプログラムとのまだ処理していないすべての組み合わせをチェックすることを繰り返していくものとする。最初に、プログラム1と他のプログラムとの組み合わせを処理し、次にプログラム2に関する未処理の組み合わせを処理して、最後にプログラム3とプログラム4の組についてチェックする。
2個のソースプログラムの間でのチェックでは、基準プログラムのプログラム文を前から順番に処理対象のプログラム文(基準プログラム文と呼ぶ)に決め、もう1個のソースプログラム(対象プログラムと呼ぶ)のプログラム文(対象プログラム文と呼ぶ)を前から順番に処理して、対象プログラム文が基準プログラム文と同じかどうかをチェックする。同じ場合には、基準プログラム文と対象プログラム文を準共通要素の候補として抽出する。準共通要素の候補が抽出できれば、基準プログラム文および対象プログラム文を、抽出した準共通要素の候補の次の行に移動させる。準共通要素の候補を抽出する際には、基準プログラム文が既に抽出された準共通要素の候補に含まれる場合は、対象プログラム文をその準共通要素の候補に追加する。
対象プログラム文が基準プログラム文と異なれば、次のプログラム文を対象プログラム文とし、対象プログラムにおいて最後のプログラム文を処理しても基準プログラム文と同じプログラム文が無い場合は、基準プログラム文を次のプログラム文に移動させる。こうして、すべての基準プログラム文に対して対象プログラム文とのチェックが終了すれば、2個のソースプログラムの間でのチェックを終了する。
図8(a)は、プログラム1を基準プログラムとし、プログラム2を対象プログラムとしてのチェックが終了した後の状態である。検出された準共通要素の候補を、枠で囲んで示す。また、すべての2個のソースプログラムの組み合わせについてチェックが終了した後の状態を図8(b)に示す。最初は、プログラム1とプログラム2の間で抽出された”AAA”という準共通要素の候補に、プログラム3のものも追加されている。”BBB”と”CCC”は、プログラム1とプログラム2において連続して配置されており、1個の準共通要素になるべきであるが、この段階では別の候補として抽出されている。
ステップS44では、以下のような処理を行う。準共通要素の候補を順に処理対象(基準候補)に決め、基準候補を有するどれかのソースプログラムで、基準候補であるプログラム文の次の位置にあるプログラム文が準共通要素の候補であるかどうかをチェックする。準共通要素の候補(対象候補と呼ぶ)の場合は、基準候補を有するソースプログラムの集合と対象候補を有するソースプログラムの集合が同じ(要素に過不足が無いこと)であるかどうかチェックする。同じ場合には、対象候補と基準候補をまとめて1個の準共通要素とし、元の対象候補のプログラム文を次の基準候補とする。
準準共通要素の候補でないか、準準共通要素の候補であっても基準候補を有するソースプログラムの集合が同じでない場合は、基準候補をそのまま準共通要素にし、次の準共通要素の候補を基準候補にする。こうして、すべての準準共通要素の候補を処理して、図8(c)に示すように、”BBB”と”CCC”が1個の準共通要素になる。なお、例えば、プログラム4の2行目の”MMM”が仮に”BBB”というプログラム文であれば、”BBB”はプログラム1、プログラム2およびプログラム4に共通な準共通要素として抽出され、”CCC”がプログラム1とプログラム2に共通な準共通要素として抽出されたままである。
ステップS45では、分類コードの(1)には準共通要素であることを意味する2を、(2)に準共通要素として作成した順番を、(3)には準共通候補を有するプログラム数を、(4)には共通要素で区切られた範囲の前にある共通要素の番号を設定する。なお、1個目の共通要素よりも前の範囲では、ソースプログラムの先頭を仮想的な共通要素として、番号”0”を設定する。(5)には、各ソースプログラムにおける共通要素で区切られた範囲内での行数を設定する。(6)から(9)までは、ステップS11で決まっているので、このようにして求めた(1)から(5)までになるようにプログラム文のファイル名を修正して保存する。
図8(c)において、プログラム1の2行目とプログラム2の4行目はともに”GGG”であるが、準共通要素として抽出されていない。これは”BBB,CCC”という準共通要素を抽出したためである。”GGG”がプログラム1では、”BBB,CCC”よりも前にあり、プログラム2では後にあるので、準共通要素の前後関係が同じであることから、”GGG”と”BBB,CCC”のどちらかしか、準共通要素として抽出できない。このような状況を交差が発生していると呼ぶことにする。前に説明した準共通要素を抽出する処理方法は、準共通要素の候補を抽出すると、その次の行から検索をするので、交差する準共通要素を抽出することは無い。
なお、交差するものも含めて準共通要素の候補を抽出して、交差のために同時には準共通要素にできないものがある場合には、準共通要素の数が最大になるように選択するようにしてもよい。また、プログラム文があり準共通要素の候補となるプログラム文が、1個のソースプログラムにおいて同じものが複数ある場合は、どちらを準共通要素とするかも、準共通要素の数が最大になる方を選択するようにしてもよい。
共通要素に関して交差が発生する場合には、前に説明した処理方法では、先に発見したものを共通要素とし、交差するものは共通要素として抽出しない。共通要素と準共通要素のどちらかまたは両方の合計が大きくなる方を選択するようにしてもよいし、交差が発生するものは、どちらも共通要素としないようにしてもよい。
次いで、図9により、図2のステップS05の処理について詳細に説明する。
まず、ステップS61で、B=B+1を演算する。ステップS62で、C=C+1を演算する。
次いで、ステップS63で、“♯♯♯♯♯♯(6)(7)(8)(9)”という分類コードを持つ非共通要素の行番号(9)と、(8)が同じ数字の分類コードを持つ(1)=1でC番目の共通要素の行番号(9)との相対行(5)を取得し、最も小さな正数の相対行を持つ“♯♯♯♯♯♯(6)(7)(8)(9)”というファイル名を探す。
ステップS64で、発見されたファイルの行番号(9)は、C+1番目の共通要素の行番号(9)より小さいかどうかを判定し、NOであれば、ステップS62に戻り、YESであれば、ステップS65で、非共通要素である(1)=3、(3)=1とし、見つかった順番Bから(2)=B、関連する共通要素がCであることから、(4)=Cとして“(1)(2)(3)(4)(5)(6)(7)(8)(9)”という分類コードをつけて保存する。次いで、ステップS66で、“♯♯♯♯♯♯(6)(7)(8)(9)”が存在するかどうかを判定し、NOであれば、ステップS61に戻り、YESであれば、終了する。
実施の形態1によれば、このように、複数のプログラムから共通部分を特定し、共通部分のプログラム上のロケーションを基点に他のプログラム文の位置関係を取得して、さらに分類していくという本手法により、プログラム内部に機能名やセクション名が入っていないような構造化されていないプログラムにおいても、プログラムを構成するプログラム文の分類が機械的に可能となる効果がある。
実施の形態2.
実施の形態1では、プログラム文を分析して類似度を3つの要素に分類してデータを保存する方法について述べたが、実施の形態2は、分類コードを使って、図10に示すように、表示順序を採番していき、分類コードの共通要素と準共通要素と非共通要素のコードを読み取って、列毎に分けて表示するようにした。これにより、一つのプログラムの構成を一目で分かるように表示することができる。
図10は、この発明の実施の形態2によるプログラム分析方法の表示順序を決定するフローチャートである。
図11は、この発明の実施の形態2によるプログラム分析方法の単一プログラムのプログラム要素の状態の画面例を示す図である。
図11において、横軸の分類コード(1)の共通要素11、準共通要素12、非共通要素13について、それぞれ縦軸で見つかった順番にプログラム文を示している。
次に、図10により、表示順序を決定するフローについて説明する。
ステップS70で、共通要素(n)に対して表示順を採番する。次いで、ステップS71で、共通要素(n)を分類コードに持っている要素の中で相対行の小さい順に上段から各要素に対して表示順を採番する。ステップS72で、n=n+1を演算する。ステップS73で、n>共通要素の最大数かどうかを判定し、NOであれば、ステップS70に戻り、YESであれば、終了する。
分類コードから、プログラム文をソースプログラムに組み込まれた順序で表示する方法は、次のとおりである。
”分断したプログラム文の内で最も近くに存在している共通要素の分類コード”と“最も近くに存在している共通要素との相対距離にあたる行と文字数”から共通要素および非共通要素の表示行を決定する。
表示する要素は、図10に示すように、同プログラムの各要素に対して次の規則に従って採番する。
動作例を以下にあげる。
共通要素の1番を採番したのち、2番目の共通要素との間にある準共通要素および非共通要素を採番していく。1番目の共通要素を分類コードに持つ準共通要素および非共通要素について、1番目の共通要素との相対行の小さいものから順番に下段の行に表示する。
次に、2番の共通要素を採番し、その共通要素に属する準共通要素および非共通要素を2番目の共通要素との相対行の小さいものから順番に下段の行に表示する・・・といったサイクルで、順次、表示順序を決めて、図11のように表示する。
実施の形態2によれば、このように、表示対象の分類コードを元に、表示する要素の表示順序を採番する手法を用いることで、すべてのプログラム文を、共通要素に対する相対行で表示することが可能となる効果がある。
実施の形態3.
実施の形態2では、ソースプログラムの構成を一目で識別出来るような方法について述べたが、それぞれの要素が分析対象である複数のソースプログラム内にどの程度含まれていたかを確認することが出来ない。そこで、実施の形態3では、複数のソースプログラムの中で存在していたすべての要素について、ソースプログラム内での有無を表形式で表示するようにした。
図12は、この発明の実施の形態3によるプログラム分析方法のプログラム要素の全プログラムの含有状態の画面例を示す図である。
図12において、分類コードをもとに、プログラム名と作成日付を横軸、複数のソースプログラムの中で存在していたすべての要素(同一行のものは1つの要素として扱う)を縦軸にして、プログラム内での有無を表形式で表示している
実施の形態3によれば、このように、分類コードを使って、各要素のプログラム内の含有状況を一目で確認することが出来るように、表形式で表示可能としたため、バグや特化プログラムを分析する際に、調査すべきプログラムのロケーションを抽出することが容易となる効果がある。
実施の形態4.
実施の形態3では、複数のプログラムで使用されている状態が一目で確認出来るようにしたが、実施の形態4は、この実施の形態3のような表示形式を使用して、縦軸に記載されているプログラム要素を複数選択し、選択されたプログラム要素を保存されている一覧データから読み込んで、選択された順に組み合せてプログラムを構築するようにしたものである。
図13は、この発明の実施の形態4によるプログラム分析方法の生成するプログラムの含有要素を設定する画面例を示す図である。
図13において、図12の画面例にチェック欄を設け、プログラム要素を選択できるようにした。
図14は、この発明の実施の形態4によるプログラム分析方法のプログラム再構築の処理を示すフローチャートである。
実施の形態4は、図13に示すチェック欄にプログラム要素を選択するためのチェックマークを入れることで、図14に示すような、該当するデータの取得と、選択された順にプログラム要素を組み合せてプログラムを表形式で生成し、テキスト形式で出力することで、プログラムを再構築する。
次いで、図14に基づき、このときのフローについて説明する。
まず、ステップS81で、分類コードのリストのn番目(ただし、初回はn=1)のデータを読み込む。次いで、ステップS82で、プログラム生成用の表のn行目にデータを書き込む。ステップS83で、n=n+1を演算する。次いで、ステップS84で、nが分類コードのリストの最大数を超えているかどうかを判定し、超えていると、終了し、超えていなければ、ステップS81に戻る。
実施の形態4によれば、この手法により、準共通要素や非共通要素にバグや不要なプログラムが含まれていることが分かった場合、使用者が実施の形態3で示した表を見ながら、問題の箇所を入れ替えたり、削除してプログラムを生成し直すことができる。
また、リスト形式で編集することで容易にプログラム再構築を行える効果がある。
実施の形態5.
実施の形態5は、分類コードにおいて、分析対象である複数のソースプログラムに含まれる要素で2つ以上のプログラムに含まれているが、その要素が作られた日付より後のソースプログラム内に含まれていない要素である場合には、該当のソースプログラムとその要素を検出するプログラムである。
図15は、この発明の実施の形態5によるプログラム分析方法の問題要素を抽出する処理を示すフローチャートである。
非共通要素については、分類コードに含まれる日付データを取得し、その日付データがもっとも新しいソースプログラムの作成日付のものをリストアップする。
実施の形態5は、図15に示すとおり、すべての準共通要素の分類コードに含まれる日付データを取得し、その日付データが最も新しいプログラムの作成日付でない分類コードをリストアップする。
すなわち、ステップS91で、分析に使用したすべてのソースプログラムの作成日時をソースプログラムからそれぞれ取得する。次いで、ステップS92で、すべてのソースプログラムの作成日時の中で最新の日時を選定する。次いで、ステップS93で、分析して得られたすべての準共通要素の分類コードの中で、最新の日時が含まれていない分類コードをリスト形式で記録する。
実施の形態5によれば、このように、分類コードに含まれているプログラム要素の製作された日付や、プログラム要素が含まれたプログラム数から、同一機能のソースプログラムの中で記述に差異のある準共通要素や非共通要素を機械的に推定することが可能となる効果がある。
最新の日付でない準共通要素と最新の日付の非共通要素を抽出する場合で説明したが、日付としては最新でなくてもよく、いずれかのソースプログラムの作成日付でもよい。抽出する対象も指定した日付のもの、指定した日付よりも新しいもの、指定し日付の前後の所定期間のものなど、所定の時間関係にあるソースプログラムに含まれる準共通要素と非共通要素のどちらかまたは両方をリスト形式で表示するようにしてもよい。
この発明の実施の形態1によるプログラム分析方法を示す概念図である。 この発明の実施の形態1によるプログラム分析方法の処理を示すフローチャートである。 この発明の実施の形態1によるプログラム分析方法において表形式のデータであるプログラム文を作成する処理を説明するフローチャートである。 この発明の実施の形態1によるプログラム分析方法においてプログラム中で唯一無二のプログラム文を抽出する処理を説明するフローチャートである。 この発明の実施の形態1によるプログラム分析方法において共通要素を抽出する処理を説明するフローチャートである。 この発明の実施の形態1によるプログラム分析方法において準共通要素を抽出する処理を説明するフローチャートである。 この発明の実施の形態1によるプログラム分析方法において準共通要素を抽出する処理での共通要素で区切られた範囲を説明する例を示す図である。 この発明の実施の形態1によるプログラム分析方法において準共通要素を抽出する処理を説明する例を示す図である。 この発明の実施の形態1によるプログラム分析方法において非共通要素を抽出する処理を説明するフローチャートである。 この発明の実施の形態2によるプログラム分析方法の表示順序を決定するフローチャートである。 この発明の実施の形態2によるプログラム分析方法の単一プログラムのプログラム要素の状態の画面例を示す図である。 この発明の実施の形態3によるプログラム分析方法のプログラム要素の全プログラムの含有状態の画面例を示す図である。 この発明の実施の形態4によるプログラム分析方法の生成するプログラムの含有要素を設定する画面例を示す図である。 この発明の実施の形態4によるプログラム分析方法のプログラム再構築の処理を示すフローチャートである。 この発明の実施の形態5によるプログラム分析方法の問題要素を抽出する処理を示すフローチャートである。
符号の説明
1 ソースプログラム
2 単語/記号/数字の単位抽出部
3 共通要素抽出部
4 共通要素間プログラム文抽出部
5 準共通要素抽出部
6 非共通要素抽出部
7 共通要素一覧データ
8 準共通要素一覧データ
9 非共通要素一覧データ
11 共通要素
12 準共通要素
13 非共通要素

Claims (7)

  1. 複数のソースプログラムからソースプログラムごとにプログラムの構成要素であるプログラム文を抽出する第一のステップ、
    上記プログラム文のうち、各ソースプログラム内で一つしかないプログラム文であり、かつ複数のソースプログラムのすべてに存在する上記プログラム文を共通要素として抽出する第二のステップ、
    各ソースプログラムの上記共通要素で区切られた同じ範囲において、複数のソースプログラムに存在するプログラム文を準共通要素として抽出する第三のステップ、
    上記共通要素と上記準共通要素のどちらでもない上記プログラム文を非共通要素として抽出する第四のステップ、
    抽出した上記共通要素、上記準共通要素および上記非共通要素のいずれかである各要素を記憶装置に保存するステップを含み、
    上記共通要素は各ソースプログラムにおける順番がすべてのソースプログラムで同じであり、
    上記準共通要素の各ソースプログラムにおける順番は、上記準共通要素を有するすべてのソースプログラムで同じであり、
    上記各要素には、抽出された元のソースプログラムと、そのソースプログラムの中での位置を示す分類コードが付与されていることを特徴とするプログラム分析方法。
  2. 一つのソースプログラムに存在する上記プログラム文を、記述された順番に、上記共通要素、上記準共通要素および上記非共通要素をそれぞれ別の列にして表示することを特徴とする請求項1に記載のプログラム分析方法。
  3. 複数のソースプログラムから抽出された上記各要素を、各ソースプログラムでの有無が分かるように表形式で表示することを特徴とする請求項1に記載のプログラム分析方法。
  4. 複数のソースプログラムの中のいずれかのソースプログラムの作成日付と所定の時間関係にあるいずれかのソースプログラムに含まれる上記準共通要素をリスト形式で表示することを特徴とする請求項1ないし請求項3のいずれかに記載のプログラム分析方法。
  5. 複数のソースプログラムの中のいずれかのソースプログラムの作成日付と所定の時間関係にあるいずれかのソースプログラムに含まれる上記非共通要素をリスト形式で表示することを特徴とする請求項1ないし請求項3のいずれかに記載のプログラム分析方法。
  6. 請求項1に記載のプログラム分析方法により複数のソースプログラムから抽出された上記各要素から所要のものを選択してソースプログラムを作成することを特徴とするプログラム作成方法。
  7. 複数のソースプログラムから抽出された上記各要素を、各ソースプログラムでの有無が分かるように表形式で表示した画面を用いて、プログラム作成に使用するものを選択することを特徴とする請求項6に記載のプログラム作成方法。
JP2008193652A 2008-07-28 2008-07-28 プログラム分析方法及びプログラム作成方法 Expired - Fee Related JP5020184B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2008193652A JP5020184B2 (ja) 2008-07-28 2008-07-28 プログラム分析方法及びプログラム作成方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008193652A JP5020184B2 (ja) 2008-07-28 2008-07-28 プログラム分析方法及びプログラム作成方法

Publications (2)

Publication Number Publication Date
JP2010033249A true JP2010033249A (ja) 2010-02-12
JP5020184B2 JP5020184B2 (ja) 2012-09-05

Family

ID=41737664

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008193652A Expired - Fee Related JP5020184B2 (ja) 2008-07-28 2008-07-28 プログラム分析方法及びプログラム作成方法

Country Status (1)

Country Link
JP (1) JP5020184B2 (ja)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0588863A (ja) * 1991-09-27 1993-04-09 Kyoraku Co Ltd プログラム開発支援システム
JPH10149301A (ja) * 1996-11-19 1998-06-02 Hitachi Ltd スクリプト作成装置
JP2007115155A (ja) * 2005-10-24 2007-05-10 Hitachi Software Eng Co Ltd プログラム構造管理装置及びプログラム構造管理プログラム

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0588863A (ja) * 1991-09-27 1993-04-09 Kyoraku Co Ltd プログラム開発支援システム
JPH10149301A (ja) * 1996-11-19 1998-06-02 Hitachi Ltd スクリプト作成装置
JP2007115155A (ja) * 2005-10-24 2007-05-10 Hitachi Software Eng Co Ltd プログラム構造管理装置及びプログラム構造管理プログラム

Also Published As

Publication number Publication date
JP5020184B2 (ja) 2012-09-05

Similar Documents

Publication Publication Date Title
JP6542612B2 (ja) テストシナリオ生成支援装置およびテストシナリオ生成支援方法
JP5665128B2 (ja) 静的解析支援装置、静的解析支援方法、及びプログラム
JP2009265810A (ja) 状態遷移テスト支援装置、状態遷移テスト支援プログラム、および状態遷移テスト支援方法
JP5898584B2 (ja) 六面体メッシュ生成装置
JP3828379B2 (ja) テスト仕様生成支援装置、方法、プログラム及び記録媒体
CN104797993B (zh) 系统构建辅助装置
JP2013246644A (ja) ソフトウェアオブジェクト修正支援装置、ソフトウェアオブジェクト修正支援方法、および、プログラム
JP5282522B2 (ja) 情報管理装置、情報管理方法、及び情報管理プログラム
JP2009048598A (ja) 文書情報表示システム
JP5020184B2 (ja) プログラム分析方法及びプログラム作成方法
JP2015036876A (ja) 画面自動生成装置、画面自動生成プログラムおよび画面自動生成方法
JP6245571B2 (ja) データ構造、データ生成装置、その方法及びプログラム
JP6737063B2 (ja) ソフトウェア資産管理装置、ソフトウェア資産管理方法、および、ソフトウェア資産管理プログラム
JP5504212B2 (ja) テストケース自動生成システム、テストケース自動生成方法、およびテストケース自動生成プログラム
JP4958848B2 (ja) 原価積上計算装置及び原価積上計算方法
KR20090005684A (ko) 도형상표 검색제공시스템 및 방법, 도형상표 데이터베이스,도형상표 데이터베이스 생성방법 및 생성시스템,클라이언트 측의 도형상표 검색 시스템 및 방법,클라이언트 도형상표 검색 프로그램이 내장된 저장매체
JP5535270B2 (ja) 文書成分分析装置およびプログラム
JP2007026389A (ja) データ入力装置
JP6322291B2 (ja) 文書処理装置および項目抽出方法
JP2010244439A (ja) チェックリスト生成装置、チェックリスト生成方法及びチェックリスト生成プログラム
JP2006099452A (ja) Si対象ファイルおよびsi関連ファイル管理システム
JP6741045B2 (ja) データ入力装置、データ入力方法及びプログラム
JP5581894B2 (ja) データ処理プログラム自動生成システム
JP2019016201A (ja) プログラム比較方法、プログラム比較装置およびプログラム比較プログラム
JP6699433B2 (ja) データ管理プログラム、装置、及び方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20091208

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110119

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20120208

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120221

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120329

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

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120612

R151 Written notification of patent or utility model registration

Ref document number: 5020184

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150622

Year of fee payment: 3

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

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

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees