(57)【要約】【課題】プログラムのみに基づいて、プログラムにおける条件分岐が適切かどうかを判定できるプログラム解析装置などを提供する。【解決手段】本願発明に係るプログラム解析装置１００は、ソースコード１３１から所定の条件を満たす条件分岐を抽出する分岐抽出部１と、分岐抽出部１にて抽出された条件分岐を分類する分岐分類部２と、分岐抽出部１が抽出した条件分岐のうち、同分類に属する条件分岐に含まれる条件式群の相違を判定する相違判定部３と、各種情報を格納する記憶部４と、ソースコード１３１の入力を受け付けるソースコード入力部５と、相違判定部３の判定結果を出力する条件相違出力部６とを備える。【選択図】図２
2009244939.tif 000002
【特許請求の範囲】
【請求項１】
プログラムコードにおいて条件分岐が適切に実装されているかを解析するためのプログラム解析装置であって、
プログラムコードから、被評価式と定数とを比較する比較式からなる条件式群を持つ条件分岐を抽出する分岐抽出部と、
抽出された各前記条件分岐が持つ前記条件式群が互いに一致するかを判定する判定部と、
前記判定部による判定結果を出力する出力部とを備える、プログラム解析装置。
【請求項２】
抽出された前記条件分岐を、前記被評価式によって分類する分岐分類部をさらに備え、
前記判定部は、共通の前記分類に属する各前記条件分岐が持つ前記条件式群が互いに一致するかを判定する、請求項１に記載のプログラム解析装置。
【請求項３】
前記分岐抽出部は、それぞれが互いに異なる前記定数を持つ複数の前記条件式からなる前記条件式群を持つ前記条件分岐を抽出する、請求項１または２に記載のプログラム解析装置。
【請求項４】
前記分岐分類部は、抽出された前記条件分岐を、前記被評価式のデータ型によって分類する、請求項１から３のいずれか１項に記載のプログラム解析装置。
【請求項５】
プログラムコードにおいて条件分岐が適切に実装されているかを解析するためのプログラム解析方法であって、
プログラムコードから、被評価式と定数とを比較する比較式からなる条件式群を持つ条件分岐を抽出するステップと、
抽出された各前記条件分岐が持つ前記条件式群が互いに一致するかを判定するステップとを備える、プログラム解析方法。
【請求項６】
プログラムコードにおいて条件分岐が適切に実装されているかをコンピュータに解析させためのプログラム解析プログラムであって、
プログラムコードから、被評価式と定数とを比較する比較式からなる条件式群を持つ条件分岐を抽出するステップと、
抽出された各前記条件分岐が持つ前記条件式群が互いに一致するかを判定するステップと、
前記判定部による判定結果を出力するステップとを、前記コンピュータに実行させるプログラム解析プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムを解析するためのプログラム解析装置、プログラム解析方法およびプログラム解析プログラムに関し、特に、プログラムにおいて条件分岐が適切に実装されているかどうかを解析するプログラム解析装置などに関する。
【背景技術】
【０００２】
近年の電子情報機器の高性能化・多機能化により、ソフトウェアの規模は年々増大している。規模の増大に伴ない、開発するソフトウェアの品質を確保するためのテストの費用や不具合の発生するリスクも高まっている。
【０００３】
このため、作成されたソースコードをもとにソフトウェアの検証を行ない、テストの実施に先立ってソフトウェアの品質を評価することが一般的に行なわれている。
【０００４】
ところで、ソースコードには、一般に、多数の条件分岐が含まれるが、各条件分岐が、全ての条件を網羅しているかどうかを、人間がソースコードを目視して確認することは容易ではない。
【０００５】
例えば、複数種類の記録メディアを挿抜することが可能な機器の動作をプログラムする際には、いずれかの記録メディアが挿抜された場合や、挿入された記録メディアの種別が判断できない場合、あるいは、記録メディアが挿入されていない場合のそれぞれに対応する振舞いを実装するためには、しばしば条件分岐が用いられる。このような動作を実装したプログラムにおいて、あるメディアの挿入状態に対応する振舞いを実現する実装が欠落しているかどうかを目視で確認するのは容易ではない。
【０００６】
そこで、従来、ソースコードを解析して、ソースコードの問題点を発見することが試みられている。たとえば、特許文献１には、ソースコードから、条件分岐を構成する条件および条件に対応して実行されるアクションを抽出し、条件とアクションとの相関図を生成し、条件とアクションとの対応関係の欠落や重複の発見を容易にすることが開示されている。
【特許文献１】特開２００７−８０１１３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
特許文献１に記載の技術を用いてソースコードの解析を行なった場合、条件分岐に漏れがあるかどうかを判断するためには、生成された相関図とそのソースコードが実現する振舞いについての仕様書とを比較することが必要となる。
【０００８】
しかし、ソースコード上に数多く存在する条件分岐について、逐一仕様書との比較をすることは容易ではない。また、ソースコードが実現するすべての振舞いを表わした仕様書が存在するとは限らない。
【０００９】
本願発明は、上述の問題を解決するためになされたものであって、プログラムのみに基づいて、プログラムにおける条件分岐が適切かどうかを判定できるプログラム解析装置などを提供することを課題とする。
【課題を解決するための手段】
【００１０】
１つの局面に係る本願発明は、プログラムコードにおいて条件分岐が適切に実装されているかを解析するためのプログラム解析装置であって、プログラムコードから、被評価式と定数とを比較する比較式からなる条件式群を持つ条件分岐を抽出する分岐抽出部と、抽出された各条件分岐が持つ条件式群が互いに一致するかを判定する判定部と、判定部による判定結果を出力する出力部とを備える。
【００１１】
好ましくは、抽出された条件分岐を、被評価式によって分類する分岐分類部をさらに備え、判定部は、共通の分類に属する各条件分岐が持つ条件式群が互いに一致するかを判定する。
【００１２】
好ましくは、分岐抽出部は、それぞれが互いに異なる定数を持つ複数の条件式からなる条件式群を持つ条件分岐を抽出する。
【００１３】
好ましくは、分岐分類部は、抽出された条件分岐を、被評価式のデータ型によって分類する。
【００１４】
他の局面に係る本願発明は、プログラムコードにおいて条件分岐が適切に実装されているかを解析するためのプログラム解析方法であって、プログラムコードから、被評価式と定数とを比較する比較式からなる条件式群を持つ条件分岐を抽出するステップと、抽出された各条件分岐が持つ条件式群が互いに一致するかを判定するステップとを備える。
【００１５】
さらに他の局面に係る本願発明は、プログラムコードにおいて条件分岐が適切に実装されているかをコンピュータに解析させためのプログラム解析プログラムであって、プログラムコードから、被評価式と定数とを比較する比較式からなる条件式群を持つ条件分岐を抽出するステップと、抽出された各条件分岐が持つ条件式群が互いに一致するかを判定するステップと、判定部による判定結果を出力するステップとを、コンピュータに実行させる。
【発明の効果】
【００１６】
本発明によれば、プログラムを解析し、プログラムに含まれる各条件分岐が持つ条件式群が互いに一致するか判定することができる。よって、プログラムのみに基づいて、プログラムにおける条件分岐の実装が適切かどうかを判定できる。
【発明を実施するための最良の形態】
【００１７】
以下、図面を参照しつつ、本発明の実施の形態について説明する。以下の説明では、同一の部分には同一の符号を付してある。それらの名称および機能も同じである。したがってそれらについての詳細な説明は繰り返さない。
【００１８】
＜１．ハードウェア構成＞
本実施の形態に係るプログラム解析装置１００のハードウェア構成を図１を参照して説明する。図１は、本実施の形態に係るプログラム解析装置のハードウェア構成を示す図である。
【００１９】
プログラム解析装置１００は、コンピュータ本体１０２と、表示装置としてのモニタ１０４と、入力装置としてのキーボード１１０およびマウス１１２とを備える。モニタ１０４、キーボード１１０、マウス１１２は、いずれも、バス１０５を介してコンピュータ本体１０２に接続される。
【００２０】
コンピュータ本体１０２は、ＣＰＵ（Central  Processing  Unit）１２０と、ＲＯＭ（Read  Only  Memory）およびＲＡＭ（Random  Access  Memory）を含むメモリ１２２と、ハードディスク１３０と、フレキシブルディスク（Flexible  Disk、以下「ＦＤ」と呼ぶ）ドライブ１０６と、光ディスクドライブ１０８と、外部とデータの授受を行なうための通信インターフェイス１２８とを含む。
【００２１】
ＦＤドライブ１０６は、ＦＤ１１６に情報を読み書きする。光ディスクドライブ１０８は、ＣＤ（Compact  Disc）−ＲＯＭ、ＤＶＤ（Digital  Versatile  Disk）−ＲＯＭ等の光ディスク１１８上の情報を読み込む。
【００２２】
ハードディスク１３０は、解析対象となるプログラムのソースコード１３１と、分岐情報１３２と、分岐カウンタ１３４と、条件式カウンタ１３５と、分類定義１３６と、分岐分類一覧１３７と、相違情報１３８と、条件分岐の不具合を抽出するためのプログラム１３９とを格納する。なお、ハードディスク１３０は、直接アクセスメモリ装置の一例であって、フラッシュメモリなどの他の種類の記憶装置を代わりに用いても構わない。
【００２３】
分岐情報１３２は、ソースコード１３１に含まれる条件分岐についての情報である。ここで、条件分岐とは、条件式の値によって処理内容を変える命令のことを指す。
【００２４】
分岐情報１３２は、１つまたは複数の分岐情報レコードからなる。各分岐情報レコードは、各条件分岐に固有の分岐ＩＤおよび条件分岐がソースコードに記述されている行番号を含む。また、分岐情報１３２は、条件分岐に含まれる条件式に関する条件式情報１３３を含む。
【００２５】
条件式情報１３３は、１つまたは複数の条件式レコードからなる。各条件式レコードは、各条件式に固有の条件式ＩＤおよび条件式がソースコードに記述されている行番号を含む。
【００２６】
分岐カウンタ１３４および条件式カウンタ１３５は、それぞれ、分岐ＩＤおよび条件式ＩＤを決定するために用いられる。
【００２７】
分類定義１３６は、条件分岐の属する分類を定義する情報である。本実施の形態では、条件分岐に含まれる条件式の左辺値のデータ型によって、条件分岐の分類が定義される。
【００２８】
分岐分類一覧１３７は、各条件分岐とその分類とを対応付けた情報である。分岐分類一覧１３７は、分類ごとのレコードからなり、各レコードは、共通の分類を持つ条件分岐で構成される。
【００２９】
相違情報１３８は、各条件分岐の下の条件式群が互いに相違するかどうかを表わす情報である。
【００３０】
演算処理装置として機能するＣＰＵ１２０は、メモリ１２２をワーキングメモリとして、上述したプログラムに対応した処理を実行する。
【００３１】
上述のプログラムは、ＣＰＵ１２０により実行されるソフトウェアである。一般的に、こうしたソフトウェアは、ＣＤ−ＲＯＭ１１８、ＦＤ１１６等の記憶媒体に格納されて流通し、光ディスクドライブ１０８またはＦＤドライブ１０６等により記憶媒体から読み取られてハードディスク１３０に一旦格納される。
【００３２】
また、上述のプログラムは、コンピュータ本体１０２がネットワークに接続されている場合には、ネットワーク上のサーバから読み出されるものであってもよい。このようなプログラムは、例えば、サーバから、一旦ハードディスク１３０にコピーされ、さらに、メモリ１２２中のＲＡＭに読み出されてＣＰＵ１２０により実行される。あるいは、ハードディスク１３０に格納することなくＲＡＭに直接ロードして実行される。逆に、プログラム解析装置１００は、通信インターフェイス１２８を介して、各処理を外部のコンピュータに実行させ、その結果をハードディスク１３０に格納させてもよい。
【００３３】
なお、ＣＤ−ＲＯＭ１１８は、コンピュータ本体に対してインストールされるプログラム等の情報を記録可能な媒体であれば、他の媒体、たとえば、ＤＶＤ−ＲＯＭ（Digital Versatile Disc）やメモリーカードなどでもよく、その場合は、コンピュータ本体１０２には、これらの媒体を読み取ることが可能なドライブ装置が設けられる。また、バス１０５には、カセット形式の磁気テープを着脱自在に装着してアクセスする磁気テープ装置が接続されていてもよい。
【００３４】
図４に示したコンピュータのハードウェア自体およびその動作原理は一般的なものである。したがって、本発明の機能を実現するにあたり本質的な部分は、ＦＤ１１６、ＣＤ−ＲＯＭ１１８、ハードディスク１３０等の記憶媒体に記憶されたソフトウェアである。
【００３５】
＜２．機能的構成＞
本実施の形態に係るプログラム解析装置１００の機能的構成について、図２を参照して説明する。図２は、プログラム解析装置１００の機能的構成を説明するためのブロック図である。
【００３６】
プログラム解析装置１００は、ソースコード１３１から所定の条件を満たす条件分岐を抽出する分岐抽出部１と、分岐抽出部１にて抽出された条件分岐を分類する分岐分類部２と、分岐抽出部１が抽出した条件分岐のうち、同分類に属する条件分岐に含まれる条件式群の相違を判定する相違判定部３と、各種情報を格納する記憶部４と、ソースコード１３１の入力を受け付けるソースコード入力部５と、相違判定部３の判定結果を出力する条件相違出力部６とを備える。
【００３７】
図１の構成で言うと、不具合を抽出するためのプログラム１３９を実行するＣＰＵ１２０が、分岐抽出部１、分岐分類部２、相違判定部３の機能を果たす。ハードディスク１３０が記憶部４の機能を果たす。ＦＤドライブ１０６、光ディスクドライブ１０８、通信インターフェイス１２８が、ソースコード入力部５の機能を果たす。モニタ１０４が条件相違出力部６の機能を果たす。
【００３８】
分岐抽出部１は、ソースコード取得部１０と、構文解析部１１と、ｉｆ文抽出部１２と、ｓｗｉｔｃｈ文抽出部１３と、分岐情報生成部１４とを含む。
【００３９】
ソースコード取得部１０は、記憶部４からソースコード１３１を読み込む。なお、記憶部４を介さず、ソースコード入力部５に入力されたソースコードを直接取得するという構成であっても構わない。
【００４０】
構文解析部１１は、ソースコード取得部１０により読み取られたソースコード１３１を、構文解析し、ｉｆ文、ｓｗｉｔｃｈ文などの条件分岐を抽出する。
【００４１】
ｉｆ文抽出部１２は、構文解析部１１の解析結果に基づいて、被評価値が定数値と一致するかを判定する比較式からなる条件式群をもつｉｆ文による条件分岐を抽出する。
【００４２】
ｓｗｉｔｃｈ文抽出部１３は、構文解析部１１の解析結果に基づいて、ｓｗｉｔｃｈ文による条件分岐を抽出する。
【００４３】
分岐情報生成部１４は、ｉｆ文抽出部１２が抽出した条件分岐およびｓｗｉｔｃｈ文抽出部１３が抽出した条件分岐に基づいて、被評価値と定数値とを比較する比較式からなる条件式群をもつ条件分岐に関する分岐情報１３２を作成し、記憶部４に格納する。
【００４４】
分岐分類部２は、分岐抽出部１が抽出した条件分岐を分類する。分岐分類部２は、分類取得部２１と、一覧作成部２２とを含む。
【００４５】
分岐分類部２は、記憶部４に格納された分類定義１３６を参照して、分岐抽出部１が抽出した条件分岐を分類する。また、分岐抽出部１が抽出した条件分岐に基づいて、分類定義１３６を更新する。
【００４６】
一覧作成部２２は、分類定義１３６に基づいて、各条件分岐とその分類とを対応付けた分岐分類一覧１３７を作成し、記憶部４に格納する。
【００４７】
相違判定部３は、共通の分類に属する条件分岐のそれぞれが持つ条件式群が、相違するかどうかを判定する。相違判定部３は、分岐群選択部３０と、条件式取得部３１と、条件式比較部３２とを含む。
【００４８】
分岐群選択部３０は、分岐分類一覧１３７を参照して、所定の分類に属する条件分岐からなる条件分岐群を選択する。ここで、選択に用いられる分類は、予め定められたものであってもよいし、キーボード１１０やマウス１１２などの入力部によって指定されるものであってもよい。
【００４９】
条件式取得部３１は、分岐群選択部３０により選択された各条件分岐の含む条件式群を取得する。
【００５０】
条件式比較部３２は、条件式取得部３１が取得した各条件分岐の含む条件式群を比較し、比較結果を条件相違出力部６に出力する。あるいは、比較結果を、相違情報１３８として、記憶部４に格納する。
【００５１】
＜３．条件分岐の実装の適切性について＞
本実施の形態に係るプログラム解析処理について説明する前に、図３を参照して、条件分岐の実装の適切性について説明しておく。図３は、本実施の形態において解析対象となるソースコードを示す図である。
【００５２】
図３で示されるソースコードはＤＶＤプレーヤーのメディア挿入、再生、取り出しの処理を模式的に表したコードの一部である。それぞれの処理においてＤＶＤのメディア種別を判別して、それぞれのメディアに応じた処理に分岐するものである。
【００５３】
それぞれの条件分岐において、メディアがDVD-ROM、DVD-Rの２通りの場合と、メディアが識別不可能な場合とを合わせた、合計３通りの場合に対応する条件式を実装しなければならない。
【００５４】
図３で示されるソースコードにおいては、get_media_type()関数の戻り値を、MEDIA_  というプレフィックスを備えた定数とそれぞれ比較することによって条件分岐するようコーディングされている。ここで、定数MEDIA_DVD_ROMはメディアがDVD_ROMであることを示す定数である。定数MEDIA_DVD_R、MEDIA_DVD_RW、MEDIA_UNKNOWNは、それぞれ、メディアがDVD-R、DVD-RW、識別不可能なメディアであることを示す定数である。
【００５５】
ところが、図３で示されるソースコードにおいては、media_inserted()関数において変数mediaの値がMEDIA_UNKNOWNである場合の条件式がなく、認識不可能なメディアが挿入されている時にmedia_inserted()関数が呼び出された場合に不具合を起こす危険性がある。つまり、条件分岐の実装が不適切である。
【００５６】
本発明は、条件分岐に含まれる条件式群の相違を判定することで、条件分岐が適切に実装されているかどうかを判定する。上述のような条件式の漏れなど適切に条件分岐が実装されていない箇所は、条件式群の相違をもたらすため、本発明によって検出される。
【００５７】
＜４．処理の流れ＞
（４．１  概要）
図４は、本実施の形態における条件分岐に含まれる条件式群の相違を判定する手順を表わしたフローチャートである。図４を用いて、本実施の形態における条件分岐に含まれる条件式群の相違の判定手順を説明する。
【００５８】
ステップＳ４０１において、分岐抽出部１は、ソースコード１３１から、被評価値が定数値と一致するかを判定する条件式からなる条件式群をもつ条件分岐を抽出する。
【００５９】
ステップＳ４０３において、分岐分類部２は、分岐抽出部１が抽出した条件分岐を、分類する。
【００６０】
ステップＳ４０５において、相違判定部３は、分岐分類部２による分類結果に基づいて、ステップＳ４０１で抽出された条件分岐のうち同分類に属する条件分岐のそれぞれが持つ条件式群が、相違しないかを判定する。また、判定結果を条件相違出力部６に出力する。
【００６１】
以上のステップＳ４０１からステップＳ４０５までの手順により、入力されたソースコードに含まれる各条件分岐の条件式群の相違についての情報が、条件相違出力部６に出力される。
【００６２】
（４．２  条件分岐の抽出の詳細）
図５は、ステップＳ４０１の詳細な手順を表わすフローチャートである。図５を用いてステップＳ１１０における条件分岐の抽出の詳細な手順について説明する。
【００６３】
ステップＳ５０１において、分岐抽出部１に含まれる構文解析部１１は、ソースコード取得部１０が取得したソースコード１３１に対して、構文解析を行なう。そして、条件分岐を抽出する。この際、条件分岐のソースコード１３１における行数も抽出し、記憶部４に格納しておく。図３に示すソースコードに対して構文解析部１１が構文解析を行なった場合、２０行目、４６行目、および５１行目のｉｆ文と、６行目と、２７行目のｓｗｉｔｃｈ文とが抽出される。
【００６４】
ステップＳ５０３において、ｉｆ文抽出部１２は、構文解析部１１により抽出されたｉｆ文の中から、所定の条件を満たすｉｆ文を抽出する。
【００６５】
また、ステップＳ５０５において、ｓｗｉｔｃｈ文抽出部１３は、構文解析部１１により抽出されたｓｗｉｔｃｈ文の中から、所定の条件を満たすｓｗｉｔｃ文を抽出する。
【００６６】
ステップＳ５０３およびステップＳ５０５の処理の詳細については、後述する。なお、ステップＳ５０３とステップＳ５０５の行なわれる順序は図５に示したものに限られない。この順序は入れ替わってもよいし、また、両処理が並行に行なわれてもよい。
【００６７】
ステップＳ５０７において、分岐情報生成部１４は、ｉｆ文抽出部１２の抽出したｉｆ文およびｓｗｉｔｃｈ文抽出部１３の抽出したｓｗｉｔｃｈ文に基づいて、分岐情報１３２を生成する。
【００６８】
つづいて、上述のステップＳ５０３の詳細について図６を参照して説明する。図６は、ステップＳ５０３の手順の詳細を示したフローチャートである。
【００６９】
ステップＳ６０１において、ｉｆ文抽出部１２は、構文解析部１１の構文解析結果に含まれるｉｆ文から、ｉｆ文抽出部１２によって走査されていないｉｆ文を選択する。
【００７０】
つづいて、ｉｆ文抽出部１２は、ステップＳ６０３において、ステップＳ６０１で選択されたｉｆ文が２つ以上の条件式を含むかどうかを判定する。ここで、ｅｌｓｅ節を含まないｉｆ文は条件式を一つしか含まないので２つ以上の条件式を含まないものとして判定する。また、ｅｌｓｅ節を含んでいても、ｅｌｓｅ節の処理がｉｆ文とならない場合、つまりｉｆ〜  ｅｌｓｅ  ｉｆ〜とならない場合は、条件式を一つしか含まないので、２つ以上の条件式を含まないものとして判定する。
【００７１】
ステップＳ６０３において、ｉｆ文抽出部１２がステップＳ６０１において選択されたｉｆ文が２つ以上の条件式を含むと判定した場合（ステップＳ６０３においてＹｅｓ）、ステップへＳ６０５へと処理を進める。さもなくば（ステップＳ６０５においてＮｏ）、後述のステップＳ６２１へと処理を進める。
【００７２】
ステップＳ６０５において、ｉｆ文抽出部１２は、ステップＳ６０１において選択されたｉｆ文についての分岐情報レコードを新規に作成し、作成した分岐情報レコードに、選択されたｉｆ文が記述されている行番号、分岐ＩＤ、およびファイル名を書き込む。ここで、ファイル名とは、ステップＳ６０１において選択されたｉｆ文を含むソースコードを特定する情報であり、本実施の形態においては、ステップＳ６０１において選択されたｉｆ文が記述されたソースファイルのパス名を用いることとする。また、本実施の形態においては、分岐ＩＤに分岐カウンタ１３４の値を書き込むこととする。ｉｆ文抽出部１２は、分岐情報レコードの作成の都度、分岐カウンタ１３４の値をインクリメントする。
【００７３】
つづいて、ｉｆ文抽出部１２は、ステップＳ６０７において、ステップＳ６０１において選択されたｉｆ文に含まれる条件式のうち、まだｉｆ文抽出部１２によって走査されていない条件式を選択する。
【００７４】
つづいて、ｉｆ文抽出部１２は、ステップＳ６０９において、ステップＳ６０７において選択された条件式が、等価演算子（＝＝）を用いた比較式であるかを判定する。ここで、等価演算子を用いられている場合は（ステップＳ６０９においてＹｅｓ）、次のステップＳ６１１へと進む。さもなくば（ステップＳ６０９においてＮｏ）、現在判定を行なっている条件分岐は抽出の対象ではないと判断し、ステップＳ６２３へと進み、選択されたｉｆ文についての分岐情報レコードを破棄し、分岐情報の抽出処理を終了する。
【００７５】
つづいて、ｉｆ文抽出部１２は、ステップＳ６１１において、条件式の等価演算子の右オペランドが単項定数式であるかどうかを判断する。ここで、単項定数式であると判断されたならば（ステップＳ６１１においてＹｅｓ）、次のステップＳ６１３へと進む。さもなくば（ステップＳ６１１においてＮｏ）、現在判定を行なっている条件分岐は抽出の対象ではないと判断し、ステップＳ６２３へと進み、選択されたｉｆ文についての分岐情報レコードを破棄し、分岐情報の抽出処理を終了する。
【００７６】
つづいて、ステップＳ６１３において、ｉｆ文抽出部１２は条件式レコードを新規に作成し、作成したレコードに、ステップＳ６０７で選択された各条件式の行番号を書き込む。また、ステップＳ６０７で選択された各条件式の左オペランドを左辺値として、各条件式のデータ型を左辺値の型として、各条件式の右オペランドを右辺値として、それぞれレコードに書き込む。ここで、ステップＳ６０７において選択された条件式の走査が完了する。
【００７７】
つづいて、ステップＳ６１５において、ｉｆ文抽出部１２は、ステップＳ６０１で選択されたｉｆ文に含まれる条件式を全て走査したかどうかを判定する。全ての条件式が走査されたと判定された場合（ステップＳ６１５においてＹｅｓ）、次のステップＳ６１７へと処理を進める。さもなくば（ステップＳ６１５においてＮｏ）、ステップＳ６０７へと処理を戻し、ステップＳ６０７からステップＳ６１５までの処理を繰り返す。
【００７８】
ステップＳ６１７において、ｉｆ文抽出部１２は、条件式情報１３３を走査し、ステップＳ６０５において分岐情報レコードに書き込まれた分岐ＩＤと同じＩＤをもつ条件式ｒレコードのそれぞれの左辺値が全て一致するかどうかを判定する。ここで、全て一致すると判定されたならば（ステップＳ６０７においてＹｅｓ）、次のステップＳ６１９へと進む。さもなくば（ステップＳ６０７においてＮｏ）、現在判定を行なっている条件分岐は抽出の対象ではないと判断し、ステップＳ６２３へと進み、選択されたｉｆ文についての分岐情報レコードを破棄し、分岐情報の抽出処理を終了する。
【００７９】
ステップＳ６１９において、ｉｆ文抽出部１２は、ステップＳ６０５において作成した分岐情報レコードに、ステップＳ６１７にて一致した左辺値を書き込む。ここで、ステップＳ６０１において選択されたｉｆ文の走査が完了する。
【００８０】
つづいて、ｉｆ文抽出部１２は、ステップＳ６２１において、構文解析部１１が構文解析を行なった結果に含まれるｉｆ文を全て走査したかどうかを判定する。ここで、全て走査したと判定されたならば（ステップＳ６１２においてＹｅｓ）、ステップＳ５０３の処理が完了する。さもなくば（ステップＳ６１２においてＮｏ）、ステップＳ６０１へと処理を戻し、ステップＳ６０１からステップＳ６２１までの処理を繰り返す。
【００８１】
図７はステップＳ５０５の処理手順の詳細を表わすフローチャートである。図７を用いてステップＳ５０５の手順の詳細について説明する。
【００８２】
まず、ｓｗｉｔｃｈ文抽出部１３は、ステップＳ７０１において、構文解析部１１が出力した構文解析結果に含まれるｓｗｉｔｃｈ文のうち、まだ走査していないｓｗｉｔｃｈ文を一つ選択する。
【００８３】
つづいて、ｓｗｉｔｃｈ文抽出部１３は、ステップＳ７０３において、選択されたｓｗｉｔｃｈ文に含まれるｃａｓｅ節の個数が２以上であるかどうかを判定する。ここで、ｃａｓｅ節が２個以上ある場合は（ステップＳ７０３においてＹｅｓ）、次のステップに進む。さもなくば（ステップＳ７０５においてＮｏ）、後述するステップＳ７１５へと処理を進める。
【００８４】
つづいて、ｓｗｉｔｃｈ文抽出部１３は、ステップＳ７０５において、ステップＳ７０１において選択されたｓｗｉｔｃｈ文の分岐情報レコードを新規に作成する。そして、作成した分岐情報レコードに、選択されたｓｗｉｔｃｈ文が記述されている行番号、分岐ＩＤ、および、ファイル名を書き込む。ここで、ファイル名とは、ステップＳ７０１において選択されたｓｗｉｔｃｈ文を含むソースコードを特定する情報であり、本実施の形態においては、ステップＳ７０１において選択されたｓｗｉｔｃｈ文が記述されたソースファイルのパス名を用いることとする。また、本実施の形態においては、分岐ＩＤに分岐カウンタ１３４の値を書き込むこととする。ｓｗｉｔｃｈ文抽出部１３は、分岐情報レコードの作成の都度、分岐カウンタ１３４の値をインクリメントする。
【００８５】
つづいて、ｓｗｉｔｃｈ文抽出部１３は、ステップＳ７０７において、ステップＳ７０１において選択されたｓｗｉｔｃｈ文の中から、まだｓｗｉｔｃｈ文抽出部１３により走査されていないｃａｓｅ節を選択する。
【００８６】
つづいて、ｓｗｉｔｃｈ文抽出部１３は、ステップＳ７０９において、条件式レコードを新規に作成し、その新規作成したレコードに、ステップＳ７０１において選択されたｓｗｉｔｃｈ文の条件式の行番号を書き込む。また、ステップＳ７０１で選択された各条件式の左オペランドを左辺値として、各条件式のデータ型を左辺値の型として、各条件式の右オペランドを右辺値として、それぞれレコードに書き込む。
【００８７】
つづいて、ｓｗｉｔｃｈ文抽出部１３は、ステップＳ７１１において選択されたｓｗｉｔｃｈ文に含まれる全てのｃａｓｅ節を走査したかどうかを判定する。ここで、全てのｃａｓｅ節を走査したと判定されたならば（ステップＳ７１１においてＹｅｓ）、次のステップＳ７１３へと処理を進める。さもなくば（ステップＳ７１１においてＮｏ）、ステップＳ７０７へと戻り、ステップＳ７０７からステップＳ７１１までの処理を繰り返す。
【００８８】
つづいて、ｓｗｉｔｃｈ文抽出部１３は、ステップＳ７０５において作成した分岐情報レコードの左辺値の型として、ステップＳ７０１において選択したｓｗｉｔｃｈ文の条件式の型を書き込む。
【００８９】
つづいて、ｓｗｉｔｃｈ文抽出部１３は、ステップＳ７１５において、構文解析部１１の解析結果に含まれるｓｗｉｔｃｈ文を全て走査したかどうかを判定する。ここで、全てのｓｗｉｔｃｈ文を走査したと判定したならば（ステップＳ７１５においてＹｅｓ）、ｓｗｉｔｃｈ文抽出部１３の処理を終了する。さもなくば（ステップＳ７１５においてＮｏ）、ステップＳ７０１へと戻り、ステップＳ７０１からステップＳ７１５までの処理を繰り返す。
【００９０】
（４．３  条件分岐の分類について）
ステップＳ４０３の処理に必要となる条件分岐の分類の決定方法について図８を参照して説明する。図８は、分岐分類部２が、条件分岐を分類する手順を表わすフローチャートである。
【００９１】
ステップＳ８０１において、分岐分類部２に含まれる分類取得部２１は、分岐情報に含まれるレコードのうち、まだ分類取得部２１によって走査されていないレコードを選択する。
【００９２】
つづいて、ステップＳ８０３において、分類取得部２１は、記憶部４に格納されている分類定義１３６を走査し、ステップＳ８０１において選択された分岐情報レコードに格納されている左辺値と同じ型をもつ、分類定義１３６のレコードを検索する。
【００９３】
つづいて、ステップＳ８０５において、分類取得部２１は、ステップＳ８０３においてレコードが検索されたかどうかを判定する。
【００９４】
ここで、ステップＳ８０３においてレコードが検索されたと判定されなければ（ステップＳ８０５においてＮｏ）、ステップＳ８０７に進む。ステップＳ８０７において、分類取得部２１は、分類定義１３６に、新規レコードを作成し、そのレコードの左辺値として、ステップＳ８０１において選択された分岐情報レコードにおける左辺値の値を書き込む。そして、この新規作成されたレコードをステップＳ８０３における検索結果とみなす。  
【００９５】
ステップＳ８０３においてレコードが検索されたと判定されれば（ステップＳ８０５においてＹｅｓ）、ステップＳ８０７を省略して、ステップＳ８０９へと処理を進める。
【００９６】
ステップＳ８０９において、一覧作成部２２は、ステップＳ８０３における検索結果である分類定義１３６と、ステップＳ８０１において選択された分岐情報レコードとを対応を示すレコードを、記憶部４に格納される分岐分類一覧１３７に追加する。ここで、ステップＳ８０１で選択されたレコードについての走査が完了する。
【００９７】
つづいて、分岐分類部２１は、ステップＳ８１１において、分岐情報１３２の全てのレコードを走査したかどうかの判定を行なう。ここで、全てのレコードを走査したと判定されたならば（ステップＳ８１１においてＹｅｓ）、分岐分類部２による条件分岐の分類の処理が完了する。さもなくば（ステップＳ８１１においてＮｏ）、ステップＳ８０１に処理を戻し、ステップＳ８０１からステップＳ８１１までの処理を繰り返す。
【００９８】
以上で、分岐分類部２による条件分岐の分類処理の手順についての説明を終わる。
（４．４  条件の相違の判定）
図９を参照して、ステップＳ４０５における処理の詳細について説明する。図９はステップＳ４０５における処理の詳細を表わすフローチャートである。
【００９９】
ステップＳ９０１において、相違判定部３に含まれる分岐群選択部３０は、分岐分類一覧１３７を取得する。
【０１００】
ステップＳ９０３において、分岐群選択部３０は、分岐分類一覧１３７のうち、まだ、相違判定部３に走査されていない分類を一つ選択する。
【０１０１】
つづいて、ステップＳ９０５において、条件式取得部３１は、ステップＳ９０３において選択された分類に属する条件分岐の一覧を取得する。
【０１０２】
つづいて、ステップＳ９０７において、条件式比較部３２は、ステップＳ９０５において選択された各条件分岐に含まれる条件式のリスト同士を比較し、他の条件分岐に含まれる条件式のリストと一致しないリストを持つ条件分岐を検索する。
【０１０３】
つづいて、条件式比較部３２は、ステップＳ９０９において、他の条件分岐と、条件式のリストが一致しない条件分岐が検索されたかどうかを判定する。
【０１０４】
リストが一致しない条件分岐が検索されたと判定された場合（ステップＳ９０９においてＹｅｓ）、条件式比較部３２は、条件分岐間で条件式が異なる原因となっている条件分岐の情報を条件相違出力部６に対して出力する。
【０１０５】
ここで、条件式比較部３２は、特にこの方法に限られるわけではないが、少数派の条件式のリストをもつ条件分岐を、「条件分岐間で条件式が異なる原因となっている条件分岐」として選択するものとする。より具体的には、例えば、ある条件式のリストを持つ条件分岐が、ステップＳ９０５で選択された条件分岐の半数未満であるときに、その条件式のリストを持つ条件分岐を「条件分岐間で条件式が異なる原因となっている条件分岐」として選択する。あるいは、ある条件式のリストを持つ条件分岐が、所定の数以下であるときに、その条件式のリストを持つ条件分岐を「条件分岐間で条件式が異なる原因となっている条件分岐」として選択してもよい。一方、リストが一致しない条件分岐が検索されなかった場合（ステップＳ９０９においてＮｏ）、ステップＳ９１１の手順は省略される。以上で、ステップＳ９０３において選択された分岐分類に対する走査は完了する。
【０１０６】
つづいて、相違判定部３は、ステップＳ９１３において、ステップＳ９０１で取得された分岐分類の一覧に含まれる分岐が全て走査されたかどうかを判定する。ここで、全て走査されたと判定された場合は（ステップＳ９１３においてＹｅｓ）、相違判定部３における条件の相違を判定する手順を終了する。さもなくば（ステップＳ９１３においてＮｏ）、ステップＳ９０３に処理を戻し、ステップＳ９０３からステップＳ９１３までの手順を繰り返す。
【０１０７】
以上で、本実施の形態における条件分岐に含まれる条件式群の相違を判定する手順についての説明を終わる。
【０１０８】
＜５．処理の具体例＞
つづいて、図３に示すソースコードに対して、具体的にどのような処理が行われるかについて説明する。なお、図３に示すソースコードは一例であって、他のソースコードについても、以下と同様の処理により、条件分岐の実装の適切性を判定できることは言うまでもない。また、単一のソースファイルから構成されているソースコード、複数のソースファイルから構成されているソースコードのいずれも処理対象とすることができる。
【０１０９】
まず、ソースコード取得部１０は、図３に示すソースコードを取得する。構文解析部１１は、ソースコード取得部１０が取得したソースコードの構文解析を行なう。
【０１１０】
ｉｆ文抽出部１２は、ソースコードの構文解析結果に基づいて、所定の条件を満たすｉｆ文を抽出する。
【０１１１】
ｉｆ文抽出部１２は、まず、２０行目に存在するｉｆ文の処理を行なう。このｉｆ文に含まれる条件式は「!is_drive_available(drive)」である。この条件式は比較演算子を含まないので、この条件分岐を抽出の対象外とする。
【０１１２】
つづいて、４６行目に存在するｉｆ文の処理を行なう。このｉｆ文の条件式は２０行目のｉｆ文と同じく「!is_drive_available(drive)」であり、同様にこの条件分岐を抽出の対象外とする。
【０１１３】
つづいて、５１行目に存在するｉｆ文の処理を行なう。このｉｆ文は、「media==MEDIA_DVD_ROM」、「media==MEDIA_DVD_R」、「media==MEDIA_UNKNOWN」の３つの条件式を持つ。また、これらの条件式は、いずれも等価演算子を含む比較式である。したがって、この条件分岐は抽出の対象となり、図１０に示すような分岐情報１３２が作成される。
【０１１４】
この分岐情報１３２のレコードは、分岐ＩＤ、ソースファイル名のパス名、行番号、左辺値データ型を含む。ここで、分岐ＩＤには、分岐カウンタ１３４の初期値（ここでは“１”とする）が登録される。左辺値データ型には、条件式群が共通に持つ左辺値データ型が書き込まれる。図１０では左辺値データ型が書き込まれている状態を示しているが、実際には、左辺値データ型は、後述する条件式情報１３３の作成後に書き込まれる。
【０１１５】
ｉｆ文抽出部１２は、この条件分岐についての条件式情報１３３を作成する。この３つの条件式はいずれも、等価演算子を含むので、それぞれの左辺値、左辺値の型、右辺値が格納され、図１１に示すような条件式情報１３３が作成される。各条件式には、条件式ＩＤが与えられる。レコードの作成前の条件式カウンタ１３５の値は０であり、レコード作成時にインクリメントすることにより１となり、新規に作成されたレコードの条件式ＩＤには１が書き込まれる。同様の処理により、残りの条件式にも、条件式ＩＤとして、２，３が書き込まれる。
【０１１６】
また、ｉｆ文抽出部１２は、分岐情報１３２のレコードに左辺値の型としてｉｆ文の条件式の型である「media_t」を書き込む。
【０１１７】
一方、図３に示すソースコードを構文解析部１１で解析した結果から、ｓｗｉｔｃｈ文抽出部１３がｓｗｉｔｃｈ文を抽出する。
【０１１８】
まず、ｓｗｉｔｃｈ文抽出部１３は、まだ走査していないｓｗｉｔｃｈ文を選択する。この時点ではｓｗｉｔｃｈ文抽出部１３はまだ走査を行なっておらず、６行目にあるｓｗｉｔｃｈ文を選択する。
【０１１９】
６行目にあるｓｗｉｔｃｈ文は２つのｃａｓｅ節を含むので、このｓｗｉｔｃｈ文は抽出の対象となる。よって、図１０に示す分岐情報１３２に新たなレコードが追加され、分岐情報１３２は、図１２に示すようになる。
【０１２０】
このとき、分岐カウンタ１３４に格納されている値は先にｉｆ文抽出部１２が処理を行なったときのまま１であり、これが新規作成によりインクリメントされて２となる。よって新規作成されたレコードの分岐ＩＤには、２が書き込まれる。また、ｓｗｉｔｃｈ文の行番号６とファイル名「ｐｌａｙｅｒ．ｃ」が、それぞれ行番号、ソースファイルパス名として書き込まれる。
【０１２１】
つづいて、ｓｗｉｔｃｈ文抽出部１３は６行目にあるｓｗｉｔｃｈ文に含まれているｃａｓｅ節のうち、まだ走査していないｃａｓｅ節を選択する。この時点ではまだ走査されたｃａｓｅ節は存在しないので、８行目のｃａｓｅ節を選択する。つづいて、条件式情報のレコードを作成する。このとき、条件式カウンタ１３５の値は０であり、レコード作成時にインクリメントすることにより１となり、新規に作成されたレコードの条件式ＩＤには１が書き込まれる。
【０１２２】
さらに、ｓｗｉｔｃｈ文抽出部１３は、この新規に作成されたレコードに、６行目のｓｗｉｔｃｈ文に含まれる条件式「media」を左辺値として、その条件式のデータ型である「media_t」を左辺値の型として、ｃａｓｅ節に記述されている定数「MEDIA_DVD_ROM」を右辺値として、ｃａｓｅ節が記述されている行番号８を行番号として書き込む。
【０１２３】
つづいて、ｓｗｉｔｃｈ文抽出部１３は全てのｃａｓｅ節を走査したかどうかを判定する。まだ、１１行目のｃａｓｅ節は走査されていないため、全てのｃａｓｅ節を走査したとは判定されない。
【０１２４】
つづいて、ｓｗｉｔｃｈ文抽出部１３は１１行目のｃａｓｅ節を選択し、条件式ＩＤが2であるレコードを新規作成する。新規作成されたレコードの行番号、左辺値、左辺値の型、右辺値には、それぞれ８、「media」、「media_t」、「MEDIA_DVD_R」が書き込まれる。１１行目のｃａｓｅ節の条件式が追加された条件式情報１３３を、図１３に示す。
【０１２５】
つづいて、ｓｗｉｔｃｈ文抽出部１３は、分岐情報１３２のレコードに左辺値の型としてｓｗｉｔｃｈ文の条件式の型である「media_t」を書き込む。
【０１２６】
つづいて、ｓｗｉｔｃｈ文抽出部１３は、全てのｓｗｉｔｃｈ文を走査したかどうかを判定するが、まだ２７行目にあるｓｗｉｔｃｈ文を走査していないため、全てのｓｗｉｔｃｈ文を走査していないと判定する。
【０１２７】
つづいて、２７行目のｓｗｉｔｃｈ文が選択され、６行目のｓｗｉｔｃｈ文と同様に処理が行なわれ、図１４のように分岐情報１３２に１レコードが追加され、図１５のように条件式情報１３３に３レコードが追加される。
【０１２８】
つづいて、分岐分類部２は、分岐情報１３２の内容をもとに、それぞれの条件分岐が同じ分類に属するかどうかを判定する。本実施の形態においては、左辺値のデータ型によって分類を行なう。
【０１２９】
分岐分類部２が条件分岐の分類を開始する時点では、分岐情報１３２および条件式情報１３３はそれぞれ図１４、図１５に示す状態である。なお、この時点では分類定義１３６、分岐分類一覧１３７にはレコードが存在しない。
【０１３０】
分岐分類部２は、図１４に示す分岐情報１３２から、図１６に示す分類定義レコードを作成し、分類定義１３６に格納する。分類定義レコードでは、左辺値データ型と分岐分類ＩＤとが対応付けて格納される。図１４に示す分岐情報１３２においては、左辺値データ型が全て同じであるため、すべて同じ分類とみなされる。したがって、図１６に示す１件のレコードのみが作成され、分類定義１３６に格納される。
【０１３１】
一覧作成部２２は、条件分岐を分類定義ごとのレコードに分類した、分岐分類一覧１３７を作成する。ただし、分類定義１３６には、図１６に示すように、１件のレコードしか格納されていない。したがって、一覧作成部２２が作成する分岐分類一覧１３７は、図１７に示す１件のレコードのみからなる。この分岐一覧のレコードは、図１７に示されるとおり、この分類に属する条件分岐（５１行目のｉｆ文、６行目のｓｗｉｔｃｈ文、２７行目のｓｗｉｔｃｈ文）に対応する３つのレコードを含む。本実施の形態においては、分岐分類ＩＤは１だけなので、すべての分岐ＩＤに対応する分岐分類ＩＤは、１である。
【０１３２】
つづいて、相違判定部３は、共通の分類を持つ条件分岐に含まれる条件式群の相違の判定を行なう。相違判定部３は、図１７に示す３件のレコードに格納された条件分岐における条件式をそれぞれ取得する。
【０１３３】
ここで、分岐ＩＤが１である条件分岐は、図１５に示す条件式情報から分かるとおり、右辺値式がそれぞれ「MEDIA_DVD_ROM」、「MEDIA_DVD_R」、「MEDIA_UNKNOWN」である３つの条件式を持つ。分岐ＩＤが２である条件分岐は、同じく図１５に示す条件式情報から分かるとおり、右辺値式がそれぞれ「MEDIA_DVD_ROM」、「MEDIA_DVD_R」である２つの条件式を持つ。そして、分岐ＩＤが３である条件分岐は、同じく図1５に示す条件式情報から分かるとおり、右辺値式がそれぞれ「MEDIA_DVD_ROM」、「MEDIA_DVD_R」、「MEDIA_UNKNOWN」である３つの条件式をもつ。
【０１３４】
相違判定部３は、各条件分岐の持つ条件式群を互いに比較する。その結果、分岐ＩＤが１である条件分岐と、分岐ＩＤが３である条件分岐は、それぞれの条件式情報に含まれる右辺値式がそれぞれ一致することが分かる。一方、分岐ＩＤが２である条件分岐に含まれる条件式は２つであり、条件式情報に含まれる各条件式の右辺値式は、他の条件分岐に含まれる条件式の右辺値式のいずれかと一致するものの、条件式の数に不足が見られる。
【０１３５】
そこで、相違判定部３は、この分岐ＩＤが２である条件分岐に、条件式の欠落があると判定し、判定結果を条件相違出力部６に出力させる。ここで、図１４に示すとおり、条件分岐ＩＤが２である条件分岐は、パス名がplayer.cのソースファイルの６行目にある旨の情報が分岐情報１３２として格納されている。相違判定部３は、パス名がplayer.cのソースファイルの６行目に条件式の欠落がある条件分岐があることを条件相違出力部６に出力させる。  以上の手順により、図３に示すソースコードより条件分岐の漏れが検出される。ソフトウェア開発者は、この出力を確認することにより、条件分岐の実装の漏れがあることを確認できる。
【０１３６】
これまで説明したように、本発明によれば、プログラムコードに含まれる条件分岐の実装漏れを、仕様書などの付加的な情報を加えることなくプログラムコードのみから判定することが可能になる。これにより、付加情報を作成するためのコストをなくし、より低コストで条件分岐の実装漏れを判定することが可能になる。また、負荷情報が存在しないようなプログラムコードに対し条件分岐の実装漏れを行なうことが可能である。したがって、条件分岐の実装漏れ判定の適用可能範囲を大きく広げることができる。
【０１３７】
＜６．その他＞
図３に示すコードでは条件分岐の実装漏れによって条件分岐における条件の欠落が生じている。しかし、多くの例では条件分岐の欠落が条件分岐における条件の漏れであるといえるが、場合によっては設計意図として欠落させており、条件の漏れではないこともありうる。
【０１３８】
設計意図として一部の条件についての分岐を省略している場合は、その省略は特定の条件分岐に限定されるものではなく、モジュール全体で一貫して省略されている場合も多い。このような場合においては、入力とするソースコードをそのモジュールのソースコードとすれば、その一貫してある条件に対する分岐が省略されている条件分岐を設計意図通りの条件分岐とみなして、その条件分岐と条件式に相違のある条件分岐をこの発明を用いて検出することが可能である。
【０１３９】
以下、具体的に説明する、例えば、録画機能も搭載されているＤＶＤプレイヤーに対する条件分岐の実装を考える。このプレイヤーのソフトウェアは、録画モジュール、再生モジュール、チューナーモジュールなどのモジュールから構成されるものとする。これらのモジュールのうち、録画モジュールでは書き込みできないメディアについての処理が基本的に不要であるので、録画モジュールを構成するためのソースコードでは“メディアがDVD-ROMである”という条件式を一貫して意図的に条件分岐に含めていないものとする。
【０１４０】
この場合、ＤＶＤプレイヤーのソフトウェア全体を構成するソースコードを入力とすると、録画モジュールを構成するソースコードから意図的に条件式を含めていない条件分岐がプログラムミスとして検出されることになる。ところが、このプログラムミスの検出は意図していない。
【０１４１】
そこで、このような検出を防ぐため、録画モジュールを構成するソフトウェアでは一貫して“メディアがDVD-ROMである”という条件式が原則として条件分岐に含まれていないことを利用し、入力とするソースコードをプレイヤーのソースコード全体ではなく、録画モジュールを構成するソースコードのみにする。
【０１４２】
入力された録画モジュールのソースコードに記述された全ての条件分岐において”メディアがDVD-ROMである”という条件文は原則として記述されていないはずなので、この場合“メディアがDVD-ROMである”という条件分岐が存在しないことがプログラムミスとして検出されることはない。
【０１４３】
また、条件分岐の分類にあたり、左辺値を評価した結果である左辺値データ型を用いる理由について補足しておく。上述の例では、左辺値そのものを用いても条件分岐を分類することができるが、一般には、次の２つの問題が生じることがあり、左辺値データ型を基にした分類が必要となる。
【０１４４】
問題１：全く異なる分類の条件分岐であるにもかかわらず、被評価値の記述が一致することにより同分類の条件分岐として分類される。
【０１４５】
問題２：同じ分類の条件分岐であるにもかかわらず、被評価値の記述が一致しないことにより別分類の条件分岐として分類される。
【０１４６】
問題１について補足説明する。例えば、ソースコード中にメディアの種類による条件分岐だけでなく、入出力端子の種類による条件分岐も含まれる場合がある。このような場合に、メディアの種類を表わすデータ型に「media_t」、入出力端子を表わすデータ型に「interface_t」がそれぞれ定義されているものとする。さらに、メディアの種類によって分岐する条件分岐Ａではmedia_t型の変数「type」を条件式に含んでおり、端子の種類によって分岐する条件分岐Ｂではinteface_t型の変数「type」を条件式に含むものとする。この場合、データ型による分類を行なわないと、被評価式は同じ「type」であるがメディアの種類が異なる条件分岐が、同じ分類とみなされる。条件分岐Ａおよび条件分岐Ｂからそれぞれ抽出した条件式を比較すると、条件分岐Ａでは入出力端子における条件式が欠落しており、条件分岐Ｂではメディアの種類による条件式が欠落しているものと判定されるが、このような判定結果は期待されるものではない。
【０１４７】
つづいて、問題２について補足説明する。例えば、ソースコード中にメディアの種類によって分岐する条件分岐Ａおよび条件分岐Ｂが存在する場合を考える。ここで、条件分岐Ａにおいては各条件式においてmedia_t型の被評価式「type」が使われているものとする。また、条件分岐Ｂにおいては各条件式においてmedia_t型の被評価式「media_type」が使われているものとする。この場合、条件分岐Ａおよび条件分岐Ｂには、異なる被評価式「type」および「media_type」がそれぞれ含まれますが、これを被評価式が異なるために別分類であると考えると、条件分岐Ａと条件分岐Ｂの相違が検出されないことになる。
【０１４８】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【図面の簡単な説明】
【０１４９】
【図１】本実施の形態に係るプログラム解析装置１００のハードウェア構成を示す図である。
【図２】プログラム解析装置１００の機能的構成を説明するためのブロック図である。
【図３】本実施の形態において解析対象となるソースコードを示す図である。
【図４】本実施の形態における条件分岐に含まれる条件の相違を判定する手順を表わしたフローチャートである。
【図５】ステップＳ４０１の詳細な手順を表わすフローチャートである。
【図６】ステップＳ５０３の手順の詳細を示したフローチャートである。
【図７】ステップＳ５０５の処理手順の詳細を表わすフローチャートである。
【図８】分岐分類部２が条件分岐を分類する手順を表わすフローチャートである。
【図９】ステップＳ４０５における処理の詳細を表わすフローチャートである。
【図１０】分岐情報１３２として格納されているデータの内容を示す図である。
【図１１】条件式情報１３３として格納されているデータの内容を示す図である。
【図１２】分岐情報１３２として格納されているデータの内容を示す図である。
【図１３】条件式情報１３３として格納されているデータの内容を示す図である。
【図１４】分岐情報１３２として格納されているデータの内容を示す図である。
【図１５】条件式情報１３３として格納されているデータの内容を示す図である。
【図１６】分類定義１３６として格納されているデータの内容を示す図である。
【図１７】分岐分類一覧１３７として格納されているデータの内容を示す図である。
【符号の説明】
【０１５０】
１  分岐抽出部、２  分岐分類部、３  相違判定部、４  記憶部、５  ソースコード入力部、６  条件相違出力部、１０  ソースコード取得部、１１  構文解析部、１２  ｉｆ文抽出部、１３  ｓｗｉｔｃｈ文抽出部、１４  分岐情報生成部、２１  分類取得部、２１  分岐分類部、２２  一覧作成部、３０  分岐群選択部、３１  条件式取得部、３２  条件式比較部、１００  プログラム解析装置、１０２  コンピュータ本体、１０４  モニタ、１０５  バス、１０６  ＦＤドライブ、１１６  ＦＤ、１０８  光ディスクドライブ、１１０  キーボード、１１２  マウス、１１８  光ディスク、１２２  メモリ、１２８  通信インターフェイス、１３０  ハードディスク、１３１  ソースコード、１３２  分岐情報、１３３  条件式情報、１３４  分岐カウンタ、１３５  条件式カウンタ、１３６  分類定義、１３７  分岐分類一覧、１３８  相違情報、１３９  プログラム。
【図１】
2009244939.tif 000003
【図２】
2009244939.tif 000004
【図３】
2009244939.tif 000005
【図４】
2009244939.tif 000006
【図５】
2009244939.tif 000007
【図６】
2009244939.tif 000008
【図７】
2009244939.tif 000009
【図８】
2009244939.tif 000010
【図９】
2009244939.tif 000011
【図１０】
2009244939.tif 000012
【図１１】
2009244939.tif 000013
【図１２】
2009244939.tif 000014
【図１３】
2009244939.tif 000015
【図１４】
2009244939.tif 000016
【図１５】
2009244939.tif 000017
【図１６】
2009244939.tif 000018
【図１７】
2009244939.tif 000019