IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社日立公共システムの特許一覧

特許7261101欠陥検出装置、欠陥検出方法、及び欠陥検出プログラム
<>
  • 特許-欠陥検出装置、欠陥検出方法、及び欠陥検出プログラム 図1
  • 特許-欠陥検出装置、欠陥検出方法、及び欠陥検出プログラム 図2
  • 特許-欠陥検出装置、欠陥検出方法、及び欠陥検出プログラム 図3
  • 特許-欠陥検出装置、欠陥検出方法、及び欠陥検出プログラム 図4
  • 特許-欠陥検出装置、欠陥検出方法、及び欠陥検出プログラム 図5
  • 特許-欠陥検出装置、欠陥検出方法、及び欠陥検出プログラム 図6
  • 特許-欠陥検出装置、欠陥検出方法、及び欠陥検出プログラム 図7
  • 特許-欠陥検出装置、欠陥検出方法、及び欠陥検出プログラム 図8
  • 特許-欠陥検出装置、欠陥検出方法、及び欠陥検出プログラム 図9
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-04-11
(45)【発行日】2023-04-19
(54)【発明の名称】欠陥検出装置、欠陥検出方法、及び欠陥検出プログラム
(51)【国際特許分類】
   G06F 11/36 20060101AFI20230412BHJP
【FI】
G06F11/36 124
【請求項の数】 9
(21)【出願番号】P 2019114630
(22)【出願日】2019-06-20
(65)【公開番号】P2021002137
(43)【公開日】2021-01-07
【審査請求日】2021-11-16
(73)【特許権者】
【識別番号】596127554
【氏名又は名称】株式会社日立社会情報サービス
(74)【代理人】
【識別番号】110000279
【氏名又は名称】弁理士法人ウィルフォート国際特許事務所
(72)【発明者】
【氏名】安田 和矢
(72)【発明者】
【氏名】伊藤 信治
(72)【発明者】
【氏名】中屋 文江
【審査官】北川 純次
(56)【参考文献】
【文献】特開2012-141741(JP,A)
【文献】特開2016-018307(JP,A)
【文献】特開2006-092475(JP,A)
【文献】国際公開第2015/029154(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/36
G06F 9/44
(57)【特許請求の範囲】
【請求項1】
ソースコードの欠陥箇所候補を検出する欠陥検出装置であって、
前記ソースコードにおける欠陥箇所候補を静的解析により検出する静的解析部と、
前記静的解析部により検出された欠陥箇所候補について具体的処理があるものに対する具体的処理を生成する処理内容生成部と、
前記欠陥箇所候補に対して生成された具体的処理を表示させる表示制御部と、
具体的処理を欠陥箇所候補から除外対象とする指示を受け付け、前記指示を受けた具体的処理を前記欠陥箇所候補の除外対象とすることを示す除外対象情報を記憶させる除外対象追加部と、
を備え、
前記欠陥箇所候補は、変数を含む式であり、前記欠陥箇所候補に対応する具体的処理は、前記変数をより具体的な変数で表した式または、前記変数を具体的な値で表した式又は値である
欠陥検出装置。
【請求項2】
前記処理内容生成部により生成された具体的処理が、前記除外対象情報が示す除外対象の具体的処理に対応するか否かを判定する除外判定部をさらに備え、
前記表示制御部は、前記除外判定部により前記除外対象情報が示す除外対象の具体的処理と対応しないと判定された具体的処理について、前記除外対象ではないことを識別可能な態様で表示させる
請求項1に記載の欠陥検出装置。
【請求項3】
前記除外判定部は、前記除外対象情報が示す除外対象の具体的処理と、生成された具体的処理との等価性をSMTソルバ(Satisfiability Modulo Theories Solver)により判定し、等価性がある場合に、前記具体的処理が、前記除外対象情報が示す除外対象の具体的処理に対応すると判定する
請求項2に記載の欠陥検出装置。
【請求項4】
前記表示制御部は、前記具体的処理についての実行条件を前記具体的処理と対応付けて表示させる
請求項1に記載の欠陥検出装置。
【請求項5】
前記表示制御部は、前記除外対象情報が示す除外対象の具体的処理に対応する具体的処理を表示させない、又は除外対象情報が示す除外対象の具体的処理に対応する具体的処理については、除外対象情報が示す除外対象の具体的処理に対応することを識別可能に表示させることにより、具体的処理が前記除外対象ではないことを識別可能な態様で表示させる
請求項2に記載の欠陥検出装置。
【請求項6】
前記処理内容生成部は、前記欠陥箇所候補について記号実行を行うことにより、前記具体的処理を生成する
請求項に記載の欠陥検出装置。
【請求項7】
一の欠陥箇所候補から複数の具体的処理を生成した場合に、前記除外対象追加部は、前記具体的処理毎に除外対象とするかの指定を受け付け可能である
請求項1に記載の欠陥検出装置。
【請求項8】
ソースコードの欠陥箇所を検出する欠陥検出装置による欠陥検出方法であって、
前記ソースコードにおける欠陥箇所候補を静的解析により検出し、
検出された欠陥箇所候補について具体的処理があるものに対する具体的処理を生成し、
前記欠陥箇所候補に対応する具体的処理を表示させ、
具体的処理を欠陥箇所候補の除外対象とする指示を受け付け、前記指示を受けた具体的処理を前記欠陥箇所候補の除外対象とすることを示す除外対象情報を記憶させ、
前記欠陥箇所候補は、変数を含む式であり、前記欠陥箇所候補に対応する具体的処理は、前記変数をより具体的な変数で表した式または、前記変数を具体的な値で表した式又は値である
欠陥検出方法。
【請求項9】
ソースコードの欠陥箇所を検出する処理を計算機に実行させる欠陥検出プログラムであって、
前記計算機を
前記ソースコードにおける欠陥箇所候補を静的解析により検出する静的解析部と、
前記静的解析部により検出された欠陥箇所候補について具体的処理があるものに対する具体的処理を生成する処理内容生成部と、
前記欠陥箇所候補に対応する具体的処理を表示させる表示制御部と、
具体的処理を欠陥箇所候補から除外対象とする指示を受け付け、前記指示を受けた具体的処理を前記欠陥箇所候補の除外対象とすることを示す除外対象情報を記憶させる除外対象追加部と、
して機能させ
前記欠陥箇所候補は、変数を含む式であり、前記欠陥箇所候補に対応する具体的処理は、前記変数をより具体的な変数で表した式または、前記変数を具体的な値で表した式又は値である
欠陥検出プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ソースコードにおける欠陥箇所候補を検出して表示する技術に関する。
【背景技術】
【0002】
ソフトウェア開発において、静的解析によって欠陥箇所候補(問題箇所)を検出する欠陥検出装置が知られている。静的解析は、欠陥の可能性があるソースコードのパターンを予め定義しておくことで、ソースコードから欠陥の可能性がある問題箇所を検出し、この問題箇所に対して指摘すべき情報を集めることで指摘情報を生成する。ソフトウェアの開発者は、指摘情報を参照し、指摘情報中の問題箇所の中から修正が必要だと判断した問題箇所のみを修正することで、ソースコードの品質を向上する。
【0003】
静的解析により問題箇所を検出する欠陥検出装置においては、検出される問題箇所の数が膨大になる問題がある。特に、ソースコードを変更または追加して改版する場合、改版前のソースコードで検出された問題箇所のうち開発者によって修正不要と判断された箇所について、改版後のソースコードでも同様に問題箇所として検出されてしまう。
【0004】
このような問題に対する関連技術が特許文献1に開示されている。特許文献1には「改版されたソースコードの問題箇所から以前のソースコードの問題箇所と重複する箇所を除外して出力する」技術が開示されている。
【先行技術文献】
【特許文献】
【0005】
【文献】特開2016-18307号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
特許文献1に記載された技術は、具体的には、問題箇所が記述されているサブルーチンの先頭から少なくとも当該問題箇所までの記述を特定し、当該問題箇所に対応する改版後ソースコードの記述が、改版前ソースコードの記述と一致する場合に、当該問題箇所について改版後ソースコードの問題箇所から除外する技術である。
【0007】
特許文献1に記載された技術では、問題箇所に対応する記述が変更された時、変更が当該問題箇所に影響を与えない場合であっても、当該問題箇所について改版後ソースコードの問題箇所から除外できない。また、改版において追加された記述が問題箇所として検出された時、この問題箇所についての指摘情報が、改版前ソースコードにおいて既に開発者(ユーザ)によって検討不要と判断された指摘情報と同一の内容であっても、この指摘情報を改版後のソースコードの指摘情報から除外できない。
【0008】
本発明は、上記事情に鑑みなされたものであり、その目的は、改版後のソースコードについてユーザによる検討が必要な欠陥箇所候補を適切にユーザに把握させることができるようにするために、ソースコードについて、ユーザによって、例えば、修正不要等の除外対象とされた欠陥箇所候補を適切に管理することができる技術を提供することを目的とする。
【課題を解決するための手段】
【0009】
上記目的を達成するため、一観点に係る欠陥検出装置は、ソースコードの欠陥箇所候補を検出する欠陥検出装置であって、ソースコードにおける欠陥箇所候補を静的解析により検出する静的解析部と、静的解析部により検出された欠陥箇所候補について具体的処理があるものに対する具体的処理を生成する処理内容生成部と、欠陥箇所候補に対して生成された具体的処理を表示させる表示制御部と、具体的処理を欠陥箇所候補から除外対象とする指示を受け付け、指示を受けた具体的処理を欠陥箇所候補の除外対象とすることを示す除外対象情報を記憶させる除外対象追加部と、を備える。
【発明の効果】
【0010】
本発明によれば、ソースコードについてユーザによって除外対象とされた欠陥箇所候補を適切に管理することができる。
【図面の簡単な説明】
【0011】
図1図1は、一実施形態に係る欠陥検出装置のハードウェア構成例を示す図である。
図2図2は、一実施形態に係る欠陥検出装置の機能構成例を示す図である。
図3図3は、一実施形態に係るソースファイル群の例を示す図である。
図4図4は、一実施形態に係る欠陥候補情報の例を示す図である。
図5図5は、一実施形態に係る処理内容情報の例を示す図である。
図6図6は、一実施形態に係る拡張欠陥候補情報の例を示す図である。
図7図7は、一実施形態に係る除外対象情報の例を示す図である。
図8図8は、一実施形態に係る欠陥検出処理のフローチャートである。
図9図9は、一実施形態に係る改版後の拡張欠陥候補情報の例を示す図である。
【発明を実施するための形態】
【0012】
以下、図面を参照しつつ、実施形態について説明する。以下の説明において、同一の又は類似する構成について同一の符号を付して、重複した説明を省略することがある。
【0013】
図1は、一実施形態に係る欠陥検出装置のハードウェア構成例を示す図である。
【0014】
欠陥検出装置100は、プロセッサ110、主記憶装置120、補助記憶装置130、入力装置140、出力装置150、及び通信装置160を備える。これらは図示しないバス等の通信手段を介して互いに通信可能に接続されている。
【0015】
プロセッサ110は、例えば、CPU(Central Processing Unit)やMPU(Micro Processing Unit)を用いて構成されている。プロセッサ110が、主記憶装置120に格納されているプログラムを読み出して実行することにより、後述する欠陥検出装置100の様々な機能部が実現される。
【0016】
主記憶装置120は、プログラムやデータを記憶する装置であり、例えば、ROM(Read Only Memory)、RAM(Random Access Memory)、不揮発性半導体メモリ(NVRAM(Non Volatile RAM))等である。主記憶装置120は、例えば、欠陥検出プログラムを記憶する。
【0017】
補助記憶装置130は、例えば、ハードディスクドライブ、SSD(Solid State Drive)、光学式記憶装置(CD(Compact Disc)、DVD(Digital Versatile Disc)等)、ストレージシステム、ICカード、SDメモリカードや光学式記録媒体等の記録媒体の読取/書込装置、クラウドサーバの記憶領域等である。補助記憶装置130に格納されているプログラムやデータは主記憶装置120に随時読み込まれる。
【0018】
入力装置140は、例えば、キーボード、マウス、タッチパネル、カードリーダ、音声入力装置等であり、ユーザからの各種情報の入力を受け付ける。出力装置150は、ユーザに処理経過や処理結果等の各種情報を提供するユーザインタフェースであり、例えば、画面表示装置(液晶モニタ、LCD(Liquid Crystal Display)、グラフィックカード等)、音声出力装置(スピーカ等)、印字装置等である。なお、例えば、欠陥検出装置100が通信装置160を介して他の装置との間で情報の入力や出力を行う構成としてもよい。
【0019】
通信装置160は、LAN(Local Area Network)やインターネット等の通信ネットワークを介して他の装置との間の通信を実現する有線方式又は無線方式の通信インタフェースであり、例えば、NIC(Network Interface Card)、無線通信モジュール、USB(Universal Serial Interface)モジュール、シリアル通信モジュール等である。
【0020】
図2は、一実施形態に係る欠陥検出装置の機能構成例を示す図である。
【0021】
欠陥検出装置100は、静的解析部210、処理内容生成部220、除外判定部230、表示制御部240、除外対象追加部260、情報記憶部250の各機能部を備える。静的解析部210、処理内容生成部220、除外判定部230、表示制御部240、及び除外対象追加部260は、プロセッサ110が主記憶装置120に格納された欠陥検出プログラムを実行することにより構成される。情報記憶部250は、主に、補助記憶装置130により構成される。これら機能部により実行される処理については、後述する。
【0022】
情報記憶部250は、ソースファイル群251と、欠陥候補情報252と、処理内容情報253と、拡張欠陥候補情報254と、除外対象情報255とを記憶する。これら各種情報の詳細については後述する。
【0023】
まず、ソースファイル群251について説明する。
【0024】
図3は、一実施形態に係るソースファイル群の例を示す図である。図3においては、或るソースファイル群251についての改版前後の状態を示している。
【0025】
ソースファイル群251は、静的解析部210と処理内容生成部220とに入力される。
【0026】
改版前の時点におけるソースファイル群251は、1以上のソースファイル410を含む。ソースファイル410は、ファイル名がFILE1である。ソースファイル410には、1以上の行のソースコードが含まれている。ソースコードは、JAVA(登録商標)やC++等のプログラミング言語でもよく、その他の任意のプログラミング言語でもよい。
【0027】
改版後の時点におけるソースファイル群251は、1以上のソースファイル420を含む。ソースファイル420は、ファイル名がFILE1であり、ソースファイル410のソースコードの一部が変更等されて更新されたファイルである。改版後のソースファイル420は、改版前のソースファイル410において、1行目に新たな引数zを追加し、5行目と6行目との間に新たな行を追加し、9行目の記載の返り値を0からcに変更したものである。ソースファイル410の6行目におけるa/bと、ソースファイル420の8行目におけるa/bと、については、単に表記されている行が異なるだけであり、内容については変更がない。しかしながら、ソースコードのこの行の記述のみでは、内容について変更がないかについては判定できない。
【0028】
次に、欠陥候補情報252について説明する。
【0029】
図4は、一実施形態に係る欠陥候補情報の例を示す図である。図4においては、改版前後の状態を示している。
【0030】
欠陥候補情報252は、ソースファイル群251を入力として、静的解析部210により生成される。なお、ソースファイル群251に指摘すべき問題箇所が存在しない場合には、欠陥候補情報252は、作成されない。
【0031】
欠陥候補情報252は、1以上のエントリ(指摘情報)を含む。欠陥候補情報252のエントリは、指摘IDと、ファイル名と、メソッド名と、行番号と、問題箇所と、欠陥内容とのフィールドを含む。
【0032】
指摘IDには、エントリを識別するID(指摘ID)が格納される。ファイル名には、静的解析の対象としてソースファイルのファイル名が格納される。メソッド名には、ソースファイル内の静的解析の対象としてメソッド名が格納される。行番号には、欠陥内容が検出されたソースファイルの行番号が格納される。問題箇所には、ソースコードにおける欠陥が検出された箇所の式や命令等の記述(問題箇所)が格納される。欠陥内容には、背的解析により検出された欠陥内容、例えば、予め欠陥の可能性があると定義されたソースコードのパターンに対する欠陥の内容が格納される。
【0033】
ファイル名、メソッド名、行番号、及び問題箇所に格納された情報は、欠陥内容を持つソースコードの箇所を特定するための情報である。なお、問題箇所が一意に特定できるならば、ファイル名、メソッド名、行番号、問題箇所の全てを欠陥候補252のエントリに含んでいなくてもよい。
【0034】
改版前の欠陥候補情報252におけるエントリ510は、ファイル名FILE1のソースファイル410が持つメソッドmethod1の6行目の式a/bにおいて、ゼロ除算の欠陥を含む可能性があることを示している。また、改版後の欠陥候補情報252のエントリ520は、ファイル名FILE1のソースファイル420が持つメソッドmethod1の8行目の式a/bにおいて、ゼロ除算の欠陥を含む可能性があることを示している。
【0035】
次に、処理内容情報253について説明する。
【0036】
図5は、一実施形態に係る処理内容情報の例を示す図である。図5においては、改版前後のソースファイルについての処理内容情報を示している。
【0037】
処理内容情報253は、ソースファイル群251と、欠陥候補情報252とに基づいて、処理内容生成部220により生成される。処理内容情報253は、欠陥候補情報252のエントリ毎に対応する情報であって、エントリの指摘IDに対応付けられ、エントリの問題箇所に対応する1以上の具体的処理を格納するフィールドを含む。
【0038】
改版前の処理内容情報253は、図4の改版前の指摘ID=1のエントリ510に対応し、エントリ510の問題箇所についての4つの具体的処理を格納している。具体的には、問題箇所a/bの具体的処理として、(-x)/(-y)、(-x)/y、x/(-y)、x/yとを格納している。改版後の処理内容情報253は、図4の改版後の指摘ID=2のエントリ520に対応し、エントリ520の問題箇所についての4つの具体的処理を格納している。具体的には、問題箇所a/bの具体的処理として、(-x)/(-y)、(-x)/y、x/(-y)、x/yとを格納している。図5に示す処理内容情報253については、改版前の時点での指摘ID=1の問題箇所についての各具体的処理と、改版後の時点での指摘ID=2の問題箇所についての各具体的処理とは同一となっている。このことは、改版前のソースファイルと、改前後のソースファイルとにおける問題箇所における具体的処理に変わりがないことを示している。
【0039】
なお、処理内容情報253においては、各具体的処理に対して、その具体的処理が行われる条件(実行条件)を対応付けておいてもよい。例えば、図5の具体的処理610は、ソースファイル410のメソッドmethod1において、引数xとyがどちらも負数の場合に行われる処理であるので、この具体的処理610について、実行条件「(x<0)∧(y<0)」を対応付けて保持するようにしてもよい。
【0040】
ここで、具体的処理と、実行条件とを併せて保持する方法としては、具体的処理と実行条件とを合わせた、例えば、「(x<0)∧(y<0)⇒(-x)/(-y)」という論理式(IF-THEN形式の論理式)で保持してもよく、実行条件と具体的処理と対応付けた、いわゆる決定表形式で保持してもよい。
【0041】
次に、拡張欠陥候補情報254について説明する。
【0042】
図6は、一実施形態に係る拡張欠陥候補情報の例を示す図である。図6の拡張欠陥候補情報254は、例えば、改版前の時点における例を示している。
【0043】
拡張欠陥候補情報254の各エントリは、除外判定部230により、処理内容情報253に含まれる具体的処理のそれぞれについて、欠陥候補情報252の対応するエントリの各フィールドが付加されることで生成される。具体的には、拡張欠陥候補情報254のエントリは、指摘IDと、ファイル名と、メソッド名と、行番号と、問題箇所と、具体的処理と、欠陥内容とのフィールドを含む。
【0044】
拡張欠陥候補情報254のエントリは、除外のフィールドをさらに含む。除外のフィールドには、対応するエントリにおける情報について、ユーザに対して指摘する対象から除外するものであるか否か、すなわち、除外対象であるか否かを示す情報が格納される。本実施形態では、除外のフィールドに記号「●」が格納されていることにより、対応する情報が除外すること(除外対象であること)を表している。図6に示した拡張欠陥候補情報254においては、どのエントリの情報も除外対象とされていない。なお、除外対象を示す記号としては、「●」以外の記号を用いてもよい。なお、除外対象とする情報を含むエントリを拡張欠陥候補情報254から削除してもよい。また、除外対象とする情報を含むエントリを別情報(除外指摘情報)として、情報記憶部250に記憶して管理するようにしてもよい。また、拡張欠陥候補情報254のエントリに、具体的処理の実行条件を格納するようにしてもよい。
【0045】
次に、除外対象情報255の例を示す図である。
【0046】
図7は、一実施形態に係る除外対象情報の例を示す図である。
【0047】
除外対象情報255は、除外対象追加部260によって生成される。除外対象情報255は、除外対象となる具体的処理毎のエントリを格納する。なお、除外対象となる具体的処理が設定されていない場合には、エントリは、存在しない。
【0048】
除外対象情報255のエントリは、ファイル名、メソッド名、具体的処理、及び欠陥内容のフィールドを含む。ファイル名には、除外対象とするファイルのファイル名が格納される。メソッド名には、除外対象とするメソッド名が格納される。具体的処理には、除外対象とする具体的処理が格納される。欠陥内容には、エントリの具体的処理についての欠陥内容が格納される。なお、除外対象情報225においては、指摘ID、行番号、問題箇所等の情報を持つようにしてもよい。
【0049】
図7に示す除外対象情報255のエントリ810は、ファイル名がFILE1のソースファイルにおける、メソッド名がmethod1であるメソッドにおける(-x)/(-y)という具体的処理についてのゼロ除算という欠陥内容については、除外対象であることを示している。
【0050】
除外対象情報255のエントリは、除外対象追加部260によって追加される。具体的には、除外対象追加部260は、拡張欠陥候補254に含まれるエントリのうち、ユーザから修正不要である除外対象として登録する指示を受けたエントリから、そのエントリにおける、ファイル名、メソッド名、具体的処理、欠陥内容のフィールドの値を取得し、それらの値を含むエントリを除外対象情報255に追加する。
【0051】
次に、欠陥検出装置100による処理動作について説明する。
【0052】
図8は、一実施形態に係る欠陥検出処理のフローチャートである。
【0053】
欠陥検出処理は、例えば、ユーザからの指示を契機として開始されてもよく、スケジュールされたタイミングでバッチ処理等により自動的に開始してもよい。以下において、符号の前に付している文字「S」は処理ステップを意味する。
【0054】
まず、欠陥検出装置100の静的解析部210は、情報記憶部250に記憶されているソースファイル群251を読み込む(S310)。
【0055】
次に、静的解析部210は、ソースファイル群251の各ソースファイルのソースコードに対して静的解析を行うことにより、問題箇所を検出し、欠陥候補情報252を生成する(S320)。具体的には、静的解析部210は、ソースファイル群251のソースコード中において、予め欠陥の可能性があるとして定義されたパターンに合致する箇所を、欠陥の可能性がある問題箇所として検出し、それらの問題箇所に対応するエントリを欠陥候補情報252に追加する。例えば、図3の改版前のソースファイル群251を対象にステップS320が実行されると、図4の改版前の欠陥候補情報252が生成される。一方、図3の改版後のソースファイル群251を対象にS320が実行されると、図4の改版後の欠陥候補情報252が生成される。
【0056】
次に、処理内容生成部220は、欠陥候補情報252に含まれるエントリの夫々について、ソースファイル群251の問題箇所についての具体的処理を解析し、処理内容情報253を生成する(S330)。具体的処理とは、問題箇所が式や命令(例えば、小文字変換命令等)である場合において、実際にどのような計算が行われるかをより具体的に示したものである。例えば、問題箇所が変数を含む式である場合には、この式の変数に対して、より具体的な変数を代入して得られる式や、変数に対して具体的な値を代入して得られる式や値が具体的処理の一例である。例えば、図3の改版前のソースファイル410で、メソッドmethod1の6行目にある式a/bは、このメソッドの引数xとyの符号に応じて、x/y、x/(-y)、(-x)/y、(-x)/(-y)の4つのいずれかの式となる。これらの式が具体的処理の一例である。問題箇所に対応する具体的処理は、記号実行等のソースコード解析技術により生成することができる。なお、問題箇所が、ソースコード中のコメントに対する指摘など、式や命令ではない場合には、具体的処理を生成できないので、処理内容生成部220は、S330における処理対象としない。
【0057】
次に、除外判定部230は、情報記憶部250に記憶されている除外対象情報255を読み込む(S340)。
【0058】
次に、除外判定部230は、処理内容情報253に含まれる具体的処理の夫々について、欠陥候補情報252に含まれるエントリの内容を付加することで、拡張欠陥候補情報254のエントリを生成し、拡張欠陥候補情報254のエントリについて、除外対象情報255のエントリに対応する具体的処理を含むか否かを判定することにより、除外対象であるか否かを判定する除外判定処理を行う(S350)。
【0059】
ここで、除外判定部230による除外判定処理について詳細に説明する。
【0060】
除外判定部230は、拡張欠陥候補情報254のエントリの夫々について、そのエントリのファイル名、メソッド名、具体的処理、及び欠陥内容の組が、除外対象情報255のエントリのいずれかと対応(例えば、一致)するか否かを判定し、対応する場合に、その拡張欠陥候補情報254のエントリを除外対象と判定し、そのエントリの除外のフィールドに除外を示す記号を格納する。
【0061】
ここで、拡張欠陥候補情報254のエントリに含まれる具体的処理と、除外対象情報255のエントリに含まれる具体的処理との対応の有無は、具体的処理の文字列一致により判定してもよく、または、具体的処理の論理的な等価性により同一判定を行ってもよい。論理的な等価性による判定とは、例えばp+qとq+pとは同一であるといったように、論理的に等価である場合に同一であるとする判定である。このような論理的な等価性による判定を行うようにすると、文字列一致での判定よりも多くの同一判定を適切に行うことができるので、拡張欠陥候補情報254からより多くの除外対象を検出することができる。論理的な等価性は、例えばSMTソルバ(Satisfiability Modulo Theories Solver)を用いて判定してもよい。
【0062】
例えば、改版前のソースファイル群251を処理対象としており、除外対象情報255にエントリが存在しない場合には、除外判定処理後には、拡張欠陥候補情報254は図6に示す状態となる。一方、改版後のソースファイル群251を処理対象としており、除外対象情報255が図7に示す状態である場合には、除外判定処理後には、拡張欠陥候補情報254は図9に示す状態のように、除外対象情報255のいずれかのエントリの具体的処理と対応する(例えば、同一の)具体的処理を含むエントリにおいて、除外のフィールドに除外を示す記号が設定される。この例の場合には、図9に示す拡張欠陥候補情報254の全てのエントリの除外のフィールドに、除外を示す記号が設定される。
【0063】
次に、表示制御部240は、拡張欠陥候補情報254に基づいて、除外対象とされていない具体的処理についての指摘情報(問題箇所、具体的処理、欠陥内容等)について、除外されていないこと(除外対象ではないこと)を識別可能な状態で出力装置150に出力する。ここで、指摘情報について、除外対象ではないことを識別可能な状態で出力するとは、例えば、図6又は図8に示すように、除外対象であることを示す除外フィールドを有している拡張欠陥候補情報254を同様な態様で出力してもよく、拡張欠陥候補情報254のうちの除外フィールドに除外を示すマークが設定されていないエントリの情報のみを出力してもよく、除外フィールドに除外を示すマークが設定されていないエントリの情報と、除外フィールドに除外を示すマークが設定されているエントリの情報と、を識別可能なように別表として出力してもよい。要は、表示制御部240は、ユーザが考慮する必要がある問題箇所の情報を容易に識別できるように表示すればよい。
【0064】
次に、除外対象追加部260は、出力装置150に出力されている具体的処理についての指摘情報のそれぞれに対して、以降の改版を行った際に除外対象とする(例えば、修正不要である)か否かのユーザによる指定を受け付け可能とする。除外対象追加部260は、ユーザから具体的処理の指摘情報に対して、除外対象とする指定を受け付けた場合には、指定を受け付けた具体的処理の指摘情報に対応するエントリを除外対象情報255に追加する(S360)。例えば、図6に示す拡張欠陥情報254が表示されており、全てのエントリに対して、除外対象とする指定を受け付けた場合には、除外対象情報255は、図7に示す状態となる。
【0065】
S360において、除外対象情報255に追加されたエントリに対応する指摘情報は、次回以降の欠陥検出処理におけるS350において、使用されることとなる。この結果、例えば、改版後のソースファイル群251を処理対象としており、除外対象情報255が図7に示す状態である場合には、図9に示す拡張欠陥候補情報254のすべてのエントリについて、ファイル名、メソッド名、具体的処理、欠陥内容の組が、図7に示す除外対象情報255に含まれるため、すべてのエントリが除外対象と判定されて、除外フィールドには、除外を示す記号が設定されることとなる。
【0066】
なお、S360において、除外対象となっている具体的処理の指摘情報についても表示している場合においては、除外対象となっている具体的処理の指摘情報を除外対象から外す指定を受け付けるようにしてもよく、この場合には、除外対象追加部260は、指定された具体的処理の指摘情報に対応するエントリを除外対象情報255から削除するようにすればよい。
【0067】
以上説明したように、本実施形態に係る欠陥検出処理においては、ユーザが以降の処理において除外対象とする指定を行った具体的処理の指摘情報について、適切に管理することができる。これにより、改版前のソースファイル群151に対する欠陥検出処理において、除外対象情報255に登録された具体的処理に対応する具体的処理の指摘情報については、改版後のソースファイル群151に対する欠陥検出処理では、除外対象であると判定され、除外対象でない指摘情報が除外対象でないことを識別可能な状態で出力装置150に出力される。これにより、ユーザは、除外されていない指摘情報についてのみ確認し、修正等が必要であれば対応すれば済む。すなわち、改版前において修正等が必要ないと判断したものに対して、再度同じ判断をする必要がない。この結果、ソースコードの改変作業におけるユーザの負荷を軽減することができる。
【0068】
なお、本発明は、上述の実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で、適宜変形して実施することが可能である。
【0069】
例えば、上記実施形態では、S350においては、具体的処理についての指摘情報(問題箇所、具体的処理、欠陥内容等)を表示するようにしていたが、更に具体的処理の実行条件についても表示するようにしてもよい。このようにすると、ユーザは実行条件を確認して具体的処理が適切であるか否かを確認することができる。
【0070】
また、上記実施形態では、具体的処理毎に、除外対象とするか否かを設定できるようにしていたが、本発明はこれに限られず、例えば、問題箇所に対する複数の具体的処理の全体をまとめて、除外対象とするか否かを設定できるようにしてもよい。
【0071】
また、上記実施形態では、拡張欠陥候補情報254のエントリの夫々について、そのエントリのファイル名、メソッド名、具体的処理、及び欠陥内容の組が、除外対象情報255のエントリのいずれかと対応するか否かを判定することにより、除外対象か否かを判定するようにしていたが、本発明はこれに限られず、その組に対してさらに実行条件を含めた組がエントリのいずれかと対応するか否かを判定することにより、除外対象か否かを判定するようにしてもよい。
【0072】
また、上記実施形態において、CPUが行っていた処理の一部又は全部を、ハードウェア回路で行うようにしてもよい。また、上記実施形態におけるプログラムは、プログラムソースからインストールされてよい。プログラムソースは、プログラム配布サーバ又は記憶メディア(例えば可搬型の記憶メディア)であってもよい。
【符号の説明】
【0073】
100…欠陥検出装置、210…処理内容生成部、220…処理内容生成部、230…除外判定部、240…表示制御部、250…情報記憶部、260…除外対象追加部、251…ソースファイル群、252…欠陥候補候補情報、253…処理内容情報、254…拡張欠陥候補情報、255…除外対象情報
図1
図2
図3
図4
図5
図6
図7
図8
図9