(57)【要約】【課題】除外申請に関して参考になる情報を出力できる参考情報出力プログラムを提供する。【解決手段】参考情報出力プログラムは、複数の階層により階層化されたプログラムの解析結果を取得し、取得した解析結果に含まれる特定のチェック内容を、プログラムの対応する箇所と対応付けて表示させる際、過去のチェック内容の除外申請の情報が記憶された記憶部を参照し、特定のチェック内容と同種類のチェック内容の除外申請を特定し、同種類のチェック内容の除外申請の申請結果と、プログラムにおける特定のチェック内容の複数の階層における位置と同種類のチェック内容の複数の階層における位置との差分と、に応じた、特定のチェック内容についての除外申請に関する参考情報を出力する、処理をコンピュータに実行させる。【選択図】図１１
2018045525.tif 000002
【特許請求の範囲】
【請求項１】
複数の階層により階層化されたプログラムの解析結果を取得し、
取得した前記解析結果に含まれる特定のチェック内容を、前記プログラムの対応する箇所と対応付けて表示させる際、過去のチェック内容の除外申請の情報が記憶された記憶部を参照し、前記特定のチェック内容と同種類のチェック内容の除外申請を特定し、
前記同種類のチェック内容の除外申請の申請結果と、前記プログラムにおける前記特定のチェック内容の前記複数の階層における位置と前記同種類のチェック内容の前記複数の階層における位置との差分と、に応じた、前記特定のチェック内容についての除外申請に関する参考情報を出力する、
処理をコンピュータに実行させることを特徴とする参考情報出力プログラム。
【請求項２】
前記参考情報は、前記特定のチェック内容の除外申請を推奨する除外申請推奨の表示、又は、前記プログラムの対応する箇所の修正を推奨する修正推奨の表示を含む、
ことを特徴とする請求項１に記載の参考情報出力プログラム。
【請求項３】
前記特定のチェック内容を表示させる際、ユーザの属性を特定し、
前記解析結果に含まれるチェック内容のうち、特定した前記属性に対応する他のチェック内容のみ表示させる、
ことを特徴とする請求項１又は２に記載の参考情報出力プログラム。
【請求項４】
複数の階層により階層化されたプログラムの解析結果に含まれる特定のチェック内容について除外申請を受け付けると、過去のチェック内容の除外申請の情報が記憶された記憶部を参照し、前記特定のチェック内容と同種類のチェック内容の除外申請を特定し、
前記同種類のチェック内容の除外申請の申請結果と、前記特定のチェック内容の前記複数の階層における位置と前記同種類のチェック内容の前記複数の階層における位置との差分と、に応じた、前記特定のチェック内容についての除外申請の認否判断に関する参考情報を出力する、
処理をコンピュータに実行させることを特徴とする参考情報出力プログラム。
【請求項５】
前記認否判断に関する参考情報は、承認又は差戻しの選択である、
ことを特徴とする請求項４に記載の参考情報出力プログラム。
【請求項６】
複数の階層により階層化されたプログラムの解析結果に含まれる特定のチェック内容について除外申請を受け付けると、過去のチェック内容の除外申請の情報が記憶された記憶部を参照し、前記特定のチェック内容と同種類のチェック内容を特定し、
前記複数の階層のうち、前記特定のチェック内容を示す情報と前記同種類のチェック内容を示す情報とのそれぞれを、対応する位置にマッピングした図を出力する、
処理をコンピュータに実行させることを特徴とする出力プログラム。
【請求項７】
複数の階層により階層化されたプログラムの解析結果を取得し、
取得した前記解析結果に含まれる特定のチェック内容を、前記プログラムの対応する箇所と対応付けて表示させる際、過去のチェック内容の除外申請の情報が記憶された記憶部を参照し、前記特定のチェック内容と同種類のチェック内容の除外申請を特定し、
前記同種類のチェック内容の除外申請の申請結果と、前記プログラムにおける前記特定のチェック内容の前記複数の階層における位置と前記同種類のチェック内容の前記複数の階層における位置との差分と、に応じた、前記特定のチェック内容についての除外申請に関する参考情報を出力する、
処理をコンピュータが実行することを特徴とする参考情報出力方法。
【請求項８】
複数の階層により階層化されたプログラムの解析結果に含まれる特定のチェック内容について除外申請を受け付けると、過去のチェック内容の除外申請の情報が記憶された記憶部を参照し、前記特定のチェック内容と同種類のチェック内容の除外申請を特定し、
前記同種類のチェック内容の除外申請の申請結果と、前記特定のチェック内容の前記複数の階層における位置と前記同種類のチェック内容の前記複数の階層における位置との差分と、に応じた、前記特定のチェック内容についての除外申請の認否判断に関する参考情報を出力する、
処理をコンピュータが実行することを特徴とする参考情報出力方法。
【請求項９】
複数の階層により階層化されたプログラムの解析結果を取得し、
取得した前記解析結果に含まれる特定のチェック内容を、前記プログラムの対応する箇所と対応付けて表示させる際、過去のチェック内容の除外申請の情報が記憶された記憶部を参照し、前記特定のチェック内容と同種類のチェック内容の除外申請を特定し、
前記同種類のチェック内容の除外申請の申請結果と、前記プログラムにおける前記特定のチェック内容の前記複数の階層における位置と前記同種類のチェック内容の前記複数の階層における位置との差分と、に応じた、前記特定のチェック内容についての除外申請に関する参考情報を出力する、
処理を実行する処理部を有する参考情報出力装置。
【請求項１０】
複数の階層により階層化されたプログラムの解析結果に含まれる特定のチェック内容について除外申請を受け付けると、過去のチェック内容の除外申請の情報が記憶された記憶部を参照し、前記特定のチェック内容と同種類のチェック内容の除外申請を特定し、
前記同種類のチェック内容の除外申請の申請結果と、前記特定のチェック内容の前記複数の階層における位置と前記同種類のチェック内容の前記複数の階層における位置との差分と、に応じた、前記特定のチェック内容についての除外申請の認否判断に関する参考情報を出力する、
処理を実行する処理部を有する参考情報出力装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本件は、参考情報出力プログラム、出力プログラム、参考情報出力方法、及び参考情報出力装置に関する。
【背景技術】
【０００２】
ソースコードに対する静的解析が知られている（例えば特許文献１参照）。静的解析によりソースコードに潜在するバグやコーディング規約違反といった品質に関する種々の問題が発見される。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１３−１３４５２１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、上述した種々の問題は静的解析のチェック結果としてソースコードの開発者にフィードバックされる。チェック結果の中には有益な指摘だけでなく、無駄な指摘が含まれている場合がある。無駄な指摘としては、例えば開発者にとって重要でない指摘やプロジェクトの都合による修正不要な指摘などがある。
【０００５】
無駄な指摘に対しては、開発者は次回のチェック結果から除外させる除外申請を行うことができる。しかしながら、開発者はチェック結果を個別に確認して除外申請の要否を決定しなければならず、手間がかかるという問題がある。
【０００６】
そこで、１つの側面では、除外申請に関して参考になる情報を出力できる参考情報出力プログラム、出力プログラム、参考情報出力方法、及び参考情報出力装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
１つの実施態様では、参考情報出力プログラムは、複数の階層により階層化されたプログラムの解析結果を取得し、取得した前記解析結果に含まれる特定のチェック内容を、前記プログラムの対応する箇所と対応付けて表示させる際、過去のチェック内容の除外申請の情報が記憶された記憶部を参照し、前記特定のチェック内容と同種類のチェック内容の除外申請を特定し、前記同種類のチェック内容の除外申請の申請結果と、前記プログラムにおける前記特定のチェック内容の前記複数の階層における位置と前記同種類のチェック内容の前記複数の階層における位置との差分と、に応じた、前記特定のチェック内容についての除外申請に関する参考情報を出力する、処理をコンピュータに実行させることを特徴とする参考情報出力プログラムである。
【０００８】
１つの実施態様では、参考情報出力プログラムは、複数の階層により階層化されたプログラムの解析結果に含まれる特定のチェック内容について除外申請を受け付けると、過去のチェック内容の除外申請の情報が記憶された記憶部を参照し、前記特定のチェック内容と同種類のチェック内容の除外申請を特定し、前記同種類のチェック内容の除外申請の申請結果と、前記特定のチェック内容の前記複数の階層における位置と前記同種類のチェック内容の前記複数の階層における位置との差分と、に応じた、前記特定のチェック内容についての除外申請の認否判断に関する参考情報を出力する、処理をコンピュータに実行させることを特徴とする参考情報出力プログラムである。
【０００９】
１つの実施態様では、出力プログラムは、複数の階層により階層化されたプログラムの解析結果に含まれる特定のチェック内容について除外申請を受け付けると、過去のチェック内容の除外申請の情報が記憶された記憶部を参照し、前記特定のチェック内容と同種類のチェック内容を特定し、前記複数の階層のうち、前記特定のチェック内容を示す情報と前記同種類のチェック内容を示す情報とのそれぞれを、対応する位置にマッピングした図を出力する、処理をコンピュータに実行させることを特徴とする出力プログラムである。
【００１０】
１つの実施態様では、参考情報出力方法は、複数の階層により階層化されたプログラムの解析結果を取得し、取得した前記解析結果に含まれる特定のチェック内容を、前記プログラムの対応する箇所と対応付けて表示させる際、過去のチェック内容の除外申請の情報が記憶された記憶部を参照し、前記特定のチェック内容と同種類のチェック内容の除外申請を特定し、前記同種類のチェック内容の除外申請の申請結果と、前記プログラムにおける前記特定のチェック内容の前記複数の階層における位置と前記同種類のチェック内容の前記複数の階層における位置との差分と、に応じた、前記特定のチェック内容についての除外申請に関する参考情報を出力する、処理をコンピュータが実行することを特徴とする参考情報出力方法である。
【００１１】
１つの実施態様では、参考情報出力方法は、複数の階層により階層化されたプログラムの解析結果に含まれる特定のチェック内容について除外申請を受け付けると、過去のチェック内容の除外申請の情報が記憶された記憶部を参照し、前記特定のチェック内容と同種類のチェック内容の除外申請を特定し、前記同種類のチェック内容の除外申請の申請結果と、前記特定のチェック内容の前記複数の階層における位置と前記同種類のチェック内容の前記複数の階層における位置との差分と、に応じた、前記特定のチェック内容についての除外申請の認否判断に関する参考情報を出力する、処理をコンピュータが実行することを特徴とする参考情報出力方法である。
【００１２】
１つの実施態様では、参考情報出力装置は、複数の階層により階層化されたプログラムの解析結果を取得し、取得した前記解析結果に含まれる特定のチェック内容を、前記プログラムの対応する箇所と対応付けて表示させる際、過去のチェック内容の除外申請の情報が記憶された記憶部を参照し、前記特定のチェック内容と同種類のチェック内容の除外申請を特定し、前記同種類のチェック内容の除外申請の申請結果と、前記プログラムにおける前記特定のチェック内容の前記複数の階層における位置と前記同種類のチェック内容の前記複数の階層における位置との差分と、に応じた、前記特定のチェック内容についての除外申請に関する参考情報を出力する、処理を実行する処理部を有する参考情報出力装置である。
【００１３】
１つの実施態様では、参考情報出力装置は、複数の階層により階層化されたプログラムの解析結果に含まれる特定のチェック内容について除外申請を受け付けると、過去のチェック内容の除外申請の情報が記憶された記憶部を参照し、前記特定のチェック内容と同種類のチェック内容の除外申請を特定し、前記同種類のチェック内容の除外申請の申請結果と、前記特定のチェック内容の前記複数の階層における位置と前記同種類のチェック内容の前記複数の階層における位置との差分と、に応じた、前記特定のチェック内容についての除外申請の認否判断に関する参考情報を出力する、処理を実行する処理部を有する参考情報出力装置である。
【発明の効果】
【００１４】
除外申請に関して参考になる情報を出力することができる。
【図面の簡単な説明】
【００１５】
【図１】図１は参考情報出力システムの一例を説明するための図である。
【図２】図２は第２サーバのハードウェア構成の一例である。
【図３】図３は第１サーバの機能ブロック図の一例である。
【図４】図４は第２サーバの機能ブロック図の一例である。
【図５】図５はチェック結果テーブルの一例である。
【図６】図６は除外ルールテーブルの一例である。
【図７】図７は開発端末の機能ブロック図の一例である。
【図８】図８は第１サーバの動作の一例を示すフローチャートである。
【図９】図９は第２サーバの動作の一例を示すフローチャートである。
【図１０】図１０は開発端末の動作の一例を示すフローチャートである。
【図１１】図１１はエディタ画面の一例である。
【図１２】図１２は第２サーバの動作の一例を示すフローチャートである。
【図１３】図１３は履歴解析処理の一例を示すフローチャートである。
【図１４】図１４は履歴解析処理を説明する図の一例である。
【図１５】図１５は履歴解析処理を説明する図の他の一例である。
【図１６】図１６は開発端末の動作の一例を示すフローチャートである。
【図１７】図１７は除外申請画面の一例である。
【図１８】図１８は第２サーバの動作の一例を示すフローチャートである。
【図１９】図１９は管理者端末の動作の一例を示すフローチャートである。
【図２０】図２０は除外申請一覧画面の一例である。
【図２１】図２１は除外申請確認画面の一例である。
【発明を実施するための形態】
【００１６】
以下、本件を実施するための形態について図面を参照して説明する。
【００１７】
図１は参考情報出力システムＳの一例を説明するための図である。参考情報出力システムＳは除外申請に関して参考になる参考情報を出力するコンピュータシステムである。参考情報出力システムＳは複数台の開発端末１００と第１サーバ２００と参考情報出力装置としての第２サーバ３００と管理者端末４００を備えている。図１では、開発端末１００及び管理者端末４００の一例としてPersonal Computer（ＰＣ）が示されているが、タブレット端末といったスマートデバイスであってもよい。また、図１では、複数台の開発端末１００が示されているが、開発端末１００は１台であってもよい。さらに、複数台の開発端末１００の一部は互いに異なる建物（例えば遠隔地の建物など）に配置されていてもよい。
【００１８】
開発端末１００、第１サーバ２００、第２サーバ３００及び管理者端末４００は通信ネットワークＮＷを介して互いに接続されている。通信ネットワークＮＷとしては例えばインターネットやLocal Area Network（ＬＡＮ）などの有線ネットワークがある。通信ネットワークＮＷの一部に電波を利用した無線ネットワークが利用されていてもよい。
【００１９】
開発端末１００はソースコードを作成する開発者によって使用される。開発者がソースコードを作成又は修正し終えると、開発端末１００は開発者からの指示に従ってソースコードを第１サーバ２００に送信する。第１サーバ２００はソースコードに対する静的解析を実行する。より詳しくは、第１サーバ２００は開発端末１００からソースコードが送信されると、ソースコードを受信して記憶する。受信後、第１サーバ２００は定期的に又は非定期的に自身に搭載された種々の静的解析機能を利用してソースコードに対する静的解析を実行し、解析結果を表す電子ファイルをチェック結果として第２サーバ３００へアップロードする。
【００２０】
第２サーバ３００は第１サーバ２００からアップロードされたチェック結果を記憶する。また、第２サーバ３００は除外申請に関して参考になる参考情報を開発端末１００に出力する。より詳しくは、第２サーバ３００は開発端末１００からチェック結果のチェック内容（具体的には指摘メッセージ）の提供が要求されると、チェック結果と過去のチェック結果に対してなされた除外申請に対する対応を利用して参考情報を特定し、チェック内容と特定した参考情報を組にして開発端末１００に出力する。開発者は開発端末１００に出力されたチェック内容と参考情報を確認して、そのチェック内容に対して除外申請を管理者に要求するか否か判断する。特に、参考情報は除外申請推奨と修正推奨を含んでいる。除外申請推奨は、特定のチェック結果の除外申請を推奨する情報である。修正推奨は除外申請を行わずに特定のチェック結果と対応付けられたソースコードの対応する箇所の修正を推奨する情報である。
【００２１】
したがって、開発者は開発端末１００に除外申請推奨が出力されれば、無駄な指摘であることから、除外申請を管理者に要求すると除外申請が承認される可能性が高いと判断し、除外申請を行うようになる。逆に、開発者は開発端末１００に修正推奨が出力されれば、有益な指摘であることから除外申請を管理者に要求しても除外申請が差し戻される可能性が高いと判断し、除外申請を行わずに、対応箇所の修正を行うようになる。これにより、開発の早い段階でソースコードの品質を向上させることができる。
【００２２】
開発端末１００で除外申請が行われると、開発端末１００は除外申請の申請内容を第２サーバ３００に送信する。第２サーバ３００は除外申請の申請内容を受信すると、受信した申請内容を仮登録という登録形式で記憶する。ソースコードの品質を管理する管理者は管理者端末４００を操作して仮登録の申請内容を管理者端末４００に表示させ、その申請内容を承認して受領するか、又は、承認せずに差し戻すか判断する。
【００２３】
管理者が申請内容を承認する操作を管理者端末４００に行うと、管理者端末４００は第２サーバ３００に承認を表す情報を送信する。そして、第２サーバ３００は承認を表す情報を受信すると、仮登録の申請内容を本登録の申請内容に更新する。具体的には、第２サーバ３００は登録内容を仮登録から受領に書き換える。逆に、管理者が申請内容を差し戻す操作を管理者端末４００に行うと、管理者端末４００は第２サーバ３００に差戻しを表す情報を送信する。そして、第２サーバ３００は差戻しを表す情報を受信すると、同様に、仮登録の申請内容を本登録の申請内容に更新する。具体的には、第２サーバ３００は登録内容を仮登録から差戻しに書き換える。これにより、第２サーバ３００には、除外申請に対する対応として受領又は差戻しを含むチェック結果が履歴として蓄積される。そして、この履歴が過去のチェック結果として次回の除外申請の際に利用されるため、利用回数が増加するに従って、精度の高い参考情報が出力される。
【００２４】
以下、上述した開発端末１００、第１サーバ２００、第２サーバ３００、及び管理者端末４００の詳細について図面を参照して説明する。
【００２５】
図２は第２サーバ３００のハードウェア構成の一例である。尚、開発端末１００，第１サーバ２００、及び管理者端末４００については基本的に第２サーバ３００と同様の構成であるため、説明を省略する。
【００２６】
第２サーバ３００は、少なくともCentral Processing Unit（ＣＰＵ）３００Ａ、Random Access Memory（ＲＡＭ）３００Ｂ、Read Only Memory（ＲＯＭ）３００Ｃ、及びネットワークＩ／Ｆ（インタフェース）３００Ｄを含んでいる。第２サーバ３００は、必要に応じて、Hard Disk Drive（ＨＤＤ）３００Ｅ、入力Ｉ／Ｆ３００Ｆ、出力Ｉ／Ｆ３００Ｇ、入出力Ｉ／Ｆ３００Ｈ、ドライブ装置３００Ｉの少なくとも１つを含んでいてもよい。ＣＰＵ３００Ａからドライブ装置３００Ｉまでは、内部バス３００Ｊによって互いに接続されている。少なくともＣＰＵ３００ＡとＲＡＭ３００Ｂとが協働することによってコンピュータが実現される。
【００２７】
入力Ｉ／Ｆ３００Ｆには、入力装置７１０が接続される。入力装置７１０としては、例えばキーボードやマウスなどがある。
出力Ｉ／Ｆ３００Ｇには、表示装置７２０が接続される。表示装置７２０としては、例えば液晶ディスプレイがある。
入出力Ｉ／Ｆ３００Ｈには、半導体メモリ７３０が接続される。半導体メモリ７３０としては、例えばUniversal Serial Bus（ＵＳＢ）メモリやフラッシュメモリなどがある。入出力Ｉ／Ｆ３００Ｈは、半導体メモリ７３０に記憶されたプログラムやデータを読み取る。
入力Ｉ／Ｆ３００Ｆ及び入出力Ｉ／Ｆ３００Ｈは、例えばＵＳＢポートを備えている。出力Ｉ／Ｆ３００Ｇは、例えばディスプレイポートを備えている。
【００２８】
ドライブ装置３００Ｉには、可搬型記録媒体７４０が挿入される。可搬型記録媒体７４０としては、例えばCompact Disc（ＣＤ）−ＲＯＭ、Digital Versatile Disc（ＤＶＤ）といったリムーバブルディスクがある。ドライブ装置３００Ｉは、可搬型記録媒体７４０に記録されたプログラムやデータを読み込む。
ネットワークＩ／Ｆ３００Ｄは、例えばポートとPhysical Layer Chip（ＰＨＹチップ）とを備えている。第２サーバ３００は、ネットワークＩ／Ｆ３００Ｄを介して通信ネットワークＮＷと接続される。
【００２９】
上述したＲＡＭ３００Ｂには、ＲＯＭ３００ＣやＨＤＤ３００Ｅに記憶されたプログラムがＣＰＵ３００Ａによって格納される。ＲＡＭ３００Ｂには、可搬型記録媒体７４０に記録されたプログラムがＣＰＵ３００Ａによって格納される。格納されたプログラムをＣＰＵ３００Ａが実行することにより、第２サーバ３００は後述する各種の機能を実現し、また、後述する各種の処理を実行する。尚、プログラムは後述するフローチャートに応じたものとすればよい。
【００３０】
続いて、図３を参照して、第１サーバ２００の機能について説明する。
【００３１】
図３は第１サーバ２００の機能ブロック図の一例である。第１サーバ２００は、図３に示すように、Ｇｉｔ２１０、継続的インテグレーション部２２０、第１情報処理部２３０を含んでいる。特に、継続的インテグレーション部２２０は静的解析部２２１を含み、静的解析部２２１は第１静的解析部２２１Ａ及び第２静的解析部２２１Ｂを含んでいる。一方、第１情報処理部２３０は第３静的解析部２３１を含んでいる。
【００３２】
Ｇｉｔ２１０はバージョン管理システム又はリポジトリの一種である。したがって、開発端末１００からソースコードＳＣが送信されると、Ｇｉｔ２１０はソースコードＳＣを記憶する。
継続的インテグレーション部２２０はソースコードインスペクションといったソースコード作成時の品質改善やソースコードの納期短縮に関する機能を提供する。継続的インテグレーション部２２０としては、例えばJenkinsやHudson（登録商標）などがある。継続的インテグレーション部２２０はＧｉｔ２１０からソースコードＳＣを定期的に又は非定期的に取得し、取得したソースコードＳＣを静的解析部２２１に格納する。例えば継続的インテグレーション部２２０はＧｉｔ２１０にソースコードＳＣが記憶された時点でソースコードＳＣを取得したり、特定の設定時刻にソースコードＳＣを取得したりする。
【００３３】
第１静的解析部２２１Ａ及び第２静的解析部２２１ＢはソースコードＳＣに対してそれぞれ異なる静的解析を実行する。例えば、第１静的解析部２２１Ａは静的解析を実行することによりコーディング規約違反を発見し、第２静的解析部２２１Ｂは静的解析を実行することによりバグなどの欠陥を発見する。尚、第１静的解析部２２１Ａとしては例えばCheckStyle（登録商標）がある。第２静的解析部２２１Ｂとしては例えばFindBugs（登録商標）がある。第１静的解析部２２１Ａ及び第２静的解析部２２１Ｂは静的解析の解析結果を表すExtensible Markup Language（ＸＭＬ）形式の電子ファイルＦ１，Ｆ２をチェック結果として第２サーバ３００に出力する。
【００３４】
一方、第１情報処理部２３０は静的解析部２２１に格納されたソースコードＳＣを複製して取得する。第３静的解析部２３１はソースコードＳＣに対して上述した第１静的解析部２２１Ａ及び第２静的解析部２２１Ｂと異なる静的解析を実行する。第３静的解析部２３１は静的解析の解析結果を表すComma-Separated Values（ＣＳＶ）形式の電子ファイルＦ３をチェック結果として第２サーバ３００に出力する。
【００３５】
続いて、図４から図７までを参照して、開発端末１００及び第２サーバ３００の機能について説明する。
【００３６】
図４は第２サーバ３００の機能ブロック図の一例である。図５はチェック結果テーブルＴ１の一例である。図６は除外ルールテーブルＴ２の一例である。図７は開発端末１００の機能ブロック図の一例である。
【００３７】
まず、図４に示すように、第２サーバ３００は、第２情報処理部３１０、チェック結果テーブルＴ１、及び除外ルールテーブルＴ２を含んでいる。特に、第２情報処理部３１０は、チェック結果登録部３１１、チェック結果検索部３１２、チェック結果除外部３１３、除外ルール履歴解析部３１４、除外申請仮登録部３１５、及び除外申請登録部３１６を含んでいる。
【００３８】
チェック結果登録部３１１は第１サーバ２００から送信されたチェック結果をチェック結果テーブルＴ１に格納する。上述したように、チェック結果は異なる形式の電子ファイルＦ１，Ｆ２，Ｆ３であるため、チェック結果登録部３１１は、まず電子ファイルＦ１，Ｆ２，Ｆ３をとりまとめ、電子ファイルＦ１，Ｆ２，Ｆ３の形式を整えてからチェック結果テーブルＴ１に格納する。これにより、チェック結果テーブルＴ１はソースコードＳＣに対して実行された静的解析のチェック結果を記憶する。
【００３９】
図５を参照して具体的に説明すると、チェック結果テーブルＴ１はチェック結果に関する種々の項目を構成要素として含んでいる。各項目について説明すると、実行時間は静的解析が実行された時刻を表している。プロジェクト名はソースコードＳＣが使用されるプロジェクトの名称を表している。プロジェクト名はApplication Programming Interface（ＡＰＩ）を利用して画面上又は画面内から取得される。ソースパスはソースコードＳＣのパスを表している。パッケージ、クラス、メソッドはJava（登録商標）の構造を表している。これらの構造に加えてインタフェースやメンバーを加えてもよい。行はソースコードＳＣの行番号を表している。ツール名は静的解析ツールの略称を表している。例えばツール名「ＦＢ」は上述したFindBugs（登録商標）を表している。ルールＩＤは静的解析ツールのチェック項目を一意に示す識別情報を表している。メッセージは静的解析による指摘を表している。例えば、静的解析によりソースコードＳＣの不具合や欠陥が発見されると、メッセージ「修正してください」などが格納される。案件名は例えばプロジェクトの対象となる企業の名称を表している。ステータスは推奨ステータスを表しており、後述する推奨ステータスを更新する処理により、除外申請推奨（図５において除外推奨と表記）又は修正推奨のいずれかが推奨ステータスとして格納される。したがって、推奨ステータスを更新する処理がなされる前であれば、ステータスには除外推奨及び修正推奨は格納されず、ｎｕｌｌが格納される。言い換えれば、チェック結果格納直後のチェック結果テーブルＴ１は推奨ステータス以外の構成要素を含んでいる。
【００４０】
図４に戻り、除外ルールテーブルＴ２は過去の除外申請の申請内容とその申請内容に対する対応を表す除外ルールを記憶する。具体的には図６に示すように、除外ルールテーブルＴ２は除外ルールに関する種々の項目を構成要素として含んでいる。以下、除外ルールの構成要素について説明するが、上述したチェック結果と同一の構成要素についてはその説明を省略する。まず、申請日、申請者、チーム、及び申請理由はそれぞれ除外申請の申請日、申請者、申請者が所属するチームの名称、及び除外申請を行う理由を表している。ステータスは除外申請に対する対応状況を表している。例えば、申請者が除外申請を行うと、まず、申請内容などが仮登録という形式で除外ルールに格納される。そして、管理者が除外申請を承認すると、除外ルールにおけるステータスが仮登録から受領に書き換えられる。逆に、管理者が除外申請を差し戻すと、除外ルールにおけるステータスが仮登録から差戻しに書き換えられる。コメントは管理者が承認又は差戻しを行った理由を表している。対応者及び対応日はそれぞれ除外申請の対応を行った者と対応した日を表している。尚、除外ルールテーブルＴ２にソースコードＳＣの行番号を含めてもよい。このように、除外ルールテーブルＴ２により除外申請に対してなされた対応が履歴として管理され、パッケージ、クラス、メソッド、静的解析ツールなどに応じた、除外申請に対する過去の対応傾向が除外ルールテーブルＴ２に蓄積される。
【００４１】
次に、図７に示すように、開発端末１００は統合開発環境部１１０を含んでいる。統合開発環境部１１０は例えばEclipse（登録商標）やVisual Studio、WideStudioなどによって実現される。統合開発環境部１１０は第３情報処理部１１１を含み、特に、第３情報処理部１１１はプラグイン実行部１１１Ａ、画面表示部１１１Ｂ、及び除外申請部１１１Ｃを含んでいる。
【００４２】
プラグイン実行部１１１Ａはエディタ画面１０上に表示された特定の文字列に対し、特定の操作が行われたことを検出すると、プラグインを実行する。詳細は後述するが、例えばエディタ画面１０上に表示された静的解析ツールを表す文字列に対し、その文字列を指示する特定の操作（例えば左クリックなど）が行われたことをプラグイン実行部１１１Ａが検出すると、エディタ画面１０上又はエディタ画面１０が有するプロジェクト名を取得して、第２サーバ３００に送信する。第２サーバ３００はプロジェクト名を利用して後述する種々の情報処理を実行し、除外申請推奨や修正推奨といった参考情報とチェック内容を組にして出力する。画面表示部１１１Ｂは、第２サーバ３００から出力されたチェック内容と参考情報をエディタ画面１０上に出力する。これにより、エディタ画面１０上に表示されたソースコードＳＣの該当箇所の近傍にチェック内容と除外申請推奨や修正推奨といった参考情報とが出現するとともに、除外申請画面２０を起動して表示させるためのマーカーが表示される。
【００４３】
さらに、エディタ画面１０上に表示されたマーカーに対し、そのマーカーを指示する特定の操作（例えば右クリックなど）が行われると、除外申請画面２０が開発端末１００に表示される。さらに、除外申請画面２０上に申請する理由などが入力されて申請を指示する特定の操作が行われると、除外申請部１１１Ｃはその特定の操作を検出し、除外申請画面２０上に表示された申請内容などを第２サーバ３００に送信する。
【００４４】
図４に戻り、チェック結果検索部３１２は開発端末１００からプロジェクト名が送信されると、受信したプロジェクト名に基づいてチェック結果テーブルＴ１を検索する。チェック結果除外部３１３はチェック結果検索部３１２による検索結果としてのチェック結果を取得する。また、チェック結果検索部３１２は受信したプロジェクト名に基づいて除外ルールテーブルＴ２を検索する。チェック結果除外部３１３はチェック結果検索部３１２による検索結果としての除外ルールを取得する。チェック結果除外部３１３は取得した除外ルールを利用してチェック結果の一部を除外（フィルタリング）し、除外済みのチェック結果と除外ルールとを除外ルール履歴解析部３１４に出力する。すなわち、チェック結果除外部３１３は除外ルールに該当しないチェック結果を後続の処理対象から除外し、後続の処理で利用するチェック結果に絞り込む。
【００４５】
除外ルール履歴解析部３１４は除外済みのチェック結果と除外ルールを利用して、除外済みのチェック結果における推奨ステータスを更新する。これにより、除外済みのチェック結果には除外申請推奨や修正推奨といった参考情報が格納される。更新後、除外ルール履歴解析部３１４は推奨ステータスを更新した除外済みチェック結果をプラグインフォーマット型に変換し、チェック結果検索部３１２に出力する。尚、除外ルール履歴解析部３１４については後にさらに詳しく説明する。チェック結果検索部３１２はプラグインフォーマット型に変換された除外済みチェック結果をＪＳＯＮ形式に変換し、ＪＳＯＮ形式に変換された除外済みのチェック結果に含まれるチェック内容と参考情報を開発端末１００に出力する。これにより、上述した画面表示部１１１Ｂはチェック内容と参考情報をエディタ画面１０上に出力することができる。
【００４６】
除外申請仮登録部３１５は開発端末１００から送信された申請内容などを仮登録というステータスで除外ルールテーブルＴ２に登録する。一方、上述した除外ルール履歴解析部３１４は管理者端末４００からの指示に基づいて、除外ルールテーブルＴ２から全ての除外ルールを取得して保持する。また、除外ルール履歴解析部３１４は管理者端末４００からの別の指示に基づいて、申請内容と類似する除外ルールを抽出して保持する。管理者端末４００は除外ルール履歴解析部３１４が保持する除外ルールを申請内容と併せて取得する。これにより、管理者端末４００は申請内容とその申請内容に類似する除外ルールを表示することができる。除外申請登録部３１６は申請内容に対する対応に関する指示を検出すると、対応に応じたステータスに除外ルールを更新する。具体的には、除外申請登録部３１６は申請内容を承認する場合、除外ルールの仮登録を受領に書き換える。逆に、除外申請登録部３１６は申請内容を差し戻す場合、除外ルールの仮登録を差戻しに書き換える。
【００４７】
続いて、図８から図２１を参照して、開発端末１００、第１サーバ２００、第２サーバ３００、及び管理者端末４００の各動作について説明する。
【００４８】
まず、図８及び図９を参照して、チェック結果の登録する処理について説明する。図８は第１サーバ２００の動作の一例を示すフローチャートである。図９は第２サーバ３００の動作の一例を示すフローチャートである。まず、図８に示すように、第１サーバ２００のＧｉｔ２１０はソースコードＳＣを受信するまで待機する（ステップＳ１０１：ＮＯ）。Ｇｉｔ２１０はソースコードＳＣを受信すると（ステップＳ１０１：ＹＥＳ）、Ｇｉｔ２１０はソースコードＳＣを記憶する（ステップＳ１０２）。ステップＳ１０２の処理が完了すると、次いで、継続的インテグレーション部２２０はＧｉｔ２１０に記憶されたソースコードＳＣを取得する（ステップＳ１０３）。ステップＳ１０３の処理が完了すると、次いで、第１情報処理部２３０は継続的インテグレーション部２２０が取得したソースコードＳＣを複製する（ステップＳ１０４）。
【００４９】
ステップＳ１０４の処理が完了すると、次いで、第１静的解析部２２１Ａ及び第２静的解析部２２１Ｂは継続的インテグレーション部２２０が取得したソースコードＳＣに対しそれぞれ静的解析を実行し、第３静的解析部２３１は第１情報処理部２３０が複製したソースコードＳＣに対し静的解析を実行する（ステップＳ１０５）。ステップＳ１０５の処理が完了すると、第１静的解析部２２１Ａ、第２静的解析部２２１Ｂ及び第３静的解析部２３１はそれぞれ静的解析の解析結果をチェック結果として第２サーバ３００にアップロードし（ステップＳ１０６）、処理を終了する。
【００５０】
一方、図９に示すように、第２サーバ３００のチェック結果登録部３１１はチェック結果がアップロードされるまで待機する（ステップＳ２０１：ＮＯ）。チェック結果登録部３１１はチェック結果がアップロードされると（ステップＳ２０１：ＹＥＳ）、チェック結果をチェック結果テーブルＴ１に格納し（ステップＳ２０２）、処理を終了する。これにより、チェック結果テーブルＴ１はソースコードＳＣに対する静的解析のチェック結果を記憶する。
【００５１】
次に、図１０から図１２までを参照して、エディタ画面１０に参考情報を表示するまでの処理について説明する。
【００５２】
図１０は開発端末１００の動作の一例を示すフローチャートである。図１１はエディタ画面１０の一例である。図１２は第２サーバ３００の動作の一例を示すフローチャートである。
【００５３】
まず、図１０に示すように、プラグイン実行部１１１Ａは特定操作を検出するまで待機する（ステップＳ３０１：ＮＯ）。具体的には、図１１に示すように、プラグイン実行部１１１Ａはエディタ画面１０のメニューバーなどに表示された静的解析ツールを表す特定の文字列（例えばCodeG）に対し、特定操作（例えばクリック）が行われたことを検出するまで待機する。プラグイン実行部１１１Ａは特定操作を検出すると（ステップＳ３０１：ＹＥＳ）、プラグインを実行する（ステップＳ３０２）。具体的には、プラグイン実行部１１１Ａはエディタ画面１０が有するプロジェクト名（不図示）を取得して第２サーバ３００に送信する。これにより、エディタ画面１０上に表示されたソースコードＳＣに対するチェック内容と参考情報の出力が開始する。ステップＳ３０２の処理が完了すると、画面表示部１１１Ｂはチェック内容等（具体的にはチェック内容及び参考情報）を受信するまで待機する（ステップＳ３０３：ＮＯ）。
【００５４】
一方、図１２に示すように、第２サーバ３００のチェック結果検索部３１２はプラグインが実行されるまで待機する（ステップＳ４０１：ＮＯ）。より詳しくは、チェック結果検索部３１２はプラグイン実行部１１１Ａからプロジェクト名が送信されるまで待機する。チェック結果検索部３１２はプラグインが実行されたと判断すると（ステップＳ４０１：ＹＥＳ）、チェック結果テーブルを検索する（ステップＳ４０２）。より詳しくは、チェック結果検索部３１２はプロジェクト名に基づいてチェック結果テーブルＴ１を検索する。ステップＳ４０２の処理が完了すると、チェック結果除外部３１３はチェック結果を取得する（ステップＳ４０３）。より詳しくは、チェック結果除外部３１３はプロジェクト名に応じたチェック結果をチェック結果テーブルから取得する。
【００５５】
ステップＳ４０３の処理が完了すると、次いで、チェック結果検索部３１２は除外ルールテーブルＴ２を検索する（ステップＳ４０４）。より詳しくは、チェック結果検索部３１２はプロジェクト名に基づいて除外ルールテーブルＴ２を検索する。ステップＳ４０４の処理が完了すると、チェック結果除外部３１３は除外ルールを取得する（ステップＳ４０５）。より詳しくは、チェック結果除外部３１３はプロジェクト名に応じた除外ルールを除外ルールテーブルＴ２から取得する。
【００５６】
ステップＳ４０５の処理が完了すると、次いで、チェック結果除外部３１３は除外ルールを利用してチェック結果の一部を除外する（ステップＳ４０６）。例えば、取得したチェック結果と除外ルールの対応する構成要素同士を比較して、構成要素が一致するチェック結果に絞り込む。構成要素としては、例えばパッケージ、クラス、メソッドなどがある。すなわち、除外ルールを利用できない一部のチェック結果をチェック結果除外部３１３はフィルタリングして、除外済みのチェック結果を出力する。ステップＳ４０６の処理が完了すると、除外ルール履歴解析部３１４は履歴解析処理を実行する（ステップＳ４０７）。履歴解析処理は除外済みのチェック結果と同種類の除外ルールに対してなされた過去の対応履歴を解析し、除外済みのチェック結果の推奨ステータスに参考情報を登録する処理である。履歴解析処理については後に詳しく説明する。
【００５７】
ステップＳ４０７の処理が完了すると、除外ルール履歴解析部３１４はチェック結果を変換する（ステップＳ４０８）。より詳しくは、除外ルール履歴解析部３１４は除外済みのチェック結果をプラグインフォーマット型に変換し、チェック結果検索部３１２はプラグインフォーマット型に変換された除外済みのチェック結果をＪＳＯＮ形式に変換する。ステップＳ４０８が完了すると、チェック結果検索部３１２はチェック内容と参考情報を出力する（ステップＳ４０９）。より詳しくは、チェック結果検索部３１２はＪＳＯＮ形式に変換された除外済みのチェック結果に含まれるチェック内容と参考情報を開発端末１００に送信する。
【００５８】
図１０に戻り、第２サーバ３００からチェック内容と参考情報が送信されると、開発端末１００の画面表示部１１１Ｂはチェック内容と参考情報とを受信し（ステップＳ３０３：ＹＥＳ）、チェック内容と参考情報を表示する（ステップＳ３０４）。より詳しくは、画面表示部１１１Ｂはエディタ画面１０上に表示されたソースコードＳＣの対応する箇所に、チェック内容としてのメッセージと参考情報を組みにして表示させるとともに、対応する箇所の近傍にマーカーを表示させる。これにより、図１１に示すように、例えばソースコードＳＣの６行目の直下に静的解析による特定のメッセージ「〜〜〜してください。」と除外申請推奨である旨の組を含む１つの画像領域ＩＭ１内が出現する。そして、ソースコードＳＣの６行目の行番号の左脇にマーカーＭ１が出現する。同様に、例えばソースコードＳＣの１５行目の直下に静的解析による特定のメッセージ「〜〜〜してください。」と修正推奨である旨の組を含む１つの画像領域ＩＭ２内が出現する。そして、ソースコードＳＣの１５行目の行番号の左脇にマーカーＭ２が出現する。
【００５９】
この結果、開発者は静的解析によるメッセージだけで除外申請を行うか否か判断せず、メッセージと併せて出力された参考情報（具体的には除外申請推奨又は修正推奨）も確認して除外申請を行うか否か判断する。例えば、除外申請推奨が出力されていれば、開発者はその行に対するメッセージは無駄な指摘であり、除外申請を行えば承認される可能性が高いと判断し、除外申請を行うようになる。逆に、修正推奨が出力されていれば、開発者はその行に対するメッセージは有益な指摘であり、除外申請を行えば差し戻される可能性が高いと判断し、ソースコードＳＣの修正を行うようになる。
【００６０】
したがって、開発者はチェック結果のメッセージを個別に確認して除外申請の要否を決定する必要がなく、除外申請の手間が削減される。特に、納期間近など開発終盤に大量のチェック結果がフィードバックされると開発者の開発意欲がそがれるおそれがあるが、開発初期の段階で有益な指摘と無駄な指摘が区別されたチェック結果がフィードバックされる。このため、開発者は効率的にソースコードＳＣを修正でき、ソースコードＳＣの品質低下を抑制することができる。
【００６１】
ここで、図１３から図１５までを参照して、上述した履歴解析処理についてさらに詳しく説明する。
【００６２】
図１３は履歴解析処理の一例を示すフローチャートである。図１４は履歴解析処理を説明する図の一例である。図１５は履歴解析処理を説明する図の他の一例である。図１２を参照して説明したステップＳ４０６の処理が完了すると、図１３に示すように、除外ルール履歴解析部３１４はチェック結果と除外ルールのそれぞれに対し階層文字列を生成する（ステップＳ５０１）。例えば、図１４（ａ）に示すように、除外ルール履歴解析部３１４は、パッケージを表す文字列ａ．ｂ（例えばcom.fujitsuなど）、クラスを表す文字列ｃ（例えばBclassなど）、メソッドを表す文字列ｄ（例えばcopyなど）をドットで結合した階層文字列ａ．ｂ．ｃ．ｄを生成する。尚、パッケージだけを利用する場合には、ステップＳ５０１の処理はスキップされる。
【００６３】
ステップＳ５０１の処理が完了すると、図１３に示すように、除外ルール履歴解析部３１４はチェック結果の階層文字列と除外ルールの階層文字列をそれぞれ分割する（ステップＳ５０２）。例えば、図１４（ｂ）に示すように、階層文字列の最下階層から順に最上階層になるまでドット毎に分割し、メインメモリなどの記憶領域に保持する。
【００６４】
ステップＳ５０２の処理が完了すると、次いで、除外ルール履歴解析部３１４は除外ルールの除外申請受領件数と除外申請差戻件数を階層文字列毎に計数する（ステップＳ５０３）。より詳しくは、まず、除外ルール履歴解析部３１４は１つ目のチェック結果のルールＩＤと一致するルールＩＤの除外ルールを１つ抽出する。次に、除外ルール履歴解析部３１４は抽出した除外ルールのステータスに仮登録が格納されていれば、次の除外ルールを１つ抽出する。一方、除外ルール履歴解析部３１４はステータスに受領が格納されていれば、除外申請受領件数をインクリメントし、差戻が格納されていれば、除外申請差戻件数をインクリメントする。そして、次の除外ルールを１つ抽出する。除外ルール履歴解析部３１４は１つ目の除外済みのチェック結果に対してルールＩＤが一致する全ての除外ルールに対して同様の処理を行う。さらに、除外ルール履歴解析部３１４は１つ目の除外済みのチェック結果に対する処理が完了すると、２つ目以降のチェック結果に対しても同様の処理を行う。これにより、図１４（ｃ）に示すように、除外テーブルの各階層文字列に対し、除外申請受領件数と除外申請差戻件数が計数される。
【００６５】
ステップＳ５０３の処理が完了すると、次いで、除外ルール履歴解析部３１４は受領確度ポイントＰ１を算出し（ステップＳ５０４）、次いで、差戻確度ポイントＰ２を算出する（ステップＳ５０５）。図１５（ａ）を参照して具体的に説明すると、除外ルール履歴解析部３１４は、まず、受領確度ポイントＰ１を算出するための計算テーブルＴ３と差戻確度ポイントＰ２を算出するための計算テーブルＴ４を生成する。次に、除外ルール履歴解析部３１４は、計算テーブルＴ３，Ｔ４のそれぞれに対し、同じ階層文字列を項目ｘとして列方向にマッピングし、項目ｙとして行方向にマッピングする。そして、除外ルール履歴解析部３１４は、階層差が存在する箇所全てに対し、受領確度基礎ポイントＰ１´及び差戻確度基礎ポイントＰ２´を算出する。最後に、除外ルール履歴解析部３１４は、受領確度基礎ポイントＰ１´の行方向の総和を受領確度ポイントＰ１として算出し、差戻確度基礎ポイントＰ２´の行方向の総和を差戻確度ポイントＰ２として算出する。
【００６６】
ここで、除外ルール履歴解析部３１４は、受領確度基礎ポイントＰ１´及び差戻確度基礎ポイントＰ２´のいずれも所定の算出関数ｆ（ｘ，ｙ）を利用して算出する。算出関数ｆ（ｘ，ｙ）は以下の式により表される。
算出関数ｆ（ｘ，ｙ）＝（階層上昇係数＾階層上昇数）
×（階層下降係数＾階層下降数）
×（ｘの受領件数又は差戻件数）
【００６７】
上述した階層上昇係数及び階層下降係数は階層の関連度（例えば距離）を表しており、階層上昇係数より階層下降係数の方に大きな値が設定される。例えば階層上昇係数に０．１が設定されれば、階層下降係数には０．５が設定される。すなわち、上位の階層文字列になればなるほど、階層文字列の下位には互いに異なる階層文字列が増加し、関連度が薄くなる。逆に、下位の階層文字列になればなるほど、階層文字列の下位には互いに異なる階層文字列が減少し、関連度が高くなる。このため、階層上昇係数より階層下降係数の方に大きな値が設定される。
【００６８】
また、階層上昇数及び階層下降数は階層文字列の後方不一致階層数を表している。例えば、列方向に展開した階層文字列ａと行方向に展開した階層文字列ａ．ｂは後方不一致階層数が１であり、階層文字列ａを基準とすると階層文字列ａ．ｂでは下位に．ｂが結合されているため、階層は下降している。例えば、列方向に展開した階層文字列ａ．ｂ．ｃ．ｄと行方向に展開した階層文字列ａは後方不一致階層数が３であり、階層文字列ａ．ｂ．ｃ．ｄを基準とすると階層文字列ａでは下位に何も結合されていないため、階層は上昇している。したがって、図１５（ａ）に示すように、計算テーブルＴ３，Ｔ４は階層上昇ゾーンＺ１と階層下降ゾーンＺ２とに大別される。そして、ｘの受領件数又は差戻件数は、ステップＳ５０３の処理で算出された除外申請受領件数と除外申請差戻件数に対応する。以上の処理により、除外ルール履歴解析部３１４は受領確度ポイントＰ１と差戻確度ポイントＰ２を算出する。尚、除外ルール履歴解析部３１４は、項目ｘと項目ｙをマッピングした計算テーブルＴ３，Ｔ４を出力してもよく、さらに、算出した受領確度ポイントＰ１と差戻確度ポイントＰ２も含めた計算テーブルＴ３，Ｔ４を出力してもよい。
【００６９】
図１３に戻り、ステップＳ５０５の処理が完了すると、次いで、除外ルール履歴解析部３１４は受領確度ポイントＰ１が差戻確度ポイントＰ２より大きいか否かを判断する（ステップＳ５０６）。除外ルール履歴解析部３１４は受領確度ポイントＰ１が差戻確度ポイントＰ２より大きいと判断した場合（ステップＳ５０６：ＹＥＳ）、さらに、受領確度ポイントＰ１が閾値を超えているか否かを判断する（ステップＳ５０７）。除外ルール履歴解析部３１４は受領確度ポイントＰ１が閾値を超えていると判断した場合（ステップＳ５０７：ＹＥＳ）、除外済みチェック結果の推奨ステータスを除外推奨に更新し（ステップＳ５０８）、処理を終了する。一方、除外ルール履歴解析部３１４は受領確度ポイントＰ１が閾値を超えていないと判断した場合（ステップＳ５０７：ＮＯ）、ステップＳ５０８の処理をスキップし、処理を終了する。
【００７０】
逆に、除外ルール履歴解析部３１４は受領確度ポイントＰ１が差戻確度ポイントＰ２より以下であると判断した場合（ステップＳ５０６：ＮＯ）、さらに、差戻確度ポイントＰ２が閾値を超えているか否かを判断する（ステップＳ５０９）。除外ルール履歴解析部３１４は差戻確度ポイントＰ２が閾値を超えていると判断した場合（ステップＳ５０９：ＹＥＳ）、除外済みチェック結果の推奨ステータスを修正推奨に更新し（ステップＳ５１０）、処理を終了する。一方、除外ルール履歴解析部３１４は差戻確度ポイントＰ２が閾値を超えていないと判断した場合（ステップＳ５０９：ＮＯ）、ステップＳ５１０の処理をスキップし、処理を終了する。
【００７１】
すなわち、図１５（ｂ）に示すように、受領確度ポイントＰ１と差戻確度ポイントＰ２の大小関係が判断され、ポイント値が大きい方が選択される。そして、選択された方が所定の閾値（例えば１０ポイント）を超えていれば、選択された方が採用される。図１５（ｂ）では受領確度ポイントＰ１が採用されて閾値を超えているため、除外申請推奨となるが、逆に、差戻確度ポイントＰ２が採用されて閾値を超えていれば、修正推奨となる。
【００７２】
このように、履歴解析処理では、静的解析の指摘件数がパッケージなどの階層によって偏る傾向を利用している。除外申請されている階層文字列と、同じ種類の指摘が出力された過去の階層文字列の関連度を比較して、受領確度ポイントＰ１及び差戻確度ポイントＰ２が算出される。
【００７３】
続いて、図１６から図２１などを参照して、除外申請及びその認否判断について説明する。
【００７４】
図１６は開発端末１００の動作の一例を示すフローチャートである。図１７は除外申請画面２０の一例である。図１８は第２サーバ３００の動作の一例を示すフローチャートである。図１９は管理者端末４００の動作の一例を示すフローチャートである。図２０は除外申請一覧画面３０の一例である。図２１は除外申請確認画面４０の一例である。
【００７５】
まず、図１６に示すように、除外申請部１１１ＣはマーカーＭ１，Ｍ２の操作を検出するまで待機する（ステップＳ６０１：ＮＯ）。除外申請部１１１ＣはマーカーＭ１，Ｍ２の操作を検出すると（ステップＳ６０１：ＹＥＳ）、除外申請画面２０を表示する（ステップＳ６０２）。
【００７６】
図１７を参照して具体的に説明すると、エディタ画面１０（図１１参照）上に表示されたマーカーＭ１，Ｍ２に対し、マーカーＭ１，Ｍ２を指示する特定の操作（例えば右クリックなど）が行われると、図１７に示すように、除外申請部１１１Ｃは除外申請画面２０を表示する。除外申請画面２０はツール名、ルールＩＤ、パッケージ、クラス、メソッド、メッセージ、チーム名、及び氏名を表示する表示欄Ｂｘ１、申請理由を入力する入力欄Ｂｘ２、並びに申請ボタンＢｔ１及びキャンセルボタンＢｔ２を含んでいる。除外申請部１１１ＣはマーカーＭ１，Ｍ２を指示する特定の操作を検出すると、指示したマーカーＭ１（又はマーカーＭ２）と関連付けられたツール名から氏名までをそれぞれ対応する表示欄Ｂｘ１に表示する。したがって、除外申請画面２０を利用して除外申請を行う開発者は入力欄Ｂｘ２に対して除外申請を行う理由を入力する。
【００７７】
図１６に戻り、ステップＳ６０２の処理が完了すると、除外申請部１１１Ｃは申請ボタン押下を検出するまで待機する（ステップＳ６０３：ＮＯ）。具体的には、図１７に示すように、除外申請画面２０に含まれる申請ボタンＢｔ１を押下する操作を除外申請部１１１Ｃが検出するまで待機する。除外申請部１１１Ｃは申請ボタン押下を検出すると（ステップＳ６０３：ＹＥＳ）、除外申請部１１１Ｃは申請内容を送信する（ステップＳ６０４）。すなわち、除外申請部１１１Ｃは表示欄Ｂｘ１に表示された事項及び入力欄Ｂｘ２に入力された事項、その他の事項（例えば申請日、行番号、プロジェクト名など）を含む申請内容を第２サーバ３００に送信する。
【００７８】
一方、図１８に示すように、第２サーバ３００の除外申請仮登録部３１５は申請内容を受信するまで待機する（ステップＳ７０１：ＮＯ）。除外申請仮登録部３１５は申請内容を受信すると（ステップＳ７０１：ＹＥＳ）、申請内容を除外ルールテーブルＴ２に仮登録する（ステップＳ７０２）。ステップＳ７０２の処理が完了すると、除外ルール履歴解析部３１４は一覧画面の起動を検出するまで待機する（ステップＳ７０３：ＮＯ）。一覧画面は後述する除外申請一覧画面を表している。除外ルール履歴解析部３１４は一覧画面の起動を検出すると（ステップＳ７０３：ＹＥＳ）、除外ルールテーブルＴ２から全ての除外ルールを取得する（ステップＳ７０４）。除外ルール履歴解析部３１４は全ての除外ルールを取得すると、取得した全ての除外ルールを保持する。
【００７９】
他方、図１９に示すように、管理者端末４００が備える第４情報処理部（不図示）は一覧画面が起動されるまで待機する（ステップＳ８０１：ＮＯ）。第４情報処理部は一覧画面が起動されると（ステップＳ８０１：ＹＥＳ）、第２サーバ３００（より詳しくは除外ルール履歴解析部３１４）から全ての除外ルールを取得する（ステップＳ８０２）。ステップＳ８０２の処理が完了すると、第４情報処理部は除外申請一覧画面を表示する（ステップＳ８０３）。
【００８０】
図２０を参照して除外申請一覧画面３０について具体的に説明すると、除外申請一覧画面３０には第４情報処理部が取得した除外ルールにおける一部の構成要素が出現する。例えば、除外ルールにおけるプロジェクト名、チーム名、申請日、申請者、ツール名、及びルールＩＤが出現する。構成要素の内容及び数は適宜変更してもよい。また、出現した除外ルールの一部の構成要素を表す行には選択ボタンＢｔ３が対応付けられている。これにより、管理者は除外申請の申請状況を把握することができる。
【００８１】
図１９に戻り、ステップＳ８０３の処理が完了すると、第４情報処理部は選択ボタンＢｔ３が押下されるまで待機する（ステップＳ８０４：ＮＯ）。また、図１８に示すように、除外ルール履歴解析部３１４はステップＳ７０４の処理が完了すると、選択ボタンＢｔ３の押下を検出するまで待機する（ステップＳ７０５：ＮＯ）。
【００８２】
ここで、除外ルール履歴解析部３１４は選択ボタンＢｔ３の押下を検出すると（ステップＳ７０５：ＹＥＳ）、自身が保持する除外ルールの中から選択ボタンＢｔ３と対応付けられた申請内容と類似する除外ルールを抽出する（ステップＳ７０６）。ステップＳ７０６の処理が完了すると、除外ルール履歴解析部３１４は抽出した除外ルールを保持する。
【００８３】
一方、図１９に示すように、第４情報処理部は選択ボタンＢｔ３が押下されると（ステップＳ８０４：ＹＥＳ）、第２サーバから申請内容とその申請内容に類似する除外ルールを取得する（ステップＳ８０５）。ステップＳ８０５の処理が完了すると、第４情報処理部は除外申請確認画面を表示する（ステップＳ８０６）。
【００８４】
図２１を参照して除外申請確認画面４０について具体的に説明すると、除外申請確認画面４０には第４情報処理部が取得した申請内容４１と除外ルール４２が出現する。また、除外申請確認画面４０には除外申請の承認又は差戻しを選択する選択ボタンＢｔ４、コメントの入力欄Ｂｘ３、登録ボタンＢｔ５、キャンセルボタンＢｔ６が出現する。管理者は除外申請確認画面４０により申請内容４１と類似する過去の除外申請履歴の受領状況や差戻状況を確認して、申請内容４１に対する対応として承認又は差戻しを選択ボタンＢｔ４により選択する。その際、管理者は入力欄Ｂｘ３に対し承認又は差戻しを選択した理由をコメントとして入力し、登録ボタンＢｔ５を押下する。
【００８５】
ここで、図１９に示すように、第４情報処理部は登録ボタンＢｔ５が押下されるまで待機し（ステップＳ８０７：ＮＯ）、登録ボタンＢｔ５が押下されると（ステップＳ８０７：ＹＥＳ）、承認又は差戻しを送信する（ステップＳ８０８）。より詳しくは、第４情報処理部は選択ボタンＢｔ４により選択された方の対応を第２サーバ３００に送信する。
【００８６】
一方、図１８に示すように、除外申請登録部３１６は管理者端末４００から承認等を受信するまで待機し（ステップＳ７０７：ＮＯ）、承認等を受信すると（ステップＳ７０７：ＹＥＳ）、申請内容を本登録する（ステップＳ７０８）。すなわち、除外申請登録部３１６は対象の除外申請に対して承認が選択された場合には、その除外申請の申請内容を含む除外ルールのステータスを仮登録から受領に書き換える。逆に、除外申請登録部３１６は対象の除外申請に対して差戻しが選択された場合には、その除外申請の申請内容を含む除外ルールのステータスを仮登録から差戻しに書き換える。これにより、ステータスに受領や差戻しが格納された除外ルールが蓄積される。この除外ルールは次の参考情報の出力の際に利用されるため、適切な参考情報の出力精度が向上する。
【００８７】
このように、管理者は除外申請を行った開発者に例えば電話でその都度申請理由を確認しないで済み、管理者と開発者との間で発生する無駄なコミュニケーションを削減することができる。
【００８８】
以上、本発明の好ましい実施形態について詳述したが、本発明に係る特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。例えば、本実施形態では参考情報として特定の文字列（除外申請推奨及び修正推奨）を表示したが、例えば参考情報を○や×といった記号で表示してもよい。
【００８９】
なお、以上の説明に関して更に以下の付記を開示する。
（付記１）複数の階層により階層化されたプログラムの解析結果を取得し、取得した前記解析結果に含まれる特定のチェック内容を、前記プログラムの対応する箇所と対応付けて表示させる際、過去のチェック内容の除外申請の情報が記憶された記憶部を参照し、前記特定のチェック内容と同種類のチェック内容の除外申請を特定し、前記同種類のチェック内容の除外申請の申請結果と、前記プログラムにおける前記特定のチェック内容の前記複数の階層における位置と前記同種類のチェック内容の前記複数の階層における位置との差分と、に応じた、前記特定のチェック内容についての除外申請に関する参考情報を出力する、処理をコンピュータに実行させることを特徴とする参考情報出力プログラム。
（付記２）前記参考情報は、前記特定のチェック内容の除外申請を推奨する除外申請推奨の表示、又は、前記プログラムの対応する箇所の修正を推奨する修正推奨の表示を含む、ことを特徴とする付記１に記載の参考情報出力プログラム。
（付記３）前記特定のチェック内容を表示させる際、ユーザの属性を特定し、前記解析結果に含まれるチェック内容のうち、特定した前記属性に対応する他のチェック内容のみ表示させる、ことを特徴とする付記１又は２に記載の参考情報出力プログラム。
（付記４）複数の階層により階層化されたプログラムの解析結果に含まれる特定のチェック内容について除外申請を受け付けると、過去のチェック内容の除外申請の情報が記憶された記憶部を参照し、前記特定のチェック内容と同種類のチェック内容の除外申請を特定し、前記同種類のチェック内容の除外申請の申請結果と、前記特定のチェック内容の前記複数の階層における位置と前記同種類のチェック内容の前記複数の階層における位置との差分と、に応じた、前記特定のチェック内容についての除外申請の認否判断に関する参考情報を出力する、処理をコンピュータに実行させることを特徴とする参考情報出力プログラム。
（付記５）前記認否判断に関する参考情報は、承認又は差戻しの選択である、ことを特徴とする付記４に記載の参考情報出力プログラム。
（付記６）複数の階層により階層化されたプログラムの解析結果に含まれる特定のチェック内容について除外申請を受け付けると、過去のチェック内容の除外申請の情報が記憶された記憶部を参照し、前記特定のチェック内容と同種類のチェック内容を特定し、前記複数の階層のうち、前記特定のチェック内容を示す情報と前記同種類のチェック内容を示す情報とのそれぞれを、対応する位置にマッピングした図を出力する、処理をコンピュータに実行させることを特徴とする出力プログラム。
（付記７）複数の階層により階層化されたプログラムの解析結果を取得し、取得した前記解析結果に含まれる特定のチェック内容を、前記プログラムの対応する箇所と対応付けて表示させる際、過去のチェック内容の除外申請の情報が記憶された記憶部を参照し、前記特定のチェック内容と同種類のチェック内容の除外申請を特定し、前記同種類のチェック内容の除外申請の申請結果と、前記プログラムにおける前記特定のチェック内容の前記複数の階層における位置と前記同種類のチェック内容の前記複数の階層における位置との差分と、に応じた、前記特定のチェック内容についての除外申請に関する参考情報を出力する、処理をコンピュータが実行することを特徴とする参考情報出力方法。
（付記８）複数の階層により階層化されたプログラムの解析結果に含まれる特定のチェック内容について除外申請を受け付けると、過去のチェック内容の除外申請の情報が記憶された記憶部を参照し、前記特定のチェック内容と同種類のチェック内容の除外申請を特定し、前記同種類のチェック内容の除外申請の申請結果と、前記特定のチェック内容の前記複数の階層における位置と前記同種類のチェック内容の前記複数の階層における位置との差分と、に応じた、前記特定のチェック内容についての除外申請の認否判断に関する参考情報を出力する、処理をコンピュータが実行することを特徴とする参考情報出力方法。
（付記９）複数の階層により階層化されたプログラムの解析結果を取得し、取得した前記解析結果に含まれる特定のチェック内容を、前記プログラムの対応する箇所と対応付けて表示させる際、過去のチェック内容の除外申請の情報が記憶された記憶部を参照し、前記特定のチェック内容と同種類のチェック内容の除外申請を特定し、前記同種類のチェック内容の除外申請の申請結果と、前記プログラムにおける前記特定のチェック内容の前記複数の階層における位置と前記同種類のチェック内容の前記複数の階層における位置との差分と、に応じた、前記特定のチェック内容についての除外申請に関する参考情報を出力する、処理を実行する処理部を有する参考情報出力装置。
（付記１０）前記参考情報は、前記特定のチェック内容の除外申請を推奨する除外申請推奨の表示、又は、前記プログラムの対応する箇所の修正を推奨する修正推奨の表示を含む、ことを特徴とする付記９に記載の参考情報出力装置。
（付記１１）前記処理部は、前記特定のチェック内容を表示させる際、ユーザの属性を特定し、前記解析結果に含まれるチェック内容のうち、特定した前記属性に対応する他のチェック内容のみ表示させる、ことを特徴とする付記９又は１０に記載の参考情報出力装置。
（付記１２）複数の階層により階層化されたプログラムの解析結果に含まれる特定のチェック内容について除外申請を受け付けると、過去のチェック内容の除外申請の情報が記憶された記憶部を参照し、前記特定のチェック内容と同種類のチェック内容の除外申請を特定し、前記同種類のチェック内容の除外申請の申請結果と、前記特定のチェック内容の前記複数の階層における位置と前記同種類のチェック内容の前記複数の階層における位置との差分と、に応じた、前記特定のチェック内容についての除外申請の認否判断に関する参考情報を出力する、処理を実行する処理部を有する参考情報出力装置。
（付記１３）前記認否判断に関する参考情報は、承認又は差戻しの選択である、ことを特徴とする付記１２に記載の参考情報出力装置。
【符号の説明】
【００９０】
Ｓ  参考情報出力システム
１００  開発端末
２００  第１サーバ
３００  第２サーバ
３１０  第２情報処理部
３１１  チェック結果登録部
３１２  チェック結果検索部
３１３  チェック結果除外部
３１４  除外ルール履歴解析部
３１５  除外申請仮登録部
３１６  除外申請登録部
４００  管理者端末
Ｔ１  チェック結果テーブル
Ｔ２  除外ルールテーブル
【図１】
2018045525.tif 000003
【図２】
2018045525.tif 000004
【図３】
2018045525.tif 000005
【図４】
2018045525.tif 000006
【図５】
2018045525.tif 000007
【図６】
2018045525.tif 000008
【図７】
2018045525.tif 000009
【図８】
2018045525.tif 000010
【図９】
2018045525.tif 000011
【図１０】
2018045525.tif 000012
【図１１】
2018045525.tif 000013
【図１２】
2018045525.tif 000014
【図１３】
2018045525.tif 000015
【図１４】
2018045525.tif 000016
【図１５】
2018045525.tif 000017
【図１６】
2018045525.tif 000018
【図１７】
2018045525.tif 000019
【図１８】
2018045525.tif 000020
【図１９】
2018045525.tif 000021
【図２０】
2018045525.tif 000022
【図２１】
2018045525.tif 000023