(57)【要約】【課題】  人手によるプログラムファイルのソースコード解析を行うことなく、開発者が望む設計上の論理的なまとまりとしてプログラムの修正情報を得ることができるようにする。【解決手段】  比較対象のプログラムにおいて、設計上の論理構造であるモジュール、ファイル、関数、ソースコードの階層構造ごとに、比較すべき項目を定義し、比較を行う。比較結果は、プログラム修正情報として一旦修正内容保持部に記録する。修正内容保持部のプログラム修正情報から、階層構造をもつ修正情報出力画面を作成して表示する。【選択図】  図１
2006277127.tif 000002
【特許請求の範囲】
【請求項１】
プログラムの比較を行う方法において、
修正前後のプログラムをモジュール、ファイル、関数、ソースコードの各階層単位で比較するステップと、
前記階層単位の比較で得られた差分情報を該プログラムの修正情報として、視覚的に出力するステップと、
を有することを特徴とする修正プログラムの比較方法。
【請求項２】
前記比較方法において、比較対象ファイル同士でソースコードに変更がない場合であっても、該ファイル内の外部ファイル取込み指定により指定されたファイルに変更があった場合において、該変更情報を該ソースファイルの修正情報として得るステップを有することを特徴とする請求項１に記載の修正プログラムの比較方法。
【請求項３】
前記比較方法において、プログラムが条件コンパイル機能の仕様に基づき実装され、かつソースコード中の関数定義部または外部ファイル取込み指定部が該条件コンパイルの影響下にある場合において、条件コンパイル情報に対する関数または外部ファイル取り込み指定との対応関係を保持し、該条件コンパイル情報の指定に基づき有効な修正情報を得るステップを有することを特徴とする請求項１又は２に記載の修正プログラムの比較方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム開発の分野において、修正前後のプログラム間の比較を行うための手段と比較結果を可視化する手段、およびそのシステムに関する。
【背景技術】
【０００２】
プログラム開発においてプログラム上の修正個所の把握、例えば機能変更に対するプログラム上の修正部分を知ることは、変更要求に伴うプログラム上の影響範囲の理解を容易にし、同様の修正が発生した場合に参考にできることによって、安全かつ効率的な作業が可能になるという点で有意義である。このため、従来ではプログラム上の修正前後での修正個所を知るためにいくつかの比較手段を利用してきた。
【０００３】
例えば、ツールを用いて修正前後のプログラムのソースコードファイルの行単位での比較を行い、コード上の修正情報を得ることが可能である。ＵＮＩＸ（登録商標）系ＯＳのコマンドである「ｄｉｆｆコマンド」は、テキストファイル同士の行単位の比較を行い、行ごとの比較結果を報告する機能を有し、当該比較を行う際最もよく利用されるツールの１つである。しかし、例えばプログラム全体の修正状況の概観を開発者が望む場合において、ソースコードファイルの行単位の比較結果自体は開発者にとって価値が低く、有意義な論理的なまとまり、例えば機能要件レベルの情報に変換するには、開発者自身の、多くは手作業を中心とした労力が改めて必要となり、非常に非効率となっている。
【０００４】
また、特開２００１−２５６０４３号公報においてはソースコードファイルを関数単位に分割し、関数単位での比較を行うことで差分を抽出するシステムを提案している。該システムにより前記手作業による論理的なまとまりへの変換労力を軽減し、信頼性向上を図ることが可能である。しかし、開発者にとって有意義な、論理的なまとまりがつねに関数に対応しているわけではない。例えば、関数の数が数千個以上におよぶプログラムは数多く存在し、当該ケースにおいては、開発者は関数よりも大きなまとまり、例えば、ファイル群で構成する設計上のモジュールと呼ばれる論理的なまとまりで捉える必要性を感じるであろうことは容易に想像できる。該事例における規模のプログラムを有意義なまとまりに変換する作業は、前記行単位の比較結果における手作業と同様の非効率となる。
【０００５】
また、多くのコンパイル系プログラミング言語においては、条件付コンパイルとよばれる機能が提供されており、該機能を用いることによってソースコード中の特定ブロックの有効ないし無効を調整することが可能である。当該プログラミング言語による開発下においては、開発者は、修正前後の比較結果を任意のまとまり、例えば関数やモジュールとして見るだけでなく、該比較情報を条件付コンパイルで指定された条件毎に絞り込む形で知る必要があるが、該要件を満たす従来のシステムはない。
【０００６】
また、修正前後でのプログラムの比較を行う場合、プログラムファイルのソースコードでの比較以外での比較処理が望まれる場合があるが、該要件を他の比較処理情報と統合し、関連付けて出力可能なシステムは従来の方法にはない。例えば、多くのプログラミング言語では当該ソースファイル中の関数や変数などの定義を外部ファイルに行い、当該ソースファイル中に該外部ファイル名を、例えば、Ｃ言語ではインクルード文と呼ばれる外部ファイル取り込み指定（以後インクルード行と呼ぶ）とともに記述することができる。インクルード行で指定された外部ファイルに修正があった場合、該外部ファイルを取り込む当該ソースファイルにおいて、プログラムの修正前後でソースコードレベルでの差がない場合であっても、比較結果として定義ファイルの修正による影響の可能性を示唆する情報は開発者にとって重要であるが、当該情報を提供するシステムは従来の方法にはない。
【０００７】
【特許文献１】特開２００１−２５６０４３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
したがって、従来においては開発者にとって有意義な論理的なまとまりでの比較情報を得るために開発者は、何種類もの手間をかける必要があり、効率的な作業が望めなかった。
【０００９】
本発明は、このような事情を鑑みてなされたもので、その目的はプログラムの修正個所の効率的な把握が可能な、修正前後のプログラム間の比較を行うための手段と比較結果の視覚的出力手段、およびそのシステムを提供することにある。
【課題を解決するための手段】
【００１０】
本発明では比較対照となるプログラムを図１に示す設計上の論理的な階層構造による構成と定義し、該構造で比較情報を管理する。また、修正前後のプログラムの比較は、該階層の同位層同士の比較を基本とする。また、各階層の比較の際のパラメータを図２に示すプログラム上の物理的な要素により定義する。修正前後のプログラムファイルから該パラメータの情報を得ることを示す。
【００１１】
前記目的を達成するため、本発明は、修正前後のプログラムファイルを前記階層単位で比較するステップと、前記階層単位の比較で得られた差分情報を該プログラムの修正情報として、視覚的に出力するステップとを有することを特徴とする。
【発明の効果】
【００１２】
本発明によれば、人手によるプログラムファイルのソースコード解析を行うことなく、開発者が望む設計上の論理的なまとまりとしてプログラムの修正情報を得ることができる。
【００１３】
さらに、本発明によれば、該修正情報を開発者の望むプログラムの論理構造のレベルに合わせて、多段の階層別に得ることができる。
【００１４】
さらに、本発明によれば、プログラムファイルのソースコード上の比較のみならずインクルード行で指定されたファイルの修正を該ソースファイルの修正情報として得ることができる。
【００１５】
さらに、本発明によれば前記修正情報を、階層別修正情報として視覚化し、また条件コンパイルごとに識別視覚化し、これにより開発者の望む論理レベルで考察が可能となり、プログラム上の修正個所の把握の効率化と深化を図ることができる。
【発明を実施するための最良の形態】
【００１６】
以下、本発明の実施の形態を説明する。図３に、本発明の一実施形態であるプログラムの修正情報出力システムの構成を示す。
【００１７】
ここで、３−１、３−２はそれぞれ修正前プログラムのソースファイル群、修正後プログラムのソースファイル群、３−３は修正前後のプログラムのソースファイルを比較し、比較結果を３−４の修正内容保持部に登録する比較処理部、３−５は修正内容保持部に登録された修正情報を整形し、比較結果を表示する修正内容表示部である。
【００１８】
この実施形態のプログラムの修正情報出力システムは、コンピュータを構成する処理装置、記憶装置、入力装置、出力装置、記憶媒体読み込み装置などのハードウェアにより構成される。処理装置は、少なくとも中央演算処理装置（ＣＰＵ）、中央演算処理装置の作業領域を提供するＲＡＭ、種々のプログラムやデータが格納されたＲＯＭ、および周辺機器とのインターフェース部を有する。記憶装置は、読み書き可能な記憶装置、例えばフロッピー（登録商標）ディスクドライブ、ハードディスクドライブ、光磁気ディスクドライブ、メモリカード、スマートメディア（登録商標）等である。入力装置は、たとえばマウス、キーボード、音声入力装置、画像入力装置等である。出力装置は、たとえばＣＲＴ、ＬＣＤ等の表示装置である。
【００１９】
次に、該プログラム修正情報出力システムの動作を説明する。なお、修正前後のプログラムのソースファイルは、記憶装置においてそれぞれ同じファイルシステム上の別の親ディレクトリ以下にまとめて配置されているものとする。
【００２０】
まず、図４の例で示す比較処理の設定条件を指定する。該設定条件は修正前後のプログラムのソースファイルが配置されているディレクトリパス４−１、モジュール構成４−２、コメントパターン４−３、関数名パターン４−４、インクルード行パターン４−５、条件コンパイル行パターン４−６を含む。モジュール構成は、ファイルパス名の文字列パターンとモジュール名との組合せを指定する。モジュール名は開発者が任意に指定することができる。コメントパターン、関数名パターン、インクルード行パターン、条件コンパイル行パターンはプログラム言語の仕様にあわせ、それぞれのソースコード上の文字列パターンを指定する。
【００２１】
図４の事例では、各設定条件のパターン指定をスクリプト言語Ｐｅｒｌで提供される正規表現を利用して指定したものであり、また比較対照となるプログラムのソースファイルがＣ言語を使用していることを想定している。
【００２２】
次に比較処理部３−３を実行する。プログラムの比較処理は次のように行われる。修正前後プログラムそれぞれに対し、以下の情報を抽出するための走査を行う。まず、構成するファイルパスのリストを獲得する（図５）。各ファイルパスには予め与えられた設定条件のモジュール構成パターンとのマッチングを行い、所属するモジュール情報を付加する。いずれのモジュール構成パターンにもマッチしないファイルの所属モジュール情報は不明とする。該情報を修正内容保持部３−４に登録する。
【００２３】
図５の事例では、モジュール「moduleA」に所属するファイル「dirA\dir1\file2.c」が修正後プログラムには存在せず、修正作業の結果削除されたことを読み取ることができる。
【００２４】
つぎに、各ファイルから条件コンパイルで指定されたコードブロック、関数を定義したコードブロックおよびインクルード行を抽出し、図６に示す情報テーブルとして獲得する。図６の関数情報テーブルでは、関数が定義されているファイル名、定義部分の開始および終了行、該関数が有効となる条件コンパイル情報を管理する。図６のインクルード情報テーブルでは、インクルード行が指定されているファイル名および行番号、該インクルード行が有効となる条件コンパイル情報を管理する。該情報を修正内容保持部３−４に登録する。
【００２５】
つぎに前記走査により得られた修正前後のプログラム情報の比較を図２で定義した論理階層構造の各パラメータで行う。図５で得られた修正前後のファイルパス情報をもとにモジュール別ファイル構成情報としてモジュールごとのファイル構成を得る。さらに、該モジュール別ファイル構成情報を修正前後で比較し、また同名のファイルパスが修正前後で存在する場合にはファイルのソースコード上の比較による修正の有無を判定した上で、追加／修正／削除／修正なしの各ファイル数を得、モジュール層比較情報７−２（図７−２）として、修正内容保持部に登録する。該情報は図２におけるモジュール層の情報に相当する。
【００２６】
また、前記モジュール層比較情報から、追加／修正／削除／修正なしのモジュール数を得る。モジュールの修正、修正なしの判断は前記モジュール層比較情報に基づき、該モジュールを構成するファイルの修正の有無に合わせて行う。該情報は、プログラム層比較情報７−１（図７−１）として修正内容保持部に記録する。該情報は図２におけるプログラム層の情報に相当する。
【００２７】
また、前記ファイルパスリスト（図５）および関数情報テーブル（図６）から修正前後のファイルごとに追加／修正／削除／修正なしの関数の数を得る。
【００２８】
追加の判断は、修正前後の同名ファイル内において対象関数が修正前になく修正後に存在する場合に追加とする。但し、このとき修正前の別ファイルに該関数が存在するかを検索し、存在する場合、追加と区別し追加（移動）とする。
【００２９】
削除の判断は、修正前後の同名ファイル内において該関数が修正前に存在し修正後にない場合に削除としる。但し、このとき修正後の別ファイルに存在するかを検索し、存在する場合には削除と区別し削除（移動）とする。
【００３０】
関数の修正、修正なしの判断は、修正前後の関数情報テーブルにおける開始、終了行から関数定義部のコードブロックを抽出し、前記設定条件におけるコメントパターンに基づくコメントブロックを削除した上で、コードの比較を行い、修正の有無を判断する。コードの比較は行レベルで行い、総行数および追加／修正／削除／修正なしのコード行数を得る。
【００３１】
追加／修正／削除／修正なしの関数の数についてはファイル層比較情報７−３（図７−３）として修正内容保持部に登録する。関数内の総行数および追加／修正／削除／修正なしの各コード行数については関数層比較情報７−４（図７−４）として修正内容保持部に登録する。また、前記ファイルパスリスト（図５）およびインクルード行情報テーブル（図６）から修正前後のファイルごとに追加／修正／削除／修正なしの各インクルード行の数を得、ファイル層比較情報７−３として登録する。
【００３２】
追加の判断は、修正前後の同名ファイル内において同インクルード行が、修正前になく修正後に存在する場合に追加とする。
【００３３】
削除の判断は、修正前後の同名ファイル内において同インクルード行が、修正前に存在し修正後にない場合に削除としる。同インクルード行が修正前後の同名ファイルにおいて存在する場合、該インクルード行に指定されたファイルが修正前後で変更があるかを前記モジュール層比較情報から検索し、変更がある場合インクルード行自体の修正なしと区別し、修正なし（参照先変更有）とする。
【００３４】
比較処理終了後、次に該プログラム修正情報出力システムは、修正情報保持部に登録された情報を解析し、修正内容出力部３−６により修正情報を視覚化する。図８にこの解析結果の視覚化の例を示す。解析結果は複数の画面で構成され、トップ画面８−１、プログラム層画面８−２、モジュール層画面８−３、ファイル層画面８−４、関数層画面８−５、コード差分情報画面８−６を含む。
【００３５】
まず修正内容出力部にはトップ画面８−１が表示される。ここには、前記論理階層ごとの修正情報の結果が修正あり、または修正なしの情報とともに表示される。各階層の修正の有無は、前記比較処理部により登録された階層別比較情報７−１〜７−４において修正なしの情報以外の情報の値が１つでもある場合には修正ありとし、その他は修正なしとする。
【００３６】
開発者はまずここでプログラムの差分状況を概観することができる。また、該画面には条件コンパイル指定フィールドが用意されており、ここに所望の条件コンパイル情報を入力することにより、比較情報の対象となる関数やインクルード行の絞込みを行うことができる。該事例では、条件コンパイル指定はＯＦＦ(指定しない)が選択されていることを示す。また、該条件コンパイル指定は残りの画面の情報すべてに有効となる。
【００３７】
また、「<<」と「>>」とで文字列を囲む形で表示された部分は、他画面へ遷移するための指示を示す領域（以後リンク部とする）でもあり、マウス等のポインティングデバイス等による指示（以後クリック操作とする）で、他画面へ移行する。なお、「<<」及び「>>」の部分の意味と機能は全画面において共通とする。また、トップ画面を除き、各画面には図示しないが、遷移前の画面に戻るためのリンク部が用意され、各画面を開発者の要求に合わせて自由に遷移することが可能である。
【００３８】
次に、トップ画面の「<<修正あり>>」のクリック操作により、プログラム層画面８−２へ遷移する。該画面ではプログラム層の比較パラメータであるモジュールの追加／修正／削除の各数とそれぞれの該当モジュール名を表示する。各モジュール名はモジュール層画面８−３へ遷移するためのリンク部となっている。表示される情報は、８−２ではすべてを図示しないが、プログラム層比較情報７−１に従う。
【００３９】
ここで、開発者の認識するモジュールの単位で修正状況を把握することができる。
【００４０】
次に、プログラム層画面のリンク部となっているモジュール名をクリックし、モジュール層画面８−３へ遷移する。該画面では、前画面であるプログラム層画面で指定されたモジュール配下のファイルについて、ファイル単位で修正情報を出力する。表示される情報はモジュール層比較情報７−２に従う。また、修正なしファイル情報については、該当ファイルのファイル層比較情報を検索し修正なし（参照先変更有り）インクルード行が１つでも存在する場合には、該情報が留意すべき事項として付加される。図８の例では情報テーブル中の太線枠網掛けセルが相当し、修正なしファイル２つの中に注意すべきインクルード行を含むファイルがあることを表す。
【００４１】
次に、モジュール層画面８−３のリンク部であるファイル名をクリックし、ファイル層画面８−４に遷移する。該画面では、前画面であるモジュール層画面で指定されたファイル配下の関数、およびインクルード行単位での修正情報を出力する。表示される情報はファイル層比較情報７−３に従う。
【００４２】
次に、ファイル層画面８−４のリンク部である関数名をクリックし、関数層画面８−５へ遷移する。該画面では、前画面であるファイル層画面で指定された関数の比較情報を表示する。表示される情報は関数層比較情報７−４に従う。
【００４３】
また、該画面下部にソースコードの差分の実体を表示するためのリンクが用意され、これをクリックすることで差分の実体画面８−６（図１０）が表示され、内容を表示さる。該事例では前記「ｄｉｆｆコマンド」による差分実体内容を表している。
【００４４】
該視覚化例では、トップ画面に続き、論理構造の上位層から下位層へ順番にアプローチすることでプログラム全体の修正情報の把握の理解を容易にしているが、トップ画面から途中階層へのアプローチを行う操作仕様を与えることも容易である。例えば、トップ画面８−１のファイル層の「<<修正あり>>」のクリック操作を行った場合、図９に示す例の画面に遷移することが可能である。図９の画面ではプログラム下の前ファイル下にある関数とインクルード行に関する比較情報を表示する。一般的にはかなり多くの数が表示されることが予想されるが、図９例のように画面上部に情報の絞込み機能を提供することが可能である。修正情報を確認したいファイル名パターンの指定、関数情報またはインクルード情報の選択を行うことで情報の絞込みを行い、明らかな不要情報を減らすことで、開発者の情報混乱を回避することが可能である。図示はしないが、モジュール層、関数層においても同様に可能である。
【００４５】
以上説明したように、本実施形態のプログラムの修正情報出力システムによれば、図８や図９に示すような修正前後のプログラムの比較情報を提供できるので、プログラムの修正個所の把握が容易になる。すなわち、該修正内容表示部において、プログラム修正個所は、モジュール、ファイル、関数、インクルード行、ソースコードの単位で提供され、各単位ごとに追加／修正／削除を核とした形式で修正情報を知ることができる。
【００４６】
さらにインクルード行の修正情報では、ソースコード上の違いだけでなく、インクルード行に指定されたファイルの変更の有無を拾い上げることで、開発者に修正によるプログラム上の影響範囲をよりきめ細かく示唆することができる。
【００４７】
さらに、条件コンパイルによる修正の影響範囲を確認することができ、前記インクルード行情報による影響範囲の示唆に加え、より深く修正状況を考察することが可能である。
【図面の簡単な説明】
【００４８】
【図１】比較情報の管理階層構造を示す図である。
【図２】管理階層別の比較パラメータを示す図である。
【図３】本発明の一実施形態であるプログラム修正情報出力システムの構成を示す図である。
【図４】図３のシステムにおける、開発者が設定する条件を入力するインターフェースを示す図である。
【図５】図３のシステムにおける、修正前後のプログラムのファイル構成情報を示す図である。
【図６】図３のシステムにおける、修正前の関数情報およびインクルード行情報を示す図である。
【図７−１】図３のシステムにおける、プログラム層比較情報を示す図である。
【図７−２】図３のシステムにおける、モジュール層比較情報を示す図である。
【図７−３】図３のシステムにおける、ファイル層比較情報を示す図である。
【図７−４】図３のシステムにおける、関数層比較情報を示す図である。
【図８】図３のシステムにおける、修正情報出力部のインターフェースを示す図である。
【図９】図３のシステムにおける、修正情報出力部のインターフェースを示す図である。
【図１０】図９中のコード差分情報画面８−６を示す図である。
【００４９】
３−１：修正前プログラムのソースファイル群
３−２：修正後プログラムのソースファイル群
３−３：比較処理部
３−４：修正内容保持部
３−５：修正内容表示部
【図１】
2006277127.tif 000003
【図２】
2006277127.tif 000004
【図３】
2006277127.tif 000005
【図４】
2006277127.tif 000006
【図５】
2006277127.tif 000007
【図６】
2006277127.tif 000008
【図７−１】
2006277127.tif 000009
【図７−２】
2006277127.tif 000010
【図７−３】
2006277127.tif 000011
【図７−４】
2006277127.tif 000012
【図８】
2006277127.tif 000013
【図９】
2006277127.tif 000014
【図１０】
2006277127.tif 000015