(57)【特許請求の範囲】
【請求項１】
第１のソースコードを更新して生成された第２のソースコードを解析して第２の問題箇所を検出し，
前記第２の問題箇所が記述されているサブルーチンの先頭から少なくとも前記第２の問題箇所までの記述を特定する第２の記述特定情報を生成し，
前記第２のソースコードを解析して検出した前記第２の問題箇所に対応する前記第２の記述特定情報が，前記第１のソースコードを解析して検出された第１の問題箇所に対応する第１の記述特定情報と一致する場合に，前記第２の問題箇所を，前記第２のソースコードの問題箇所としての出力の対象から除外する，
処理をコンピュータに実行させるコンピュータ読み取り可能な開発支援プログラム。
【請求項２】
請求項１において，
前記第２の記述特定情報を生成する工程において，前記第２の問題箇所の記述が繰り返し制御記述内に含まれる場合は，前記第２の記述特定情報として，前記第２の問題箇所が記述されているサブルーチンの先頭から前記第２の問題箇所の記述を含む前記繰り返し制御記述の最後までの記述を特定する記述特定情報を生成する，開発支援プログラム。
【請求項３】
請求項１または２において，
さらに，
前記第２の問題箇所の問題を記述する第２の問題指摘文を生成し，
前記出力として，前記第２の問題箇所と前記第２の問題指摘文とを出力し，
前記出力の対象から除外する工程において，前記第２の記述特定情報が前記第１の記述特定情報と一致することに加えて，前記第２の問題箇所の第２の問題指摘文と前記第１の問題箇所に対応する第１の問題指摘文とが一致する場合に，前記第２の問題箇所を，前記出力の対象から除外する，開発支援プログラム。
【請求項４】
請求項３において，
前記出力の対象から除外する工程において，前記第２の記述特定情報が前記第１の記述特定情報と一致することと，前記第２の問題指摘文と前記第１の問題指摘文とが一致することに加えて，前記第２のソースコードのファイル名と前記第１のソースコードのファイル名が一致する場合に，前記第２の問題箇所を，前記出力の対象から除外する，開発支援プログラム。
【請求項５】
請求項１または２において，
前記第１，第２の記述特定情報は，特定対象であるソースコードの記述のハッシュ値，符号化コードのいずれかであり，且つ前記特定対象であるソースコードの記述よりもデータ量が少ない，開発支援プログラム。
【請求項６】
請求項１または２において，
前記出力の対象から除外する工程において，前記第２の記述特定情報が，前記第１のソースコードを解析して検出された複数の第１の問題箇所に対応する第１の記述特定情報のいずれかと一致する場合に，当該一致した第２の問題箇所を，前記出力の対象から除外し，前記第２の記述特定情報が，前記複数の第１の問題箇所に対応する第１の記述特定情報の全てと不一致の場合に，前記出力の対象に含める，開発支援プログラム。
【請求項７】
第１のソースコードを更新して生成された第２のソースコードを解析して第２の問題箇所を検出し，
前記第２の問題箇所が記述されているサブルーチンの先頭から少なくとも前記第２の問題箇所までの記述を特定する第２の記述特定情報を生成し，
前記第２のソースコードを解析して検出した前記第２の問題箇所に対応する前記第２の記述特定情報が，前記第１のソースコードを解析して検出された第１の問題箇所に対応する第１の記述特定情報と一致する場合に，前記第２の問題箇所を，前記第２のソースコードの問題箇所としての出力の対象から除外する，
処理を有する開発支援方法。
【請求項８】
第１のソースコードを更新して生成された第２のソースコードを解析して第２の問題箇所を検出する手段と，
前記第２の問題箇所が記述されているサブルーチンの先頭から少なくとも前記第２の問題箇所までの記述を特定する第２の記述特定情報を生成する手段と，
前記第２のソースコードを解析して検出した前記第２の問題箇所に対応する前記第２の記述特定情報が，前記第１のソースコードを解析して検出された第１の問題箇所に対応する第１の記述特定情報と一致する場合に，前記第２の問題箇所を，前記第２のソースコードの問題箇所としての出力の対象から除外する手段と，を有する開発支援装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，開発支援プログラム，開発支援方法及び開発支援装置に関する。
【背景技術】
【０００２】
開発支援プログラムは，コーディングされたソースコードを解析し，様々な観点で問題があると疑われる問題箇所を検出し，検出した問題箇所と疑われる問題点を記載する問題指摘文とを共に出力する。具体的には，開発支援プログラムは，コンピュータにより実行されることで，解析対象であるソースコードを実行することなく，ソースコードを構文解析し，文法ミス，変数の定義ミス，プログラム実行時に獲得したメモリ領域の解放処理の欠如，論理的ミスなどの問題が疑がわれる問題箇所を検出し，全ての問題箇所の行番号と，問題箇所として検出した理由である問題点を記述する問題指摘文とを共にリスト化した問題箇所出力データを生成する。
【０００３】
開発支援プログラムについては，例えば，以下の特許文献に記載されている。
【０００４】
開発支援プログラムが全ての問題箇所と問題指摘文を出力することは，最初にソースコードを開発する段階では，有用である。なぜなら，ソースコード上の問題が疑われる全ての箇所をプログラム開発者がチェックし，必要な修正を加えることができるからである。この場合，プログラム開発者は，問題が疑われる全ての問題箇所を問題指摘文を参考にして検討し，必要な場合に修正を加える。したがって，一部の問題箇所はチェックした結果問題が見いだされず，なんら修正を加えられない場合もある。
【０００５】
しかしながら，初版のまたは以前のソースコードを変更または追加して改版する段階では，以前のソースコードに残っている問題箇所は既に検討済みである。したがって，以前から残っている問題箇所は，改版のソースコードに対する問題箇所の出力データから除外することが求められる。除外することで，問題箇所リストに基づくチェック工程を短縮することができる。
【０００６】
以前のソースコードに対して出力された問題箇所を含む一連の処理を記述するソースコードのブロック，例えばサブルーチン，メソッド，関数（以下代表してサブルーチンと称する）と，改版のソースコードに対して出力された問題箇所を含むサブルーチンとが同じ場合は，問題箇所が重複している可能性が高い。そこで，開発支援プログラムは，改版のソースコードで検出した問題箇所を含むサブルーチンが，以前のソースコードで検出した問題箇所のサブルーチンと一致する場合は，同じ箇所に対する問題箇所と見なして，その問題箇所を改版のソースコードの問題箇所出力データから除外することを行う。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００４−１２６８６６号公報
【特許文献２】特開平０５−９４３４３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかし，問題箇所を含むサブルーチンのソースコードが一致するか否かに基づいて重複する問題箇所を検出するためには，以前のソースコードを保持しておく必要があり，管理する資産量が多くなり，また，問題箇所を含むサブルーチンが一致するか否かの処理時間が長く，解析のスループットが悪くなる。さらに，改版されたソースコードには様々な変更が加えられるため，単にサブルーチンが一致するか否かで判断した場合，以前のソースコードに対する問題箇所に対して影響を与えないマイナーな変更しか加えられていない場合も，サブルーチンが不一致となり，実質的に重複する問題箇所を除外することができない。
【０００９】
そこで，実施の形態の第１の側面の目的は，改版されたソースコードの問題箇所から以前のソースコードの問題箇所と重複する箇所を除外して出力する開発支援プログラム，開発支援方法及び開発支援装置を提供することにある。
【課題を解決するための手段】
【００１０】
本実施の形態の第１の態様では，
第１のソースコードを更新して生成された第２のソースコードを解析して第２の問題箇所を検出し，
前記第２の問題箇所が記述されているサブルーチンの先頭から少なくとも前記第２の問題箇所までの記述を特定する第２の記述特定情報を生成し，
前記第２のソースコードを解析して検出した前記第２の問題箇所に対応する前記第２の記述特定情報が，前記第１のソースコードを解析して検出された第１の問題箇所に対応する第１の記述特定情報と一致する場合に，前記第２の問題箇所を，前記第２のソースコードの問題箇所としての出力の対象から除外する，
処理をコンピュータに実行させるコンピュータ読み取り可能な開発支援プログラムである。
【発明の効果】
【００１１】
第１の側面によれば，改版されたソースコードの問題箇所から以前のソースコードの問題箇所と重複する箇所を除外して出力する。
【図面の簡単な説明】
【００１２】
【図１】本実施の形態の開発支援プログラムを実行する開発支援装置の構成を示す図である。
【図２】第１のソースコードとそれを解析して生成された第１の問題箇所出力データ例と第２のソースコードとそれを解析して生成された第２の問題箇所出力データ例を示す図である。
【図３】本実施の形態における開発支援プログラムを利用した開発支援の工程を示すフローチャート図である。
【図４】本実施の形態における開発支援プログラムの工程Ｓ４，Ｓ５の処理のフローチャート図である。
【図５】図４の工程Ｓ４４について説明する図である。
【図６】工程Ｓ４４において問題箇所を含むサブルーチンを検出する方法について説明する図である。
【図７】本実施の形態における第１，第２のソースコードとその第１，第２の問題箇所出力データの第１の例を示す図である。
【図８】本実施の形態における第１，第２のソースコードとその第１，第２の問題箇所出力データの第２の例を示す図である。
【図９】図４の工程Ｓ４４について説明する別の図である。
【図１０】本実施の形態における第１，第２のソースコードとその第１，第２の問題箇所出力データの第３の例を示す図である。
【図１１】本実施の形態における第１，第２のソースコードとその第１，第２の問題箇所出力データの第４の例を示す図である。
【図１２】本実施の形態における第１，第２のソースコードとその第１，第２の問題箇所出力データの第５の例を示す図である。
【図１３】本実施の形態における第１，第２のソースコードとその第１，第２の問題箇所出力データの第６の例を示す図である。
【図１４】本実施の形態における開発支援プログラムの工程Ｓ４，Ｓ５の処理の第２のフローチャート図である。
【図１５】本実施の形態における第１，第２のソースコードとその第１，第２の問題箇所出力データの第７の例を示す図である。
【発明を実施するための形態】
【００１３】
図１は，本実施の形態の開発支援プログラムを実行する開発支援装置の構成を示す図である。開発支援装置は,開発支援プログラム２０と，開発支援プログラムを実行するＣＰＵ（Central Processing Unit）１０と，開発支援プログラムやデータを一時的に記憶するＲＡＭ１２と，入出力装置１４とを有する。開発支援プログラム２０は，例えばハードディスク等の大容量記憶装置に格納される。さらに，開発支援装置は，第１のソースコードを解析して生成された第１のソースコードの問題箇所出力データ２２と，解析対象の第２のソースコード２４とを大容量記憶装置に格納している。そして，開発支援装置は，開発支援プログラムをＣＰＵ１０に実行させて，第２のソースコード２４を解析し，第２のソースコードの問題箇所出力データ２６を生成し，大容量記憶装置に格納する。第２のソースコードの問題箇所出力データ２６は，入出力装置１４から出力される。
【００１４】
図２は，第１のソースコードとそれを解析して生成された第１の問題箇所出力データ例と第２のソースコードとそれを解析して生成された第２の問題箇所出力データ例を示す図である。第２のソースコード２４は，第１のソースコード２１の一部を変更し，追加して更新された改版後のソースプログラムのコードである。
【００１５】
第１のソースコード２１は，ファイル名ａ．ｃであり，１−３行のサブルーチンvoid func01と，５−９行のサブルーチンvoid func02とを有する。ここで，サブルーチンとは，一連の処理を記述するソースコードのブロックであり，メソッド，関数などを含む。なお，各サブルーチン内の処理の記述は省略されている。
【００１６】
図１の開発支援装置は，第１のソースコード２１を解析して問題が疑われる問題箇所を検出し，第１の問題箇所出力データ２２を生成する。図２の例では，第１のソースコード２１のサブルーチンvoid func02内の７行目のif文の括弧内の記述「ａ＋ｂ＞ｃ」が，不等号の左辺に括弧がないため問題が疑われると判定され問題箇所として検出される。その結果，第１のソースコード２１の第１の問題箇所出力データ２２には，ファイル名FILEとして「ａ．ｃ」，問題箇所を特定する問題箇所行番号３０として「７行目」，問題が疑われる理由を記述する問題指摘文３２として「if文に誤り」を有する問題箇所のデータが含まれている。なお，以降の図中，問題が疑われている箇所のソースコードには，理解を容易にするため，例えば「NG括弧がない」などのコメントを記述している。
【００１７】
一方，第２のソースコード２４は，第１のソースコード２１のサブルーチンvoid func01内に，３，４行目のコード４１を追加して更新されている。その結果，サブルーチンvoid func02の行番号が７−１１行に変更されているが，サブルーチンvoid func02内のソースコードに変更はない。
【００１８】
図１の開発支援装置は，第２のソースコード２４を解析して問題が疑われる問題箇所を検出し，ファイル名FILEとして「ａ．ｃ」，問題箇所を特定する問題箇所行番号３０として「９行目」，問題が疑われる理由を記述する問題指摘文３２として「if文に誤り」を有する問題箇所のデータが含まれる第２の問題箇所出力データ２６を出力する。
【００１９】
しかしながら，第２のソースコード２４は，第１のソースコード２１内の１−３行目のサブルーチンvoid func01内に行番号３，４の追加コード４１が追加されただけであるので，第１のソースコード２１内の５−９行目のサブルーチンvoid func02と，第２のソースコード２４内の７−１１行目のサブルーチンvoid func02とは行番号は異なるが実質的には同じである。したがって，第２の問題箇所出力データ２６の問題箇所は，第１の問題箇所データ２２の問題箇所と問題箇所行番号３０だけが異なるだけであり，問題箇所は実質的に同じであり重複している。
【００２０】
そこで，本実施の形態の開発支援プログラムは，上記のような第１のソースコードを解析して得た第１の問題箇所出力データ２２と重複する問題箇所を，第２の問題箇所出力データ２６から除外する処理を行う。
【００２１】
図３は，本実施の形態における開発支援プログラムを利用した開発支援の工程を示すフローチャート図である。まず，開発支援プログラムを利用するユーザは，第１のソースコード２１を開発する（Ｓ１）。このソースコードの言語は，サブルーチン，Ｃ言語，ＪＡＶＡ（登録商標，Sun Microsystems社が開発したプログラミング言語），Ｖｉｓｕａｌ  Ｂａｓｉｃ（Microsoft社のプログラミング言語）等のいずれのプログラミング言語でもよい。
【００２２】
次に，図１の開発支援装置は，第１のソースコード２１を解析し，第１のソースコード２１内の問題があると疑われる問題箇所を検出し，その問題箇所と問題指摘文を含む第１の問題箇所出力データ２２を出力する（Ｓ２）。問題箇所出力データの具体例は，図２で説明したとおりである。
【００２３】
ユーザは，第１のソースコードの一部を変更，追加して更新し，改版された第２のソースコード２４を開発する（Ｓ３）。改版された第２のソースコード２４は，変更，追加が行われていない一部分では改版前の第１のソースコードと一致し，変更，追加が行われた他の部分では改版前の第１のソースコードと一致しない。
【００２４】
そして，開発支援装置は，第２のソースコード２４を解析し，第２のソースコード２４内の問題があると疑われる問題箇所を検出し，その問題箇所と問題指摘文を含む第２の問題箇所出力データ２６＿１を出力する（Ｓ４）。この第２のソースコードの問題箇所出力データ２６＿１は，変更，追加が行われていない一部分に対する問題箇所出力データ（旧問題箇所出力データ）と，変更，追加が行われた他の部分に対する問題箇所出力データ（新問題箇所出力データ）とを有する。したがって，旧問題箇所出力データは，第１のソースコードの問題箇所出力データと重複するデータであり，第１のソースコード２１のデバッグ工程で原因がチェックされ問題がないことが確認されている問題箇所である。
【００２５】
そこで，開発支援装置は，第２のソースコードの問題箇所出力データの問題箇所２６＿１から，第１のソースコードの問題箇所出力データ２２に含まれる問題箇所と重複する問題箇所を除外する（Ｓ５）。その結果，開発支援装置は，第２のソースコードに対する問題箇所出力データとして，第１のソースコードの問題箇所出力データの問題箇所を除外した，新たに問題の有無をチェックする必要がある問題箇所だけを含む問題箇所データを出力する。
【００２６】
本実施の形態の開発支援プログラムは，図３の工程Ｓ４とＳ５をコンピュータに実行させることで，第１のソースコードから更新された第２のソースコードの新規の問題箇所を含む問題箇所出力データを出力する。
【００２７】
図４は，本実施の形態における開発支援プログラムの工程Ｓ４，Ｓ５の処理のフローチャート図である。図４中，工程Ｓ４１−Ｓ４５は図３の工程Ｓ４に対応する処理であり，工程Ｓ５１−Ｓ５４は図３の工程Ｓ５に対応する処理である。
【００２８】
開発支援装置は，開発支援プログラムを実行して，第２のソースコードを構文解析し，第２のソースコード中の問題があると疑わしい問題箇所（第２の問題箇所）を検出する（Ｓ４１）。問題があると疑われる問題箇所には，例えば，文法ミス，変数の定義ミス，プログラム実行時に獲得したメモリ領域の解放処理の欠如，論理的ミスなどの疑いが有る問題箇所が含まれる。
【００２９】
そして，開発支援装置は，開発支援プログラムを実行して，第２の問題箇所を検出すると（Ｓ４２のＹＥＳ），その第２の問題箇所を検出した理由を指摘する問題指摘文を生成する（Ｓ４３）。さらに，開発支援装置は，開発支援プログラムを実行して，検出した第２の問題箇所が含まれるサブルーチンの先頭から少なくとも第２の問題箇所までのソースコードの記述を特定する第２の記述特定情報を生成する（Ｓ４４）。
【００３０】
第２の記述特定情報は，望ましくは，第２の問題箇所が記述されているサブルーチンの先頭から少なくとも第２の問題箇所までの記述（特定対象の記述）のハッシュ値，符号化コードのいずれかであり，且つ望ましくは特定対象の記述よりもデータ量が少ない情報である。また，第２の記述特定情報は，第２の問題箇所が記述されているサブルーチンの先頭から少なくとも第２の問題箇所までのソースコードの記述そのものであってもよい。
【００３１】
そして，開発支援装置は，開発支援プログラムを実行して，上記の工程Ｓ４１−Ｓ４４を，第２のソースコードの記述全てに対して実行するまで繰り返す（Ｓ４５）。その結果，開発支援装置は，図３の第２のソースコードの第２の問題箇所出力データ２６＿１を出力する。
【００３２】
図５は，図４の工程Ｓ４４について説明する図である。図５には，第２のソースコード２４の例として，１行目にサブルーチンvoid func02が示され，サブルーチンvoid func02内の４行目のｉｆ文が問題箇所として検出されるものとする。この場合，開発支援装置は，開発支援プログラムを実行して，サブルーチンvoid func02の先頭の１行目から４行目の問題箇所までの記述を問題箇所を特定する特定記述３４＿１とし，その特定記述３４＿１のハッシュ値を記述特定情報３４として生成する。図５の例では，記述特定情報３４は，「415fe51dbefb5・・・」である。記述特定情報３４は，前述のとおり，特定記述３４＿１のハッシュ値以外に，符号化コードなどでもよく，さらに，記述そのもののデータでもよい。
【００３３】
図５には，第２のソースコード２４に対して生成された第２の問題箇所出力データ２６の例が示されている。第２の問題箇所出力データ２６は，ファイル名ＦＩＬＥ，問題箇所行３０，問題指摘文３２，記述特定情報３４を有する。但し，記述特定情報３４は必ずしも問題箇所出力データ２６に含めなくても良く，ファイル名ＦＩＬＥ，問題箇所行３０，問題指摘文３２に関連付けられていればよい。
【００３４】
図６は，工程Ｓ４４において問題箇所を含むサブルーチンを検出する方法について説明する図である。開発支援装置は，開発支援プログラムを実行することで，ＢＮＦ（Backus-Naur form）を用いた構文解析を行い，問題箇所を含むサブルーチンを検出する。図６には，サブルーチンの一種であるメソッドのＢＮＦ５０を示す。ＢＮＦ５０によれば，メソッドの宣言文（MethodDeclaration）は，以下のような構文になることが規定されている。
MethodDeclaration : Type MethodName'(' FormalParameterListopt ')'{' BlockStatementsopt '}'
そこで，開発支援装置は，第２のソースコード２４を構文解析し，ソースコード内の要素に分解し，上記のメソッドの宣言文と一致する要素群の記述を検出する。図５には，検出されたメソッドの宣言文の記述を要素に分解した表５１が示される。このように，ＢＮＦ定義によるメソッド宣言文と一致するソースコードの要素群が検出されると，そのソースコードがメソッド宣言文として判定される。このようなＢＮＦを利用した構文解析を行うことで，問題箇所を含むサブルーチンを検出できる。
【００３５】
図４に戻り，開発支援プログラムの工程Ｓ５に対応する工程Ｓ５１−Ｓ５４ついて説明する。開発支援装置は，開発支援プログラムを実行することで，第２のソースコードの第２の問題箇所に対応する第２の記述特定情報３４が，第１のソースコードを解析して検出した第１の問題箇所に対応する第１の記述特定情報のいずれかと一致するか否かをチェックする（Ｓ５１）。そして，開発支援装置は，第２の問題箇所の第２の記述特定情報が，第１の問題箇所の第１の記述特定情報のいずれかと一致した場合（Ｓ５２のＹＥＳ），その一致した第２の記述特定情報に対応する第２の問題箇所を，第２の問題箇所出力データから除外する（Ｓ５３）。そして，開発支援装置は，上記の工程Ｓ５１−Ｓ５３を全ての第２の問題箇所について実行する（Ｓ５４）。
【００３６】
上記の工程Ｓ５１を実行するためには，開発支援装置は，第１のソースコードを解析して第１の問題箇所を検出した際に，その第１の問題箇所に対応する第１の記述特定情報を生成しておく。この第１の記述特定情報を，第１の問題箇所に対応付けて出力データに含めておくことが望ましい。
【００３７】
記述特定情報により特定される記述を，サブルーチンの先頭から少なくとも問題箇所までの記述とした理由は，次のとおりである。すなわち，図２で示された問題箇所のｉｆ文は，サブルーチンvoid func02内に含まれ，その文法ミス，定義ミス，論理矛盾などは問題箇所のｉｆ文より前の記述に依存するのが一般的である。したがって，問題箇所を含むサブルーチンの先頭から最後までの記述を特定対象の記述として，第１のソースコードの問題箇所に対応する記述特定情報と比較する必要は必ずしもない。問題箇所を含むサブルーチンの先頭から最後までの記述を特定記述情報が特定する記述とすると，特定記述情報のデータ量が大きくなるだけでなく，問題箇所の後にその問題箇所に直接影響を与えない記述の変更や追加が行われた場合に，問題箇所が実質的に同じ問題点に対応するものであっても，第１のソースコードでは検出されなかった新たな問題箇所として検出されてしまう。
【００３８】
但し，問題箇所の記述が繰り返し制御記述（具体的にはループ文）内に含まれる場合は，記述特定情報として，問題箇所が記述されているサブルーチンの先頭からその問題箇所の記述を含む繰り返し制御記述（ループ文）の最後までの記述を特定する情報にする。ループ文の場合は，問題箇所の後の記述が問題箇所の記述に影響を与えるからである。このループ文の最後までの記述の場合であっても，サブルーチンの先頭から最後までの記述よりも特定対象の記述は少なくなり，さらに，ループ文の後に修正や追加が行われた場合でも実質t的に同じ問題箇所を検出できる。
【００３９】
［第１の第１，第２のソースコード例］
図７は，本実施の形態における第１，第２のソースコードとその第１，第２の問題箇所出力データの第１の例を示す図である。図７には，図３，図４の開発支援プログラムにより解析された第１，第２のソースコード２１，２４の例と，生成された第１，第２の問題箇所出力データ２２，２６の例が示されている。この例において，第２の問題箇所出力データ２６から第１の問題箇所出力データ２２と重複する問題箇所を除外する処理について説明する。
【００４０】
第１のソースコード２１は，問題が疑われる問題箇所として，７行目のｉｆ文と，１２行目のｉｆ文とを有している。そして，７行目のｉｆ文は５行目のサブルーチンvoid func02内の記述であり，１２行目のｉｆ文は１０行目のサブルーチンvoid func03内の記述である。
【００４１】
そこで，開発支援装置は，開発支援プログラムを実行することで，７行目のｉｆ文に対する第１の問題箇所出力データ２２＿１として，そのファイル名「a.c」，問題箇所行「７行目」，問題指摘文「ｉｆ文に誤り」を含むデータを生成し，それに対応する記述特定情報「415fe51dbefb5・・・」を生成する。この記述特定情報は，第１のソースコード２１内の７行目のｉｆ文を含むサブルーチンvoid func02の先頭の５行目から７行目の問題箇所までの記述３４＿１のハッシュ値である。
【００４２】
また，開発支援装置は，開発支援プログラムを実行することで，１２行目のｉｆ文に対する第１の問題箇所出力データ２２＿２として，そのファイル名「a.c」，問題箇所行「１２行目」，問題指摘文「ｉｆ文に誤り」を含むデータを生成し，それに対応する記述特定情報「28ac3741de65・・・」を生成する。この記述特定情報は，第１のソースコード２１内の１２行目のｉｆ文を含むサブルーチンvoid func03の先頭の１０行目から１２行目の問題箇所までの記述３４＿２のハッシュ値である。
【００４３】
一方，第２のソースコード２４には，第１のソースコード２１に対して，３，４行目の記述４２と１４行目の記述４２が追加されている。それに伴い，第２のソースコード２４は，問題が疑われる問題箇所として，９行目のｉｆ文と，１５行目のｉｆ文とを有している。そして，９行目のｉｆ文は７行目のサブルーチンvoid func02内の記述であり，１５行目のｉｆ文は１２行目のサブルーチンvoid func03内の記述である。 
【００４４】
そこで，開発支援装置は，開発支援プログラムを実行することで，９行目のｉｆ文に対する第２の問題箇所出力データ２６＿１として，そのファイル名「a.c」，問題箇所行「９行目」，問題指摘文「ｉｆ文に誤り」を含むデータを生成し，それに対応する記述特定情報「415fe51dbefb5・・・」を生成する。この記述特定情報は，第２のソースコード２４内の９行目のｉｆ文を含むサブルーチンvoid func02の先頭の７行目から９行目の問題箇所までの記述３４＿３のハッシュ値である。
【００４５】
また，開発支援装置は，開発支援プログラムを実行することで，１５行目のｉｆ文に対する第２の問題箇所出力データ２６＿２として，そのファイル名「a.c」，問題箇所行「１５行目」，問題指摘文「ｉｆ文に誤り」を含むデータを生成し，それに対応する記述特定情報「13fe28dd5690・・・」を生成する。この記述特定情報は，第２のソースコード２４内の１５行目のｉｆ文を含むサブルーチンvoid func03の先頭の１２行目から１５行目の問題箇所までの記述３４＿３のハッシュ値である。
【００４６】
そこで，開発支援装置は，開発支援プログラムを実行して，図４のＳ５１−Ｓ５４の重複する問題箇所を除外する処理を行う。すなわち，開発支援装置は，第２の問題箇所出力データ２６＿１の記述特定情報が，第１の問題箇所出力データ２２＿１，２２＿２のいずれかの記述特定情報と一致するか否かをチェックする（Ｓ５１）。図７の例では，第２の問題箇所出力データ２６＿１の記述特定情報「415fe51dbefb5・・・」が，第１の問題箇所出力データ２２＿１の記述特定情報と一致することが検出される。その結果，第２の問題箇所出力データ２６から９行目のｉｆ文に対する第２の問題箇所出力データ２６＿１を除外する（Ｓ５３）。つまり，第２の問題箇所出力データ２６＿１は，第１の問題箇所出力データ２２＿１と行番号は異なるが，記述特定情報が一致するので，第２の問題箇所出力データ２６＿１と第１の問題箇所出力データ２２＿１は，同じ対象のｉｆ文を問題箇所として検出した出力データであることが理解できる。
【００４７】
次に，開発支援装置は，第２の問題箇所出力データ２６＿２の記述特定情報が，第１の問題箇所出力データ２２＿１，２２＿２のいずれかの記述特定情報と一致するか否かをチェックする（Ｓ５１）。図７の例では，第２の問題箇所出力データ２６＿２の記述特定情報「13fe28dd5690・・・」が，第１の問題箇所出力データ２２＿２の記述特定情報と不一致であることが検出される。すなわち，第２のソースコード２４は，第１のソースコード２１に１４行目の記述４２が追加されているので，その１４行目の記述４２が１５行目のｉｆ文に影響を与える可能性があり，１５行目のｉｆ文に対する問題箇所は除外すべきではない。そこで，第２の問題箇所出力データ２６＿２については，記述特定情報が不一致になり，その結果，１５行目のｉｆ文に対する第２の問題箇所出力データ２６＿２が除外されることなく第２の問題箇所出力データ２６に含められる。このように，第２のソースコード２４に対する問題箇所に影響を与える１４行目の記述４２の存在が，記述特定情報の照合での不一致判定により確認され，必要な問題箇所が除外されることを抑制している。
【００４８】
［第２の第１，第２のソースコード例］
図８は，本実施の形態における第１，第２のソースコードとその第１，第２の問題箇所出力データの第２の例を示す図である。図８には，図３，図４の開発支援プログラムにより解析された第１，第２のソースコードの例と，生成された第１，第２の問題箇所出力データの例が示されている。この例において，第２の問題箇所出力データから第１の問題箇所出力データと重複する問題箇所を除外する処理について説明する。
【００４９】
図８の例では，第２のソースコード２４には，第１のソースコード２１に対して６，７行目の記述４３が追加されている。しかし，この追加の記述４３は，４行目のｉｆ文の後の記述であり，４行目のｉｆ文の問題点に影響を与えない。
【００５０】
この場合，第１のソースコード２１に対して，４行目のｉｆ文に対する第１の問題指摘出力データ２２＿１が生成され，その４行目の問題箇所の記述を含む特定記述３４＿１のハッシュ値である記述特定情報「415fe51dbefb5・・・」が生成されている。さらに，第２のソースコード２４に対して，４行目のｉｆ文に対する第２の問題指摘出力データ２６＿１が生成され，その４行目の問題箇所の記述を含む特定記述３４＿３のハッシュ値である記述特定情報「415fe51dbefb5・・・」が生成されている。第１，第２の問題指摘出力データの問題箇所を含むサブルーチンvoid func02の先頭から問題箇所までの特定記述３４＿１，３４＿３が一致しているので，それらのハッシュ値である記述特定情報も一致している。その結果，第２の問題箇所出力データ２６＿２は第２の問題箇所出力データ２６から除外される。この例では，第１，第２の問題箇所出力データ２２＿１，２６＿１はファイル名，行番号，問題指摘文，記述特定情報は全て一致しているので，当然に除外される。
【００５１】
［問題箇所がループ内に含まれる例］
図９は，図４の工程Ｓ４４について説明する別の図である。図９には，第２のソースコード２４の例として，１行目にサブルーチンvoid func02が示され，サブルーチンvoid func02内の４行目のｉｆ文が問題箇所として検出される例が示されている。この例では，４行目のｉｆ文の問題箇所の記述が，３行目〜５行目のｆｏｒ文からなるループ内の記述されている。
【００５２】
この場合，開発支援装置は，開発支援プログラムを実行して，サブルーチンvoid func02の先頭の１行目から４行目の問題箇所を含むループの最終行の７行目までの記述を問題箇所を特定する特定記述３４＿５とし，その特定記述３４＿５のハッシュ値を記述特定情報３４として生成する。
【００５３】
図９には，第２のソースコード２４に対して生成された第２の問題箇所出力データ２６の例が示されている。第２の問題箇所出力データ２６は，ファイル名ＦＩＬＥ，問題箇所行３０，問題指摘文３２に加えて，記述特定情報３４を有する。または，記述特定情報３４は，ファイル名ＦＩＬＥ，問題箇所行３０，問題指摘文３２に関連付けられている。前述のとおり，問題箇所がループの中にある場合は，問題箇所の後にある追加または変更された記述であっても，ループ内の記述は，問題箇所に影響を及ぼすおそれがある。したがって，記述特定情報３４により特定される記述は，問題箇所を含むサブルーチンの先頭から問題箇所を含むループの最後の行までとすることが望ましい。
【００５４】
［第３の第１，第２のソースコード例］
図１０は，本実施の形態における第１，第２のソースコードとその第１，第２の問題箇所出力データの第３の例を示す図である。図１０には，図３，図４の開発支援プログラムにより解析された第１，第２のソースコード２１，２４の例と，生成された第１，第２の問題箇所出力データ２２，２６の例が示されている。この例は，問題箇所がループ内に記述されている例である。この例において，第２の問題箇所出力データから第１の問題箇所出力データと重複する問題箇所を除外する処理について説明する。
【００５５】
第１のソースコード２１は，問題が疑われる問題箇所として，８行目のｉｆ文と，１６行目のｉｆ文とを有している。そして，７行目のｉｆ文は５行目のサブルーチンvoid func02内の記述であり７行目〜１０行目のループ内の記述であり，１２行目のｉｆ文は１０行目のサブルーチンvoid func03内の記述であり１５行目〜１８行目のループ内の記述である。
【００５６】
そこで，開発支援装置は，開発支援プログラムを実行することで，８行目のｉｆ文に対する第１の問題箇所出力データ２２＿３として，そのファイル名「a.c」，問題箇所行「８行目」，問題指摘文「ｉｆ文に誤り」を含むデータを生成し，それに対応する記述特定情報「415fe51dbefb5・・・」を生成する。この記述特定情報は，第１のソースコード２１内の８行目のｉｆ文を含むサブルーチンvoid func02の先頭の５行目からループ文の最後の１０行目までの記述３４＿５のハッシュ値である。
【００５７】
また，開発支援装置は，開発支援プログラムを実行することで，１６行目のｉｆ文に対する第１の問題箇所出力データ２２＿４として，そのファイル名「a.c」，問題箇所行「１６行目」，問題指摘文「ｉｆ文に誤り」を含むデータを生成し，それに対応する記述特定情報「28ac3741de65・・・」を生成する。この記述特定情報は，第１のソースコード２１内の１６行目のｉｆ文を含むサブルーチンvoid func03の先頭の１３行目からループ文の最後の１８行目までの記述３４＿６のハッシュ値である。
【００５８】
なお，第１の問題箇所出力データ２２＿３，２２＿４内の記述特定情報のハッシュ値は，簡単のために，図７の例と同じになっている。
【００５９】
一方，第２のソースコード２４は，第１のソースコード２１に対して，３，４行目の記述４４と２０行目の記述４４を追加して生成されている。それに伴い，第２のソースコード２４は，１０行目のｉｆ文と，１８行目のｉｆ文とを，問題が疑われる問題箇所として有している。そして，１０行目のｉｆ文は７行目のサブルーチンvoid func02内の記述であり９行目〜１２行目のループ文内の記述であり，１８行目のｉｆ文は１５行目のサブルーチンvoid func03内の記述であり１７−２１行目のループ文内にある。 
【００６０】
そこで，開発支援装置は，開発支援プログラムを実行することで，１０行目のｉｆ文に対する第２の問題箇所出力データ２６＿３として，そのファイル名「a.c」，問題箇所行「１０行目」，問題指摘文「ｉｆ文に誤り」を含むデータを生成し，それに対応する記述特定情報「415fe51dbefb5・・・」を生成する。この記述特定情報は，第２のソースコード２４内の１０行目のｉｆ文を含むサブルーチンvoid func02の先頭の７行目からループ文の最後の１２行目までの記述３４＿７のハッシュ値である。
【００６１】
また，開発支援装置は，開発支援プログラムを実行することで，１８行目のｉｆ文に対する第２の問題箇所出力データ２６＿４として，そのファイル名「a.c」，問題箇所行「１８行目」，問題指摘文「ｉｆ文に誤り」を含むデータを生成し，それに対応する記述特定情報「13fe28dd5690・・・」を生成する。この記述特定情報は，第２のソースコード２４内の１８行目のｉｆ文を含むサブルーチンvoid func03の先頭の１５行目からループ文の最後の２１行目までの記述３４＿８のハッシュ値である。
【００６２】
そこで，開発支援装置は，開発支援プログラムを実行して，図４のＳ５１−Ｓ５４の重複する問題箇所を除外する処理を行う。すなわち，開発支援装置は，第２の問題箇所出力データ２６＿３の記述特定情報が，第１の問題箇所出力データ２２＿３，２２＿４のいずれかの記述特定情報と一致するか否かをチェックする（Ｓ５１）。図１０の例では，第２の問題箇所出力データ２６＿３の記述特定情報「415fe51dbefb5・・・」が，第１の問題箇所出力データ２２＿３の記述特定情報と一致することが検出される。その結果，第２の問題箇所出力データ２６から１０行目のｉｆ文に対する第２の問題箇所出力データ２６＿３を除外する（Ｓ５３）。つまり，第２の問題箇所出力データ２６＿３は，第１の問題箇所出力データ２２＿３と行番号は異なるが，記述特定情報は一致するので，第２の問題箇所出力データ２６＿３と第１の問題箇所出力データ２２＿３は，同じ対象のｉｆ文を問題箇所として検出したことが理解できる。
【００６３】
次に，開発支援装置は，第２の問題箇所出力データ２６＿４の記述特定情報が，第１の問題箇所出力データ２２＿３，２２＿４のいずれかの記述特定情報と一致するか否かをチェックする（Ｓ５１）。図１０の例では，第２の問題箇所出力データ２６＿４の記述特定情報「13fe28dd5690・・・」が，第１の問題箇所出力データ２２＿４の記述特定情報と不一致であることが検出される。すなわち，第２のソースコード２４には，第１のソースコード２１に２０行目の記述４５が追加され，その記述４５は１８行目のｉｆ文の問題箇所と同じループ文内にあるので，その記述４５が１８行目のｉｆ文に影響を与える可能性があり，１８行目のｉｆ文に対する問題箇所は除外すべきではない。そこで，第２の問題箇所出力データ２６＿４については，記述特定情報が不一致になり，その結果，１８行目のｉｆ文に対する第２の問題箇所出力データ２６＿４は除外されることなく第２の問題箇所出力データ２６に含められる。このように，第２のソースコード２４に対する問題箇所に影響を与える２０行目の記述４５の存在が，記述特定情報の照合による不一致判定により確認され，必要な問題箇所が除外されることを抑制している。
【００６４】
［第４の第１，第２のソースコード例］
図１１は，本実施の形態における第１，第２のソースコードとその第１，第２の問題箇所出力データの第４の例を示す図である。図１１には，図３，図４の開発支援プログラムにより解析された第１，第２のソースコード２１，２４の例と，生成された第１，第２の問題箇所出力データ２２，２６の例が示されている。この例は，問題箇所の対象記述が同じでも異なるサブルーチン内の場合は，異なる問題箇所として除外されない例である。この例において，第２の問題箇所出力データから第１の問題箇所出力データと重複する問題箇所を除外する処理について説明する。
【００６５】
第１のソースコード２１は，問題が疑われる問題箇所として，４行目のｉｆ文を有している。
【００６６】
そこで，開発支援装置は，開発支援プログラムを実行することで，４行目のｉｆ文に対する第１の問題箇所出力データ２２＿５として，そのファイル名「a.c」，問題箇所行「８行目」，問題指摘文「ｉｆ文に誤り」を含むデータを生成し，それに対応する記述特定情報「415fe51dbefb5・・・」を生成する。この記述特定情報は，第１のソースコード２１内の４行目のｉｆ文を含むサブルーチンvoid func01の先頭の１行目から問題箇所の４行目のｉｆ文までの記述３４＿９のハッシュ値である。
【００６７】
一方，第２のソースコード２４は，第１のソースコード２１に対して，１〜６行目のサブルーチンvoid func02を追加して生成されている。それに伴い，第２のソースコード２４は，４行目のｉｆ文と，１０行目のｉｆ文とを，問題が疑われる問題箇所として有している。 
【００６８】
そこで，開発支援装置は，開発支援プログラムを実行することで，４行目のｉｆ文に対する第２の問題箇所出力データ２６＿５として，そのファイル名「a.c」，問題箇所行「４行目」，問題指摘文「ｉｆ文に誤り」を含むデータを生成し，それに対応する記述特定情報「78ab09feffea・・・」を生成する。この記述特定情報は，第２のソースコード２４内の４行目のｉｆ文を含むサブルーチンvoid func02の先頭の１行目からｉｆ文の４行目までの記述３４＿１０のハッシュ値である。
【００６９】
また，開発支援装置は，開発支援プログラムを実行することで，１０行目のｉｆ文に対する第２の問題箇所出力データ２６＿６として，そのファイル名「a.c」，問題箇所行「１０行目」，問題指摘文「ｉｆ文に誤り」を含むデータを生成し，それに対応する記述特定情報「415fe51dbefb5・・・」を生成する。この記述特定情報は，第２のソースコード２４内の１０行目のｉｆ文を含むサブルーチンvoid func01の先頭の７行目からｉｆ文の１０行目までの記述３４＿１１のハッシュ値である。
【００７０】
そこで，開発支援装置は，開発支援プログラムを実行して，図４のＳ５１−Ｓ５４の重複する問題箇所を除外する処理を行う。すなわち，開発支援装置は，第２の問題箇所出力データ２６＿５の記述特定情報が，第１の問題箇所出力データ２２＿５の記述特定情報と一致するか否かをチェックする（Ｓ５１）。図１１の例では，第２の問題箇所出力データ２６＿５の記述特定情報「78ab09feffea・・・」が，第１の問題箇所出力データ２２＿５の記述特定情報と不一致であることが検出される。その結果，第２の問題箇所出力データ２６から４行目のｉｆ文に対する第２の問題箇所出力データ２６＿５は除外しない。つまり，第２の問題箇所出力データ２６＿５は，第１の問題箇所出力データ２２＿５と行番号は同じであるが，記述特定情報は不一致であるので，第２の問題箇所出力データ２６＿５と第１の問題箇所出力データ２２＿５とは，異なる対象のｉｆ文を問題箇所として検出したことが理解できる。
【００７１】
次に，開発支援装置は，第２の問題箇所出力データ２６＿６の記述特定情報が，第１の問題箇所出力データ２２＿５の記述特定情報と一致するか否かをチェックする（Ｓ５１）。図１１の例では，第２の問題箇所出力データ２６＿６の記述特定情報「415fe51dbefb5・・・」が，第１の問題箇所出力データ２２＿５の記述特定情報と一致することが検出される。すなわち，第２のソースコード２４には，第１のソースコード２１に対して１〜６行目のサブルーチンvoid func02の記述が追加され，第１のソースコード２１内の１〜６行のサブルーチンvoid func01の記述は，７〜１２行に移動している。そこで，第２の問題箇所出力データ２６＿６については，記述特定情報が一致して，その結果，１０行目のｉｆ文に対する第２の問題箇所出力データ２６＿６は除外されて第２の問題箇所出力データ２６には含められない。
【００７２】
［第５の第１，第２のソースコード例］
図１２は，本実施の形態における第１，第２のソースコードとその第１，第２の問題箇所出力データの第５の例を示す図である。第１のソースコード２１は，４行目のｉｆ文を問題が疑われる問題箇所として有している。
【００７３】
開発支援装置は，開発支援プログラムを実行することで，第１のソースコード２１に対して，４行目のｉｆ文に対する第１の問題箇所出力データ２２＿６として，そのファイル名「a.c」，問題箇所行「４行目」，問題指摘文「ｉｆ文に誤り」を含むデータを生成し，それに対応する記述特定情報「78ab09feffea・・・」を生成する。この記述特定情報は，第１のソースコード２１内の４行目のｉｆ文を含む１行目のサブルーチンvoid func01の先頭から問題箇所の４行目までの記述３４＿１２のハッシュ値である。
【００７４】
一方，第２のソースコード２４は，第１のソースコード２１に０８−１０行目の記述４６を追加している。そして，第２のソースコード２４に対して，４行目のｉｆ文と，８行目のｉｆ文とが問題箇所として検出される。
【００７５】
すなわち，開発支援装置は，開発支援プログラムを実行することで，第２のソースコード２６に対して，４行目のｉｆ文に対する第２の問題箇所出力データ２６＿７として，そのファイル名「a.c」，問題箇所行「４行目」，問題指摘文「ｉｆ文に誤り」を含むデータを生成し，それに対応する記述特定情報「78ab09feffea・・・」を生成する。この記述特定情報は，第２のソースコード２６内の４行目のｉｆ文を含むサブルーチンvoid func01の先頭の１行目から問題箇所の４行目までの記述３４＿１３のハッシュ値である。
【００７６】
さらに，開発支援装置は，開発支援プログラムを実行することで，第２のソースコード２４に対し，８行目のｉｆ文に対する第２の問題箇所出力データ２６＿８として，そのファイル名「a.c」，問題箇所行「８行目」，問題指摘文「ｉｆ文に誤り」を含むデータを生成し，それに対応する記述特定情報「415fe51dbefb5・・・」を生成する。この記述特定情報は，第２のソースコード２４内の８行目のｉｆ文を含むサブルーチンvoid func01の先頭の１行目から問題箇所の８行目までの記述３４＿１４のハッシュ値である。
【００７７】
そこで，開発支援装置は，開発支援プログラムを実行して，図４のＳ５１−Ｓ５４の重複する問題箇所を除外する処理を行う。その結果，第２の問題箇所出力データ２６＿７の記述特定情報「78ab09feffea・・・」は，第１の問題箇所出力データ２２＿６の記述特定情報「78ab09feffea・・・」と一致し，除外される。また，第２の問題箇所出力データ２６＿８の記述特定情報「415fe51dbefb5・・・」は，第１の問題箇所出力データ２２＿６の記述特定情報「78ab09feffea・・・」と不一致となり，除外されない。
【００７８】
このように，第２のソースコード２４の８−１０行目に記述４６が追加されても，４行目のｉｆ文の記述特定情報が，第１のソースコード２１の４行目のｉｆ文の記述特定情報と一致し，第２の問題箇所出力データ２６から除外される。そして，第２のソースコード２４に追加された記述４６内のｉｆ文に対する問題箇所出力データ２６＿８は，第２の問題箇所データ２６から除外されない。
【００７９】
［第６の第１，第２のソースコード例］
図１３は，本実施の形態における第１，第２のソースコードとその第１，第２の問題箇所出力データの第６の例を示す図である。第１のソースコード２１は，４行目のｉｆ文と７行目のｉｆ文を問題が疑われる問題箇所として有している。
【００８０】
開発支援装置は，開発支援プログラムを実行することで，第１のソースコード２１に対して，４行目のｉｆ文に対する第１の問題箇所出力データ２２＿７として，そのファイル名「a.c」，問題箇所行「４行目」，問題指摘文「ｉｆ文に誤り」を含むデータを生成し，それに対応する記述特定情報「78ab09feffea・・・」を生成する。この記述特定情報は，第１のソースコード２１内の４行目のｉｆ文を含むサブルーチンvoid func01の先頭の１行目から問題箇所の４行目までの記述３４＿１５のハッシュ値である。
【００８１】
同様に，開発支援装置は，第１のソースコード２１に対して，７行目のｉｆ文に対する第１の問題箇所出力データ２２＿８として，そのファイル名「a.c」，問題箇所行「７行目」，問題指摘文「ｉｆ文に誤り」を含むデータを生成し，それに対応する記述特定情報「31b409faf0e0・・・」を生成する。この記述特定情報は，第１のソースコード２１内の４行目のｉｆ文を含むサブルーチンvoid func01の先頭の１行目から問題箇所の７行目までの記述３４＿１６のハッシュ値である。
【００８２】
一方，第２のソースコード２４は，第１のソースコード２１に０７−０８行目の記述４７を追加している。そして，第２のソースコード２４に対して，４行目のｉｆ文と９行目のｉｆ文とが問題箇所として検出される。
【００８３】
開発支援装置は，開発支援プログラムを実行することで，第２のソースコード２４に対して，４行目のｉｆ文に対する第２の問題箇所出力データ２６＿９として，そのファイル名「a.c」，問題箇所行「４行目」，問題指摘文「ｉｆ文に誤り」を含むデータを生成し，それに対応する記述特定情報「78ab09feffea・・・」を生成する。この記述特定情報は，第２のソースコード２４内の４行目のｉｆ文を含むサブルーチンvoid func01の先頭の１行目から問題箇所の４行目までの記述３４＿１７のハッシュ値である。
【００８４】
さらに，開発支援装置は，開発支援プログラムを実行することで，第２のソースコード２４に対し，９行目のｉｆ文に対する第２の問題箇所出力データ２６＿１０として，そのファイル名「a.c」，問題箇所行「９行目」，問題指摘文「ｉｆ文に誤り」を含むデータを生成し，それに対応する記述特定情報「415fe51dbefb5・・・」を生成する。この記述特定情報は，第２のソースコード２４内の９行目のｉｆ文を含むサブルーチンvoid func01の先頭の１行目から問題箇所の９行目までの記述３４＿１４のハッシュ値である。
【００８５】
そこで，開発支援装置は，開発支援プログラムを実行して，図４のＳ５１−Ｓ５４の重複する問題箇所を除外する処理を行う。その結果，第２の問題箇所出力データ２６＿９の記述特定情報「78ab09feffea・・・」は，第１の問題箇所出力データ２２＿７の記述特定情報「78ab09feffea・・・」と一致し，除外される。また，第２の問題箇所出力データ２６＿１０の記述特定情報「415fe51dbefb5・・・」は，第１の問題箇所出力データ２２＿８の記述特定情報「78ab09feffea・・・」と不一致となり，除外されない。
【００８６】
このように，第２のソースコード２４の７−８行目に記述４７が問題箇所の９行目より前に追加されたため，９行目のｉｆ文の記述特定情報が，第１のソースコード２１の７行目のｉｆ文の記述特定情報と不一致になり，第２の問題箇所出力データ２６から除外されない。
【００８７】
図１４は，本実施の形態における開発支援プログラムの工程Ｓ４，Ｓ５の処理の第２のフローチャート図である。図１４は，図４のフローチャートの工程Ｓ５１の代わりに工程Ｓ５１＿Ｂを有する。それ以外の工程は，図４と同じである。
【００８８】
図１４のフローチャート図によれば，工程Ｓ５１＿Ｂにおいて，開発支援装置が，開発支援プログラムを実行して，第２の問題箇所に対応する第２の記述特定情報に加えて問題指摘文の両方が，第１のソースコードを解析して検出した第１の問題箇所に対応する第１の記述特定情報と問題指摘文の両方のいずれかと一致するかチェックする。そして，一致した場合は，その第２の問題箇所を第２の問題箇所出力データから除外する。
【００８９】
すなわち，図１４の処理によれば，第２のソースコードを解析して得た問題箇所群から重複する問題箇所を除外する際に，記述特定情報が一致することに加えて問題指摘文が一致することもチェックする。このようにすることで次のような状況の場合に，新たに検出された問題箇所が除外されることを防止できる。
【００９０】
例えば，開発支援プログラムによる問題箇所検出項目の設定を第１のソースコードを解析した時と異なる設定に変更した場合に，第２のソースコードを解析して得られた問題箇所と問題指摘文が，同じｉｆ文に対して新たに検出される場合がある。そのような場合は，新たに検出された問題箇所と問題指摘文の出力を除外すべきでない。このような場合に，図１４の処理を行って除外すべき問題箇所を判定すれば，新たに検出された問題箇所と問題指摘文を除外せずに第２の問題箇所出力データに残すことができる。
【００９１】
図１４の工程Ｓ５１＿Ｂでは，問題箇所に対応する記述特定情報と問題指摘文とが一致するか否かの判定を行ったが，さらに，問題箇所に対応する記述特定情報と問題指摘文とファイル名とが一致するか否かの判定を行うようにしても良い。その場合，同じファイル内の同じ問題箇所，同じ問題指摘文，そして同じ記述特定情報とが一致する場合に，第２の問題箇所出力データから除外される。
【００９２】
［第７の第１，第２のソースコード例］
図１５は，本実施の形態における第１，第２のソースコードとその第１，第２の問題箇所出力データの第７の例を示す図である。この例は，図１４のフローチャートにしたがって第２の問題箇所出力データから新規に検出された問題箇所と問題指摘文のデータを除外することが防止される。
【００９３】
第１のソースコード２１は，４行目のｉｆ文を問題が疑われる問題箇所として有している。開発支援装置は，開発支援プログラムを実行することで，第１のソースコード２１に対して，４行目のｉｆ文に対する第１の問題箇所出力データ２２＿９として，そのファイル名「a.c」，問題箇所行「４行目」，問題指摘文「ｉｆ文に誤り」を含むデータを生成し，それに対応する記述特定情報「78ab09feffea・・・」を生成する。この記述特定情報は，第１のソースコード２１内の４行目のｉｆ文を含むサブルーチンvoid func01の先頭の１行目から問題箇所の４行目までの記述３４＿１９のハッシュ値である。
【００９４】
一方，第２のソースコード２４は，第１のソースコード２１に１，２，３，９行目の記述４８を追加している。そして，第２のソースコード２４に対して，７行目のｉｆ文が問題箇所として検出される。
【００９５】
開発支援装置は，第１のソースコードを解析した時の検出項目の設定に，「変数の定義ミス」を追加する変更を行った開発支援プログラムを実行する。設定の変更は第２のソースコード開発者により行われる。開発支援装置は，第２のソースコード２４に対して，７行目のｉｆ文に対する第２の問題箇所出力データ２６＿１１として，そのファイル名「a.c」，問題箇所行「７行目」，問題指摘文「ｉｆ文に誤り」を含むデータを生成し，それに対応する記述特定情報「78ab09feffea・・・」を生成する。この記述特定情報は，第２のソースコード２４内の７行目のｉｆ文を含むサブルーチンvoid func01の先頭の４行目から問題箇所の７行目までの記述３４＿２０のハッシュ値である。
【００９６】
さらに，開発支援装置は，第２のソースコード２４に対して，７行目のｉｆ文の変数の定義に問題の可能性があることを理由に，第２の問題箇所出力データ２６＿１２として，そのファイル名「a.c」，問題箇所行「７行目」。問題指摘文「変数ａに誤り」を含むデータを生成し，それに対応する記述特定情報「78ab09feffea・・・」を生成する。問題箇所は，上記と同じ７行目のｉｆ文であるが，この問題の原因はｉｆ文の変数ａの誤りの可能性である。したがって，記述特定情報は，第２のソースコード２４内の同じ７行目のｉｆ文を含むサブルーチンvoid func01の先頭の４行目から問題箇所の７行目までの記述３４＿２０のハッシュ値であり，上記の記述特定情報と同じである。第２のソースコード２４では，４行目のサブルーチンvoid func01の括弧内の変数は，変数ａが通常のビット数の整数であるのに対して，変数ｂ，ｃは，短いビット数の整数に定義されている。そのため，変数ａの整数の精度が変数ｂ，ｃの整数の精度と正号しないことを理由に，上記のような問題指摘文「変数ａに誤り」が検出されている。
【００９７】
そこで，開発支援装置は，開発支援プログラムを実行して，図１４のＳ５１−Ｓ５４の重複する問題箇所を除外する処理を行う。その結果，第２の問題箇所出力データ２６＿１１の記述特定情報「78ab09feffe・・・a」は，第１の問題箇所出力データ２２＿９の記述特定情報「78ab09feffea・・・」と一致し，さらに問題指摘文「ｉｆ文に誤り」も一致し，除外される。ところが，第２の問題箇所出力データ２６＿１２の記述特定情報「78ab09feffea・・・」は，第１の問題箇所出力データ２２＿９の記述特定情報「78ab09feffea・・・」と一致するが，問題指摘文「変数ａに誤り」が不一致となり，第２の問題箇所出力データからは除外されない。
【００９８】
このように，第２のソースコード２４の分析の設定を変更したことで初めて検出される問題箇所と問題指摘文は，たとえ同じ問題箇所に対する問題箇所出力データであっても，問題指摘文が異なる，つまり問題視した理由が異なる場合は，新たな問題箇所として第２の問題箇所出力データから除外されることはない。
【００９９】
以上の実施の形態をまとめると，次の付記のとおりである。
【０１００】
（付記１）
第１のソースコードを更新して生成された第２のソースコードを解析して第２の問題箇所を検出し，
前記第２の問題箇所が記述されているサブルーチンの先頭から少なくとも前記第２の問題箇所までの記述を特定する第２の記述特定情報を生成し，
前記第２のソースコードを解析して検出した前記第２の問題箇所に対応する前記第２の記述特定情報が，前記第１のソースコードを解析して検出された第１の問題箇所に対応する第１の記述特定情報と一致する場合に，前記第２の問題箇所を，前記第２のソースコードの問題箇所としての出力の対象から除外する，
処理をコンピュータに実行させるコンピュータ読み取り可能な開発支援プログラム。
【０１０１】
（付記２）
付記１において，
前記第２の記述特定情報を生成する工程において，前記第２の問題箇所の記述が繰り返し制御記述内に含まれる場合は，前記第２の記述特定情報として，前記第２の問題箇所が記述されているサブルーチンの先頭から前記第２の問題箇所の記述を含む前記繰り返し制御記述の最後までの記述を特定する記述特定情報を生成する，開発支援プログラム。
【０１０２】
（付記３）
付記１または２において，
さらに，
前記第２の問題箇所の問題を記述する第２の問題指摘文を生成し，
前記出力として，前記第２の問題箇所と前記第２の問題指摘文とを出力し，
前記出力の対象から除外する工程において，前記第２の記述特定情報が前記第１の記述特定情報と一致することに加えて，前記第２の問題箇所の第２の問題指摘文と前記第１の問題箇所に対応する第１の問題指摘文とが一致する場合に，前記第２の問題箇所を，前記出力の対象から除外する，開発支援プログラム。
【０１０３】
（付記４）
付記３において，
前記出力の対象から除外する工程において，前記第２の記述特定情報が前記第１の記述特定情報と一致することと，前記第２の問題指摘文と前記第１の問題指摘文とが一致することに加えて，前記第２のソースコードのファイル名と前記第２のソースコードのファイル名が一致する場合に，前記第２の問題箇所を，前記出力の対象から除外する，開発支援プログラム。
【０１０４】
（付記５）
付記１または２において，
前記第１，第２の記述特定情報は，特定対象であるソースコードの記述のハッシュ値，符号化コードのいずれかであり，且つ前記特定対象であるソースコードの記述よりもデータ量が少ない，開発支援プログラム。
【０１０５】
（付記６）
付記１または２において，
前記出力の対象から除外する工程において，前記第２の記述特定情報が，前記第１のソースコードを解析して検出された複数の第１の問題箇所に対応する第１の記述特定情報のいずれかと一致する場合に，当該一致した第２の問題箇所を，前記出力の対象から除外し，前記第２の記述特定情報が，前記複数の第１の問題箇所に対応する第１の記述特定情報の全てと不一致の場合に，前記出力の対象に含める，開発支援プログラム。
【０１０６】
（付記７）
付記１または２において，
前記サブルーチンは，一連の処理を記述するソースコードのブロックであり，メソッド，関数を含む，開発支援プログラム。
【０１０７】
（付記８）
付記１または２において，
前記問題箇所を検出する工程において，設定された解析対象に基づいて前記ソースコードに問題がある場合に問題箇所として検出する，開発支援プログラム。
【０１０８】
（付記９）
第１のソースコードを更新して生成された第２のソースコードを解析して第２の問題箇所を検出し，
前記第２の問題箇所が記述されているサブルーチンの先頭から少なくとも前記第２の問題箇所までの記述を特定する第２の記述特定情報を生成し，
前記第２のソースコードを解析して検出した前記第２の問題箇所に対応する前記第２の記述特定情報が，前記第１のソースコードを解析して検出された第１の問題箇所に対応する第１の記述特定情報と一致する場合に，前記第２の問題箇所を，前記第２のソースコードの問題箇所としての出力の対象から除外する，
処理を有する開発支援方法。
【０１０９】
（付記１０）
付記９において，
前記第２の記述特定情報を生成する工程において，前記第２の問題箇所の記述が繰り返し制御記述内に含まれる場合は，前記第２の記述特定情報として，前記第２の問題箇所が記述されているサブルーチンの先頭から前記第２の問題箇所の記述を含む前記繰り返し制御記述の最後までの記述を特定する記述特定情報を生成する，開発支援方法。
【０１１０】
（付記１１）
第１のソースコードを更新して生成された第２のソースコードを解析して第２の問題箇所を検出する手段と，
前記第２の問題箇所が記述されているサブルーチンの先頭から少なくとも前記第２の問題箇所までの記述を特定する第２の記述特定情報を生成する手段と，
前記第２のソースコードを解析して検出した前記第２の問題箇所に対応する前記第２の記述特定情報が，前記第１のソースコードを解析して検出された第１の問題箇所に対応する第１の記述特定情報と一致する場合に，前記第２の問題箇所を，前記第２のソースコードの問題箇所としての出力の対象から除外する手段と，を有する開発支援装置。
【符号の説明】
【０１１１】
２０：開発支援プログラム
２１：第１のソースコード
２２：第１のソースコードの問題箇所出力データ
２４：第２のソースコード
２６：第２のソースコードの問題箇所出力データ
３０：問題箇所
３２：問題指摘文
３４：記述特定情報
【図１】
0006369177.tif 000002
【図２】
0006369177.tif 000003
【図３】
0006369177.tif 000004
【図４】
0006369177.tif 000005
【図５】
0006369177.tif 000006
【図６】
0006369177.tif 000007
【図７】
0006369177.tif 000008
【図８】
0006369177.tif 000009
【図９】
0006369177.tif 000010
【図１０】
0006369177.tif 000011
【図１１】
0006369177.tif 000012
【図１２】
0006369177.tif 000013
【図１３】
0006369177.tif 000014
【図１４】
0006369177.tif 000015
【図１５】
0006369177.tif 000016