(57)【要約】【課題】ソースプログラムのレビューにかかる手間を軽減すると共に、チェックすべき箇所のチェック漏れを防止することを目的とする。【解決手段】抽出部１００が、ソースプログラム２の中からレビューでチェックすべき箇所を抽出してその位置情報を出力する。保管部２００は、チェックすべき箇所の位置情報を格納した位置フィールド２２０と、「未チェック状態」としたチェックフラグフィールド２３０からなるレコード２４０として保管する。チェック結果入力部８００でユーザからチェック結果と位置情報を受け取ると、保管部２００は該当する位置情報を含むレコード２４０のチェックフラグフィールド２３０の状態を「チェック済み状態」に変更する。【選択図】図１
2005190330.tif 000002
【特許請求の範囲】
【請求項１】
ソースプログラムの検査を目的とするレビュー作業を支援するソースプログラムのレビュー支援システムであって、
前記ソースプログラムの特定箇所を抽出する抽出手段と、
データを保管する保管手段とを備え、
前記抽出手段は、前記ソースプログラムをレビューしてチェックすべき箇所を、前記特定箇所として抽出すると共にその特定箇所の位置情報を前記保管手段に出力し、
前記保管手段は、前記特定個所の位置情報を保管し、
前記保管手段に保管された位置情報が示す特定箇所のソースプログラム内容を閲覧可能にしたことを特徴とするソースプログラムのレビュー支援システム。
【請求項２】
前記保管手段は、前記位置情報をソースプログラム中の位置を記録する位置フィールドと、
前記位置フィールドが示す箇所のチェック結果を記録するチェックフラグフィールドを持つレコードとして保管し、
前記チェックフラグフィールドは、少なくとも「未チェック状態」もしくは「チェック済み状態」のうちのいずれかの状態を取り、
前記保管手段は、初期状態では前記チェックフラグフィールドを「未チェック状態」で保管し、かつ、チェック結果の入力によって、前記チェックフラグフィールドを「チェック済み状態」に変更することを特徴とする請求項１記載のソースプログラムのレビュー支援システム。
【請求項３】
前記保管手段に保管された１つまたは複数の位置情報を出力するチェックリスト出力手段と、
前記位置情報を選択して被選択位置情報とする位置選択手段と、
ソースプログラムを出力するソースプログラム出力手段と、
ユーザがチェック結果と被チェック位置情報を入力するチェック結果入力手段とを備え、
前記位置選択手段は、前記被選択位置情報を前記ソースプログラム出力手段に渡し、
前記ソースプログラム出力手段は、前記位置選択手段から前記被選択位置情報を受け取ると、その被選択位置情報に対応するソースプログラムの内容を出力し、
前記チェック結果入力手段は、入力された前記チェック結果と被チェック位置情報を前記保管手段に渡し、
前記保管手段は、前記チェック結果入力手段から前記チェック結果と被チェック位置情報を受け取ると、その被チェック位置情報を持つレコードのチェックフラグフィールドを「チェック済み状態」に変更することを特徴とする請求項２記載のソースプログラムのレビュー支援システム。
【請求項４】
前記ソースプログラムの内容を修正したものを修正ソースプログラムとし、
前記抽出手段が抽出する、前記修正ソースプログラムにおけるレビューでチェックすべき箇所の位置情報を修正ソースプログラム位置情報とし、
前記保管手段がすでに保管済みの位置情報を既保管位置情報とし、
前記保管手段は、前記修正ソースプログラム位置情報の入力によって前記修正ソースプログラム位置情報と前記既保管位置情報を比較し、
前記保管手段は、前記修正ソースプログラム位置情報が前記既保管位置情報に含まれなければ前記修正ソースプログラム位置情報を保管し、
前記保管手段は、前記修正ソースプログラム位置情報が前記既保管位置情報に含まれていれば前記修正ソースプログラム位置情報を前記抽出手段に渡し、
前記抽出手段は、前記修正ソースプログラム位置情報の入力によって前記修正ソースプログラムの修正内容が前記修正ソースプログラム位置情報が示す箇所へ及ぼす影響を検査し、かつその検査結果により修正ソースプログラム位置情報と前記チェックフラグフィールドの状態を「未チェック状態」もしくは「チェック済み状態」に変更を指示するフラグ変更命令を前記保管手段に出力し、
前記保管手段は、前記フラグ変更命令によって、前記修正ソースプログラムの修正内容が前記修正ソースプログラム位置情報が示す箇所へ影響がある場合に修正ソースプログラム位置情報を持つレコードのチェックフラグフィールドを「未チェック状態」に変更することを特徴とする請求項２または請求項３記載のソースプログラムのレビュー支援システム。
【請求項５】
ソースプログラムの検査を目的とするレビュー作業を支援するソースプログラムのレビュー支援システムであって、
前記ソースプログラムの位置情報を特定位置情報として保管する保管手段と、
前記保管手段に保管された１つまたは複数の前記特定位置情報を出力するチェックリスト出力手段と、
前記特定位置情報を選択して被選択特定位置情報とする位置選択手段と、
前記ソースプログラムの内容を出力するソースプログラム出力手段と、
ユーザがチェック結果と被チェック特定位置情報を入力するチェック結果入力手段とを備え、
前記保管手段は、前記特定位置情報について、前記ソースプログラム中の位置を記録する位置フィールドと前記位置フィールドが示す箇所のチェック結果を記録するチェックフラグフィールドを持つレコードとして保管し、
前記チェックフラグフィールドは、少なくとも「未チェック状態」もしくは「チェック済み状態」のうちのいずれかの状態を取り、
前記位置選択手段は、前記被選択特定位置情報を前記ソースプログラム出力手段に渡し、
前記ソースプログラム出力手段は、前記位置選択手段から前記被選択特定位置情報を受け取ると、その被選択特定位置情報に対応するソースプログラムの内容を出力し、
前記チェック結果入力手段は、前記チェック結果と前記被チェック特定位置情報を前記保管手段に渡し、
前記保管手段は、前記チェック結果入力手段から前記チェック結果と前記被チェック特定位置情報を受け取ると、その被チェック特定位置情報を持つレコードのチェックフラグフィールドを「チェック済み状態」に変更することを特徴とするソースプログラムのレビュー支援システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータに代表される情報処理システムを動作させる実行コードを生成するためのソースプログラムに対して、動作エラーやセキュリティ欠陥などを引き起こすことがないかどうかをチェックするレビュー作業を支援するシステムに関する。
【背景技術】
【０００２】
ソフトウェアの開発工程において、プログラムが想定どおりに動作することを達成するために、ソースプログラムに対するレビュー作業が一般に行われる。このレビュー作業は、設計上の欠陥やコーディングミスを、プログラムを動作させる前の段階で発見して除去できる効果があり、プログラム品質を向上させる上で重要な作業になっている。
【０００３】
ソースプログラムに対するレビュー作業は、主にコンパイラが行う構文チェックや文法チェックでは検出できないエラーを発見して取り除くことを目的としている。すなわち、ソースプログラムはプログラムの文法上許される範囲で記述されているが、そのソースプログラムをコンパイルして実行した時に想定外の動作を引き起こしてしまうエラーの発生を防ぐためである。こうしたエラーの中には、コンピュータの動作を不安定にして機能不全に陥らせたり、データの漏洩や不正なコードの実行といったセキュリティ欠陥を引き起こすことがあるため、レビューを行ってこうしたエラーを取り除くことは重要である。
【０００４】
レビュー作業では、コンパイラで検出されないエラーを検査するために、人手によるソースプログラムの目視チェックが主体となる。このような人手によるエラー確認作業を軽減するために、コンパイラでは検出されないエラーを検出するコーディングチェック方法が、例えば、特許文献１に開示されている。
【特許文献１】特開２００２−３４２１２９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ここで、レビュー作業における第１の問題として、ソースプログラムをレビューする時には、ソースプログラム全体を参照しなければならないという点がある。ソースプログラムには、コメント行など、生成される実行コードに影響を与えない部分を含むことがあり、このような場所は本来レビュー作業でチェックする必要は無い。しかしながら、それがソースプログラムのどの場所に出現するかはソースプログラム全体を参照しなければわからない。結果として、レビュー作業でチェックの対象とする箇所以外も目視するために、作業手間に多くの時間を費やしている。
【０００６】
上記特許文献１に記載の方法では、コンパイラでは検出されないエラーを自動検出することによって、人手による手間を軽減しようとしている。しかし、自動検出の方法や精度が問題となり、自動検出が困難なエラーについては、依然として人手でソースプログラム全体を見てチェックする必要がある。
【０００７】
第２の問題として、レビュー作業でチェックすべき箇所に対して、実際にチェックが行われたかどうかが分からないため、チェック漏れが生じるという点である。
【０００８】
第３の問題として、レビュー作業でチェックすべき箇所が分ったとしても、チェック判断をするためには前記箇所のソースプログラムを人手で参照しなければならないため、手間がかかってしまう点である。
【０００９】
第４の問題として、一度レビューを行ったソースプログラムが修正された時には、修正の影響がどの箇所に及ぶかが分らないので、最初からレビューし直さなければならないという点がある。ソースプログラムの修正者が影響される場所を判断してレビューする範囲を限定したとしても、人的ミスによりチェック漏れが発生する恐れがある。
【００１０】
特許文献１では、エラーを修正したソースプログラムが入力された場合に、修正前のソースプログラムでエラーとなった場所を調べ、その場所に対して限定的にエラー検出を行うとしている。しかし、修正の影響は、前回エラー検出された箇所以外にも波及する可能性があるため、チェックが十分であるとはいえない。
【００１１】
本発明は、前記の課題を解決するために、レビュー作業の手間を軽減し、レビュー対象箇所のチェック漏れを防ぎ、ソースプログラムの修正が行われた場合でも最初からレビューする必要がないことを実現するためのレビュー支援システムを提供することを目的とする。
【課題を解決するための手段】
【００１２】
本発明は、ソースプログラムの検査を目的とするレビュー作業を支援するレビュー支援システムであって、前記ソースプログラムの特定箇所を抽出する抽出手段と、データを保管する保管手段とを備え、前記抽出手段は、前記ソースプログラムをレビューしてチェックすべき箇所を、前記特定箇所として抽出すると共にその特定箇所の位置情報を前記保管手段に出力し、前記保管手段は、前記特定個所の位置情報を保管し、前記保管手段に保管された位置情報が示す特定箇所のソースプログラム内容を閲覧可能にしたことを特徴とするソースプログラムのレビュー支援システムである。
【００１３】
また、上記のレビュー支援システムにおいて、前記保管手段は、前記位置情報をソースプログラム中の位置を記録する位置フィールドと、前記位置フィールドが示す箇所のチェック結果を記録するチェックフラグフィールドを持つレコードとして保管し、前記チェックフラグフィールドは、少なくとも「未チェック状態」もしくは「チェック済み状態」のうちのいずれかの状態を取り、前記保管手段は、初期状態では前記チェックフラグフィールドを「未チェック状態」で保管し、かつ、チェック結果の入力によって、前記チェックフラグフィールドを「チェック済み状態」に変更することを特徴とするソースプログラムのレビュー支援システムである。
【００１４】
さらに、前記保管手段に保管された１つまたは複数の位置情報を出力するチェックリスト出力手段と、前記位置情報を選択して被選択位置情報とする位置選択手段と、ソースプログラムを出力するソースプログラム出力手段と、ユーザがチェック結果と被チェック位置情報を入力するチェック結果入力手段とを備え、前記位置選択手段は、前記被選択位置情報を前記ソースプログラム出力手段に渡し、前記ソースプログラム出力手段は、前記位置選択手段から前記被選択位置情報を受け取ると、その被選択位置情報に対応するソースプログラムの内容を出力し、前記チェック結果入力手段は、入力された前記チェック結果と被チェック位置情報を前記保管手段に渡し、前記保管手段は、前記チェック結果入力手段から前記チェック結果と被チェック位置情報を受け取ると、その被チェック位置情報を持つレコードのチェックフラグフィールドを「チェック済み状態」に変更することを特徴とするソースプログラムのレビュー支援システムである。
【００１５】
また、上記において、前記ソースプログラムの内容を修正したものを修正ソースプログラムとし、前記抽出手段が抽出する、前記修正ソースプログラムにおけるレビューでチェックすべき箇所の位置情報を修正ソースプログラム位置情報とし、前記保管手段がすでに保管済みの位置情報を既保管位置情報とし、前記保管手段は、前記修正ソースプログラム位置情報の入力によって前記修正ソースプログラム位置情報と前記既保管位置情報を比較し、前記保管手段は、前記修正ソースプログラム位置情報が前記既保管位置情報に含まれなければ前記修正ソースプログラム位置情報を保管し、前記保管手段は、前記修正ソースプログラム位置情報が前記既保管位置情報に含まれていれば前記修正ソースプログラム位置情報を前記抽出手段に渡し、前記抽出手段は、前記修正ソースプログラム位置情報の入力によって前記修正ソースプログラムの修正内容が前記修正ソースプログラム位置情報が示す箇所へ及ぼす影響を検査し、かつその検査結果により修正ソースプログラム位置情報と前記チェックフラグフィールドの状態を「未チェック状態」もしくは「チェック済み状態」に変更を指示するフラグ変更命令を前記保管手段に出力し、前記保管手段は、前記フラグ変更命令によって、前記修正ソースプログラムの修正内容が前記修正ソースプログラム位置情報が示す箇所へ影響がある場合に修正ソースプログラム位置情報を持つレコードのチェックフラグフィールドを「未チェック状態」に変更することを特徴とするソースプログラムのレビュー支援システムである。
【００１６】
さらに、本発明はソースプログラムの検査を目的とするレビュー作業を支援するレビュー支援システムであって、前記ソースプログラムの位置情報を特定位置情報として保管する保管手段と、前記保管手段に保管された１つまたは複数の前記特定位置情報を出力するチェックリスト出力手段と、前記特定位置情報を選択して被選択特定位置情報とする位置選択手段と、前記ソースプログラムの内容を出力するソースプログラム出力手段と、ユーザがチェック結果と被チェック特定位置情報を入力するチェック結果入力手段とを備え、前記保管手段は、前記特定位置情報について、前記ソースプログラム中の位置を記録する位置フィールドと前記位置フィールドが示す箇所のチェック結果を記録するチェックフラグフィールドを持つレコードとして保管し、前記チェックフラグフィールドは、少なくとも「未チェック状態」もしくは「チェック済み状態」のうちのいずれかの状態を取り、前記位置選択手段は、前記被選択特定位置情報を前記ソースプログラム出力手段に渡し、前記ソースプログラム出力手段は、前記位置選択手段から前記被選択特定位置情報を受け取ると、その被選択特定位置情報に対応するソースプログラムの内容を出力し、前記チェック結果入力手段は、前記チェック結果と前記被チェック特定位置情報を前記保管手段に渡し、前記保管手段は、前記チェック結果入力手段から前記チェック結果と前記被チェック特定位置情報を受け取ると、その被チェック特定位置情報を持つレコードのチェックフラグフィールドを「チェック済み状態」に変更することを特徴とするソースプログラムのレビュー支援システムである。
【発明の効果】
【００１７】
本発明のソースプログラムのレビュー支援システムは、レビューでチェックすべき箇所を抽出することによって、ソースプログラム全体を見ることなくレビューを行うことができる。また、チェックすべき箇所に対応するチェックフラグを設けることによって、チェックフラグの状態を参照してチェックの有無を知ることができ、チェック漏れを防ぐことができる。また、チェックすべき箇所のソースプログラム内容を、関連するソースプログラム内容と共に出力させることによって、ソースプログラムを参照する手間が軽減できる。
【００１８】
また、ソースプログラムに修正を加えた時に、新たにレビューすべき箇所が増えた場合はそれを提示し、すでにレビューすべき箇所として抽出されている箇所については、修正の影響の有無を調べ、影響があった箇所を未チェック状態とすることで、レビューで見直す箇所を知ることができ、修正ソースプログラムに対するレビューの手間を軽減することができる。
【発明を実施するための最良の形態】
【００１９】
以下、本発明の実施の形態について、図面を参照して説明する。
【００２０】
（実施例１）
図１は、本発明の実施例１におけるソースプログラムのレビュー支援システムの構成を示すブロック図である。
【００２１】
この実施例１におけるレビュー支援システムは、ソースプログラムの解析を行って特定箇所を抽出する抽出部１００と、前記抽出部１００から渡されたデータを保管する保管部２００を持っている。前記保管部２００はハードディスクやメモリ等の記憶装置を用いて実現される。
【００２２】
前記ソースプログラムは、プログラムの処理内容を記述したステートメントと、そのステートメントを構成する識別子で構成される。この識別子は、プログラム中にその値を変化させる可変数（変数、配列変数、ポインタ変数等）と、それ以外の予約語、関数名、定数、演算子等である。また、ステートメントは、さらに別のステートメントを含む場合もある。ソースプログラムは、一つまたは複数のソースファイル２に記述される。図２で示すソースファイル２１は、ソースプログラムを記載したソースファイル２の一例である。
【００２３】
前記抽出部１００は、図３に示すようにソースプログラムが書かれたソースファイル２を読み取って、ソースプログラム中で用いられているステートメントと識別子がどのような処理を示しているかを解析して解析符号を割り当てるソース解析部１１０と、解析符号を使って特定のステートメントや識別子などを抽出する特定箇所抽出部１２０で構成されている。前記ソース解析部１１０は、ソースファイル２を読み取って、解析符号を割りあてたステートメント及び識別子を特定箇所抽出部１２０に渡す。特定箇所抽出部１２０は、抽出したステートメント及び識別子の位置情報（後述）を保管部２００へ出力する。
【００２４】
前記ソース解析部１１０で行う処理は、コンパイラが中間コードを生成するために行う処理の一部と同等であり、ソースプログラム中のステートメントと識別子に解析符号を割り付ける。例えば、変数を表わす識別子であれば「ｖａｒｉａｂｌｅ」、配列変数を表わす識別子であれば「ａｒｒａｙ」、ポインタ変数を表わす識別子であれば「ｐｏｉｎｔｅｒ」等の解析符号を割り付ける。ステートメントに対しても、変数宣言のステートメントであれば「ｄｅｃｌａｒａｔｉｏｎ」、関数宣言のステートメントであれば「ｆｕｎｃｔｉｏｎ」、代入式のステートメントであれば「ａｓｓｉｇｎｍｅｎｔ−ｅｘｐｒｅｓｓｉｏｎ」、関数呼び出し行うステートメントであれば「ｆｕｎｃｔｉｏｎ−ｅｘｐｒｅｓｓｉｏｎ」等の解析符号を割り付ける。
【００２５】
図４は、図２のソースファイル２１に記述されているソースプログラムのステートメントと識別子に、解析符号を割り当てた例である。白い四角で囲まれたものをステートメント、網掛け四角で囲まれたものを識別子とし、下線付き文字列が解析符号、下線無し文字列がソースプログラムの内容を示す。
【００２６】
前記特定箇所抽出部１２０では、解析符号を使って検索を行い、該当するステートメントや識別子の抽出を行う。例えば、代入式のステートメントを抽出する場合は、「ａｓｓｉｇｎｍｅｎｔ−ｅｘｐｒｅｓｓｉｏｎ」を解析符号に持つステートメントを検索し、マッチしたステートメントをすべて抽出する。変数ｉを使った代入文を抽出する時は、「ｖａｒｉａｂｌｅ」を解析符号に持つ識別子ｉを内包する「ａｓｓｉｇｎｍｅｎｔ−ｅｘｐｒｅｓｓｉｏｎ」を解析符号に持つステートメントを検索し、マッチしたステートメントをすべて抽出する。
【００２７】
例えば、レビューでバッファオーバーフローのバグをチェックする場合、バッファオーバーフローは配列変数またはポインタ変数への代入式で起こるので、これらを満たす代入文を抽出する。すなわち、配列変数を意味する解析符号「ａｒｒａｙ」またはポインタ変数を意味する解析符号「ｐｏｉｎｔｅｒ」を持つ識別子を含む解析符号「ａｓｓｉｇｎｍｅｎｔ−ｅｘｐｒｅｓｓｉｏｎ」を持つステートメントをチェックすべき箇所として抽出する。
【００２８】
また、特定箇所抽出部１２０は、抽出したステートメントや識別子の一つ一つに対して、ソースプログラム中のどの場所に存在するかを調べて、その位置を位置情報として出力する。この位置情報はステートメントや識別子の位置がソースプログラム内で一意に決まるもので表わされている。位置情報としては、行番号、処理ステップ番号、ファイルの先頭からのオフセット値等を使う。ソースプログラム２が複数のソースファイル２で構成されていた場合、位置情報はソースファイル名を組にして表わす。例えば、ソースファイル名と行番号、ソースファイル名とファイル先頭からのオフセット値等で表わす。図５に、ソースファイル名と行番号を使って表わした場合の位置情報の一例を示す。
【００２９】
次に、前記保管部２００は、特定箇所抽出部１２０から受け取った位置情報を、位置フィールド２２０とチェックフラグフィールド２３０で構成されるレコード２４０として保管する。位置フィールド２２０は、位置情報を格納するためのフィールドである。チェックフラグフィールド２３０は、位置フィールド２２０に格納されている位置情報がチェックされたかどうかを記録するためのフィールドである。チェックフラグフィールド２３０の状態は、「未チェック状態」または「チェック済み状態」のいずれかを取る。保管部２００は、特定箇所抽出部１２０から位置情報が渡された時、その位置情報を格納した位置フィールド２２０と、「未チェック状態」としたチェックフラグフィールド２３０からなるレコード２４０として保管する。特定箇所抽出部１２０から渡された位置情報が複数である時は、位置情報の個数分のレコードを保管する。
【００３０】
また、このレビュー支援システムは、保管部２００に保管された位置情報を出力するチェックリスト出力部５００、位置情報を選択する位置選択部６００、位置選択部６００によって選択された位置情報に対応するソースプログラムの内容を出力するソースプログラム出力部７００、ユーザからチェック結果と位置情報の入力を受け取るチェック結果入力部８００を有している。
【００３１】
前記チェックリスト出力部５００は、保管部２００から一つまたは複数の位置情報を受け取り、これら位置情報をモニタやプリンタなどの出力装置９００へ出力する。この時チェックリスト出力部５００は、位置情報をユーザが認知しやすいように、所定の文字や図形を含むチェックリストに加工して出力することもある。図６（ａ）に示すチェックリスト５１０ａは、保管部２００から読み取った３つの位置情報（以下、位置情報Ｐ１〜Ｐ３とする）をチェックリストで出力した時の一例である。項目５１１ａ〜５１３ａは、位置情報Ｐ１〜Ｐ３の出力例である。また、チェックフラグフィールド２３０の状態を合わせて受け取り、その状態をチェックリストに含めて出力してもよい。図６（ｂ）に示すチェックリスト５１０ｂは、チェックフラグフィールド２３０の状態を含めて出力した場合のチェックリストの一例である。チェックボックス５２１は、項目５１１ｂが示す位置情報を含むレコード２４０のチェックフラグフィールド２３０の状態を示す。チェックボックス５２２、５２３も同様である。図６（ｂ）において、□で表わされたチェックボックス５２１および５２３は「未チェック状態」であることを示し、〇で表わされたチェックボックス５２２は「チェック済み状態」であることを示す。
【００３２】
前記位置選択部６００は、ユーザによるマウスやキーボードの入力を受けて、チェックリスト出力部５００が出力した位置情報を選択する。位置選択部６００は出力装置９００に出力されたチェックリストの一部がマウスで選択されたり、位置情報そのものをキーボードで入力されたりすることによって、どの位置情報が選択されたかを識別する。位置選択部６００は識別した位置情報をソースプログラム出力部７００に渡す。
【００３３】
前記ソースプログラム出力部７００は、位置選択部６００から位置情報を受け取ると、ソースファイル２を読み込み、その位置情報が示す箇所のソースプログラム内容をその周辺の内容とともに出力装置９００へ出力する。
【００３４】
また、チェック結果入力部８００は、ユーザからチェック結果と位置情報を受け取り、チェック結果と位置情報を保管部２００に出力する。この時保管部２００は、位置情報を位置フィールド２２０に格納しているレコード２４０を検索し、そのレコード２４０に含まれるチェックフラグフィールド２３０の内容をチェック結果に応じて変更する。
【００３５】
次に、処理工程について説明する。
【００３６】
ソースプログラムのレビューでチェックすべき箇所を抽出して保管部２００に保管する工程（Ｓ１）を、図７のフローを用いて説明する。レビュー支援システムにソースファイル２が入力されると（Ｓ１０１）、ソース解析部１１０によってソースファイル２に記述されたソースプログラムの解析が行われ、ソースプログラム中に含まれるステートメントと識別子に対して解析符号を割り付ける（Ｓ１０２）。次に、特定箇所抽出部１２０が、解析符号を検索してレビューでチェックすべきステートメントや識別子を抽出する（Ｓ１０３）。前記抽出処理が終了すると、特定箇所抽出部１２０は抽出したチェックすべきステートメントや識別子のソースプログラム２上での位置を調べ、この位置を位置情報として出力する（Ｓ１０４）。保管部２００は、位置情報を受け取ると、位置情報を位置フィールド２２０に格納してチェックフラグフィールド２３０を「未チェック状態」としたレコード２４０として保管する（Ｓ１０５）。
【００３７】
次に、ユーザがチェックしたい箇所のソースプログラム内容を出力する工程（Ｓ２）を、図８のフローを用いて説明する。
【００３８】
チェックリスト出力部５００は、保管部２００の保管する位置情報を一つまたは複数読み出し、出力装置９００にチェックリストを出力する（Ｓ２０１）。位置選択部６００によって、位置情報が選択されると（Ｓ２０２）、位置選択部６００は、選択された位置情報をソースプログラム出力部７００に渡す（Ｓ２０３）。ソースプログラム出力部７００は、ソースファイル２を読み取り、位置情報の示す箇所のソースプログラム内容を出力装置９００に出力する（Ｓ２０４）。図９は、ソースプログラムを出力装置９００で出力した出力例である。ここでは、ｌｉｎｅ１３を選択した場合のものであり、ｌｉｎｅ１３周辺のソースプログラムが表示され、ｌｉｎｅ１３のステートメントが反転表示されている。
【００３９】
次に、チェックすべき箇所に対するチェック結果を記録する処理工程（Ｓ３）を、図１０を用いて説明する。
【００４０】
チェック結果入力部８００は、ユーザからチェック結果と位置情報を受け取ると（Ｓ３０１）、チェック結果と位置情報を保管部２００に渡す（Ｓ３０２）。保管部２００は、位置情報を位置フィールド２２０に格納しているレコード２４０を検索し（Ｓ３０３）、そのレコード２４０のチェックフラグフィールド２３０を「チェック済み状態」に変更する（Ｓ３０５）。
【００４１】
なお、このレビュー支援システムに、キーボードなどを使ってソースプログラムそのものが入力された時は、入力されたソースプログラムを一時ファイルに保存し、その一時ファイルをソースファイル２として扱ってもよい。
【００４２】
また、ソース解析部１１０が、ステートメントや識別子がソースプログラムのどの場所にあるかを示す位置情報を割り当ててもよい。この場合、特定箇所抽出部１２０は、抽出したステートメントや識別子の位置情報を調べる必要はなく、ステートメントや識別子に割り当てられている位置情報を読み出して出力してもよい。
【００４３】
また、特定箇所抽出部１２０に、どのステートメントや識別子を抽出するかという情報を与えて処理を行わせてもよい。この場合、抽出するステートメントや識別子を任意に設定することができる。
【００４４】
また、チェックフラグフィールド２３０は、「未チェック状態」および「チェック済み状態」以外の状態が存在してもよく、チェック済みかそうでないかがわかればよい。
【００４５】
また、ソースプログラム出力部７００の機能を、抽出部１００が兼ねてもよい。この場合抽出部１００は、位置選択部６００から位置情報を受け取ると、ソースファイル２を読み込み、その位置情報が示す箇所のソースプログラム内容を出力装置９００へ出力する。
【００４６】
また、チェック結果入力部８００が受け付けるチェック結果として、未チェックに戻す旨の入力を受け付けてもよい。この場合、処理ステップＳ３０３において、チェックフラグフィールド２３０を「未チェック状態」に変更する。
【００４７】
さらに、チェック結果入力部８００の機能を、位置選択部６００が兼ねてもよい。この場合、位置選択部６００がチェック結果と位置情報を受け取った時は、位置選択部６００はそのチェック結果と位置情報を保管部２００に渡し、処理ステップＳ３０３以降の処理を行う。位置選択部６００が位置情報だけを受け取った時は、処理ステップＳ３０３以降と同様である。
【００４８】
（実施例２）
次に、本発明の実施例２におけるレビュー支援システムを、図１１を用いて説明する。
【００４９】
この実施例２におけるレビュー支援システムは、ソースプログラムの解析を行って特定箇所を抽出する抽出部１５０、抽出部１５０から渡されたデータを保管する保管部２５０、保管部２５０に保管された位置情報を出力するチェックリスト出力部５００、位置情報を選択する位置選択部６００、位置選択部６００によって選択された位置情報に対応するソースプログラムの内容を出力するソースプログラム出力部７００、ユーザからチェック結果と位置情報の入力を受け取るチェック結果入力部８００を有している。前記チェックリスト出力部５００、位置選択部６００、ソースプログラム出力部７００、チェック結果入力部８００での処理内容は、図１の実施例１と同様である。抽出部１５０は、図１２に示すように、ソース解析部１１１、特定箇所抽出部１２１、解析データ記憶部１６０、データ比較部１７０を有している。
【００５０】
前記ソース解析部１１１は、上記実施例１のソース解析部１１０と同様の処理を行い、ソースプログラム内のステートメントと識別子に解析符号を割り当て、特定箇所抽出部１２１に渡す。さらに、解析符号を割り当てたステートメントと識別子のデータを、解析データ１６１として解析データ記憶部１６０に出力する。
【００５１】
前記特定箇所抽出部１２１は、特定箇所抽出部１２０と同様の処理を行い、位置情報を保管部２５０に出力する。また、チェックフラグフィールド２３０の状態を変更するためのチェックフラグ変更命令を、位置情報と組にして保管部２５０に出力する。さらに特定箇所抽出部１２１は、保管部２５０から位置情報を受け取り、解析データ記憶部１６０から解析データ１６１を読み込み、位置情報の示すステートメントや識別子を抽出する。また、抽出したステートメントや識別子の集合を比較部１７０に渡し、さらにデータ比較部１７０から比較結果を受け取る。
【００５２】
前記解析データ記憶部１６０は、ソース解析部１１１から解析データ１６１を受け取り、これを記憶する。データ比較部１７０は、特定箇所抽出部１２１からステートメントや識別子の集合を受け取り、さらに特定箇所抽出部１２１からステートメントや識別子の集合を受け取り、両者を比較して比較結果を特定箇所抽出部１２１に渡す。
【００５３】
また、保管部２５０は、実施例１における保管部２００と同様の機能を持ち、さらに保管部２５０は、特定箇所抽出部１２１から渡された位置情報を持つレコード２４０が既に存在した場合は、前記位置情報を抽出部１５０に返答する。また保管部２５０は、特定箇所抽出部１２１から位置情報と共にフラグ変更命令１８０を受け取ると、保管しているレコード２４０の中からこの位置情報を含むものを探し、このレコード２４０のチェックフラグフィールド２３０の状態をフラグ変更命令１８０に従って変更する。
【００５４】
以上のような構成からなり、その処理動作について説明する。
【００５５】
最初にソースプログラムを記述したソースファイル２を入力した場合の処理工程Ｓ４を、図１３を用いて説明する。ソースファイル２が入力されると（Ｓ４０１）、ソース解析部１１１はソースファイル２を読み取って、ソースプログラム中に含まれるステートメントと識別子に対して解析符号を割り付ける（Ｓ４０２）。この時ソース解析部１１１は、解析データ１６１を解析データ記憶部に渡し、解析データ部１６０が解析データ１６１を記憶する（S４０３）。次に、特定箇所抽出部１２１が、解析符号を検索してレビューでチェックすべきステートメントや識別子を抽出する（Ｓ４０４）。抽出処理が終了すると、特定箇所抽出部１２１は抽出したチェックすべきステートメントや識別子のソースプログラム上での位置を調べ、この位置を位置情報として出力する（Ｓ４０５）。保管部２５０は、位置情報を受け取ると、位置情報を位置フィールド２２０に格納してチェックフラグフィールド２３０を「未チェック状態」としたレコード２４０として保管する（Ｓ４０６）。
【００５６】
次に、上記ソースファイル２が入力されて処理工程Ｓ４が行なわれた後、ソースファイル２の内容を修正した修正ソースファイル４が入力された場合の処理工程Ｓ５を、図１４を用いて説明する。この場合は、解析データ記憶部１６０には、ソースプログラムの解析データ１６１が記憶されており、保管部２５０には、ソースプログラムにおけるチェックすべき位置情報が、位置情報の個数分のレコード２４０で保管されている。保管部２５０に保管されている位置情報をそれぞれ位置情報Ｐ４−１、位置情報Ｐ４−２、・・・位置情報Ｐ４−ｎとし、そして、位置情報Ｐ４−１〜Ｐ４−ｎ全体を位置情報群ＰＳ４とする。
【００５７】
レビュー支援システムに修正ソースファイル４が入力された時（Ｓ５０１）、処理ステップＳ４０２と同様に解析が行われ（Ｓ５０２）、修正ソースファイル４に記述されたソースプログラムの解析データ１６２が解析データ記憶部１６０に記憶される（Ｓ５０３）。そして処理ステップＳ４０４〜Ｓ４０５と同様に、チェックすべきステートメントや識別子の位置情報が、保管部２５０に出力される（Ｓ５０４）。処理ステップＳ５０４で渡された位置情報をそれぞれ位置情報Ｐ５−１、位置情報Ｐ５−２、・・・位置情報Ｐ５−ｍとし、位置情報Ｐ５−１〜Ｐ５−ｎの組を位置情報群ＰＳ５とする。
【００５８】
保管部２５０は、位置情報群ＰＳ５を受け取ると、位置情報群ＰＳ４にあって位置情報群ＰＳ５に存在しない位置情報をすべて取り出す（この時取り出した位置情報をＰ６−１、位置情報Ｐ６−２、・・・Ｐ６−ｋとする）。そして、位置情報Ｐ６−１〜Ｐ６−ｋのいずれかを位置フィールド２２０に格納するレコード２４０を削除する（Ｓ５０５）。
【００５９】
次に、保管部２５０は、位置情報群ＰＳ４の中から位置情報を一つ取り出し（Ｓ５０６）、以下の処理を実行する。保管部２５０は、取り出した位置情報（以下、位置情報Ｐ７とする）を位置フィールド２２０に格納しているレコード２４０が存在するか確認し（Ｓ５０７）、もし存在していなければ、処理ステップＳ１０４と同様の処理を行い（Ｓ５０８）、後述する処理ステップＳ５２６に移る。処理ステップＳ５０７において、位置情報Ｐ７を持つレコード２４０が存在していれば、保管部２５０はその位置情報Ｐ７を抽出部１５０の特定箇所抽出部１２１に返す（Ｓ５０９）。
【００６０】
前記特定箇所抽出部１２１に保管部２５０から位置情報Ｐ７が返されると、この特定箇所抽出部１２１は解析データ１６２を読み込み（Ｓ５１０）、位置情報Ｐ７が示すステートメントまたは識別子を抽出する（Ｓ５１１）。このとき、抽出がステートメントであれば（Ｓ５１２）その中で使われている識別子を再帰的に抽出する（Ｓ５１３）。そして、抽出した識別子のうち、可変数のものを、解析符号を用いて抽出する（Ｓ５１４）。次に特定箇所抽出部１２１は、解析データ１６２から、先ほど抽出した可変数を含むすべてのステートメントを抽出する（Ｓ５１５）。抽出したステートメントが可変数を含んでいる場合は（Ｓ５１６）、再帰的にその可変数を含むステートメントを抽出する（Ｓ５１７）。そして、抽出したステートメントの組を、ステートメントデータ１６３として、データ比較部１７０に渡す（Ｓ５１８）。次に特定箇所抽出部１２１は、解析データ１６１を読み込み、処理ステップＳ５１１〜Ｓ５１６と同様にして、ステートメントを抽出する（Ｓ５２０）。こうして抽出したステートメントの組を、ステートメントデータ１６４として、データ比較部１７０に渡す（Ｓ５２１）。
【００６１】
前記データ比較部１７０は、ステートメントデータ１６３とステートメントデータ１６４を受け取ると、ステートメントデータ１６３とステートメントデータ１６４を比較する（Ｓ５２２）。そして、その比較結果が不一致であれば（Ｓ５２３）、特定箇所抽出部１２１は、修正の影響があるとして、位置情報Ｐ７と共にチェックフラグ変更命令１８０を保管部２５０に渡す（Ｓ５２４）。そして、保管部２５０は、位置情報Ｐ７を位置フィールド２２０に格納しているレコード２４０のチェックフラグフィールド２３０を「未チェック状態」に変更し（Ｓ５２５）、後述する処理ステップＳ５２６に移る。
【００６２】
上記処理ステップ５２２において、ステートメントデータ１６３とステートメントデータ１６４の比較結果が一致した場合は、後述する処理ステップＳ５２６に移る。また、処理ステップＳ５０８を行った後も、処理ステップＳ５２６に進む。
【００６３】
前記処理ステップＳ５２６では、保管部２５０が、位置情報ＰＳ４の組の中を全て取り出したかどうかを確認し、全て取り出していれば処理を終了する。一方、位置情報ＰＳ４の組を全て取り出していなければ、処理ステップＳ５０６に戻って処理を続ける。
【００６４】
なお、上記の説明において、ソース解析部１１１は、処理ステップＳ４０２における処理結果を特定箇所抽出部１２１に渡さなくてもよい。この場合は、処理ステップＳ４０４において、特定箇所抽出部１２１は解析データ記憶部１６０から解析データ１６１を読み込み、この解析データ１６１を使って抽出を行う。
【００６５】
なお、処理ステップＳ５１５およびＳ５１７において、可変数の有効範囲を調べて、ステートメントを検索する範囲を限定してもよい。
【産業上の利用可能性】
【００６６】
本発明のソースプログラムのレビュー支援システムは、作成したソースプログラムのレビュー作業の手間を軽減し、チェック漏れを防ぐことができ、ソースプログラムに動作エラーやセキュリティ欠陥などを引き起こすことがないかをチェックする作業等に有用である。
【図面の簡単な説明】
【００６７】
【図１】本発明の実施例１におけるソースプログラムのレビュー支援システムの構成を示すブロック図
【図２】本発明の実施例１におけるソースファイルの一例を示す図
【図３】本発明の実施例１における、抽出部の構成を示すブロック図
【図４】本発明の実施例１におけるソースプログラムの解析例を示す図
【図５】本発明の実施例１における位置情報の例を示す図
【図６】本発明の実施例１におけるチェックリストの出力例を示す図
【図７】本発明の実施例１におけるソースファイルからレビューでチェックすべき場所を抽出する処理工程のフロー図
【図８】本発明の実施例１におけるチェックしたい箇所のソースプログラム内容を出力する処理工程のフロー図
【図９】本発明の実施例１におけるソースプログラムの内容を出力した例を示す図
【図１０】本発明の実施例１におけるチェックすべき箇所のチェック結果を記録する処理工程のフロー図
【図１１】本発明の実施例２におけるソースプログラムのレビュー支援システムの構成を示すブロック図
【図１２】本発明の実施例２における抽出部の構成を示すブロック図
【図１３】本発明の実施例２におけるソースファイルからレビューでチェックすべき場所を抽出する処理工程のフロー図
【図１４】本発明の実施例２における修正ソースファイルからレビューでチェックすべき箇所を抽出する処理工程のフロー図
【符号の説明】
【００６８】
２、２１  ソースファイル
１００、１５０  抽出部
１１０、１１１  ソース解析部
１２０、１２１  特定箇所抽出部
１７０  データ比較部
２００、２５０  保管部
２２０  位置フィールド
２３０  チェックフラグフィールド
２４０  レコード
５００  チェックリスト出力部
６００  位置選択部
７００  ソースプログラム出力部
８００  チェック結果入力部
９００  出力装置
【図１】
2005190330.tif 000003
【図２】
2005190330.tif 000004
【図３】
2005190330.tif 000005
【図４】
2005190330.tif 000006
【図５】
2005190330.tif 000007
【図６】
2005190330.tif 000008
【図７】
2005190330.tif 000009
【図８】
2005190330.tif 000010
【図９】
2005190330.tif 000011
【図１０】
2005190330.tif 000012
【図１１】
2005190330.tif 000013
【図１２】
2005190330.tif 000014
【図１３】
2005190330.tif 000015
【図１４】
2005190330.tif 000016