JP2015026276A - 静的解析装置、静的解析方法、および、コンピュータ・プログラム - Google Patents

静的解析装置、静的解析方法、および、コンピュータ・プログラム Download PDF

Info

Publication number
JP2015026276A
JP2015026276A JP2013155787A JP2013155787A JP2015026276A JP 2015026276 A JP2015026276 A JP 2015026276A JP 2013155787 A JP2013155787 A JP 2013155787A JP 2013155787 A JP2013155787 A JP 2013155787A JP 2015026276 A JP2015026276 A JP 2015026276A
Authority
JP
Japan
Prior art keywords
information
warning
similar
priority
difference
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2013155787A
Other languages
English (en)
Other versions
JP6121828B2 (ja
Inventor
豊 小関
Yutaka Koseki
豊 小関
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Engineering Ltd
Original Assignee
NEC Engineering Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Engineering Ltd filed Critical NEC Engineering Ltd
Priority to JP2013155787A priority Critical patent/JP6121828B2/ja
Publication of JP2015026276A publication Critical patent/JP2015026276A/ja
Application granted granted Critical
Publication of JP6121828B2 publication Critical patent/JP6121828B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

【課題】ソースコードに対する静的解析の結果を精度よく優先度付けして提示することにより、ソフトウェア開発者の負荷を軽減する技術を提供すること。
【解決手段】ソースコードに対する静的解析結果として、警告位置情報と警告識別情報とを含む警告情報を生成する静的解析部11と、ソースコードにおいて互いに類似する類似部分を抽出し、各類似部分について、類似識別情報と範囲情報とを含む類似部分情報を生成する類似部分抽出部12と、警告情報および類似部分情報を照合することにより、各警告情報に対して、該警告情報の示す警告箇所の位置を含む類似部分の類似識別情報を追加した連結警告情報を生成する情報連結部13と、連結警告情報に対して、警告識別情報および類似識別情報に基づく優先度決定基準を用いて優先度を決定する優先度決定部14と、を備える。
【選択図】図1

Description

本発明は、ソースコードに対する静的解析を行う静的解析装置、静的解析方法、およびコンピュータ・プログラムに関する。
ソフトウェア開発において、ソースコードに対する静的解析を行う静的解析装置が知られている。静的解析は、動作不良などの不具合を起こす可能性を減らす目的で行われる。静的解析装置は、不具合に繋がりやすいパターンを予め定義しておき、ソースコードを実際に実行することなく、ソースコード内から定義に合致する記述誤りのある箇所、または、記述誤りの可能性が高い箇所を特定して警告を出力する。ソフトウェアの開発者は、それらの警告のうち修正が必要と判断した警告を修正することを繰り返し、ソースコードの品質改善を行う。
ここで、ソースコードでは、複数の箇所に類似する動作が記述されることが多い。そこで、ソフトウェア開発者は、関数単位、行単位などの様々な単位で、ソースコードの複製を行うことがある。もし、複製元の記述に誤りがあると、複製先にも同様の誤りが記述される。そのような場合、静的解析装置は、多数の同一の警告を出力してしまう。
さらに、静的解析装置により出力される警告は、ソースコードの規模が大きくなるにつれ増加していく傾向がある。また、これらの警告には、実際には、不具合に繋がる警告も不具合に繋がらない警告も含まれる。したがって、静的解析装置から出力されるすべての警告を確認することは、ソフトウェア開発者にとって困難になっている。このため、どの警告を修正すべきかを提示する技術が求められている。
このような要求に対応する関連技術が、特許文献1に記載されている。特許文献1の関連技術は、対象のソースコードが、あらかじめ規定されたソースコードのコーディングルールに準拠しているかどうかを解析し、準拠していない違反箇所に関連する情報を、解析結果として出力する。このとき、この関連技術は、コーディングルールのルールIDごとに出力要否を設定しておき、出力要と設定されたルールIDに対応する違反箇所を出力する。
また、他の関連技術が、特許文献2に記載されている。特許文献2に記載された関連技術は、初回記憶時のソースコードから前回記憶時までのソースコードについて、モジュール単位で変更の履歴を管理する。そして、この関連技術は、新たなソースコードに対して静的解析を行って検出した不具合箇所のうち、変更の累計回数がより多いモジュールで検出された不具合箇所から順に警告を出力する。
また、他の関連技術が、特許文献3に記載されている。特許文献3に記載された関連技術は、ソースコードの静的解析を行うことにより得られる警告箇所について、警告種別を表す警告IDと、警告箇所を含むソースコード行とを含むレコードからなる警告テーブルを生成する。そして、この関連技術は、警告IDおよびソースコード行の同一性に基づいて警告テーブルをソートし出力する。
特開2010−198522号公報 特開2008−21244号公報 特開2012−248050号公報
上述した各関連技術は、ソースコードの静的解析時に出力する膨大な警告について、ある程度優先順位をつけて出力することができるものの、依然として以下のような課題がある。
特許文献1に記載された関連技術は、ルールID毎に出力要否を選択できるが、実際には、同じルールIDの警告であっても、対応が必要な警告と対応が不要な警告とに区別できる場合が大いにある。このため、この関連技術は、対応が不要な警告のルールIDを出力否に設定すると、対応が必要な警告も出力できなくなってしまう。このように、この関連技術は、静的解析時に出力される警告に対する優先度付けの精度が十分でない。
また、特許文献2に記載された関連技術は、更新回数がより多いモジュールにおいて指摘された警告に対してより高い優先度付けを行う。しかし、この関連技術では、モジュールの単位の取り方によって更新回数が変わり、優先度も異なってくるため、モジュールの単位を適切に設定する必要がある。また、この関連技術は、モジュールを機能単位で設定した場合、機能単位ごとに優先度を付けることになる。ここで、ある機能において記述されたある関数が、別の機能において再利用のためコピーされ、コピー元およびコピー先で同一の警告が出力される場合について考える。このような場合、この関連技術は、これらの警告が複製された記述に起因する同一の警告であるにも関わらず、コピー元およびコピー先が異なるモジュールに含まれるため、異なる優先順位付けをする可能性が高い。このように、この関連技術は、出力される警告に対して精度よく優先度付けをすることができない。
また、特許文献3に記載された関連技術は、静的解析の結果を、警告種別およびソースコード行の同一性に基づいて並び替えて表示する。しかし、この関連技術は、実際には複製された記述に基づく同一の警告であっても、ソースコード行が若干異なるだけで、異なる警告として扱ってしまう場合がある。また、この関連技術は、ソースコードの行単位で同一性を判断し、モジュール単位などの他の単位で同一性を判断しないため、実際には同一とみなせる記述を同一であると判断できないことがある。その結果、この関連技術は、静的解析の結果を、精度よく優先度付けして提示することができない。
本発明は、上述の課題を解決するためになされたもので、ソースコードに対する静的解析の結果を精度よく優先度付けして提示する技術を提供することを目的とする。
本発明の静的解析装置は、入力されたソースコードに対して静的解析を行うことにより、前記ソースコードにおける警告箇所の位置を表す警告位置情報と、警告の種別を識別する警告識別情報とを含む警告情報を生成する静的解析部と、前記ソースコードにおいて互いに類似する部分(類似部分)を抽出することにより、各類似部分について、該互いに類似する類似部分を他の互いに類似する類似部分から識別する類似識別情報と、該類似部分の範囲を表す範囲情報とを含む類似部分情報を生成する類似部分抽出部と、前記警告情報および前記類似部分情報を照合することにより、各警告情報に対して、該警告情報の示す警告箇所の位置を含む類似部分の類似識別情報を追加した連結警告情報を生成する情報連結部と、前記連結警告情報に対して、前記警告識別情報および前記類似識別情報に基づく優先度決定基準を用いて優先度を決定し、決定した優先度にしたがって前記連結警告情報を出力する優先度決定部と、を備える。
また、本発明の静的解析方法は、入力されたソースコードに対して静的解析を行うことにより、前記ソースコードにおける警告箇所の位置を表す警告位置情報と、警告の種別を識別する警告識別情報とを含む警告情報を生成し、前記ソースコードにおいて互いに類似する部分(類似部分)を抽出することにより、各類似部分について、該互いに類似する類似部分を他の互いに類似する類似部分から識別する類似識別情報と、該類似部分の範囲を表す範囲情報とを含む類似部分情報を生成し、前記警告情報および前記類似部分情報を照合することにより、各警告情報に対して、該警告情報の示す警告箇所の位置を含む類似部分の類似識別情報を追加した連結警告情報を生成し、前記連結警告情報に対して、前記警告識別情報および前記類似識別情報に基づく優先度決定基準を用いて優先度を決定し、決定した優先度にしたがって前記連結警告情報を出力する。
また、本発明のコンピュータ・プログラムは、入力されたソースコードに対して静的解析を行うことにより、前記ソースコードにおける警告箇所の位置を表す警告位置情報と、警告の種別を識別する警告識別情報とを含む警告情報を生成する静的解析ステップと、前記ソースコードにおいて互いに類似する部分(類似部分)を抽出することにより、各類似部分について、該互いに類似する類似部分を他の互いに類似する類似部分から識別する類似識別情報と、該類似部分の範囲を表す範囲情報とを含む類似部分情報を生成する類似部分抽出ステップと、前記警告情報および前記類似部分情報を照合することにより、各警告情報に対して、該警告情報の示す警告箇所の位置を含む類似部分の類似識別情報を追加した連結警告情報を生成する情報連結ステップと、前記連結警告情報に対して、前記警告識別情報および前記類似識別情報に基づく優先度決定基準を用いて優先度を決定し、決定した優先度にしたがって前記連結警告情報を出力する優先度決定ステップと、をコンピュータ装置に実行させる。
本発明は、ソースコードに対する静的解析の結果を、精度よく優先度付けして提示する技術を提供することができる。
本発明の第1の実施の形態としての静的解析装置の機能ブロック図である。 本発明の第1の実施の形態としての静的解析装置のハードウェア構成の一例を示す図である。 本発明の第1の実施の形態としての静的解析装置の動作を説明するフローチャートである。 本発明の第1の実施の形態における警告情報の一例を示す図である。 本発明の第1の実施の形態における類似部分情報の一例を示す図である。 本発明の第1の実施の形態における連結警告情報の一例を示す図である。 本発明の第1の実施の形態において優先度付けされた連結警告情報の一例を示す図である。 本発明の第2の実施の形態としての静的解析装置の機能ブロック図である。 本発明の第2の実施の形態としての静的解析装置の動作を説明するフローチャートである。 本発明の第2の実施の形態における差分情報の一例を示す図である。 本発明の第2の実施の形態における連結警告情報の一例を示す図である。 本発明の第2の実施の形態において優先度付けされた連結警告情報の一例を示す図である。
以下、本発明の実施の形態について、図面を参照して詳細に説明する。
(第1の実施の形態)
本発明の第1の実施の形態としての静的解析装置1の機能ブロック構成を図1に示す。
図1において、静的解析装置1は、静的解析部11と、類似部分抽出部12と、情報連結部13と、優先度決定部14とを備える。
ここで、静的解析装置1は、図2に示すように、CPU(Central Processing Unit)1001と、RAM(Random Access Memory)1002と、ROM(Read Only Memory)1003と、ハードディスク等の記憶装置1004と、入力装置1005と、出力装置1006とを備えたコンピュータ装置によって構成可能である。この場合、静的解析部11は、入力装置1005と、ROM1003および記憶装置1004に記憶されたコンピュータ・プログラムおよび各種データをRAM1002に読み込んで実行するCPU1001とによって構成される。また、類似部分抽出部12および情報連結部13は、ROM1003および記憶装置1004に記憶されたコンピュータ・プログラムおよび各種データをRAM1002に読み込んで実行するCPU1001によって構成される。また、優先度決定部14は、出力装置1006と、ROM1003および記憶装置1004に記憶されたコンピュータ・プログラムおよび各種データをRAM1002に読み込んで実行するCPU1001とによって構成される。なお、静的解析装置1およびその各機能ブロックのハードウェア構成は、上述の構成に限定されない。
静的解析部11は、入力されたソースコードに対して静的解析を行い、解析結果として警告情報を生成する。例えば、静的解析部11は、ソースコード内における不具合に繋がりやすいパターンを検出する公知の各種技術を採用可能である。また、ソースコードは、1つ以上の一群のファイルに記述されたものであってもよい。例えば、静的解析部11は、記憶装置1004におけるソースコードの格納場所を特定する情報を入力装置1005を介して取得することにより、ソースコードを取得してもよい。警告情報には、警告位置情報と、警告識別情報とが少なくとも含まれる。ここで、警告位置情報とは、ソースコードにおける警告箇所の位置を表す情報である。例えば、警告位置情報は、警告箇所が含まれるファイル名と、警告箇所の行番号とを含む情報であってもよい。また、警告識別情報とは、警告の種別を識別する情報である。
類似部分抽出部12は、ソースコードにおいて互いに類似する部分(類似部分)を抽出する。例えば、類似部分抽出部12は、ソースコードにおける任意の範囲の部分について、所定の類似条件を満たす他の部分を抽出する。任意の範囲とは、例えば、数行から数十行などの範囲であってもよい。所定の類似条件とは、例えば、識別子や引数など一部だけが異なり残る部分が同一であることや、コメントや空白文字などプログラムの動作に影響しない箇所だけが異なり残る部分が同一であることなどであってもよい。その他、類似部分抽出部12は、テキストデータにおいて互いに類似する部分を抽出する公知の各種技術を採用してもよい。
また、類似部分抽出部12は、抽出した各類似部分について、類似識別情報と、範囲情報とを含む類似部分情報を生成する。ここで、類似識別情報は、互いに類似する類似部分を、他の互いに類似する類似部分から識別するための情報である。つまり、類似識別情報は、互いに類似する類似部分のグループごとに、異なる値が付与される。範囲情報は、ソースコードにおける該当部分の範囲を表す。例えば、範囲情報は、その類似部分が含まれるファイル名と、開始行番号と、終了行番号とを含む情報であってもよい。
情報連結部13は、静的解析部11により出力された警告情報および類似部分抽出部12により生成された類似部分情報を照合することにより、各警告情報に対して類似識別情報を追加した連結警告情報を生成する。具体的には、情報連結部13は、各警告情報に対して、その警告情報の示す警告箇所の位置を含む類似部分があればその類似識別情報を追加すればよい。
優先度決定部14は、情報連結部13により生成された連結警告情報に対して、警告識別情報および類似識別情報に基づく優先度決定基準にしたがって優先度を付ける。そして、優先度決定部14は、決定した優先度にしたがって、連結警告情報を出力装置1006に出力する。
例えば、優先度決定部14は、警告識別情報および類似識別情報の組み合わせが同一の警告情報の数をカウントし、カウント数が多い順により高い優先度をつけてもよい。また、その場合、優先度決定部14は、同一の優先度となった警告情報については、同一の類似識別情報のカウント数がより多い順により高い優先度をつけてもよい。その場合、優先度決定部14は、さらに同一の優先度となった警告情報については、同一の警告識別情報のカウント数がより多い順により高い優先度をつけてもよい。その他、優先度決定部14は、警告識別情報および類似識別情報に基づく基準であれば、その他の優先度決定基準により優先度付けを行ってもよい。
以上のように構成された静的解析装置1の動作について、図3を参照して説明する。
まず、静的解析部11は、入力されたソースコードに対して静的解析を行い、警告位置情報と警告識別情報とからなる警告情報を生成する(ステップS1)。
次に、類似部分抽出部12は、ソースコードにおいて、互いに類似する類似部分を抽出し、抽出した各類似部分について、類似識別情報と範囲情報とからなる類似部分情報を生成する(ステップS2)。
次に、情報連結部13は、ステップS1で生成された各警告情報に、ステップS2で生成された類似部分情報の類似識別情報を追加した連結警告情報を生成する(ステップS3)。具体的には、前述のように、情報連結部13は、各警告情報に、その警告情報の示す警告箇所の位置を含む類似部分の類似識別情報を追加すればよい。
次に、優先度決定部14は、ステップS3で生成された連結警告情報について、警告識別情報および類似識別情報に基づく優先度決定基準にしたがって優先度を付ける。そして、優先度決定部14は、決定した優先度にしたがって、連結警告情報を出力する(ステップS4)。
以上で、静的解析装置1は動作を終了する。
次に、静的解析装置1の動作を具体例で示す。
ここでは、静的解析部11は、不具合に繋がりやすい記述のパターンを記憶し、ソースコードにおいてパターンと合致する箇所を、ルール違反の可能性がある警告箇所として検出するものとする。
まず、ステップS1において、静的解析部11は、入力されたソースコードのうち、記憶しているパターンに合致する警告箇所を検出し、警告情報を生成する。ここでは、図4に示す警告情報が生成されたものとする。図4において、各行が示す警告情報は、警告位置情報としてのファイル名および行番号と、警告識別情報としての警告IDとを含み、さらに、警告内容と、該当行ソースコード(該当行の記述内容)とを含んでいる。このように、静的解析部11によって生成される警告情報は、少なくとも警告位置情報および警告識別情報を含んでいれば、その他の情報を含んでいてもよい。以降、これらの警告情報を、警告テーブルとも記載する。
次に、ステップS2において、類似部分抽出部12は、入力されたソースコードにおいて互いに類似する類似部分を抽出する。この具体例では、類似部分抽出部12は、数行から数十行程度の範囲の部分に対して、例えば、識別子、引数など一部だけが異なっている他の部分や、コメントや空白文字などプログラムの動作に影響しない箇所だけが異なっている他の部分を、類似部分として抽出する。
そして、類似部分抽出部12は、抽出した各類似部分について、類似識別情報としての類似IDと、範囲情報とからなる類似部分情報を生成する。ここでは、図5に示す類似部分情報が生成されたものとする。図5において、各行が示す類似部分情報は、範囲情報としてのファイル名、開始行番号、および、終了行番号と、類似IDとを含む。また、互いに類似する類似部分のグループには、他の互いに類似する類似部分のグループから識別するための同一の類似IDが付与される。以降、これらの類似部分情報を、類似部分テーブルとも記載する。
次に、ステップS3において、情報連結部13は、図4に示した警告テーブルと、図5に示した類似テーブルとを照合することにより、各警告情報に類似IDを追加して連結警告情報を生成する。
具体的には、情報連結部13は、各警告情報について、その警告位置情報を含む範囲情報を持つ類似部分情報を検索する。そして、そのような類似部分情報が検索された場合、情報連結部13は、該当する警告テーブルの行に、検索した類似部分情報の類似IDを追加すればよい。
例えば、図4に示した警告テーブルの1行目の警告情報は、該当する警告箇所が「ファイル“A0001.c”の“111”行目」にあることを表している。また、この「“A0001.c”の“111”行目」は、図5に示した類似テーブルの1行目の類似部分情報の範囲である「ファイル“A0001.c”の開始行“110”行目から終了行“119”行目まで」に含まれている。そこで、情報連結部13は、図4の警告テーブルの1行目に、類似テーブルの1行目の類似IDである“001”を追加する。また、図4に示した警告テーブルの3行目の警告情報は、該当する警告箇所が「ファイル“A0001.c”の“238”行目」にあることを表している。また、この「“A0001.c”の“238”行目」を含む範囲の類似部分情報は、図5に示した類似テーブルに含まれていない。そこで、情報連結部13は、図4の警告テーブルの3行目に、類似IDを追加しない。そして、情報連結部13は、図4の警告テーブルの他の行についても、同様に処理を行っていく。このようにして、類似IDが追加された連結警告情報の一例を図6に示す。以降、これらの連結警告情報を、連結警告テーブルとも記載する。
次に、ステップS4において、優先度決定部14は、図6の連結警告テーブルの各行に対して、警告IDおよび類似IDに基づく優先度決定基準を用いて、優先度を付与する。
ここでは、優先度決定部14は、まず、警告IDおよび類似IDの組み合わせが同一の連結警告情報のカウント数が多い順に、より高い優先度を付与する。また、優先度決定部14は、警告IDおよび類似IDの組み合わせのカウント数が同一のものについては、同一の類似IDのカウント数の多い順に、より高い優先度を付与する。さらに、優先度決定部14は、類似IDのカウント数が同一のものについては、同一の警告IDのカウント数の多い順に、より高い優先度を付与する。
例えば、図6において、警告IDが“ID505”であり、かつ、類似IDが“001”である連結警告情報のカウント数は、1、4、7行目の3つである。また、警告IDが“ID607”であり、かつ、類似IDが“002”である連結警告情報のカウント数は、2、6行目の2つである。それ以外の各連結警告情報は、類似IDおよび警告IDの組み合わせが同一のものが他にないため、カウント数は1つとなる。そこで、まず、優先度決定部14は、1、4、7行目に優先度1を付与し、2、6行目に優先度2を付与する。なお、ここでは、優先度の値が小さいほど、優先度が高いことを表すものとする。
また、残りの3、5、8行目は、類似IDおよび警告IDの組み合わせのカウント数が1で同一である。そのため、優先度決定部14は、3、5、8行目について、類似IDのカウント数に基づいて優先度付けを行う。ここで、3、5、8行目の類似IDのうち、5行目の類似ID“001”が、1〜8行目におけるカウント数が4つで最も多い。したがって、優先度決定部14は、5行目に優先度3を付与する。
そして、残りの3、8行目は、類似IDが追加されていないため、類似IDのカウント数が0で同一となる。そのため、優先度決定部14は、3、8行目について、警告IDのカウント数に基づいて優先度付けを行う。ここで、3、8行目の警告IDのうち、8行目の警告ID“ID505”が、1〜8行目におけるカウント数が4つで最も多い。したがって、優先度決定部14は、8行目に優先度4を付与する。そして、優先度決定部14は、残る3行目の警告情報に、優先度5を付与する。このようにして優先度が決定された連結警告情報を図7に示す。図7において、連結警告情報は、優先度の高い順に上から並べ替えられている。そして、優先度決定部14は、付与した優先度にしたがって、図7に示した順序で連結警告情報を出力してもよい。
以上で、静的解析装置1の具体的な動作の説明を終了する。
次に、本発明の第1の実施の形態の効果について述べる。
本発明の第1の実施の形態としての静的解析装置は、ソースコードに対する静的解析の結果を精度よく優先度付けして提示することができる。
その理由は、静的解析部が、ソースコードに対する静的解析を行った結果として警告位置情報および警告識別情報を含む警告情報を生成し、類似部分抽出部が、ソースコードにおいて互いに類似する類似部分を抽出し、各類似部分について類似識別情報および範囲情報を含む類似部分情報を生成し、情報連結部が、各警告情報に、その警告箇所の位置を含む類似部分の類似識別情報を追加し、優先度決定部が、警告識別情報および類似識別情報に基づく優先度決定基準を用いて、警告情報に優先度付けを行い、優先度にしたがって出力するからである。
これにより、本実施の形態は、静的解析によって得られた各警告箇所を、他の警告箇所との関わりに応じた優先順序で、ユーザに提示することができる。例えば、ソースコードにおいて、誤った記述を含む部分が複数の箇所に複製されている場合を考える。この場合、複製先で変数名等の若干の記述変更があったとしても、本実施の形態は、それらの複数の誤った記述についての各警告情報に、同一の警告識別情報および同一の類似識別情報を付与することになる。したがって、本実施の形態は、そのような一群の警告箇所の優先度を高くして出力することになる。その結果、本実施の形態は、複製された誤った記述に対する一群の警告を、より優先して確認すべきものとして提示することができ、ソフトウェア開発者の修正作業における負荷を軽減することができる。このように、本実施の形態を用いることにより、ソフトウェア開発者は、他の警告箇所との関係性の強い警告を容易に絞り込んで修正することができ、非常に効率がよい。
しかも、本実施の形態は、ソースコードにおいて抽出した任意の範囲の類似部分に基づいて優先度付けを行うため、ソースコードにおいて類似部分として抽出するための単位を事前に設定しておく必要がない。したがって、本実施の形態は、ソフトウェア開発者の事前設定作業を必要とせずに、静的解析の結果を精度よく優先度付けして提示することができる。
(第2の実施の形態)
次に、本発明の第2の実施の形態について図面を参照して詳細に説明する。なお、本実施の形態の説明において参照する各図面において、本発明の第1の実施の形態と同一の構成および同様に動作するステップには同一の符号を付して本実施の形態における詳細な説明を省略する。
まず、本発明の第2の実施の形態としての静的解析装置2の機能ブロック構成を図8に示す。図8において、静的解析装置2は、本発明の第1の実施の形態としての静的解析装置1に対して、情報連結部13に替えて情報連結部23と、優先度決定部14に替えて優先度決定部24とを備え、さらに、差分抽出部25を備える点が異なる。
ここで、静的解析装置2は、図2を参照して説明した本発明の第1の実施の形態としての静的解析装置1と同様のハードウェア要素を備えるコンピュータ装置によって構成可能である。この場合、差分抽出部25は、入力装置1005と、ROM1003および記憶装置1004に記憶されたコンピュータ・プログラムおよび各種データをRAM1002に読み込んで実行するCPU1001とによって構成される。なお、静的解析装置2およびその各機能ブロックのハードウェア構成は、上述の構成に限定されない。
差分抽出部25は、対象のソースコードについて、以前のソースコードに対する差分を抽出し、抽出した差分の範囲を表す差分情報を生成する。例えば、差分情報は、ソースコードの差分該当部分を含むファイル名、開始行番号、および、終了行番号からなる情報であってもよい。また、例えば、差分抽出部25は、記憶装置1004における以前のソースコードの格納場所を特定する情報を、入力装置1005を介して取得することにより、以前のソースコードを取得してもよい。
情報連結部23は、静的解析部11によって生成された警告情報に、類似識別情報および後述する差分有無情報を追加した連結警告情報を生成する。まず、情報連結部23は、本発明の第1の実施の形態における情報連結部13と同様に、各警告情報に類似識別情報を追加する。加えて、情報連結部23は、静的解析部11によって生成された警告情報および差分抽出部25によって生成された差分情報を照合することにより、各警告情報に対して、該警告情報の示す警告箇所の位置を含む差分の範囲があるか否かを判断する。そして、情報連結部23は、警告箇所の位置を含む差分の範囲がある警告情報に対して、「差分有り」を表す差分有無情報を追加すればよい。また、情報連結部23は、警告箇所の位置を含む差分の範囲がない警告情報に対して、「差分無し」を表す差分有無情報を追加すればよい。
優先度決定部24は、本発明の第1の実施の形態における優先度決定部14に対して、警告識別情報および類似識別情報に加えて、さらに差分有無情報に基づく優先度決定基準を用いる点が異なる。例えば、優先度決定部24は、警告識別情報および類似識別情報の組み合わせが一致する連結警告情報のグループにおいて全てが差分有りの場合、それらの連結警告情報に対して、全てが差分有りではないグループより高い優先度を設定してもよい。これは、そのような一群の連結警告情報の全てが差分有りの場合、新規の警告であるみなすことができ、優先して確認したほうがよいためである。また、警告識別情報および類似識別情報の組み合わせが一致する連結警告情報のグループに、差分有りと差分無しとが混在する場合、そのような一群の連結警告情報は、過去に対応不要であることが確認された警告であるとみなすことができるからである。
また、優先度決定部24は、優先度決定基準の設定変更を表す情報を取得すると、設定変更された優先度決定基準を用いて優先度を更新してもよい。例えば、優先度決定部24は、一旦決定した優先度を用いて連結警告情報を出力した後、入力装置1005を介して、優先度決定基準の設定変更を表す情報を取得してもよい。例えば、優先度決定基準の設定変更を表す情報とは、差分有無情報を考慮するか否かの設定を変更する内容であってもよい。また、例えば、優先度決定基準の設定変更を表す情報とは、警告識別情報および類似識別情報の組み合わせが一致するカウント数が同一の場合に、同一の類似識別情報のカウント数と、同一の警告識別情報のカウント数とのどちらを優先的に比較するかを変更する内容であってもよい。
以上のように構成された静的解析装置2の動作について、図9を参照して説明する。
まず、静的解析装置2は、ステップS1〜S2まで、本発明の第1の実施の形態としての静的解析装置1と同様に動作することにより、静的解析の結果である警告情報と、類似部分情報とを生成する。
次に、差分抽出部25は、以前のソースコードがあるか否かを判断する(ステップS13)。
ここで、以前のソースコードがなければ、静的解析装置2は、図3に示したステップS3〜S4を実行して処理を終了する。
一方、以前のソースコードがあれば、差分抽出部25は、対象のソースコードについて、以前のソースコードからの差分を抽出し、その範囲を表す差分情報を生成する(ステップS14)。
次に、情報連結部23は、ステップS1で生成された各警告情報に対して、類似識別情報と差分有無情報とを追加した連結警告情報を生成する(ステップS15)。具体的には、前述のように、情報連結部23は、各警告情報に、その警告箇所の位置を含む類似部分の類似識別情報を追加するとともに、その警告箇所の位置を含む差分の範囲があるか否かを表す差分有無情報を追加すればよい。
次に、優先度決定部24は、ステップS15で生成された各連結警告情報に対して、警告識別情報、類似識別情報、および、差分有無情報に基づく優先度決定基準を用いて、優先度を決定する。そして、優先度決定部24は、決定した優先度にしたがって、連結警告情報を出力する(ステップS16)。
次に、優先度決定部24は、優先度決定基準の設定変更を表す情報が入力されたか否かを判断する(ステップS17)。
ここで、設定変更を表す情報が入力されなければ、静的解析装置2は動作を終了する。
一方、設定変更を表す情報が入力された場合、優先度決定部24は、ステップS16からの動作を繰り返す。
以上で、静的解析装置2の動作の説明を終了する。
次に、静的解析装置2の動作を具体例で示す。
ここでは、本発明の第1の実施の形態における具体例と同様に、ステップS1において、静的解析部11によって図4に示した警告テーブルが生成され、ステップS2において、類似部分抽出部12によって図5に示した類似テーブルが生成されたものとする。
次に、ステップS13において、差分抽出部25は、以前のソースコードがあると判断したものとする。
そこで、ステップS14において、差分抽出部25は、対象のソースコードの以前のソースコードに対する差分情報を生成する。ここでは、図10に示す差分情報が生成されたとする。この具体例では、差分情報は、その差分の範囲を含むファイル名と、開始行番号と、終了行番号とからなるものとする。以降、これらの差分情報を、差分テーブルとも記載する。
次に、ステップS15において、情報連結部23は、図4の警告テーブルと、図5の類似テーブルと、図10の差分テーブルとを照合することにより、警告情報に類似IDおよび差分有無情報を追加した連結警告情報を生成する。
例えば、情報連結部23は、図4に示した警告テーブルの1行目の警告情報は、警告箇所が「ファイル“A0001.c”の“111”行目」にあることを表している。また、この「ファイル“A0001.c”の“111”行目」は、図10に示した差分テーブルに示された差分情報に含まれていない。そこで、情報連結部23は、図4の警告テーブルの1行目には、差分無しを表す差分有無情報を追加する。また、図4に示した警告テーブルの4行目の警告情報は、警告箇所が「ファイル“A0001.c”の“311”行目」にあることを表している。また、この「ファイル“A0001.c”の“311”行目」は、図10に示した差分テーブルの1行目の差分情報に含まれている。そこで、情報連結部23は、警告テーブルの4行目に、差分有りを表す差分有無情報を追加する。
このようにして差分有無情報および類似IDが追加された連結警告情報の一例を図11に示す。以降、これらの連結警告情報を、連結警告テーブルとも記載する。
次に、ステップS16において、優先度決定部24は、図11に示した連結警告テーブルの各行に対して、警告ID、類似IDおよび差分有無情報に基づく優先度決定基準を用いて、優先度を付与する。
ここでは、優先度決定部24は、まず、警告IDおよび類似IDの組み合わせが同一の連結警告情報のグループで、全てが差分有りとなっているものを最も優先度の高いものとして設定する。
具体的には、図11の連結警告テーブルにおいて、警告IDおよび類似IDの組み合わせが同一の連結警告情報のグループとしては、1、4、7行目からなるグループ1と、2、6行目からなるグループ2と、3行目からなるグループ3と、5行目からなるグループ4と、8行目からなるグループ5とがある。このうち、全てが差分有りとなっているものは、5行目からなるグループ4である。そこで、優先度決定部24は、5行目に、優先度1を付与する。
また、残りのグループでは、全てが差分有りとなっているものはない。そこで、優先度決定部24は、残りの連結警告情報について、本発明の第1の実施の形態の具体例における優先度決定部14と同様の基準で優先度を付与する。このようにして優先度が決定された連結警告情報を図12に示す。図12において、連結警告情報は、優先度の高い順に上から並べ替えられている。そして、優先度決定部24は、付与した優先度にしたがって、図12に示した順序で連結警告情報を出力してもよい。
このように、優先度決定部24は、(a)警告IDおよび類似IDが同一のグループにおける差分有無情報の構成、(b)警告IDおよび類似IDが同一のカウント数、(c)類似IDが同一のカウント数、(d)警告IDが同一のカウント数の順に優先度決定基準として用いている。
さらに、ここで、ステップS17において、入力装置1005を介して、優先度決定基準を、差分有無情報を考慮せずに比較するよう設定変更する情報が入力されたとする。
そこで、優先度決定部24は、上述の(b)、(c)、(d)の順に優先度決定基準として用いて、ステップS16を再度実行する。これにより、優先度決定部24は、本発明の第1の実施の形態の具体例で示した図7のような優先度を決定し、出力する。
以上で、静的解析装置2の具体的な動作の説明を終了する。
次に、本発明の第2の実施の形態の効果について述べる。
本発明の第2の実施の形態としての静的解析装置は、ソースコードに対する静的解析の結果をさらに精度よく優先度付けして提示することができる。
その理由は、静的解析部が警告情報を生成し、類似部分抽出部が類似部分情報を生成することに加えて、差分抽出部が、対象のソースコードについて以前のソースコードからの差分の範囲を抽出して差分情報を生成し、情報連結部が、各警告情報に、類似識別情報を追加することに加えて、その警告位置情報を含む差分の範囲があるか否かを表す差分有無情報を追加し、優先度決定部が、警告識別情報、類似識別情報、および、差分有無情報に基づく優先度決定基準を用いて、警告情報に優先度付けを行い、優先度にしたがって出力するからである。
これにより、本実施の形態は、静的解析によって得られた各警告箇所について、他の警告箇所との関わりに応じた優先度を付与する際に、差分有無情報を考慮する。例えば、警告識別情報および類似識別情報が一致する連結警告情報のグループが全て差分有りである場合、それらの警告は、新規の警告である可能性が高く、優先度が高いと考えられる。一方、そのようなグループにおいて差分有りと差分無しとが混在する場合、それらの警告は、以前に指摘され対応不要であることが確認された警告である可能性が高く、優先度が低いと考えられる。このように、本実施の形態は、差分有無情報を考慮することにより、他の警告箇所との関係性の強い警告を優先して提示しながらも、さらに、以前から指摘を受けている警告に関連する警告よりも、以前には指摘をされていない新規に発生した警告を優先してユーザに提示することができる。
なお、上述した本発明の各実施の形態において、静的解析装置の各機能ブロックが、記憶装置またはROMに記憶されたコンピュータ・プログラムを実行するCPUによって実現される例を中心に説明したが、各機能ブロックの一部、全部、または、それらの組み合わせが専用のハードウェアにより実現されていてもよい。
また、上述した本発明の各実施の形態において、静的解析装置の機能ブロックは、複数の装置に分散されて実現されてもよい。
また、上述した本発明の各実施の形態において、各フローチャートを参照して説明した静的解析装置の動作を、本発明のコンピュータ・プログラムとしてコンピュータ装置の記憶装置(記憶媒体)に格納しておき、係るコンピュータ・プログラムを当該CPUが読み出して実行するようにしてもよい。そして、このような場合において、本発明は、係るコンピュータ・プログラムのコードあるいは記憶媒体によって構成される。
また、上述した各実施の形態は、適宜組み合わせて実施されることが可能である。
また、本発明は、上述した各実施の形態に限定されず、様々な態様で実施されることが可能である。
1、2 静的解析装置
11 静的解析部
12 類似部分抽出部
13、23 情報連結部
14、24 優先度決定部
25 差分抽出部
1001 CPU
1002 RAM
1003 ROM
1004 記憶装置
1005 入力装置
1006 出力装置

Claims (9)

  1. 入力されたソースコードに対して静的解析を行うことにより、前記ソースコードにおける警告箇所の位置を表す警告位置情報と、警告の種別を識別する警告識別情報とを含む警告情報を生成する静的解析部と、
    前記ソースコードにおいて互いに類似する部分(類似部分)を抽出することにより、各類似部分について、該互いに類似する類似部分を他の互いに類似する類似部分から識別する類似識別情報と、該類似部分の範囲を表す範囲情報とを含む類似部分情報を生成する類似部分抽出部と、
    前記警告情報および前記類似部分情報を照合することにより、各警告情報に対して、該警告情報の示す警告箇所の位置を含む類似部分の類似識別情報を追加した連結警告情報を生成する情報連結部と、
    前記連結警告情報に対して、前記警告識別情報および前記類似識別情報に基づく優先度決定基準を用いて優先度を決定し、決定した優先度にしたがって前記連結警告情報を出力する優先度決定部と、
    を備えた静的解析装置。
  2. 前記ソースコードについて、以前のソースコードに対する差分を抽出し、抽出した差分の範囲を表す差分情報を生成する差分抽出部をさらに備え、
    前記情報連結部は、前記警告情報および前記差分情報を照合することにより、各警告情報に対して、該警告情報の示す警告箇所の位置を含む差分の範囲があるか否かを表す差分有無情報を、前記類似識別情報に加えてさらに追加した前記連結警告情報を生成し、
    前記優先度決定部は、前記警告識別情報および前記類似識別情報に加えて、前記差分有無情報に基づく前記優先度決定基準を用いて前記優先度を決定することを特徴とする請求項1に記載の静的解析装置。
  3. 前記優先度決定部は、前記優先度決定基準の設定変更を表す情報を取得すると、設定変更した前記優先度決定基準を用いて前記優先度を更新することを特徴とする請求項1または請求項2に記載の静的解析装置。
  4. 入力されたソースコードに対して静的解析を行うことにより、前記ソースコードにおける警告箇所の位置を表す警告位置情報と、警告の種別を識別する警告識別情報とを含む警告情報を生成し、
    前記ソースコードにおいて互いに類似する部分(類似部分)を抽出することにより、各類似部分について、該互いに類似する類似部分を他の互いに類似する類似部分から識別する類似識別情報と、該類似部分の範囲を表す範囲情報とを含む類似部分情報を生成し、
    前記警告情報および前記類似部分情報を照合することにより、各警告情報に対して、該警告情報の示す警告箇所の位置を含む類似部分の類似識別情報を追加した連結警告情報を生成し、
    前記連結警告情報に対して、前記警告識別情報および前記類似識別情報に基づく優先度決定基準を用いて優先度を決定し、決定した優先度にしたがって前記連結警告情報を出力する、静的解析方法。
  5. 前記ソースコードについて、以前のソースコードに対する差分を抽出し、抽出した差分の範囲を表す差分情報を生成し、
    前記警告情報および前記差分情報を照合することにより、各警告情報に対して、該警告情報の示す警告箇所の位置を含む差分の範囲があるか否かを表す差分有無情報を、前記類似識別情報に加えてさらに追加した前記連結警告情報を生成し、
    前記警告識別情報および前記類似識別情報に加えて、前記差分有無情報に基づく前記優先度決定基準を用いて前記優先度を決定することを特徴とする請求項4に記載の静的解析方法。
  6. 前記優先度決定基準の設定変更を表す情報を取得すると、設定変更した前記優先度決定基準を用いて前記優先度を更新することを特徴とする請求項4または請求項5に記載の静的解析方法。
  7. 入力されたソースコードに対して静的解析を行うことにより、前記ソースコードにおける警告箇所の位置を表す警告位置情報と、警告の種別を識別する警告識別情報とを含む警告情報を生成する静的解析ステップと、
    前記ソースコードにおいて互いに類似する部分(類似部分)を抽出することにより、各類似部分について、該互いに類似する類似部分を他の互いに類似する類似部分から識別する類似識別情報と、該類似部分の範囲を表す範囲情報とを含む類似部分情報を生成する類似部分抽出ステップと、
    前記警告情報および前記類似部分情報を照合することにより、各警告情報に対して、該警告情報の示す警告箇所の位置を含む類似部分の類似識別情報を追加した連結警告情報を生成する情報連結ステップと、
    前記連結警告情報に対して、前記警告識別情報および前記類似識別情報に基づく優先度決定基準を用いて優先度を決定し、決定した優先度にしたがって前記連結警告情報を出力する優先度決定ステップと、
    をコンピュータ装置に実行させるコンピュータ・プログラム。
  8. 前記ソースコードについて、以前のソースコードに対する差分を抽出し、抽出した差分の範囲を表す差分情報を生成する差分抽出ステップをさらに前記コンピュータ装置に実行させ、
    前記情報連結ステップにおいて、前記警告情報および前記差分情報を照合することにより、各警告情報に対して、該警告情報の示す警告箇所の位置を含む差分の範囲があるか否かを表す差分有無情報を、前記類似識別情報に加えてさらに追加した前記連結警告情報を生成し、
    前記優先度決定ステップにおいて、前記警告識別情報および前記類似識別情報に加えて、前記差分有無情報に基づく前記優先度決定基準を用いて前記優先度を決定することを特徴とする請求項7に記載のコンピュータ・プログラム。
  9. 前記優先度決定基準の設定変更を表す情報の取得に応じて、設定変更した前記優先度決定基準を用いて前記優先度決定ステップを前記コンピュータ装置に実行させることを特徴とする請求項7または請求項8に記載のコンピュータ・プログラム。
JP2013155787A 2013-07-26 2013-07-26 静的解析装置、静的解析方法、および、コンピュータ・プログラム Active JP6121828B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2013155787A JP6121828B2 (ja) 2013-07-26 2013-07-26 静的解析装置、静的解析方法、および、コンピュータ・プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013155787A JP6121828B2 (ja) 2013-07-26 2013-07-26 静的解析装置、静的解析方法、および、コンピュータ・プログラム

Publications (2)

Publication Number Publication Date
JP2015026276A true JP2015026276A (ja) 2015-02-05
JP6121828B2 JP6121828B2 (ja) 2017-04-26

Family

ID=52490871

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013155787A Active JP6121828B2 (ja) 2013-07-26 2013-07-26 静的解析装置、静的解析方法、および、コンピュータ・プログラム

Country Status (1)

Country Link
JP (1) JP6121828B2 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017151594A (ja) * 2016-02-23 2017-08-31 日本電気株式会社 支援装置、支援方法及びプログラム
JP2018026135A (ja) * 2016-08-11 2018-02-15 タタ コンサルタンシー サービシズ リミテッドTATA Consultancy Services Limited 静的解析警告の効率的な運用のための原因ポイント解析のためのシステム及び方法
US11281566B2 (en) 2018-07-23 2022-03-22 Mitsubishi Electric Corporation Scoring device, computer readable medium, and scoring method

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010079447A (ja) * 2008-09-24 2010-04-08 Fujitsu Ltd バグ検出支援プログラム、類似構文識別情報一覧出力プログラム、バグ検出支援装置およびバグ検出支援方法
JP2012248050A (ja) * 2011-05-30 2012-12-13 Nec Commun Syst Ltd 静的解析支援装置、静的解析支援方法、及びプログラム

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010079447A (ja) * 2008-09-24 2010-04-08 Fujitsu Ltd バグ検出支援プログラム、類似構文識別情報一覧出力プログラム、バグ検出支援装置およびバグ検出支援方法
JP2012248050A (ja) * 2011-05-30 2012-12-13 Nec Commun Syst Ltd 静的解析支援装置、静的解析支援方法、及びプログラム

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017151594A (ja) * 2016-02-23 2017-08-31 日本電気株式会社 支援装置、支援方法及びプログラム
JP2018026135A (ja) * 2016-08-11 2018-02-15 タタ コンサルタンシー サービシズ リミテッドTATA Consultancy Services Limited 静的解析警告の効率的な運用のための原因ポイント解析のためのシステム及び方法
US11281566B2 (en) 2018-07-23 2022-03-22 Mitsubishi Electric Corporation Scoring device, computer readable medium, and scoring method

Also Published As

Publication number Publication date
JP6121828B2 (ja) 2017-04-26

Similar Documents

Publication Publication Date Title
US10489591B2 (en) Detection system and method thereof
TWI603220B (zh) Method and device for network verification information
US8904352B2 (en) Systems and methods for processing source code during debugging operations
US9811449B2 (en) Test scenario generation support device and test scenario generation support method
CN106897197B (zh) 错误日志的去重方法及装置
CN105205397A (zh) 恶意程序样本分类方法及装置
JP6121828B2 (ja) 静的解析装置、静的解析方法、および、コンピュータ・プログラム
JP6244992B2 (ja) 構成情報管理プログラム、構成情報管理方法、及び構成情報管理装置
JP6419667B2 (ja) テストdbデータ生成方法及び装置
CN112256635A (zh) 一种识别文件类型的方法及装置
KR20150137388A (ko) 데이터 처리 시스템 및 방법
JPWO2018066661A1 (ja) ログ分析方法、システムおよび記録媒体
US20180173687A1 (en) Automatic datacenter state summarization
US8667008B2 (en) Search request control apparatus and search request control method
Simons et al. Regression test cases prioritization using failure pursuit sampling
JP4886404B2 (ja) ソースコード修正優先度付けシステムおよびその優先度付け方法
JP2021039488A (ja) 辞書作成装置及び辞書作成方法
JP5188421B2 (ja) ソースコード解析方法およびソースコード解析支援システム
JP2013077124A (ja) ソフトウェアテストケース生成装置
US10055341B2 (en) To-be-stubbed target determining apparatus, to-be-stubbed target determining method and non-transitory recording medium storing to-be-stubbed target determining program
JP6665576B2 (ja) 支援装置、支援方法及びプログラム
JP2009134360A (ja) モデル検査システム、モデル検査方法およびモデル検査用プログラム
CN110244954B (zh) 一种应用程序的编译方法及设备
CN114169311A (zh) 一种数据解析方法及装置
JP2018136640A (ja) 検出方法、検出装置および検出プログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160616

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170228

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20170307

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170330

R150 Certificate of patent or registration of utility model

Ref document number: 6121828

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350