(57)【特許請求の範囲】
【請求項１】
コンピュータに，
ソースコードに対して行われた静的解析において未確定要素を含むために欠陥であるか否か確定できないと判定された前記ソースコード中の箇所であって，共通の未確定要素を含む複数の箇所について，前記複数の箇所のそれぞれを示す情報と，前記共通の未確定要素を示す情報とを対応付けて表示装置に表示させる制御を行う
ことを実行させることを特徴とする解析支援プログラム。
【請求項２】
前記コンピュータに，
前記共通の未確定要素を制限する条件の入力を受け付け，
前記複数の箇所のそれぞれにおいて，前記共通の未確定要素が前記条件を満たす場合に欠陥であるか否かを再判定する
ことを実行させることを特徴とする請求項１に記載の解析支援プログラム。
【請求項３】
前記コンピュータに，さらに，
前記共通の未確定要素を含む複数の箇所のそれぞれについて，欠陥であると判定される未確定要素の範囲，または欠陥でないと判定される未確定要素の範囲を表示装置に表示させる制御を行う
ことを実行させることを特徴とする請求項１又は請求項２に記載の解析支援プログラム。
【請求項４】
前記コンピュータに，さらに，
前記未確定要素が前記条件を満たす場合に欠陥であると判定した前記ソースコード中の箇所を示す情報を，表示装置に表示させる制御を行う
ことを実行させることを特徴とする請求項２に記載の解析支援プログラム。
【請求項５】
ソースコードに対して行われた静的解析において，未確定要素を含むために欠陥であるか否か確定できないと判定された前記ソースコード中の箇所の情報を記憶する欠陥情報記憶部と，
前記欠陥情報記憶部に記憶された共通の未確定要素を含む複数の箇所について，前記複数の箇所のそれぞれを示す情報と，前記共通の未確定要素を示す情報とを対応付けて表示装置に表示させる欠陥指摘画面出力部とを備える
ことを特徴とする解析支援装置。
【請求項６】
コンピュータが，
ソースコードに対して行われた静的解析において未確定要素を含むために欠陥であるか否か確定できないと判定された前記ソースコード中の箇所であって，共通の未確定要素を含む複数の箇所について，前記複数の箇所のそれぞれを示す情報と，前記共通の未確定要素を示す情報とを対応付けて表示装置に表示させる制御を実行する
ことを特徴とする解析支援方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，プログラミング言語で記述されたソースプログラムの静的解析における解析支援プログラム，解析支援装置および解析支援方法に関するものである。
【背景技術】
【０００２】
プログラミング言語で記述されたソースプログラムを解析し，ソースプログラムの欠陥を抽出して，それらの抽出された欠陥の指摘を，プログラム開発者等のユーザに対して提示する技術がある。実行形式のプログラムを実行しながら解析を行う手法が動的解析と呼ばれるのに対して，ソースプログラムの状態でプログラムを実行せずに解析を行う手法は，静的解析と呼ばれる。
【０００３】
なお，第１のコンピュータの問題を解析する第２のコンピュータから可能原因類別を含む警告を受けた第３の遠隔コンピュータが，問題が第１のコンピュータ側で是正できる場合に，問題の原因の追加情報を取得して問題の解析を行う技術が知られている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平６−５２００３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ソースプログラムの静的解析では，ソースプログラム上の欠陥の可能性がある箇所について，大きく分けて，次の３通りに分類する判定を行う。
【０００６】
・欠陥である
・欠陥でない
・欠陥であるか否かを確定できない
これらの判定結果のうち，欠陥であるか否かが確定できないとの判定は，対象のソースプログラムの解析だけでは欠陥であるか否かの答えが得られない場合になされる。例えば，ソースプログラムの解析では関数の復帰値が確定できず，その復帰値の条件次第で欠陥となる可能性も欠陥とならない可能性もあるような場合には，欠陥であるか否かを確定できないと判定される。特に，関数の多くがライブラリになっており，ソースの実態が特定できない場合などには，欠陥であるか否かを確定できないとの判定結果が多くなる。
【０００７】
ソースプログラムの静的解析結果の出力では，プログラム開発者などのユーザに対して，ソースプログラムから抽出された欠陥に関する指摘が提示される。
【０００８】
このとき，ソースプログラム上の欠陥の可能性がある箇所のすべてについて，その判定結果に応じた欠陥に関する指摘を行うことも，一応は可能である。ただし，開発するプログラムの規模によっては，欠陥に関する指摘を行う箇所の数も膨大な数となるため，それらのすべてについて欠陥に関する指摘を行うことは，好ましくない。そのため，欠陥でないと判定された箇所については，無理に欠陥に関する指摘を出力する必要はない。
【０００９】
また，ユーザに提示する指摘の数を削減するために，欠陥であるか否かを確定できないと判定された箇所についても，欠陥に関する指摘を出力しないようにできる。しかし，欠陥であるか否かを確定できないと判定された箇所については，欠陥である可能性が残っており，それを指摘しないと欠陥の見逃しが増えてしまうため，ソースプログラムの静的解析の成果が向上しない。
【００１０】
これに対して，欠陥であるか否かを確定できないと判定された箇所について，欠陥に関する指摘を出力することもできる。しかし，この場合には，出力される欠陥に関する指摘が膨大な数になってしまう可能性がある。
【００１１】
欠陥であるか否かを確定できないと判定された箇所については，欠陥でない可能性もある。そのため，欠陥であるか否かを確定できないと判定された箇所の１つ１つについて，ユーザは，それぞれの指摘を個別に確認しながら，欠陥であるか否かの調査を行う必要がある。膨大な数の指摘を１つ１つ確認する作業は，ユーザにとって非常な手間となる。
【００１２】
一側面では，本発明は，ソースプログラムの静的解析において，欠陥であるか否かを確定できないと判定された箇所の情報をユーザに対して提示する際に，それらの指摘を確認するユーザの手間を軽減することが可能となる技術を提供することを目的とする。
【課題を解決するための手段】
【００１３】
１態様では，プログラムは，コンピュータを，次のように機能させる。
【００１４】
すなわち，プログラムは，プログラムがインストールされて実行されるコンピュータに，ソースコードに対して行われた静的解析において未確定要素を含むために欠陥であるか否か確定できないと判定された前記ソースコード中の箇所であって，共通の未確定要素を含む複数の箇所について，前記複数の箇所のそれぞれを示す情報と，前記共通の未確定要素を示す情報とを対応付けて表示装置に表示させる制御を行う。
【発明の効果】
【００１５】
１態様では，ユーザの手間を軽減することが可能となる。
【図面の簡単な説明】
【００１６】
【図１】本実施の形態による静的解析装置の構成例を示す図である。
【図２】本実施の形態による静的解析装置のハードウェア構成例を示す図である。
【図３】本実施の形態の静的解析装置による静的解析処理フローチャートである。
【図４】本実施の形態によるソースプログラムの例（１）を示す図である。
【図５】本実施の形態によるソース解析処理フローチャートである。
【図６】本実施の形態による制御フローの例を示す図である。
【図７】本実施の形態によるデータフローの例を示す図である。
【図８】本実施の形態によるデータフローの例を示す図である。
【図９】本実施の形態の欠陥判定抽出部による配列外参照欠陥箇所抽出処理フローチャートである。
【図１０】本実施の形態による欠陥情報の例（１）を示す図である。
【図１１】本実施の形態による欠陥指摘画面の例（１）を示す図である。
【図１２】本実施の形態による欠陥指摘画面の例（２）を示す図である。
【図１３】本実施の形態による条件設定画面の例（１）を示す図である。
【図１４】本実施の形態のヒント情報生成部および条件設定画面出力部による条件設定画面出力処理フローチャートである。
【図１５】本実施の形態による条件設定画面の例（２）を示す図である。
【図１６】本実施の形態による条件情報の例を示す図である。
【図１７】本実施の形態による欠陥指摘画面の例（３）を示す図である。
【図１８】本実施の形態の欠陥指摘画面出力部による欠陥指摘画面出力処理フローチャートである。
【図１９】本実施の形態の指摘変換部による指摘変換処理フローチャートである。
【図２０】本実施の形態によるソースプログラムの例（２）を示す図である。
【図２１】本実施の形態による欠陥情報の例（２）を示す図である。
【図２２】本実施の形態による欠陥指摘画面の例（４）を示す図である。
【図２３】本実施の形態による条件設定画面の例（３）を示す図である。
【図２４】本実施の形態による条件設定画面の例（４）を示す図である。
【図２５】本実施の形態による欠陥指摘画面の例（５）を示す図である。
【図２６】本実施の形態によるソースプログラムの例（３）を示す図である。
【図２７】本実施の形態による欠陥情報の例（３）を示す図である。
【図２８】本実施の形態による欠陥指摘画面の例（６）を示す図である。
【図２９】本実施の形態による条件設定画面の例（５）を示す図である
【図３０】本実施の形態による条件設定画面の例（６）を示す図である。
【図３１】本実施の形態による欠陥指摘画面の例（７）を示す図である。
【発明を実施するための形態】
【００１７】
以下，本実施の形態について，図を用いて説明する。
【００１８】
図１は，本実施の形態による静的解析装置の構成例を示す図である。
【００１９】
静的解析装置１０は，プログラミング言語で記述されたソースプログラムに対する静的解析を行い，ソースプログラムの欠陥を指摘する。ソースプログラムは，ソースコードや原始プログラムなどとも呼ばれる。静的解析は，ソースプログラムの状態で，プログラムを実行せずに，プログラムの欠陥を抽出する解析手法である。静的解析装置１０には，ディスプレイ２０等の表示装置や，キーボード／マウス３０等の入力装置が接続されている。
【００２０】
静的解析装置１０は，ソースプログラム記憶部１１，欠陥情報生成部１２，欠陥情報記憶部１３，欠陥指摘画面出力部１４，ヒント情報生成部１５，条件設定画面出力部１６，条件入力受付部１７，条件情報記憶部１８を備える。
【００２１】
ソースプログラム記憶部１１は，プログラミング言語で記述されたソースプログラムのファイルを記憶する，コンピュータがアクセス可能な記憶部である。
【００２２】
欠陥情報生成部１２は，ソースプログラムから欠陥箇所を抽出し，抽出された欠陥箇所の情報を収集して欠陥情報を生成する。このとき，ソースプログラムから抽出される欠陥箇所には，欠陥であるか否かを確定できないと判定された箇所も含まれる。欠陥情報生成部１２は，ソース解析部１２１，ソース情報記憶部１２２，欠陥判定抽出部１２３を備える。
【００２３】
ソース解析部１２１は，ソースプログラム記憶部１１に記憶されたソースプログラムに対して字句解析，構文解析等の解析を行い，ソースプログラムの解析結果であるソース情報を生成する。
【００２４】
ソース情報記憶部１２２は，ソース解析部１２１により生成されたソース情報を記憶する，コンピュータがアクセス可能な記憶部である。本実施の形態では，ソース情報として，制御フロー，データフロー等が生成され，ソース情報記憶部１２２に記憶される。
【００２５】
欠陥判定抽出部１２３は，ソース情報記憶部１２２に記憶されたソース情報に基づいて，ソースプログラム上の欠陥の可能性がある箇所を欠陥に関する指摘を行う箇所の候補とし，その候補に対して欠陥の種類に応じた詳細な探索を行い，欠陥であるか否かの判定を行う。
【００２６】
欠陥判定抽出部１２３による判定結果は，大きく分けて，欠陥である，欠陥でない，欠陥であるか否かを確定できないの３通りに分類される。欠陥判定抽出部１２３は，欠陥の可能性がある箇所について行った探索で，未確定の要素がなく，欠陥であるか否かの答えが得られた場合に，それぞれ欠陥である，欠陥でないと判定する。欠陥判定抽出部１２３は，欠陥の可能性がある箇所について行った探索で，復帰値が未確定である関数などの未確定要素を含むために欠陥であるか否かの答えが得られない場合に，欠陥であるか否かが確定できないと判定する。なお，以下では，欠陥であることを×，欠陥でないことを○，欠陥であるか否かを確定できないことを△で示す。
【００２７】
本実施の形態の静的解析装置１０では，欠陥判定抽出部１２３は，×と判定した箇所と△と判定した箇所とを指摘する欠陥箇所として抽出し，抽出された欠陥箇所の情報を収集して欠陥情報に記録する。△と判定した箇所については，欠陥判定抽出部１２３は，欠陥を確定できない理由についても欠陥情報に記録する。
【００２８】
欠陥情報記憶部１３は，ソースプログラムから抽出された欠陥箇所に関する情報が記録された欠陥情報を記憶する，コンピュータがアクセス可能な記憶部である。欠陥情報記憶部１３には，欠陥箇所の情報として，△と判定された箇所，すなわち，ソースプログラムに対して行われた静的解析において，未確定要素を含むために欠陥であるか否か確定できないと判定されたソースプログラム中の箇所の情報も記憶されている。
【００２９】
欠陥指摘画面出力部１４は，欠陥情報記憶部１３に記憶された欠陥情報に基づいて，ユーザに対してソースプログラムの欠陥箇所を指摘する欠陥指摘画面を，ディスプレイ２０等の表示装置に表示させる制御を行う。このとき，欠陥指摘画面出力部１４は，共通の未確定要素を含む複数の△と判定された箇所について，それら複数の箇所のそれぞれを示す情報と，共通の未確定要素を示す情報とを対応付けて，欠陥指摘画面をディスプレイ２０等の表示装置に表示させる。
【００３０】
以下，本実施の形態では，△と判定された箇所の指摘を，欠陥未確定の指摘と呼ぶ。また，欠陥を確定できない理由を，未確定理由と呼ぶ。未確定理由には，欠陥を確定できない理由の要因となる未確定要素が含まれる。例えば，「関数の復帰値が未確定である」という未確定理由には，「関数の復帰値」という未確定要素が含まれる。
【００３１】
ヒント情報生成部１５は，ユーザから条件設定する旨の指示を受けたときに，ユーザによる未確定理由を解消する条件の入力を支援するヒント情報を生成する。ヒント情報は，欠陥未確定の指摘が欠陥である（×）ことを示す指摘に変換される条件の情報や，欠陥未確定の指摘が欠陥でない（○）ことを示す指摘に変換される条件の情報などである。欠陥未確定の指摘が欠陥である（×）ことを示す指摘に変換される条件は，欠陥であると判定される未確定要素の範囲である。また，欠陥未確定の指摘が欠陥でない（○）ことを示す指摘に変換される条件は，欠陥でないと判定される未確定要素の範囲である。
【００３２】
例えば，ヒント情報生成部１５は，関数の復帰値が未確定要素である欠陥未確定の指摘について，欠陥情報記憶部１３に記憶された欠陥情報を参照して，その欠陥未確定の指摘が欠陥でない（○）ことを示す指摘に変換される関数の復帰値の範囲を，ヒント情報として求める。また，ヒント情報生成部１５は，関数の復帰値が未確定要素である欠陥未確定の指摘について，欠陥情報記憶部１３に記憶された欠陥情報を参照して，その欠陥未確定の指摘が欠陥である（×）ことを示す指摘に変換される関数の復帰値の範囲を，ヒント情報として求める。
【００３３】
条件設定画面出力部１６は，ユーザから条件設定する旨の指示を受けたときに，ユーザが未確定理由を解消する条件を入力する条件設定画面を，ディスプレイ２０等の表示装置に表示させる制御を行う。このとき，条件設定画面出力部１６は，条件設定画面に，生成されたヒント情報を掲載する。条件設定画面にヒント情報が掲載されることにより，ユーザは，設定する条件を判断し易くなる。本実施の形態による条件設定画面では，未確定理由を解消する条件が，未確定理由ごとにまとめて入力できるようになっている。
【００３４】
条件入力受付部１７は，欠陥未確定の指摘について，未確定理由ごとにまとめて，その未確定理由を解消する条件の入力を受け付ける。欠陥未確定の指摘の未確定理由を解消する条件は，例えば，欠陥未確定とされた箇所に含まれる未確定要素を制限する条件となる。条件入力受付部１７は，共通の未確定要素を含む欠陥未確定とされた箇所ごとに，その共通の未確定要素を制限する条件の入力を受け付ける。
【００３５】
ユーザは，例えば，キーボード／マウス３０等の入力装置を用いて，条件設定画面上で未確定理由を解消する条件を入力する。条件入力受付部１７は，ユーザによる未確定理由を解消する条件の入力を受け付け，受け付けた条件を未確定理由に対応付けて条件情報記憶部１８に記憶された条件情報に記録する。
【００３６】
条件情報記憶部１８は，未確定理由と，ユーザにより入力された，その未確定理由を解消する条件との対応が記録された条件情報を記憶する，コンピュータがアクセス可能な記憶部である。
【００３７】
上述の欠陥指摘画面出力部１４は，指摘変換部１４１を備える。指摘変換部１４１は，条件情報記憶部１８に記憶された条件情報を参照し，共通の未確定要素を含む複数の箇所のそれぞれにおいて，その共通の未確定要素がユーザにより入力された条件を満たす場合に欠陥であるか否かを再判定する。指摘変換部１４１は，再判定の結果に基づいて，欠陥未確定の指摘を，欠陥であることを示す指摘または欠陥でないことを示す指摘に変換する。
【００３８】
欠陥指摘画面出力部１４は，欠陥未確定の指摘を変換した結果を含む欠陥指摘画面を，ディスプレイ２０などの表示装置に表示させる制御を行う。例えば，欠陥指摘画面出力部１４は，欠陥未確定の指摘から変換された欠陥であることを示す指摘，すなわち再判定で未確定要素がユーザにより入力された条件を満たす場合に欠陥であると判定したソースプログラム中の箇所を示す情報を含む欠陥指摘画面を表示させる。
【００３９】
欠陥判定抽出部１２３によるソースプログラムを解析した情報のみでの欠陥の判定では，対象のソースプログラムだけでは値が確定できない関数の復帰値などの未確定要素を含む箇所について，欠陥であるか否かを確定することができない。ただし，プログラム開発者であるユーザは，そのような未確定要素となる関数の復帰値などをあらかじめ想定してソースプログラムの設計を行っており，ユーザが未確定要素となる関数の復帰値の範囲などを特定できるケースもある。このような場合に，特定できる関数の復帰値の範囲などを未確定要素を制限する条件としてユーザに入力させ，入力された条件で欠陥であるか否かの判定を行うことで，確定できなかった欠陥を，欠陥であるかまたは欠陥でないかに確定できる。
【００４０】
このように，本実施の形態による静的解析装置１０は，ソースプログラムの静的解析結果として欠陥未確定の指摘を含めてユーザに提示する際に，それらの解析結果を確認するユーザを支援する解析支援機能を有する。
【００４１】
例えば，静的解析装置１０の解析支援機能によって，複数の欠陥未確定の指摘と，それらの欠陥未確定の指摘に共通の未確定要素とを対応付けて，ユーザに提示することが可能となる。また，例えば，静的解析装置１０の解析支援機能によって，ユーザにより入力された共通の未確定要素を制限する条件で，共通の未確定要素を持つ複数の欠陥未確定の指摘を，それぞれ欠陥であることを示す指摘と欠陥でないことを示す指摘に変換して，ユーザに提示することが可能となる。
【００４２】
本実施の形態の静的解析装置１０が有する解析支援機能によって，ソースプログラムの静的解析において，欠陥であるか否かを確定できないと判定された箇所の指摘をユーザに対して提示する際に，それらの指摘を確認するユーザの手間を軽減することが可能となる。
【００４３】
図２は，本実施の形態による静的解析装置のハードウェア構成例を示す図である。
【００４４】
図１に示す本実施の形態の静的解析装置１０は，ＣＰＵ（Central Processing Unit ）１０１，主記憶となるメモリ１０２，入出力インタフェース１０３，記憶装置１０４，入力装置１０５，出力装置１０６を備えるコンピュータ１００によって実現される。記憶装置１０４は，例えばＨＤＤ（Hard Disk Drive ）などである。出力装置は，例えば図１に示すディスプレイ２０等の表示装置などである。入力装置１０５は，例えば図１に示すキーボード／マウス３０などである。
【００４５】
図１に示す静的解析装置１０および静的解析装置１０が備える各機能部は，コンピュータ１００が備えるＣＰＵ１０１，メモリ１０２等のハードウェアと，ソフトウェアプログラムとによって，実現することが可能である。コンピュータ１００が実行可能なプログラムは，記憶装置１０４に記憶され，その実行時にメモリ１０２に読み出され，ＣＰＵ１０１により実行される。
【００４６】
なお，コンピュータ１００は，可搬型記録媒体から直接プログラムを読み取り，そのプログラムに従った処理を実行することもできる。また，コンピュータ１００は，サーバコンピュータからプログラムが転送されるごとに，逐次，受け取ったプログラムに従った処理を実行することもできる。さらに，このプログラムは，コンピュータ１００で読み取り可能な記録媒体に記録しておくことができる。
【００４７】
図３は，本実施の形態の静的解析装置による静的解析処理フローチャートである。
【００４８】
静的解析装置１０において，ユーザは，キーボード／マウス３０を用いて，ソースプログラム記憶部１１に記憶されているソースプログラムを指定した，静的解析の実行を指示する。
【００４９】
欠陥情報生成部１２は，ソースプログラムから，△と判定された箇所を含む欠陥箇所を抽出する（ステップＳ１０）。本実施の形態では，静的解析装置１０は，解析対象のソースプログラムの欠陥箇所として，×と判定された箇所と△と判定された箇所とを，ユーザに対して提示する。欠陥情報生成部１２は，ソースプログラムを解析して×と判定された箇所と△と判定された箇所とを欠陥箇所として抽出し，抽出された欠陥箇所の情報を収集して欠陥情報を生成する。欠陥情報は，欠陥情報記憶部１３に記憶される。
【００５０】
欠陥指摘画面出力部１４は，抽出した欠陥箇所の指摘を出力する。本実施の形態では，欠陥指摘画面出力部１４は，欠陥情報記憶部１３に記憶された欠陥情報に基づいて，ソースプログラムから抽出した欠陥箇所を指摘する欠陥指摘画面を，ディスプレイ２０等の表示装置に出力する（ステップＳ１１）。このとき，欠陥指摘画面出力部１４は，欠陥未確定の指摘について未確定理由ごとにまとめた情報を含む欠陥指摘画面を出力する。
【００５１】
ユーザは，欠陥指摘画面において，未確定理由を指定して，その未確定理由を解消する条件の設定を指示する。
【００５２】
ヒント情報生成部１５は，欠陥情報記憶部１３に記憶された欠陥情報に基づいて，条件の設定が指示された未確定理由を解消する条件の入力を支援するヒント情報を生成する（ステップＳ１２）。本実施の形態では，ヒント情報として，条件の設定が指示された未確定理由を持つ欠陥未確定の指摘ごとに，それぞれ欠陥であることを示す指摘に変換される条件の情報と，欠陥でないことを示す指摘に変換される条件の情報とを生成する。
【００５３】
条件設定画面出力部１６は，ユーザに指定された未確定理由を解消する条件を設定する条件設定画面を，ディスプレイ２０に出力する（ステップＳ１３）。本実施の形態では，条件設定画面に，欠陥未確定の指摘ごとに生成されたヒント情報が提示される。
【００５４】
ユーザは，キーボード／マウス３０を用いて，条件設定画面において，未確定理由を解消する条件を入力する。
【００５５】
条件入力受付部１７は，ユーザによる未確定理由を解消する条件の入力を受け付ける（ステップＳ１４）。すなわち，条件入力受付部１７は，欠陥未確定の指摘について，未確定理由ごとにまとめて，その理由を解消する条件の入力を受け付ける。入力された条件は，未確定理由に対応付けられて，条件情報記憶部１８に記憶された条件情報に記録される。
【００５６】
欠陥指摘画面出力部１４の指摘変換部１４１は，欠陥未確定の指摘を，ユーザにより入力された未確定理由を解消する条件で，欠陥であることを示す指摘または欠陥でないことを示す指摘に変換する（ステップＳ１５）。
【００５７】
欠陥指摘画面出力部１４は，欠陥未確定の指摘を変換した結果を含む，抽出した欠陥箇所の指摘を出力する。ここでは，欠陥指摘画面出力部１４は，ソースプログラムから抽出した欠陥箇所を指摘する欠陥指摘画面をディスプレイ２０に出力するときに（ステップＳ１６），変換された欠陥未確定の指摘については変換した結果に基づいた欠陥指摘画面への提示を行う。
【００５８】
静的解析装置１０では，ユーザが条件の設定を指示するごとに，ステップＳ１２〜ステップＳ１６の処理が繰り返される。ユーザが未確定理由を解消する条件を設定するごとに，欠陥未確定の指摘が，欠陥であることを示す指摘または欠陥でないことを示す指摘に変換され，欠陥指摘画面でユーザに提示される欠陥未確定の指摘の数が減る。欠陥でないことを示す指摘を欠陥指摘画面に表示しないことにすれば，その分だけ欠陥指摘画面でユーザに提示される欠陥箇所の指摘の数が減ることになる。
【００５９】
このように，本実施の形態の静的解析装置１０では，×と判定された箇所の指摘だけではなく，欠陥未確定の指摘もユーザに対して提示することで，欠陥未確定の指摘に含まれる欠陥が指摘され，ソースプログラムの静的解析の成果が上がる。このとき，ユーザによる未確定理由ごとの条件の設定によって，欠陥未確定の指摘を未確定理由ごとにまとめて減らすことができるので，欠陥未確定の指摘を確認するユーザの負担も少ない。
【００６０】
以下では，本実施の形態の静的解析装置１０による処理について，より具体的な例を挙げて説明する。
【００６１】
図４は，本実施の形態によるソースプログラムの例（１）を示す図である。
【００６２】
図４に示すソースプログラム１１０ａは，Ｃ言語で記述されたソースプログラムの一例である。ここでは，図４に示すソースプログラム１１０ａが，静的解析の対象プログラムとして，ソースプログラム記憶部１１に記憶されている。以下，図４に示すソースプログラム１１０ａの静的解析を行う例を説明する。
【００６３】
静的解析装置１０において，欠陥情報生成部１２は，図４に示すソースプログラム１１０ａ上の欠陥を抽出する。プログラムの欠陥は，一般にバグや誤りなどとも呼ばれる。
【００６４】
欠陥情報生成部１２において，ソース解析部１２１は，図４に示すソースプログラム１１０ａを解析し，ソース情報を生成する。生成されたソース情報は，ソース情報記憶部１２２に記憶される。
【００６５】
図５は，本実施の形態によるソース解析処理フローチャートである。
【００６６】
ソース解析部１２１は，静的解析の対象として指定されたソースプログラムの字句解析を実施する（ステップＳ１００）。字句解析は，ソースプログラムの記述を単語に分解する解析である。
【００６７】
ソース解析部１２１は，ソースプログラムの字句解析結果に基づいて，ソースプログラムの構文解析を実施する（ステップＳ１０１）。構文解析は，字句解析によって単語に分解されたものの意味を解析する。
【００６８】
ソース解析部１２１は，制御フローを生成する（ステップＳ１０２）。制御フローは，ソースプログラムの各制御の構造を示す情報である。
【００６９】
ソース解析部１２１は，データフローを生成する（ステップＳ１０３）。データフローは，ソースプログラムにおける変数の更新や参照等を示す情報である。
【００７０】
生成された制御フローやデータフローは，ソース情報として，ソース情報記憶部１２２に記憶される。
【００７１】
図６は，本実施の形態による制御フローの例を示す図である。
【００７２】
図６に示す制御フローは，図４に示すソースプログラム１１０ａを解析して得られる制御フローの例を示している。図６に示す制御フローでは，ソースプログラム１１０ａの制御の流れが，〔１〕〜〔１５〕の制御で示されている。以下の説明で，〔〕付きの数字は，図６に示す制御フローにおける各制御を示す。
【００７３】
図７，図８は，本実施の形態によるデータフローの例を示す図である。
【００７４】
図７，図８には，図６に示す制御フローを簡略化したものが示されている。図７，図８において，矢印が，ソースプログラム１１０ａのデータフローを示している。図７に示す実線の矢印が，変数更新の流れを示しており，図８に示す破線の矢印が，定義と参照の関係を示している。
【００７５】
図７において，実線矢印で示された変数更新の流れは，次の通りである。
〔ａ〕：〔１０〕の変数（ｘ）は，〔８〕の代入結果である。
〔ｂ〕：〔１２〕の変数（ｘ）は，〔８〕の代入結果である。
〔ｃ〕：〔１３〕の変数（ｉｎｄｅｘ２）は，〔１２〕のｆｏｒループの結果である。
〔ｄ〕：〔１４〕の変数（ｙ）は，〔１０〕の代入結果である。
〔ｅ〕：〔１５〕の変数（ｉｎｄｅｘ３）は，〔１４〕のｆｏｒループの結果である。
【００７６】
図８において，破線矢印で示された定義と参照の関係は，次の通りである。
〔ｆ〕：〔８〕の関数（ｇｅｔｎｕｍ）は，未定義である。
〔ｇ〕：〔１１〕の変数（ａｒｒａｙ１）は，〔１〕で定義されている。
〔ｈ〕：〔１３〕の変数（ａｒｒａｙ２）は，〔２〕で定義されている。
〔ｉ〕：〔１５〕の変数（ａｒｒａｙ３）は，〔３〕で定義されている。
【００７７】
なお，図７，図８には，以下で説明する欠陥箇所の抽出に用いるデータフローの一部のみが示されている。
【００７８】
欠陥情報生成部１２において，欠陥判定抽出部１２３は，ソース情報記憶部１２２に記憶されたソース情報に基づいて，ソースプログラム上の欠陥の可能性がある箇所の詳細な探索を行い，欠陥であるか否かを判定する。ここでは，欠陥判定抽出部１２３は，×と判定された箇所と△と判定された箇所とを，指摘を行う欠陥箇所として抽出する。
【００７９】
欠陥判定抽出部１２３は，様々な種類の欠陥を抽出する。例えば，ポインタ変数にＮＵＬＬを設定しただけでポインタの指す領域をアクセスすると，０番地をアクセスしてしまうため，実行環境によってはエラーが発生する可能性がある。このような欠陥は，０番地参照と呼ばれる。また，変数の参照前にその変数の値が設定されていない場合に，初期化漏れと呼ばれる欠陥となる。また，取得した資源が解放されない場合に，メモリリークと呼ばれる欠陥となる。また，配列の添え字が，宣言された配列の範囲を超えている場合に，配列外参照と呼ばれる欠陥となる。０番地参照，初期化漏れ，メモリリーク，配列外参照以外にも，様々な種類の欠陥がある。
【００８０】
以下では，ソースプログラムから×と判定された箇所と△と判定された箇所とを欠陥箇所として抽出する例として，図６に示す制御フロー，図７，図８に示すデータフローを用いて，配列外参照に関する欠陥箇所を抽出する例を説明する。
【００８１】
配列外参照に関する欠陥箇所の抽出では，配列の参照箇所を起点に配列範囲と添字範囲とを求め，求められた範囲の比較により，欠陥であるか否かの判定が行われる。ソースプログラム１１０ａにおける配列の参照箇所としては，図６の制御フローから，〔１１〕の「ａｒｒａｙ１」，〔１３〕の「ａｒｒａｙ２」，〔１５〕の「ａｒｒａｙ３」が挙げられる。
【００８２】
・〔１１〕の「ａｒｒａｙ１」について
〔１１〕から図８に示す〔ｇ〕の関係を追った先の〔１〕の定義で，配列範囲：０〜９が求まる。また，〔１１〕において添字が定数（１０）であるから，添字範囲：１０が求まる。
【００８３】
配列範囲：０〜９よりも添字範囲：１０の方が大きいため，〔１１〕の「ａｒｒａｙ１」については，配列外参照の欠陥である（×）と判定される。
【００８４】
・〔１３〕の「ａｒｒａｙ２」について
〔１３〕から図８に示す〔ｈ〕の関係を追った先の〔２〕の定義で，配列範囲：０〜１４が求まる。
【００８５】
また，〔１３〕の添字：ｉｎｄｅｘ２は，図７に示す〔ｃ〕の関係から，〔１２〕のｆｏｒループの条件に左右されることがわかる。〔１２〕のｆｏｒループの条件から，添字範囲は，０〜変数（ｘ）となる。図７に示す〔ｂ〕から，変数（ｘ）が〔８〕の代入結果すなわちｇｅｔｎｕｍ復帰値であることがわかるので，添字範囲は，０〜ｇｅｔｎｕｍ復帰値となる。〔８〕から図８に示す〔ｆ〕の関係を追った先で，関数ｇｅｔｎｕｍが未定義であることがわかる。関数ｇｅｔｎｕｍが未定義であるため，ｇｅｔｎｕｍ復帰値も確定せず，それにより，添字範囲：０〜ｇｅｔｎｕｍ復帰値は求まらない。
【００８６】
配列範囲は求まったが添字範囲が求まらないため，〔１３〕の「ａｒｒａｙ２」については，欠陥であるか否かが確定できない（△）と判定される。このときの未確定理由は，ｇｅｔｎｕｍ復帰値が確定できないことである。
【００８７】
・〔１５〕の「ａｒｒａｙ３」について
〔１５〕から図８に示す〔ｉ〕の関係を追った先の〔３〕の定義で，配列範囲：０〜１９が求まる。
【００８８】
また，〔１５〕の添字：ｉｎｄｅｘ３は，図７に示す〔ｅ〕の関係から，〔１４〕のｆｏｒループの条件に左右されることがわかる。〔１４〕のｆｏｒループの条件から，添字範囲は，０〜変数（ｙ）となる。図７に示す〔ｄ〕から，変数（ｙ）が〔１０〕の代入結果すなわち変数（ｘ）＋１０であることがわかるので，添字範囲は，０〜変数（ｘ）＋１０となる。また，図７に示す〔ａ〕から，変数（ｘ）は，〔８〕の代入結果すなわちｇｅｔｎｕｍ復帰値であることがわかるので，添字範囲は，０〜ｇｅｔｎｕｍ復帰値＋１０となる。〔８〕から図８に示す〔ｆ〕の関係を追った先で，関数ｇｅｔｎｕｍが未定義であることがわかる。関数ｇｅｔｎｕｍが未定義であるため，ｇｅｔｎｕｍ復帰値も確定せず，それにより，添字範囲：０〜ｇｅｔｎｕｍ復帰値＋１０は求まらない。
【００８９】
配列範囲は求まったが添字範囲が求まらないため，〔１５〕の「ａｒｒａｙ３」については，欠陥であるか否かが確定できない（△）と判定される。このときの未確定理由は，ｇｅｔｎｕｍ復帰値が確定できないことである。
【００９０】
欠陥判定抽出部１２３は，指摘を行う欠陥箇所として抽出された，×と判定された箇所と△と判定された箇所とについて情報を収集し，欠陥情報に記録する。
【００９１】
図９は，本実施の形態の欠陥判定抽出部による配列外参照欠陥箇所抽出処理フローチャートである。
【００９２】
欠陥判定抽出部１２３は，配列外参照に関する欠陥箇所の抽出において，ソース情報記憶部１２２に記憶されたソース情報に基づいて，ソースプログラム上の配列の参照箇所を抽出する（ステップＳ１１０）。
【００９３】
欠陥判定抽出部１２３は，抽出された配列の参照箇所を１つ選択する（ステップＳ１１１）。欠陥判定抽出部１２３は，抽出された配列の参照箇所について，配列範囲を求める（ステップＳ１１２）。また，欠陥判定抽出部１２３は，抽出された配列の参照箇所について，添字範囲を求める（ステップＳ１１３）。欠陥判定抽出部１２３は，求めた配列範囲および添字範囲が確定しているか否かを判定する（ステップＳ１１４）。
【００９４】
求めた範囲が確定していなければ（ステップ１１４のＮＯ），欠陥判定抽出部１２３は，選択された配列の参照箇所について，欠陥であるか否かが確定できない（△）と判定する（ステップＳ１１５）。欠陥判定抽出部１２３は，選択された配列の参照箇所を指摘する欠陥箇所として情報を収集し，欠陥情報に記録する（ステップＳ１１６）。ここで欠陥情報に記録される情報には，未確定理由が含まれる。
【００９５】
求めた範囲が確定していれば（ステップＳ１１４のＹＥＳ），欠陥判定抽出部１２３は，添字範囲が配列範囲内であるか否かを判定する（ステップＳ１１７）。
【００９６】
添字範囲が配列範囲内でなければ（ステップＳ１１７のＮＯ），欠陥判定抽出部１２３は，選択された配列の参照箇所について，欠陥である（×）と判定する（ステップＳ１１８）。欠陥判定抽出部１２３は，選択された配列の参照箇所を指摘する欠陥箇所として情報を収集し，欠陥情報に記録する（ステップＳ１１６）。
【００９７】
添字範囲が配列範囲内であれば（ステップＳ１１７のＹＥＳ），欠陥判定抽出部１２３は，選択された配列の参照箇所について，欠陥でない（○）と判定する（ステップＳ１１９）。この場合には，欠陥判定抽出部１２３は，選択された配列の参照箇所の情報を欠陥情報に記録しない。
【００９８】
欠陥判定抽出部１２３は，抽出されたすべての配列の参照箇所について処理が終了したかを判定する（ステップＳ１２０）。すべての配列の参照箇所について処理が終了していなければ（ステップＳ１２０のＮＯ），欠陥判定抽出部１２３は，ステップＳ１１１の処理に戻り，次の配列の参照箇所についての処理に移る。すべての配列の参照箇所について処理が終了していれば（ステップＳ１２０のＹＥＳ），欠陥判定抽出部１２３は，配列外参照に関する欠陥箇所の抽出処理を終了する。
【００９９】
ここでは，配列外参照に関する欠陥箇所の抽出の例のみを説明したが，欠陥判定抽出部１２３は，０番地参照，初期化漏れ，メモリリークなど，配列外参照以外の様々な欠陥についても，該当する欠陥箇所の抽出を行う。
【０１００】
欠陥情報生成部１２により生成された，ソースプログラムから抽出された欠陥箇所についての情報が記録された欠陥情報は，欠陥情報記憶部１３に記憶される。
【０１０１】
図１０は，本実施の形態による欠陥情報の例（１）を示す図である。
【０１０２】
図１０に示す欠陥情報１３０ａは，図４に示すソースプログラム１１０ａから抽出された配列外参照に関する欠陥箇所が記録された欠陥情報の例である。図１０に示す欠陥情報１３０ａは，ファイル，行番号，指摘番号，メッセージ，判定理由，未確定理由等の情報を持つ。欠陥情報生成部１２において，欠陥判定抽出部１２３は，×と判定された箇所と△と判定された箇所とについて，これらの各情報を収集し，欠陥情報に記録する。
【０１０３】
欠陥情報において，ファイルは，静的解析の対象となったソースプログラムのファイル名を示す。図１０に示す欠陥情報１３０ａにおいて，ファイルａ．ｃは，図４に示すソースプログラム１１０ａのファイルを示している。静的解析装置１０は，複数のソースプログラムをまとめて解析することが可能である。複数のソースプログラムをまとめて解析する場合に，生成される欠陥情報は，複数のソースプログラムから抽出された欠陥の情報となる。
【０１０４】
欠陥情報において，行番号は，ソースプログラムにおける抽出された欠陥箇所の行番号を示す。
【０１０５】
欠陥情報において，指摘番号は，欠陥の種類と欠陥であるか否かの判定結果とに応じた番号である。指摘番号は，欠陥の種類と欠陥であるか否かの判定結果との組合せに応じてあらかじめ決められている。
【０１０６】
例えば，図１０に示す欠陥情報１３０ａの例では，欠陥の種類が配列外参照であり，欠陥であるか否かの判定結果が欠陥である（×）とされた欠陥箇所については，指摘番号として“５０１１”を記録することが決められている。また，例えば，図１０に示す欠陥情報１３０ａの例では，欠陥の種類が配列外参照であり，欠陥であるか否かの判定結果が欠陥であるか否かが確定できない（△）とされた欠陥箇所については，指摘番号として“５０１２”を記録することが決められている。
【０１０７】
欠陥判定抽出部１２３は，欠陥情報に抽出された欠陥箇所の情報を記録する際に，該欠陥箇所の欠陥の種類と，該欠陥箇所の欠陥であるか否かの判定結果から，それらの組合せに応じてあらかじめ決められた指摘番号を欠陥情報に記録する。
【０１０８】
欠陥情報において，メッセージは，ディスプレイ２０に出力される欠陥指摘画面で提示されるメッセージである。
【０１０９】
欠陥情報において，判定理由は，欠陥であるか否かの判定において，×と判定された理由または△と判定された理由を示す情報である。例えば，図１０に示す欠陥情報１３０ａにおいて，ファイルａ．ｃの行番号１３のレコードでは，添字範囲：１０が配列範囲：０〜９外であることを理由に，配列外参照について×と判定されたことが示されている。
【０１１０】
欠陥情報において，未確定理由は，△と判定された箇所について，欠陥を確定できない理由を示す。例えば，図１０に示す欠陥情報１３０ａにおいて，ファイルａ．ｃの行番号１５のレコードでは，ｇｅｔｎｕｍ復帰値が未確定であることを理由に，欠陥を確定できないことが示されている。
【０１１１】
判定理由や未確定理由の情報は，欠陥判定抽出部１２３による欠陥箇所抽出の過程で生成される。ここで，図４に示すソースプログラム１１０ａの行番号１５における，配列ａｒｒａｙ２の参照箇所を例として，判定理由と未確定理由とを生成する例を説明する。
【０１１２】
図９に示す配列外参照欠陥箇所抽出処理のフローチャートにおいて，欠陥判定抽出部１２３は，ステップＳ１１４，ステップＳ１１５の処理で，配列範囲または添字範囲のいずれかが確定していない場合に，欠陥であるか否かが確定できないと判定している。配列ａｒｒａｙ２の参照箇所の場合には，添字範囲が０〜ｇｅｔｎｕｍ復帰値であり，その範囲が確定していないので，欠陥であるか否かが確定できないと判定される。
【０１１３】
このとき，欠陥判定抽出部１２３は，範囲が確定していない添字範囲：０〜ｇｅｔｎｕｍ復帰値を抽出し，判定理由を生成する。なお，本実施の形態では，欠陥判定抽出部１２３は，後の条件設定時にユーザが容易に比較判断できるように，判定理由に範囲が確定している配列範囲：０〜１４も含める。また，欠陥判定抽出部１２３は，範囲が確定していない添字範囲：０〜ｇｅｔｎｕｍ復帰値から，その範囲が確定できない要因である未確定要素としてｇｅｔｎｕｍ復帰値を抽出し，ｇｅｔｎｕｍ復帰値未確定という未確定理由を生成する。
【０１１４】
図９に示す配列外参照欠陥箇所抽出処理のフローチャートにおいて，欠陥判定抽出部１２３は，ステップＳ１１６の処理で，生成された判定理由と未確定理由とを，欠陥情報に記録する。図１０の欠陥情報１３０ａに示すように，行番号１５のレコードに，判定理由“配列範囲：０〜１４，添字範囲：０〜ｇｅｔｎｕｍ復帰値”，未確定理由“ｇｅｔｎｕｍ復帰値未確定”が記録される。
【０１１５】
なお，図１０に示す欠陥情報１３０ａにおいて，ファイルａ．ｃの行番号１３のレコードは，上述の〔１１〕の「ａｒｒａｙ１」について抽出された欠陥箇所の情報である。また，ファイルａ．ｃの行番号１５のレコードは，上述の〔１３〕の「ａｒｒａｙ２」について抽出された欠陥箇所の情報である。また，ファイルａ．ｃの行番号１８のレコードは，上述の〔１５〕の「ａｒｒａｙ３」について抽出された欠陥箇所の情報である。
【０１１６】
欠陥指摘画面出力部１４は，欠陥情報記憶部１３に記憶された欠陥情報に基づいて欠陥指摘画面を生成し，生成された欠陥指摘画面を，ディスプレイ２０に出力する。
【０１１７】
図１１は，本実施の形態による欠陥指摘画面の例（１）を示す図である。
【０１１８】
図１１に示す欠陥指摘画面１４５ａは，欠陥指摘画面出力部１４が，欠陥情報記憶部１３に記憶された欠陥情報１３０ａに基づいて生成し，ディスプレイ２０に出力する欠陥指摘画面の一例である。図１１に示す欠陥指摘画面１４５ａは，指摘番号一覧，未確定理由一覧，指摘一覧の３つの一覧を有している。
【０１１９】
欠陥指摘画面において，指摘番号一覧は，欠陥情報記憶部１３に記憶された欠陥情報に記録された各欠陥箇所の指摘を，指摘番号ごとに集計した情報の一覧である。指摘番号一覧において，件数は，同じ指摘番号を持つ欠陥箇所の指摘の集計結果である。
【０１２０】
欠陥指摘画面において，未確定理由一覧は，欠陥情報記憶部１３に記憶された欠陥情報に記録された各欠陥箇所の指摘を，未確定理由ごとに集計した情報の一覧である。すなわち，未確定理由一覧は，欠陥未確定の指摘を未確定理由ごとにまとめた情報の一覧となる。未確定理由一覧において，件数は，同じ未確定理由を持つ欠陥未確定の指摘の集計結果である。条件設定は，その未確定理由に対して，未確定理由を解消する条件が設定されているか否かを示している。条件設定が“未”であれば，未確定理由を解消する条件がまだ設定されていない。条件設定が“済”であれば，未確定理由を解消する条件が設定されている。
【０１２１】
欠陥指摘画面において，指摘一覧は，指摘番号一覧または未確定理由一覧において，選択された項目に属する欠陥箇所の指摘の一覧である。
【０１２２】
図１１に示す欠陥指摘画面１４５ａは，指摘番号一覧において，指摘番号５０１１の項目が選択された状態の欠陥指摘画面の例を示している。図１１に示す欠陥指摘画面１４５ａでは，指摘番号５０１１に該当する１件の×と判定された箇所の指摘が提示されている。図１１の欠陥指摘画面１４５ａに示すように，指摘一覧では，欠陥箇所の指摘ごとに，欠陥情報１３０ａに記録された各情報が提示される。
【０１２３】
図１２は，本実施の形態による欠陥指摘画面の例（２）を示す図である。
【０１２４】
図１１に示す欠陥指摘画面１４５ａにおいて，ユーザが，未確定理由一覧のｇｅｔｎｕｍ復帰値未確定の項目を選択すると，欠陥指摘画面出力部１４は，図１２に示す欠陥指摘画面１４５ｂをディスプレイ２０に表示する。図１２に示す欠陥指摘画面１４５ｂでは，指摘一覧に，未確定理由がｇｅｔｎｕｍ復帰値未確定である３件の欠陥未確定の指摘が提示されている。
【０１２５】
図１２に示すように，本実施の形態では，共通の未確定要素を含む複数の箇所について，それらの複数の箇所のそれぞれを示す情報と，共通の未確定要素を示す情報とを対応付けた欠陥指摘画面１４５ｂが表示される。共通の未確定要素を含む複数の箇所の指摘をまとめて提示することにより，これらの指摘を確認するユーザの手間を軽減することができる。
【０１２６】
図１２に示す欠陥指摘画面１４５ｂの未確定理由一覧において，ｇｅｔｎｕｍ復帰値未確定について，未確定理由を解消する条件は未設定である。図１２に示す欠陥指摘画面１４５ｂの指摘一覧では，未確定理由を解消する条件の設定が未設定であるため，判定がすべて△のままである。
【０１２７】
未確定理由を解消する条件を設定する場合には，ユーザは，未確定理由が選択された状態で，メニュー等により条件の設定を実行する。条件設定画面出力部１６は，欠陥情報記憶部１３に記憶された欠陥情報から，選択された未確定理由を持つ欠陥箇所の情報を抽出し，未確定理由を解消する条件を入力する条件設定画面を生成する。条件設定画面出力部１６は，生成された条件設定画面をディスプレイ２０に出力する。
【０１２８】
このとき，ヒント情報生成部１５が，ユーザによる未確定理由を解消する条件の入力を支援するヒント情報を生成するようにしてもよい。条件設定画面出力部１６は，生成されたヒント情報を含む条件設定画面を，ディスプレイ２０に出力する。
【０１２９】
図１３は，本実施の形態による条件設定画面の例（１）を示す図である。
【０１３０】
図１３に示す条件設定画面１６０ａは，未確定理由がｇｅｔｎｕｍ復帰値未確定である欠陥未確定の指摘について，条件設定画面出力部１６が生成し，ディスプレイ２０に出力する条件設定画面の一例である。図１３に示す条件設定画面１６０ａにおいて，ユーザは，未確定理由がｇｅｔｎｕｍ復帰値未確定である欠陥未確定の指摘について，まとめて，未確定理由を解消する条件を入力することができる。図１３に示す条件設定画面１６０ａは，条件設定の欄と，指摘一覧とを有している。
【０１３１】
条件設定画面において，条件設定の欄は，ユーザが未確定理由を解消する条件を入力し，条件設定の実行を指示する欄である。図１３に示す条件設定画面１６０ａにおける条件設定の欄では，未確定理由を解消する条件として，ｇｅｔｎｕｍ復帰値の条件が入力可能である。
【０１３２】
条件設定画面において，指摘一覧は，条件を設定する未確定理由を持つ欠陥未確定の指摘の一覧である。指摘一覧において，ヒントの欄には，ヒント情報生成部１５により生成されたヒント情報が提示される。図１３に示す条件設定画面１６０ａにおいて，ヒントの欄には，ｇｅｔｎｕｍ復帰値未確定の未確定理由を持つ欠陥未確定の指摘ごとに，判定が○となるｇｅｔｎｕｍ復帰値の範囲と，判定が×となるｇｅｔｎｕｍ復帰値の範囲とが提示されている。ユーザは，これらのヒントを参照して，入力する未確定理由を解消する条件を決定する。
【０１３３】
ここで，図１３に示す条件設定画面１６０ａの指摘一覧における，ファイルａ．ｃの行番号１５に関する欠陥未確定の指摘を例として，ヒント情報の生成を説明する。
【０１３４】
ヒント情報生成部１５は，図１０に示す欠陥情報１３０ａにおいて，ｇｅｔｎｕｍ復帰値未確定の未確定理由を持つファイルａ．ｃの行番号１５のレコードから，判定理由の情報を取得する。図１０に示す欠陥情報１３０ａから，判定理由の情報として，配列範囲：０〜１４，添字範囲：０〜ｇｅｔｎｕｍ復帰値が得られる。
【０１３５】
ヒント情報生成部１５は，得られた判定理由の情報から，判定が○となるｇｅｔｎｕｍ復帰値の範囲を求める。配列範囲が０〜１４であるので，添字範囲が配列範囲内となるｇｅｔｎｕｍ復帰値の範囲は，０〜１４となる。同様に，ヒント情報生成部１５は，得られた判定理由の情報から，判定が×となるｇｅｔｎｕｍ復帰値の範囲を求める。配列範囲が０〜１４であるので，添字範囲が配列範囲外となるｇｅｔｎｕｍ復帰値の範囲は，０〜１４以外となる。
【０１３６】
このように，ヒント情報生成部１５は，欠陥情報の判定理由の情報から，欠陥未確定（△）の指摘を欠陥でない（○）ことを示す指摘に変換する条件や，欠陥未確定（△）の指摘を欠陥である（×）ことを示す指摘に変換する条件を生成することができる。
【０１３７】
図１４は，本実施の形態のヒント情報生成部および条件設定画面出力部による条件設定画面出力処理フローチャートである。
【０１３８】
ユーザにより，未確定理由が指定されて，その指定された未確定理由を解消する条件の設定が指示されると，ヒント情報生成部１５は，選択された未確定理由を持つ欠陥未確定の指摘を１つ選択する（ステップＳ１３０）。
【０１３９】
ヒント情報生成部１５は，欠陥情報記憶部１３に記憶された欠陥情報から，選択された欠陥未確定の指摘における判定理由の情報を取得する（ステップＳ１３１）。
【０１４０】
ヒント情報生成部１５は，取得された判定理由の情報から，選択された欠陥未確定の指摘を欠陥である（×）ことを示す指摘に変換する条件の情報を生成する（ステップＳ１３２）。また，ヒント情報生成部１５は，取得された判定理由の情報から，選択された欠陥未確定の指摘を欠陥でない（○）ことを示す指摘に変換する条件の情報を生成する（ステップＳ１３３）。これらの生成された情報が，ヒント情報となる。
【０１４１】
ヒント情報生成部１５は，指定された未確定理由を持つすべての欠陥未確定の指摘について，処理が終了したかを判定する（ステップＳ１３４）。
【０１４２】
すべての欠陥未確定の指摘について処理が終了していなければ（ステップＳ１３４のＮＯ），ヒント情報生成部１５は，ステップＳ１３０に戻って，次の欠陥未確定の指摘についての処理に移る。
【０１４３】
すべての欠陥未確定の指摘について処理が終了していれば（ステップＳ１３４のＹＥＳ），条件設定画面出力部１６は，生成されたヒント情報を含む条件設定画面を，ディスプレイ２０に出力する（ステップＳ１３５）。
【０１４４】
ディスプレイ２０に表示された条件設定画面において，ユーザは，キーボード／マウス３０を用いて，未確定理由を解消する条件を入力する。条件入力受付部１７は，ユーザによる未確定理由を解消する条件の入力を受け付ける。
【０１４５】
図１５は，本実施の形態による条件設定画面の例（２）を示す図である。
【０１４６】
図１３に示す条件設定画面１６０ａにおいて，ユーザが入力条件の欄に条件を入力し，設定ボタンを押下すると，条件設定画面出力部１６は，図１５に示す条件設定画面１６０ｂをディスプレイ２０に表示する。図１５に示す条件設定画面１６０ｂでは，入力された条件に応じて，指摘一覧に提示された各欠陥未確定の指摘における△の判定が，○の判定や×の判定に変換されている。
【０１４７】
例えば，ファイルａ．ｃの行番号１５に関する欠陥未確定の指摘の判定理由において，ｇｅｔｎｕｍ復帰値に入力された条件０，５〜１４を設定すると，添字範囲：０〜ｇｅｔｎｕｍ復帰値は，０〜０，５〜１４となる。このとき添字範囲は，配列範囲：０〜１４の範囲内であるので，図１５の条件設定画面１６０ｂに示すように，ファイルａ．ｃの行番号１５に関する欠陥未確定の指摘の判定は，入力されたｇｅｔｎｕｍ復帰値の条件によって，欠陥でない（○）ことを示す指摘の判定に変換される。
【０１４８】
また，ファイルａ．ｃの行番号１８に関する欠陥未確定の指摘の判定理由において，ｇｅｔｎｕｍ復帰値に入力された条件０，５〜１４を設定すると，添字範囲：０〜ｇｅｔｎｕｍ復帰値＋１０は，０〜１０，１５〜２４となる。このとき添字範囲は，配列範囲：０〜１９の範囲を超えているので，図１５の条件設定画面１６０ｂに示すように，ファイルａ．ｃの行番号１８に関する欠陥未確定の指摘の判定は，入力されたｇｅｔｎｕｍ復帰値の条件によって，欠陥である（×）ことを示す指摘の判定に変換される。
【０１４９】
また，ファイルｂ．ｃの行番号３０に関する欠陥未確定の指摘の判定理由において，ｇｅｔｎｕｍ復帰値に入力された条件０，５〜１４を設定すると，除数は，０〜１０，１５〜２４となる。このとき，除数が０となってしまう可能性があるので，図１５の条件設定画面１６０ｂに示すように，ファイルｂ．ｃの行番号３０に関する欠陥未確定の指摘の判定は，入力されたｇｅｔｎｕｍ復帰値の条件によって，欠陥である（×）ことを示す指摘の判定に変換される。
【０１５０】
図１５に示す条件設定画面１６０ｂの指摘一覧において，ファイルｂ．ｃの行番号３０に関する欠陥未確定の指摘は，０除算についての欠陥箇所の指摘である。図１５の条件設定画面１６０ｂに示すように，配列外参照と０除算のように異なる欠陥の欠陥未確定の指摘についても，同じ未確定理由を持つ欠陥未確定の指摘であれば，ユーザによる１回の未確定理由を解消する条件の入力で，まとめて変換することができる。個々の欠陥未確定の指摘ごとや欠陥の種類ごとに，未確定理由を解消する条件を設定する必要がないので，ユーザの負担は少ない。
【０１５１】
条件入力受付部１７により受け付けられた未確定理由を解消する条件は，未確定理由に対応付けられて，条件情報記憶部１８に記憶された条件情報に記録される。
【０１５２】
図１６は，本実施の形態による条件情報の例を示す図である。
【０１５３】
図１６に示す条件情報１８０は，ｇｅｔｎｕｍ復帰値未確定の未確定理由を解消する条件が記録された条件情報の例を示している。図１６に示す条件情報１８０において，入力条件は，ユーザにより入力された未確定理由を解消する条件である。図１６に示す条件情報１８０では，ｇｅｔｎｕｍ復帰値未確定の未確定理由に対応付けて，その未確定理由を解消する条件としてｇｅｔｎｕｍ復帰値の条件０，５〜１４が記録されている。
【０１５４】
指摘変換部１４１は，欠陥指摘画面出力部１４が欠陥情報に基づいた欠陥指摘画面を出力する際に，条件情報で条件が対応付けられている未確定理由を持つ欠陥未確定の指摘を，その条件で変換する。欠陥指摘画面出力部１４は，条件で変換された欠陥未確定の指摘については，その変換結果を用いて欠陥指摘画面を生成し，出力する。
【０１５５】
図１７は，本実施の形態による欠陥指摘画面の例（３）を示す図である。
【０１５６】
図１７に示す欠陥指摘画面１４５ｃは，図１１に示す欠陥指摘画面１４５ａに対してｇｅｔｎｕｍ復帰値未確定の未確定理由を解消する条件が設定された後の，欠陥指摘画面の例である。図１７の欠陥指摘画面１４５ｃに示すように，未確定理由一覧のｇｅｔｎｕｍ復帰値未確定の項目において，条件設定が，未確定理由を解消する条件が設定されていることを示す“済”となっている。
【０１５７】
図１５の条件設定画面１６０ｂに示すように，ｇｅｔｎｕｍ復帰値未確定の未確定理由を持つ指摘番号５０１２の２件の欠陥未確定（△）の指摘は，設定された条件によって，１件の欠陥でない（○）ことを示す指摘と，１件の欠陥である（×）ことを示す指摘とに変換される。この変換により，欠陥指摘画面でユーザに提示される指摘番号５０１２の欠陥未確定（△）の指摘が２件減る。図１７に示すように，欠陥指摘画面１４５ｃの指摘番号一覧の指摘番号５０１２の項目の件数が，図１１に示す欠陥指摘画面１４５ａの２０件から２件減って１８件となっている。減った欠陥未確定（△）の指摘のうち１件は，指摘番号５０１１の欠陥である（×）ことを示す欠陥に変換されている。そのため，図１７に示すように，欠陥指摘画面１４５ｃの指摘番号一覧の指摘番号５０１１の項目の件数が，図１１に示す欠陥指摘画面１４５ａの１件から増えて２件となっている。
【０１５８】
また，図１５の条件設定画面１６０ｂに示すように，ｇｅｔｎｕｍ復帰値未確定の未確定理由を持つ指摘番号５０４２の欠陥未確定（△）の指摘は，設定された条件によって，欠陥である（×）ことを示す指摘に変換される。この変換により，欠陥指摘画面でユーザに提示される指摘番号５０４２の欠陥未確定（△）の指摘が１件減る。図１７に示すように，欠陥指摘画面１４５ｃの指摘番号一覧の指摘番号５０４２の項目の件数が，図１１に示す欠陥指摘画面１４５ａの１件から減って，なくなっている。そのかわりに，図１７に示す欠陥指摘画面１４５ｃの指摘番号一覧では，指摘番号５０４１の項目が増えている。図１７に示す欠陥指摘画面１４５ｃにおいて，指摘番号５０４１は，指摘番号５０４２が０除算について△と判定された箇所の指摘番号であるのに対して，０除算について×と判定された箇所の指摘番号である。
【０１５９】
なお，本実施の形態では，欠陥でない（○）ことを示す欠陥に変換されたものについては，欠陥指摘画面上での指摘を行わない。図１７に示す欠陥指摘画面１４５ｃでは，欠陥未確定（△）の指摘が欠陥でない（○）ことを示す欠陥に変換された分だけ，図１１に示す欠陥指摘画面１４５ａに比べて欠陥箇所の指摘数が減っている。
【０１６０】
図１７に示す欠陥指摘画面１４５ｃは，指摘番号一覧において，指摘番号５０１１の項目が選択された状態の欠陥指摘画面の例を示している。図１７に示す欠陥指摘画面１４５ｃでは，指摘番号５０１１に該当する２件の×と判定された箇所の指摘が提示されている。そのうちの１件の指摘は，欠陥未確定の指摘から変換された欠陥であることを示す指摘である。
【０１６１】
図１８は，本実施の形態の欠陥指摘画面出力部による欠陥指摘画面出力処理フローチャートである。
【０１６２】
欠陥指摘画面出力部１４は，欠陥情報記憶部１３に記憶された欠陥情報に記録された欠陥箇所から，指摘する欠陥箇所を１つ選択する（ステップＳ１４０）。
【０１６３】
欠陥指摘画面出力部１４において，指摘変換部１４１は，選択された欠陥箇所の指摘が，欠陥未確定の指摘であるかを判定する（ステップＳ１４１）。
【０１６４】
欠陥未確定の指摘であれば（ステップＳ１４１のＹＥＳ），指摘変換部１４１は，条件情報記憶部１８に記憶された条件情報で，選択された欠陥未確定の指摘の未確定理由に応じた未確定理由を解消する条件が設定されているかを判定する（ステップＳ１４２）。
【０１６５】
未確定理由を解消する条件が設定されている場合には（ステップＳ１４２のＹＥＳ），指摘変換部１４１は，条件情報から，選択された欠陥未確定の指摘の未確定理由に対応付けられた，未確定理由を解消する条件を取得する（ステップＳ１４３）。指摘変換部１４１は，取得された未確定理由を解消する条件で，選択された欠陥未確定の指摘を変換する（ステップＳ１４４）。
【０１６６】
欠陥未確定の指摘でない場合（ステップＳ１４１のＮＯ），または未確定理由を解消する条件が設定されていない場合には（ステップＳ１４２のＮＯ），指摘変換部１４１は，選択された欠陥箇所の指摘の変換を行わない。
【０１６７】
欠陥指摘画面出力部１４は，指摘するすべての欠陥箇所について処理が終了したかを判定する（ステップＳ１４５）。
【０１６８】
指摘するすべての欠陥箇所について処理が終了していなければ（ステップＳ１４５のＮＯ），欠陥指摘画面出力部１４は，ステップＳ１４０に戻って，次の欠陥箇所の処理に移る。
【０１６９】
指摘するすべての欠陥箇所について処理が終了していれば（ステップＳ１４５のＹＥＳ），欠陥指摘画面出力部１４は，出力する欠陥箇所の指摘を集計する（ステップＳ１４６）。ここでは，例えば，図１７に示す欠陥指摘画面１４５ｃの例において，指摘番号一覧の各指摘番号ごとの欠陥箇所の指摘の件数が集計される。このとき，欠陥指摘画面出力部１４は，欠陥未確定の指摘が未確定理由を解消する条件で変換された結果に基づいて，集計を行う。
【０１７０】
欠陥指摘画面出力部１４は，欠陥指摘画面を生成する（ステップＳ１４７）。このとき，欠陥指摘画面出力部１４は，未確定理由を解消する条件が設定された欠陥未確定の指摘については，未確定理由を解消する条件で変換された結果を含む欠陥指摘画面を生成する。
【０１７１】
欠陥指摘画面出力部１４は，生成された欠陥指摘画面を，ディスプレイ２０に出力する（ステップＳ１４８）。出力される欠陥指摘画面は，未確定理由を解消する条件で欠陥未確定の指摘が変換された結果を含むものとなる。
【０１７２】
図１９は，本実施の形態の指摘変換部による指摘変換処理フローチャートである。
【０１７３】
ここでは，図１８のステップＳ１４４の処理において，配列外参照についての欠陥未確定の指摘を変換する例を説明する。
【０１７４】
指摘変換部１４１は，変換する対象の欠陥未確定の指摘の判定理由において，未確定理由となる要素に対して，設定された未確定理由を解消する条件を適用する（ステップＳ１５０）。例えば，未確定理由となる要素が判定理由の添字範囲におけるｇｅｔｎｕｍ復帰値である場合に，そのｇｅｔｎｕｍ復帰値に，設定されたｇｅｔｎｕｍ復帰値の条件を適用する。
【０１７５】
指摘変換部１４１は，未確定理由を解消する条件適用後に，添字範囲が配列範囲内であるかを判定する（ステップＳ１５１）。
【０１７６】
添字範囲が配列範囲内であれば（ステップＳ１５１のＹＥＳ），指摘変換部１４１は，対象の欠陥未確定（△）の指摘を，欠陥でない（○）ことを示す指摘に変換する（ステップＳ１５２）。
【０１７７】
添字範囲が配列範囲内でなければ（ステップＳ１５１のＮＯ），指摘変換部１４１は，対象の欠陥未確定（△）の指摘を，欠陥である（×）ことを示す指摘に変換する（ステップＳ１５３）。
【０１７８】
ここまで説明したように，本実施の形態の静的解析装置１０は，欠陥であることを示す指摘だけではなく，欠陥未確定の指摘の出力も行う。これにより，より多くの欠陥の可能性がある箇所の指摘が可能となる。
【０１７９】
このとき，ユーザにより入力された未確定理由を解消する条件で，欠陥未確定の指摘が欠陥であることを示す指摘や欠陥でないことを示す指摘に変換される。そのため，欠陥未確定の指摘を出力しつつも，出力される欠陥未確定の指摘の数を減らすことが可能である。
【０１８０】
また，欠陥未確定の指摘については未確定理由ごとにまとめた情報がユーザに提示され，ユーザは，未確定理由ごとにまとめて，その未確定理由を解消する条件を入力する条件を入力できる。これにより，欠陥未確定の指摘について，１つ１つ調べて欠陥を判断するといったユーザの負担を軽減することができる。
【０１８１】
ここまで，主に配列外参照の欠陥を指摘する例について説明したが，本実施の形態の静的解析により抽出された欠陥箇所の指摘は，当然他の様々な種類の欠陥でも実施可能である。以下では，さらに０番地参照の欠陥の例と，型の範囲を超える代入の欠陥の例とを紹介する。
【０１８２】
まず，０番地参照に関する欠陥を指摘する例を説明する。０番地参照は，上述したように，ポインタ変数にＮＵＬＬを設定しただけでポインタの指す領域をアクセスすることで，０番地をアクセスしてしまう欠陥である。
【０１８３】
図２０は，本実施の形態によるソースプログラムの例（２）を示す図である。
【０１８４】
図２０に示すソースプログラム１１０ｂは，０番地参照について欠陥であるか否かを確定できない箇所を含むソースプログラムの一例である。
【０１８５】
ここでは，欠陥情報生成部１２は，図２０に示すソースプログラム１１０ｂの静的解析を行い，欠陥情報を生成する。
【０１８６】
図２１は，本実施の形態による欠陥情報の例（２）を示す図である。
【０１８７】
図２１に示す欠陥情報１３０ｂは，図２０に示すソースプログラム１１０ｂから抽出された０番地参照に関する欠陥箇所が記録された欠陥情報の例である。
【０１８８】
図２１に示す欠陥情報１３０ｂにおいて，ファイルｃ．ｃは，図２０に示すソースプログラム１１０ｂのファイルを示している。図２１に示す欠陥情報１３０ｂにおいて，ファイルｃ．ｃの行番号２のレコードで示される欠陥箇所の情報は，０番地参照について欠陥であるか否かを確定できないとされた箇所の情報である。その未確定理由は，ｇｅｔｐｏｉｎｔｅｒの復帰値が，図２０に示すソースプログラム１１０ｂの解析だけでは特定できないということである。
【０１８９】
欠陥指摘画面出力部１４は，図２１に示す欠陥情報１３０ｂに基づいて，欠陥指摘画面をディスプレイ２０に出力する。
【０１９０】
図２２は，本実施の形態による欠陥指摘画面の例（４）を示す図である。
【０１９１】
図２２に示す欠陥指摘画面１４５ｄは，図２１に示す欠陥情報１３０ｂに基づいて生成され，ディスプレイ２０に出力された欠陥指摘画面の一例である。図２２に示す欠陥指摘画面１４５ｄでは，未確定理由一覧においてｇｅｔｐｏｉｎｔｅｒ復帰値未確定の項目が選択され，指摘一覧に，ｇｅｔｐｏｉｎｔｅｒ復帰値未確定の未確定理由を持つ，０番地参照に関する欠陥未確定の指摘が提示されている。
【０１９２】
図２３は，本実施の形態による条件設定画面の例（３）を示す図である。
【０１９３】
図２３に示す条件設定画面１６０ｃは，図２２に示す欠陥指摘画面１４５ｄにおいて，ｇｅｔｐｏｉｎｔｅｒ復帰値未確定が選択された状態で，ユーザに条件設定が指示されたときに，ディスプレイ２０に出力される条件設定画面の例である。
【０１９４】
ユーザは，図２３に示す条件設定画面１６０ｃにおいて，ｇｅｔｐｏｉｎｔｅｒ復帰値未確定の未確定理由を解消する条件として，ｇｅｔｐｏｉｎｔｅｒ復帰値の条件を入力する。条件入力受付部１７は，ユーザによるｇｅｔｐｏｉｎｔｅｒ復帰値の条件の入力を受け付ける。
【０１９５】
図２４は，本実施の形態による条件設定画面の例（４）を示す図である。
【０１９６】
図２４に示す条件設定画面１６０ｄは，図２３に示す条件設定画面１６０ｃにおいてｇｅｔｐｏｉｎｔｅｒ復帰値の条件が入力された後の条件設定画面の例を示している。図２４に示す条件設定画面１６０ｄでは，ユーザによりｇｅｔｐｏｉｎｔｅｒ復帰値の条件ｎｏｔＮＵＬＬが入力され，ｇｅｔｐｏｉｎｔｅｒ復帰値未確定の未確定理由を解消する条件として設定されている。
【０１９７】
図２４の条件設定画面１６０ｄにおいて，指摘一覧では，ファイルｃ．ｃの行番号２に関する欠陥未確定の指摘の判定理由において，ｇｅｔｐｏｉｎｔｅｒ復帰値に入力された条件ｎｏｔＮＵＬＬが設定される。このとき，変数ｐが参照するｇｅｔｐｏｉｎｔｅｒ復帰値はＮＵＬＬ以外となるので，図２４の条件設定画面１６０ｄに示すように，ファイルｃ．ｃの行番号２に関する欠陥未確定の指摘の判定は，欠陥でない（○）ことを示す指摘の判定に変換される。
【０１９８】
ユーザにより入力され，設定されたｇｅｔｐｏｉｎｔｅｒ復帰値の条件は，ｇｅｔｐｏｉｎｔｅｒ復帰値未確定の未確定理由と対応付けられて，条件情報記憶部１８に記憶された条件情報に記録される。欠陥指摘画面出力部１４において，指摘変換部１４１は，条件情報に基づいて，ｇｅｔｐｏｉｎｔｅｒ復帰値未確定の未確定理由を持つ欠陥未確定の指摘を，欠陥であることを示す指摘や欠陥でないことを示す指摘に変換する。欠陥指摘画面出力部１４は，ｇｅｔｐｏｉｎｔｅｒ復帰値未確定の未確定理由を持つ欠陥未確定の指摘については，設定されたｇｅｔｐｏｉｎｔｅｒ復帰値の条件で変換された結果を用いて欠陥指摘画面を生成し，ディスプレイ２０に出力する。
【０１９９】
図２５は，本実施の形態による欠陥指摘画面の例（５）を示す図である。
【０２００】
図２５に示す欠陥指摘画面１４５ｅは，図２２に示す欠陥指摘画面１４５ｄに対してｇｅｔｐｏｉｎｔｅｒ復帰値未確定の未確定理由を解消する条件が設定された後の，欠陥指摘画面の例である。図２５の欠陥指摘画面１４５ｅに示すように，未確定理由一覧のｇｅｔｐｏｉｎｔｅｒ復帰値未確定の項目において，条件設定が，未確定理由を解消する条件が設定されていることを示す“済”となっている。
【０２０１】
図２４の条件設定画面１６０ｄに示すように，ｇｅｔｐｏｉｎｔｅｒ復帰値未確定の未確定理由を持つ指摘番号５０２２の欠陥未確定（△）の指摘は，設定された条件によって，欠陥でない（○）ことを示す指摘に変換される。この変換により，欠陥指摘画面でユーザに提示される指摘番号５０２２の欠陥未確定（△）の指摘が１件減る。図２５に示す欠陥指摘画面１４５ｅでは，指摘番号一覧の指摘番号５０２２の項目の件数が図２２に示す欠陥指摘画面１４５ｄの１件から減って０件となってしまったため，指摘番号５０２２の項目がなくなっている。
【０２０２】
なお，本実施の形態の説明を簡単にするために，図２２に示す欠陥指摘画面１４５ｄは０番地参照についての欠陥未確定の指摘１件のみの欠陥指摘画面としていたため，図２５に示す欠陥指摘画面１４５ｅは，欠陥箇所の指摘がない欠陥指摘画面となっている。実際の欠陥指摘画面には，関連する複数のソースプログラムに対する，複数の欠陥の種類についての静的解析の結果として抽出された多数の欠陥箇所の指摘が提示されるので，欠陥箇所の指摘がない欠陥指摘画面となることはまずない。
【０２０３】
次に，型の範囲を超える代入に関する欠陥を指摘する例を説明する。型の範囲を超える代入は，代入式において左式の型の幅よりも右式の型の幅が大きい場合に，正しい値が代入されない欠陥である。
【０２０４】
図２６は，本実施の形態によるソースプログラムの例（３）を示す図である。
【０２０５】
図２６に示すソースプログラム１１０ｃは，型の範囲を超える代入について欠陥であるか否かを確定できない箇所を含むソースプログラムの一例である。
【０２０６】
ここでは，欠陥情報生成部１２は，図２６に示すソースプログラム１１０ｃの静的解析を行い，欠陥情報を生成する。
【０２０７】
図２７は，本実施の形態による欠陥情報の例（３）を示す図である。
【０２０８】
図２７に示す欠陥情報１３０ｃは，図２６に示すソースプログラム１１０ｃから抽出された型の範囲を超える代入に関する欠陥箇所が記録された欠陥情報の例である。
【０２０９】
図２７に示す欠陥情報１３０ｃにおいて，ファイルｄ．ｃは，図２６に示すソースプログラム１１０ｃのファイルを示している。図２７に示す欠陥情報１３０ｃにおいて，ファイルｄ．ｃの行番号５のレコードで示される欠陥箇所の情報は，型の範囲を超える代入について欠陥であるか否かを確定できないとされた箇所の情報である。その未確定理由は，ｄａｔａの画面入力値が，図２６に示すソースプログラム１１０ｃの解析だけでは特定できないということである。
【０２１０】
欠陥指摘画面出力部１４は，図２７に示す欠陥情報１３０ｃに基づいて，欠陥指摘画面をディスプレイ２０に出力する。
【０２１１】
図２８は，本実施の形態による欠陥指摘画面の例（６）を示す図である。
【０２１２】
図２８に示す欠陥指摘画面１４５ｆは，図２７に示す欠陥情報１３０ｃに基づいて生成され，ディスプレイ２０に出力された欠陥指摘画面の一例である。図２８に示す欠陥指摘画面１４５ｆでは，未確定理由一覧においてｄａｔａの画面入力値未確定の項目が選択され，指摘一覧に，ｄａｔａの画面入力値未確定の未確定理由を持つ，型の範囲を超える代入に関する欠陥未確定の指摘が提示されている。
【０２１３】
図２９は，本実施の形態による条件設定画面の例（５）を示す図である。
【０２１４】
図２９に示す条件設定画面１６０ｅは，図２８に示す欠陥指摘画面１４５ｆにおいて，ｄａｔａの画面入力値未確定が選択された状態で，ユーザに条件設定が指示されたときに，ディスプレイ２０に出力される条件設定画面の例である。
【０２１５】
ユーザは，図２９に示す条件設定画面１６０ｅにおいて，ｄａｔａの画面入力値未確定の未確定理由を解消する条件として，ｄａｔａの画面入力値の条件を入力する。条件入力受付部１７は，ユーザによるｄａｔａの画面入力値の条件の入力を受け付ける。
【０２１６】
図３０は，本実施の形態による条件設定画面の例（６）を示す図である。
【０２１７】
図３０に示す条件設定画面１６０ｆは，図２９に示す条件設定画面１６０ｅにおいてｄａｔａの画面入力値の条件が入力された後の条件設定画面の例を示している。図３０に示す条件設定画面１６０ｆでは，ユーザによりｄａｔａの画面入力値の条件０〜６５５３５が入力され，ｄａｔａの画面入力値未確定の未確定理由を解消する条件として設定されている。
【０２１８】
図３０の条件設定画面１６０ｆにおいて，指摘一覧では，ファイルｄ．ｃの行番号５に関する欠陥未確定の指摘の判定理由において，ｄａｔａの画面入力値に入力された条件０〜６５５３５が設定される。このとき，代入式の右辺の範囲は左辺の範囲を超えているので，図３０の条件設定画面１６０ｆに示すように，ファイルｄ．ｃの行番号５に関する欠陥未確定の指摘の判定は，欠陥である（×）ことを示す指摘の判定に変換される。
【０２１９】
ユーザにより入力され，設定されたｄａｔａの画面入力値の条件は，ｄａｔａの画面入力値未確定の未確定理由と対応付けられて，条件情報記憶部１８に記憶された条件情報に記録される。欠陥指摘画面出力部１４において，指摘変換部１４１は，条件情報に基づいて，ｄａｔａの画面入力値未確定の未確定理由を持つ欠陥未確定の指摘を，欠陥であることを示す指摘や欠陥でないことを示す指摘に変換する。欠陥指摘画面出力部１４は，ｄａｔａの画面入力値未確定の未確定理由を持つ欠陥未確定の指摘については，設定されたｄａｔａの画面入力値の条件で変換された結果を用いて欠陥指摘画面を生成し，ディスプレイ２０に出力する。
【０２２０】
図３１は，本実施の形態による欠陥指摘画面の例（７）を示す図である。
【０２２１】
図３１に示す欠陥指摘画面１４５ｇは，図２８に示す欠陥指摘画面１４５ｆに対してｄａｔａの画面入力値未確定の未確定理由を解消する条件が設定された後の，欠陥指摘画面の例である。図３１の欠陥指摘画面１４５ｇに示すように，未確定理由一覧のｄａｔａの画面入力値未確定の項目において，条件設定が，未確定理由を解消する条件が設定されていることを示す“済”となっている。
【０２２２】
図３０の条件設定画面１６０ｆに示すように，ｄａｔａの画面入力値未確定の未確定理由を持つ指摘番号５０５２の欠陥未確定（△）の指摘は，設定された条件によって，欠陥である（×）ことを示す指摘に変換される。この変換により，欠陥指摘画面でユーザに提示される指摘番号５０５２の欠陥未確定（△）の指摘が１件減り，変換結果として指摘番号５０５１の欠陥である（×）ことを示す指摘が増える。図３１に示す欠陥指摘画面１４５ｇでは，指摘番号一覧の指摘番号５０５２の項目の件数が図２８に示す欠陥指摘画面１４５ｆの１件から減って０件となってしまったため，指摘番号５０５２の項目がなくなり，指摘番号５０５１の項目が増えている。また，図３１に欠陥指摘画面１４５ｇの指摘一覧には，欠陥未確定（△）の指摘から変換された，欠陥である（×）ことを示す指摘が提示されている。
【０２２３】
なお，型の範囲を超える代入の例でも，０番地参照の例と同様に，本実施の形態の説明を簡単にするために，型の範囲を超える代入の欠陥のみの指摘が提示された欠陥指摘画面の例を挙げている。
【０２２４】
以上，本実施の形態について説明したが，本発明はその主旨の範囲において種々の変形が可能であることは当然である。
【０２２５】
例えば，本実施の形態では，Ｃ言語で記述されたソースプログラムの静的解析の例が示されているが，静的解析の対象となるソースプログラムを記述するプログラミング言語が，ＪａｖａやＦｏｒｔｒａｎなどの他のプログラミング言語であってもよい。なお，Ｊａｖａは，米国サンマイクロシステムズ社の商標である。
【符号の説明】
【０２２６】
１０  静的解析装置
１１  ソースプログラム記憶部
１２  欠陥情報生成部
１２１  ソース解析部
１２２  ソース情報記憶部
１２３  欠陥判定抽出部
１３  欠陥情報記憶部
１４  欠陥指摘画面出力部
１４１  指摘変換部
１５  ヒント情報生成部
１６  条件設定画面出力部
１７  条件入力受付部
１８  条件情報記憶部
２０  ディスプレイ
３０  キーボード／マウス
【図１】
0005556655.tif 000002
【図２】
0005556655.tif 000003
【図３】
0005556655.tif 000004
【図４】
0005556655.tif 000005
【図５】
0005556655.tif 000006
【図６】
0005556655.tif 000007
【図７】
0005556655.tif 000008
【図８】
0005556655.tif 000009
【図９】
0005556655.tif 000010
【図１０】
0005556655.tif 000011
【図１１】
0005556655.tif 000012
【図１２】
0005556655.tif 000013
【図１３】
0005556655.tif 000014
【図１４】
0005556655.tif 000015
【図１５】
0005556655.tif 000016
【図１６】
0005556655.tif 000017
【図１７】
0005556655.tif 000018
【図１８】
0005556655.tif 000019
【図１９】
0005556655.tif 000020
【図２０】
0005556655.tif 000021
【図２１】
0005556655.tif 000022
【図２２】
0005556655.tif 000023
【図２３】
0005556655.tif 000024
【図２４】
0005556655.tif 000025
【図２５】
0005556655.tif 000026
【図２６】
0005556655.tif 000027
【図２７】
0005556655.tif 000028
【図２８】
0005556655.tif 000029
【図２９】
0005556655.tif 000030
【図３０】
0005556655.tif 000031
【図３１】
0005556655.tif 000032