(57)【特許請求の範囲】
【請求項１】
任意のプログラムが登録されるプログラム記憶手段と、
予め設計規約が記憶されている設計規約記憶手段と、
該プログラム記憶手段に初版または更新版の前記プログラムが新たに登録された後に、該新たに登録されたプログラムに対して前記設計規約に基づいて静的解析を実行する静的解析実行手段と、
該静的解析実行手段による前記静的解析結果として少なくとも設計規約違反箇所と違反内容が記憶される静的解析結果記憶手段と、
前記プログラム記憶手段に登録されるプログラムのうち複数の版が存在するプログラムに関して、相対的な旧版・新版となる任意の２つの版毎に、該２つの版それぞれの前記静的解析結果に基づいて、旧版における前記設計規約違反箇所と、新版において該設計規約違反箇所に対応する箇所である該当箇所とで、前記違反内容が異なる場合には、該設計規約違反箇所と該当箇所に関する情報を新旧関連情報として記憶する新旧関連情報抽出・記憶手段と、
該新旧関連情報抽出・記憶手段に記憶される新旧関連情報に基づいて、任意の設計規約に関して、前記設計規約違反箇所のプログラム文と前記該当箇所のプログラム文とを、その違反内容変化と共に表示する支援情報表示手段とを有し、
前記新旧関連情報抽出・記憶手段は、前記該当箇所に関しては違反が無い場合に前記違反内容が異なる場合と見做して、前記設計規約違反箇所と該当箇所に関する情報を新旧関連情報として記憶することを特徴とするプログラム改善支援システム。
【請求項２】
前記新旧関連情報抽出・記憶手段に記憶される前記新旧関連情報に基づいて、前記設計規約違反箇所のプログラム文と前記該当箇所のプログラム文とを、その違反内容と共に表示し、該表示内容に対する任意の評価結果入力を受け付け、入力された評価結果を前記新旧関連情報に対応付けて前記新旧関連情報抽出・記憶手段に追加記憶する変化要因評価結果入力手段を更に有し、
前記支援情報表示手段は、前記設計規約違反箇所のプログラム文と前記該当箇所のプログラム文とを、その違反内容変化と前記評価結果と共に表示することを特徴とする請求項１記載のプログラム改善支援システム。
【請求項３】
前記違反内容変化の表示は、設計規約違反箇所に係る規約違反が、前記該当箇所では違反なしとなっていることを表示するものであることを特徴とする請求項１または２に記載のプログラム改善支援システム。
【請求項４】
前記変化要因評価結果入力手段は、予め登録されている特定ユーザに対してのみ、前記評価結果入力を許可することを特徴とする請求項２記載のプログラム改善支援システム。
【請求項５】
前記変化要因評価結果入力手段は、前記評価結果入力に加えて更に任意の補足説明の入力も受け付け、入力された評価結果と補足説明を前記新旧関連情報に対応付けて前記新旧関連情報抽出・記憶手段に記憶し、
前記支援情報表示手段は、前記表示の際に該評価結果と補足説明も表示することを特徴とする請求項２記載のプログラム改善支援システム。
【請求項６】
前記支援情報表示手段は、
任意に指定される設計規約に基づいて、旧版に係る設計規約違反が該指定される設計規約に対する違反である新旧関連情報を、前記新旧関連情報抽出・記憶手段を検索して求めて一覧表示すると共に、該一覧表示中から任意の新旧関連情報を選択させる検索・選択手段と、
該検索手段で選択された新旧関連情報を用いて、前記設計規約違反箇所のプログラム文と前記該当箇所のプログラム文とその違反内容変化の表示を行う表示手段と、
を有することを特徴とする請求項１記載のプログラム改善支援システム。
【請求項７】
前記静的解析結果記憶手段に記憶された静的解析結果に基づいて、任意のプログラムの任意の版に関する設計規約違反箇所と違反内容を抽出して表示すると共に、該表示から任意の設計規約違反が指定されると、前記支援情報表示手段を起動する静的解析警告指摘箇所抽出手段を更に有し、
前記支援情報表示手段は、該静的解析警告指摘箇所抽出手段で指定された設計規約違反に関して、前記検索と一覧表示を行うことを特徴とする請求項６記載のプログラム改善支援システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、より品質の高いプログラムになるようにプログラム修正できるようにプログラマを支援するシステム等に関する。
【背景技術】
【０００２】
一般に、プログラマが任意のプログラムを作成する際には、作成したプログラムを実際に動作させて、動作が正しいことを確認し、動作が正しくない場合にはプログラム修正を行って不具合を除去する作業（デバッグ作業）が行われている。
【０００３】
しかし、一般に、このようにプログラムを実際に動作させて検証する方法では、全てのプログラム動作について確認を行うことは無理であるため、代表的な動作を選択して動作確認を実施する。このため、この方法では、確認していない動作に関して不具合が残っている可能性があるという欠点がある。
【０００４】
このような検証方法の弱点を補って、プログラムの不具合の有無の確認作業を効率的に実行するための方法として、静的解析技術が用いられることがある。静的解析では、実装したプログラムを設計規約と照合し、設計規約に合わない形式で実装されているプログラムには欠陥の疑いがあるものとして警告を行う。この方法は、プログラムを実行せずに（動作させずに）確認を行うため、静的解析と呼ばれている。
【０００５】
静的解析技術によれば、プログラムを実装した段階で確認ができるため、プログラムを動作させて確認するよりも早い段階で確認でき、確認作業を効率的に行うことにも繋がることになる。また、欠陥の疑いがある箇所を絞り込むこともできるので、ソースコードレビューを実施する際にも、効率的に作業を行うことができる。
【０００６】
また、組込みシステムにおいては、Ｃ言語のような比較的ハードウェアを意識した言語で実装されることが多いので、プログラム記述言語自身による欠陥排除の機構にはあまり依存することができないため、静的解析技術を用いることで品質レベルの向上も期待できる。
【０００７】
このような理由より、静的解析は、プログラムを実行して確認する作業と合わせて、実施されることが多い。
静的解析技術は、例えば、下記の従来技術文献に開示されている。
【０００８】
特許文献３には、規約情報のデータベースに登録されている構文解析項目等に基づいてソースプログラムを静的に解析する技術が開示されている。
特許文献４には、プログラムを制御構造ツリーに展開し、リソースの確保と解放との対応の整合性を静的に確認する技術が開示されている。
【０００９】
特許文献６には、プログラム実行中に変化しないデータ等の不変情報に関連付けられている機能単位（変数または処理）の数などを、分割されたプログラム毎に分析することにより、機能的なまとまりの程度を示す凝集度を、静的に算出する技術が開示されている。
【００１０】
特許文献７には、欠陥の可能性がある比較演算子と論理演算子との組み合わせパターンをあらかじめ作成し、これらのパターンへの一致を静的に検査することにより、欠陥の可能性があるプログラムを抽出する技術が開示されている。
【００１１】
ところで、静的解析の課題として、静的解析は通常、プログラム全体に対して解析を行うため、解析結果が膨大となることが多い。そこで、特許文献５においては、構成管理ツールと関連付けることにより、この課題を解決する技術が開示されている。すなわち、解析対象のソースコードを構成管理ツールで管理し、構成管理ツールにより付加される日時情報やラベル情報等の識別情報とともに、解析結果を解析対象毎にデータベースに蓄積することにより、分析を容易にしている。
【００１２】
また、特許文献２においては、ソースコード解析支援システム自身をリモートに配置し、各端末はソースコードを送信すると解析結果を受信できるようにして、端末側の作業者は静的解析についての多くの知識を必要とせずとも、静的解析を実行できるようにする技術が開示されている。
【００１３】
また、静的解析の他の課題として、静的解析では欠陥の疑いがあることは示すことができるが、どのようにすれば解決することができるか、個別には指摘することはできないため、指摘があった場合には修正方法を個別に作業者が検討しなければならないという課題がある。
【００１４】
この課題は、特許文献１でも指摘されている。そこで、特許文献１では、個々の開発担当者により行われたプログラムの解析結果を組織的に管理し、組織やプロジェクトの単位で有効かつ柔軟に活用するための技術や、ソースコード上の問題点を指摘することは可能であるが、その問題点をどのように解決すればよいかという情報は何ら提供されない、という課題を解決するための技術が開示されている。特にこの後者に対して、特許文献１では測定されたメトリクス情報を所定の統計量とともに出力したり、検出されたメトリクス情報の経時的な推移を表形式やグラフ形式で出力したりすることにより、プログラムの問題点を解決するために利用できるようにしている。
【先行技術文献】
【特許文献】
【００１５】
【特許文献１】特開２００２−０９１７６４号公報
【特許文献２】特開２００４−２４０４７７号公報
【特許文献３】特開２００６−２３６０４２号公報
【特許文献４】特開２００４−１４５３８１号公報
【特許文献５】特開２００５−２０２４９４号公報
【特許文献６】特開２００４−０６２４５２号公報
【特許文献７】特開１９９９−１３４１８８号公報
【発明の概要】
【発明が解決しようとする課題】
【００１６】
しかしながら、“欠陥の可能性の指摘”（警告）に対して解決する方法としていくつかの方法があり、そのうちのいくつかは本質的に問題を解決するが（つまり、プログラムの欠陥を解消するが）、そのうちのほかのものは表面的には警告を受けないような形にできるが、本質的に問題を解決できるものではない場合には、統計量との比較や、表形式やグラフ形式で表示された経時的な推移のみでは、どの修正方法が本質的に問題を解決できる妥当なものか判断するのが難しいことがある。また、初級の作業者の場合には、欠陥の可能性の指摘があったとしても、具体的にどのように修正すれば良いか、判断が難しいことがある。
【００１７】
本発明の課題は、任意に作成されるプログラムに関する静的解析結果に基づいて、警告を解消し得る具体的なプログラム修正方法を、容易に、更に場合によっては適切な評価付きで、把握することができるようにし、以ってプログラムの修正を容易に的確に行えるようにするプログラム改善支援システム等を提供することにある。
【課題を解決するための手段】
【００１８】
本発明のプログラム改善支援システムは、任意のプログラムが登録されるプログラム記憶手段と、予め設計規約が記憶されている設計規約記憶手段と、該プログラム記憶手段に初版または更新版の前記プログラムが新たに登録される毎に、該新たに登録されるプログラムに対して前記設計規約に基づいて静的解析を実行する静的解析実行手段と、該静的解析実行手段による前記静的解析結果として少なくとも設計規約違反箇所と違反内容が記憶される静的解析結果記憶手段と、前記プログラム記憶手段に登録されるプログラムのうち複数の版が存在するプログラムに関して、相対的な旧版・新版となる任意の２つの版毎に、該２つの版それぞれの前記静的解析結果に基づいて、旧版における前記設計規約違反箇所と、新版において該設計規約違反箇所に対応する箇所である該当箇所とで、前記違反内容が異なる場合には、該設計規約違反箇所と該当箇所に関する情報を新旧関連情報として記憶する新旧関連情報抽出・記憶手段と、該新旧関連情報抽出・記憶手段に記憶される新旧関連情報に基づいて、任意の設計規約に関して、前記設計規約違反箇所のプログラム文と前記該当箇所のプログラム文とを、その違反内容変化と共に表示する支援情報表示手段とを有する。
【００１９】
上記プログラム改善支援システムでは、静的解析結果を用いて上記新旧関連情報を生成・登録することで、これを利用して任意の設計規約に関する違反を解消する為に参考となる情報を表示できる。特に、例えば旧版における任意の規約違反が、新版の上記該当箇所では“違反なし”となっている場合には、設計規約違反箇所のプログラム文と該当箇所のプログラム文の表示を参照することで、ユーザは違反を解消し得る具体的なプログラム文（修正前と修正後）を参照することになる。
【００２０】
また、例えば、上記新旧関連情報に基づく表示を、特定ユーザ（熟練者等）に対して行うことで、特定ユーザが任意の評価を行って、この評価結果を上記新旧関連情報に含めるようにしてもよい。これによって、上記プログラム文の表示の際には評価結果も表示することで、ユーザは、より適切な具体例（違反を解消し得るプログラム文（修正前と修正後））を選択的に参照することが可能となる。
【発明の効果】
【００２１】
本発明のプログラム改善支援システム等によれば、任意に作成されるプログラムに関する静的解析結果に基づいて、警告を解消し得る具体的なプログラム修正方法を、容易に、更に場合によっては適切な評価付きで、把握することができるようにし、以ってプログラムの修正を容易に的確に行えるようにすることができる。
【図面の簡単な説明】
【００２２】
【図１】プログラム改善支援システムの構成・機能ブロック図である。
【図２】（ａ）は設計規約例、（ｂ）、（ｃ）はこの設計規約例に係るプログラム例である。
【図３】警告箇所表示画面の一例である。
【図４】静的解析結果変化要因分析部による分析処理フローチャート図である。
【図５】（ａ）は修正データテーブル、（ｂ）は規約データテーブルの一例である。
【図６】差分表示入力画面の一例である。
【図７】検索画面の一例である。
【図８】詳細表示画面の一例である。
【図９】プログラム改善支援システムのハードウェア構成図である。
【発明を実施するための形態】
【００２３】
以下、図面を参照して本発明の実施の形態について説明する。
図１は、本例のプログラム改善支援システム１０の構成・機能ブロック図である。
プログラムを作成する作業者（プログラマ）は、テキストエディタなどを使用して任意のプログラムを作成する。作成したプログラムは、プログラム登録部１を介してプログラム改善支援システム１０に登録される（構成管理ＤＢ（データベース）２に格納される）。また、作業者が、後にこのプログラムの更新版（修正版／バージョンアップ版等）を作成したときにも、この更新版のプログラムは、プログラム登録部１を介して構成管理ＤＢ２に格納される。
【００２４】
尚、プログラム登録部１は、単に任意のデータ／プログラムを入力して記憶装置に記憶する機能を有するものであってよいが、この例に限らない。例えば、本システム１０が、サーバ装置と複数のクライアント装置（端末と呼ぶ）とがネットワークに接続されてなるシステムの場合、例えば、各プログラマは端末側でプログラムを作成した後、ネットワークを介してサーバ装置に対してこのプログラムの登録を依頼することになる。この例の場合、例えば、プログラム登録部１はサーバ装置に設けられており、上記登録依頼を受けて登録許可するか否かを判定して、許可する場合にこのプログラムをサーバ装置内の記憶装置（構成管理ＤＢ２）に記憶する機能等を有する。尚、この例の場合、画面１２は、端末のディスプレイ等であると考えても良い。
【００２５】
尚、構成管理ＤＢ２は、単なるデータベース(記憶装置)だけでなく、当該データベースに記憶するデータの管理機能（例えば版数管理等）も含むものと考えても良い。構成管理ＤＢ２が高度な管理機能を備えている場合には、プログラム作成者は構成管理ＤＢ２にログインしたうえで、プログラムの登録を行うようにしても良い。
【００２６】
図示の例のプログラム改善支援システム１０は、上記プログラム登録部１及び構成管理ＤＢ（データベース）２に加えて更に、設計規約ＤＢ（データベース）５、静的解析ＤＢ（データベース）３等の各種データベースと、静的解析実行部４、変更差分抽出部６、静的解析結果変化要因分析部７、静的解析警告指摘箇所抽出部８、静的解析警告指摘対応検索部９、変化要因評価結果入力部１１等の各種処理機能部を備えている。また、任意の画面１２をディスプレイ上に表示する機能を備えている。
【００２７】
上記のように構成管理ＤＢ（データベース）２に登録された任意のプログラムは、静的解析実行部４で静的解析され、この解析結果は静的解析ＤＢ（データベース）３に登録される。この静的解析処理は、予め設計規約ＤＢ（データベース）５に登録されている設計規約に基づいて実行される。この静的解析処理自体は、既に従来技術で述べたように既存技術であり、処理内容については特に説明しないが、設計規約ＤＢ５に登録された設計規約や静的解析結果については、後に具体例を用いて説明するものとする。
【００２８】
上記静的解析実行部４による静的解析処理は、各プログラムの初版だけでなく更新版（バージョンアップ版等）に対しても実行される。つまり、任意のプログラムが新たに作成された際には、当然、この新規プログラム（初版）に対して静的解析処理が実行されるが、この解析によって何らかのエラー（設計規約違反等）が検出・警告されれば、プログラムを修正する必要が生じる。更に修正後も全ての警告が解消されずに何らかの警告が残っていれば、更に修正を行うことになる。
【００２９】
この様に、新規プログラム作成時だけでなく、このプログラムの更新版（２版、３版、・・・等）が作成されて構成管理ＤＢ２に格納される毎に、これら各更新版のプログラムに対しても静的解析処理が実行される。
【００３０】
構成管理ＤＢ２には、上記のように複数の版のプログラムが逐次登録されて管理されているが、変更差分抽出部６は、これらの複数の版のプログラムのうち、任意の２つの版のプログラムの間の対応関係や差分（変更部分）を抽出する。これは、例えば後述するように上記静的解析実行部４による静的解析処理結果等に基づいて、２つの版のプログラムの間の対応関係や差分（変更部分）を抽出する。
【００３１】
静的解析警告指摘箇所抽出部８は、上述した静的解析実行部４によって求められて静的解析ＤＢ３に登録された静的解析結果に基づいて、画面表示を行う。これは例えば、プログラムにおいて設計規約違反が指摘された箇所（警告箇所）と警告内容が分かるような画面表示を行う。尚、静的解析警告指摘箇所抽出部８は、上記プログラムにおいて規約違反が指摘された箇所（警告箇所）を抽出して、この警告箇所のプログラム文のみを画面表示等するものであってもよい。これについても後に説明する。
【００３２】
これらの差分（変更部分）や警告箇所は、必要に応じて作業者の端末の画面１２に表示され、プログラムの状況を確認することができる。尚、プログラム改善支援システム１０は、例えばサーバ装置単体で実現してもよいし、上記のようにサーバ装置と複数のクライアント装置（各作業者の端末）とがネットワークに接続された構成で実現してもよい。後者の場合、例えば画面１２はクライアント装置のディスプレイに相当することになる。
【００３３】
更に、上記静的解析結果変化要因分析部７は、上述した静的解析ＤＢ３に登録された静的解析結果で指摘されている設計規約違反の警告に対して、その後の版ではこの警告が消失している場合に（但し、後の説明のように“変化”している場合であってもよく、消失している場合に限らない）、この消失した警告と警告箇所等に関する情報を登録する（例えば後述するテーブル３０に登録する）。
【００３４】
これは、例えば、まず、任意の２つの版のプログラム（相対的に新版と旧版となる２つのプログラム；例えば後述する図５の例では３．０版と３．１版の２つのプログラム；よってプログラム・ファイル名は同一であってよい）を、静的解析ＤＢ３から取得する。
【００３５】
更に、これら取得した２つの版のプログラムの対応関係や差分を抽出する（これは、上記変更差分抽出部６の機能によって抽出してもよい）。そして、例えば典型例としては、これら各差分のうち、相対的に旧版となるプログラムでは警告箇所であったが、相対的に新版となるプログラムでは警告が消失しているものに関しては、例えば後述するテーブル３０への登録を行う。つまり、この様な差分を上記消失した警告（設計規約違反の警告）等に関連付けて静的解析ＤＢ３に登録する（これを「修正前後関連情報」を登録するものと表現する場合もあるものとする）。但し、この様な典型例に限らず、例えば警告が消失していなくても警告内容が変わっていれば、例えば後述するテーブル３０への登録を行うようにしてもよい。
【００３６】
上記登録内容（修正前後関連情報）の具体例を図５（ａ）のテーブル３０に示し後に説明する。尚、図５（ａ）の例ではテーブル３０に格納される各「修正前後関連情報」（新旧関連情報）は、複数の版が存在するプログラムに関して、例えば、相対的な旧版と新版となる任意の２つの版（修正前、修正後）に関して、旧版（修正前）における設計規約違反箇所（行番号等）と違反（警告）内容と、新版（修正後）において旧版の設計規約違反箇所に対応する箇所（行番号等）とこの対応箇所の違反（警告）内容（「警告なし」も含まれる）とが、関連付けられた情報である。更に、後述するように、後に、熟練した作業者による評価結果や補足説明等が追加される場合もある。
【００３７】
また、上記変化要因評価結果入力部１１は、上記「修正前後関連情報」（例えば“消失した警告”と、これに関連付けられたプログラムの差分部分等）に基づく画面（例えば図６に示すような差分表示入力画面５０）を、画面１２等に出力する。
【００３８】
そして、変化要因評価結果入力部１１は、この画面表示を熟練した作業者等が見る等して、上記差分部分の修正（警告を消失させた修正等）が妥当なものか否かを、熟練した作業者等が判定して、判定した結果（評価結果）や補足説明等を入力できるようにしている。この入力結果は、上記画面表示に用いた「修正前後関連情報」に対応付けて（修正前後関連情報に追加する形で）、静的解析ＤＢ３（そのテーブル３０等）に登録される。
【００３９】
また、上記静的解析警告指摘対応検索部９は、任意に指定される設計規約に基づいて上記静的解析ＤＢ３に登録された「修正前後関連情報」の格納テーブル（後述するテーブル３０等）を検索して、該当する情報を求める。そして、この検索結果、すなわち、指定された設計規約に違反した過去のケースに係る上記「修正前後関連情報」（修正前後の設計規約違反の警告（「警告なし」も含まれる）、それに関連した修正前後のプログラム文、（情報がある場合には）熟練した作業者の評価結果や補足説明等）を、作業者の端末の画面１２に表示させる。
【００４０】
以下、上述したプログラム改善支援システム１０の各構成について、更に詳しく説明する。
上記の通り、構成管理ＤＢ（データベース）２に格納されたプログラムは、（初版であっても更新版であっても）静的解析実行部４で静的解析される。この静的解析処理は、設計規約ＤＢ（データベース）５に予め記憶されている各種設計規約に基づき実行される。静的解析の結果は、静的解析ＤＢ（データベース）３に格納される。
【００４１】
設計規約ＤＢ（データベース）５の具体例については後に図５（ｂ）を参照して説明するが、各種設計規約の一例を図２（ａ）に示す。
設計規約ＤＢ５に格納されている設計規約の具体例としては、例えばＣ言語を対象とした場合、図２（ａ）に示す例が考えられる。この例は、このプログラム改善支援システム１０を使用する組織では、関数の仮引数の変数名により変数の意味を判別できるので可読性や保守性を向上できるという効果を見込んで、このような設計規約を作っているものとしている。
【００４２】
この例の場合、プログラムを図２（ｂ）のように記述した場合、静的解析の結果、設計規約違反が警告されることになる(エラーが検出されて警告される)。一方、プログラムを図２（ｃ）のように記述した場合には、設計規約違反は警告されない。
【００４３】
設計規約ＤＢ５には、例えばこの様な設計規約が複数登録されている。これらの設計規約は、プログラム改善支援システム１０を使用する組織の設計方針に従って、その登録内容が任意に決められる。
【００４４】
但し、各設計規約は表示用とコンピュータ処理用とから成り、図２（ｂ）には表示用を示している。表示用は、例えば後述する図３のように画面上に表示することで、ユーザが規約内容を認識できるようにする為のものである。一方、コンピュータ処理用は、上記静的解析実行部４が静的解析する際に参照するものであり、表示用の内容に相当するチェックを実行させる為のものである。コンピュータ処理用の具体例は特に示さないが、上記の一例では、図２（ｂ）のように変数型‘int’の後に（変数名（引数名）の記述が無くて）カンマ（，）がある場合には、変数名の記述が無いものとして設計規約違反と判定させるような規約内容となっているものとする。尚、この例に限らず、通常は構文解析を行うのであるから、構文解析を行った結果、引数が無いことが検出された場合に、上記と同様の設計規約違反と判定するようにしてもよい。
【００４５】
その後、上記静的解析警告指摘箇所抽出部８が、上記静的解析実行部４によって求められて静的解析ＤＢ３に登録された上記静的解析結果に基づいて、警告箇所（規約違反箇所）のプログラム文やその警告内容等を抽出してこれを画面１２に表示する（例えば図３のような画面を表示する）。あるいは、プログラム全文を表示すると共に警告箇所や警告内容が分かるような表示を行うようにしてもよい。この表示画面を作業者等が参照することができる。更に作業者は、後述するように、この表示画面（図３の画面等）から“任意の警告への対処方法の参考となる情報が得られる画面”（後述する図７、図８の画面等）に移行させることで、警告に対する適切な対処方法（プログラム文の修正方法等）を知ることもできる。
【００４６】
尚、上記静的解析警告指摘箇所抽出部８は、上記静的解析実行部４によって新たな静的解析結果が求められると、自動的に起動して上記画面表示を行うものであってもよい。プログラマは、通常、（初版であるか更新版であるかは関係なく）新たに作成したプログラムを登録したら、その解析結果（設計規約違反等の警告がないかを）を知りたいものであり、これより上記のように自動的に起動して解析結果を画面表示するようにしてもよい。そして、更に、上記図７、図８等の画面表示に移行することで、効率的に的確にプログラムの警告箇所を修正することが可能となる。
【００４７】
図３は、静的解析警告指摘箇所抽出部８による画面１２（警告箇所表示画面２０と呼ぶ）の表示例である。
尚、ここで静的解析実行部４による静的解析結果について簡単に説明しておく。この静的解析結果の具体例は、特に図示しないが、例えば解析対象プログラム・ファイルのファイル名と版数（バージョン）、解析対象プログラムにおいて規約違反が検出された箇所（警告箇所）の行番号と、当該違反があった規約の識別番号（違反規約番号）等から成るものである。
【００４８】
例えばこの様な静的解析結果や構成管理ＤＢ２や設計規約ＤＢ５等に基づいて、静的解析警告指摘箇所抽出部８は例えば図３に示す警告箇所表示画面２０を、例えば画面１２に表示する。
【００４９】
図３に示す警告箇所表示画面２０において、図示の画面上の左上に示すファイル名２５には、解析対象プログラムのファイル名が表示され、その下側に示す図示のプログラム表示領域２１には、この解析対象のプログラムの内容（プログラム・リスト）が表示される。プログラム表示領域２１には、例えば、解析対象のプログラムがスクロール表示される（図では解析対象のプログラムの一部のみが表示されている）。
【００５０】
但し、この例に限らず、例えば、静的解析警告指摘箇所抽出部８は、静的解析ＤＢ３（静的解析結果）や構成管理ＤＢ２や設計規約ＤＢ５等に基づいて、警告箇所（規約違反箇所）のプログラム文やその警告内容等を抽出して、当該警告箇所のプログラム文のみをプログラム表示領域２１に表示させるようにしてもよい。
【００５１】
すなわち、上記静的解析結果における警告箇所の行番号により、構成管理ＤＢ２の解析対象プログラムからこの行番号のプログラム文を抽出することで、警告箇所のプログラム文のみをプログラム表示領域２１に表示させることができる。同様に、設計規約ＤＢ５から上記静的解析結果における違反規約番号に該当する設計規約を抽出して、画面２０に表示させることができる（後述する設計規約表示領域２２に表示する）。
【００５２】
尚、本画面２０は、例えば静的解析実行部４の処理後に自動的に表示されるものとし、上記ファイル名２５には静的解析実行部４による解析対象のプログラム・ファイル名が自動的に設定されるものとしてもよいが、この例に限らない。例えば、ユーザが任意の解析対象プログラムのファイル名を、上記ファイル名２５の入力領域に入力するようにしてもよい。尚、この場合、例えば図示のファイル名２５の右側に示す所定ボタン（▽マーク）をユーザが操作すると、構成管理ＤＢ２に登録されているプログラム・ファイルのファイル名一覧が表示され、ユーザが任意のファイル名を選択・指定することで、ファイル名２５が設定されるようにしてもよい。
【００５３】
尚、図３に示す画面は一例であり、この例に限らない。例えば、構成管理ＤＢ２が上述したようにデータの管理機能（版数管理等）も有する場合には（版数も指定できるようにしている場合には）、図３と略同様の画面において更に版数の入力欄を設けてもよい。この場合には、ユーザにより指定された任意のファイル名の任意の版数のプログラムに関する静的解析結果が表示されることになる。
【００５４】
上記プログラム表示領域２１に表示されるプログラム・リストにおいて、何らかの設計規約違反と判定されたプログラム文に対しては、プログラム表示領域２１の図上左端の領域に所定のマーク（ここでは四角形のマーク）が表示される。これは、静的解析結果の上記“警告箇所の行番号”に基づいて表示できる。この例では、図示のfunc2()とfunc3()の行（プログラム文）に設計規約違反があるので、このことを示すために、これらfunc2()とfunc3()の行に対しては図上左端の領域にそれぞれ四角形のマーク（白四角□、黒四角■）が表示されている。
【００５５】
尚、基本的には白四角□が表示されるが、ユーザ（作業者）が、四角形マークがある行（プログラム文）のなかから任意の行を指定すると、指定された行のマーク表示は、黒四角■に変わるようになっている。図示の例では現在、func3()の行（プログラム文）が指定されているものとしているので、func3()の行のマーク表示は黒四角■になっている。
【００５６】
また、警告箇所表示画面２０の図上右上に示す設計規約表示領域２２には、現在指定されている行（黒四角■の行）に関して“違反している設計規約”の内容が表示される。これは、上記「違反があった規約の識別番号（違反規約番号）」と設計規約ＤＢ５に基づいて表示できる（設計規約ＤＢ５については後に図５（ｂ）を参照して説明する）。
【００５７】
また、画面２０の図上右下に示す指摘箇所表示領域２３には、現在指定されている行（プログラム文）の関数名等が表示される。
プログラムの製作作業者は、例えば上述したような警告箇所表示画面２０の表示内容を参照して、設計規約違反が警告されていれば、この警告に従って上記解析対象のプログラムを修正する（更新版のプログラムを作成する）。
【００５８】
ここで、本手法では、ユーザが例えば警告箇所表示画面２０内の図示の「修正候補の検索」ボタン２４を操作することで、上記の現在指定されている行（黒四角■の行）の設計規約違反を解消する為に参考となる情報が得られる画面（後述する画面７０、画面８０等）の表示が行われる。これについては、後に詳細に説明するものとする。尚、この場合のユーザとは、主に上記「熟練した作業者」以外の作業者を想定している。
【００５９】
上記プログラムの修正が完了したら、更新版プログラムを、プログラム登録部１を使用して構成管理ＤＢ２に登録する。これより、上記初回（初版）のプログラムの場合と略同様に、構成管理ＤＢ２に登録された上記更新版プログラムに対して、静的解析実行部４により静的解析が実行され、その結果は静的解析ＤＢ３に格納される。
【００６０】
ここで、上記１回目（初版のプログラム）の登録の場合と異なり、２回目以降（更新版）のプログラムの登録後に関して、更に、上記変更差分抽出部６によって２つの版のプログラムの差分を抽出して（例えば前回（最新版の１つ前の版）のプログラムと今回（最新版）のプログラムとの差分（変更部分）を抽出して）、これを例えば画面１２に表示することで、作業者等が画面１２を参照してプログラムの修正部分の確認等を行うことができる。
【００６１】
上記変更差分抽出部６による上記２つの版のプログラムの差分（変更部分）の抽出処理について、以下、説明する。但し、変更差分抽出部６による画面表示については、ここでは特に示さない。また、必ずしも変更差分抽出部６による画面表示を行う必要はない。但し、変更差分抽出部６の機能自体または処理結果は、後述するように、静的解析結果変化要因分析部７の処理の際に利用される。詳しくは後述する。
【００６２】
変更差分抽出部６の処理では、まず、対象となる２つの版のプログラム（ソースコード）同士の対応付けを行う。これは既存技術であり特に詳細には説明しないが、２つの版のプログラム（ソースコード）間で、例えば行単位（１行単位でも複数行単位でもよい）または関数単位等で対応付けを行う。例えば行単位の場合、例えば前回のプログラムの各行毎に、その行に対応する今回のプログラムの行を求めて、両者の行番号を対応付けて一時的に記憶する（前回プログラムの行番号：これに対応する今回プログラムの行番号）。
【００６３】
これは、例えば前記プログラムにおける任意の行に関して、今回（最新版）においてたとえ行番号が変わっても内容が変わっていなければ（内容が完全一致する場合には）、当然、問題なく対応付けられることになる。尚、実際には、１行だけ一致しても完全一致とは見做さず、複数行連続して一致した場合に完全一致と見做す場合が多いが、この例に限らない。また、他にも例えば、コメント部分の変更は無視する方法もあり（コメント部分が変更されていても、本文部分に変更がなければ、完全一致と見做す）、様々な方法があってよい。
【００６４】
対応付け結果は、上記の通り、例えば行単位の場合には、前回のプログラムにおける任意の行の行番号と、今回（最新版）のプログラムにおいて対応する行の行番号とを、対応付けたものとなる（これに、更に修正の有無を示す情報も付加されてもよい）。
【００６５】
例えば、３．０版のプログラムと３．１版のプログラムとを例にして、例えば３．０版の１１０行目〜１１５行目に上記関数func2()に係る記述があり、３．１版では同一の記述が１２０行目〜１２５行目にあった場合には、“修正なし”の判定と共に３．０版の１１０行目〜１１５行目と３．１版の１２０行目〜１２５行目とが対応付けられて記憶されることになる。
【００６６】
また、例えば、３．０版の２００行目〜２０４行目に上記関数func3()に係る記述があり、３．１版ではその一部が修正された（例えば‘int’の後に変数名が記述された）記述が２１０行目〜２１４行目にあった場合には、“修正あり”の判定と共に、３．０版の２００行目〜２０４行目と３．１版の２１０行目〜２１４行目とが対応付けられて記憶されることになる。尚、例えば、３．０版の２００行目〜２０４行目と３．１版の２１０行目〜２１４行目とが完全一致する場合には、両者は対応付けられるべきものと判定することになる。
【００６７】
そして、例えば、“修正あり”となっているものだけを表示する。上記の例では、例えば、３．０版の２００行目〜２０４行目と３．１版の２１０行目〜２１４行目とが、両者が対応付けられる形で表示されることになる。
【００６８】
尚、上記２つのプログラムの差分に関しては、上述した前回と今回（最新版）との差分の例に限らず、更に前々回と今回（最新版）との差分や、初版と今回（最新版）との差分等を求めるものであってもよい。
【００６９】
このように、更新版が存在するプログラムに関して、構成管理ＤＢ２に格納された各版同士の変更部分（差分）等を求めて表示等することができる。
尚、上記変更差分抽出部６の処理機能または処理結果は、上記のように単に画面表示する場合に限らず、例えば後述する図４の処理で用いることもできる。
【００７０】
尚、構成管理ＤＢ２が高度な管理機能を備えている場合には、プログラム製作の作業者は構成管理ＤＢ２にログインし、修正対象のプログラムを構成管理ＤＢ２からチェックアウトした後、プログラムの修正を行い、その後、修正後のプログラムを構成管理ＤＢ２にチェックインするようにしてもよい。
【００７１】
その際には、構成管理ＤＢ２には、修正後（更新版）のプログラムだけでなく、修正日時や修正作業者も登録されるようにしてもよい。また、作業者は必要に応じてベースライン番号（版数）を設定することも可能である。この場合には、変更差分の情報には、修正日時、修正作業者、ベースライン番号（版数）などの付帯情報を含めることができる。
【００７２】
更新版が存在するプログラムに関しては、さらに任意のときに（例えば最新版が登録されて静的解析が行われた後等であるが、この例に限らない）、静的解析結果変化要因分析部７によって、任意の２つの版同士の静的解析結果に係る差分（特に旧版では何らかの設計規約違反の警告があった箇所が、新版では警告が解消されている部分）が抽出・登録される。
【００７３】
この分析処理の一例を、図４に示すフローチャート図を参照して説明する。
図４は、静的解析結果変化要因分析部７による分析処理フローチャート図である。
尚、この処理の前に、ユーザが任意の解析対象プログラムを指定（そのファイル名の入力等）を行うようにしてもよい。また、本説明では、解析対象プログラムは、初版、２版、３版が作成・登録されているものとし（登録時に静的解析も実行済み）、３版（最新版）のプログラム登録後に本処理が行われる場合を例にして説明するものとする。
【００７４】
図４において、まず、解析対象プログラムの初版の静的解析結果をキーとして取得する（ステップＳ１０１）。これは、上記のように、静的解析結果は例えばファイル名と版数（バージョン）、“規約違反があった箇所（警告箇所）の行番号”と違反規約番号等から成るものであるので、そのなかでファイル名が解析対象プログラムのファイル名であり且つ版数が初版であるデータ全てを、上記キーとして取得すればよい。
【００７５】
次に、キーとして取得した静的解析結果における全ての警告（規約違反）それぞれについて（各規約違反箇所を順次、処理対象として）、以下のステップＳ１０３〜Ｓ１０７の処理を実行する（Ｓ１０２−Ｓ１０２a間でループ）。
【００７６】
まず、初版における処理対象の規約違反箇所（上記“規約違反があった箇所（警告箇所）の行番号”；以下、違反箇所行番号と言う）と、上記変更差分抽出部６による上記２つの版のプログラム同士の対応付け結果もしくは差分の抽出処理結果とに基づいて、１つ後の版（最初は、初版の次の版；本例では２版）のプログラムにおける「該当箇所」の静的解析結果を取得する（ステップＳ１０３）。
【００７７】
これは、上記変更差分抽出部６の対応付け結果によって、初版の各行毎に、その行に対応する２版の行が分かるので（例えば対応する行番号同士がペアで登録されているので）、上記各規約違反箇所（上記“違反箇所行番号”）毎に、その“違反箇所行番号”の行に対応する１つ後の版のプログラムにおける行の行番号（上記「該当箇所」の行番号）が分かる。これより、上記１つ後の版のプログラムに関する静的解析結果に、この「該当箇所」に関する情報がある場合にはこの情報を取得する。但し、もし、「該当箇所」に関する情報が無い場合には、警告は解消されたものと見做し、ステップＳ１０３では例えば“警告なし”が取得されたものとする。
【００７８】
ここで、上述した具体例において仮に３．０版が初版、３．１版が１つ後の版であるものとし、例えば上記「初版における処理対象の規約違反箇所」が３．０版の１１０行目〜１１５行目であったとするならば、上記例では３．１版における「該当箇所」は１２０行目〜１２５行目ということになる。よって、この場合には、３．１版に関する静的解析結果のなかに１２０行目〜１２５行目に関する警告があった場合には、この警告内容（違反があった設計規約の規約番号等）が、上記「該当箇所」の静的解析結果として取得されることになる。尚、もし、３．１版に関する静的解析結果のなかに１２０行目〜１２５行目に関する警告が無かった場合には、上記「該当箇所」の静的解析結果として“警告なし”が取得されることになる。
【００７９】
尚、上記一例では事前に変更差分抽出部６の処理（少なくとも対応付け処理）が行われているものとしたが、この例に限らない。例えば、事前ではなく本処理中に、変更差分抽出部６の処理を行うようにしてもよい。この場合には、ステップＳ１０３の処理は、例えば図中に点線で囲ったステップＳ１０３ａ〜Ｓ１０３ｃの処理を行う。
【００８０】
すなわち、変更差分抽出部６の機能の一部（対応付け機能）によって、上記処理対象の規約違反箇所のプログラム文等に基づいて、上記１つ後の版のプログラムを検索して「該当箇所」を求める。すなわち、上記の例では２版のプログラムにおいて初版の上記違反箇所のプログラム文と同一（完全一致）のプログラム文がある箇所の行番号等を、上記「該当箇所」として抽出する（ステップＳ１０３ａ）。
【００８１】
そして、この「該当箇所」の行番号等を用いて、上記の例では２版のプログラムに関する静的解析結果を検索して、「該当箇所」に関する警告があればこの警告情報（違反規約番号等）を取得し、警告が無ければ例えば“警告なし”が取得されるものとする（ステップＳ１０３ｂ、Ｓ１０３ｃ）。
【００８２】
そして、上記初版の規約違反箇所と１つ後の版における「該当箇所」とで、解析結果に変化があるか否かを判定する（ステップＳ１０４）。これは、例えば、上記初版プログラムに係る（上記キーにおける）上記規約違反箇所の違反規約番号と、１つ後の版（ここでは２版）のプログラムに係る上記該当箇所に関する違反規約番号とが、一致するか否かを判定し、不一致の場合には解析結果に変化あり（ステップＳ１０４，ＹＥＳ）と判定する。尚、上記“警告なし”の場合には、違反規約番号が無いことになるので、必ず不一致となり解析結果に変化あり（ステップＳ１０４，ＹＥＳ）と判定されることになる。
【００８３】
但し、この例に限らず、典型例としては例えば、１つ後の版（ここでは２版）のプログラムに係る上記「該当箇所」に関しては“警告なし”となっている場合にのみ（この様な変化があった場合のみ）、解析結果に変化あり（ステップＳ１０４，ＹＥＳ）と判定するようにしてもよい。
【００８４】
尚、上記の通り、１つ後の版（ここでは２版）のプログラムに関する静的解析結果も静的解析ＤＢ３に格納されている。この静的解析結果には上記の通り“規約違反があった箇所の行番号”（違反規約番号）が登録されているので、このなかに上記「該当箇所」の行番号が存在しなければ“警告なし”（規約違反なし）と見做すようにすればよい。
【００８５】
ステップＳ１０４がＹＥＳの場合、変更箇所に関する情報（差分情報）の取得を行い（ステップＳ１０６）、当該差分情報の登録を行う（ステップＳ１０７）。差分情報は、例えば、上記処理対象の新旧２つの版（ここでは初版と２版;本例では後に初版と３版、２版と３版の処理も行うことになる）の相互に対応する行の行番号とこれらの行の違反規約番号、版数等である。ステップＳ１０７は、例えば図５（ａ）に示す修正データテーブル３０への差分情報の登録を行うものである。尚、修正データテーブル３０も静的解析ＤＢ３に格納されるものであってよいが、この例に限らない。
【００８６】
図５（ａ）には、上記修正データテーブル３０の構成例を示す。
尚、本例における（修正前）、（修正後）とは、例えば相対的な旧版、新版を意味する。上記図４の処理例では、最初の方の処理では、初版が修正前、その１つ後の版（２版）が修正後として、修正データテーブル３０への登録が行われることになる。更に続いて、初版が修正前、上記２版の更にその１つ後の版（３版）が修正後として、修正データテーブル３０への登録が行われることになる。更に、２版が修正前、その１つ後の版（３版）が修正後として、修正データテーブル３０への登録が行われることになる。尚、何れの場合も、ステップＳ１０４がＹＥＳの場合に、修正データテーブル３０への登録が行われることになる。
【００８７】
図５（ａ）に示す修正データテーブル３０は、違反規約番号（修正前）３１、プロジェクト名３２、ファイル名３３、行番号（修正前）３４、行番号（修正後）３５、違反規約番号（修正後）３６、版数（修正前）３７、版数（修正後）３８、判定３９、説明４０の各データ項目より成る。
【００８８】
ファイル名３３には上記解析対象プログラムのファイル名が格納される。尚、プロジェクト名３２には、ファイル名３３のプログラムが含まれるプロジェクトのプロジェクト名が格納されるが、これは本説明には特に関係ないので、本説明ではプロジェクト名３２に関しては省略して説明するものとする。
【００８９】
そして、違反規約番号（修正前）３１、行番号（修正前）３４、版数（修正前）３７には、それぞれ、ファイル名３３のプログラムの旧版に関する情報が格納される。上記の例では初版プログラムの版数（初版）が版数（修正前）３７に格納され、上記違反箇所行番号が行番号（修正前）３４に格納され、上記規約違反箇所の違反規約番号が違反規約番号（修正前）３１に格納されることになる。
【００９０】
同様にして、上記行番号（修正後）３５、違反規約番号（修正後）３６、版数（修正後）３８には、それぞれ、ファイル名３３のプログラムの新版に関する情報が格納される。上記の例では２版プログラムの版数（２版）が版数（修正後）３８に格納され、上記「該当箇所」の行番号が行番号（修正後）３５に格納され、「該当箇所」に関する静的解析結果が違反規約番号（修正後）３６に格納されることになる。
【００９１】
尚、上記典型例の場合には違反規約番号（修正後）３６には必ず「規約違反なし（警告なし）」を意味する情報（図示の例では‘−’）が格納されることになる。これは、上記の通り、典型例では、１つ後の版のプログラムに係る「該当箇所」に関して“警告なし”となっている場合にのみ、ステップＳ１０４がＹＥＳとなってステップＳ１０７の処理が行われるからである。
【００９２】
尚、図４の処理の段階では、判定３９と説明４０には、未だデータは格納されないことになる（例えば判定３９に関しては‘未判定’としておく）。判定３９と説明４０には、後述する処理によって任意の情報が格納され、更にその後、画面表示されることになる。詳しくは後述する。
【００９３】
違反規約番号（修正前）３１には、修正前（相対的に旧版）のプログラムにおいて違反が指摘された設計規約を示す識別番号（この識別番号は、本例では図５（ｂ）の“規約番号”）が格納される。
【００９４】
尚、逐一「相対的に旧版」、「相対的に新版」等と記すことなく、単に「旧版」、「新版」と記す場合もあるものとする。
プロジェクト名３２には、ファイル名３３のプログラム・ファイルが係るプロジェクトのプロジェクト名が格納される。
【００９５】
ファイル名３３には、上記の通り解析対象のプログラム・ファイルの名称が格納される。
行番号（修正前）３４には、修正前のプログラムにおける設計規約違反が指摘されている箇所を示す情報（行番号）が格納される。
【００９６】
行番号（修正後）３５には、修正後（相対的に新版）のプログラムにおいて、修正前のプログラムで設計規約違反が指摘されている箇所に該当する箇所（上記「該当箇所」）を示す行番号が格納される。つまり、上記行番号（修正前）３４の行に対応する行の行番号が格納される。
【００９７】
違反規約番号（修正後）３６には、上記行番号（修正後）３５の行のプログラム文に関して、設計規約違反がある場合にはその規約番号が格納され、違反が無い場合には違反が無いことを示す記号等（本例では‘−’）が格納される。尚、図４の処理による場合、違反規約番号（修正前）３１に‘−’が格納されることはない。また、上記一例のように違反規約番号が不一致の場合にステップＳ１０４がＹＥＳとなってステップＳ１０７の処理が行われる例では、違反規約番号（修正前）３１と違反規約番号（修正後）３６とは必ず異なることになる。また、上記典型例の場合、違反規約番号（修正後）３６には必ず‘−’が格納されることになる（但し、図５（ｂ）は典型例を示すものではない）。
【００９８】
版数（修正前）３７には、修正前のプログラムの版数が格納されている。
版数（修正後）３８には、修正後のプログラムの版数が格納されている。
判定３９には、特定ユーザ（熟練した作業者等）が入力した“プログラムの修正方法の評価結果”が格納される。
【００９９】
説明４０には、特定ユーザ（熟練した作業者等）が入力した任意の“補足説明”の内容が格納される。
上記の通り、判定３９、説明４０に関しては、後に説明する処理により後からデータが格納されることになる。
【０１００】
尚、ここで、設計規約ＤＢ（データベース）５に格納される規約データテーブルについて、図５（ｂ）に示す一例を用いて説明しておく。
図５（ｂ）に示す規約データテーブル４１は、規約番号４２、設計規約４３、有効／無効４４の各データ項目より成る。
【０１０１】
設計規約４３には、各設計規約の内容が格納されている。尚、上述したように各設計規約は表示用とコンピュータ処理用とから成り、図では表示用のみ示すが、コンピュータ処理用も格納されている。
【０１０２】
上記各設計規約４３に対応して、規約番号４２にはその設計規約に割り当てられた識別番号（ＩＤ）が格納される。また、有効／無効４４にはその設計規約が静的解析実行部４で使用されるか否かを示す情報が格納されている（有効であれば使用され、無効であれば使用されない）。これは、組織毎に必要な設計規約が異なる場合に、その適用／非適用を切り替えるために使用されるが、ここでは特に関係ないので、これ以上は説明しない。
【０１０３】
再び図４の説明に戻る。
上記ステップＳ１０４で“解析結果に変化無し”と判定された場合（ステップＳ１０４，ＮＯ）、最新版まで参照したか否かを確認し（ステップＳ１０５）、未だ最新版まで参照していないときには（ステップＳ１０５，ＮＯ）、ステップＳ１０３に戻る。
【０１０４】
この場合のステップＳ１０３，Ｓ１０４の処理は、上記最初の版の警告（規約違反）に関して更に次の版（本例では３版）のプログラムに関する静的解析結果を取得して、これを用いて上記判定を行うことになる。つまり、３版における上記「該当箇所」とその警告内容も、上記２版の場合と略同様にして分かるので、ステップＳ１０４では今度は、この３版の「該当箇所」の警告内容が、初版の警告内容と異なるか否かを判定することになる。あるいは、典型例では、３版の「該当箇所」が“警告なし”となっているか否かを判定し、“警告なし”の場合には解析結果に変化あり（ステップＳ１０４，ＹＥＳ）と判定することになる。
【０１０５】
そして、ステップＳ１０４がＹＥＳの場合、初版と３版との上記差分情報を取得して上記テーブル３０に格納することになる（ステップＳ１０６，Ｓ１０７）。
一方、最新版（３版）まで参照済みの場合には（ステップＳ１０５，ＹＥＳ）、ループの処理の最後（ステップＳ１０２ａ）にジャンプすることで、未だ未処理の警告があった場合にはループの処理の最初（ステップＳ１０２）に戻り、次の処理対象の警告について上記ステップＳ１０３〜Ｓ１０７の処理を実行する。また、ステップＳ１０２ａにおいて未処理の警告が残っていない場合には、ループを抜けて、ステップＳ１０８以降の処理へ移行する。
【０１０６】
また、上記ステップＳ１０６，Ｓ１０７の処理を実行した場合も、ループの処理の最後（ステップＳ１０２ａ）に移行することで、上記と同様の処理を行う。この場合には、特に上記典型例では警告（規約違反）が解消されているので、それより後の版を参照する必要性は少ないと考えられるからであるが、この例に限らず、例えばステップＳ１０７の後にステップＳ１０５を実行するようにしてもよい。
【０１０７】
ステップＳ１０８の処理では、初版（または前回のステップＳ１０８の処理で静的解析結果をキーとして取得した版）の次の版の静的解析結果を、キーとして取得する。
次に、これが最新版の静的解析結果をキーとして取得したものであるか否かを判定し（ステップＳ１０９）、最新版でなければ（ステップＳ１０９，ＮＯ）、ループの先頭（ステップＳ１０２）の処理に戻る。そして、今度は、上記ステップＳ１０１で得たキーではなく、ステップＳ１０８で得たキーを用いて、上記ステップＳ１０２−ｓ１０２ａ間のループ処理を実行することになる。上記の例では、今度は２版をキーとして、２版と１つ後の版（３版）との間で上述した処理を行って、２版において警告を受けた各箇所毎に、３版において警告が変化していた（特に“警告なし”となった）場合には、テーブル３０に登録する処理を行うことになる。
【０１０８】
一方、キーが最新版のものであった場合には（ステップＳ１０９，ＹＥＳ）、ステップＳ１０２に戻って処理続行してもステップＳ１０３で「１つ後の版」が存在しないことになるので、本処理を終了する。
【０１０９】
上述した図４の処理では、任意のプログラム・ファイル名のプログラムに関して、仮に初版、２版、３版（最新版）が作成されていた場合、最初は初版の静的解析結果（各警告）をキーとして取得して、これら各警告に関して２版、３版それぞれとの変化の有無をチェックする（変化があれば差分情報を登録する）。そして、初版の全警告について処理実行したら、ステップＳ１０８で２版の静的解析結果をキーとして取得すると共に、ステップＳ１０９がＮＯとなることからステップＳ１０２に戻り、今度は２版に係る各警告について３版における変化の有無をチェックすることになる。そして、２版の全警告について処理実行したら、ステップＳ１０８で今度は３版の静的解析結果をキーとして取得するが、ステップＳ１０９がＹＥＳとなることから、本処理を終了することになる。
【０１１０】
なお、ステップＳ１０７の登録の際には、同じ情報が重複して保存されないように、警告の種別と、変更前の版と、変更後の版についての情報を合わせて保存し、ステップＳ１０７で登録する際に同じ情報が既に登録されていたときには重複登録しないようにする。
【０１１１】
以上の処理により、静的解析結果に基づく各版（バージョン）間の差分の分析結果（例えば図５（ａ）に示す修正データテーブル３０）が、静的解析ＤＢ３に格納されることになる。典型例としては、（相対的に）旧版において任意の警告（規約違反）があった箇所について、（相対的に）新版における「該当箇所」では「警告なし」となった場合には、これら旧版と新版との差分情報（旧版の版数と違反規約番号と違反箇所の行番号、新版の版数と違反箇所に対応する箇所（上記「該当箇所」）の行番号等）が、修正データテーブル３０に登録される。
【０１１２】
このように、典型例としては、任意の警告（規約違反）があった版とこの警告が解消された版とに関して、違反箇所／「該当箇所」の行番号や、警告の種別を示す情報等が修正データテーブル３０に格納されることになる。
【０１１３】
変化要因評価結果入力部１１は、上述した静的解析結果変化要因分析部７による分析結果（修正データテーブル３０）に基づいて、例えば図６に示すような差分表示入力画面５０を表示すると共に、当該画面５０上で特定ユーザ（熟練者等）による任意の評価結果（判定、説明）の入力を受け付ける。
【０１１４】
変化要因評価結果入力部１１は、例えば修正データテーブル３０に新たなレコードが追加される毎に、この新規レコードの情報を用いて、例えば予め設定されている特定ユーザ（熟練者等）の端末のディスプレイに、例えば図６に示すような差分表示入力画面５０を表示する。そして、特定ユーザ（熟練者等）に、任意の評価結果（判定、説明）を入力させる。勿論、これは一例であるが、基本的には、修正データテーブル３０に格納される全てのレコードに関して、その判定３９に（場合によっては説明４０も）熟練者等による判定結果が格納されるようにすることが望ましい。それ故、未だ判定３９に判定結果が格納されていないレコードに関しては、任意のときに当該レコード（判定対象レコードという）の情報を用いて上記差分表示入力画面５０を表示させることになる。
【０１１５】
図５の差分表示入力画面５０の例では、まず、画面５０の最上部には、表示対象とするプログラム・ファイル名の表示領域５１がある（ここではfile_a.cが表示されている）。これは、例えば上記判定対象レコードのファイル名３３が表示されるものである。
【０１１６】
上記表示領域５１の下の表示領域は、左と右に分割されていて、基本的には左側には“旧版に係る情報”、右側には“新版に係る情報”が表示される。尚、旧版とはテーブル３０における“修正前”に相当し、新版は同“修正後”に相当する。
【０１１７】
上記左右どちらも、版数と、該当箇所プログラム文と、警告内容とから成る。すなわち、まず左側の表示領域には、旧版に関する版数５２と該当箇所プログラム文５３と警告内容５４とが表示される。同様に、右側の表示領域には、新版に関する版数５５と該当箇所プログラム文５６と警告内容５７とが表示される。
【０１１８】
これは、例えば、上記判定対象レコードの版数（修正前）３７が上記版数５２の表示領域に表示されると共に、版数（修正後）３８が上記版数５５の表示領域に表示される。
同様に、上記判定対象レコードの行番号（修正前）３４のプログラム文が上記該当箇所プログラム文５３の表示領域に表示されると共に、行番号（修正後）３５のプログラム文が上記該当箇所プログラム文５６の表示領域に表示される。
【０１１９】
尚、これは、図６の例のように複数行のプログラム文が表示されるものであってもよい。すなわち、行番号（修正前）３４や行番号（修正後）３５の行だけでなく、その数行後までの複数行やその前後の複数行等も、表示されるものであってもよい。あるいは、該当箇所プログラム文５３，５６には、初期状態では行番号（修正前）３４や行番号（修正後）３５の行を中心として表示されるが、全プログラムがスクロール表示可能であるように表示されるものであってもよい。
【０１２０】
尚、これらの表示の際には、上記テーブル３０だけでなく、対象プログラム・ファイル（ここではfile_a.cの３．０版と３．１版）も参照される。
同様に、判定対象レコードの違反規約番号（修正前）３１に対応する設計規約４３が、警告内容５４の表示領域に表示されると共に、違反規約番号（修正後）３６に対応する設計規約４３が、警告内容５７の表示領域に表示される。つまり、これらの表示の際には、上記テーブル３０だけでなく、上記テーブル４１も参照される。
【０１２１】
上記判定対象レコードは、例えばユーザが「次の警告」ボタン６１を操作する毎に順次切り換わる。これは、例えば一例としては、テーブル３０において判定３９が「未判定」である各レコードを、順次、上記判定対象レコードとする。あるいは、判定３９が「未判定」であるレコードだけでなく、説明４０が空欄（ＮＵＬＬ）となっているレコードも含めて、これらの各レコードを、順次、上記判定対象レコードとする。
【０１２２】
但し、この様な例に限らない。例えば、上記表示領域５１にはユーザが自由に任意のプログラム・ファイル名を入力できるようにして、このプログラムに関する各レコードを、順次、上記判定対象レコードとするようにしてもよい。
【０１２３】
この様な例の場合、図示の例では表示領域５１に設定されたファイルは「file_a.c」であるので、図５（ａ）のテーブル３０の例では、１番目と２番目と３番目の３つのレコードが、「次の警告」ボタン６１が操作される毎に、順次、判定対象レコードとなる。判定対象レコードが変わる毎に、新たな判定対象レコードの情報に基づいて、上記のように各表示領域５２，５３，５４，５５，５６，５７の表示を行うことになる。
【０１２４】
例えば、最初は１番目のレコードが判定対象レコードとなって上記各表示領域の表示が行われることになる。そして、この状態でユーザが「次の警告」ボタン６１を操作すると、今度は２番目のレコードが判定対象レコードとなって上記各表示領域の表示が行われることになる。この状態で更にユーザが「次の警告」ボタン６１を操作すると、今度は３番目のレコードが判定対象レコードとなって上記各表示領域の表示が行われることになる。
【０１２５】
但し、既に判定３９と説明４０の両方とも情報が格納されているレコードは、判定対象レコードとはしないように制御してもよい。
尚、該当箇所プログラム文５３、５６の表示については、旧版と新版とで異なる部分が分かり易いように表示されるようにしてもよい。例えば、旧版と新版とで異なる部分については、灰色の背景色が塗られた状態で表示されている。これにより、プログラムの変更点がユーザに分かり易くなっている。
【０１２６】
また、警告内容５４、５７の表示部分については、プログラムの修正前後の警告内容（違反した設計規約の内容、または「警告なし（規約違反無し）」）が表示されているので、プログラムの修正に伴って警告内容が変化する様子が分かるようになっている。特に、修正後の警告内容５７が「警告なし」となっている場合には、該当箇所プログラム文５３、５６の表示内容を参照することで、どの様な修正を行ったことで警告が解消されたのかが、分かることになる。
【０１２７】
図５の画面５０では、上記表示領域（５２〜５７）の下側に、更に、判定の入力欄５８と説明の入力欄５９が設けられている。
ここで、これらの入力欄５８、５９に任意のデータを入力できるのは、予め決められた特定のユーザ（例えば熟練した作業者）のみであるように制限することが望ましい。
【０１２８】
その為に、例えば上述したように、図５の画面５０は、予め設定された特定ユーザ（熟練者等）の端末の画面１２にのみ自動的に表示させるようにするが、この例に限らない。例えば、画面５０自体は任意に表示可能であり、更に上記表示領域５１には任意のユーザが任意のプログラム・ファイル名を入力することができ、このファイル名のプログラムに関して上記表示領域（５２〜５７）の情報が表示されるようにしてもよい。但し、入力欄５８、５９への入力に関しては、例えばユーザＩＤを入力させることでこのユーザが上記特定ユーザであるか否かをチェックし、特定ユーザではない場合には入力を許可しないようにする。尚、勿論、特定ユーザのユーザＩＤは、予め登録されている。
【０１２９】
上記特定のユーザ（例えば熟練した作業者）は、上記表示領域（５２〜５７）の表示内容を参照することで、プログラムの修正内容やその結果（警告内容の変化；特に修正後に「警告なし」となったか否か）を確認する。そして、修正内容について評価し、評価結果を判定の入力欄５８で入力する。
【０１３０】
尚、本例では、判定の入力欄５８において所定のマーク（▽マーク）を操作することで所定の評価結果選択肢が表示され、この中から任意の評価結果を選択する。選択肢は、「３：良い」、「２：問題なし」、「１：悪い」の３つであり、この中から任意の評価結果を選択することになる。
【０１３１】
尚、「１：悪い」とは、例えば修正を行っても警告が解消されない場合であるが、この例に限らず、修正によって警告が解消されても「１：悪い」と判定される場合に有り得る。すなわち、例えば上記従来の課題で説明した「表面的には警告を受けないような形にできるが、本質的に問題を解決できるものではない場合」等に対しては、「１：悪い」と評価される場合も有り得る。一方、（表面的ではなく）実質的に警告を解消させた修正に関しては、「３：良い」または「２：問題なし」と評価されることになる。
【０１３２】
また、説明の入力欄５９には、任意の補足説明等が入力できるようになっており、具体例としては例えば図５（ａ）の上から３番目のレコードにおける説明４０の欄に示す文章等があるが、勿論、この例に限らない（上記特定のユーザが自由に所望の補足説明文章を入力すればよい）。
【０１３３】
そして、ユーザが図示の「登録」ボタン６０を操作すると、上記各入力欄５８，５９に入力された情報は、上記判定対象レコードにおける上記判定３９、説明４０の各フィールドに、それぞれ、格納される。尚、本例では表示していないが、これら入力欄５８，５９の入力情報が、どの特定ユーザ（熟練した作業者）により入力されたものであるのかを記録しても良い。
【０１３４】
上述したようにして作成された修正データテーブル３０を用いて、例えば図７や図８に示す画面を表示させることができる。これにより、各ユーザ（基本的には上記特定ユーザ以外のユーザ；特に熟練度が低いユーザ（初心者等））は、任意の警告（設計規約違反）に関して、特にその警告を（表面的ではなく）実質的に解消させた修正を、熟練者などによる評価によって知ることができ、その修正内容を参考にして的確な（警告を実質的に解消させる）修正を行うことができる。また、熟練者等によって更に補足説明が成されていた場合には、より的確な修正を行える（あるいは的確な修正が行える可能性が高まる）ことになる。
【０１３５】
上記のように、本システムでは、例えば各ユーザの端末のディスプレイに、例えば図７や図８に示す画面を表示させることができるので、特に熟練者以外の各ユーザは、自己が作成したプログラムであって１以上の警告があったプログラムの修正に役立てることができる。すなわち、より的確な修正を手間／時間が掛かることなく行えるようになる。これについて、以下、図７や図８を参照しながら説明する。
【０１３６】
まず、静的解析警告指摘対応検索部９は、例えば図７に示すような検索画面７０を表示し、修正データテーブル３０を参照することで図示の検索結果表示領域７３に検索結果を表示できる。
【０１３７】
図７の検索画面７０では、初期状態では図示の検索結果表示領域７３には何も表示されていない。初期状態では図示の設計規約指定領域７１、「検索」ボタン７２、「内容表示」ボタン７４、「終了」ボタン７５が表示される。
【０１３８】
設計規約指定領域７１における所定マーク（▽）を操作すると、例えば上記規約データテーブル４１の全てのレコードの設計規約４３の内容が、一覧表示される（不図示のドロップダウンメニューが表示される）。ユーザが、この一覧のなかから所望の設計規約を選択すると、選択された設計規約に対応する規約番号４１（図示の例では規約番号＝‘１’）を用いて修正データテーブル３０を検索することで、該当レコード（ここでは違反規約番号（修正前）３１＝‘１’であるレコード）が全て抽出される。
【０１３９】
そして、全ての該当レコードが上記検索結果表示領域７３に一覧表示される（但し、予め任意に決められている所定のデータ項目のみが表示される）。本例では、該当レコードのファイル名３３、行番号（修正前）３４、判定３９、説明４０の内容が、それぞれ、図７に示す検索結果表示領域７３におけるファイル名７３ｂ、行番号７３ｃ、判定７３ｄ、説明７３ｅに表示されることになるが、これは一例であり、この例に限らない。
【０１４０】
尚、図５（ａ）に示す例では全レコードが違反規約番号（修正前）３１＝‘１’であるので、全レコードが該当レコードとなり、図７の検索結果表示領域７３に示すような表示が行われることになる。
【０１４１】
そして、ユーザは、マウス等を操作することで、上記検索結果表示領域７３に一覧表示されるレコードのなかから任意のレコードを選択指定する。尚、図示の選択７３ａに三角矢印マークが表示されているレコードが、現在指定されているレコードである。
【０１４２】
そして、任意のレコードが選択指定された状態でユーザが図示の「内容表示」ボタン７４を操作すると、選択指定されているレコードについての詳細情報を表示する画面（図８の詳細表示画面８０）が表示される（静的解析警告指摘対応検索部９が、画面８０を表示する）。
【０１４３】
図８の詳細表示画面８０において、ファイル名８１には上記選択指定されたレコードのファイル名３３が表示される。
また、ファイル名８１の下側には、左と右それぞれに各種情報表示領域がある。左側には修正前に関する情報、右側には修正後に関する情報が表示される。
【０１４４】
すなわち、まず、上記選択指定されたレコードの版数（修正前）３７が、図示の版数の表示領域８２に表示されると共に、版数（修正後）３８が図示の版数の表示領域８５に表示される。
【０１４５】
同様に、選択指定されたレコードの行番号（修正前）３４のプログラム文が、図示の該当箇所プログラム文の表示領域８３に表示されると共に、行番号（修正後）３５のプログラム文が図示の該当箇所プログラム文の表示領域８６に表示される。尚、これは、図６の例と同様に、複数行のプログラム文が表示されるものであってもよく、また、これらの表示の際には、上記テーブル３０だけでなく、対象プログラム・ファイル（ここではfile_a.cの３．０版と３．１版）も参照される。
【０１４６】
同様に、選択指定されたレコードの違反規約番号（修正前）３１に対応する設計規約４３が、警告内容の表示領域８４に表示されると共に、違反規約番号（修正後）３６に対応する設計規約４３が、警告内容の表示領域８７に表示される。尚、これらの表示の際には、上記テーブル３０だけでなく、上記テーブル４１も参照する。つまり、テーブル４１から違反規約番号に該当するレコード（その規約番号４２が違反規約番号と同一であるレコード）の設計規約４３を取得して、これを表示することになる。尚、違反規約番号（修正後）３６が“−”となっている場合には、例えば図示のように「警告なし」と表示する。
【０１４７】
更に、選択指定されたレコードの判定３９が判定結果表示領域８８に表示されると共に、説明４０が補足説明表示領域８９に表示される。
上記のように詳細表示画面８０を表示させることで、ユーザは、所望の警告に係る他者のプログラム文修正例（修正前と修正後）を、熟練した作業者等による評価結果と共に参照することができる。
【０１４８】
これにより、静的解析の結果、作成したプログラムに対して設計規約への違反を警告された作業者が、適切な修正方法が分からない場合にも、過去に行われた修正方法が熟練者の評価付き（場合によっては更に説明付き）で蓄積されて且つ容易に検索可能となっている本システムを用いれば、適切な修正方法を容易に見出し易くなる。
【０１４９】
ここで、図６の検索画面７０は、例えば図３に示す警告箇所表示画面２０からジャンプして表示させることもできる。そして、この場合には、上記設計規約指定領域７１による指定と「検索」ボタン７２の操作を行わなくても、最初から検索結果表示領域７３に検索結果が表示された状態で表示させることができる。これについて以下、説明する。
【０１５０】
まず、上述した図３に関する説明で、ユーザが、プログラム表示領域２１において任意の行を選択したうえで（黒四角■の行）「修正候補の検索」ボタン２４を操作すると、現在選択されている行（黒四角■の行）の設計規約違反を解消する為に参考となる情報が得られる表示が行われる旨、説明した。当該参考となる情報が得られる表示が、上記図７、図８の表示である。
【０１５１】
上述したように、黒四角■の行のプログラム文が違反している設計規約は分かるので（設計規約表示領域２２に表示される）、「修正候補の検索」ボタン２４が操作された場合には、この違反している設計規約を、そのまま、上記設計規約指定領域７１による指定と見做すと共に、「検索」ボタン７２が操作されたものと見做して、上述した検索処理と検索結果に基づく検索結果表示領域７３の表示処理を行う。
【０１５２】
尚、他の例としては、例えば警告箇所表示画面２０上において、ユーザがマウス操作等によって設計規約表示領域２２の部分を指定すると共に「検索」ボタン７２を操作する場合でも、上記と同様に、検索画面７０へジャンプして検索済みの状態で表示させることができる。
【０１５３】
尚、上記図６の画面５０上の領域５８，５９に関して、もし熟練した作業者等による入力がなければ、テーブル３０における判定３９には「−：未判定」が格納され、説明４０は空欄となる。
【０１５４】
なお、図７の画面７０における検索方法に関して、図７には示していないが、例えば検索条件に判定のレベルや、ファイル名、日付などの条件を指定して、絞り込んで検索を行うようにすることも可能である。
【０１５５】
最後に、図９に、プログラム改善支援システム１０のハードウェア構成例を示す。
本例のプログラム改善支援システム１０は、汎用的なコンピュータシステム上に構築することができる。これより、図９は、汎用的なコンピュータシステム（一般的なパソコン、サーバ装置等）のハードウェア構成例と見做すこともできる。
【０１５６】
図９に示すコンピュータ９０は、演算装置９１、主記憶装置９２、ディスプレイ装置９３、補助記憶装置９４、入力装置９５等を備えており、これらがバス９６に接続されて相互に信号を送受信可能な構成となっている。
【０１５７】
プログラム改善支援システム１０の上記各種処理機能を実現させるアプリケーションプログラムは、例えば予め補助記憶装置９４（ハードディスク等）に記憶されている。実行時には、このプログラムが補助記憶装置９４から主記憶装置９２（メモリ等）にロードされ、演算装置９１（ＣＰＵ／ＭＰＵ等）上で実行されることにより、上記各種処理機能を実現させることができる。すなわち、上述したプログラム登録部１、静的解析実行部４、変更差分抽出部６、静的解析結果変化要因分析部７、静的解析警告指摘箇所抽出部８、静的解析警告指摘対応検索部９、変化要因評価結果入力部１１等の各種処理機能を実現させることができる。
【０１５８】
また、上述した構成管理ＤＢ（データベース）２、設計規約ＤＢ（データベース）５、静的解析ＤＢ（データベース）３等の各種データベースは、例えば補助記憶装置９４（ハードディスク等）に記憶されるものであってよいが、この例に限らない。
【０１５９】
尚、入力装置９５は例えばキーボード、マウス等である。
以上説明したように、本例のプログラム改善支援システム１０によれば、プログラムを作成した後に静的解析を行うシステムにおいて、ユーザが静的解析結果に応じてプログラムを修正する際に（設計規約違反部分の修正）、この設計規約違反に対する過去の他者による修正結果（修正内容、修正後に警告が解消されたか否か等）を、熟練者等の評価／説明付きで参照することができる。これにより、ユーザは、より具体的に修正方法を知ったり、より適切な修正方法を知ることができるようになるため、プログラムの設計規約違反部分の修正を、効率的・高品質に行うことができるようになる。
【０１６０】
本システムを活用することにより、より高品質のプログラムを効率的に作成することができるようになる。
【符号の説明】
【０１６１】
１  プログラム登録部
２  構成管理ＤＢ（データベース）
３  静的解析ＤＢ（データベース）
４  静的解析実行部
５  設計規約ＤＢ（データベース）
６  変更差分抽出部
７  静的解析結果変化要因分析部
８  静的解析警告指摘箇所抽出部
９  静的解析警告指摘対応検索部
１０  プログラム改善支援システム
１１  変化要因評価結果入力部
１２  画面
２０  警告箇所表示画面
２１  プログラム表示領域
２２  設計規約表示領域
２３  指摘箇所表示領域
２４  「修正候補の検索」ボタン
２５  ファイル名
３０  修正データテーブル
３１  違反規約番号（修正前）
３２  プロジェクト名
３３  ファイル名
３４  行番号（修正前）
３５  行番号（修正後）
３６  違反規約番号（修正後）
３７  版数（修正前）
３８  版数（修正後）
３９  判定
４０  説明
４１  規約データテーブル
４２  規約番号
４３  設計規約
４４  有効／無効
５０  差分表示入力画面
５１  ファイル名表示領域
５２  版数（旧版）
５３  該当箇所プログラム文（旧版）
５４  警告内容（旧版）
５５  版数（新版）
５６  該当箇所プログラム文（新版）
５７  警告内容（新版）
５８  判定の入力欄
５９  説明の入力欄
６０  「登録」ボタン
６１  「次の警告」ボタン
７０  検索画面
７１  設計規約指定領域
７２  「検索」ボタン
７３  検索結果表示領域
７３ａ  選択
７３ｂ  ファイル名
７３ｃ  行番号
７３ｄ  判定
７３ｅ  説明
７４  「内容表示」ボタン
７５  「終了」ボタン
８０  詳細表示画面
８１  ファイル名
８２  版数（修正前）の表示領域
８３  該当箇所プログラム文（修正前）の表示領域
８４  警告内容（修正前）の表示領域
８５  版数（修正後）の表示領域
８６  該当箇所プログラム文（修正後）の表示領域
８７  警告内容（修正後）の表示領域
８８  判定結果表示領域
８９  補足説明表示領域
９０  コンピュータ
９１  演算装置
９２  主記憶装置
９３  ディスプレイ装置
９４  補助記憶装置
９５  入力装置
９６  バス
【図１】
0005741265.tif 000002
【図２】
0005741265.tif 000003
【図３】
0005741265.tif 000004
【図４】
0005741265.tif 000005
【図５】
0005741265.tif 000006
【図７】
0005741265.tif 000007
【図９】
0005741265.tif 000008
【図６】
0005741265.tif 000009
【図８】
0005741265.tif 000010