(57)【要約】【課題】ソースコードの指定行の全変更履歴を検索し、関連する要件・バグレポートを出力することにより、複数回修正された行に対して、その変更以前の修正および関連する要件・バグレポートを追跡する。【解決手段】要件・バグレポート処理システムは、ソースコードの特定の行を指定する入力装置と、処理装置でプログラムを実行することで、入力装置から指定されたソースコードの過去のリビジョンから、行を変更した全てのリビジョンを行の変更前後の編集距離を基に検出する第１処理手段と、リビジョンに関連する要件・バグレポートを検出する第２処理手段と、第２処理手段によって処理された要件・バグレポートを出力表示する出力装置を有する。【選択図】図１
2011175446.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアのソースコードの指定行における変更に関連する要件・バグレポートを検索して出力装置に出力する要件・バグレポート処理システムであって、
ソースコードの特定の行を指定する入力装置と、
処理装置でプログラムを実行することで実現される、該入力装置から指定されたソースコードの過去のリビジョンから、行を変更した全てのリビジョンを行の変更前後の編集距離を基に検出する第１処理手段と、
処理装置でプログラムを実行することで実現される、該リビジョンに関連する要件・バグレポートを検出する第２処理手段と、
該第２処理手段によって処理された要件・バグレポートを可視的に出力する出力装置と
を有することを特徴とする要件・バグレポート処理システム。
【請求項２】
前記第１処理手段は、リビジョンの検出基準として行の変更前後の長さと編集距離を用いてリビジョンを検出することを特徴とする請求項１の要件・バグレポート処理システム。
【請求項３】
前記第２処理手段で検出された要件・バグレポートの一覧を表示器に表示するものであって、該第２処理手段は、該表示の際にコード変更の種類により、表示を変更することを特徴とする請求項１又は２の要件・バグレポート処理システム。
【請求項４】
前記第２処理手段は、要件・バグレポートの一覧を表示器に表示する際に、仕様変更かバグ修正かにより表示を変更することを特徴とする請求項３の要件・バグレポート処理システム。
【請求項５】
請求項１乃至３のいずれかの請求項に記載の要件・バグレポート処理システムであって、該入力装置から指定される、ソースコード名と２つのリビジョン番号に応じて、リビジョン間の差分情報を出力するソースコード構成管理システムと、
要件・バグレポートの管理番号、タイトル、機能追加のレポートか又はバグ修正のレポートかのいずれかを指定する種別に関する情報を少なくとも格納する要件・バグレポートＤＢを有し、
前記第２処理手段は、該入力装置から指定されたレビジョン番号と等しいビジョン番号におけるコミットメッセージを該ソースコード構成管理システムから取得し、
該コミットメッセージが有する要件・バグレポートの管理番号を基に、該要件・バグレポートＤＢから、該当する要件・バグレポートのタイトル、種別を取得し、
該出力装置は、該第２処理手段によって取得された、ある要件・バグレポートの、該リビジョン番号、管理番号、タイトルの一覧を出力して表示する
ことを特徴とする要件・バグレポート処理システム。
【請求項６】
処理装置でプログラムを実行することにより、ソフトウェアのソースコードの指定行における変更に関連する要件・バグレポートを検索して出力装置に出力して表示する処理方法であって、
該処理装置は、入力装置から指定されたソースコード名、リビジョン番号、２つの行の行番号を受け取るステップと、
該処理装置は、要件・バグレポートの管理番号を含むコミットメッセージを格納するＤＢから、該ソースコード名と２つのリビジョン番号に応じた、リビジョン間の差分情報を取得するステップと、
該処理装置は、該差分情報を解析して、要件・バグレポートの管理番号、タイトル、機能追加のレポートか又はバグ修正のレポートかのいずれかを指定する種別に関する情報を少なくとも格納する要件・バグレポートＤＢから、該当する要件・バグレポートのタイトル、種別を取得するステップと、
該出力装置は、取得された、ある要件・バグレポートの、該リビジョン番号、管理番号、タイトルの一覧を出力して表示するステップと
を有することを特徴とする要件・バグレポート処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、要件・バグレポート処理システム及びその方法に係り、特にソフトウェアのソースコードの指定行における変更に関連する要件・バグレポートを検索して表示するシステムに関するものである。
【背景技術】
【０００２】
従来、ソフトウェア開発において、要件・バグレポートの管理情報とソースコードの構成管理情報を関連付けることで、トレーサビリティの確保を実現している。例えば、要件・バグレポートの管理情報内に、関連するソースコード修正時の構成管理の履歴番号を登録する。また、作成・修正を行ったソースコードを構成管理システムへ登録する際に、関連する要件・バグレポートを示す管理番号情報をコミットメッセージに付記などすることで関連付けを行う。
【０００３】
これにより、要件・バグレポートから構成管理システム情報の履歴番号が追跡でき、そこから更にソースコード修正箇所の追跡ができる。また構成管理情報内のコミットメッセージからその関連する要件・バグレポートの管理番号を探すことができ、そこから修正理由となる要件・バグレポートの追跡が可能となる。
【０００４】
一般的に、要件・バグレポートからのソースコード修正箇所の追跡が行われている。例えば、特許文献１には、プログラム修正情報をプログラムソースとは別に登録・管理しておき、このプログラム修正情報の一覧を表示し、一覧からプログラム修正情報を指定することにより、該当のプログラムソース行に表示することを可能とするプログラム修正情報管理方法が開示されている。
【０００５】
ソースコードから要件・バグレポートを追跡可能なシステムとして、例えば、非特許文献１に開示されたような、ＴＦＳ (Team Foundation Server)が知られている。ＴＦＳはソースコードの各行について、その行が作成・修正された最後の変更セットと更新者、更新日時を提示する。変更セットとは、構成管理の特定の履歴番号の情報であるので、その履歴番号のコミットメッセージを探し、その内容から要件・バグレポートの管理番号を探し、ソースコードのある行が変更された理由となる要件・バグレポートを追跡することを可能としている。
【０００６】
しかし、その行が作成・修正された最後の変更セットを提示するだけであるので、複数回修正された行に対して、その変更セット以前の修正および関連する要件・バグレポートを追跡できないという問題がある。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０００−１１２７４３号公報
【非特許文献】
【０００８】
【非特許文献１】Visual Studio 2008 Team Foundation Server http://www.microsoft.com/japan/msdn/vstudio/2008/product/vsts/tfs.aspx
【非特許文献２】V.I. Levenshtein、「Binary codes capable of correcting deletions, insertions, and reversals」、1966年、Soviet Physics Doklady 10、pp．707−710
【発明の概要】
【発明が解決しようとする課題】
【０００９】
本発明は、ソースコードの指定行の全変更履歴を検索し、関連する要件・バグレポートを出力することにより、複数回修正された行に対して、その変更以前の修正および関連する要件・バグレポートを追跡できるようにするものである。
【課題を解決するための手段】
【００１０】
本発明に係る要件・バグレポート処理システムは、好ましくは、ソフトウェアのソースコードの指定行における変更に関連する要件・バグレポートを検索して出力装置に出力する要件・バグレポート処理システムであって、
ソースコードの特定の行を指定する入力装置と、処理装置でプログラムを実行することで実現される、該入力装置から指定されたソースコードの過去のリビジョンから、行を変更した全てのリビジョンを行の変更前後の編集距離を基に検出する第１処理手段と、処理装置でプログラムを実行することで実現される、該リビジョンに関連する要件・バグレポートを検出する第２処理手段と、該第２処理手段によって処理された要件・バグレポートを可視的に出力する出力装置とを有することを特徴とする要件・バグレポート処理システムとして構成される。
【００１１】
好ましい例によれば、前記第１処理手段は、リビジョンの検出基準として行の変更前後の長さと編集距離を用いてリビジョンを検出する。
また、好ましくは、前記第２処理手段で検出された要件・バグレポートの一覧を表示器に表示するものであって、該第２処理手段は、該表示の際にコード変更の種類により、表示を変更する。
また、好ましくは、前記第２処理手段は、要件・バグレポートの一覧を表示器に表示する際に、仕様変更かバグ修正かにより表示を変更する。
【００１２】
また、好ましくは、上記要件・バグレポート処理システムは、該入力装置から指定される、ソースコード名と２つのリビジョン番号に応じて、リビジョン間の差分情報を出力するソースコード構成管理システムと、要件・バグレポートの管理番号、タイトル、機能追加のレポートか又はバグ修正のレポートかのいずれかを指定する種別に関する情報を少なくとも格納する要件・バグレポートＤＢを更に有し、
前記第２処理手段は、該入力装置から指定されたレビジョン番号と等しいビジョン番号におけるコミットメッセージを該ソースコード構成管理システムから取得し、
該コミットメッセージが有する要件・バグレポートの管理番号を基に、該要件・バグレポートＤＢから、該当する要件・バグレポートのタイトル、種別を取得し、
該出力装置は、該第２処理手段によって取得された、ある要件・バグレポートの、該リビジョン番号、管理番号、タイトルの一覧を出力して表示する。
【００１３】
また、本発明に係る要件・バグレポート処理方法は、好ましくは、処理装置でプログラムを実行することにより、ソフトウェアのソースコードの指定行における変更に関連する要件・バグレポートを検索して出力装置に出力する処理方法であって、
該処理装置は、入力装置から指定されたソースコード名、リビジョン番号、２つの行の行番号を受け取るステップと、
該処理装置は、要件・バグレポートの管理番号を含むコミットメッセージを格納するＤＢから、該ソースコード名と２つのリビジョン番号に応じた、リビジョン間の差分情報を取得するステップと、
該処理装置は、該差分情報を解析して、要件・バグレポートの管理番号、タイトル、機能追加のレポートか又はバグ修正のレポートかのいずれかを指定する種別に関する情報を少なくとも格納する要件・バグレポートＤＢから、該当する要件・バグレポートのタイトル、種別を取得するステップと、
該出力装置は、取得された、ある要件・バグレポートの、該リビジョン番号、管理番号、タイトルの一覧を出力して表示するステップと
を有することを特徴とする要件・バグレポート処理方法として構成される。
【発明の効果】
【００１４】
本発明によれば、ソースコードの指定行について全変更履歴を検索して、該当するリビジョンのコミットメッセージ内に記述された関連する要件・バグレポートの管理番号情報から、指定行の作成・修正に関連する要件・バグレポートを出力することができる。これにより、複数回修正された行に対して、その変更以前の修正および関連する要件・バグレポートを追跡することができる。
【図面の簡単な説明】
【００１５】
【図１】一実施例による要件・バグレポート表示システムの構成図。
【図２】差分情報の例を示す図。
【図３】コミットメッセージの例を示す図。
【図４】要件・バグレポートＤＢの構成例を示す図。
【図５】テーブルＤの例を示す図。
【図６】テーブルＸの例を示す図。
【図７】テーブルＹの例を示す図。
【図８】テーブルＡの例を示す図。
【図９】テーブルＢの例を示す図。
【図１０】テーブルＣの例を示す図。
【図１１】テーブルＲの例を示す図。
【図１２】テーブルＳの例を示す図。
【図１３】テーブルＴの例を示す図。
【図１４】テーブルＰの例を示す図。
【図１５】テーブルＱの例を示す図。
【図１６】テーブルＧの例を示す図。
【図１７】要件・バグレポート検出機能１０２による処理フローを示す図。
【図１８】差分情報を解析してテーブルＡ、Ｂ、Ｃに格納する処理（１７０８）のフローを示す図。
【図１９】指定行を含む差分ブロックのＩＤを取得する処理（１７１１）のフローを示す図。
【図２０】指定行のコードを取得する処理（１７１３）のフローを示す図。
【図２１】指定行のコードに対応する変更前リビジョンにおけるコードの行番号を取得する処理（１７１５）のフローを示す図。
【図２２】指定行の行番号に対応する変更後リビジョンの行番号を取得する処理（１７１９）のフローを示す図。
【図２３】リビジョンに関連する要件・バグレポートを検出して表示する処理（１７２４）のフローを示す図。
【図２４】リビジョンのコミットメッセージに付記された要件・バグレポートの管理番号を取得する処理のフローを示す図。
【図２５】指定行のコードに対応する変更前リビジョンにおけるコードの行番号を変更前後のコードの長さの平均値と編集距離を用いて取得する処理のフローを示す図。
【図２６】要件・バグレポートを検出しソースコードの変更種別によって分類して表示する処理のフローを示す図。
【図２７】指定行のコードに対応する変更前リビジョンにおけるコードの行番号と変更種別を取得する処理（２６１４）のフローを示す図。
【図２８】コード行を分割して変更種別を解析する処理（２７０６）のフローを示す図。
【図２９】各変更種別をもとに変更種別を決定する処理（２７１６）のフローを示す図。
【図３０】リビジョンに関連する要件・バグレポートを検出しソースコードの変更種別によって分類して表示する処理（２６２３）のフローを示す図。
【図３１】変更種別によって要件・バグレポートを分類して表示する処理（３０１６）のフローを示す図。
【図３２】リビジョンに関連する要件・バグレポートを検出しその種別によって分類して表示する処理のフローを示す図。
【図３３】要件・バグレポートの種別によって要件・バグレポートを分類して表示する処理（３２１６）のフローを示す図。
【図３４】テーブルＫの例を示す図。
【図３５】テーブルＥの例を示す図。
【図３６】テーブルＦの例を示す図。
【図３７】テーブルＨの例を示す図。
【図３８】テーブルＩの例を示す図。
【図３９】テーブルＪの例を示す図。
【図４０】テーブルＬの例を示す図。
【図４１】テーブルＭの例を示す図。
【図４２】テーブルＵの例を示す図。
【図４３】テーブルＶの例を示す図。
【図４４】検出した要件・バグレポート一覧の表示例を示す図。
【図４５】検出した要件・バグレポートをソースコードの変更種別ごとに分類した一覧の表示例を示す図。
【図４６】検出した要件・バグレポートをその種別ごとに分類した一覧の表示例を示す図。
【図４７】テーブルＷの例を示す図。
【発明を実施するための形態】
【００１６】
以下、図面を参照して、本発明の実施形態について説明する。
図１は、一実施例による要件・バグレポート表示システムの構成を示す。このシステムは、ハードウェアとして、サーバ装置１０１と、入力器を持つ入力装置１０６と、表示器を持つ出力装置１０７を有して構成される。
サーバ装置１０１は、ユーザが指定したソースコード名・リビジョン番号・行番号セットから関連する要件・バグレポート検出機能１０２と、ソースコード構成管理システム１０４と、要件・バグレポートの管理情報が格納された要件・バグレポートＤＢ１０５を有する。入力装置１０６は、ユーザによりソースコード名、リビジョン番号、行番号セットが指定される。出力装置１０７は、要件・バグレポート検出機能１０２が検出した要件・バグレポートを表示する。なお、図示していないが、サーバ装置１０１は処理装置（プロセッサ）及びメモリ、ＨＤＤ（ハードディスク装置）等の外部記憶装置を備え、処理装置で所定のプログラムを実行することにより、上記要件・バグレポートの検出機能１０２や構成管理システム１０４を実現し、かつ後述するフローチャートに示す処理動作を行う。
【００１７】
ソースコード構成管理システム１０４と、要件・バグレポート検出機能１０２はそれぞれ別のプログラムで実現される機能であり、従来から使用されているソースコード構成管理システム１０４で収集された構成管理情報を、本発明に特徴的な要件・バグレポート検出機能１０２が利用して、特徴的な処理を実行することで効果を発揮するものである。
【００１８】
ソースコード構成管理システム１０４は、構成管理情報を格納する構成管理情報ＤＢ（リポジトリということがある）１０３を持ち、要件・バグレポート検出機能１０２からの問い合わせに対して構成管理情報を返す。例えば、構成管理システム１０４としては、ＳｕｂｖｅｒｉｏｎというＯＳＳ（Ｏｐｅｎ Ｓｏｕｒｃｅ Ｓｏｆｔｗａｒｅ）がある。ソースコード構成管理システム１０４はソースコード名と２つのリビジョン番号を指定することにより、リビジョン間の差分情報を出力する機能を持つ。差分情報の構成例を図２に示す。また、ソースコード名とリビジョン番号を指定することにより、コミットメッセージを出力する機能を持つ。コミットメッセージの構成例を図３に示す。
【００１９】
図２を参照するに、差分情報２０１は、ファイルについて２つのリビジョン間で何行目に変更があるかを示す行番号の行、変更前のリビジョンにおけるコードの内容を示す行、変更後のリビジョンにおけるコードの内容を示す行、その他の行からなる。より詳しく言えば、行番号の行は数字（図示では、１，１０ｃ１）から始まる。変更前のリビジョンにおけるコードの内容を示す行は、＜記号から始まる。変更後のリビジョンにおけるコードの内容を示す行は、＞記号から始まる。その他の行は、数字、＜記号、＞記号以外の文字から始まる。行番号を示す行、変更前コードの内容を示す行、変更後コードの内容を示す行を１つのブロックとして、１つの差分情報を示す。行番号の行から次の行番号の行までか、次の行番号の行がない場合は最終行までを差分ブロック２０２とする。
【００２０】
図示の例で、< function startTest() {  から<                     })();  までの１０行は変更前のリビジョンにおける1ブロックを示し、> function startTest (filename, rev, linenums) {
は、変更後のリビジョンにおける1ブロックを示す。また、行番号13c4の、<     while (rev > 1) {  は変更前のリビジョンにおける1ブロックを示し、>     for (; rev > 1; rev--) {  は変更後のリビジョンにおける1ブロックを示す。
【００２１】
図３のコミットメッセージの例を参照する。コミットメッセージ３０１は、ソースコードを構成管理情報ＤＢ１０３に格納する度に作成されるメモであり、それぞれ１行で表される。コミットメッセージ３０１は、先頭にあるコミットについての説明、その後ろにある区切り記号＃、続いて関連する要件・バグレポートの管理番号、をコンマ区切りで列挙する。区切り記号＃が存在しない場合、そのコミットメッセージには関連する要件・バグレポートの管理番号は存在しない。ここで、要件・バグレポートは、ソースコード構成管理システム１０４のプログラムの実行により、ソースコードを修正した後のテスト実行時にバグが検出される度に、作成される。その時に、図４に示すような、管理番号やタイトル等を含む要件・バグレポートのエントリが作成される。
【００２２】
図４は、要件・バグレポートＤＢの構成例を示す。
要件・バグレポートの各エントリは、管理番号401、タイトル４０２、機能追加のレポートか又はバグ修正のレポートかのいずれかを指定する種別４０３、及びその他の情報として、登録者、担当者等の情報から構成される。
【００２３】
次に、図５〜図１６を参照して、要件・バグレポートの作成、表示の処理中に使用されるテーブルの構成について説明する。これらのテーブルは、処理の途中に一時的に作成されるものもあり、各テーブルはサーバ装置１０１のメモリに保持される。
図５は、差分情報２０１を格納するテーブルＤを示す。テーブルＤは、差分情報列５０１を持ち、差分情報列の各行には差分情報２０１が１行ずつ格納される。
図６は、行番号を格納するテーブルＸを示す。テーブルＸは行番号列６０１を持ち、行番号列の各行には、入力装置１０６から指定された行番号が１つずつ格納される。
図７は、行番号を一時的に格納するテーブルＹを示す。テーブルＹは処理中に使用されるものであり、行番号列７０１の各行には行番号が１つずつ格納される。
【００２４】
図８はテーブルＡを示す。テーブルＡは、テーブルＤに格納された情報を基に差分ブロック２０２の開始と終了の行番号を格納する。各エントリは、ＩＤ列８０１、変更前開始行番号列８０２、変更前終了行番号列８０３、変更後開始行番号列８０４、変更後終了行番号列８０５、等の情報から構成される。ＩＤ列の各行には差分ブロック２０２を識別するために重複のない数値が格納される。変更前開始行番号列、変更前終了行番号列、変更後開始行番号列、変更後終了行番号列の各行には数値が格納される。
【００２５】
図９はテーブルＢを示す。テーブルＢは、テーブルＤに格納された情報を基に差分ブロック２０２ごとに変更前（即ちテーブルＤの＜記号）のソースコードのみを選択して格納する。テーブルＢはＩＤ列９０１、変更前コード列９０２を持つ。ＩＤ列の各行にはテーブルＡのＩＤ列８０１に格納された数値と対応する数値が格納され、変更前のソースコードが含まれる差分ブロック２０２を識別可能とする。変更前コード列の各行には差分ブロック２０２の＜記号で始まる行の３文字目以降が格納される。
【００２６】
図１０に示す、テーブルＣは、テーブルＤに格納された情報を基に差分ブロック２０２ごとに変更後（即ちテーブルＤの＞記号）のソースコードのみを選択して格納する。テーブルＣはＩＤ列１００１、変更後コード列１００２を持つ。ＩＤ列の各行にはテーブルＡのＩＤ列８０１に格納された数値と対応する数値が格納され、変更後のソースコードが含まれる差分ブロック２０２を識別可能とする。変更後コード列の各行には差分ブロック２０２の＞記号で始まる行の３文字目以降が格納される。
【００２７】
図１１は、リビジョン番号を格納するテーブルＲを示す。テーブルＲは、差分のあるレビジョンのみを集めたテーブルであり、リビジョン番号列１１０１の各行には、レビジョン番号の新しい順から遡ってリビジョン番号が１つずつ格納される。
【００２８】
図１２は、差分ブロック２０２における変更前の各行のソースコードと変更後の指定行番号のソースコードとの編集距離を格納するテーブルＳを示す。テーブルＳはＩｎｄｅｘ列１２０１、編集距離列１２０２を持つ。Ｉｎｄｅｘ列の各行には変更前のソースコードの何行目についての編集距離であるかを示す数値が格納される。なお、編集距離列の各行に格納される編集距離の概念は、非特許文献２（V.I. Levenshtein、「Binary codes capable of correcting deletions, insertions, and reversals」、1966年、Soviet Physics Doklady 10、pp．707−710）に記載されており、２つの文字列がどの程度異なっているかを表す数値である。一方の文字列からもう一方の文字列に変換するために必要な、文字の挿入・削除・置換の最小回数により表される。
【００２９】
図１３は、テーブルＳの編集距離列１２０２の値が最小の行を格納するテーブルＴを示す。テーブルＴはＩｎｄｅｘ列１３０１を持つ。
図１４は、要件・バグレポートの管理番号を格納するテーブルＰを示す。テーブルＰは管理番号列１４０１を持ち、管理番号列の各行には要件・バグレポートの管理番号が１つずつ格納される。
【００３０】
図１５は、要件・バグレポートの管理番号を一時的に格納するテーブルＱを示す。テーブルＰは管理番号列１５０１を持ち、管理番号列の各行には要件・バグレポートの管理番号が１つずつ格納される。
【００３１】
図１６は、リビジョン番号と関連する要件・バグレポートの情報を格納するテーブルＧを示す。テーブルＧはリビジョン番号列１６０１、管理番号列１６０２、タイトル列１６０３を持つ。リビジョン番号列の各行にはリビジョン番号が１つずつ格納される。管理番号列の各行には要件・バグレポートの管理番号が１つずつ格納される。タイトル列の各行には要件・バグレポートのタイトルが格納される。
【００３２】
次に、図１７を参照して、要件・バグレポート検出機能１０２による、指定されたソースコード名、リビジョン番号、行番号セットから、関連する要件・バグレポートを表示する処理フローについて説明する。
まず、ユーザにより入力装置１０６から指定されたソースコード名を受け取り、変数Ｓｒｃに格納する（１７０１）。同様に、ユーザにより指定されたリビジョン番号を受け取り、変数Ｒｅｖに格納する（１７０２）。また、ユーザにより指定された行番号セットを受け取り、テーブルＸに格納する（１７０４）。次に、Ｒｅｖの値が１より大きいかを確認する（１７０５）。確認の結果、１よりも大きい場合（１７０６）、リポジトリ１０３から、Ｓｒｃを対象に、ＲｅｖとＲｅｖ−１との間の差分情報を取得し、テーブルＤに格納する（１７０７）。差分情報を解析し、解析結果をブロックに分割して、テーブルＡ、テーブルＢ、テーブルＣに格納する（１７０８）。テーブルＸから行番号を１つ取り出し、変数Ｎに格納する（１７０９）。Ｎに値が格納されている場合（１７１０）、Ｎが含まれる差分ブロックのＩＤをテーブルＡから取得し変数ＩＤＮに格納する（１７１１）。ＩＤＮに値が格納されている場合（１７１２）、ＩＤＮとＮをもとに、テーブルＣからＮ行目のコードを取得し、変数Ｃｏｄｅに格納する（１７１３）。Ｃｏｄｅに値が格納されている場合（１７１４）、テーブルＢからＲｅｖ−１においてＣｏｄｅに対応するコードの全ての行の行番号を取得し、テーブルＹに格納する（１７１５）。
【００３３】
続いて、テーブルＲにＲｅｖ−１を格納し、テーブルＸの次の１行に進む（１７１６）。テーブルＣからＮ行目のコードを取得し、変数Ｃｏｄｅに格納した後に、Ｃｏｄｅに値が格納されていない場合（１７１７）、テーブルＸの次の１行に進む。Ｎが含まれる差分ブロックのＩＤをテーブルＡから取得し変数ＩＤＮに格納した後に、ＩＤＮに値が格納されていない場合（１７１８）、テーブルＢからＲｅｖ−１においてＲｅｖのＮ行目に対応する行の行番号を取得し、テーブルＹに格納し（１７１９）、テーブルＸの次の１行に進む。Ｎの値が存在しない場合（１７２０）、テーブルＹから全ての行番号を取り出し、テーブルＸに格納する（１７２１）。その後、Ｒｅｖの値をＲｅｖ−１に変更し（１７２２）、次の差分情報の解析に進む。
上記Ｒｅｖの値の確認の結果、Ｒｅｖの値が１以下であった場合（１７２３）、テーブルＲに格納されたリビジョン番号をもとに、要件・バグレポートを出力装置１０７に出力して表示器に表示する（１７２４）。
【００３４】
次に、図１８を参照して、差分情報を解析してブロックに分割しテーブルＡ、Ｂ、Ｃに格納する処理（１７０８）について詳細に説明する。
まず、ブロックを識別するためのＩＤを初期化する（１８０１）。差分情報をテーブルＤに格納する（１８０２）。次にテーブルＤから１行読み込み、変数Ｌｉｎｅに格納する（１８０３）。Ｌｉｎｅに値が格納されているかを確認し、Ｌｉｎｅに値が格納されている場合には（１８０４）、Ｌｉｎｅの１文字目の種類を確認する（１８２９）。その結果、数字であった場合（１８０５）、ＩＤを更新する（１８０６）。次に、Ｌｉｎｅ内に含まれるａかｃかｄのいずれか１文字より前の部分を取り出し、変数Ｓｔｒに格納する（１８０７）。
【００３５】
次に、Ｓｔｒにコンマが含まれるかを確認し（１８０８）、含まれる場合には（１８０９）コンマの前後をそれぞれ変数ＰｒｅＳと変数ＰｒｅＥに格納する（１８１０）。一方、含まれない場合には（１８１１）Ｓｔｒの値を変数ＰｒｅＳと変数ＰｒｅＥに格納する（１８１２）。次に、Ｌｉｎｅ内に含まれるａかｃかｄのいずれか１文字より後の部分を取り出し、変数Ｓｔｒに格納する（１８１３）。Ｓｔｒにコンマが含まれるかを確認し（１８１４）、含まれる場合には（１８１５）コンマの前後をそれぞれ変数ＣｕｒＳと変数ＣｕｒＥに格納する（１８１６）。一方、含まれない場合には（１８１７）Ｓｔｒの値を変数ＣｕｒＳと変数ＣｕｒＥに格納する（１８１９）。ＩＤおよび、ＰｒｅＳを変更前開始行として、ＰｒｅＥを変更前終了行として、ＣｕｒＳを変更後開始行として、ＣｕｒＥを変更後終了行として、テーブルＡに格納し（１８２０）、テーブルＤの次の１行に進む。
【００３６】
テーブルＤから１行読み込み、変数Ｌｉｎｅに格納した後に、Ｌｉｎｅの１文字目を確認して、＞記号であった場合には（１８２４）、Ｌｉｎｅの３文字目以降を変数ＬＣに格納する（１８２５）。ＩＤおよび、変更後コードとしてＬＣをテーブルＣに格納し（１８２６）、テーブルＤの次の１行に進む。テーブルＤから１行読み込み、変数Ｌｉｎｅに格納した後に、Ｌｉｎｅの１文字目を確認して、＜記号であった場合には（１８２１）、Ｌｉｎｅの３文字目以降を変数ＬＢに格納する（１８２２）。そして、ＩＤおよび、変更前コードとしてＬＢをテーブルＢに格納し（１８２３）、テーブルＤの次の１行に進む。
テーブルＤから１行読み込み、変数Ｌｉｎｅに格納した後に、Ｌｉｎｅの１文字目を確認してその他の文字であった場合（１８２７）、テーブルＤの次の１行に進む。テーブルＤから１行読み込み、変数Ｌｉｎｅに格納した後に、Ｌｉｎｅに値が格納されていない場合（１８２８）、処理を終了する。
【００３７】
図１９は、ＲｅｖのＮ行目が含まれる差分ブロックのＩＤを取得して変数ＩＤＮへ格納する処理１７１１の詳細を示す。まず、テーブルＡから１行読み込む（１９０１）。読み込める場合（１９０２）、Ｎの値が変更後開始行番号列の値以上かつ変更後終了行番号列の値以下の範囲に含まれるかを確認する（１９０３）。含まれる場合（１９０４）、ＩＤ列の値をＩＤＮ変数とし（１９０５）、処理を終了する。含まない場合（１９０６）、テーブルＡの次の１行に進む。テーブルＡから行を読み込めない場合（１９０７）、処理を終了する。
【００３８】
図２０は、ＲｅｖのＮ行目のコードを取得してＣｏｄｅへ格納する処理（１７１３）の詳細を示す。
まず、テーブルＡからＩＤ列の値がＩＤＮの値と等しい行を読み込み（２００１）、この行の変更後開始行番号列の値をＮの値から引いた結果を変数Ｍに格納する（２００２）。次に、テーブルＣから１行読み込む（２００３）。読み込める場合（２００４）、ＩＤ列の値がＩＤＮの値と等しいかを確認する（２００５）。等しい場合（２００６）、Ｍの値が０であるかを確認する（２００７）。その結果、０である場合（２００８）、コード列の値を変数Ｃｏｄｅに格納し（２００９）、処理を終了する。
一方、０でない場合（２０１０）、Ｍの値をＭ−１に変更し（２０１１）、テーブルＣの次の１行に進む。ＩＤ列の値がＩＤＮの値と等しくない場合（２０１２）、テーブルＣの次の1行に進む。テーブルＣから行を読み込めない場合（２０１３）、処理を終了する。
【００３９】
図２１は、Ｒｅｖ−１においてＲｅｖのＮ行目のＣｏｄｅに対応する全てのコードの行番号を取得してテーブルＹに格納する処理（１７１５）の詳細を示す。
まず、変数Ｉｎｄｅｘの値を０に初期化する（２１０１）。テーブルＢから１行読み込む処理において（２１０２）、１行を読み込める場合（２１０３）、ＩＤ列の値がＩＤＮの値と等しいかを確認する（２１０４）。その結果、等しい場合（２１０５）、変更前コードとＣｏｄｅの値との編集距離を計算し（２１０６）、Ｉｎｄｅｘと編集距離をテーブルＳに格納する（２１０７）。次に、Ｉｎｄｅｘの値をＩｎｄｅｘ＋１に変更し（２１０８）、テーブルＢの次の1行に進む。一方、ＩＤ列の値がＩＤＮの値と等しくない場合（２１０９）、テーブルＢの次の１行に進む。
【００４０】
テーブルＢから１行を読み込めない場合（２１１０）、テーブルＳに格納されている行の中から編集距離が最小の行を全て取得し（２１１１）、編集距離が一定以下であるかを確認する（２１１２）。その結果一定以下である場合（２１１３）、取得した行のＩｎｄｅｘ列をテーブルＴに格納する（２１１４）。その後、テーブルＴから１行読み込む処理において（２１１５）、１行を読み込める場合（２１１６）、変数Ｃｏｕｎｔの値を０に初期化する（２１１７）。次に、テーブルＡから１行読み込み（２１１８）、ＩＤ列の値がＩＤＮの値と等しいかを確認する（２１１９）。その結果等しい場合（２１２０）、テーブルＴから読み込んだ行のＩｎｄｅｘ列の値とＣｏｕｎｔの値が等しいことを確認する（２１２８）。
【００４１】
その結果、読み込んだ行のＩｎｄｅｘ列の値とＣｏｕｎｔの値が等しい場合（２１２１）、Ｉｎｄｅｘ列の値にテーブルＡの変更前開始番号列の値を加えた結果をテーブルＹに格納し（２１２２）、テーブルＴの次の１行に進む。Ｉｎｄｅｘ列の値とＣｏｕｎｔの値が等しくない場合（２１２３）、Ｃｏｕｎｔの値をＣｏｕｎｔ＋１に変更し（２１２４）、テーブルＡの次の１行に進む。ＩＤ列の値がＩＤＮの値と等しくない場合（２１２５）、テーブルＡの次の１行に進む。テーブルＴから行を読み込めない場合（２１２６）、処理を終了する。テーブルＳに格納されている行の中から編集距離が最小の行を全て取得し、編集距離が一定より大きい場合（２１２７）、処理を終了する。
【００４２】
図２２は、Ｒｅｖ−１においてＲｅｖのＮ行目に対応する行番号を取得してテーブルＹに格納する処理（１７１９）の詳細を示す。
まず、テーブルＡから１行読み込む（２２０１）。読み込めた場合（２２０２）、Ｎの値が変更後開始行番号列の値より小さいかを確認する（２２０３）。確認の結果、小さい場合（２２０４）、変更後開始行番号列の値からＮの値を引き、さらにその結果を変更後開始行番号列の値から引いた結果をテーブルＹに格納し、処理を終了する（２２０５）。Ｎの値が変更後開始行番号列の値以上の場合（２２０６）、ＩＤ列の値を変数ＩＤＰに格納し（２２０７）、テーブルＡの次の１行に進む。
【００４３】
一方、テーブルＡから行を読み込めない場合（２２０８）、テーブルＡからＩＤ列の値がＩＤＰの値と等しい行を読み込む（２２０９）。読み込めた場合（２２１０）、Ｎの値から変更後終了行番号列の値を引き、さらにその結果を変更前終了行番号列の値に加えた結果をテーブルＹに格納し（２２１１）、処理を終了する。テーブルＡからＩＤ列の値がＩＤＰの値と等しい行を読み込めない場合（２２１２）、処理を終了する。
【００４４】
図２３は、要件・バグレポートＤＢから関連する要件・バグレポートを取得して表示する処理（１７２４）の詳細を示す。
まず、テーブルＹから１行読み込む（２３０１）。読み込めた場合（２３０２）、リビジョン番号列の値を変数Ｒｅｖに格納する（２３０３）。次に、リポジトリからＲｅｖの値と等しいリビジョン番号におけるコミットメッセージを取得し、変数Ｍｓｇに格納する（２３０４）。Ｍｓｇから要件・バグレポートの管理番号を取得し、テーブルＰに格納する（２３０５）。テーブルＰから１行読み込み、管理番号列の値を変数Ｎに格納する（２３０６）。Ｎに値が格納されている場合（２３０７）、要件・バグレポートＤＢからＮの値と等しい管理番号の要件・バグレポートのタイトルを取得し、変数Ｔｉｔｌｅに格納する（２３０８）。Ｔｉｔｌｅに値が格納されている場合（２３０９）、リビジョン番号としてＲｅｖ、管理番号としてＮ、タイトルとしてＴｉｔｌｅをテーブルＧに格納し（２３１０）、テーブルＰの次の１行に進む。一方、Ｔｉｔｌｅに値が格納されていない場合（２３１１）、テーブルＰの次の１行に進む。テーブルＰから行を読み込めない場合（２３１２）、テーブルＹの次の１行に進む。
【００４５】
テーブルＹから行を読み込めない場合（２３２０）、テーブルＧにデータが格納されているかを確認する（２３１３）。確認の結果、データが格納されている場合（２３１４）、テーブルＧに格納されているリビジョン番号、管理番号、タイトルの一覧を出力装置の表示器に表示する（２３１５）。リビジョン番号、管理番号、タイトルの一覧の表示例を図４４に示す。管理番号を入力装置から取得し、変数Ｎに格納する（２３１６）。続いて、要件・バグレポートＤＢからＮの値に等しい管理番号の要件・バグレポートを表示する（２３１７）。テーブルＧにデータが格納されていない場合（２３１８）、指定行の変更に関連する要件・バグレポートはないことを表示する（２３１９）。
【００４６】
図２４は、コミットメッセージに記載された要件・バグレポートの管理番号を取得する処理（２３０５）を示す。
まず、Ｍｓｇの値に＃記号が含まれるかを確認する（２４０１）。その結果、含まれる場合（２４０２）、Ｍｓｇの値から＃記号より後の部分を取得し、変数Ｓｔｒに格納する（２４０３）。次に、Ｓｔｒの値にコンマが含まれるかを確認し（２４０４）、その結果、コンマが含まれる場合（２４０５）、Ｓｔｒの値をコンマで分割し、テーブルＱに格納する（２４０６）。コンマが含まれない場合（２４１１）、Ｓｔｒの値をテーブルＱに格納する（２４１２）。その後、テーブルＱに格納されているデータが全て数字であるかを確認し（２４０７）、その結果、全て数字である場合（２４０８）、テーブルＱから全データを取り出してテーブルＰに格納する（２４０９）。一方、数字でないデータがあった場合（２４１０）、処理を終了する。上記Ｍｓｇに＃記号が含まれない場合（２４１３）、処理を終了する。
【００４７】
図２５は、図２１の処理の代案例を示す。
Ｒｅｖ−１においてＣｏｄｅに対応する全行番号を取得しテーブルＹに格納する処理（１７１５）の処理内容として、図２１の処理は編集距離のみを用いる例であるが、図２５の例は、変更前後のコードの長さと編集距離を用いる例である。
【００４８】
まず、変数Ｉｎｄｅｘの値を０に初期化する（２５０１）。テーブルＢから１行読み込む（２５０２）。読み込める場合（２５０３）、ＩＤ列の値がＩＤＮの値と等しいかを確認する（２５０４）。その結果等しい場合（２５０５）、変更前コードとＣｏｄｅの値との編集距離を計算し、変更前コードの長さとＣｏｄｅの値の長さとの平均値で編集距離を割った値を変数Ｒａｔｅに格納する（２５０６）。ＩｎｄｅｘとＲａｔｅをテーブルＥに格納する（２５０７）。次に、Ｉｎｄｅｘの値をＩｎｄｅｘ＋１に変更し（２５０８）、テーブルＢの次の1行に進む。ＩＤ列の値がＩＤＮの値と等しくない場合（２５０９）、テーブルＢの次の１行に進む。
【００４９】
テーブルＢから行を読み込めない場合（２５１０）、テーブルＥに格納されている行の中からＲａｔｅが最小の行を全て取得し（２５１１）、Ｒａｔｅが一定以下であるかを確認する（２５１２）。一定以下である場合（２５１３）、取得した行のＩｎｄｅｘ列をテーブルＴに格納する（２５１４）。テーブルＴから１行読み込む（２５１５）。テーブルＴから１行を読み込める場合（２５１６）、変数Ｃｏｕｎｔの値を０に初期化する（２５１７）。次に、テーブルＡから１行読み込み（２５１８）、ＩＤ列の値がＩＤＮの値と等しいかを確認する（２５１９）。確認の結果、両者が等しい場合（２５２０）、テーブルＴから読み込んだ行のＩｎｄｅｘ列の値とＣｏｕｎｔの値が等しいことを確認する（２５２１）。確認の結果、両者が等しい場合（２５２２）、Ｉｎｄｅｘ列の値にテーブルＡの変更前開始番号列の値を加えた結果をテーブルＹに格納し（２５２３）、テーブルＴの次の１行に進む。
【００５０】
Ｉｎｄｅｘ列の値とＣｏｕｎｔの値が等しくない場合（２５２４）、Ｃｏｕｎｔの値をＣｏｕｎｔ＋１に変更し（２５２５）、テーブルＡの次の１行に進む。ＩＤ列の値がＩＤＮの値と等しくない場合（２５２６）、テーブルＡの次の１行に進む。テーブルＴから行を読み込めない場合（２５２７）、処理を終了する。テーブルＥに格納されている行の中からＲａｔｅが最小の行を全て取得し、編集距離が一定より大きい場合（２５２８）、処理を終了する。
【００５１】
図２６は、図２３の処理の代案例（代案例１）を示す。
指定されたソースコード名、リビジョン番号、行番号セットから、関連する要件・バグレポートを表示する処理フローにおいて、検出した要件・バグレポートの一覧を表示する際に、コード変更の種類により表示を変更する一実施例である。
【００５２】
まず、ユーザにより入力装置１０６から指定されたソースコード名を受け取り、変数Ｓｒｃに格納する（２６０１）。同様に、ユーザにより指定されたリビジョン番号を受け取り、変数Ｒｅｖに格納する（２６０２）。また、ユーザにより指定された行番号セットを受け取り、テーブルＸに格納する（２６０３）。次に、Ｒｅｖの値が１より大きいかを確認する（２６０４）。確認の結果、１よりも大きい場合（２６０５）、リポジトリ１０３から、Ｓｒｃを対象に、ＲｅｖとＲｅｖ−１との間の差分情報を取得し、テーブルＤに格納する（２６０６）。そして差分情報を解析し、解析結果をテーブルＡ、Ｂ、Ｃに格納する（２６０７）。
【００５３】
その後、テーブルＸから行番号を１つ取り出し、変数Ｎに格納する（２６０８）。Ｎに値が格納されている場合（２６０９）、Ｎが含まれる差分ブロックのＩＤをテーブルＡから取得し変数ＩＤＮに格納する（２６１０）。ＩＤＮに値が格納されている場合（２６１１）、ＩＤＮとＮを基に、テーブルＣからＮ行目のコードを取得し、変数Ｃｏｄｅに格納する（２６１２）。Ｃｏｄｅに値が格納されている場合（２６１３）、テーブルＢからＲｅｖ−１においてＣｏｄｅに対応するコードの全ての行の行番号と変更種別を取得し、行番号をテーブルＹに、変更種別を変数Ｍｏｄｉｆｉｅｄに格納する（２６１４）。続いて、テーブルＦにＲｅｖ−１とＭｏｄｉｆｉｅｄの値を格納し（２６１５）、テーブルＸの次の１行に進む。テーブルＣからＮ行目のコードを取得し、変数Ｃｏｄｅに格納した後に、Ｃｏｄｅに値が格納されていない場合（２６１６）、テーブルＸの次の１行に進む。テーブルＦを図３６に示す。
【００５４】
Ｎが含まれる差分ブロックのＩＤをテーブルＡから取得し変数ＩＤＮに格納した後に、ＩＤＮに値が格納されていない場合（２６１７）、テーブルＢからＲｅｖ−１においてＲｅｖのＮ行目に対応する行の行番号を取得し、テーブルＹに格納し（２６１８）、テーブルＸの次の１行に進む。Ｎの値が存在しない場合（２６１９）、テーブルＹから全ての行番号を取り出し、テーブルＸに格納する（２６２０）。その後、Ｒｅｖの値をＲｅｖ−１に変更し（２６２１）、次の差分情報の解析に進む。Ｒｅｖの値が１以下であった場合（２６２２）、テーブルＲに格納されたリビジョン番号をもとに、要件・バグレポートを表示器に表示する（２６２３）。
【００５５】
図２７は、図２６の処理例における、Ｒｅｖ−１においてＣｏｄｅに対応する全行番号を取得しテーブルＹに格納、および変更種別を変数Ｍｏｄｉｆｉｅｄに格納する処理（２６１４）の詳細を示す。
まず、変数Ｉｎｄｅｘの値を０に初期化する（２７０１）。テーブルＢから１行読み込む（２７０２）。１行を読み込める場合（２７０３）、ＩＤ列の値がＩＤＮの値と等しいかを確認する（２７０４）。確認の結果、等しい場合（２７０５）、コード列の値からＣｏｄｅの値への変更種別を解析し、変数ＭＴｙｐｅに格納する（２７０６）。続いて、コード列の値とＣｏｄｅの値との編集距離を計算し（２７０７）、Ｉｎｄｅｘ、編集距離、ＭＴｙｐｅをテーブルＨに格納する（２７０８）。テーブルＨを図３７に示す。
【００５６】
次に、Ｉｎｄｅｘの値をＩｎｄｅｘ＋１に変更し（２７０９）、テーブルＢの次の1行に進む。ＩＤ列の値がＩＤＮの値と等しくない場合（２７１０）、テーブルＢの次の１行に進む。テーブルＢから行を読み込めない場合（２７１１）、テーブルＨに格納されている行の中から編集距離が最小の行を全て取得し（２７１２）、編集距離が一定以下であるかを確認する（２７１３）。確認の結果、一定以下である場合（２７１４）、取得した行のＩｎｄｅｘ列と変更種別列をテーブルＩに格納する（２７１５）。テーブルＩを図３８に示す。
【００５７】
次に、テーブルＩの各行の変更種別列をもとに変更種別を決定し、変数Ｍｏｄｉｆｉｅｄに格納する（２７１６）。テーブルＩから１行読み込む（２７１７）。１行を読み込める場合（２７１８）、変数Ｃｏｕｎｔの値を０に初期化する（２７１９）。次に、テーブルＡから１行読み込み（２７２０）、ＩＤ列の値がＩＤＮの値と等しいかを確認する（２７２１）。確認の結果、両者が等しい場合（２７２２）、テーブルＩから読み込んだ行のＩｎｄｅｘ列の値とＣｏｕｎｔの値が等しいことを確認する（２７２３）。その結果、両者が等しい場合（２７２４）、Ｉｎｄｅｘ列の値にテーブルＡの変更前開始番号列の値を加えた結果をテーブルＹに格納し（２７２５）、テーブルＩの次の１行に進む。一方、Ｉｎｄｅｘ列の値とＣｏｕｎｔの値が等しくない場合（２７２６）、Ｃｏｕｎｔの値をＣｏｕｎｔ＋１に変更し（２７２７）、テーブルＡの次の１行に進む。
ＩＤ列の値がＩＤＮの値と等しくない場合（２７２８）、テーブルＡの次の１行に進む。テーブルＩから行を読み込めない場合（２７２９）、処理を終了する。テーブルＨに格納されている行の中から編集距離が最小の行を全て取得し、編集距離が一定より大きい場合（２７３０）、処理を終了する。
【００５８】
図２８は、図２７の処理における、コードからＣｏｄｅへの変更種別を解析しその結果を変数ＭＴｙｐｅに格納する処理（２７０６）の詳細を示す。
まず、Ｃｏｄｅの値をテーブルＷの区切り文字で分割し、テーブルＪに格納する（２８０１）。テーブルＷを図４７に示す。テーブルＪを図３９に示す。テーブルＪから１行取り出し、変数Ｔｏｋｅｎに格納する（２８０２）。Ｔｏｋｅｎに値が格納されている場合（２８０３）、Ｔｏｋｅｎの値がテーブルＫに含まれるかを確認する（２８０４）。確認の結果、Ｔｏｋｅｎの値が含まれる場合（２８０５）、Ｔｏｋｅｎの値をテーブルＬに格納し（２８０６）、テーブルＪの次の１行に進む。テーブルＬを図４０に示す。一方、Ｔｏｋｅｎの値が含まれない場合（２８０７）、テーブルＪの次の１行に進む。
【００５９】
テーブルＪにＴｏｋｅｎに値が格納されていない場合（２８０８）、コード列の値をテーブルＷの区切り文字で分割し、テーブルＪに格納する（２８０９）。テーブルＪから１行取り出し、変数Ｔｏｋｅｎに格納する（２８１０）。Ｔｏｋｅｎに値が格納されている場合（２８１１）、Ｔｏｋｅｎの値がテーブルＫに含まれるかを確認する（２８１２）。テーブルＫを図３４に示す。確認の結果、Ｔｏｋｅｎの値が含まれる場合（２８１３）、Ｔｏｋｅｎの値をテーブルＭに格納し（２８１４）、テーブルＪの次の１行に進む。一方、Ｔｏｋｅｎの値が含まれない場合（２８１５）、テーブルＪの次の１行に進む。テーブルＭを図４１に示す。
上記の、Ｔｏｋｅｎに値が格納されていない場合（２８１６）、テーブルＬとテーブルＭの内容が一致するかを確認する（２８１７）。その結果、両者が一致する場合（２８１８）、変数ＭＴｙｐｅに“その他”という値を格納する（２８１９）。一方、両者が不一致の場合（２８２０）、変数ＭＴｙｐｅに“構造”という値を格納する（２８２１）。
【００６０】
図２９は、図２７の処理における、テーブルＩの各行の変更種別列をもとに変更種別を決定しその結果を変数Ｍｏｄｉｆｉｅｄに格納する処理（２７１６）の詳細を示す。
まず、変数ＭＳｔｒｕｃｔとＭＯｔｈｅｒに“Ｆａｌｓｅ”を格納する（２９０１）。テーブルＩから１行取り出し、変数ＭＴｙｐｅに格納する（２９０２）。Ｍｔｙｐｅに値が格納されている場合（２９１６）、ＭＴｙｐｅの値を確認する（２９０３）。値が“構造”の場合（２９０４）、ＭＳｔｒｕｃｔの値を“Ｔｒｕｅ”に変更する（２９０５）。値が“その他”の場合（２９０６）、ＭＯｔｈｅｒの値を“Ｔｒｕｅ”に変更する（２９０７）。
【００６１】
一方、ＭＴｙｐｅに値が格納されていない場合（２９０８）、ＭＳｔｒｕｃｔとＭＯｔｈｅｒの値を確認する（２９０９）。確認の結果、ＭＳｔｒｕｃｔのみ“Ｔｒｕｅ”の場合（２９１０）、変数Ｍｏｄｉｆｉｅｄに“構造”という値を格納する（２９１１）。ＭＯｔｈｅｒのみ“Ｔｒｕｅ”の場合（２９１２）、変数Ｍｏｄｉｆｉｅｄに“その他”という値を格納する（２９１３）。ＭＳｔｒｕｃｔとＭＯｔｈｅｒがともに“Ｔｒｕｅ”の場合（２９１４）、変数Ｍｏｄｉｆｉｅｄに“両方”という値を格納する（２９１５）。
【００６２】
図３０は、図２６の処理における、要件・バグレポートを表示する処理（２６２３）の詳細を示す。
まず、テーブルＦから１行読み込む（３００１）。読み込めた場合（３００２）、リビジョン番号列の値を変数Ｒｅｖに、変更種別列の値を変数Ｍｏｄｉｆｉｅｄに格納する（３００３）。次に、リポジトリからＲｅｖの値と等しいリビジョン番号におけるコミットメッセージを取得し、変数Ｍｓｇに格納する（３００４）。Ｍｓｇから要件・バグレポートの管理番号を取得し、テーブルＰに格納する（３００５）。テーブルＰから１行読み込み、管理番号列の値を変数Ｎに格納する（３００６）。Ｎに値が格納されている場合（３００７）、要件・バグレポートＤＢからＮの値と等しい管理番号の要件・バグレポートのタイトルを取得し、変数Ｔｉｔｌｅに格納する（３００８）。Ｔｉｔｌｅに値が格納されている場合（３００９）、リビジョン番号としてＲｅｖ、管理番号としてＮ、タイトルとしてＴｉｔｌｅ、変更種別としてＭｏｄｉｆｉｅｄをテーブルＵに格納し（３０１０）、テーブルＰの次の１行に進む。テーブルＵを図４２に示す。
【００６３】
一方、Ｔｉｔｌｅに値が格納されていない場合（３０１１）、テーブルＰの次の１行に進む。テーブルＰから行を読み込めない場合（３０１２）、テーブルＦの次の１行に進む。テーブルＦから行を読み込めない場合（３０１３）、テーブルＵにデータが格納されているかを確認する（３０１４）。確認の結果、テーブルＵにデータが格納されている場合（３０１５）、テーブルＵに格納されているリビジョン番号、管理番号、タイトル、変更種別の一覧を、変更種別で分類して表示器に表示する（３０１６）。そして、管理番号を入力装置から取得し、変数Ｎに格納する（３０１７）。続いて、要件・バグレポートＤＢからＮの値に等しい管理番号の要件・バグレポートを表示器に表示する（３０１８）。
上記の、テーブルＵにデータが格納されていない場合（３０１９）、指定行の変更に関連する要件・バグレポートはないことを表示する（３０２０）。
【００６４】
図３１は、図３０の処理における、テーブルＵから変更種別列の値で分類してリビジョン番号、管理番号、タイトル、変更種別の一覧を表示する処理（３０１６）の詳細を示す。
まず、テーブルＵから１行読み込む（３１０１）。読み込めた場合（３１０２）、変更種別列の値を確認する（３１０３）。値が“構造”の場合（３１０４）、リビジョン番号、管理番号、タイトル、変更種別を表示に追加し（３１０５）、テーブルＵの次の１行に進む。値が“構造”以外の場合（３１０６）、テーブルＵの次の１行に進む。テーブルＵから行を読み込めない場合（３１０７）、テーブルＵの１行目に戻る（３１０８）。テーブルＵから１行読み込む（３１０９）。読み込めた場合（３１１０）、変更種別列の値を確認する（３１１１）。値が“両方”の場合（３１１２）、リビジョン番号、管理番号、タイトル、変更種別を表示に追加し（３１１３）、テーブルＵの次の１行に進む。値が“両方”以外の場合（３１１４）、テーブルＵの次の１行に進む。
【００６５】
上記の、テーブルＵから行を読み込めない場合（３１１５）、テーブルＵの１行目に戻る（３１１６）。テーブルＵから１行読み込む（３１１７）。１行を読み込めた場合（３１１８）、変更種別列の値を確認する（３１２３）。値が“その他”の場合（３１１９）、リビジョン番号、管理番号、タイトル、変更種別を表示に追加し（３１２０）、テーブルＵの次の１行に進む。値が“その他”以外の場合（３１２１）、テーブルＵの次の１行に進む。テーブルＵから行を読み込めない場合（３１２２）、処理を終了する。リビジョン番号、管理番号、タイトル、変更種別の一覧の表示例を図４５に示す。
【００６６】
図３２は、図２３の処理の更なる代案例（代案例２）を示す。検出した要件・バグレポートの一覧を表示する際に、コード変更の種類により、表示を変更する一実施例である。
まず、テーブルＲから１行読み込む（３２０１）。１行を読み込めた場合（３２０２）、リビジョン番号列の値を変数Ｒｅｖに格納する（３２０３）。次に、リポジトリからＲｅｖの値と等しいリビジョン番号におけるコミットメッセージを取得し、変数Ｍｓｇに格納する（３２０４）。Ｍｓｇから要件・バグレポートの管理番号を取得し、テーブルＰに格納する（３２０５）。テーブルＰから１行読み込み、管理番号列の値を変数Ｎに格納する（３２０６）。
【００６７】
Ｎに値が格納されている場合（３２０７）、要件・バグレポートＤＢからＮの値と等しい管理番号の要件・バグレポートのタイトルと種別を取得し、タイトルを変数Ｔｉｔｌｅに、種別を変数Ｔｙｐｅに格納する（３２０８）。Ｔｉｔｌｅに値が格納されている場合（３２０９）、リビジョン番号としてＲｅｖ、管理番号としてＮ、タイトルとしてＴｉｔｌｅ、種別としてＴｙｐｅをテーブルＶに格納し（３２１０）、テーブルＰの次の１行に進む。テーブルＶを図４３に示す。一方、Ｔｉｔｌｅに値が格納されていない場合（３２１１）、テーブルＰの次の１行に進む。
【００６８】
上記のテーブルＰから行を読み込めない場合（３２１２）、テーブルＲの次の１行に進む。また、テーブルＲから行を読み込めない場合（３２１３）、テーブルＶにデータが格納されているかを確認する（３２１４）。確認の結果、データが格納されている場合（３２１５）、テーブルＶに格納されているリビジョン番号、管理番号、タイトル、種別の一覧を、種別で分類して表示器に表示する（３２１６）。管理番号を入力装置から取得し、変数Ｎに格納する（３２１７）。続いて、要件・バグレポートＤＢからＮの値に等しい管理番号の要件・バグレポートを表示する（３２１８）。テーブルＶにデータが格納されていない場合（３２１９）、指定行の変更に関連する要件・バグレポートはないことを表示する（３２２０）。
【００６９】
図３３は、図３２の処理における、テーブルＶから種別列の値で分類してリビジョン番号、管理番号、タイトル、種別を一覧表示する処理（３２１６）の詳細を示す。
まず、テーブルＶから１行読み込む（３３０１）。１行を読み込めた場合（３３０２）、種別列の値を確認する（３３０３）。確認の結果、値が“機能追加”の場合（３３０４）、リビジョン番号、管理番号、タイトル、種別を表示に追加し（３３０５）、テーブルＶの次の１行に進む。値が“バグ修正”の場合（３３０６）、テーブルＶの次の１行に進む。テーブルＶから行を読み込めない場合（３３０７）、テーブルＶの１行目に戻る（３３０８）。テーブルＶから１行読み込む（３３０９）。１行を読み込めた場合（３３１０）、種別列の値を確認する（３３１１）。値が“バグ修正”の場合（３３１２）、リビジョン番号、管理番号、タイトル、種別を表示に追加し（３３１３）、テーブルＶの次の１行に進む。値が“機能追加”の場合（３３１４）、テーブルＶの次の１行に進む。
上記のテーブルＶから行を読み込めない場合（３３１５）、処理を終了する。リビジョン番号、管理番号、タイトル、種別の一覧の表示例を図４６に示す。
【符号の説明】
【００７０】
１０１：サーバ装置                １０２：要件・バグレポート検出機能部
１０３：構成管理情報ＤＢ          １０４：ソースコード構成管理システム
１０５：要件・バグレポートＤＢ    １０６：入力装置    １０７：出力装置
２０１：差分情報      ２０２：差分ブロック        ３０１：コミットメッセージ
４０１：要件・バグレポートの管理番号    ４０２：要件・バグレポートのタイトル
４０３：要件・バグレポートの種別。
【図１】
2011175446.tif 000003
【図２】
2011175446.tif 000004
【図３】
2011175446.tif 000005
【図４】
2011175446.tif 000006
【図５】
2011175446.tif 000007
【図６】
2011175446.tif 000008
【図７】
2011175446.tif 000009
【図８】
2011175446.tif 000010
【図９】
2011175446.tif 000011
【図１０】
2011175446.tif 000012
【図１１】
2011175446.tif 000013
【図１２】
2011175446.tif 000014
【図１３】
2011175446.tif 000015
【図１４】
2011175446.tif 000016
【図１５】
2011175446.tif 000017
【図１６】
2011175446.tif 000018
【図１７】
2011175446.tif 000019
【図１８】
2011175446.tif 000020
【図１９】
2011175446.tif 000021
【図２０】
2011175446.tif 000022
【図２１】
2011175446.tif 000023
【図２２】
2011175446.tif 000024
【図２３】
2011175446.tif 000025
【図２４】
2011175446.tif 000026
【図２５】
2011175446.tif 000027
【図２６】
2011175446.tif 000028
【図２７】
2011175446.tif 000029
【図２８】
2011175446.tif 000030
【図２９】
2011175446.tif 000031
【図３０】
2011175446.tif 000032
【図３１】
2011175446.tif 000033
【図３２】
2011175446.tif 000034
【図３３】
2011175446.tif 000035
【図３４】
2011175446.tif 000036
【図３５】
2011175446.tif 000037
【図３６】
2011175446.tif 000038
【図３７】
2011175446.tif 000039
【図３８】
2011175446.tif 000040
【図３９】
2011175446.tif 000041
【図４０】
2011175446.tif 000042
【図４１】
2011175446.tif 000043
【図４２】
2011175446.tif 000044
【図４３】
2011175446.tif 000045
【図４４】
2011175446.tif 000046
【図４５】
2011175446.tif 000047
【図４６】
2011175446.tif 000048
【図４７】
2011175446.tif 000049