(57)【要約】【課題】  複数の語句で構成される語句の定義・宣言を容易に検索する。【解決手段】  ソースコード記憶手段１ａは、レビュー対象となるソースコード２ａ，２ｂを記憶している。検索情報記憶手段１ｂは、ソースコード２ａ，２ｂを構成している語句ごとに、その語句と、その語句が定義・宣言されている箇所と、その語句の型とを含む語句情報３を記憶する。また、語句が型宣言を構成する要素語句となっている場合には、さらに型宣言も含めて記憶する。定義・宣言検索手段１ｃは、型宣言の型を有する実体語句と要素語句とで表される語句４ａの定義・宣言箇所の検索要求が行われた場合、実体語句の定義・宣言箇所を、実体語句を有する語句情報３に基づいて検索し、要素語句の定義・宣言箇所を、要素語句を有しさらに検索した実体語句の型を型宣言として有する語句情報３に基づいて検索する。【選択図】  図１
2007034654.tif 000002
【特許請求の範囲】
【請求項１】
ユーザのソースコードレビューを支援するコンピュータにおいて、
レビュー対象となるソースコードを記憶したソースコード記憶手段と、
前記ソースコードを構成している語句ごとに前記語句と前記語句が定義・宣言されている箇所と前記語句の型とを含む語句情報を記憶し、前記語句が型宣言を構成する要素語句となっている場合には、さらに前記型宣言も含めて記憶した検索情報記憶手段と、
前記型宣言の型を有する実体語句と前記要素語句とで表される前記語句の定義・宣言箇所の検索要求が行われた場合、前記実体語句の定義・宣言箇所を、前記実体語句を有している前記語句情報に基づいて検索し、前記要素語句の定義・宣言箇所を、前記要素語句を有しさらに検索した前記実体語句の型を前記型宣言として有している前記語句情報に基づいて検索する定義・宣言検索手段と、
を有することを特徴とするコンピュータ。
【請求項２】
前記ソースコードの文法を基に前記語句の定義・宣言、型、および型宣言を認識し、前記検索情報記憶手段を作成する検索情報作成手段を有することを特徴とする請求項１記載のコンピュータ。
【請求項３】
前記検索情報作成手段は、前記ソースコードが前記ソースコード記憶手段に記憶されるとき、前記検索情報記憶手段を作成することを特徴とする請求項２記載のコンピュータ。
【請求項４】
前記定義・宣言検索手段によって検索された前記実体語句と前記要素語句との定義・宣言箇所を同一画面に表示する表示手段を有することを特徴とする請求項１記載のコンピュータ。
【請求項５】
前記型宣言はＣ言語の構造体宣言であり、前記要素語句は構造体要素であることを特徴とする請求項１記載のコンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はコンピュータに関し、特にユーザのソースコードレビューを支援するコンピュータに関する。
【背景技術】
【０００２】
プログラムのソースコードをレビューする場合、レビュー者は、実行文を構成している語句を認識し、認識した語句の定義・宣言を探す。そして、認識した語句の定義・宣言内容を理解して、実行文の内容を理解する。例えば、ソースコードがＣ言語で記述されている場合、変数や関数、マクロ定義などの語句の定義・宣言内容を理解して実行文を理解する。これにより、レビュー者は、プログラムのソースコードが目的通りのコーディングがされているかのチェックを行う。
【０００３】
実行文を構成している語句の中には、ソースコードのファイルとは別のファイルに定義・宣言がされている場合がある。例えば、ヘッダファイルなどにまとめて語句が定義・宣言されている場合があり、Ｃ言語の場合、ヘッダファイルにｔｙｐｅｄｅｆ、＃ｄｅｆｉｎｅ、ｓｔｒｕｃｔ、ｕｎｉｏｎ、ｅｎｕｍ、変数定義、関数定義などが記述されている場合がある。このような場合でも、ｖｉなどのエディタのタグジャンプ機能を利用すれば、容易に語句の定義・宣言内容を検索することができる。例えば、Ｃ言語において、ａ＝ｂ＋ＭＡＸ；の語句の定義・宣言を検索する場合、エディタのタグジャンプ機能を利用して、例えば、ｉｎｔ  ａ、ｉｎｔ  ｂ、＃ｄｅｆｉｎｅ  ＭＡＸ  １００を検索することができる。
【０００４】
これに対し変数が構造体の場合、例えば、ａａ．ｓ１＝ｂｂ．ｓ１＋ＭＡＸ；のａａ．ｓ１は、１つの語句が複数の語句（ａａ、ｓ１）で構成されており、ａａ．ｓ１の定義・宣言を理解するには（ｓｔｒｕｃｔ  Ｍ＿ｓｓ｛ｉｎｔ  ｓ１；ｉｎｔ  ｓ２；｝、Ｍ＿ｓｓ  ａａ；、Ｍ＿ｓｓ  ｂｂ；とする）、まず、ａａの型であるＭ＿ｓｓを、タグジャンプ機能を利用して見つけ出す。次いで、Ｍ＿ｓｓをタグジャンプ機能によって検索して、Ｍ＿ｓｓ内にｉｎｔ型の変数ｓ１が存在することを見つけ出し、ａａ．ｓ１を理解することができる。このようにａａ．ｓ１で直接検索することができないため検索に手間がかかり、特に、大規模なシステムのソースコードレビューを行う場合では、膨大なファイルの中から目的の定義・宣言内容を次々と見つけ出さなければならず大変な手間となる。
【０００５】
なお、利用者との対話により変数検索を段階的に行って不必要な変数の検索を除外し、ソースプログラムの修正時の変数理解を容易にする技術が提案されている（例えば、特許文献１参照）。また、ソースレベルでプログラムのデバッグを行うためのデバッグ・モニタ制御方式に関し、簡素な装置で、容易かつ高速にモニタすべきソースコードを検索・表示できるようにする技術が提案されている（例えば、特許文献２参照）。
【特許文献１】特開平１１−３２７８７９号公報
【特許文献２】特開平６−２３６２９４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
このように、複数の語句で構成されている語句を検索する場合、１語句ずつ人手を介して検索しなければならず手間がかかるという問題点があった。
本発明はこのような点に鑑みてなされたものであり、複数の語句で構成された語句の定義・宣言を容易に検索することができるコンピュータを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明では上記問題を解決するために、図１に示すようなユーザのソースコードレビューを支援するコンピュータにおいて、レビュー対象となるソースコード２ａ，２ｂを記憶したソースコード記憶手段１ａと、ソースコード２ａ，２ｂを構成している語句ごとに語句と語句が定義・宣言されている箇所と語句の型とを含む語句情報３を記憶し、語句が型宣言を構成する要素語句となっている場合には、さらに型宣言も含めて記憶した検索情報記憶手段１ｂと、型宣言の型を有する実体語句と要素語句とで表される語句４ａの定義・宣言箇所の検索要求が行われた場合、実体語句の定義・宣言箇所を、実体語句を有している語句情報３に基づいて検索し、要素語句の定義・宣言箇所を、要素語句を有しさらに検索した実体語句の型を型宣言として有している語句情報３に基づいて検索する定義・宣言検索手段１ｃと、を有することを特徴とするコンピュータが提供される。
【０００８】
このようなコンピュータによれば、検索情報記憶手段１ｂには、語句と、語句が定義・宣言されている箇所と、語句の型と、を含む語句情報３を記憶し、語句が型宣言を構成する要素語句となっている場合には、型宣言も含めて記憶する。そして、型宣言の型を有する実体語句と要素語句とで表される語句４ａの定義・宣言箇所の検索要求が行われた場合、実体語句の定義・宣言箇所を、実体語句を有している語句情報３に基づいて検索し、要素語句の定義・宣言箇所を、要素語句を有しさらに検索した実体語句の型を型宣言として有している語句情報３に基づいて検索する。これにより、実体語句と要素語句との複数の語句で表される語句４ａを、人手を介することなく１度に検索することができる。
【発明の効果】
【０００９】
本発明のコンピュータでは、検索情報記憶手段に、語句と、語句が定義・宣言されている箇所と、語句の型と、を含む語句情報を記憶し、語句が型宣言を構成する要素語句となっている場合には、さらに型宣言の型も含めて記憶する。そして、実体語句と要素語句とで表される語句の定義・宣言箇所の検索要求が行われた場合、実体語句の定義・宣言箇所を、実体語句を有している語句情報に基づいて検索し、要素語句の定義・宣言箇所を、要素語句を有しさらに検索した実体語句の型を型宣言として有している語句情報に基づいて検索するようにした。これにより、実体語句と要素語句との複数の語句で表される語句を、人手を介することなく１度に検索でき、複数の語句で構成された語句の定義・宣言を容易に検索することができる。
【発明を実施するための最良の形態】
【００１０】
以下、本発明の原理を、図面を参照して詳細に説明する。
図１は、コンピュータの概要を説明する図である。ユーザのソースコードレビューを支援するコンピュータは、図に示すようにソースコード記憶手段１ａ、検索情報記憶手段１ｂ、および定義・宣言検索手段１ｃを有している。
【００１１】
ソースコード記憶手段１ａには、レビュー対象となるソースコードが記憶される。ソースコード記憶手段１ａには、例えば、図に示すようにＣ言語で記述されたファイル名ａｂｃ．ｃのソースコード２ａと、ファイル名ｄｅｆ．ｈのソースコード２ｂが記憶される。
【００１２】
検索情報記憶手段１ｂは、ソースコード記憶手段１ａに記憶されているソースコード２ａ，２ｂを構成している語句ごとに、その語句と、その語句が定義・宣言されている箇所と、その語句の型とを含む語句情報３を記憶する。また、その語句が型宣言を構成する要素語句となっている場合には、その要素語句を有する型宣言も含めて記憶する。検索情報記憶手段１ｂは、ソースコード２ａ，２ｂがソースコード記憶手段１ａに記憶されるとき作成される。
【００１３】
例えば、ソースコード２ａの語句Ｖ３０は、ａｂｃ．ｃファイルの６行目に記述され、型はＭ＿ＳＳ２である。また、ソースコード２ｂの語句Ｍ＿ＳＳ２は、ｄｅｆ．ｈファイルの１〜４行目に記述されている。なお、このＭ＿ＳＳ２は、構造体宣言であり、型は存在しない。また、ソースコード２ｂのｓｓ２２は、ｄｅｆ．ｈファイルの３行目に記述され、型はｃｈａｒである。ただし、ｓｓ２２は、構造体宣言Ｍ＿ＳＳ２（型宣言）の構造体要素（要素語句）であるので、構造体宣言のＭ＿ＳＳ２も語句情報として記憶されている。これにより、語句Ｖ３０、Ｍ＿ＳＳ２、ｓｓ２２の語句情報（語句、箇所、型、型宣言）は、例えば、図に示す語句情報３のようになる。なお、他の語句、例えば、ソースコード２ａのＶ１やｆｕｎｃ＿１の語句の語句情報も作成されるが、語句情報３においてはその記載を省略している。
【００１４】
定義・宣言検索手段１ｃは、型宣言の型を有する実体語句と要素語句とで表された語句の、定義・宣言箇所の検索要求が行われた場合、実体語句の定義・宣言箇所を、実体語句を有する語句情報３に基づいて検索する。そして、要素語句の定義・宣言を、要素語句を有しさらに検索した実体語句の型を型宣言として有している語句情報３に基づいて検索する。
【００１５】
例えば、図のソースコード４（ソースコード記憶手段１ａに記憶されているソースコード２ａと同じ内容）をレビュー対象のソースコードとし、Ｖ３０−＞ｓｓ２２の語句４ａを検索対象とする。この場合、定義・宣言検索手段１ｃは、Ｖ３０（実体語句）を有している語句情報３に基づいてＶ３０の定義・宣言箇所を検索する。これにより、Ｖ３０は、ａｂｃ．ｃファイルの６行目に定義されていると分かり、型がＭ＿ＳＳ２と分かる。また、定義・宣言検索手段１ｃは、ｓｓ２２（要素語句）を有している語句情報３に基づいてｓｓ２２の定義・宣言箇所を検索する。このとき、さらに、検索した実体語句Ｖ３０の型Ｍ＿ＳＳ２を、型宣言として有している語句情報３に基づいてｓｓ２２の定義・宣言箇所を検索する。これにより、ｓｓ２２は、ｄｅｆ．ｈファイルの３行目に定義されていると分かる。つまり、Ｖ３０−＞ｓｓ２２（実体語句と要素語句）を一度に検索要求した場合でも、一度に、Ｖ３０とｓｓ２２の定義・宣言されている箇所を検索することができる。
【００１６】
なお、検索要求される語句４ａのＶ３０およびｓｓ２２が実体語句、要素語句であることは、ソースコードの文法から認識することができる。例えば、語句４ａの−＞の記号により、この記号の前に記述されている語句は、構造体宣言の型を有する実体語句と認識でき、記号の後ろにある語句は、構造体宣言の要素である要素語句と認識することができる。
【００１７】
このように、検索情報記憶手段１ｂに、語句と、語句が定義・宣言されている箇所と、語句の型と、を含む語句情報３を記憶し、語句が型宣言を構成する要素語句となっている場合には、さらに型宣言の型も含めて記憶する。そして、実体語句Ｖ３０と要素語句ｓｓ２２とで表された語句４ａの定義・宣言箇所の検索要求が行われた場合、実体語句Ｖ３０の定義・宣言箇所を、実体語句Ｖ３０を有している語句情報３に基づいて検索し、要素語句ｓｓ２２の定義・宣言箇所を、要素語句ｓｓ２２を有し、さらに検索した実体語句Ｖ３０の型Ｍ＿ＳＳ２を型宣言として有している語句情報３に基づいて検索するようにした。これにより、実体語句Ｖ３０と要素語句ｓｓ２２との複数の語句で表される語句４ａを、人手を介することなく１度に検索でき、複数の語句で構成された語句４ａの定義・宣言を容易に検索することができる。
【００１８】
次に、コンピュータをソースコードレビュー支援装置に適用した場合の実施の形態を、図面を参照して詳細に説明する。
図２は、ソースコードレビュー支援装置の機能ブロック図である。ソースコードレビュー支援装置は、例えば、ＰＣ（Personal Computer）などのコンピュータによって実現される。図に示すソースコードレビュー支援装置の機能は、１台のコンピュータで実現するようにしてもよいし、様々なプログラムを管理するなどシステム規模が大きければ、各機能を、例えば、ネットワークで接続された複数のコンピュータで実現するようにしてもよい。
【００１９】
図に示すようにソースコードレビュー支援装置は、入出力部１１、定義・宣言検索部１２、ソースコード版数管理部１３、検索辞書作成部１４、検索辞書版数管理部１５、ソースコードＤＢ（ＤＢ：データベース）１６、および検索辞書ＤＢ１７を有している。
【００２０】
入出力部１１は、レビュー操作受付け部１１ａ、レビュー対象ソースコード表示部１１ｂ、および検索結果表示部１１ｃを有している。レビュー操作受付け部１１ａは、ユーザから、例えば、キーボードやマウスなどの操作を受付ける。レビュー対象ソースコード表示部１１ｂは、ユーザからの操作に応じたレビュー対象のソースコードを表示装置に表示する。検索結果表示部１１ｃは、ユーザから受付けた語句の定義・宣言されている箇所の検索結果を表示装置に表示する。
【００２１】
定義・宣言検索部１２は、レビュー操作受付け部１１ａによって受付けられた語句の定義・宣言されている箇所を検索し、検索した結果を入出力部１１の検索結果表示部１１ｃに送信する。
【００２２】
ソースコード版数管理部１３は、ユーザの操作によって入力されるソースコードの版数を管理し、ソースコードＤＢ１６に格納する。また、ユーザの操作によって指定された版数のソースコードをソースコードＤＢ１６から読み出す。
【００２３】
検索辞書作成部１４は、定義・宣言検索部１２がユーザの要求に沿った語句の定義・宣言箇所を検索できるように検索辞書を作成する。検索辞書作成部１４は、ユーザがソースコードをソースコードＤＢ１６に登録するときに、そのソースコードの検索辞書を作成する。
【００２４】
検索辞書版数管理部１５は、検索辞書作成部１４によって作成された検索辞書の版数を管理し、検索辞書を検索辞書ＤＢ１７に格納する。検索辞書版数管理部１５は、ソースコードＤＢ１６に格納されるソースコードの版数と一致するように検索辞書の版数を管理する。また、ユーザがソースコードのレビューを行うために、版数を指定してソースコードを呼び出した場合、その版数と同じ版数の検索辞書から、語句の定義・宣言箇所が検索されるように制御する。
【００２５】
ソースコードＤＢ１６は、ユーザの操作によってソースコードが格納されるデータベースである。検索辞書ＤＢ１７は、ソースコードＤＢ１６に格納されたソースコードの語句の定義・宣言箇所を検索するための検索辞書が格納されるデータベースである。
【００２６】
次に、検索辞書の作成について詳細に説明する。
図３は、検索辞書の作成を説明する図である。図３には、図２で示した検索辞書作成部１４、検索辞書版数管理部１５、ソースコードＤＢ１６、および検索辞書ＤＢ１７が示してある。また、図には、Ｃ言語で記述されたソースファイル２１およびヘッダファイル２２，２３が示してある。
【００２７】
ソースコードＤＢ１６は、図に示すようにＣ言語のソースコードが格納されるＣソースＤＢ１６ａと、ｔｙｐｅｄｅｆ、＃ｄｅｆｉｎｅ、ｓｔｒｕｃｔ、ｕｎｉｏｎ、ｅｎｕｍ、変数定義、関数定義などが記述されたヘッダファイルが格納されるヘッダＤＢ１６ｂとから構成されている。ソースファイル２１はユーザの操作によってＣソースＤＢ１６ａに格納され、ヘッダファイル２２，２３はヘッダＤＢ１６ｂに格納される。このとき、図２で示したソースコード版数管理部１３によってソースファイル２１とヘッダファイル２２，２３の版数が管理されて格納される。
【００２８】
ソースファイル２１およびヘッダファイル２２，２３が、ＣソースＤＢ１６ａおよびヘッダＤＢ１６ｂに格納されると、検索辞書作成部１４は、各ファイル２１〜２３に記述されている語句の定義・宣言箇所を検索できるための検索辞書を作成する。検索辞書版数管理部１５は、ユーザによって入力されるソースコードの版数と同じ版数を、作成された検索辞書に付与し、検索辞書ＤＢ１７に格納する。
【００２９】
次に、検索辞書ＤＢ１７について詳細に説明する。
図４は、検索辞書ＤＢのデータ構成例を示した図である。検索辞書ＤＢ１７は、図に示すようにタグ名、辞書種別、収容ファイル名、開始行番号、一致行番号、終了行番号、および属性Ａ，Ｂ，Ｃの欄を有している。
【００３０】
検索辞書作成部１４は、ソースファイル２１およびヘッダファイル２２，２３に記述されている、例えば、関数定義やプロトタイプ宣言、仮引数、変数定義、構造体宣言、構造体要素、列挙宣言、列挙要素、同意語宣言、マクロ宣言、関数呼び出し、変数参照などの語句を認識し、認識した語句をタグ名の欄に格納する。例えば、図３のソースファイル２１には、変数定義Ｖ１や関数定義ｆｕｎｃ＿１が記述されており、検索辞書作成部１４は、これらＶ１やｆｕｎｃ＿１を認識して、図４に示すようにタグ名の欄に格納する。また、ヘッダファイル２２，２３には、構造体宣言のＭ＿ＳＳ１や構造体要素のｓｓ１１が記述されており、検索辞書作成部１４は、これらＭ＿ＳＳ１やｓｓ１１を認識して、図４に示すようにタグ名の欄に格納する。
【００３１】
検索辞書作成部１４は、認識したタグ名の辞書種別を判断し、辞書種別の欄に格納する。具体的には、前述した関数定義やプロトタイプ宣言、仮引数、変数定義、構造体宣言、構造体要素、列挙宣言、列挙要素、同意語宣言、マクロ宣言、関数呼び出し、変数参照などを辞書種別の欄に格納する。例えば、タグ名Ｖ１は、図３のソースファイル２１に示すように変数定義されており、タグ名Ｖ１の辞書種別の欄には、図４に示すように変数定義が格納される。また、タグ名ｆｕｎｃ＿１は、図３のソースファイル２１に示すように関数定義であり、タグ名ｆｕｎｃ＿１の辞書種別の欄には、図４に示すように関数定義が格納される。また、タグ名ａは、図３のソースファイル２１に示すように仮引数であり、タグ名ａの辞書種別の欄には、図４に示すように仮引数が格納される。
【００３２】
なお、検索辞書作成部１４は、タグ名、辞書種別をプログラムの文法から認識することができる。例えば、セミコロンの前に語句が記述されており、その語句の前にスペースを挟んで型が示されていれば、その語句は、変数定義されているものと認識することができる。また、｛の前に語句が記述され、その語句の前にスペースを挟んでｖｏｉｄが記述されていれば、その語句は関数定義されているものと認識することができる。
【００３３】
検索辞書作成部１４は、認識したタグ（語句）が記述されているファイル名を収容ファイル名の欄に格納する。例えば、タグ名Ｖ１は、ソースファイル２１に記述され、ソースファイル２１のファイル名は／ｈｏｍｅ／ｖ１／ｓｒｃ／ａｂｃ．ｃなので、収容ファイル名の欄には、／ｈｏｍｅ／ｖ１／ｓｒｃ／ａｂｃ．ｃが格納される。
【００３４】
検索辞書作成部１４は、認識したタグの記述されている開始行番号、一致行番号、終了行番号を認識し、開始行番号、一致行番号、終了行番号の欄に格納する。例えば、タグ名Ｖ１は、図３のソースファイル２１に示すように１行目に記述されている。従って、タグ名Ｖ１の開始行番号、一致行番号、終了行番号は１，１，１であり、開始行番号、一致行番号、終了行番号の欄には、図４に示すように１，１，１が格納される。また、タグ名ｆｕｎｃ＿１は、図３のソースファイル２１に示すように２行目から記述が開始し、９行目で記述が終了している。また、タグ名ｆｕｎｃ＿１の記述が一致している行数は、２行目である。従って、タグ名ｆｕｎｃ＿１の開始行番号、一致行番号、終了行番号は２，２，９であり、開始行番号、一致行番号、終了行番号の欄には、図４に示すように２，２，９が格納される。
【００３５】
なお、検索辞書作成部１４は、タグ名の記述範囲をプログラムの文法から認識することができる。例えば、前述したようにｆｕｎｃ＿１は、関数であることを認識でき、その範囲は｛から｝までと認識することができる。
【００３６】
検索辞書作成部１４は、認識したタグ名が関数に所属する場合、タグが所属している関数名を属性Ａの欄に格納する。認識したタグ名が関数に属しない場合、関数の外にあることを示す関数外を属性Ａの欄に格納する。例えば、タグ名Ｖ１は、図３のソースファイル２１に示すように関数の外にあるので、タグ名Ｖ１の属性Ａの欄には、図４に示すように関数外が格納される。タグ名Ｖ１０は、図３のソースファイル２１に示すように関数ｆｕｎｃ＿１に属しているので、属性Ａの欄には、図４に示すようにｆｕｎｃ＿１が格納される。
【００３７】
検索辞書作成部１４は、認識したタグの型を認識し、認識した型を属性Ｂの欄に格納する。例えば、タグ名Ｖ１の型は、図３のソースファイル２１に示すようにＭ＿ＳＳ１であるので、属性Ｂの欄には、図４に示すようにＭ＿ＳＳ１が格納される。タグ名ｆｕｎｃ＿１の型は、図３のソースファイル２１に示すようにｖｏｉｄであるので、属性Ｂの欄には、図４に示すようにｖｏｉｄが格納される。一方、図３のヘッダファイル２２のタグ名Ｍ＿ＳＳ１は、構造体宣言をしているものであり、型を示していないので、図４に示すように属性Ｂの欄は空欄となる。なお、辞書種別が関数定義、仮引数、変数定義、構造体要素、列挙要素の場合に属性Ｂの欄に型が格納される。
【００３８】
検索辞書作成部１４は、認識したタグの辞書種別が構造体要素および列挙要素である場合、そのタグが属している構造体宣言および列挙宣言の宣言名を属性Ｃに格納する。例えば、タグ名ｓｓ１１は、図３のヘッダファイル２２に示すように構造体宣言Ｍ＿ＳＳ１の構造体要素である。従って、タグ名ｓｓ１１の属性Ｃの欄には、Ｍ＿ＳＳ１が格納される。つまり、タグが、構造体宣言および列挙宣言（型宣言）の要素となっているタグ（要素タグ）の場合、構造体宣言および列挙宣言の宣言名を属性Ｃに記憶する。
【００３９】
なお、検索辞書作成部１４は、構造体宣言、列挙宣言、構造体要素、列挙要素をプログラムの文法から認識することができる。例えば、構造体宣言の場合、ｓｔｒｕｃｔという記述があり、スペースを挟んで記述されている語句が、構造体宣言の宣言名となる。また、｛｝の間に記述される語句が構造体要素となる。
【００４０】
このように、ソースコードがユーザによって入力されると、入力されたソースコードの検索辞書が検索辞書作成部１４によって作成され、検索辞書ＤＢ１７に格納される。
次に、ソースコードのレビューについて説明する。
【００４１】
ユーザはソースコードのレビューをする場合、レビューしたいソースコードのファイル名および版数を指定する。すると、指定したソースコードが表示装置に表示される。
図５は、レビューするソースコードの表示画面例を示した図である。図に示すようにソースコードが表示装置の画面に表示される。ユーザは、画面に表示されたソースコードのレビューを行い、定義・宣言を検索したい語句があれば、例えば、その語句をキーボードで入力し、または、マウスによって選択する。
【００４２】
図に示す語句３１は、検索したい語句がマウスによって選択されている例を示している。図に示してないが画面には、例えば、検索ボタンが表示されており、このボタンをクリックすることによって、語句３１の定義・宣言が検索される。語句の定義・宣言の検索は、定義・宣言検索部１２によって行われ、以下、定義・宣言検索部１２の検索について詳細に説明する。
【００４３】
図６は、定義・宣言検索部の詳細な機能ブロック図である。図に示すように定義・宣言検索部１２は、検索制御部１２ａ、語句解析部１２ｂ、関数定義検索部１２ｃ、プロトタイプ宣言検索部１２ｄ、変数検索部１２ｅ、構造体宣言検索部１２ｆ、構造体要素検索部１２ｇ、列挙宣言検索部１２ｈ、マクロ検索部１２ｉ、辞書検索部１２ｊ、属性情報記憶部１２ｋ、およびソースコード読み出し部１２ｌを有している。
【００４４】
検索制御部１２ａは、ユーザが定義・宣言検索のために入力した語句の種別（辞書種別）を判断し、各検索部１２ｃ〜１２ｉに送信する。例えば、検索のためにユーザによって選択された語句が関数定義の語句であれば、関数定義検索部１２ｃへ送信する。ただし、語句が複数の語句から構成されている場合は、語句解析部１２ｂに送信し、語句解析部１２ｂによって分解された語句を各検索部１２ｃ〜１２ｉに送信する。なお、語句の辞書種別は、検索辞書で説明したように、プログラムの文法から認識することができる。
【００４５】
また、検索制御部１２ａは、各検索部１２ｃ〜１２ｉから返ってくる検索結果を受信する。検索結果は、例えば、検索した語句の定義・宣言が記述されているファイル名および語句の記述が開始されている行番号、語句が記述されている行番号、語句の記述が終了する行番号（図４に示した開始行番号、一致行番号、終了行番号）である。検索制御部１２ａは、受信した検索結果を、ソースコード読み出し部１２ｌに送信する。また、検索制御部１２ａは、ソースコード読み出し部１２ｌから返ってきたソースコードを、図２で示した入出力部１１の検索結果表示部１１ｃに送信する。
【００４６】
ソースコード読み出し部１２ｌは、図２で示したソースコード版数管理部１３を介してソースコードＤＢ１６と接続されている。ソースコード読み出し部１２ｌは、検索制御部１２ａから受け取った検索結果に対応するソースコードの記述を、ソースコードＤＢ１６から読み出す。このとき、ソースコード版数管理部１３は、ユーザがレビューのために読み出したソースコードと同じ版数のソースコードの記述を読み出すように制御する。読み出されたソースコードの記述は、検索制御部１２ａに送信される。検索制御部１２ａは、受信したソースコードの記述を図２で示した検索結果表示部１１ｃに送信し、検索結果表示部１１ｃは、受信したソースコードを表示装置に表示する。
【００４７】
語句解析部１２ｂは、複数の語句から構成されている語句を検索制御部１２ａから受信する。語句解析部１２ｂは、複数の語句から構成されている語句を１つ１つの語句に分解する。例えば、構造体要素への代入、参照の文は、複数の語句で構成されており（例えば、図５の語句３１）、この複数の語句を１つ１つの語句に分解する（語句３１の場合、Ｖ３０と−＞ｓｓ２２と．ｓｓ３２とに分解する）。語句解析部１２ｂは、分解した語句を検索制御部１２ａに送信する。
【００４８】
各検索部１２ｃ〜１２ｉは、検索制御部１２ａから受信した語句を、辞書検索部１２ｊに対し、検索依頼する。そして、辞書検索部１２ｊからの検索結果を検索制御部１２ａに送信する。
【００４９】
辞書検索部１２ｊは、図２で示した検索辞書版数管理部１５を介して検索辞書ＤＢ１７と接続されており、各検索部１２ｃ〜１２ｉからの検索依頼に応じて、検索辞書ＤＢ１７に対し、語句の定義・宣言の検索を行う。そして、検索結果を、依頼を受けた各検索部１２ｃ〜１２ｉに送信する。なお、検索辞書版数管理部１５は、ユーザがレビューしているソースコードの版数と同じ版数の検索辞書に対して検索を行うように制御する。
【００５０】
属性情報記憶部１２ｋは、辞書検索部１２ｊが検索辞書ＤＢ１７から検索した属性Ｂ，Ｃの情報を一時的に記憶する。
以下、図５に示した語句３１を検索する場合の図６の動作について説明する。ただし、ソースコードＤＢ１６には、図３で示したソースファイル２１、ヘッダファイル２２，２３が記憶され、検索辞書ＤＢ１７には、図４に示した検索辞書が格納されているとする。
【００５１】
ユーザに選択された語句３１の語句Ｖ３０−＞ｓｓ２２．ｓｓ３２は、検索制御部１２ａに送信される。
検索制御部１２ａは、受信した語句が複数の語句から構成されているので、語句解析部１２ｂに送信する。
【００５２】
語句解析部１２ｂは、受信した語句を、Ｖ３０、−＞ｓｓ２２、．ｓｓ３２と分解する。語句解析部１２ｂは、分解した語句を検索制御部１２ａに送信する。
検索制御部１２ａは、分解された語句の辞書種別を判断する。検索制御部１２ａは、Ｖ３０を変数定義、−＞ｓｓ２２および．ｓｓ３２を構造体要素と判断する。検索制御部１２ａは、Ｖ３０とＶ３０が属している関数名ｆｕｎｃ＿１を変数検索部１２ｅに送信し、−＞ｓｓ２２および．ｓｓ３２を構造体要素検索部１２ｇに送信する。
【００５３】
変数検索部１２ｅは、辞書検索部１２ｊに対し、Ｖ３０の検索依頼を行う。
辞書検索部１２ｊは、検索辞書ＤＢ１７において、タグ名がＶ３０、辞書種別が変数定義、属性Ａがｆｕｎｃ＿１または関数外であるものを検索する。これにより、辞書検索部１２ｊは、図４の例より、収容ファイル／ｈｏｍｅ／ｖ１／ｓｒｃ／ａｂｃ．ｃを取得する。また、開始行番号６、一致行番号６、終了行番号６を取得する。また、属性ＢよりＭ＿ＳＳ２を取得する（つまり、変数Ｖ３０は型Ｍ＿ＳＳ２であることを取得する）。辞書検索部１２ｊは、取得した属性Ｂの情報を属性情報記憶部１２ｋに記憶し、その他の情報を変数検索部１２ｅに返す。なお、属性Ａがｆｕｎｃ＿１または関数外であるものを検索するのは、例えば、Ｖ３０が他の関数において定義されている場合もあり、目的としないＶ３０に関する情報を検索する恐れがあるからである。つまり、ユーザが検索しているスコープ内の情報を取得するようにするためである。
【００５４】
変数検索部１２ｅは、取得した情報を、検索制御部１２ａを介してソースコード読み出し部１２ｌに送信する。ソースコード読み出し部１２ｌは、受信した情報に対応するソースコードの記述をソースコードＤＢ１６から取得する。例えば、前述の取得した情報の収容ファイル／ｈｏｍｅ／ｖ１／ｓｒｃ／ａｂｃ．ｃと、開始行番号６、一致行番号６、終了行番号６とから、ソースコードの記述を取得する。ソースコード読み出し部１２ｌは、取得したソースコードの記述を検索制御部１２ａに送信する。
【００５５】
検索制御部１２ａは、変数検索部１２ｅによって検索された情報と、ソースコード読み出し部１２ｌから受信したソースコードとを、図２に示した検索結果表示部１１ｃに送信する。検索結果表示部１１ｃは、受信した情報とソースコードとを表示装置に表示する。
【００５６】
次いで、構造体要素検索部１２ｇは、辞書検索部１２ｊに対し、−＞ｓｓ２２の検索依頼を行う。
辞書検索部１２ｊは、検索辞書ＤＢ１７において、タグ名がｓｓ２２、辞書種別が構造体要素、属性Ａがｆｕｎｃ＿１または関数外、および属性情報記憶部１２ｋより属性ＣがＭ＿ＳＳ２であるものを検索する。属性ＣがＭ＿ＳＳ２であるものを検索するのは、構造体要素ｓｓ２２を有している構造体宣言を識別するためである（属性Ｃより、ｓｓ２２の属している構造体宣言が分かり、この例の場合、属性情報記憶部１２ｋに記憶されているＭ＿ＳＳ２が構造体要素ｓｓ２２を有していることが分かる）。これにより、辞書検索部１２ｊは、図４の例より、収容ファイル／ｈｏｍｅ／ｖ１／ｉｎｃ／ｄｅｆ．ｈを取得し、また、開始行番号１、一致行番号３、終了行番号４を取得する。また、属性ＢよりＭ＿ＳＳ３３を取得する（つまり、ｓｓ２２は型Ｍ＿ＳＳ３であることを取得する）。辞書検索部１２ｊは、取得した属性Ｂの情報を属性情報記憶部１２ｋに記憶し、その他の情報を構造体要素検索部１２ｇに返す。
【００５７】
構造体要素検索部１２ｇは、取得した情報を、検索制御部１２ａを介してソースコード読み出し部１２ｌに送信する。ソースコード読み出し部１２ｌは、受信した情報に対応するソースコードの記述をソースコードＤＢ１６から取得する。例えば、取得した情報の収容ファイル／ｈｏｍｅ／ｖ１／ｉｎｃ／ｄｅｆ．ｈと、開始行番号１、一致行番号３、終了行番号４から、ソースコードの記述を取得する。ソースコード読み出し部１２ｌは、取得したソースコードの記述を検索制御部１２ａに送信する。
【００５８】
検索制御部１２ａは、構造体要素検索部１２ｇによって検索された情報と、ソースコード読み出し部１２ｌから受信したソースコードとを、図２に示した検索結果表示部１１ｃに送信する。検索結果表示部１１ｃは、受信した情報とソースコードとを表示装置に表示する。
【００５９】
次いで、構造体要素検索部１２ｇは、辞書検索部１２ｊに対し、．ｓｓ３２の検索依頼を行う。
辞書検索部１２ｊは、検索辞書ＤＢ１７において、タグ名がｓｓ３２、辞書種別が構造体要素、属性Ａがｆｕｎｃ＿１または関数外、および属性情報記憶部１２ｋより属性ＣがＭ＿ＳＳ３であるものを検索する。属性ＣがＭ＿ＳＳ３であるものを検索するのは、構造体要素ｓｓ３２を有している構造体宣言を識別するためである（属性Ｃより、ｓｓ３２の属している構造体宣言が分かり、この例の場合、属性情報記憶部１２ｋに記憶されているＭ＿ＳＳ３が構造体要素ｓｓ３２を有していることが分かる）。これにより、辞書検索部１２ｊは、図４の例より、収容ファイル／ｈｏｍｅ／ｖ１／ｉｎｃ／ｄｅｆ．ｈを取得する。また、開始行番号５、一致行番号７、終了行番号８を取得する。また、属性Ｂよりｃｈａｒを取得する（つまり、ｓｓ２２はｃｈａｒ型であることを取得する）。辞書検索部１２ｊは、取得した属性Ｂの情報を属性情報記憶部１２ｋに記憶し、その他の情報を構造体要素検索部１２ｇに返す。
【００６０】
構造体要素検索部１２ｇは、取得した情報を、検索制御部１２ａを介してソースコード読み出し部１２ｌに送信する。ソースコード読み出し部１２ｌは、受信した情報に対応するソースコードの記述をソースコードＤＢ１６から取得する。例えば、取得した情報の収容ファイル／ｈｏｍｅ／ｖ１／ｉｎｃ／ｄｅｆ．ｈと、開始行番号５、一致行番号７、終了行番号８から、ソースコードの記述を取得する。ソースコード読み出し部１２ｌは、取得したソースコードの記述を検索制御部１２ａに送信する。
【００６１】
検索制御部１２ａは、構造体要素検索部１２ｇによって検索された情報と、ソースコード読み出し部１２ｌから受信したソースコードとを、図２に示した検索結果表示部１１ｃに送信する。検索結果表示部１１ｃは、受信した情報とソースコードとを表示装置に表示する。このようにして、Ｖ３０−＞ｓｓ２２．ｓｓ３２の定義・宣言を検索し、表示装置に表示する。
【００６２】
図７は、検索結果の表示画面例を示した図である。図に示すように表示装置の画面には、語句３１のＶ３０−＞ｓｓ２２．ｓｓ３２の検索結果が表示される。図の表示部４１の６−＞６より、Ｖ３０は、ファイル／ｈｏｍｅ／ｖ１／ｓｒｃ／ａｂｃ．ｃの６行目から６行目にかけて表示されていることが分かり、：６よりＶ３０自体は６行目に表示されていることが分かる。また、その部分が実際に表示され、検索対象となった語句のＶ３０には、見やすいように、例えば、枠５１がかけられる。
【００６３】
また、図の表示部４２の１−＞４より、ｓｓ２２は、ファイル／ｈｏｍｅ／ｖ１／ｉｎｃ／ｄｅｆ．ｈの１行目から４行目にかけて表示されていることが分かり、：３よりｓｓ２２自体は３行目に表示されていることが分かる。また、その部分が実際に表示され、検索対象となった語句ｓｓ２２には、見やすいように、例えば、枠５２がかけられる。
【００６４】
また、図の表示部４３の５−＞８より、ｓｓ３２は、ファイル／ｈｏｍｅ／ｖ１／ｉｎｃ／ｄｅｆ．ｈの５行目から８行目にかけて表示されていることが分かり、：７よりｓｓ３２自体は７行目に表示されていることが分かる。また、その部分が実際に表示され、検索対象となった語句ｓｓ３２には、見やすいように、例えば、枠５３がかけられる。検索された語句の結果を同一画面に表示することにより、ユーザのレビューが容易となる。
【００６５】
このように、検索辞書ＤＢ１７に、語句（タグ名）と、語句が定義・宣言されている箇所と、語句の型と、を含む検索辞書を記憶し、語句が構造体宣言の構造体要素となっている場合には、構造体宣言の宣言名も含めて記憶する。そして、構造体宣言の宣言名で定義された変数定義と構造体要素とで表される語句の定義・宣言箇所の検索要求が行われた場合、変数定義の定義・宣言箇所を、変数定義の語句を有している検索辞書に基づいて検索し、構造体要素の定義・宣言箇所を、構造体要素を有し、さらに検索した変数定義の型を有している検索辞書に基づいて検索するようにした。これにより、複数の語句で表される語句の定義・宣言を、人手を介することなく１度に検索でき、複数の語句で構成された語句の定義・宣言を容易に検索することができる。
【００６６】
なお、列挙型も同様に定義・宣言の検索を行うことができる。この場合、列挙型の列挙宣言が、構造体宣言に対応し、列挙要素が構造体要素に対応し、上記処理と同様にして、語句の定義・宣言を検索することができる。
【００６７】
（付記１）  ユーザのソースコードレビューを支援するコンピュータにおいて、
レビュー対象となるソースコードを記憶したソースコード記憶手段と、
前記ソースコードを構成している語句ごとに前記語句と前記語句が定義・宣言されている箇所と前記語句の型とを含む語句情報を記憶し、前記語句が型宣言を構成する要素語句となっている場合には、さらに前記型宣言も含めて記憶した検索情報記憶手段と、
前記型宣言の型を有する実体語句と前記要素語句とで表される前記語句の定義・宣言箇所の検索要求が行われた場合、前記実体語句の定義・宣言箇所を、前記実体語句を有している前記語句情報に基づいて検索し、前記要素語句の定義・宣言箇所を、前記要素語句を有しさらに検索した前記実体語句の型を前記型宣言として有している前記語句情報に基づいて検索する定義・宣言検索手段と、
を有することを特徴とするコンピュータ。
【００６８】
（付記２）  前記ソースコードの文法を基に前記語句の定義・宣言、型、および型宣言を認識し、前記検索情報記憶手段を作成する検索情報作成手段を有することを特徴とする付記１記載のコンピュータ。
【００６９】
（付記３）  前記検索情報作成手段は、前記ソースコードが前記ソースコード記憶手段に記憶されるとき、前記検索情報記憶手段を作成することを特徴とする付記２記載のコンピュータ。
【００７０】
（付記４）  前記定義・宣言検索手段によって検索された前記実体語句と前記要素語句との定義・宣言箇所を同一画面に表示する表示手段を有することを特徴とする付記１記載のコンピュータ。
【００７１】
（付記５）  前記型宣言はＣ言語の構造体宣言であり、前記要素語句は構造体要素であることを特徴とする付記１記載のコンピュータ。
（付記６）  前記型宣言はＣ言語の構造体宣言であり、前記実体語句は、前記型宣言の型を有する構造体変数であることを特徴とする付記１記載のコンピュータ。
【００７２】
（付記７）  前記定義・宣言検索手段は、前記実体語句と前記要素語句とを分割する語句分割手段を有することを特徴とする付記１記載のコンピュータ。
（付記８）  前記語句情報の前記語句が定義・宣言されている箇所は、前記語句が記述されているファイル名および記述されている行を示していることを特徴とする付記１記載のコンピュータ。
【００７３】
（付記９）  前記語句情報は、前記語句を含んでいる関数名を有していることを特徴とする付記１記載のコンピュータ。
【図面の簡単な説明】
【００７４】
【図１】コンピュータの概要を説明する図である。
【図２】ソースコードレビュー支援装置の機能ブロック図である。
【図３】検索辞書の作成を説明する図である。
【図４】検索辞書ＤＢのデータ構成例を示した図である。
【図５】レビューするソースコードの表示画面例を示した図である。
【図６】定義・宣言検索部の詳細な機能ブロック図である。
【図７】検索結果の表示画面例を示した図である。
【符号の説明】
【００７５】
１ａ  ソースコード記憶手段
１ｂ  検索情報記憶手段
１ｃ  定義・宣言検索手段
２ａ，２ｂ，４  ソースコード
３  語句情報
４ａ  語句
【図１】
2007034654.tif 000003
【図２】
2007034654.tif 000004
【図３】
2007034654.tif 000005
【図４】
2007034654.tif 000006
【図５】
2007034654.tif 000007
【図６】
2007034654.tif 000008
【図７】
2007034654.tif 000009