(57)【要約】【課題】ソースコードを複数の静的解析ツールで静的解析を行い、解析結果をわかりやすくまとめる。【解決手段】夫々１つ以上の解析項目についてソースコードの静的解析を行って解析項目毎の解析結果値を含む解析結果データを夫々出力する複数の静的解析部と、複数の静的解析部に１つのソースコードの静的解析を実行させる制御部と、複数の静的解析部が出力した夫々の解析結果データから解析結果データ毎に予め定められた解析項目の解析結果値を抽出して１つのファイルにまとめて集約データとして出力する解析データ集約部と、を備える。【選択図】        図１
2009230420.tif 000002
【特許請求の範囲】
【請求項１】
夫々１つ以上の解析項目についてソースコードの静的解析を行って前記解析項目毎の解析結果値を含む解析結果データを夫々出力する複数の静的解析部と、
前記複数の静的解析部に１つのソースコードの静的解析を実行させる制御部と、
前記複数の静的解析部が出力した夫々の解析結果データから解析結果データ毎に予め定められた解析項目の解析結果値を抽出して１つのファイルにまとめて集約データとして出力する解析データ集約部と、
を備えることを特徴とするソースコード品質管理装置。
【請求項２】
前記解析データ集約部が出力した集約データを蓄積するデータ蓄積部と、
前記データ蓄積部に蓄積されている複数の集約データを取得して、前記取得した全ての集約データの解析結果値を前記予め定められた解析項目毎に列記した一覧表を作成する一覧表作成部と、
をさらに備え、
前記解析データ集約部は、集約データを出力する際に該集約データを出力するときの時間情報を該集約データに付与し、
前記一覧表作成部は、前記取得した集約データに付与されている時間情報に基づいて前記予め定められた解析項目の解析結果値を時系列順に列記する、
ことを特徴とする請求項１に記載のソースコード品質管理装置。
【請求項３】
前記一覧表作成部は、作成した一覧表に記載される各解析結果値から、品質の良し悪しを数値で表現する品質指標値を夫々導出し、時系列と前記導出した夫々の品質指標値との関係をグラフ化し、品質遷移グラフとして出力する、
ことを特徴とする請求項２に記載のソースコード品質管理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムのソースコードを静的解析するソースコード品質管理装置に関するものである。
【背景技術】
【０００２】
ソフトウェアの開発において、ソースコードの品質を向上させるための手段として、静的解析が実施される場合がある。静的解析とは、ソースコードの内容を解析し、ソフトウェアのバグとなりえる要素を発見したり、プログラムの設計品質を計測したりするものである。静的解析は、実際にプログラムを動かす必要のある通常のテスト(動的解析)と異なり、ソフトウェアの品質に影響を及ぼす要因の早期発見が可能であるため、近年その重要性が注目されてきている。
【０００３】
実際に静的解析を行う手段として、人手によるもののほかに、静的解析を自動実行するためのツール(静的解析ツール)を利用する方法がある。静的解析ツールとしては、例えば、構文解釈によって高頻度で出現する箇所を予測し、静的解析の精度を向上させるソースコード問題予測プログラムが特許文献１に開示されている。また、動的解析を実行しなければ解析できない処理についても静的に解析できる静的解析装置が特許文献２に開示されている。
【０００４】
【特許文献１】特開２００７−１７９４８８号公報
【特許文献２】特開２００４−１４５３８１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
上記特許文献１および２に示すような静的解析ツールを含め、静的解析ツールには、静的解析の目的(バグ要因の早期発見、コーディング規約のチェック、設計品質の計測など)にあわせ、さまざまな種類のものが存在している。ソフトウェアの開発者は、静的解析の目的に合わせ、これらのツールを使い分けたり、複数使用したりする必要がある。
【０００６】
しかしながら、これらの静的解析ツールが出力する解析結果は、一般的に、熟練者でないと必要な情報を取り出すことが難しいほど情報量が多い。このような静的解析ツールを複数使用する場合、大量の情報を含む解析レポートが複数出力されることになってしまう。結果として、ソースコードのどの部分に問題があるのか、統合的に判断するのは難しくなるという問題点があった。
【０００７】
本発明は、上記に鑑みてなされたものであって、ソースコードを複数の静的解析ツールで静的解析を行い、解析結果をわかりやすくまとめるソースコード品質管理装置を得ることを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決し、目的を達成するために、本発明は、夫々１つ以上の解析項目についてソースコードの静的解析を行って前記解析項目毎の解析結果値を含む解析結果データを夫々出力する複数の静的解析部と、前記複数の静的解析部に１つのソースコードの静的解析を実行させる制御部と、前記複数の静的解析部が出力した夫々の解析結果データから解析結果データ毎に予め定められた解析項目の解析結果値を抽出して１つのファイルにまとめて集約データとして出力する解析データ集約部と、を備えることを特徴とする。
【発明の効果】
【０００９】
この発明によれば、ソースコードを複数の静的解析部に静的解析させ、得られた複数の解析結果データから予め定められた解析項目の解析結果値を抽出して１つのファイルにまとめて出力するので、ソースコードを複数の静的解析ツールで静的解析を行い、解析結果をわかりやすくまとめるソースコード品質管理装置を得ることができる。
【発明を実施するための最良の形態】
【００１０】
以下に、本発明にかかるソースコード品質管理装置の実施の形態を図面に基づいて詳細に説明する。なお、この実施の形態によりこの発明が限定されるものではない。
【００１１】
実施の形態．
図１は、本実施の形態のソースコード品質管理装置の構成を説明する図である。
【００１２】
図１において、ソースコード品質管理装置１は、静的解析の設定パラメータなど動作に必要なパラメータを設定する設定ファイル１１とテキストエディタや統合開発環境などで作成された静的解析の対象であるソースコード１２とを入力として受け付けて、受け付けたソースコード１２の静的解析を、ソースコード品質管理装置１の全体の動作を制御して実行させる制御部２と、実際に夫々静的解析を実行する複数の（ここでは３つの）静的解析ツールである、第一の静的解析部３ａ、第二の静的解析部３ｂ、および第三の静的解析部３ｃと、第一〜第三の静的解析部３ａ〜３ｃが出力する解析結果データから必要な情報を集約する解析データ集約部５と、解析データ集約部５が過去に集約した集約データを一覧表にまとめる一覧表作成部６と、解析結果データ、集約データ、および一覧表を蓄積するデータ蓄積部４と、を備える。
【００１３】
ここで、静的解析ツールである第一〜第三の静的解析部３ａ〜３ｃは、ソースコード１２の開発者が特別に開発するものである必要はなく、既成の静的解析ツールであってよい。現在一般的に使用されている静的解析ツールの多くは、ディスプレイ上ではテキスト形式やグラフィカルユーザインターフェース（ＧＵＩ）形式で表示し、解析結果データの出力ファイルをテキストデータのほか、ＸＭＬデータ、ＨＴＭＬデータ、およびＣＳＶデータなどで出力することができる。本実施の形態においては、設定ファイル１１の記述内容によって、これらの形式のうちから第一〜第三の静的解析部３ａ〜３ｃが出力する解析結果データの出力形式が規定されるようにしている。
【００１４】
設定ファイル１１は、各静的解析部３ａ〜３ｃの解析結果データの出力形式、出力先のファイルパス、ファイル名、静的解析ルール、後述する集約データの出力形式、出力先のファイルパス、およびファイル名などが記述されており、これらは制御部２によって読み込まれることにより規定される。静的解析ルールとは、各静的解析部３ａ〜３ｃの動作に必要な初期パラメータ、各種設定項目、および各静的解析部３ａ〜３ｃに解析を実行させる解析項目の設定などを含む。設定ファイル１１の記述形式は特定の形式に限定されるものではなく、例えばＸＭＬ形式など一般的に流通している記述形式などであってよい。
【００１５】
次に、以上のように構成される本発明の実施の形態のソースコード品質管理装置１の動作を説明する。図２は、ソースコード品質管理装置１の全体の動作を説明するフローチャートである。
【００１６】
図２において、設定ファイル１１および静的解析対象のソースコード１２が入力され、制御部２は設定ファイル１１に記述される設定内容を反映させる（ステップＳ１）。そして、制御部２は、入力されたソースコード１２を対象とした静的解析を設定ファイル１１に記述される静的解析ルールに沿って第一〜第三の静的解析部３ａ〜３ｃに逐次実行させ、静的解析を実行した第一〜第三の静的解析部３ａ〜３ｃは夫々解析結果データを設定ファイル１１において記述されている出力形式、ファイル名、およびファイルパスに従って出力してデータ蓄積部４に格納する（ステップＳ２）。
【００１７】
図３は、第一〜第三の静的解析部３ａ〜３ｃが静的解析を行う様子を説明する図である。第一の静的解析部３ａ、第二の静的解析部３ｂ、および第三の静的解析部３ｃは、夫々ソースコード１２の静的解析を行い、解析結果データとして、夫々第一の解析結果１３ａ、第二の解析結果１３ｂ、および第三の解析結果１３ｃを出力する。第一の解析結果１３ａは、解析項目Ａ１、解析項目Ａ２、および解析項目Ａ３に関する解析結果値を含んでいる。同様に、第二の解析結果１３ｂは、解析項目Ｂ１、解析項目Ｂ２、および解析項目Ｂ３の解析結果値を、第三の解析結果１３ｃは、解析項目Ｃ１、解析項目Ｃ２、および解析項目Ｃ３の解析結果値を含んでいるとする。
【００１８】
次に、図２において、解析データ集約部５は、制御部２を通じて設定ファイル１１に記述されている第一〜第三の解析結果１３ａ〜１３ｃのデータ蓄積部４におけるファイルパス及びファイル名を参照して、データ蓄積部４に格納されている解析結果１３ａ〜１３ｃを読み込み、各解析結果データ１３ａ〜１３ｃからソースコード１２全体の品質把握に必要な解析項目の解析結果値を抽出する（ステップＳ３）。ここで、どの解析項目の解析結果値を抽出するかは予め設定されているものとする。その設定方法は特に限定しないが、解析データ集約部５が設定された項目として保持するようにしてもよいし、設定ファイル１１に記述され、該設定ファイル１１がステップＳ２にて制御部２に読み込まれることにより設定されるようにしてもよい。
【００１９】
そして、解析データ集約部５は、この抽出した解析結果値をひとつのファイルに集約して記述し、集約データとして、設定ファイル１１に記述されている出力形式、ファイル名、および出力先のファイルパスに従って出力する（ステップＳ４）。ここで、解析データ集約部５は、集約データを作成するとき、作成した時間がわかるように該集約データに時間情報を付与する。設定ファイル１１にて指定可能な集約データの形式は特定の形式に限定するものではなく、一般的に使用されている形式であってよい。例えば、ＸＬＳ形式やＸＭＬ形式のファイルのような形式を設定ファイル１１にて指定するようにし、解析データ集約部５は、抽出した解析結果値を記述する際は順次上位の行から書き込んでいくようにするとよい。
【００２０】
ここで、図４を用いて、図２におけるステップＳ３およびステップＳ４の動作をさらに詳しく説明する。図４において、まず、第一〜第三の解析結果１３ａ〜１３ｃのデータ蓄積部４におけるファイルパス、及びファイル名を参照し、解析データ集約部５は、それらを基に、データ蓄積部４から第一〜第三の解析結果１３ａ〜１３ｃのうちのひとつを取得する（ステップＳ１１）。
【００２１】
続いて、解析データ集約部５は、取得した解析結果から、データの集約に必要となる予め設定されている解析項目の解析結果値を取得する（ステップＳ１２）。ここで、値の取得方法は解析結果データのファイル形式によって異なることが考えられる。例えば、解析結果データがＸＭＬ形式で出力されている場合は該当解析項目のタグを解析することで、ＣＳＶ形式やＸＬＳ形式などの表データの形式で出力されている場合は該当解析項目の行番号と列番号を解析することで、取得する解析項目の解析結果値が記述されている位置を特定するようにするとよい。
【００２２】
続いて、解析データ集約部５は、第一〜第三の解析結果１３ａ〜１３ｃを全て取得したか否かを判定する（ステップＳ１３）。第一〜第三の解析結果１３ａ〜１３ｃのうち取得していない解析結果がある場合（ステップＳ１３、Ｎｏ）、解析データ集約部５は、ステップＳ１１に移行してまだ取得していない解析結果を取得する。第一〜第三の解析結果１３ａ〜１３ｃを全て取得した場合（ステップＳ１３、Ｙｅｓ）、解析データ集約部５は、これまでに抽出した解析結果値を解析項目と対応付けて１つのデータにまとめた集約データを作成し、データ蓄積部４に格納する（ステップＳ１４）。
【００２３】
図５に、解析データ集約部５が集約データを作成するまでの動作をより具体的に説明する図を示す。図５において、解析データ集約部５が、設定ファイル１１に記載される情報を基に、第一〜第三の解析結果１３ａ〜１３ｃを取得し、第一の解析結果１３ａから解析項目Ａ１の解析結果値を抽出し、第二の解析結果１３ｂから解析項目Ｂ２および解析項目Ｂ３の解析結果値を抽出し、第三の解析結果１３ｃから解析項目Ｃ３の解析結果値を抽出する。解析データ集約部５は、これらの抽出した解析結果値から集約データ１４を作成し、この集約データ１４をデータ蓄積部４に格納する。集約データ１４は、のファイル名は、「ファイル名ＹＹＹＹＭＭＤＤ．拡張子」（ＹＹＹＹＭＭＤＤは年月曰)といったように、設定ファイル１１にて指定される集約データのファイル名に作成した日時を付記することにより、集約データ１４に時間情報を付与している。
【００２４】
図２に戻り、ステップＳ４の後、一覧表作成部６が、過去に作成してデータ蓄積部４に格納されている集約データ１４を一覧形式の表にした一覧表を作成し、該一覧表をデータ蓄積部４に格納し（ステップＳ５）、本実施の形態のソースコード品質管理装置１の動作が終了となる。
【００２５】
ここで、一覧表作成部６が一覧表を作成する動作をさらに詳しく説明する。図６に、一覧表作成部６が一覧表を作成する動作を説明するフローチャートを示す。
【００２６】
図６において、一覧表作成部６は、設定ファイル１１に記述されている集約データ１４のファイル名およびファイルパスを取得し、該取得した情報を基に、データ蓄積部４に格納されている集約データ１４を取得する。このとき、複数の集約データ１４が同一ファイルパス上に存在した場合、作成した時間が最も古い集約データ１４から取得する（ステップＳ２１）。そして、一覧表作成部６は、取得した集約データ１４の各解析項目の解析結果値を読み取る（ステップＳ２２）。そして、一覧表作成部６は、取得した各解析項目の解析結果値を一覧表の該当する箇所に転記する（ステップＳ２３）。そして、一覧表作成部６は、前記する指定されている同一ファイルパス上にある全ての集約データ１４を取得したか否かを判定し（ステップＳ２４）、全ての集約データ１４を取得し終わっていない場合（ステップＳ２４、Ｎｏ）、ステップＳ２１に移行し、次の集約データ１４についてステップＳ２１〜ステップＳ２３の動作を行う。このとき、一覧表作成部６は、時系列順に各解析項目の解析結果値が並ぶようにする。全ての集約データ１４を取得し終わった場合（ステップＳ２４、Ｙｅｓ）、一覧表作成部６は、作成した一覧表をデータ蓄積部４に格納し、動作を終了する。
【００２７】
この一覧表作成部６による動作を、図７を用いてより具体的に説明する。図７は、一覧表作成部６が一覧表を作成する動作を具体的に説明する図である。
【００２８】
図７において、一覧表作成部６は、設定ファイル１１に記述されている集約データ１４のファイル名およびファイルパスに基づいて作成した時間の異なる複数の集約データ１４を古い集約データ１４から順次取得し、取得した集約データ１４に含まれる各項目の値を一覧表１５に転記してゆく。ここでは、一覧表１５の行が項目名を表し、列が日付を表すとし、古い日付の集約データ１４の各項目の値が左側に来るように値が転記されている。このようにして作成された一覧表１５は、転記終了後にデータ蓄積部４に格納される。
【００２９】
このように作成された一覧表１５は、ソースコードの複数の静的解析ツールによる静的解析結果値が時系列順に配列されているので、使用者はソースコードの品質の推移を横断的に把握することができる。
【００３０】
さらに、一覧表作成部６がこの一覧表１５を作成するとき、一覧表１５の各解析項目の値を品質指標を表す数値に変換し、時系列とこの品質指標値との関係をグラフ化した図８に示すような品質推移グラフを作成するようにしてもよい。このように一覧表１５から品質推移グラフを作成すると、一覧表１５よりも使用者にとってより直感的に品質指標値の推移が理解できるという効果が得られる。
【００３１】
以上のように、本実施の形態によれば、ソースコードを複数の静的解析部に静的解析させ、得られた複数の解析結果データから予め定められた解析項目の解析結果値を抽出して１つのファイルにまとめて出力するので、ソースコードを複数の静的解析ツールで静的解析を行い、解析結果をわかりやすくまとめるソースコード品質管理装置を得ることができる。
【産業上の利用可能性】
【００３２】
以上のように、本発明にかかるソースコード品質管理装置は、プログラムのソースコードを静的解析するソースコード品質管理装置に適用して好適である。
【図面の簡単な説明】
【００３３】
【図１】本実施の形態のソースコード品質管理装置の構成を説明する図である。
【図２】本実施の形態のソースコード品質管理装置の全体の動作を説明するフローチャートである。
【図３】第一〜第三の静的解析部が静的解析を行う様子を説明する図である。
【図４】解析データ集約部が解析結果を取得して集約データを作成する動作を説明するフローチャートである。
【図５】解析データ集約部が解析結果を取得して集約データを作成する様子を説明する図である。
【図６】一覧表作成部が集約データを取得して一覧表を作成する動作を説明するフローチャートである。
【図７】一覧表作成部が集約データを取得して一覧表を作成する様子を説明する図である。
【図８】品質推移グラフを説明する図である。
【符号の説明】
【００３４】
１  ソースコード品質管理装置
２  制御部
３ａ、３ｂ、３ｃ  静的解析部
４  データ蓄積部
５  解析データ集約部
６  一覧表作成部
１１  設定ファイル
１２  ソースコード
１３ａ、１３ｂ、１３ｃ  解析結果
１４  集約データ
１５  一覧表
【図１】
2009230420.tif 000003
【図２】
2009230420.tif 000004
【図３】
2009230420.tif 000005
【図４】
2009230420.tif 000006
【図５】
2009230420.tif 000007
【図６】
2009230420.tif 000008
【図７】
2009230420.tif 000009
【図８】
2009230420.tif 000010