(57)【要約】【課題】関数が変更された場合に、その変更が関数の事前条件に影響するか否か判断し、その内容を開発者に通知して、開発者における関数の変更内容の確認作業を軽減させる。【解決手段】条件式導出手段２２が、変更前の関数のソースコードからアサーションにおける条件式を導出し、変更後の関数のソースコードからアサーションにおける条件式を導出し、条件式比較手段２３が、変更前の関数の条件式と変更後の関数の条件式とを比較し、条件式が変化したかどうかを判定し、電子メール送信手段４が、条件式比較手段２３の判定結果である条件式の変化状態を関係者の端末に通知する。これにより、関数の変更が関数の事前条件（アサーション）に影響するか否か判断し、その内容を開発者に通知することができ、開発者における関数の変更内容の確認作業を軽減させることができる。【選択図】図１
2008204067.tif 000002
【特許請求の範囲】
【請求項１】
変更前の関数のソースコードからアサーションにおける条件式を導出し、変更後の関数のソースコードからアサーションにおける条件式を導出する条件式導出手段と、
前記条件式導出手段によって導出された変更前の関数の条件式と変更後の関数の条件式とを比較し、条件式が変化したかどうかを判定する条件式比較手段と、
前記条件式比較手段の判定結果である条件式の変化状態を関係者の端末に通知する通知手段と、を備えた
ことを特徴とするプログラム変更内容通知システム。
【請求項２】
変更された関数を利用する関数をすべての関数のソースコードの中から検索する利用関数検索手段を備え、
通知手段は、条件式の変化状態とともに、変更された関数を利用する関数についても関係者の端末に通知する
請求項１記載のプログラム変更内容通知システム。
【請求項３】
条件式導出手段は、
変更前の関数のソースコードのうちアサーションを含む先頭部分を抽出し、変更後の関数のソースコードのうちアサーションを含む先頭部分を抽出する先頭部抽出手段と、
変更前および変更後の前記先頭部分に含まれるアサーションを検索し、アサーションにおける条件式を抽出する条件式抽出手段と、
前記先頭部分のソースコードを参照して、抽出された条件式内の変数をそれを算出するための計算式に更新する条件式更新手段とを含む
請求項１または請求項２記載のプログラム変更内容通知システム。
【請求項４】
制御部が記憶手段に記憶された制御プログラムに従って、
変更前の関数のソースコードからアサーションにおける条件式を導出し、変更後の関数のソースコードからアサーションにおける条件式を導出する条件式導出処理と、
前記条件式導出処理によって導出された変更前の関数の条件式と変更後の関数の条件式とを比較し、条件式が変化したかどうかを判定する条件式比較処理と、
前記条件式比較処理の判定結果である条件式の変化状態を関係者の端末に通知する通知処理と、を実行する
ことを特徴とするプログラム変更内容通知方法。
【請求項５】
変更された関数を利用する関数をすべての関数のソースコードの中から検索する利用関数検索処理を実行し、
通知処理において、条件式の変化状態とともに、変更された関数を利用する関数についても関係者の端末に通知する
請求項４記載のプログラム変更内容通知方法。
【請求項６】
条件式導出処理において、
変更前の関数のソースコードのうちアサーションを含む先頭部分を抽出するとともに、変更後の関数のソースコードのうちアサーションを含む先頭部分を抽出し、
変更前および変更後の前記先頭部分に含まれるアサーションを検索し、アサーションにおける条件式を抽出し、
前記先頭部分のソースコードを参照して、導出された条件式内の変数をそれを算出するための計算式に更新する
請求項４または請求項５記載のプログラム変更内容通知方法。
【請求項７】
プログラムの内容が変更された場合に、変更内容を関係者に通知するプログラム変更内容通知用プログラムであって、
変更前の関数のソースコードからアサーションにおける条件式を導出し、変更後の関数のソースコードからアサーションにおける条件式を導出する条件式導出処理と、
前記条件式導出処理によって導出された変更前の関数の条件式と変更後の関数の条件式とを比較し、条件式が変化したかどうかを判定する条件式比較処理と、
前記条件式比較処理の判定結果である条件式の変化状態を関係者の端末に通知する通知処理と、
をコンピュータに実行させるための変更内容通知用プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの内容（ソースコード）が変更された場合に、変更内容を関係者に通知するプログラム変更内容通知システム、プログラム変更内容通知方法およびプログラム変更内容通知用プログラムに関する。
【背景技術】
【０００２】
複数の開発者が協同してＣ言語によるプログラム（ソフトウェア）の開発を行うことが一般に行われている。この場合において、ある開発者が自分の担当する部分の関数Ａのソースコードを変更したときは、その関数Ａを利用する関数Ｂを検索し、その結果を他の開発者に通知することが好ましい。関数Ａのソースコードの変更により、関数Ａを利用する関数Ｂのソースコードの変更が必要になる可能性もあるからである。変更内容を通知することによって、変更された関数Ａを利用する関数Ｂの開発者に対して関数Ａの変更の確認が促されるので、変更内容の通知は一般に有益である。
【０００３】
そのような変更内容を通知するシステムは従来から存在する。一例として、特許文献１には、修正前後のソースコードの差分を行単位で検出し、各行の内容に応じた通知を行うことが記載されている。
【０００４】
【特許文献１】特開平８−１９４６１１号公報（段落０００８、図１、図３）
【発明の開示】
【発明が解決しようとする課題】
【０００５】
関数Ａを利用するための事前条件（前提条件）が変化した場合は、関数Ａを利用する側の関数Ｂの開発者は特に注意深く確認する必要がある。関数を利用するための事前条件は、関数の先頭部分において、アサーション（ａｓｓｅｒｔｉｏｎ）を利用して記述される場合が多い。ここで、アサーションは、プログラミング言語の構文の一種で、そのプログラムの事前条件（前提条件）を示すために使用される。表明とも呼ばれる。アサーションにおける条件式には真であるべき式が記述される。アサーションにおける条件式が偽となった場合、プログラムにバグが潜在していることを示している。開発者（プログラマ）は、デバッグを単純化し、問題を早期に検出するために、開発過程でソースコードにアサーションを追加する。
【０００６】
このように、関数Ａの先頭部分に記述されたアサーションに影響する変化があった場合には、関数Ａが満たさなければならない条件が変化したことになるので、関数Ａを利用する関数Ｂの開発者は特に注意する必要がある。しかし、従来のシステムでは、変更された関数になんらかの変更が実施されたことは通知するが、その変更が関数の先頭部分のアサーションの条件式に影響するか否かについては判断していない。従って、その判断を他の開発者が行う必要があった。
【０００７】
また、特許文献１に記載されたシステムにおいても、修正前後のソースコードの差分を行単位で検出するが、ある行と他の行の関連については感知（判断）しないため、関数の変更が関数の先頭部分のアサーションの条件式に影響するか否かについて判断することはできない。従って、この場合も、その判断を他の開発者が行う必要があった。
【０００８】
本発明は、上記のような課題を解決するためになされたものであり、関数が変更された場合に、その変更が関数の事前条件に影響するか否か判断し、その内容を開発者に通知して、開発者における関数の変更内容の確認作業を軽減させることができるプログラム変更内容通知システム、プログラム変更内容通知方法およびプログラム変更内容通知用プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
以上の目的を達成するため、本発明によるプログラム変更内容通知システムは、変更前の関数のソースコードからアサーションにおける条件式を導出し、変更後の関数のソースコードからアサーションにおける条件式を導出する条件式導出手段と、条件式導出手段によって導出された変更前の関数の条件式と変更後の関数の条件式とを比較し、条件式が変化したかどうかを判定する条件式比較手段と、条件式比較手段の判定結果である条件式の変化状態を関係者の端末に通知する通知手段とを備えたことを特徴とする。
【００１０】
変更された関数を利用する関数をすべての関数のソースコードの中から検索する利用関数検索手段を備え、通知手段は、条件式の変化状態とともに、変更された関数を利用する関数についても関係者の端末に通知するように構成されていてもよい。このような構成によれば、開発者における関数の変更内容の確認作業をより一層軽減させることができる。
【００１１】
条件式導出手段は、変更前の関数のソースコードのうちアサーションを含む先頭部分を抽出し、変更後の関数のソースコードのうちアサーションを含む先頭部分を抽出する先頭部抽出手段と、変更前および変更後の先頭部分に含まれるアサーションを検索し、アサーションにおける条件式を抽出する条件式抽出手段と、先頭部分のソースコードを参照して、抽出された条件式内の変数をそれを算出するための計算式に更新する条件式更新手段とを含む構成とされていてもよい。このような構成によれば、ソースコードからの条件式の導出を効率的に実行することができる。
【００１２】
また、本発明によるプログラム変更内容通知方法は、制御部が記憶手段に記憶された制御プログラムに従って、変更前の関数のソースコードからアサーションにおける条件式を導出し、変更後の関数のソースコードからアサーションにおける条件式を導出する条件式導出処理と、条件式導出処理によって導出された変更前の関数の条件式と変更後の関数の条件式とを比較し、条件式が変化したかどうかを判定する条件式比較処理と、条件式比較処理の判定結果である条件式の変化状態を関係者の端末に通知する通知処理とを実行することを特徴とする。
【００１３】
変更された関数を利用する関数をすべての関数のソースコードの中から検索する利用関数検索処理を実行し、通知処理において、条件式の変化状態とともに、変更された関数を利用する関数についても関係者の端末に通知するように構成されていてもよい。このような構成によれば、開発者における関数の変更内容の確認作業をより一層軽減させることができる。
【００１４】
条件式導出処理において、変更前の関数のソースコードのうちアサーションを含む先頭部分を抽出するとともに、変更後の関数のソースコードのうちアサーションを含む先頭部分を抽出し、変更前および変更後の先頭部分に含まれるアサーションを検索し、アサーションにおける条件式を抽出し、先頭部分のソースコードを参照して、導出された条件式内の変数をそれを算出するための計算式に更新するように構成されていてもよい。このような構成によれば、ソースコードからの条件式の導出を効率的に実行することができる。
【００１５】
また、本発明による変更内容通知用プログラムは、プログラムの内容が変更された場合に、変更内容を関係者に通知するプログラム変更内容通知用プログラムであって、変更前の関数のソースコードからアサーションにおける条件式を導出し、変更後の関数のソースコードからアサーションにおける条件式を導出する条件式導出処理と、条件式導出処理によって導出された変更前の関数の条件式と変更後の関数の条件式とを比較し、条件式が変化したかどうかを判定する条件式比較処理と、条件式比較処理の判定結果である条件式の変化状態を関係者の端末に通知する通知処理とをコンピュータに実行させることを特徴とする。
【発明の効果】
【００１６】
以上のように、本発明では、変更前の関数のソースコードからアサーションにおける条件式を導出し、変更後の関数のソースコードからアサーションにおける条件式を導出し、導出された変更前の関数の条件式と変更後の関数の条件式とを比較し、条件式が変化したかどうかを判定し、判定結果である条件式の変化状態を関係者の端末に通知するように構成されているので、関数の変更が関数の事前条件に影響するか否か判断し、その内容を開発者に通知することができるようになり、開発者（関係者）における関数の変更内容の確認作業を軽減させることができる。
【発明を実施するための最良の形態】
【００１７】
以下、本発明の実施の一形態を図面を参照して説明する。
【００１８】
図１は、本発明のプログラム変更内容通知システムの構成を示すブロック図である。図１に示すように、プログラム変更内容通知システムは、版管理システム１と、データ処理装置２と、記憶装置３と、電子メール送信手段４とを備えている。
【００１９】
なお、この実施の形態では、プログラム言語としてＣ言語を使用する場合について説明する。Ｃ言語においても、アサーション（ａｓｓｅｒｔマクロという）を利用して関数を利用するための事前条件（前提条件）を関数の先頭部分に記述する。Ｃ言語には、ａｓｓｅｒｔ（）というマクロが用意されている。ａｓｓｅｒｔ（）は、与えられた条件が成立しているか否か調べ、ｅｘｐｒｅｓｓｉｏｎの値が０ならば、標準エラー出力にメッセージを表示して、ａｂｏｒｔ（）を呼び出し、プログラムを異常終了させる。なお、ｅｘｐｒｅｓｓｉｏｎの値が０以外ならば、ａｓｓｅｒｔ（）は何もしない。
【００２０】
図１に示す構成において、版管理システム１は、複数の開発者が協同して開発しているプログラム（ソフトウェア）のソースコードおよびその改版（バージョン）を管理する既存のシステムである。例えば、版管理システム１は、各開発者にプログラムを開発（作成）するためのアプリケーション（ソフトウェア）を提供する。また、版管理システム１は、各々の開発者が開発しているプログラムのソースコードを記憶し、プログラムにおける所定の関数のソースコードが修正（すなわち、更新または変更）されたときは、修正前の関数のソースコードおよび修正後の関数のソースコードを記憶する。本実施の形態では、版管理システム１はＣ言語の関数のソースコードを管理しているものとする。この版管理システム１の機能により、関数が開発者によって更新（更新または変更）された際に、修正前の関数のソースコード、および修正後の関数のソースコードをデータ処理装置２が取得することができる。
【００２１】
なお、版管理システム１は、ＣＰＵなどの制御部がハードディスクなどの記憶媒体に記憶されている制御プログラム（版管理用プログラム）に従って各種処理を実行することにより実現される。
【００２２】
データ処理装置２は、関数が修正された場合に、その修正が関数の事前条件（前提条件）に影響するか否か判断する処理を実行する装置である。図１に示すように、データ処理装置２は、関数ソース取出手段２１と、条件式導出手段２２、条件式比較手段２３と、利用関数検索手段２４とを備えている。
【００２３】
なお、データ処理装置２の各部の構成は、ＣＰＵなどの制御部がハードディスクなどの記憶媒体に記憶されている制御プログラム（プログラム変更内容通知用プログラム）に従って各種処理を実行することにより実現される。
【００２４】
記憶装置３は、関数のソースコードやソースコードから抽出された各種データを記憶するハードディスクその他の記憶媒体である。具体的には、記憶装置３は、データ処理装置２が版管理システム１から取り出した、修正前の関数のソースコード（図４参照）、修正後の関数のソードコード（図５参照）、すべての関数のソースコード（図１６参照）を記憶する。また、記憶装置３は、データ処理装置２によってデータ処理された、修正前後の関数のソースコードにおけるａｓｓｅｒｔマクロを含む先頭部分（図６〜図９）、ａｓｓｅｒｔマクロ中で指定されている条件式（図１０〜図１４参照）、条件式の変化状態（図１５参照）を記憶する。図１に示すように、記憶装置３は、修正前関数ソース記憶部３１と、修正後関数ソース記憶部３２と、関数ソース先頭部記憶部３３と、条件式記憶部３４と、修正前関数条件式記憶部３５と、修正後関数条件式記憶部３６と、条件変化関数記憶部３７と、全関数ソース記憶部３８とを備えている。
【００２５】
電子メール送信手段４は、データ処理装置２により実行された関数の修正が事前条件に影響するか否か判断の結果を関係者（協同開発者等）に電子メール（図１７参照）を送信して通知する。
【００２６】
データ処理装置２の各部の構成は、それぞれ以下のような処理を実行する。関数ソース取出手段２１は、版管理システム１におけるソースコードの管理機能を利用して、版管理システム１から修正前の関数のソースコード、修正後の関数のソースコード、およびすべての関数のソースコードを取り出す。そして、関数ソース取出手段２１は、取り出した修正前の関数のソースコードを記憶装置３の修正前関数ソース記憶部３１に格納し、取り出した修正後の関数のソースコードを記憶装置３の修正後関数ソース記憶部３２に格納し、取り出したすべての関数のソースコードを全関数ソース記憶部３８に格納する。
【００２７】
条件式導出手段２２は、修正前関数ソース記憶部３１に格納された修正前の関数のソースコードからａｓｓｅｒｔマクロを含む先頭部分を導出し、その先頭部分からａｓｓｅｒｔマクロ中で指定されている条件式を導出する。また、条件式導出手段２２は、修正後関数ソース記憶部３２に格納された修正後の関数のソースコードからａｓｓｅｒｔマクロを含む先頭部分を導出し、その先頭部分からａｓｓｅｒｔマクロ中で指定されている条件式を導出する。なお、条件式導出手段２２は、関数ソース先頭部抽出手段２２１、条件式抽出手段２２２、および条件式更新手段２２３を含んでいる。
【００２８】
関数ソース先頭部抽出手段２２１は、修正前関数ソース記憶部３１に格納された修正前の関数のソースコードのうち、ａｓｓｅｒｔマクロを含む先頭部分を抽出し、抽出した先頭部分を関数ソース先頭部記憶部３３に格納する。また、関数ソース先頭部抽出手段２２１は、修正後関数ソース記憶部３２に格納された修正後の関数のソースコードのうち、ａｓｓｅｒｔマクロを含む先頭部分を抽出し、抽出した先頭部分を関数ソース先頭部記憶部３３に格納する。
【００２９】
条件式抽出手段２２２は、関数ソース先頭部記憶部３３に格納された先頭部分に含まれるａｓｓｅｒｔマクロを検索し、ａｓｓｅｒｔマクロに指定された条件式（修正前関数条件式、修正後関数条件式）を抽出し、抽出した条件式を条件式記憶部３４に格納する。
【００３０】
条件式更新手段２２３は、関数ソース先頭部記憶部３３に格納されている先頭部分のソースコードを参照しながら、条件式記憶部３４に格納されている条件式を必要に応じて書き換える。書き換えが終了したら、条件式更新手段２２３は、書き換えた条件式（修正前関数条件式）を修正前関数条件式記憶部３５に格納し、書き換えた条件式（修正後関数条件式）を修正後関数条件式記憶部３６に格納する。
【００３１】
条件式比較手段２３は、修正前関数条件式記憶部３５に格納された条件式と修正後関数条件式記憶部３６に格納された条件式とを比較し、該当する関数において条件式が変更（修正）されたかどうかを判定し、判定結果（条件式の変化状態）を条件変化関数記憶部３７に格納する。
【００３２】
利用関数検索手段２４は、条件変化関数記憶部３７に格納された関数（変更された関数）を利用する関数を、全関数ソース記憶部３８に格納されているすべての関数のソースコードの中から検索し、その検索結果の情報を電子メール送信手段４に出力する。
【００３３】
なお、版管理システム１とデータ処理装置２と記憶装置３は、一つの装置（ハードウェア）であってもよいし、それぞれ別々の装置であってもよいし、任意の二つが一つの装置で構成されていてもよい。例えば、版管理システム１、データ処理装置２および記憶装置３が一つの計算機（コンピュータやサーバなど）で構成されていてもよい。また、版管理システム１はある計算機で構成され、データ処理装置２が別の計算機で構成され、記憶装置３が版管理システム１およびデータ処理装置２とは別の記憶媒体で構成されていてもよい。また、データ処理装置２と記憶装置３が一つの計算機で構成され、版管理システム１が別の計算機で構成されていてもよい。
【００３４】
次に、本発明のプログラム変更内容通知システムの動作について説明する。
【００３５】
図２は、本発明のプログラム変更内容通知システムの動作を示すフローチャートである。まず、データ処理装置２の関数ソース取出手段２１は、修正があったすべての関数を確認し、修正があったすべての関数の修正前のソースコードを版管理システム１から取り出し、修正前関数ソース記憶部３１に格納する（ステップＡ１）。なお、関数ソース取出手段２１が、定期的に版管理システム１にアクセスして関数の修正があったかどうかを確認する構成であってもよく、また関数の修正があったときに版管理システム１がデータ処理装置２にその旨を通知する構成であってもよい。
【００３６】
ここで、修正前関数ソース記憶部３１に格納された修正前のソースコードの例を図４に示す。図４では、修正された関数が関数ｆｕｎｃ１および関数ｆｕｎｃ２である場合における、関数ｆｕｎｃ１および関数ｆｕｎｃ２それぞれの修正前のソースコードを示している。なお、関数ｆｕｎｃ１の１０５行目、１０７行目および１１３行目、また関数ｆｕｎｃ２の２０５行目のａｓｓｅｒｔ（）がａｓｓｅｒｔマクロであり、この中に条件式が記述されている。
【００３７】
また、データ処理装置２の関数ソース取出手段２１は、修正があったすべての関数の修正後のソースコードを版管理システム１から取り出し、修正後関数ソース記憶部３２に格納する（ステップＡ２）。
【００３８】
ここで、修正後関数ソース記憶部３２に格納された修正後のソースコードの例を図５に示す。図５では、修正された関数が関数ｆｕｎｃ１および関数ｆｕｎｃ２である場合における、関数ｆｕｎｃ１および関数ｆｕｎｃ２それぞれの修正後のソースコードを示している。具体的には、関数ｆｕｎｃ１の１０４行目の「ｉｎｔ  ｊ＝ｘ＊２」が「ｉｎｔ  ｊ＝ｘ＊４」に修正され、関数ｆｕｎｃ１の１０９行目の「ｉｆ（ｓ［ｉ＊２］＝＝’／’）」が「ｉｆ（ｓ［ｉ＊４］＝＝’／’）」に修正され、関数ｆｕｎｃ２の２０４行目の「ｉｎｔ  ｋ＝ｙ＋３」が「ｉｎｔ  ｋ＝ｙ＋８」に修正されている。
【００３９】
次に、条件式導出手段２２および条件式比較手段２３が、修正があったすべての関数についてステップＡ４〜Ａ６の処理を繰り返し実行する（条件式導出手段２２がステップＡ４，Ａ５の処理を繰り返し実行し、条件式比較手段２３がステップＡ６の処理を繰り返し実行する）。そして、条件式導出手段２２（例えば関数ソース先頭部抽出手段２２１）は未処理の関数がまだ残っているかどうかを判定する（ステップＡ３）。未処理の関数が残っている場合には（ステップＡ３のイエス）、ステップＡ４〜Ａ６の処理を行い、未処理の関数が無くなった時点で（ステップＡ３のノー）、ステップＡ７の処理に移行する。
【００４０】
ステップＡ４，Ａ５，Ａ６の処理は以下の通りである。まず、条件式導出手段２２が、修正前関数ソース記憶部３１に格納されたある関数の修正前のソースコードを参照し、修正前のソースコードからａｓｓｅｒｔマクロを含む先頭部分を導出し、その先頭部分からａｓｓｅｒｔマクロ中で指定されている条件式（関数を利用するための条件式）を導出する（ステップＡ４）。条件式導出手段２２により条件式を導出する動作の詳細について、図３を用いて説明する。
【００４１】
図３は、関数条件式を導出するための処理を示すフローチャートである。まず、条件式導出手段２２の関数ソース先頭部抽出手段２２１は、修正前関数ソース記憶部３１に格納された修正前の関数のソースコードから関数ソース先頭部（ａｓｓｅｒｔマクロを含む先頭部分）を抽出し、抽出した関数ソース先頭部を関数ソース先頭部記憶部３３に格納する（ステップＢ１）。
【００４２】
ここで、抽出される関数ソース先頭部を次のように定義している。すなわち、関数ソース先頭部は、関数本体の先頭行からｉｆ，ｆｏｒ，ｗｈｉｌｅ等の制御構造に到達する直前の行までを関数ソース先頭部とする。ただし、ｉｆ，ｆｏｒ，ｗｈｉｌｅ等の制御構造を持たない場合には、関数本体の先頭行から関数本体の最終行までを関数ソース先頭部とみなす。
【００４３】
このように、修正前の関数のソースコードから関数ソース先頭部を抽出しているのは（つまり、条件式導出手段２２によるソースコードの解析対象を先頭部に絞っている理由は）、制御構造が影響するａｓｓｅｒｔマクロの変化を解析するのは困難であり（制御構造の中まで解析するのは困難であり）、また関数を利用するための条件式は制御構造が出現する前に記述されるのが一般的であるため、関数ソース先頭部を解析対象とするのが効率的だからである。
【００４４】
具体的には、図４に示す関数ｆｕｎｃ１の場合は、関数本体の先頭行である１０２行目から、制御構造ｆｏｒが出現する１０８行目の直前の１０７行目までが関数ソース先頭部である。図４に示す関数ｆｕｎｃ１のソースコードから抽出した関数ソース先頭部を図６に示す。
【００４５】
次に、条件式抽出手段２２２は、関数ソース先頭部記憶部３３に格納された関数ソース先頭部からすべてのａｓｓｅｒｔマクロを抽出し、その引数部分の式を条件式として条件式記憶部３４に格納する（ステップＢ２）。
【００４６】
具体的には、図６に示す関数ソース先頭部（ｆｕｎｃ１の関数ソース先頭部）の場合は、１０５行目のａｓｓｅｒｔマクロおよび１０７行目のａｓｓｅｒｔマクロの引数からそれぞれ「ｓ！＝ＮＵＬＬ」および「ｊ＜ｌ」という式を条件式として抜き出し、抜き出した条件式を条件式記憶部３４に格納する。図６に示す関数ソース先頭部から抽出した条件式を図１０に示す。
【００４７】
次に、条件式更新手段２２３が、ステップＢ２で抽出されたすべての条件式についてステップＢ４〜Ｂ８の処理を繰り返し実行する。そして、条件式更新手段２２３は未処理の条件式がまだ残っているかどうかを判定する（ステップＢ３）。未処理の条件式が残っている場合には（ステップＢ３のイエス）、ステップＢ４〜Ｂ８の処理を行い、未処理の条件式が無くなった時点で（ステップＢ３のノー）、図３に示す処理を終了し、図２に示すステップＡ５の処理に移行する。
【００４８】
ステップＢ４〜Ｂ８の処理は以下の通りである。まず、条件式更新手段２２３は、関数ソース先頭部における条件式が元々存在した行、すなわちａｓｓｅｒｔマクロが存在した行から検索を開始し、関数の先頭行に到達するまで１行ずつ戻っていく（ステップＢ４，Ｂ５）。この過程において、条件式更新手段２２３は、着目している行に代入式があり、かつ代入式の左辺である変数が条件式内に存在するかどうかを判定する（ステップＢ６）。そして、着目している行に代入式があり、かつ代入式の左辺である変数が条件式内に存在する場合には（ステップＢ６のイエス）、条件式内の変数をその代入式の右辺で置き換え、置き換えた条件式を改めて条件式記憶部３４に格納する（ステップＢ７）。そして、先頭行に到達したら（ステップＢ４のイエス）、条件式更新手段２２３は、その時点での条件式を修正前関数条件式記憶部３５に出力して格納する（ステップＢ８）。
【００４９】
上記のステップＢ４〜Ｂ８の処理は次の理由により実行されている。条件式記憶部３４に格納された条件式は変数を含むが、この変数は計算により導出された値である可能性がある。この場合、変数をそれを導出する計算式に置き換えることにより、より正確な条件を求めることができる。従って、上記のステップＢ４〜Ｂ８の処理で、変数をそれを導出する計算式（代入式の右辺）に置き換えている（書き換えている、更新している）。
【００５０】
上記のステップＢ４〜Ｂ８の処理の具体例を図１０に示す「ｊ＜ｌ」という条件式を用いて説明する。
【００５１】
まず、「ｊ＜ｌ」の条件は図６の１０７行目から取り出したものであるから、１０７行目から開始する。１行戻って（ステップＢ５）、１０６行目を参照すると、代入式「ｌ＝ｓｔｒｌｅｎ（ｓ）」であり、左辺の変数「ｌ」は条件式「ｊ＜ｌ」に含まれる（ステップＢ６のイエス）。そこで、条件式内の変数「ｊ」を代入式の右辺「ｘ＊２」に置換し、その結果である「ｊ＜（ｓｔｒｌｅｎ（ｓ））」を条件式記憶部３４に格納する（ステップＢ７）。
【００５２】
さらに、１行ずつ戻りながら処理していくと、１０４行目における代入式「ｉｎｔ  ｊ＝ｘ＊２」において、左辺の変数「ｊ」は条件式「ｊ＜（ｓｔｒｌｅｎ（ｓ））」内に存在する。そこで、条件式内の変数「ｊ」を「ｘ＊２」に置換し、その結果である「（ｘ＊２）＜（ｓｔｒｌｅｎ（ｓ））」を条件式記憶部３４に格納する。
【００５３】
さらに、１行ずつ戻りながら処理していくと、先頭行の１０１行目に到達する（ステップＢ４のイエス）。従って、最終的な条件式「（ｘ＊２）＜（ｓｔｒｌｅｎ（ｓ））」を条件式記憶部３４から取り出して修正前関数条件式記憶部３５に出力して書き込む（ステップＢ８）。この結果を図１１に示す。
【００５４】
図１０に示す「ｓ！＝ＮＵＬＬ」という条件式についても同様に処理されるが、条件式内の変数が左辺となるような代入式が存在しないため、そのままの形で修正前関数条件式記憶部３５に書き込まれる。以上の結果、修正前関数条件式記憶部３５に格納される書き換え後の関数ｆｕｎｃ１の条件式は図１１に示す内容となる。
【００５５】
ステップＢ３において未処理の条件式が残っていないと判定した場合は（ステップＢ３のノー）、図２に示すステップＡ５の処理に移行する。
【００５６】
図２の処理の説明に戻ると、条件式導出手段２２は、ステップＡ４の修正前関数条件式導出処理の後に、ステップＡ５の修正後関数条件式導出処理を実行する。ステップＡ５では、条件式導出手段２２が、修正後関数ソース記憶部３２に格納されたある関数の修正後のソースコードを参照し、修正後のソースコードからａｓｓｅｒｔマクロを含む先頭部分を導出し、その先頭部分からａｓｓｅｒｔマクロ中で指定されている条件式（関数を利用するための条件式）を導出する。
【００５７】
なお、ステップＡ５の修正後関数条件式導出処理では、ステップＡ４の修正前関数条件式導出処理と同様に、図３に示した各処理を実行することによって条件式を導出する。すなわち、図５に示す関数ｆｕｎｃ１から図７の関数ソース先頭部が抽出され（ステップＢ１）、図７に示す関数ソース先頭部から条件式が抽出され（ステップＢ２）、条件式内の変数をそれを導出する計算式に置き換え（ステップＢ４〜Ｂ７）、図１２に示す条件式（置き換え後の関数ｆｕｎｃ１の修正後の条件式）を修正後関数条件式記憶部３６に書き込む（ステップＢ８）。そして、全ての条件式について処理を実行した場合には（ステップＢ３のノー）、図３の処理を終了し、図２のステップ６の処理に移行する。
【００５８】
次に、条件式比較手段２３は、修正前関数条件式記憶部３５に格納されている条件式と修正後関数条件式記憶部３６に格納されている条件式とを比較し、その差異の有無（条件変化の有無）を条件変化関数記憶部３７に格納する（ステップＡ６）。
【００５９】
具体的には、修正前関数条件式記憶部３５に格納されている図１１に示す条件式と、修正後関数条件式記憶部３６に格納されている図１２に示す条件式とを比較すると、条件「（ｘ＊２）＜（ｓｔｒｌｅｎ（ｓ））」と「（ｘ＊４）＜（ｓｔｒｌｅｎ（ｓ））」とは異なる。そこで、図１５に示すように、関数ｆｕｎｃ１の条件変化の有無を「変化あり」として条件変化関数記憶部３７に格納する。
【００６０】
なお、上記のステップＡ４〜Ａ６の説明においては、具体例として図４および図５の関数ｆｕｎｃ１を用いて説明したが、図４および図５の関数ｆｕｎｃ２についても同様の処理が行われる。以下、関数ｆｕｎｃ２についての処理を簡単に説明する。
【００６１】
ステップＡ４において、条件式導出手段２２は関数ｆｕｎｃ２についての修正前関数条件式を導出する。具体的には図３に示した処理を実行する。
【００６２】
まず、関数ソース先頭部抽出手段２２１は、修正前関数ソース記憶部３１に格納された修正前の関数のソースコードから関数ソース先頭部を抽出し、抽出した関数ソース先頭部を関数ソース先頭部記憶部３３に格納する（ステップＢ１）。図４に示す関数ｆｕｎｃ２の場合は、関数本体の先頭行である２０２行目から、関数本体の最後である２０６行目までが関数ソース先頭部である。図８は、図４に示す関数ｆｕｎｃ２のソースコードから抽出した関数ソース本体部を示している。
【００６３】
次いで、条件式抽出手段２２２は、関数ソース先頭部記憶部３３に格納された関数ソース先頭部からすべてのａｓｓｅｒｔマクロを抽出し、その引数部分の式を条件式として条件式記憶部３４に格納する（ステップＢ２）。図８に示す関数ソース先頭部（ｆｕｎｃ２の関数ソース先頭部）の場合は、２０５行目のａｓｓｅｒｔマクロの引数からそれぞれ「ｊ＜ｙ」という式を条件式として抜き出し、抜き出した条件式を条件式記憶部３４に格納する。なお、図８に示す関数ソース先頭部から抽出した条件式については図示していない。
【００６４】
次に、条件式更新手段２２３は、関数ソース先頭部における条件式が元々存在した行から関数の先頭行まで１行ずつ戻りながら、条件式内の変数を導出する代入式を検索し、変数を計算式（代入式の右辺）に置換し、置換した条件式を修正前関数条件式記憶部３５に格納する処理を実行する（ステップＢ３〜Ｂ８）。
【００６５】
具体的には、図８の２０５行目から条件式「ｊ＜ｙ」が取り出されているので、２０５行目から開始される。そして、１行ずつ戻りながら処理していくと、２０３行目における代入式「ｉｎｔ  ｊ＝ｘ＊２」において、左辺の変数「ｊ」は条件式「ｊ＜ｙ」内に存在する。そこで、条件式内の変数「ｊ」を「ｘ＊２」に置換し、その結果である「（ｘ＊２）＜ｙ」を条件式記憶部３４に格納する。さらに、１行ずつ戻りながら処理していくと、先頭行の２０１行目に到達する。従って、最終的な条件式「（ｘ＊２）＜ｙ」を条件式記憶部３４から取り出して修正前関数条件式記憶部３５に出力して書き込む。関数ｆｕｎｃ２には他に条件式が存在しないので、修正前関数条件式記憶部３５に格納される置き換え後の関数ｆｕｎｃ２の条件式は図１３に示す内容となる。
【００６６】
ステップＡ４の処理の実行後、ステップＡ５において条件式導出手段２２は関数ｆｕｎｃ２についての修正後関数条件式を導出する。具体的には図３に示した処理を実行する。具体的には、図５に示す関数ｆｕｎｃ２から図９の関数ソース先頭部が抽出され（ステップＢ１）、図９に示す関数ソース先頭部から条件式が抽出され（ステップＢ２）、条件式内の変数をそれを導出する計算式に置き換え（ステップＢ４〜Ｂ７）、図１４に示す条件式（置き換え後の関数ｆｕｎｃ２の修正後の条件式）を修正後関数条件式記憶部３６に書き込む（ステップＢ８）。そして、すべての条件式について処理を実行した場合には（ステップＢ３のノー）、図３の処理を終了し、図２のステップＡ６の処理に移行する。
【００６７】
次に、条件式比較手段２３は、修正前関数条件式記憶部３５に格納されている条件式と修正後関数条件式記憶部３６に格納されている条件式とを比較し、その差異の有無（条件変化の有無）を条件変化関数記憶部３７に格納する（ステップＡ６）。具体的には、修正前関数条件式記憶部３５に格納されている図１３に示す条件式と、修正後関数条件式記憶部３６に格納されている図１４に示す条件式とを比較すると、いずれの条件式も「（ｘ＊２）＜ｙ」であって同一の内容である。そこで、図１５に示すように、関数ｆｕｎｃ２の条件変化の有無を「変化なし」として条件変化関数記憶部３７に格納する。
【００６８】
すべての関数についてステップＡ４〜Ａ４の処理を実行すると（ステップＡ３のノー）、ステップＡ７の処理に移行する。
【００６９】
ステップＡ７において、関数ソース取出手段２１は、版管理システム１からすべての関数のソースコードを取り出し、取り出したソースコードを全関数ソース記憶部３８に格納する。全関数ソース記憶部３８に格納されるすべての関数のソースコードの例を図１６に示す。なお、ここでは「どの関数がどの関数を利用しているか」という情報だけが必要なのであり、関数の処理内容自体は必要ない。従って、図１６では関数の呼出以外の内容を省略している。
【００７０】
次に、利用関数検索手段２４は、条件変化関数記憶部３７に格納されている関数（修正された関数）が全関数ソース記憶部３８に格納されているどの関数で利用されているかを検索する（ステップＡ８）。図１５と図１６の例を用いて説明すると、関数ｆｕｎｃ１が関数ｆｕｎｃ４および関数ｆｕｎｃ５で利用されており、関数ｆｕｎｃ２が関数ｆｕｎｃ３および関数ｆｕｎｃ５で利用されている。利用関数検索手段２４は、条件変化関数記憶部３７に格納されている条件変化の有無に関する情報と、ステップＡ８における検索結果の情報とを電子メール送信手段４に出力する。
【００７１】
そして、最後に、電子メール送信手段４は、条件変化関数記憶部３７に格納されている条件変化の有無に関する情報と、利用関数検索手段２４による検索結果の情報とを通知する電子メールを作成し、作成した電子メールを関係者（共同開発者）の端末に送信する（ステップＡ９）。送信される電子メールの表示例を図１７に示す。
【００７２】
仮に、関数ｆｕｎｃ５の担当者が図１７に示す電子メールを受け取った場合、次のような判断をすることが想定される。すなわち、「関数ｆｕｎｃ１の先頭部分のａｓｓｅｒｔの条件は変更されており、担当する関数ｆｕｎｃ５はその関数ｆｕｎｃ１を利用しているので、関数ｆｕｎｃ１の変更についても詳細に確認すべきである。」、「関数ｆｕｎｃ２の先頭部分のａｓｓｅｒｔの条件は変更されていない。担当する関数ｆｕｎｃ５は関数ｆｕｎｃ２を利用しているが、必ずしも関数ｆｕｎｃ２の確認は詳細に行う必要はない。」というような判断である。
【００７３】
以上のように、この実施の形態によれば、条件式導出手段２２が、変更前の関数のソースコードからアサーションにおける条件式を導出し、変更後の関数のソースコードからアサーションにおける条件式を導出し、条件式比較手段２３が、変更前の関数の条件式と変更後の関数の条件式とを比較し、条件式が変化したかどうかを判定し、電子メール送信手段４が、条件式比較手段２３の判定結果である条件式の変化状態を関係者の端末に通知するように構成されているので、関数の変更が関数の事前条件（アサーション）に影響するか否か判断し、その内容を開発者に通知することができる。その結果、開発者（関係者）における関数の変更内容の確認作業を軽減させることができる。
【００７４】
また、条件式比較手段２３が、変更された関数を利用する関数をすべての関数のソースコードの中から検索し、電子メール送信手段４が、条件式の変化状態とともに、変更された関数を利用する関数についても関係者の端末に電子メールで通知するように構成されているので、開発者における関数の変更内容の確認作業をより一層軽減させることができる。
【００７５】
さらに、条件式導出手段２２が、変更前の関数のソースコードのうちアサーションを含む先頭部分を抽出するとともに、変更後の関数のソースコードのうちアサーションを含む先頭部分を抽出する関数ソース先頭部抽出手段２２１と、変更前および変更後の先頭部分に含まれるアサーションを検索し、アサーションにおける条件式を抽出する条件式抽出手段２２２と、先頭部分のソースコードを参照して、導出された条件式内の変数をそれを算出するための計算式に更新する条件式更新手段２２３とを備えているので、ソースコードからの条件式の導出を効率的に実行することができる。
【００７６】
なお、上記の実施の形態では、プログラミング言語としてＣ言語を使用した場合について説明したが、Ｃ言語に限られるわけではなく、アサーションを利用可能なプログラミング言語であれば、どのような言語であってもよい。例えば、例えば、Ｃ＋＋やＪａｖａ（登録商標）などのプログラミング言語にもアサーション機能が設けられているので、Ｃ＋＋やＪａｖａ（登録商標）などの言語で記述されたソースコードに対しても本発明を適用することが可能である。
【産業上の利用可能性】
【００７７】
本発明は、複数人でプログラミング言語（例えばＣ言語）のソースコードを開発する場合、特に各々の開発する関数を利用する条件が頻繁に変更になる場合に、プログラムのソースコードおよびその改版を管理する版管理システムの機能を強化する用途として利用することができる。
【図面の簡単な説明】
【００７８】
【図１】本発明のプログラム変更内容通知システムの構成を示すブロック図である。
【図２】本発明のプログラム変更内容通知システムの動作を示すフローチャートである。
【図３】関数条件式を導出するための処理を示すフローチャートである。
【図４】修正前のソースコードの例を示す説明図である。
【図５】修正後のソースコードの例を示す説明図である。
【図６】図４の関数ｆｕｎｃ１から抽出した関数ソース先頭部を示す説明図である。
【図７】図５の関数ｆｕｎｃ１から抽出した関数ソース先頭部を示す説明図である。
【図８】図４の関数ｆｕｎｃ２から抽出した関数ソース先頭部を示す説明図である。
【図９】図５の関数ｆｕｎｃ２から抽出した関数ソース先頭部を示す説明図である。
【図１０】置換前の関数ｆｕｎｃ１の修正前関数条件式を示す説明図である。
【図１１】置換後の関数ｆｕｎｃ１の修正前関数条件式を示す説明図である。
【図１２】置換後の関数ｆｕｎｃ１の修正後関数条件式を示す説明図である。
【図１３】置換後の関数ｆｕｎｃ２の修正前関数条件式を示す説明図である。
【図１４】置換後の関数ｆｕｎｃ２の修正後関数条件式を示す説明図である。
【図１５】条件変化の状態テーブルを示す説明図である。
【図１６】すべての関数のソースコードの例を示す説明図である。
【図１７】電子メールの表示例を示す説明図である。
【符号の説明】
【００７９】
１  版管理システム
２  データ処理装置
２１  関数ソース取出手段
２２  条件式導出手段
２２１  関数ソース先頭部抽出手段
２２２  条件式抽出手段
２２３  条件式更新手段
２３  条件式比較手段
２４  利用関数検索手段
３  記憶装置
４  電子メール送信手段
【図１】
2008204067.tif 000003
【図２】
2008204067.tif 000004
【図３】
2008204067.tif 000005
【図４】
2008204067.tif 000006
【図５】
2008204067.tif 000007
【図６】
2008204067.tif 000008
【図７】
2008204067.tif 000009
【図８】
2008204067.tif 000010
【図９】
2008204067.tif 000011
【図１０】
2008204067.tif 000012
【図１１】
2008204067.tif 000013
【図１２】
2008204067.tif 000014
【図１３】
2008204067.tif 000015
【図１４】
2008204067.tif 000016
【図１５】
2008204067.tif 000017
【図１６】
2008204067.tif 000018
【図１７】
2008204067.tif 000019