説明

修正プログラムの比較方法

【課題】 人手によるプログラムファイルのソースコード解析を行うことなく、開発者が望む設計上の論理的なまとまりとしてプログラムの修正情報を得ることができるようにする。
【解決手段】 比較対象のプログラムにおいて、設計上の論理構造であるモジュール、ファイル、関数、ソースコードの階層構造ごとに、比較すべき項目を定義し、比較を行う。比較結果は、プログラム修正情報として一旦修正内容保持部に記録する。修正内容保持部のプログラム修正情報から、階層構造をもつ修正情報出力画面を作成して表示する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラム開発の分野において、修正前後のプログラム間の比較を行うための手段と比較結果を可視化する手段、およびそのシステムに関する。
【背景技術】
【0002】
プログラム開発においてプログラム上の修正個所の把握、例えば機能変更に対するプログラム上の修正部分を知ることは、変更要求に伴うプログラム上の影響範囲の理解を容易にし、同様の修正が発生した場合に参考にできることによって、安全かつ効率的な作業が可能になるという点で有意義である。このため、従来ではプログラム上の修正前後での修正個所を知るためにいくつかの比較手段を利用してきた。
【0003】
例えば、ツールを用いて修正前後のプログラムのソースコードファイルの行単位での比較を行い、コード上の修正情報を得ることが可能である。UNIX(登録商標)系OSのコマンドである「diffコマンド」は、テキストファイル同士の行単位の比較を行い、行ごとの比較結果を報告する機能を有し、当該比較を行う際最もよく利用されるツールの1つである。しかし、例えばプログラム全体の修正状況の概観を開発者が望む場合において、ソースコードファイルの行単位の比較結果自体は開発者にとって価値が低く、有意義な論理的なまとまり、例えば機能要件レベルの情報に変換するには、開発者自身の、多くは手作業を中心とした労力が改めて必要となり、非常に非効率となっている。
【0004】
また、特開2001−256043号公報においてはソースコードファイルを関数単位に分割し、関数単位での比較を行うことで差分を抽出するシステムを提案している。該システムにより前記手作業による論理的なまとまりへの変換労力を軽減し、信頼性向上を図ることが可能である。しかし、開発者にとって有意義な、論理的なまとまりがつねに関数に対応しているわけではない。例えば、関数の数が数千個以上におよぶプログラムは数多く存在し、当該ケースにおいては、開発者は関数よりも大きなまとまり、例えば、ファイル群で構成する設計上のモジュールと呼ばれる論理的なまとまりで捉える必要性を感じるであろうことは容易に想像できる。該事例における規模のプログラムを有意義なまとまりに変換する作業は、前記行単位の比較結果における手作業と同様の非効率となる。
【0005】
また、多くのコンパイル系プログラミング言語においては、条件付コンパイルとよばれる機能が提供されており、該機能を用いることによってソースコード中の特定ブロックの有効ないし無効を調整することが可能である。当該プログラミング言語による開発下においては、開発者は、修正前後の比較結果を任意のまとまり、例えば関数やモジュールとして見るだけでなく、該比較情報を条件付コンパイルで指定された条件毎に絞り込む形で知る必要があるが、該要件を満たす従来のシステムはない。
【0006】
また、修正前後でのプログラムの比較を行う場合、プログラムファイルのソースコードでの比較以外での比較処理が望まれる場合があるが、該要件を他の比較処理情報と統合し、関連付けて出力可能なシステムは従来の方法にはない。例えば、多くのプログラミング言語では当該ソースファイル中の関数や変数などの定義を外部ファイルに行い、当該ソースファイル中に該外部ファイル名を、例えば、C言語ではインクルード文と呼ばれる外部ファイル取り込み指定(以後インクルード行と呼ぶ)とともに記述することができる。インクルード行で指定された外部ファイルに修正があった場合、該外部ファイルを取り込む当該ソースファイルにおいて、プログラムの修正前後でソースコードレベルでの差がない場合であっても、比較結果として定義ファイルの修正による影響の可能性を示唆する情報は開発者にとって重要であるが、当該情報を提供するシステムは従来の方法にはない。
【0007】
【特許文献1】特開2001−256043号公報
【発明の開示】
【発明が解決しようとする課題】
【0008】
したがって、従来においては開発者にとって有意義な論理的なまとまりでの比較情報を得るために開発者は、何種類もの手間をかける必要があり、効率的な作業が望めなかった。
【0009】
本発明は、このような事情を鑑みてなされたもので、その目的はプログラムの修正個所の効率的な把握が可能な、修正前後のプログラム間の比較を行うための手段と比較結果の視覚的出力手段、およびそのシステムを提供することにある。
【課題を解決するための手段】
【0010】
本発明では比較対照となるプログラムを図1に示す設計上の論理的な階層構造による構成と定義し、該構造で比較情報を管理する。また、修正前後のプログラムの比較は、該階層の同位層同士の比較を基本とする。また、各階層の比較の際のパラメータを図2に示すプログラム上の物理的な要素により定義する。修正前後のプログラムファイルから該パラメータの情報を得ることを示す。
【0011】
前記目的を達成するため、本発明は、修正前後のプログラムファイルを前記階層単位で比較するステップと、前記階層単位の比較で得られた差分情報を該プログラムの修正情報として、視覚的に出力するステップとを有することを特徴とする。
【発明の効果】
【0012】
本発明によれば、人手によるプログラムファイルのソースコード解析を行うことなく、開発者が望む設計上の論理的なまとまりとしてプログラムの修正情報を得ることができる。
【0013】
さらに、本発明によれば、該修正情報を開発者の望むプログラムの論理構造のレベルに合わせて、多段の階層別に得ることができる。
【0014】
さらに、本発明によれば、プログラムファイルのソースコード上の比較のみならずインクルード行で指定されたファイルの修正を該ソースファイルの修正情報として得ることができる。
【0015】
さらに、本発明によれば前記修正情報を、階層別修正情報として視覚化し、また条件コンパイルごとに識別視覚化し、これにより開発者の望む論理レベルで考察が可能となり、プログラム上の修正個所の把握の効率化と深化を図ることができる。
【発明を実施するための最良の形態】
【0016】
以下、本発明の実施の形態を説明する。図3に、本発明の一実施形態であるプログラムの修正情報出力システムの構成を示す。
【0017】
ここで、3−1、3−2はそれぞれ修正前プログラムのソースファイル群、修正後プログラムのソースファイル群、3−3は修正前後のプログラムのソースファイルを比較し、比較結果を3−4の修正内容保持部に登録する比較処理部、3−5は修正内容保持部に登録された修正情報を整形し、比較結果を表示する修正内容表示部である。
【0018】
この実施形態のプログラムの修正情報出力システムは、コンピュータを構成する処理装置、記憶装置、入力装置、出力装置、記憶媒体読み込み装置などのハードウェアにより構成される。処理装置は、少なくとも中央演算処理装置(CPU)、中央演算処理装置の作業領域を提供するRAM、種々のプログラムやデータが格納されたROM、および周辺機器とのインターフェース部を有する。記憶装置は、読み書き可能な記憶装置、例えばフロッピー(登録商標)ディスクドライブ、ハードディスクドライブ、光磁気ディスクドライブ、メモリカード、スマートメディア(登録商標)等である。入力装置は、たとえばマウス、キーボード、音声入力装置、画像入力装置等である。出力装置は、たとえばCRT、LCD等の表示装置である。
【0019】
次に、該プログラム修正情報出力システムの動作を説明する。なお、修正前後のプログラムのソースファイルは、記憶装置においてそれぞれ同じファイルシステム上の別の親ディレクトリ以下にまとめて配置されているものとする。
【0020】
まず、図4の例で示す比較処理の設定条件を指定する。該設定条件は修正前後のプログラムのソースファイルが配置されているディレクトリパス4−1、モジュール構成4−2、コメントパターン4−3、関数名パターン4−4、インクルード行パターン4−5、条件コンパイル行パターン4−6を含む。モジュール構成は、ファイルパス名の文字列パターンとモジュール名との組合せを指定する。モジュール名は開発者が任意に指定することができる。コメントパターン、関数名パターン、インクルード行パターン、条件コンパイル行パターンはプログラム言語の仕様にあわせ、それぞれのソースコード上の文字列パターンを指定する。
【0021】
図4の事例では、各設定条件のパターン指定をスクリプト言語Perlで提供される正規表現を利用して指定したものであり、また比較対照となるプログラムのソースファイルがC言語を使用していることを想定している。
【0022】
次に比較処理部3−3を実行する。プログラムの比較処理は次のように行われる。修正前後プログラムそれぞれに対し、以下の情報を抽出するための走査を行う。まず、構成するファイルパスのリストを獲得する(図5)。各ファイルパスには予め与えられた設定条件のモジュール構成パターンとのマッチングを行い、所属するモジュール情報を付加する。いずれのモジュール構成パターンにもマッチしないファイルの所属モジュール情報は不明とする。該情報を修正内容保持部3−4に登録する。
【0023】
図5の事例では、モジュール「moduleA」に所属するファイル「dirA\dir1\file2.c」が修正後プログラムには存在せず、修正作業の結果削除されたことを読み取ることができる。
【0024】
つぎに、各ファイルから条件コンパイルで指定されたコードブロック、関数を定義したコードブロックおよびインクルード行を抽出し、図6に示す情報テーブルとして獲得する。図6の関数情報テーブルでは、関数が定義されているファイル名、定義部分の開始および終了行、該関数が有効となる条件コンパイル情報を管理する。図6のインクルード情報テーブルでは、インクルード行が指定されているファイル名および行番号、該インクルード行が有効となる条件コンパイル情報を管理する。該情報を修正内容保持部3−4に登録する。
【0025】
つぎに前記走査により得られた修正前後のプログラム情報の比較を図2で定義した論理階層構造の各パラメータで行う。図5で得られた修正前後のファイルパス情報をもとにモジュール別ファイル構成情報としてモジュールごとのファイル構成を得る。さらに、該モジュール別ファイル構成情報を修正前後で比較し、また同名のファイルパスが修正前後で存在する場合にはファイルのソースコード上の比較による修正の有無を判定した上で、追加/修正/削除/修正なしの各ファイル数を得、モジュール層比較情報7−2(図7−2)として、修正内容保持部に登録する。該情報は図2におけるモジュール層の情報に相当する。
【0026】
また、前記モジュール層比較情報から、追加/修正/削除/修正なしのモジュール数を得る。モジュールの修正、修正なしの判断は前記モジュール層比較情報に基づき、該モジュールを構成するファイルの修正の有無に合わせて行う。該情報は、プログラム層比較情報7−1(図7−1)として修正内容保持部に記録する。該情報は図2におけるプログラム層の情報に相当する。
【0027】
また、前記ファイルパスリスト(図5)および関数情報テーブル(図6)から修正前後のファイルごとに追加/修正/削除/修正なしの関数の数を得る。
【0028】
追加の判断は、修正前後の同名ファイル内において対象関数が修正前になく修正後に存在する場合に追加とする。但し、このとき修正前の別ファイルに該関数が存在するかを検索し、存在する場合、追加と区別し追加(移動)とする。
【0029】
削除の判断は、修正前後の同名ファイル内において該関数が修正前に存在し修正後にない場合に削除としる。但し、このとき修正後の別ファイルに存在するかを検索し、存在する場合には削除と区別し削除(移動)とする。
【0030】
関数の修正、修正なしの判断は、修正前後の関数情報テーブルにおける開始、終了行から関数定義部のコードブロックを抽出し、前記設定条件におけるコメントパターンに基づくコメントブロックを削除した上で、コードの比較を行い、修正の有無を判断する。コードの比較は行レベルで行い、総行数および追加/修正/削除/修正なしのコード行数を得る。
【0031】
追加/修正/削除/修正なしの関数の数についてはファイル層比較情報7−3(図7−3)として修正内容保持部に登録する。関数内の総行数および追加/修正/削除/修正なしの各コード行数については関数層比較情報7−4(図7−4)として修正内容保持部に登録する。また、前記ファイルパスリスト(図5)およびインクルード行情報テーブル(図6)から修正前後のファイルごとに追加/修正/削除/修正なしの各インクルード行の数を得、ファイル層比較情報7−3として登録する。
【0032】
追加の判断は、修正前後の同名ファイル内において同インクルード行が、修正前になく修正後に存在する場合に追加とする。
【0033】
削除の判断は、修正前後の同名ファイル内において同インクルード行が、修正前に存在し修正後にない場合に削除としる。同インクルード行が修正前後の同名ファイルにおいて存在する場合、該インクルード行に指定されたファイルが修正前後で変更があるかを前記モジュール層比較情報から検索し、変更がある場合インクルード行自体の修正なしと区別し、修正なし(参照先変更有)とする。
【0034】
比較処理終了後、次に該プログラム修正情報出力システムは、修正情報保持部に登録された情報を解析し、修正内容出力部3−6により修正情報を視覚化する。図8にこの解析結果の視覚化の例を示す。解析結果は複数の画面で構成され、トップ画面8−1、プログラム層画面8−2、モジュール層画面8−3、ファイル層画面8−4、関数層画面8−5、コード差分情報画面8−6を含む。
【0035】
まず修正内容出力部にはトップ画面8−1が表示される。ここには、前記論理階層ごとの修正情報の結果が修正あり、または修正なしの情報とともに表示される。各階層の修正の有無は、前記比較処理部により登録された階層別比較情報7−1〜7−4において修正なしの情報以外の情報の値が1つでもある場合には修正ありとし、その他は修正なしとする。
【0036】
開発者はまずここでプログラムの差分状況を概観することができる。また、該画面には条件コンパイル指定フィールドが用意されており、ここに所望の条件コンパイル情報を入力することにより、比較情報の対象となる関数やインクルード行の絞込みを行うことができる。該事例では、条件コンパイル指定はOFF(指定しない)が選択されていることを示す。また、該条件コンパイル指定は残りの画面の情報すべてに有効となる。
【0037】
また、「<<」と「>>」とで文字列を囲む形で表示された部分は、他画面へ遷移するための指示を示す領域(以後リンク部とする)でもあり、マウス等のポインティングデバイス等による指示(以後クリック操作とする)で、他画面へ移行する。なお、「<<」及び「>>」の部分の意味と機能は全画面において共通とする。また、トップ画面を除き、各画面には図示しないが、遷移前の画面に戻るためのリンク部が用意され、各画面を開発者の要求に合わせて自由に遷移することが可能である。
【0038】
次に、トップ画面の「<<修正あり>>」のクリック操作により、プログラム層画面8−2へ遷移する。該画面ではプログラム層の比較パラメータであるモジュールの追加/修正/削除の各数とそれぞれの該当モジュール名を表示する。各モジュール名はモジュール層画面8−3へ遷移するためのリンク部となっている。表示される情報は、8−2ではすべてを図示しないが、プログラム層比較情報7−1に従う。
【0039】
ここで、開発者の認識するモジュールの単位で修正状況を把握することができる。
【0040】
次に、プログラム層画面のリンク部となっているモジュール名をクリックし、モジュール層画面8−3へ遷移する。該画面では、前画面であるプログラム層画面で指定されたモジュール配下のファイルについて、ファイル単位で修正情報を出力する。表示される情報はモジュール層比較情報7−2に従う。また、修正なしファイル情報については、該当ファイルのファイル層比較情報を検索し修正なし(参照先変更有り)インクルード行が1つでも存在する場合には、該情報が留意すべき事項として付加される。図8の例では情報テーブル中の太線枠網掛けセルが相当し、修正なしファイル2つの中に注意すべきインクルード行を含むファイルがあることを表す。
【0041】
次に、モジュール層画面8−3のリンク部であるファイル名をクリックし、ファイル層画面8−4に遷移する。該画面では、前画面であるモジュール層画面で指定されたファイル配下の関数、およびインクルード行単位での修正情報を出力する。表示される情報はファイル層比較情報7−3に従う。
【0042】
次に、ファイル層画面8−4のリンク部である関数名をクリックし、関数層画面8−5へ遷移する。該画面では、前画面であるファイル層画面で指定された関数の比較情報を表示する。表示される情報は関数層比較情報7−4に従う。
【0043】
また、該画面下部にソースコードの差分の実体を表示するためのリンクが用意され、これをクリックすることで差分の実体画面8−6(図10)が表示され、内容を表示さる。該事例では前記「diffコマンド」による差分実体内容を表している。
【0044】
該視覚化例では、トップ画面に続き、論理構造の上位層から下位層へ順番にアプローチすることでプログラム全体の修正情報の把握の理解を容易にしているが、トップ画面から途中階層へのアプローチを行う操作仕様を与えることも容易である。例えば、トップ画面8−1のファイル層の「<<修正あり>>」のクリック操作を行った場合、図9に示す例の画面に遷移することが可能である。図9の画面ではプログラム下の前ファイル下にある関数とインクルード行に関する比較情報を表示する。一般的にはかなり多くの数が表示されることが予想されるが、図9例のように画面上部に情報の絞込み機能を提供することが可能である。修正情報を確認したいファイル名パターンの指定、関数情報またはインクルード情報の選択を行うことで情報の絞込みを行い、明らかな不要情報を減らすことで、開発者の情報混乱を回避することが可能である。図示はしないが、モジュール層、関数層においても同様に可能である。
【0045】
以上説明したように、本実施形態のプログラムの修正情報出力システムによれば、図8や図9に示すような修正前後のプログラムの比較情報を提供できるので、プログラムの修正個所の把握が容易になる。すなわち、該修正内容表示部において、プログラム修正個所は、モジュール、ファイル、関数、インクルード行、ソースコードの単位で提供され、各単位ごとに追加/修正/削除を核とした形式で修正情報を知ることができる。
【0046】
さらにインクルード行の修正情報では、ソースコード上の違いだけでなく、インクルード行に指定されたファイルの変更の有無を拾い上げることで、開発者に修正によるプログラム上の影響範囲をよりきめ細かく示唆することができる。
【0047】
さらに、条件コンパイルによる修正の影響範囲を確認することができ、前記インクルード行情報による影響範囲の示唆に加え、より深く修正状況を考察することが可能である。
【図面の簡単な説明】
【0048】
【図1】比較情報の管理階層構造を示す図である。
【図2】管理階層別の比較パラメータを示す図である。
【図3】本発明の一実施形態であるプログラム修正情報出力システムの構成を示す図である。
【図4】図3のシステムにおける、開発者が設定する条件を入力するインターフェースを示す図である。
【図5】図3のシステムにおける、修正前後のプログラムのファイル構成情報を示す図である。
【図6】図3のシステムにおける、修正前の関数情報およびインクルード行情報を示す図である。
【図7−1】図3のシステムにおける、プログラム層比較情報を示す図である。
【図7−2】図3のシステムにおける、モジュール層比較情報を示す図である。
【図7−3】図3のシステムにおける、ファイル層比較情報を示す図である。
【図7−4】図3のシステムにおける、関数層比較情報を示す図である。
【図8】図3のシステムにおける、修正情報出力部のインターフェースを示す図である。
【図9】図3のシステムにおける、修正情報出力部のインターフェースを示す図である。
【図10】図9中のコード差分情報画面8−6を示す図である。
【0049】
3−1:修正前プログラムのソースファイル群
3−2:修正後プログラムのソースファイル群
3−3:比較処理部
3−4:修正内容保持部
3−5:修正内容表示部

【特許請求の範囲】
【請求項1】
プログラムの比較を行う方法において、
修正前後のプログラムをモジュール、ファイル、関数、ソースコードの各階層単位で比較するステップと、
前記階層単位の比較で得られた差分情報を該プログラムの修正情報として、視覚的に出力するステップと、
を有することを特徴とする修正プログラムの比較方法。
【請求項2】
前記比較方法において、比較対象ファイル同士でソースコードに変更がない場合であっても、該ファイル内の外部ファイル取込み指定により指定されたファイルに変更があった場合において、該変更情報を該ソースファイルの修正情報として得るステップを有することを特徴とする請求項1に記載の修正プログラムの比較方法。
【請求項3】
前記比較方法において、プログラムが条件コンパイル機能の仕様に基づき実装され、かつソースコード中の関数定義部または外部ファイル取込み指定部が該条件コンパイルの影響下にある場合において、条件コンパイル情報に対する関数または外部ファイル取り込み指定との対応関係を保持し、該条件コンパイル情報の指定に基づき有効な修正情報を得るステップを有することを特徴とする請求項1又は2に記載の修正プログラムの比較方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7−1】
image rotate

【図7−2】
image rotate

【図7−3】
image rotate

【図7−4】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate


【公開番号】特開2006−277127(P2006−277127A)
【公開日】平成18年10月12日(2006.10.12)
【国際特許分類】
【出願番号】特願2005−92888(P2005−92888)
【出願日】平成17年3月28日(2005.3.28)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】