(57)【要約】【課題】本発明は特定の技術者の経験や感覚に左右されず、ソフトウェア開発組織やプロジェクトの特質に合致したソースコード静的解析の警告の優先順位付けを行う。【解決手段】警告情報の各々に対応して、第１ソースコード及び当該第１ソースコードから修正された第２ソースコードの夫々を静的に解析した結果、当該警告情報の警告が検出された回数である第１警告出力数及び第２警告出力数を警告出力数テーブル５２に格納する。優先順位決定実行部１２０は、警告情報に対応して警告出力数テーブル５２に記憶されている第１警告出力数と第２警告出力数とに基づいて、第２警告出力数が第１警告出力数に対して減少した減少率を算出する。そして、優先順位決定実行部１２０は、減少率が大きい程警告情報に付与する優先順位を高くする。【選択図】図５
2008052424.tif 000002
【特許請求の範囲】
【請求項１】
複数のコードを含むソースコードを解析した結果検出される各々の警告を識別するための警告情報に優先順位を付与するソースコード解析装置であって、
前記警告情報の各々に対応して第１ソースコードを解析した結果当該警告情報の警告が検出された回数である第１警告数と当該第１ソースコードから修正された第２ソースコードを解析した結果当該警告情報の警告が検出された回数である第２警告数とを記憶する記憶手段と、
前記警告情報の各々について、当該警告情報に対応して前記記憶手段に記憶されている前記第１警告数と前記第２警告数とに基づいて当該警告情報の優先順位を決定する決定手段と、
を備えたことを特徴とするソースコード解析装置。
【請求項２】
ソースコードを解析して警告が検出された各々のコードのコーディング行に関する情報に、当該コードに関連した警告の警告情報と前記決定手段により決定された当該警告情報の優先順位とを関連付けて出力ファイルを生成する生成手段
を更に備えることを特徴とする請求項１記載のソースコード解析装置。
【請求項３】
前記決定手段は、前記警告情報に対応した前記第２警告数が当該警告情報に対応した前記第１警告数に対して減少した減少率を算出し、当該減少率に基づいて減少率が高い程優先順位が高くなるように当該警告情報の優先順位の決定を行うことを特徴とする請求項１記載のソースコード解析装置。
【請求項４】
優先順位を決定する際に基準にする少なくとも１つの閾値を定め、
前記決定手段は、前記警告情報の各々について、当該警告情報に対して算出された前記減少率を各前記閾値と比較し、比較の結果に基づいて当該警告情報の優先順位の決定を行うことを特徴とする請求項３記載のソースコード解析装置。
【請求項５】
前記記憶手段は、更に、前記警告情報の各々に対応して優先順位を決定する際に基準にする少なくとも１つの閾値を記憶しており、
前記決定手段は、前記警告情報の各々について、当該警告情報に対して算出された前記減少率を当該警告情報に対応して前記記憶手段に記憶されている各前記閾値と比較し、比較の結果に基づいて当該警告情報の優先順位の決定を行うことを特徴とする請求項３記載のソースコード解析装置。
【請求項６】
前記記憶手段は、更に、前記警告情報の各々に対応して優先順位の下限を記憶しており、
前記決定手段は、前記警告情報の優先順位が当該警告情報に対応して前記記憶手段に記憶されている前記優先順位の下限を下回らないように当該警告情報の優先順位の決定を行うことを特徴とする請求項１記載のソースコード解析装置。
【請求項７】
前記決定手段は、前記第１警告数が所定数以上である前記警告情報に対して当該警告情報の優先順位の決定を行い、
前記ソースコード解析装置は、
前記第１警告数が前記所定数未満である前記警告情報に対して当該警告情報の優先順位を予め定められた優先順位にすることを特徴とする請求項１記載のソースコード解析装置。
【請求項８】
前記記憶手段は、各々の前記第１警告数及び前記第２警告数を予め定められた区分に分けて記憶しており、
前記決定手段は、各々の前記区分の前記第１警告数及び前記第２警告数並びに当該区分に定められた重み係数に基づいて、前記減少率を算出することを特徴とする請求項３記載のソースコード解析装置。
【請求項９】
複数のコードを含むソースコードを解析した結果検出される各々の警告を識別するための警告情報に優先順位を付与するソースコード解析装置において行われるソースコード解析方法であって、
前記ソースコード解析装置は、前記警告情報の各々に対応して第１ソースコードを解析した結果当該警告情報の警告が検出された回数である第１警告数と当該第１ソースコードから修正された第２ソースコードを解析した結果当該警告情報の警告が検出された回数である第２警告数とを記憶する記憶手段を有しており、
前記警告情報の各々について、当該警告情報に対応して前記記憶手段に記憶されている前記第１警告数と前記第２警告数とに基づいて当該警告情報の優先順位を決定する決定手順
を有することを特徴とするソースコード解析方法。
【請求項１０】
複数のコードを含むソースコードを解析した結果検出される各々の警告を識別するための警告情報に優先順位を付与し、前記警告情報の各々に対応して第１ソースコードを解析した結果当該警告情報の警告が検出された回数である第１警告数と当該第１ソースコードから修正された第２ソースコードを解析した結果当該警告情報の警告が検出された回数である第２警告数とを記憶する記憶手段を有するソースコード解析装置を、
前記警告情報の各々について、当該警告情報に対応して前記記憶手段に記憶されている前記第１警告数と前記第２警告数とに基づいて当該警告情報の優先順位を決定する決定手段
として機能させることを特徴とするソースコード解析プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェア開発の技術分野に関する。
【０００２】
ソフトウェアの開発において、コーディング時の誤りのためにソフトウェアが正常に動作しないという不具合が発生することがある。この誤りはソースコードをレビューすることにより解決することが可能である。しかしながら、例えば、ソフトウェアの規模が大きければ誤りが増加するため、大規模なソフトウェアの開発においてはソースコードを単にレビューしてソースコードから誤りを取り除くことはプログラマにとって負担が大きい。
【０００３】
そこで、プログラマの負担を軽減するための装置として、例えば、５００個のコーディングルールを使用してソースコードを静的に解析し、エラーを引き起こす恐れのあるコーディングルールに合致しないコードを検出する静的解析装置がある。
静的解析装置は、ソースコードを静的に解析した結果、エラーを引き起こす恐れのあるコードを検出した場合、当該コードのコーディング行に関する情報に、検出内容に応じて出力される警告（ワーニング）を識別するための警告番号を関連付けして出力ファイルを生成する。
【０００４】
ところで、警告には、ソースプログラムが正常に動作しない可能性が高いものからその可能性が低いものまで、様々なものがある。つまり、警告には、ソースコードを修正する必要性が高いと考えられる非常に重要な警告からその必要性が低いと考えられるあまり重要でない警告まで、様々である。このため、通常、警告は重要度に応じてランク付け（優先順位付け）されている（例えば、特許文献１参照。）。
【特許文献１】特開２００４−１４５３８１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、これまでは、ソフトウェア開発に長年携わってきた熟練者が自身の経験や感覚に基づいて警告番号に対して優先順位をつけてきた。このように、警告番号の優先順位付けが熟練者の経験と感覚に基づいて行われてきたため、警告番号の優先順位付けに客観性が乏しかった。
また、例えば、ソフトウェアの正常動作にあまり関係していない警告であってもソフトウェア開発組織でソースプログラム全体或いはソースプログラム間で統一を図るために、できるだけコーディングルールに合致するようにコードを修正しようとする警告があると考えられる。このような場合は、ソースプログラムが正常に動作するかどうかの観点からは重要度が低い警告であっても、そのソフトウェア開発組織ではその警告の警告番号に高い優先順位をつける必要がある。このように、熟練者が経験と感覚とに基づいて行った警告番号の優先順位付けは、熟練者が関係しないソフトウェア開発組織やプロジェクトの特質に合致しない場合がある。
【０００６】
そこで、本発明は特定の技術者の経験や感覚に左右されず、ソフトウェア開発組織やプロジェクトの特質に合致した警告の優先順位付けを行うことができるソースコード解析装置、ソースコード解析方法及びソースコード解析プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記目的を達成するために本発明のソースコード解析装置は、複数のコードを含むソースコードを解析した結果検出される各々の警告を識別するための警告情報に優先順位を付与するソースコード解析装置であって、前記警告情報の各々に対応して第１ソースコードを解析した結果当該警告情報の警告が検出された回数である第１警告数と当該第１ソースコードから修正された第２ソースコードを解析した結果当該警告情報の警告が検出された回数である第２警告数とを記憶する記憶手段と、前記警告情報の各々について、当該警告情報に対応して前記記憶手段に記憶されている前記第１警告数と前記第２警告数とに基づいて当該警告情報の優先順位を決定する決定手段と、を備える。
【０００８】
本発明のソースコード解析方法は、複数のコードを含むソースコードを解析した結果検出される各々の警告を識別するための警告情報に優先順位を付与するソースコード解析装置において行われるソースコード解析方法であって、前記ソースコード解析装置は、前記警告情報の各々に対応して第１ソースコードを解析した結果当該警告情報の警告が検出された回数である第１警告数と当該第１ソースコードから修正された第２ソースコードを解析した結果当該警告情報の警告が検出された回数である第２警告数とを記憶する記憶手段を有しており、前記警告情報の各々について、当該警告情報に対応して前記記憶手段に記憶されている前記第１警告数と前記第２警告数とに基づいて当該警告情報の優先順位を決定する決定手順を有する。
【０００９】
本発明のソースコード解析プログラムは、複数のコードを含むソースコードを解析した結果検出される各々の警告を識別するための警告情報に優先順位を付与し、前記警告情報の各々に対応して第１ソースコードを解析した結果当該警告情報の警告が検出された回数である第１警告数と当該第１ソースコードから修正された第２ソースコードを解析した結果当該警告情報の警告が検出された回数である第２警告数とを記憶する記憶手段を有するソースコード解析装置を、前記警告情報の各々について、当該警告情報に対応して前記記憶手段に記憶されている前記第１警告数と前記第２警告数とに基づいて当該警告情報の優先順位を決定する決定手段として機能させる。
【発明の効果】
【００１０】
上記のソースコード解析装置、ソースコード解析方法及びソースコード解析プログラムによれば、第１ソースコード及び当該第１ソースコードから修正された第２ソースコードを夫々静的に解析した結果警告が検出された回数である第１警告数及び第２警告数に基づいて当該警告を識別する警告情報の優先順位が決定される。
このように、以前に開発したソフトウェアや現在開発中のソフトウェアを開発する過程で警告情報に関連したコードが実際にどの程度修正されたかに基づいて当該警告情報の優先順位を決定するので、特定の技術者の経験や感覚に左右されることなく警告情報の優先順位付けを客観的に行うことができる。
【００１１】
また、プログラマ或いはプログラマが属するソフトウェア開発組織で以前に開発したソフトウェアや現在開発中のソフトウェアに関連した第１警告数及び第２警告数を用いることにより、プログラマやソフトウェア開発組織でソフトウェアの開発の際に行われたソースコードの修正を反映した警告情報の優先順位付けを行うことができる。これにより、警告情報の優先順位付けがソフトウェア開発組織やプロジェクトの特質に合致したものになる。
【００１２】
上記のソースコード解析装置において、ソースコードを解析して警告が検出された各々のコードのコーディング行に関する情報に、当該コードに関連した警告の警告情報と前記決定手段により決定された当該警告情報の優先順位とを関連付けて出力ファイルを生成する生成手段を更に備えるようにしてもよい。
これによれば、何れのコーディング行が警告に関連するものであるか、その警告がどのような種類のもので、優先順位はどの程度のものかを、プログラマは容易に把握することができるようになる。
【００１３】
上記のソースコード解析装置において、前記決定手段は、前記警告情報に対応した前記第２警告数が当該警告情報に対応した前記第１警告数に対して減少した減少率を算出し、当該減少率に基づいて減少率が高い程優先順位が高くなるように当該警告情報の優先順位の決定を行うようにしてもよい。
通常、プログラマは重要な警告に関連するコード程修正することが多い。
【００１４】
これによれば、ソフトウェアを開発する過程で警告情報に関連したコードが実際に修正された割合（第２警告数が第１警告数に対して減少した減少率）が高い程警告情報に高い優先順位が付与されるようになっている。このため、上記のソースコード解析装置は、上記の実情にあった警告情報の優先順位付けを行うことができるようになっている。
上記のソースコード解析装置において、優先順位を決定する際に基準にする少なくとも１つの閾値を定め、前記決定手段は、前記警告情報の各々について、当該警告情報に対して算出された前記減少率を各前記閾値と比較し、比較の結果に基づいて当該警告情報の優先順位の決定を行うようにしてもよい。
【００１５】
これによれば、減少率が高い程高い優先順位を警告情報に付与するための構成を簡易に実現することができる。
上記のソースコード解析装置において、前記記憶手段は、更に、前記警告情報の各々に対応して優先順位を決定する際に基準にする少なくとも１つの閾値を記憶しており、前記決定手段は、前記警告情報の各々について、当該警告情報に対して算出された前記減少率を当該警告情報に対応して前記記憶手段に記憶されている各前記閾値と比較し、比較の結果に基づいて当該警告情報の優先順位の決定を行うようにしてもよい。
【００１６】
これによれば、各々の警告情報に応じた閾値を設定することによって、各々の警告情報に適した閾値で警告情報の優先順位付けを行うことができる。
上記のソースコード解析装置において、前記記憶手段は、更に、前記警告情報の各々に対応して優先順位の下限を記憶しており、前記決定手段は、前記警告情報の優先順位が当該警告情報に対応して前記記憶手段に記憶されている前記優先順位の下限を下回らないように当該警告情報の優先順位の決定を行うようにしてもよい。
【００１７】
例えば、プログラマのソフトウェア開発の経験が浅いために当該プログラマがソフトウェアの動作に不具合を引き起こす可能性が高い警告情報に関連したコードをあまり修正しないことが起こり得る。このような場合に、減少率に基づいて警告情報の優先順位を決定してしまえば、高い優先順位が付与されなければならない警告情報に対して低い優先順位が付与されてしまう。
【００１８】
上記のソースコード解析装置によれば、各々の警告情報に応じた優先順位の下限を定め、警告情報の優先順位がその下限を下回らないようにしているために、上記の状況を回避することができる。
上記のソースコード解析装置において、前記決定手段は、前記第１警告数が所定数以上である前記警告情報に対して当該警告情報の優先順位の決定を行い、前記ソースコード解析装置は、前記第１警告数が前記所定数未満である前記警告情報に対して当該警告情報の優先順位を予め定められた優先順位にするようにしてもよい。
【００１９】
第１警告数が少なければ警告情報に関連したコードを修正した数が少し変わるだけで第１警告数と第２警告数との関係が大きく変わる。これでは、第１警告数が少ない場合には、重要であると考えられる警告情報に関連したコード程修正されるという考えを反映できずに、第１警告数が少ない警告情報には適切な優先順位が付与されないかもしれない。
上記のソースコード解析装置によれば、第１警告数が所定数以上である警告情報に対してのみ第１警告数と第２警告数とに基づく優先順位の決定を行うようにしているため、所定数を適切に選ぶことによって、上記の状況を回避することができる。
【００２０】
上記のソースコード解析装置において、前記記憶手段は、各々の前記第１警告数及び前記第２警告数を予め定められた区分に分けて記憶しており、前記決定手段は、各々の前記区分の前記第１警告数及び前記第２警告数並びに当該区分に定められた重み係数に基づいて、前記減少率を算出するようにしてもよい。
例えば、ソフトウェアの開発の経験の浅いプログラマとその経験が豊富なプログラマでは、後者のプログラマの方が前者のプログラマより重要な警告が検出されたコードをより確実に修正していると考えられる。また、古いソフトウェアの開発過程の修正より新しいソフトウェアの開発過程の修正の方が現在のソフトウェア開発組織で重要と考える警告情報に関連したコードをより多く修正していると考えられる。
【００２１】
上記のソースコード解析装置によれば、例えば、プログラマの経験に応じて、或いは、ソフトウェアが開発された時期に応じた重み係数を設定することによって、減少率の算出をより実情にあったものにすることが可能になる。
【発明を実施するための最良の形態】
【００２２】
≪第１の実施の形態≫
以下、本発明の第１の実施の形態について図面を参照しつつ説明する。
但し、本実施の形態及び後述の実施の形態では、ソフトウェア開発において、プログラマが警告の対象であったコードを修正した割合が多い警告程、プログラム開発組織等で重要な警告であると考えているとみなし、その割合が高い程警告に対してより高い優先順位を付与するものである。
【００２３】
＜装置構成＞
本実施の形態のソースコード解析装置の装置構成について図１を参照しつつ説明する。図１は本実施の形態のソースコード解析装置の装置構成図である。
但し、本実施の形態では、警告に付与される優先順位は、１，２，３の３通りであり、優先順位の値が小さい程重要な警告であるとする。
【００２４】
ソースコード解析装置１は、ＣＰＵ（Central Processing Unit）１１、記憶部１２、入力部１３、表示部１４及び印刷部１５を備える。
ＣＰＵ１１は、ソースコード解析装置１全体の各種制御や各種演算を行う。
本実施の形態では、ＣＰＵ１１は、予め用意された複数のコーディングルールを用いて、例えばソフトウェア開発の初期段階のソースコード（以下、第１ソースコードと言う。）を静的に解析し、コーディングルールに合致していないコードを検出した場合、検出結果に応じた警告（ワーニング）を識別するための警告番号を出力する。また、ＣＰＵ１１は、第１ソースコードから修正されたソースコード（以下、第２ソースコードと言う。）を静的に解析し、コーディングルールに合致していないコードを検出した場合、警告番号を出力する。
【００２５】
ＣＰＵ１１は、警告番号の各々について、第１ソースコードにおいて当該警告番号の警告が検出された回数と、第２ソースコードにおいて当該警告番号の警告が検出された回数とに基づいて、当該警告番号の優先順位を決定する。以下において、前者の検出された回数を第１警告出力数と言い、後者の検出された回数を第２警告出力数と言う。
ＣＰＵ１１は、第２ソースコードのコーディングルールに合致していないコードのコーディング行の情報に、警告番号と警告番号に付与された優先順位とを関連付けた出力ファイル（後に例示）を生成する。
【００２６】
記憶部１２は、ＲＯＭ（Read Only Memory）やＲＡＭ（Random Access Memory）などの半導体メモリ、ＨＤＤ（Hard Disk Drive）などによって構成される。
記憶部１２には、ソースプログラム解析装置１を制御するための各種制御プログラム、各種アプリケーションソフト、開発中のソースプログラム、処理結果などが格納される。
記憶部１２に記憶されているプログラムとして、静的解析プログラム、優先順位決定プログラム、ファイル生成プログラム等がある。
【００２７】
静的解析プログラムは、予め用意されたコーディングルールを用いてソースコードを静的に解析し、コーディングルールに合致していないコードを検出し、当該コードのコーディング行の情報と検出内容に応じた警告の警告番号とを出力し、警告番号の各々について当該警告番号が出力される出力数を集計して集計結果を後述の優先順位割付テーブルに格納するためのプログラムである。
【００２８】
優先順位決定プログラムは、後述の優先順位割付テーブルの記憶内容を参照して各警告番号に付与する優先順位を決定するためのプログラムである。
ファイル生成プログラムは、静的解析プログラムが実行された結果出力されるコーディング行の情報に、静的解析プログラムが実行された結果出力される警告番号と優先順位決定プログラムが実行された結果出力される当該警告番号の優先順位とを関連付けた出力ファイルを作成するためのプログラムである。
【００２９】
また、記憶部１２には、優先順位割付テーブル（後に詳述）及び警告出力数テーブル（後に詳述）等が記憶されている。
入力部１３は、キーボード、マウスなどのポインティングデバイスなどによって構成されており、押下信号をＣＰＵ１１に対して出力する。
表示部１４は、例えば、ＣＲＴ（Cathode Ray Tube）、液晶ディスプレイ、プラズマディスプレイなどの表示機器、ＬＥＤ（Light Emitting Diode）などの発光素子によって構成されている。表示部１４には、ＣＰＵ１１に制御されて、ソースファイル指定画面（後に詳述）及び出力ファイルの内容（後に詳述）等が表示される。
【００３０】
印刷部１５は、プリンタなどによって構成されており、ＣＰＵ１１に制御されて、例えば出力ファイルの内容（後に詳述）を用紙に印刷出力する。
＜警告＞
次に、警告の内容とそれを識別するための警告番号について図２を参照しつつ説明する。図２は、警告番号とその警告番号の警告の内容との一部を表した警告一覧表を示す図である。ただし、警告一覧表は記憶部１２に記憶されており、出力ファイルに警告番号に対応した警告内容を記述する際に利用される。
【００３１】
例えば、警告番号「１１」の警告の内容は「このｆｏｒループは一度しか実行されません。」、警告番号「１２」の警告の内容は「この実行文に到達できません。」、などが、予め用意されている。
＜ソースファイル指定画面＞
表示部１４に表示されるソースファイル指定画面について図３を参照しつつ説明する。図３は表示部１４に表示されるソースファイル指定画面の一例を示す図である。
【００３２】
ソースファイル指定画面には、プログラマ又はプログラマが属するソフトウェア開発組織に割り当てられた識別子（以下、プログラマＩＤと言う。）を入力するためのＩＤ入力欄１４ａ、及び静的解析を実行するソースファイルを入力するためのファイル指定欄１４ｂが設けられている。
また、ソースファイル指定画面には、修正前のソースコードの静的解析の実行か修正後のソースコードの静的解析の実行かを指定するためのラジオボタン１４ｃ、１４ｄが設けられている。
【００３３】
さらに、ソースファイル指定画面には、実行ボタン１４ｅ及びキャンセルボタン１４ｆが設けられている。
＜出力ファイルの内容＞
表示部１４に表示される出力ファイルの内容について図４を参照しつつ説明する。図４は表示部１４に表示される出力ファイルの内容の一例を示す図であり、（ａ）はソースコードそのものであり、（ｂ）はソースコードに優先順位や警告番号などの注釈が付記されたものである。但し、図４に一例を示した出力ファイルの内容は印刷部１５によって用紙に印刷出力されることもある。
【００３４】
図中の符号１４Ａは、ソースコードのコーディング行を指す。
符号１４Ｂが指す警告（：）の括弧内の前の値は優先順位を示し、括弧内の後の値は警告番号を示す。例えば、警告（２：１１）は、優先順位が２で、警告番号が１１であることを示し、警告（１：１３）は、優先順位が１で、警告番号が１３であることを示している。
【００３５】
符号１４Ｃが指す内容は、警告の内容を示しており、警告の内容は対応する警告（：）によって示される警告番号に対応して図２の警告一覧表に記憶されている警告の内容であり、例えば警告番号が１３の警告の内容は、“この論理演算の結果は「偽」に固定されています。”である。
＜機能構成＞
図１に装置構成を示したソースコード解析装置の機能構成について図５を参照しつつ説明する。図５は図１のソースコード解析装置の機能構成図である。
【００３６】
記憶部１２には、上述したように、優先順位割付テーブル５１及び警告出力数テーブル５２などが記憶されている。
（優先順位割付テーブル）
優先順位割付テーブル５１について図６を参照しつつ説明する。図６は優先順位割付テーブルの一例を示す図である。
【００３７】
優先順位割付テーブル５１には、フィールドとして、「警告番号」、「優先順位」、「第１閾値」、「第２閾値」、及び「優先順位下限値」がある。
ここで「優先順位下限値」とは優先順位の高低の下限値という意味である。本実施の形態では、プログラム制御のための優先順位の数値が小さい程重要な警告なので、プログラム制御のための優先順位の数値としては上限値になる。
【００３８】
フィールド「警告番号」には、警告を識別するために当該警告に割り当てられた警告番号が格納される。
フィールド「第１閾値」、「第２閾値」には、対応する警告番号に付与する優先順位を１，２，３の何れにするかを決定する際に基準になる閾値が格納されている。なお、以下において、フィールド「第１閾値」に格納されている閾値を第１閾値と言い、フィールド「第２閾値」に格納されている閾値を第２閾値と言う。
【００３９】
後に詳述する減少率が第１閾値を越えていれば優先順位「１」が、第２閾値を超え第１閾値以下であれば優先順位「２」が、第２閾値以下であれば優先順位「３」が、対応する警告番号に付与される。
フィールド「優先順位下限値」には、対応する警告番号に対して付与される優先順位の下限値（以下、優先順位下限値と言う。）が格納されている。
【００４０】
但し、フィールド「第１閾値」、「第２閾値」、「優先順位下限値」には、予め決められた値が格納される。なお、開発対象のソフトウェアを作成しているプログラマなどがフィールド「第１閾値」、「第２閾値」、「優先順位下限値」の値を任意に設定することができるようにソースコード解析装置１を構成してもよい。
（警告出力数テーブル）
警告出力数テーブル５２について図７を参照しつつ説明する。図７は警告出力数テーブルの一例を示す図である。
【００４１】
警告出力数テーブル５２には、フィールドとして、「警告番号」、「第１警告出力数」、「第２警告出力数」、及び「優先順位下限値」がある。
フィールド「警告番号」には、警告を識別するために当該警告に割り当てられた警告番号が格納される。
フィールド「第１警告出力数」には、第１ソースコードに対して静的解析プログラムを実行した結果、対応する警告番号の警告が検出されて当該警告番号が出力された回数（第１警告出力数）が格納される。
【００４２】
フィールド「第２警告出力数」には、第２ソースコードに対して静的解析プログラムを実行した結果、対応する警告番号の警告が検出されて当該警告番号が出力された回数（第２警告出力数）が格納される。
ＣＰＵ１１は、静的解析実行部１１０、優先順位決定実行部１２０、及びファイル生成実行部１３０として機能する。
【００４３】
（静的解析実行部）
静的解析実行部１１０は、静的解析プログラムを実行する機能部であって、ソースコード読出部１１１、静的解析部１１２、及び解析結果集計部１１３として機能する。
ソースコード読出部１１１は、入力部１３から入力される押下信号を基にソースファイル指定画面で指定されたファイル名を特定し、特定したファイル名のソースコードを記憶部１２から読み出す。
【００４４】
静的解析部１１２は、予め用意されたコーディングルールを用いて、ソースコード読出部１１１によって読み出されたソースコードを静的に解析し、コーディングルールに合致していないコードを検出する。静的解析部１１２は、検出結果を基に、コーディングルールに合致していないコードのコーディング行に関する情報と検出結果に応じた警告の警告番号とをファイル生成実行部１３０に引き渡すとともに、警告番号を解析結果集計部１１３へ出力する。なお、ソースコードを静的に解析する手法として、例えば既存の静的解析ツールを利用することができるため、その手法の詳細な説明は省略する。
【００４５】
解析結果集計部１１３は、静的解析部１１２から出力される警告番号の出力回数（ソースコードを静的に解析した結果、この警告番号の警告が検出された回数）を警告番号毎に集計する。そして、解析結果集計部１１３は、入力部１３から入力される押下信号を基にラジオボタン１４ｃ、１４ｄの何れがチェックされたかを基に、修正前のソースコードの実行か、修正後のソースコードの実行かを特定する。
【００４６】
解析結果集計部１１３は、修正前のソースコードの場合、警告番号毎に、集計した出力回数（第１警告出力数）を、警告出力数テーブル５２のフィールド「第１警告出力数」の該当するエントリに格納する。
一方、解析結果集計部１１３は、修正後のソースコードの場合、警告番号毎に、集計した出力回数（第２警告出力数）を、警告出力数テーブル５２のフィールド「第２警告出力数」の該当するエントリに格納する。
【００４７】
（優先順位決定実行部）
優先順位決定実行部１２０は、優先順位決定プログラムを実行する機能部であって、減少率算出部１２１、閾値比較部１２２、優先順位仮決定部１２３、下限値比較部１２４、優先順位決定部１２５、及び優先順位格納部１２６として機能する。
減少率算出部１２１は、警告出力数テーブル５２の記憶内容を参照し、警告番号の各々について、第２警告出力数が第１警告出力数に対して減少した割合（以下、減少率と言う。）を算出する。
【００４８】
本実施の形態では、減少率算出部１２１は、第１警告出力数から第２警告出力数を減算し、減算結果を第１警告出力数で除算し、除算結果に１００を乗ずることによって、減少率を算出する。
減少率＝（第１警告出力数−第２警告出力数）／第１警告出力数×１００
閾値比較部１２２は、警告番号の各々について、減少率算出部１２１によって算出された警告番号に対する減少率を当該警告番号に対応して優先順位割付テーブル５１に記憶されている第１閾値と比較し、更に当該減少率を当該警告番号に対応して優先順位割付テーブル５１に記憶されている第２閾値と比較する。
【００４９】
優先順位仮決定部１２３は、各々の警告番号に付与する優先順位を、閾値比較部１２２による比較の結果に基づき仮決定する。
本実施の形態では、優先順位仮決定部１２３は、各々の警告番号に付与する優先順位を、減少率が第１閾値より大きければ「１」に、第２閾値より大きく第１閾値以下であれば「２」に、第２閾値以下であれば「３」に、仮決定する。
【００５０】
下限値比較部１２４は、警告番号の各々について、優先順位仮決定部１２３により警告番号に対して仮決定された優先順位を当該警告番号に対応して優先順位割付テーブル５１に記憶されている優先順位下限値と比較する。
優先順位決定部１２５は、各々の警告番号に付与する優先順位を、下限値比較部１２４による比較の結果、仮決定された優先順位が優先順位下限値以上であれば仮決定された優先順位に決定し、そうでなければ優先順位下限値に決定する。
【００５１】
優先順位格納部１２６は、警告番号の各々について、優先順位決定部１２５により決定された優先順位を優先順位割付テーブル５１のフィールド「優先順位」の該当するエントリに格納する。
（ファイル生成実行部）
ファイル生成実行部１３０は、ファイル生成プログラムを実行する機能部であって、優先順位読出部１３１、ファイル生成部１３２、及びファイル出力部１３３として機能する。
【００５２】
優先順位読出部１３１は、優先順位割付テーブル５１から各々の警告番号に対応した優先順位を読み出す。
ファイル生成部１３２は、静的解析プログラムを実行した結果出力されるコーディングルールに合致していないコードのコーディング行に関する情報に、当該コードで検出された警告の警告番号と優先順位読出部１３１によって読み出された当該警告番号の優先順位とを関連付けて、図４（ｂ）に内容の一例を示した出力ファイルを生成する。この際、ファイル生成部１３２は、図２に示した警告一覧表の内容を参照して、警告番号に対応した警告の内容を出力ファイルに含める。
【００５３】
ファイル出力部１３３は、ファイル生成部１３２により生成された出力ファイルを基にその内容を表示１４の表示画面に表示し、或いは、印刷部１５から用紙に印刷出力するなど、出力ファイルの出力を行う。
＜動作＞
以下、図５に機能構成を示したソースコード解析装置において実行されるソースコード解析処理について図８を参照しつつ説明する。図８は図５のソースコード解析装置において実行されるソースコード解析処理の流れを示すフローチャートである。
【００５４】
静的解析実行部１１０のソースコード読出部１１１は、入力部１３から入力される押下信号を基にソースファイル指定画面を利用してプログラマによって指定されたファイル名を特定し、特定したファイル名のソースコードを記憶部１２から読み出す（ステップＳ１０１）。
静的解析部１１２は、ステップＳ１０１で読み出されたソースコードを静的に解析し、コーディングルールに合致していないコードを検出し、当該コードのコーディング行に関する情報と検出内容に応じた警告番号とを出力する（ステップＳ１０２）。
【００５５】
解析結果集計部１１３は、警告番号毎に、ステップＳ１０２で出力された警告番号の出力数を集計する（ステップＳ１０３）。
解析結果集計部１１３は、ソースファイル指定画面を利用してプログラマによってラジオボタン１４ｃ、１４ｄの何れが指定されたかに基づき、修正前のソースコード（第１ソースコード）の静的解析かを判定する（ステップＳ１０４）。
【００５６】
ステップＳ１０４における判定の結果、修正前のソースコード（第１ソースコード）の場合（Ｓ１０４：ＹＥＳ）、解析結果集計部１１３は、警告番号毎に、集計した警告番号の出力数（第１警告出力数）を警告出力数テーブル５２のフィールド「第１警告出力数」の該当するエントリに格納し、ファイル生成プログラムを呼び出す（ステップＳ１０５）。
【００５７】
ファイル生成実行部１３０のファイル生成部１３２は、ステップＳ１０２で出力されるコーディング行に関する情報に警告番号、警告の優先順位等を関連付ける等して出力ファイルを生成する（ステップＳ１０６）。
図では省略したが、優先順位割付テーブル５１から優先順位を読み出して優先順位を付与する。ステップＳ１０６では、警告の優先順位割付テーブルの値は更新しない。
【００５８】
そして、ファイル出力部１３３は、ステップＳ１０６で生成した出力ファイルを表示部１４に表示するなど出力ファイルの出力を行う（ステップＳ１０７）。
ステップＳ１０４における判定の結果、修正前のソースコードでない、つまり、修正後のソースコード（第２ソースコード）の場合（Ｓ１０４：ＮＯ）、解析結果集計部１１３は、警告番号毎に、集計した警告番号の出力数（第２警告出力数）を警告出力数テーブル５２のフィールド「第２警告出力数」の該当するエントリに格納し、優先順位決定プログラムを呼び出す（ステップＳ１０８）。
【００５９】
優先順位決定実行部１２０の減少率算出部１２１は、優先順位割付テーブル５１に登録されている優先順位の更新処理を実行していない警告番号があるかを判定する（ステップＳ１０９）。
ステップＳ１０９における判定の結果、優先順位の更新処理を実行していない警告番号があれば（Ｓ１０９：ＹＥＳ）、優先順位の更新処理を実行する。なお、優先順位の更新処理を実行しても、優先順位が元のまま変更されないということもありうる。
【００６０】
減少率算出部１２１は、優先順位の更新処理を実行していない警告番号の一つに注目し、注目した警告番号に対応して警告出力数テーブル５２に記憶されている第１警告出力数と第２警告出力数とを用いて、当該警告番号に関する減少率を算出する（ステップＳ１１０）。
図８では記述を省略したが、今回入力したソースコードの第１警告出力数と第２警告出力数だけでなく、いままで入力したソースコードの第１警告出力数と第２警告出力数との累積数で減少率を計算するようにしてもよい。
【００６１】
閾値比較部１２２は、ステップＳ１１０で算出された減少率を注目している警告番号に対応して優先順位割付テーブル５１に記憶されている第１閾値と比較し、減少率が第１閾値を超えているか判定する（ステップＳ１１１）。
ステップＳ１１１における判定の結果、減少率が第１閾値を超えていれば（Ｓ１１１：ＹＥＳ）、優先順位仮決定部１２３は注目している警告番号の優先順位を「１」に仮決定する（ステップＳ１１２）。
【００６２】
ステップＳ１１１における判定の結果、減少率が第１閾値以下であれば（Ｓ１１１：ＮＯ）、閾値比較部１２２は、ステップＳ１１０で算出された減少率を注目している警告番号に対応して優先順位割付テーブル５１に記憶されている第２閾値と比較し、減少率が第２閾値を超えているかを判定する（ステップＳ１１３）。
ステップＳ１１３における判定の結果、減少率が第２閾値を超えていれば（Ｓ１１３：ＹＥＳ）、優先順位仮決定部１２３は注目している警告番号の優先順位を「２」に仮決定する（ステップＳ１１４）。
【００６３】
ステップＳ１１３における判定の結果、減少率が第２閾値以下であれば（Ｓ１１３：ＮＯ）、優先順位仮決定部１２３は注目している警告番号の優先順位を「３」に仮決定する（ステップＳ１１５）。
ステップＳ１１２、Ｓ１１４、Ｓ１１５の処理が実行された後、下限値比較部１２４は、仮決定された優先順位を注目している警告番号に対応して優先順位割付テーブル５１に記憶されている優先順位下限値と比較し、仮決定された優先順位が優先順位下限値以上であるかを判定する（ステップＳ１１６）。
【００６４】
ステップＳ１１６における判定の結果、仮決定された優先順位が優先順位下限値以上であれば（Ｓ１１６：ＹＥＳ）、優先順位決定部１２５は注目している警告番号に付与する優先順位を仮決定した優先順位に決定する（ステップＳ１１７）。
ステップＳ１１６における判定の結果、仮決定された優先順位が優先順位下限値を下回っていれば（Ｓ１１６：ＮＯ）、優先順位決定部１２５は注目している警告番号に付与する優先順位を優先順位下限値に決定する（ステップＳ１１８）。
【００６５】
なお、本実施の形態では優先順位の数値が小さいほど優先順位が高いので、プログラム上の数値の比較処理の等号の向きは図と逆になる。
ステップＳ１１７、ステップＳ１１８の処理が実行された後、優先順位格納部１２６は、決定した優先順位を優先順位割付テーブル５１のフィールド「優先順位」の注目している警告番号に対応したエントリに格納する（ステップＳ１１９）。次いでステップＳ１０９の処理が行われる。
【００６６】
ステップＳ１０９における判定の結果、優先順位の更新処理を実行していない警告番号がなければ（Ｓ１０９：ＮＯ）、ファイル生成プログラムが呼び出され、ステップＳ１２０以降の処理が行われる。
ファイル生成実行部１３０の優先順位読出部１３１は、優先順位割付テーブル５１から各々の警告番号に対応した優先順位を読み出す（ステップＳ１２０）。
【００６７】
ファイル生成部１３２は、ステップＳ１０２で出力されるコーディングルールに合致していないコードのコーディング行に関する情報に、当該コードで検出された警告の警告番号とステップＳ１２０で読み出された当該警告番号の優先順位とを関連付ける等して、図４（ｂ）に内容の一例を示した出力ファイルを生成する（ステップＳ１２１）。そして、ファイル出力部１３３は、ステップＳ１２１で生成した出力ファイルを表示部１４に表示するなど出力ファイルの出力を行う（ステップＳ１２２）。
【００６８】
＜動作のまとめ＞
ソースコード解析装置１では、ソースファイル指定画面に対するプログラマの入力内容が修正前のソースコード（第１ソースコード）に対するものである場合、ステップＳ１０１からステップＳ１０４、及びステップＳ１０５からステップＳ１０７の処理が行われる。
【００６９】
プログラマは出力ファイルの内容を参照して修正前のソースコード（第１ソースコード）を修正し、修正後のソースコード（第２ソースコード）を作成する。
ソースコード解析装置１では、ソースファイル指定画面に対するプログラマの入力内容が修正後のソースコード（第２ソースコード）に対するものである場合、ステップＳ１０１からステップＳ１０４、及びステップＳ１０８からステップＳ１２２の処理が行われる。
【００７０】
≪第２の実施の形態≫
以下、本発明の第２の実施の形態について図面を参照しつつ説明する。
本実施の形態は、第１の実施の形態に、プログラマのソフトウェア開発経験などの技術レベルに応じた重み付けを減少率の算出の際に行う機能を付加したものである。
＜機能構成＞
本実施の形態のソースコード解析装置の機能構成について図９を参照しつつ説明する。図９は本実施の形態のソースプログラム解析装置の機能構成図である。但し、本実施の形態において、第１の実施の形態と同じ構成要素には同じ符号を付し、その説明が適用できるため説明を省略する。
【００７１】
記憶部１２ａには、各種制御プログラムや各種アプリケーションソフト等の他に、優先順位割付テーブル５１、警告出力数テーブル５２ａ及び重み係数テーブル５３が記憶されている。
（警告出力数テーブル）
警告出力数テーブル５２ａについて図１０を参照しつつ説明する。図１０は警告出力数テーブルの一例を示す図である。
【００７２】
警告出力数テーブル５２ａは、第１の実施の形態の警告出力数テーブル５１とは異なり、例えば、プログラマＡなどのプログラマＩＤ単位で、警告番号の各々に対応して第１警告出力数及び第２警告出力数が記憶されている。
（重み係数テーブル）
重み係数テーブル５３について図１１を参照しつつ説明する。図１１は重み係数テーブルの一例を示す図である。
【００７３】
重み係数テーブル５３には、フィールドとして、「プログラマ」及び「重み係数」がある。
フィールド「プログラマ」には、プログラマ又はソフトウェア開発組織を識別するためのプログラマ識別子（プログラマＩＤ）が格納される。
フィールド「重み係数」には、対応するユーザ又はソフトウェア開発組織に割り当てられた、減少率を算出する際に用いる重み係数が格納される。例えば、ソフトウェア開発の経験が豊富なプログラマが行ったソースコードの修正の方が、ソフトウェア開発の経験が浅いプログラマが行ったソースコードの修正より、減少率の算出により大きく反映するように、経験豊富なプログラマ等に割り当てる重み係数がより大きくなるように設定する。
【００７４】
ＣＰＵ１１は、静的解析実行部２１０、優先順位決定実行部２２０、及びファイル生成実行部１３０として機能する。
（静的解析実行部）
静的解析実行部２１０は、静的解析プログラムを実行する機能部であって、ソースコード読出部１１１、静的解析部１１２、及び解析結果集計部２１３として機能する。
【００７５】
静的結果解析部２１３は、静的解析部１１２から出力される警告番号の出力回数（ソースコードを静的に解析した結果、この警告番号の警告が検出された回数）を警告番号毎に集計する。
そして、解析結果集計部２１３は、修正前のソースコードの場合、警告番号毎に、集計した出力回数（第１警告出力数）を、ソースファイル指定画面で入力されたプログラマＩＤに対応した警告出力数テーブル５２ａのフィールド「第１警告出力数」の該当するエントリに格納する。
【００７６】
一方、解析結果集計部２１３は、修正後のソースコードの場合、警告番号毎に、集計した出力回数（第２警告出力数）を、入力されたプログラマＩＤに対応した警告出力数テーブル５２ａのフィールド「第２警告出力数」の該当するエントリに格納する。
（優先順位決定実行部）
優先順位決定実行部２２０は、優先順位決定プログラムを実行する機能部であって、重付け演算部２２１、減少率算出部１２１ａ、閾値比較部１２２、優先順位仮決定部１２３、下限値比較部１２４、優先順位決定部１２５、及び優先順位格納部１２６として機能する。
【００７７】
重付け演算部２２１は、プログラマＩＤ毎に、プログラマＩＤに対応した警告出力数テーブル５２ａの各々の第１警告出力数に、当該プログラマＩＤに対応して重み係数テーブル５３に記憶されている重み係数を乗算する。そして、重み付け演算部２２１は、警告番号毎に、各プログラマＩＤの重み係数を乗算した後の第１警告出力数を加算して、重み付け後の第１警告出力数の累計を求める。
【００７８】
また、重付け演算部２２１は、プログラマＩＤ毎に、プログラマＩＤに対応した警告出力数テーブル５２ａの各々の第２警告出力数に、当該プログラマＩＤに対応して重み係数テーブル５３に記憶されている重み係数を乗算する。そして、重み付け演算部２２１は、警告番号毎に、各プログラマＩＤの重み係数を乗算した後の第２警告出力数を加算して、重み付け後の第２警告出力数の累計を求める。
【００７９】
減少率算出部１２１ａは、警告番号毎に、重付け演算部２２１による第１警告出力数に関する累計数（以下、第１累計数と言う。）から第２警告出力数に関する累計数（以下、第２累計数と言う。）を減算し、減算値を第１累計数で除算し、除算結果に１００を乗ずることによって、第２累計数が第１累計数に対して減少した減少率を算出する。
＜動作＞
以下、図９に機能構成を示したソースコード解析装置において実行されるソースコード解析処理について図１２を参照しつつ説明する。図１２は図９のソースコード解析装置において実行されるソースコード解析処理の流れを示すフローチャートである。
【００８０】
静的解析実行部２１０のソースコード読出部１１１は、入力部１３から入力される押下信号を基にソースファイル指定画面を利用してプログラマによって指定されたファイル名を特定し、特定したファイル名のソースコードを記憶部１２から読み出す（ステップＳ２０１）。
静的解析部１１２は、ステップＳ２０１で読み出されたソースコードを静的に解析し、コーディングルールに合致していないコードを検出し、当該コードのコーディング行に関する情報と検出内容に応じた警告番号とを出力する（ステップＳ２０２）。
【００８１】
解析結果集計部２１３は、警告番号毎に、ステップＳ２０２で出力された警告番号の出力数を集計する（ステップＳ２０３）。
解析結果集計部２１３は、修正前のソースコード（第１ソースコード）の静的解析かを判定する（ステップＳ２０４）。
ステップＳ２０４における判定の結果、修正前のソースコード（第１ソースコード）の場合（Ｓ２０４：ＹＥＳ）、解析結果集計部２１３は、入力部１３から入力される押下信号を基にソースファイル指定画面を利用してプログラマによって入力されたプログラマＩＤを特定する。そして、解析結果集計部２１３は、警告番号毎に集計した警告番号の出力数（第１警告出力数）を特定したプログラマＩＤに対応した警告出力数テーブル５２ａのフィールド「第１警告出力数」の該当するエントリに格納し、ファイル生成プログラムを呼び出す（ステップＳ２０５）。
【００８２】
ファイル生成実行部１３０のファイル生成部１３２は、ステップＳ２０２で出力されるコーディング行に関する情報に警告番号、警告の優先順位等を関連付ける等して出力ファイルを生成する（ステップＳ２０６）。
図では省略したが、優先順位割付テーブル５１から優先順位を読み出して優先順位を付与する。ステップＳ２０６では、警告の優先順位割付テーブルの値は更新しない。
【００８３】
そして、ファイル出力部１３３は、ステップＳ２０６で生成した出力ファイルを表示部１４に表示するなど出力ファイルの出力を行う（ステップＳ２０７）。
ステップＳ２０４における判定の結果、修正前のソースコードでない、つまり、修正後のソースコード（第２ソースコード）の場合（Ｓ２０４：ＮＯ）、解析結果集計部２１３は、入力部１３から入力される押下信号を基にソースファイル指定画面を利用してプログラマによって入力されたプログラマＩＤを特定する。そして、解析結果集計部２１３は、警告番号毎に集計した警告番号の出力数（第２警告出力数）を特定したプログラマＩＤに対応した警告出力数テーブル５２ａのフィールド「第２警告出力数」の該当するエントリに格納し、優先順位決定プログラムを呼び出す（ステップＳ２０８）。
【００８４】
優先順位決定実行部２２０は、優先順位割付テーブル５１、警告出力数テーブル５２ａ及び重み係数テーブル５３を参照して、警告番号の各々に付与する優先順位を決定する優先順位決定処理を行う（ステップＳ２０９）。
ファイル生成実行部１３０の優先順位読出部１３１は、優先順位割付テーブル５１から各々の警告番号に対応した優先順位を読み出す（ステップＳ２１０）。
【００８５】
ファイル生成部１３２は、ステップＳ２０２で出力されるコーディングルールに合致していないコードのコーディング行に関する情報に、当該コードで検出された警告の警告番号とステップＳ２１０で読み出された当該警告番号の優先順位とを関連付ける等して、図４（ｂ）に内容の一例を示した出力ファイルを生成する（ステップＳ２１１）。そして、ファイル出力部１３３は、ステップＳ２１１で生成した出力ファイルを表示部１４に表示するなど出力ファイルの出力を行う（ステップＳ２１２）。
【００８６】
＜優先順位決定処理＞
図１２の優先順位決定処理について図１３を参照しつつ説明する。図１３は図１２の優先順位決定処理の流れを示すフローチャートである。
優先順位決定実行部２２０の重付け演算部２２１は、優先順位割付テーブル５１ａに優先順位の更新処理を実行していない警告番号があるかを判定する（ステップＳ２５１）。なお、優先順位の更新処理を実行しても、優先順位が元のまま変更されないということもありうる。
【００８７】
ステップＳ２５１における判定の結果、優先順位の更新処理を実行していない警告番号があれば（Ｓ２５１：ＹＥＳ）、優先順位の更新処理を実行する。なお、優先順位の更新処理を実行しても、優先順位が元のまま変更されないということもありうる。
重付け演算部２２１は、優先順位の更新処理を実行していない警告番号の１つに注目し、ステップＳ２５２以降の処理が行われる。
【００８８】
重付け演算部２２１は、累計対象となっていないプログラマＩＤがあるかどうかを判定する（ステップＳ２５２）。
ステップＳ２５２における判定の結果、累計対象となっていないプログラマＩＤがあれば（Ｓ２５２：ＹＥＳ）、重付け演算部２２１は、累計対象となっていないプログラマＩＤの一つに注目して、注目したプログラマＩＤに対応した警告出力数テーブル５２ａから注目している警告番号に対応して記憶されている第１警告出力数及び第２警告出力数を読み出す。さらに、重付け演算部２２１は、重み係数テーブル５３から注目しているプログラマＩＤに対応して記憶されている重み係数を読み出す。そして、重付け演算部２２１は、読み出した第１警告出力数及び第２警告出力数の夫々に読み出した重み係数を乗算し、重み付け後の第１警告出力数及び第２警告出力数とする（ステップＳ２５３）。
【００８９】
続いて、重付け演算部２５４は、第１累計数及び第２累計数の夫々にステップＳ２５３で得られた重み付け後の第１警告数及び第２警告数に加算し、加算結果を新たな第１累計数及び第２累計数とする（ステップＳ２５４）。そして、ステップＳ２５２以降の処理が行われる。
ステップＳ２５２における判定の結果、累計対象となっていないプログラマＩＤがなければ（Ｓ２５２：ＮＯ）、減少率算出部１２１ａは、第２累計数が第１累計数に対して減少した減少率を算出する（ステップＳ２５５）。
【００９０】
閾値比較部１２２は、ステップＳ２５５で算出された減少率を注目している警告番号に対応して優先順位割付テーブル５１に記憶されている第１閾値と比較し、減少率が第１閾値を超えているか判定する（ステップＳ２５６）。
ステップＳ２５６における判定の結果、減少率が第１閾値を超えていれば（Ｓ２５６：ＹＥＳ）、優先順位仮決定部１２３は注目している警告番号の優先順位を「１」に仮決定する（ステップＳ２５７）。
【００９１】
ステップＳ２５６における判定の結果、減少率が第１閾値以下であれば（Ｓ２５６：ＮＯ）、閾値比較部１２２は、ステップＳ２５５で算出された減少率を注目している警告番号に対応して優先順位割付テーブル５１に記憶されている第２閾値と比較し、減少率が第２閾値を超えているかを判定する（ステップＳ２５８）。
ステップＳ２５８における判定の結果、減少率が第２閾値を超えていれば（Ｓ２５８：ＹＥＳ）、優先順位仮決定部１２３は注目している警告番号の優先順位を「２」に仮決定する（ステップＳ２５９）。
【００９２】
ステップＳ２５８における判定の結果、減少率が第２閾値以下であれば（Ｓ２５８：ＮＯ）、優先順位仮決定部１２３は注目している警告番号の優先順位を「３」に仮決定する（ステップＳ２６０）。
ステップＳ２５７、Ｓ２５９、Ｓ２６０の処理が実行された後、下限値比較部１２４は、仮決定された優先順位を注目している警告番号に対応して優先順位割付テーブル５１に記憶されている優先順位下限値と比較し、仮決定された優先順位が優先順位下限値以上であるかを判定する（ステップＳ２６１）。
【００９３】
ステップＳ２６１における判定の結果、仮決定された優先順位が優先順位下限値以上であれば（Ｓ２６１：ＹＥＳ）、優先順位決定部１２５は注目している警告番号に付与する優先順位を仮決定した優先順位に決定する（ステップＳ２６２）。
ステップＳ２６１における判定の結果、仮決定された優先順が優先順位下限値を下回っていれば（Ｓ２６１：ＮＯ）、優先順位決定部１２５は注目している警告番号に付与する優先順位を優先順位下限値に決定する（ステップＳ２６３）。
【００９４】
なお、本実施の形態では優先順位の数値が小さいほど優先順位が高いので、プログラム上の数値の比較処理の等号の向きは図と逆になる。
ステップＳ２６２、ステップＳ２６３の処理が実行された後、優先順位格納部１２６は、決定した優先順位を優先順位割付テーブル５１のフィールド「優先順位」の注目している警告番号に対応したエントリに格納する（ステップＳ２６４）。次いでステップＳ２５１の処理が行われる。
【００９５】
ステップＳ２５１における判定の結果、優先順位の更新処理を実行していない警告番号がなければ（Ｓ２５１：ＮＯ）、ファイル生成プログラムが呼び出され、図１２のステップＳ２１１以降の処理が行われる。
≪補足≫
本発明は、上記の実施の形態に限られるものではなく、例えば、以下のようなものも含まれる。
【００９６】
（１）各実施の形態では、警告番号の各々に第１閾値及び第２閾値を設けているが、これに限らず、警告番号の全てに共通の第１閾値及び第２閾値を設けるようにしてもよい。
（２）各実施の形態では、優先順位を決定する際に基準にする閾値を２つ（第１閾値及び第２閾値）用意し、優先順位「１」、「２」、「３」の何れかを警告番号に付与している。しかしながら、これに限らず、優先順位を決定する際に基準にする閾値の数は１つであってもよく、３つ以上であってもよく、例えば、閾値の数が１つの場合には優先順位「１」、「２」の何れかを警告番号に付与するようにし、閾値の数が３つの場合には優先順位「１」、「２」、「３」、「４」の何れかを警告番号に付与するようにする。
【００９７】
（３）各実施の形態では、全ての警告番号に対して減少率を算出して第１閾値などと比較するなどをして優先順位を付与している。しかしながら、これに限らず、各々の警告番号の第１警告出力数が予め定められた出力数を超えているかを判断し、第１警告出力数が予め定められている出力数を超えている警告番号に対してのみ減少率の算出等を行うことによって優先順位を付与するようにしてもよい。この場合、例えば、第１警告出力数が予め定められた出力数以下の警告番号には予め定められた優先順位を付与する。
【００９８】
（４）第１の実施の形態では、各警告番号の優先順位を決定する際に用いるソースコードは、開発対象のソフトウェアの第１ソースコードと第２ソースコードである。しかしながら、これに限らず、各警告番号の優先順位を決定する際に用いるソースコードは、開発対象のソフトウェアを作成するプログラマ又は当該プログラマが属するソフトウェア開発組織が以前に作成したソフトウェアの例えば初期のソースコードと完成したソースコードであってもよい。また、これまでに作成した複数のソフトウェアの初期のソースコードと完了したソースコードとであってもよく、使用されるソフトウェアは同一のプログラマが作成したものであってもよく異なるプログラマが作成したものであってもよい。これらの場合には、開発中のソフトウェアの最初に作成されたソースコードから、ソフトウェア開発組織が以前にソースコードを修正した内容を反映した警告番号の優先順位付けで出力ファイルを生成することができる。
【００９９】
（５）第２の実施の形態では、プログラマ等の技術レベルを基準にプログラマ等に重み係数を設定して、減少率に重付けを行うようにしている。しかしながら、これに限らず、例えば以下に挙げるものなど、任意の基準で減少率に重付けを行うようにしてもよい。
例えば、ソフトウェアの開発時期に着目し、新しく作成されたソフトウェア程大きい値の重み係数を設定し、期間と重み係数とを関連付けたテーブルを用意する。また、ソフトウェア単位で作成時期が分かるようにして、各々の警告番号の第１警告出力数及び第２警告出力数を記憶する。
【０１００】
そして、警告番号毎に、複数のソフトウェアの各々の第１警告出力数及び第２警告出力数に、当該ソフトウェアの開発時期に対応した重み係数を乗算する。警告番号毎に、複数のソフトウェアの各々の重み係数を乗算した後の第１警告出力数を加算するとともに、複数のソフトウェアの各々の重み係数を乗算した後の第２警告出力数を加算する。そして、第１警告出力数に関する加算値から第２警告出力数に関する加算値を減算し、減算結果を第１警告出力数に関する加算値で除算し、除算結果に１００を乗ずることによって、減少率を算出するようにしてもよい。
【０１０１】
（６）第２の実施の形態及び上記の（５）では、第１警告出力数及び第２警告出力数に対して重み係数を乗ずることによって減少率に重み付けを行うようにしている。しかしながら、これに限らず、例えば、次のようなものであってもよい。
プログラマ単位或いは期間単位で第２警告出力数が第１警告出力数に対して減少した減少率を算出し、算出した減少率に対応するプログラマ或いは期間に対して定められた重み係数を乗算する。そして、警告番号毎に、重み係数を乗算した後の減少率を加算し、加算値を加算対象のプログラマ数や期間の数で除算し、除算結果に１００を乗ずることによって、第１閾値や第２閾値等と比較する減少率を算出するようにしてもよい。
【０１０２】
（７）各実施の形態において、減少率を閾値と比較して警告番号の優先順位を決定するようにしている。しかしながら、これに限らず、例えば、第１警告出力数に対する第２警告出力数の比率を算出し、算出した比率が小さい程警告番号に高い優先順位を付与するようにしてもよい。
（８）第１の実施の形態において図示した出力ファイルでは、警告番号の優先順位を値で示しているが、これに限らず、例えば、優先順位に応じた色で警告番号等を出力することによって警告番号の優先順位が分かるようにしてもよく、また、優先順位に応じた字体等で警告番号等を出力することによって警告番号の優先順位が分かるようにしてもよい。
【０１０３】
（９）各実施の形態では、全ての警告に関する情報を出力ファイルに含めているが、これに限らず、所定の優先順位より高い警告番号の警告に関する情報のみを出力ファイルに含めるようにしてもよい。
（１０）各実施の形態において、例えば、警告番号に第１警告出力数及び第２警告出力数を対応付けた一覧表や、警告番号に第１警告出力数及び第２警告出力数並びに警告の内容を対応付けた一覧表などを表示部１４に表示するようにしてもよい。
【０１０４】
（１１）各実施の形態において、ソースコードを静的に解析する部分と警告番号の優先順位を決定する部分とを一つに統合するなどしてもよい。
【産業上の利用可能性】
【０１０５】
本発明は、ソースコードの静的解析ツールなどに利用することができる。
【図面の簡単な説明】
【０１０６】
【図１】第１の実施の形態のソースコード解析装置の装置構成図。
【図２】警告番号とその警告番号の警告の内容との一部を表した警告一覧表を示す図。
【図３】図１の表示部に表示されるソースファイル指定画面の一例を示す図。
【図４】図１の表示部に表示される出力ファイルの内容の一例を示す図。
【図５】図１のソースコード解析装置の機能構成図。
【図６】図５の記憶部に記憶される優先順位割付テーブルの一例を示す図。
【図７】図５の記憶部に記憶される警告出力数テーブルの一例を示す図。
【図８】図５のソースコード解析装置において実行されるソースコード解析処理の流れを示すフローチャート。
【図９】第２の実施の形態のソースコード解析装置の装置構成図。
【図１０】図９の記憶部に記憶される警告出力数テーブルの一例を示す図。
【図１１】図９の記憶部に記憶される重み係数テーブルの一例を示す図。
【図１２】図９のソースコード解析装置において実行されるソースコード解析処理の流れを示すフローチャート。
【図１３】図１２の優先順位決定処理の流れを示すフローチャート。
【符号の説明】
【０１０７】
１  ソースコード解析装置
１１  ＣＰＵ
１２  記憶部
１２ａ  記憶部
１３  入力部
１４  表示部
１５  印刷部
５１  優先順位割付テーブル
５２  警告出力数テーブル
５２ａ  警告出力数テーブル
５３  重み係数テーブル
１１０  静的解析実行部
１１１  ソースコード読出部
１１２  静的解析部
１１３  解析結果集計部
１２０  優先順位決定実行部
１２１  減少率算出部
１２１ａ  減少率算出部
１２２  閾値比較部
１２３  優先順位仮決定部
１２４  下限値比較部
１２５  優先順位決定部
１２６  優先順位格納部
１３０  ファイル生成実行部
１３１  優先順位読出部
１３２  ファイル生成部
１３３  ファイル出力部
２１３  解析結果集計部
２２１  重付け演算部
【図１】
2008052424.tif 000003
【図２】
2008052424.tif 000004
【図３】
2008052424.tif 000005
【図４】
2008052424.tif 000006
【図５】
2008052424.tif 000007
【図６】
2008052424.tif 000008
【図７】
2008052424.tif 000009
【図８】
2008052424.tif 000010
【図９】
2008052424.tif 000011
【図１０】
2008052424.tif 000012
【図１１】
2008052424.tif 000013
【図１２】
2008052424.tif 000014
【図１３】
2008052424.tif 000015