特許第5741265号(P5741265)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

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

▶ 富士電機株式会社の特許一覧

<>
  • 特許5741265-プログラム改善支援システム 図000002
  • 特許5741265-プログラム改善支援システム 図000003
  • 特許5741265-プログラム改善支援システム 図000004
  • 特許5741265-プログラム改善支援システム 図000005
  • 特許5741265-プログラム改善支援システム 図000006
  • 特許5741265-プログラム改善支援システム 図000007
  • 特許5741265-プログラム改善支援システム 図000008
  • 特許5741265-プログラム改善支援システム 図000009
  • 特許5741265-プログラム改善支援システム 図000010
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5741265
(24)【登録日】2015年5月15日
(45)【発行日】2015年7月1日
(54)【発明の名称】プログラム改善支援システム
(51)【国際特許分類】
   G06F 11/36 20060101AFI20150611BHJP
【FI】
   G06F9/06 620M
【請求項の数】7
【全頁数】29
(21)【出願番号】特願2011-154580(P2011-154580)
(22)【出願日】2011年7月13日
(65)【公開番号】特開2013-20519(P2013-20519A)
(43)【公開日】2013年1月31日
【審査請求日】2014年6月16日
(73)【特許権者】
【識別番号】000005234
【氏名又は名称】富士電機株式会社
(74)【代理人】
【識別番号】100074099
【弁理士】
【氏名又は名称】大菅 義之
(72)【発明者】
【氏名】徳田 寛和
【審査官】 石川 亮
(56)【参考文献】
【文献】 特開2004−126866(JP,A)
【文献】 国際公開第2008/129619(WO,A1)
【文献】 特開2011−081496(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/44
G06F 11/36
(57)【特許請求の範囲】
【請求項1】
任意のプログラムが登録されるプログラム記憶手段と、
予め設計規約が記憶されている設計規約記憶手段と、
該プログラム記憶手段に初版または更新版の前記プログラムが新たに登録された後に、該新たに登録されたプログラムに対して前記設計規約に基づいて静的解析を実行する静的解析実行手段と、
該静的解析実行手段による前記静的解析結果として少なくとも設計規約違反箇所と違反内容が記憶される静的解析結果記憶手段と、
前記プログラム記憶手段に登録されるプログラムのうち複数の版が存在するプログラムに関して、相対的な旧版・新版となる任意の2つの版毎に、該2つの版それぞれの前記静的解析結果に基づいて、旧版における前記設計規約違反箇所と、新版において該設計規約違反箇所に対応する箇所である該当箇所とで、前記違反内容が異なる場合には、該設計規約違反箇所と該当箇所に関する情報を新旧関連情報として記憶する新旧関連情報抽出・記憶手段と、
該新旧関連情報抽出・記憶手段に記憶される新旧関連情報に基づいて、任意の設計規約に関して、前記設計規約違反箇所のプログラム文と前記該当箇所のプログラム文とを、その違反内容変化と共に表示する支援情報表示手段とを有し、
前記新旧関連情報抽出・記憶手段は、前記該当箇所に関しては違反が無い場合に前記違反内容が異なる場合と見做して、前記設計規約違反箇所と該当箇所に関する情報を新旧関連情報として記憶することを特徴とするプログラム改善支援システム。
【請求項2】
前記新旧関連情報抽出・記憶手段に記憶される前記新旧関連情報に基づいて、前記設計規約違反箇所のプログラム文と前記該当箇所のプログラム文とを、その違反内容と共に表示し、該表示内容に対する任意の評価結果入力を受け付け、入力された評価結果を前記新旧関連情報に対応付けて前記新旧関連情報抽出・記憶手段に追加記憶する変化要因評価結果入力手段を更に有し、
前記支援情報表示手段は、前記設計規約違反箇所のプログラム文と前記該当箇所のプログラム文とを、その違反内容変化と前記評価結果と共に表示することを特徴とする請求項記載のプログラム改善支援システム。
【請求項3】
前記違反内容変化の表示は、設計規約違反箇所に係る規約違反が、前記該当箇所では違反なしとなっていることを表示するものであることを特徴とする請求項1または2に記載のプログラム改善支援システム。
【請求項4】
前記変化要因評価結果入力手段は、予め登録されている特定ユーザに対してのみ、前記評価結果入力を許可することを特徴とする請求項2記載のプログラム改善支援システム。
【請求項5】
前記変化要因評価結果入力手段は、前記評価結果入力に加えて更に任意の補足説明の入力も受け付け、入力された評価結果と補足説明を前記新旧関連情報に対応付けて前記新旧関連情報抽出・記憶手段に記憶し、
前記支援情報表示手段は、前記表示の際に該評価結果と補足説明も表示することを特徴とする請求項記載のプログラム改善支援システム。
【請求項6】
前記支援情報表示手段は、
任意に指定される設計規約に基づいて、旧版に係る設計規約違反が該指定される設計規約に対する違反である新旧関連情報を、前記新旧関連情報抽出・記憶手段を検索して求めて一覧表示すると共に、該一覧表示中から任意の新旧関連情報を選択させる検索・選択手段と、
該検索手段で選択された新旧関連情報を用いて、前記設計規約違反箇所のプログラム文と前記該当箇所のプログラム文とその違反内容変化の表示を行う表示手段と、
を有することを特徴とする請求項1記載のプログラム改善支援システム。
【請求項7】
前記静的解析結果記憶手段に記憶された静的解析結果に基づいて、任意のプログラムの任意の版に関する設計規約違反箇所と違反内容を抽出して表示すると共に、該表示から任意の設計規約違反が指定されると、前記支援情報表示手段を起動する静的解析警告指摘箇所抽出手段を更に有し、
前記支援情報表示手段は、該静的解析警告指摘箇所抽出手段で指定された設計規約違反に関して、前記検索と一覧表示を行うことを特徴とする請求項記載のプログラム改善支援システム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、より品質の高いプログラムになるようにプログラム修正できるようにプログラマを支援するシステム等に関する。
【背景技術】
【0002】
一般に、プログラマが任意のプログラムを作成する際には、作成したプログラムを実際に動作させて、動作が正しいことを確認し、動作が正しくない場合にはプログラム修正を行って不具合を除去する作業(デバッグ作業)が行われている。
【0003】
しかし、一般に、このようにプログラムを実際に動作させて検証する方法では、全てのプログラム動作について確認を行うことは無理であるため、代表的な動作を選択して動作確認を実施する。このため、この方法では、確認していない動作に関して不具合が残っている可能性があるという欠点がある。
【0004】
このような検証方法の弱点を補って、プログラムの不具合の有無の確認作業を効率的に実行するための方法として、静的解析技術が用いられることがある。静的解析では、実装したプログラムを設計規約と照合し、設計規約に合わない形式で実装されているプログラムには欠陥の疑いがあるものとして警告を行う。この方法は、プログラムを実行せずに(動作させずに)確認を行うため、静的解析と呼ばれている。
【0005】
静的解析技術によれば、プログラムを実装した段階で確認ができるため、プログラムを動作させて確認するよりも早い段階で確認でき、確認作業を効率的に行うことにも繋がることになる。また、欠陥の疑いがある箇所を絞り込むこともできるので、ソースコードレビューを実施する際にも、効率的に作業を行うことができる。
【0006】
また、組込みシステムにおいては、C言語のような比較的ハードウェアを意識した言語で実装されることが多いので、プログラム記述言語自身による欠陥排除の機構にはあまり依存することができないため、静的解析技術を用いることで品質レベルの向上も期待できる。
【0007】
このような理由より、静的解析は、プログラムを実行して確認する作業と合わせて、実施されることが多い。
静的解析技術は、例えば、下記の従来技術文献に開示されている。
【0008】
特許文献3には、規約情報のデータベースに登録されている構文解析項目等に基づいてソースプログラムを静的に解析する技術が開示されている。
特許文献4には、プログラムを制御構造ツリーに展開し、リソースの確保と解放との対応の整合性を静的に確認する技術が開示されている。
【0009】
特許文献6には、プログラム実行中に変化しないデータ等の不変情報に関連付けられている機能単位(変数または処理)の数などを、分割されたプログラム毎に分析することにより、機能的なまとまりの程度を示す凝集度を、静的に算出する技術が開示されている。
【0010】
特許文献7には、欠陥の可能性がある比較演算子と論理演算子との組み合わせパターンをあらかじめ作成し、これらのパターンへの一致を静的に検査することにより、欠陥の可能性があるプログラムを抽出する技術が開示されている。
【0011】
ところで、静的解析の課題として、静的解析は通常、プログラム全体に対して解析を行うため、解析結果が膨大となることが多い。そこで、特許文献5においては、構成管理ツールと関連付けることにより、この課題を解決する技術が開示されている。すなわち、解析対象のソースコードを構成管理ツールで管理し、構成管理ツールにより付加される日時情報やラベル情報等の識別情報とともに、解析結果を解析対象毎にデータベースに蓄積することにより、分析を容易にしている。
【0012】
また、特許文献2においては、ソースコード解析支援システム自身をリモートに配置し、各端末はソースコードを送信すると解析結果を受信できるようにして、端末側の作業者は静的解析についての多くの知識を必要とせずとも、静的解析を実行できるようにする技術が開示されている。
【0013】
また、静的解析の他の課題として、静的解析では欠陥の疑いがあることは示すことができるが、どのようにすれば解決することができるか、個別には指摘することはできないため、指摘があった場合には修正方法を個別に作業者が検討しなければならないという課題がある。
【0014】
この課題は、特許文献1でも指摘されている。そこで、特許文献1では、個々の開発担当者により行われたプログラムの解析結果を組織的に管理し、組織やプロジェクトの単位で有効かつ柔軟に活用するための技術や、ソースコード上の問題点を指摘することは可能であるが、その問題点をどのように解決すればよいかという情報は何ら提供されない、という課題を解決するための技術が開示されている。特にこの後者に対して、特許文献1では測定されたメトリクス情報を所定の統計量とともに出力したり、検出されたメトリクス情報の経時的な推移を表形式やグラフ形式で出力したりすることにより、プログラムの問題点を解決するために利用できるようにしている。
【先行技術文献】
【特許文献】
【0015】
【特許文献1】特開2002−091764号公報
【特許文献2】特開2004−240477号公報
【特許文献3】特開2006−236042号公報
【特許文献4】特開2004−145381号公報
【特許文献5】特開2005−202494号公報
【特許文献6】特開2004−062452号公報
【特許文献7】特開1999−134188号公報
【発明の概要】
【発明が解決しようとする課題】
【0016】
しかしながら、“欠陥の可能性の指摘”(警告)に対して解決する方法としていくつかの方法があり、そのうちのいくつかは本質的に問題を解決するが(つまり、プログラムの欠陥を解消するが)、そのうちのほかのものは表面的には警告を受けないような形にできるが、本質的に問題を解決できるものではない場合には、統計量との比較や、表形式やグラフ形式で表示された経時的な推移のみでは、どの修正方法が本質的に問題を解決できる妥当なものか判断するのが難しいことがある。また、初級の作業者の場合には、欠陥の可能性の指摘があったとしても、具体的にどのように修正すれば良いか、判断が難しいことがある。
【0017】
本発明の課題は、任意に作成されるプログラムに関する静的解析結果に基づいて、警告を解消し得る具体的なプログラム修正方法を、容易に、更に場合によっては適切な評価付きで、把握することができるようにし、以ってプログラムの修正を容易に的確に行えるようにするプログラム改善支援システム等を提供することにある。
【課題を解決するための手段】
【0018】
本発明のプログラム改善支援システムは、任意のプログラムが登録されるプログラム記憶手段と、予め設計規約が記憶されている設計規約記憶手段と、該プログラム記憶手段に初版または更新版の前記プログラムが新たに登録される毎に、該新たに登録されるプログラムに対して前記設計規約に基づいて静的解析を実行する静的解析実行手段と、該静的解析実行手段による前記静的解析結果として少なくとも設計規約違反箇所と違反内容が記憶される静的解析結果記憶手段と、前記プログラム記憶手段に登録されるプログラムのうち複数の版が存在するプログラムに関して、相対的な旧版・新版となる任意の2つの版毎に、該2つの版それぞれの前記静的解析結果に基づいて、旧版における前記設計規約違反箇所と、新版において該設計規約違反箇所に対応する箇所である該当箇所とで、前記違反内容が異なる場合には、該設計規約違反箇所と該当箇所に関する情報を新旧関連情報として記憶する新旧関連情報抽出・記憶手段と、該新旧関連情報抽出・記憶手段に記憶される新旧関連情報に基づいて、任意の設計規約に関して、前記設計規約違反箇所のプログラム文と前記該当箇所のプログラム文とを、その違反内容変化と共に表示する支援情報表示手段とを有する。
【0019】
上記プログラム改善支援システムでは、静的解析結果を用いて上記新旧関連情報を生成・登録することで、これを利用して任意の設計規約に関する違反を解消する為に参考となる情報を表示できる。特に、例えば旧版における任意の規約違反が、新版の上記該当箇所では“違反なし”となっている場合には、設計規約違反箇所のプログラム文と該当箇所のプログラム文の表示を参照することで、ユーザは違反を解消し得る具体的なプログラム文(修正前と修正後)を参照することになる。
【0020】
また、例えば、上記新旧関連情報に基づく表示を、特定ユーザ(熟練者等)に対して行うことで、特定ユーザが任意の評価を行って、この評価結果を上記新旧関連情報に含めるようにしてもよい。これによって、上記プログラム文の表示の際には評価結果も表示することで、ユーザは、より適切な具体例(違反を解消し得るプログラム文(修正前と修正後))を選択的に参照することが可能となる。
【発明の効果】
【0021】
本発明のプログラム改善支援システム等によれば、任意に作成されるプログラムに関する静的解析結果に基づいて、警告を解消し得る具体的なプログラム修正方法を、容易に、更に場合によっては適切な評価付きで、把握することができるようにし、以ってプログラムの修正を容易に的確に行えるようにすることができる。
【図面の簡単な説明】
【0022】
図1】プログラム改善支援システムの構成・機能ブロック図である。
図2】(a)は設計規約例、(b)、(c)はこの設計規約例に係るプログラム例である。
図3】警告箇所表示画面の一例である。
図4】静的解析結果変化要因分析部による分析処理フローチャート図である。
図5】(a)は修正データテーブル、(b)は規約データテーブルの一例である。
図6】差分表示入力画面の一例である。
図7】検索画面の一例である。
図8】詳細表示画面の一例である。
図9】プログラム改善支援システムのハードウェア構成図である。
【発明を実施するための形態】
【0023】
以下、図面を参照して本発明の実施の形態について説明する。
図1は、本例のプログラム改善支援システム10の構成・機能ブロック図である。
プログラムを作成する作業者(プログラマ)は、テキストエディタなどを使用して任意のプログラムを作成する。作成したプログラムは、プログラム登録部1を介してプログラム改善支援システム10に登録される(構成管理DB(データベース)2に格納される)。また、作業者が、後にこのプログラムの更新版(修正版/バージョンアップ版等)を作成したときにも、この更新版のプログラムは、プログラム登録部1を介して構成管理DB2に格納される。
【0024】
尚、プログラム登録部1は、単に任意のデータ/プログラムを入力して記憶装置に記憶する機能を有するものであってよいが、この例に限らない。例えば、本システム10が、サーバ装置と複数のクライアント装置(端末と呼ぶ)とがネットワークに接続されてなるシステムの場合、例えば、各プログラマは端末側でプログラムを作成した後、ネットワークを介してサーバ装置に対してこのプログラムの登録を依頼することになる。この例の場合、例えば、プログラム登録部1はサーバ装置に設けられており、上記登録依頼を受けて登録許可するか否かを判定して、許可する場合にこのプログラムをサーバ装置内の記憶装置(構成管理DB2)に記憶する機能等を有する。尚、この例の場合、画面12は、端末のディスプレイ等であると考えても良い。
【0025】
尚、構成管理DB2は、単なるデータベース(記憶装置)だけでなく、当該データベースに記憶するデータの管理機能(例えば版数管理等)も含むものと考えても良い。構成管理DB2が高度な管理機能を備えている場合には、プログラム作成者は構成管理DB2にログインしたうえで、プログラムの登録を行うようにしても良い。
【0026】
図示の例のプログラム改善支援システム10は、上記プログラム登録部1及び構成管理DB(データベース)2に加えて更に、設計規約DB(データベース)5、静的解析DB(データベース)3等の各種データベースと、静的解析実行部4、変更差分抽出部6、静的解析結果変化要因分析部7、静的解析警告指摘箇所抽出部8、静的解析警告指摘対応検索部9、変化要因評価結果入力部11等の各種処理機能部を備えている。また、任意の画面12をディスプレイ上に表示する機能を備えている。
【0027】
上記のように構成管理DB(データベース)2に登録された任意のプログラムは、静的解析実行部4で静的解析され、この解析結果は静的解析DB(データベース)3に登録される。この静的解析処理は、予め設計規約DB(データベース)5に登録されている設計規約に基づいて実行される。この静的解析処理自体は、既に従来技術で述べたように既存技術であり、処理内容については特に説明しないが、設計規約DB5に登録された設計規約や静的解析結果については、後に具体例を用いて説明するものとする。
【0028】
上記静的解析実行部4による静的解析処理は、各プログラムの初版だけでなく更新版(バージョンアップ版等)に対しても実行される。つまり、任意のプログラムが新たに作成された際には、当然、この新規プログラム(初版)に対して静的解析処理が実行されるが、この解析によって何らかのエラー(設計規約違反等)が検出・警告されれば、プログラムを修正する必要が生じる。更に修正後も全ての警告が解消されずに何らかの警告が残っていれば、更に修正を行うことになる。
【0029】
この様に、新規プログラム作成時だけでなく、このプログラムの更新版(2版、3版、・・・等)が作成されて構成管理DB2に格納される毎に、これら各更新版のプログラムに対しても静的解析処理が実行される。
【0030】
構成管理DB2には、上記のように複数の版のプログラムが逐次登録されて管理されているが、変更差分抽出部6は、これらの複数の版のプログラムのうち、任意の2つの版のプログラムの間の対応関係や差分(変更部分)を抽出する。これは、例えば後述するように上記静的解析実行部4による静的解析処理結果等に基づいて、2つの版のプログラムの間の対応関係や差分(変更部分)を抽出する。
【0031】
静的解析警告指摘箇所抽出部8は、上述した静的解析実行部4によって求められて静的解析DB3に登録された静的解析結果に基づいて、画面表示を行う。これは例えば、プログラムにおいて設計規約違反が指摘された箇所(警告箇所)と警告内容が分かるような画面表示を行う。尚、静的解析警告指摘箇所抽出部8は、上記プログラムにおいて規約違反が指摘された箇所(警告箇所)を抽出して、この警告箇所のプログラム文のみを画面表示等するものであってもよい。これについても後に説明する。
【0032】
これらの差分(変更部分)や警告箇所は、必要に応じて作業者の端末の画面12に表示され、プログラムの状況を確認することができる。尚、プログラム改善支援システム10は、例えばサーバ装置単体で実現してもよいし、上記のようにサーバ装置と複数のクライアント装置(各作業者の端末)とがネットワークに接続された構成で実現してもよい。後者の場合、例えば画面12はクライアント装置のディスプレイに相当することになる。
【0033】
更に、上記静的解析結果変化要因分析部7は、上述した静的解析DB3に登録された静的解析結果で指摘されている設計規約違反の警告に対して、その後の版ではこの警告が消失している場合に(但し、後の説明のように“変化”している場合であってもよく、消失している場合に限らない)、この消失した警告と警告箇所等に関する情報を登録する(例えば後述するテーブル30に登録する)。
【0034】
これは、例えば、まず、任意の2つの版のプログラム(相対的に新版と旧版となる2つのプログラム;例えば後述する図5の例では3.0版と3.1版の2つのプログラム;よってプログラム・ファイル名は同一であってよい)を、静的解析DB3から取得する。
【0035】
更に、これら取得した2つの版のプログラムの対応関係や差分を抽出する(これは、上記変更差分抽出部6の機能によって抽出してもよい)。そして、例えば典型例としては、これら各差分のうち、相対的に旧版となるプログラムでは警告箇所であったが、相対的に新版となるプログラムでは警告が消失しているものに関しては、例えば後述するテーブル30への登録を行う。つまり、この様な差分を上記消失した警告(設計規約違反の警告)等に関連付けて静的解析DB3に登録する(これを「修正前後関連情報」を登録するものと表現する場合もあるものとする)。但し、この様な典型例に限らず、例えば警告が消失していなくても警告内容が変わっていれば、例えば後述するテーブル30への登録を行うようにしてもよい。
【0036】
上記登録内容(修正前後関連情報)の具体例を図5(a)のテーブル30に示し後に説明する。尚、図5(a)の例ではテーブル30に格納される各「修正前後関連情報」(新旧関連情報)は、複数の版が存在するプログラムに関して、例えば、相対的な旧版と新版となる任意の2つの版(修正前、修正後)に関して、旧版(修正前)における設計規約違反箇所(行番号等)と違反(警告)内容と、新版(修正後)において旧版の設計規約違反箇所に対応する箇所(行番号等)とこの対応箇所の違反(警告)内容(「警告なし」も含まれる)とが、関連付けられた情報である。更に、後述するように、後に、熟練した作業者による評価結果や補足説明等が追加される場合もある。
【0037】
また、上記変化要因評価結果入力部11は、上記「修正前後関連情報」(例えば“消失した警告”と、これに関連付けられたプログラムの差分部分等)に基づく画面(例えば図6に示すような差分表示入力画面50)を、画面12等に出力する。
【0038】
そして、変化要因評価結果入力部11は、この画面表示を熟練した作業者等が見る等して、上記差分部分の修正(警告を消失させた修正等)が妥当なものか否かを、熟練した作業者等が判定して、判定した結果(評価結果)や補足説明等を入力できるようにしている。この入力結果は、上記画面表示に用いた「修正前後関連情報」に対応付けて(修正前後関連情報に追加する形で)、静的解析DB3(そのテーブル30等)に登録される。
【0039】
また、上記静的解析警告指摘対応検索部9は、任意に指定される設計規約に基づいて上記静的解析DB3に登録された「修正前後関連情報」の格納テーブル(後述するテーブル30等)を検索して、該当する情報を求める。そして、この検索結果、すなわち、指定された設計規約に違反した過去のケースに係る上記「修正前後関連情報」(修正前後の設計規約違反の警告(「警告なし」も含まれる)、それに関連した修正前後のプログラム文、(情報がある場合には)熟練した作業者の評価結果や補足説明等)を、作業者の端末の画面12に表示させる。
【0040】
以下、上述したプログラム改善支援システム10の各構成について、更に詳しく説明する。
上記の通り、構成管理DB(データベース)2に格納されたプログラムは、(初版であっても更新版であっても)静的解析実行部4で静的解析される。この静的解析処理は、設計規約DB(データベース)5に予め記憶されている各種設計規約に基づき実行される。静的解析の結果は、静的解析DB(データベース)3に格納される。
【0041】
設計規約DB(データベース)5の具体例については後に図5(b)を参照して説明するが、各種設計規約の一例を図2(a)に示す。
設計規約DB5に格納されている設計規約の具体例としては、例えばC言語を対象とした場合、図2(a)に示す例が考えられる。この例は、このプログラム改善支援システム10を使用する組織では、関数の仮引数の変数名により変数の意味を判別できるので可読性や保守性を向上できるという効果を見込んで、このような設計規約を作っているものとしている。
【0042】
この例の場合、プログラムを図2(b)のように記述した場合、静的解析の結果、設計規約違反が警告されることになる(エラーが検出されて警告される)。一方、プログラムを図2(c)のように記述した場合には、設計規約違反は警告されない。
【0043】
設計規約DB5には、例えばこの様な設計規約が複数登録されている。これらの設計規約は、プログラム改善支援システム10を使用する組織の設計方針に従って、その登録内容が任意に決められる。
【0044】
但し、各設計規約は表示用とコンピュータ処理用とから成り、図2(b)には表示用を示している。表示用は、例えば後述する図3のように画面上に表示することで、ユーザが規約内容を認識できるようにする為のものである。一方、コンピュータ処理用は、上記静的解析実行部4が静的解析する際に参照するものであり、表示用の内容に相当するチェックを実行させる為のものである。コンピュータ処理用の具体例は特に示さないが、上記の一例では、図2(b)のように変数型‘int’の後に(変数名(引数名)の記述が無くて)カンマ(,)がある場合には、変数名の記述が無いものとして設計規約違反と判定させるような規約内容となっているものとする。尚、この例に限らず、通常は構文解析を行うのであるから、構文解析を行った結果、引数が無いことが検出された場合に、上記と同様の設計規約違反と判定するようにしてもよい。
【0045】
その後、上記静的解析警告指摘箇所抽出部8が、上記静的解析実行部4によって求められて静的解析DB3に登録された上記静的解析結果に基づいて、警告箇所(規約違反箇所)のプログラム文やその警告内容等を抽出してこれを画面12に表示する(例えば図3のような画面を表示する)。あるいは、プログラム全文を表示すると共に警告箇所や警告内容が分かるような表示を行うようにしてもよい。この表示画面を作業者等が参照することができる。更に作業者は、後述するように、この表示画面(図3の画面等)から“任意の警告への対処方法の参考となる情報が得られる画面”(後述する図7図8の画面等)に移行させることで、警告に対する適切な対処方法(プログラム文の修正方法等)を知ることもできる。
【0046】
尚、上記静的解析警告指摘箇所抽出部8は、上記静的解析実行部4によって新たな静的解析結果が求められると、自動的に起動して上記画面表示を行うものであってもよい。プログラマは、通常、(初版であるか更新版であるかは関係なく)新たに作成したプログラムを登録したら、その解析結果(設計規約違反等の警告がないかを)を知りたいものであり、これより上記のように自動的に起動して解析結果を画面表示するようにしてもよい。そして、更に、上記図7図8等の画面表示に移行することで、効率的に的確にプログラムの警告箇所を修正することが可能となる。
【0047】
図3は、静的解析警告指摘箇所抽出部8による画面12(警告箇所表示画面20と呼ぶ)の表示例である。
尚、ここで静的解析実行部4による静的解析結果について簡単に説明しておく。この静的解析結果の具体例は、特に図示しないが、例えば解析対象プログラム・ファイルのファイル名と版数(バージョン)、解析対象プログラムにおいて規約違反が検出された箇所(警告箇所)の行番号と、当該違反があった規約の識別番号(違反規約番号)等から成るものである。
【0048】
例えばこの様な静的解析結果や構成管理DB2や設計規約DB5等に基づいて、静的解析警告指摘箇所抽出部8は例えば図3に示す警告箇所表示画面20を、例えば画面12に表示する。
【0049】
図3に示す警告箇所表示画面20において、図示の画面上の左上に示すファイル名25には、解析対象プログラムのファイル名が表示され、その下側に示す図示のプログラム表示領域21には、この解析対象のプログラムの内容(プログラム・リスト)が表示される。プログラム表示領域21には、例えば、解析対象のプログラムがスクロール表示される(図では解析対象のプログラムの一部のみが表示されている)。
【0050】
但し、この例に限らず、例えば、静的解析警告指摘箇所抽出部8は、静的解析DB3(静的解析結果)や構成管理DB2や設計規約DB5等に基づいて、警告箇所(規約違反箇所)のプログラム文やその警告内容等を抽出して、当該警告箇所のプログラム文のみをプログラム表示領域21に表示させるようにしてもよい。
【0051】
すなわち、上記静的解析結果における警告箇所の行番号により、構成管理DB2の解析対象プログラムからこの行番号のプログラム文を抽出することで、警告箇所のプログラム文のみをプログラム表示領域21に表示させることができる。同様に、設計規約DB5から上記静的解析結果における違反規約番号に該当する設計規約を抽出して、画面20に表示させることができる(後述する設計規約表示領域22に表示する)。
【0052】
尚、本画面20は、例えば静的解析実行部4の処理後に自動的に表示されるものとし、上記ファイル名25には静的解析実行部4による解析対象のプログラム・ファイル名が自動的に設定されるものとしてもよいが、この例に限らない。例えば、ユーザが任意の解析対象プログラムのファイル名を、上記ファイル名25の入力領域に入力するようにしてもよい。尚、この場合、例えば図示のファイル名25の右側に示す所定ボタン(▽マーク)をユーザが操作すると、構成管理DB2に登録されているプログラム・ファイルのファイル名一覧が表示され、ユーザが任意のファイル名を選択・指定することで、ファイル名25が設定されるようにしてもよい。
【0053】
尚、図3に示す画面は一例であり、この例に限らない。例えば、構成管理DB2が上述したようにデータの管理機能(版数管理等)も有する場合には(版数も指定できるようにしている場合には)、図3と略同様の画面において更に版数の入力欄を設けてもよい。この場合には、ユーザにより指定された任意のファイル名の任意の版数のプログラムに関する静的解析結果が表示されることになる。
【0054】
上記プログラム表示領域21に表示されるプログラム・リストにおいて、何らかの設計規約違反と判定されたプログラム文に対しては、プログラム表示領域21の図上左端の領域に所定のマーク(ここでは四角形のマーク)が表示される。これは、静的解析結果の上記“警告箇所の行番号”に基づいて表示できる。この例では、図示のfunc2()とfunc3()の行(プログラム文)に設計規約違反があるので、このことを示すために、これらfunc2()とfunc3()の行に対しては図上左端の領域にそれぞれ四角形のマーク(白四角□、黒四角■)が表示されている。
【0055】
尚、基本的には白四角□が表示されるが、ユーザ(作業者)が、四角形マークがある行(プログラム文)のなかから任意の行を指定すると、指定された行のマーク表示は、黒四角■に変わるようになっている。図示の例では現在、func3()の行(プログラム文)が指定されているものとしているので、func3()の行のマーク表示は黒四角■になっている。
【0056】
また、警告箇所表示画面20の図上右上に示す設計規約表示領域22には、現在指定されている行(黒四角■の行)に関して“違反している設計規約”の内容が表示される。これは、上記「違反があった規約の識別番号(違反規約番号)」と設計規約DB5に基づいて表示できる(設計規約DB5については後に図5(b)を参照して説明する)。
【0057】
また、画面20の図上右下に示す指摘箇所表示領域23には、現在指定されている行(プログラム文)の関数名等が表示される。
プログラムの製作作業者は、例えば上述したような警告箇所表示画面20の表示内容を参照して、設計規約違反が警告されていれば、この警告に従って上記解析対象のプログラムを修正する(更新版のプログラムを作成する)。
【0058】
ここで、本手法では、ユーザが例えば警告箇所表示画面20内の図示の「修正候補の検索」ボタン24を操作することで、上記の現在指定されている行(黒四角■の行)の設計規約違反を解消する為に参考となる情報が得られる画面(後述する画面70、画面80等)の表示が行われる。これについては、後に詳細に説明するものとする。尚、この場合のユーザとは、主に上記「熟練した作業者」以外の作業者を想定している。
【0059】
上記プログラムの修正が完了したら、更新版プログラムを、プログラム登録部1を使用して構成管理DB2に登録する。これより、上記初回(初版)のプログラムの場合と略同様に、構成管理DB2に登録された上記更新版プログラムに対して、静的解析実行部4により静的解析が実行され、その結果は静的解析DB3に格納される。
【0060】
ここで、上記1回目(初版のプログラム)の登録の場合と異なり、2回目以降(更新版)のプログラムの登録後に関して、更に、上記変更差分抽出部6によって2つの版のプログラムの差分を抽出して(例えば前回(最新版の1つ前の版)のプログラムと今回(最新版)のプログラムとの差分(変更部分)を抽出して)、これを例えば画面12に表示することで、作業者等が画面12を参照してプログラムの修正部分の確認等を行うことができる。
【0061】
上記変更差分抽出部6による上記2つの版のプログラムの差分(変更部分)の抽出処理について、以下、説明する。但し、変更差分抽出部6による画面表示については、ここでは特に示さない。また、必ずしも変更差分抽出部6による画面表示を行う必要はない。但し、変更差分抽出部6の機能自体または処理結果は、後述するように、静的解析結果変化要因分析部7の処理の際に利用される。詳しくは後述する。
【0062】
変更差分抽出部6の処理では、まず、対象となる2つの版のプログラム(ソースコード)同士の対応付けを行う。これは既存技術であり特に詳細には説明しないが、2つの版のプログラム(ソースコード)間で、例えば行単位(1行単位でも複数行単位でもよい)または関数単位等で対応付けを行う。例えば行単位の場合、例えば前回のプログラムの各行毎に、その行に対応する今回のプログラムの行を求めて、両者の行番号を対応付けて一時的に記憶する(前回プログラムの行番号:これに対応する今回プログラムの行番号)。
【0063】
これは、例えば前記プログラムにおける任意の行に関して、今回(最新版)においてたとえ行番号が変わっても内容が変わっていなければ(内容が完全一致する場合には)、当然、問題なく対応付けられることになる。尚、実際には、1行だけ一致しても完全一致とは見做さず、複数行連続して一致した場合に完全一致と見做す場合が多いが、この例に限らない。また、他にも例えば、コメント部分の変更は無視する方法もあり(コメント部分が変更されていても、本文部分に変更がなければ、完全一致と見做す)、様々な方法があってよい。
【0064】
対応付け結果は、上記の通り、例えば行単位の場合には、前回のプログラムにおける任意の行の行番号と、今回(最新版)のプログラムにおいて対応する行の行番号とを、対応付けたものとなる(これに、更に修正の有無を示す情報も付加されてもよい)。
【0065】
例えば、3.0版のプログラムと3.1版のプログラムとを例にして、例えば3.0版の110行目〜115行目に上記関数func2()に係る記述があり、3.1版では同一の記述が120行目〜125行目にあった場合には、“修正なし”の判定と共に3.0版の110行目〜115行目と3.1版の120行目〜125行目とが対応付けられて記憶されることになる。
【0066】
また、例えば、3.0版の200行目〜204行目に上記関数func3()に係る記述があり、3.1版ではその一部が修正された(例えば‘int’の後に変数名が記述された)記述が210行目〜214行目にあった場合には、“修正あり”の判定と共に、3.0版の200行目〜204行目と3.1版の210行目〜214行目とが対応付けられて記憶されることになる。尚、例えば、3.0版の200行目〜204行目と3.1版の210行目〜214行目とが完全一致する場合には、両者は対応付けられるべきものと判定することになる。
【0067】
そして、例えば、“修正あり”となっているものだけを表示する。上記の例では、例えば、3.0版の200行目〜204行目と3.1版の210行目〜214行目とが、両者が対応付けられる形で表示されることになる。
【0068】
尚、上記2つのプログラムの差分に関しては、上述した前回と今回(最新版)との差分の例に限らず、更に前々回と今回(最新版)との差分や、初版と今回(最新版)との差分等を求めるものであってもよい。
【0069】
このように、更新版が存在するプログラムに関して、構成管理DB2に格納された各版同士の変更部分(差分)等を求めて表示等することができる。
尚、上記変更差分抽出部6の処理機能または処理結果は、上記のように単に画面表示する場合に限らず、例えば後述する図4の処理で用いることもできる。
【0070】
尚、構成管理DB2が高度な管理機能を備えている場合には、プログラム製作の作業者は構成管理DB2にログインし、修正対象のプログラムを構成管理DB2からチェックアウトした後、プログラムの修正を行い、その後、修正後のプログラムを構成管理DB2にチェックインするようにしてもよい。
【0071】
その際には、構成管理DB2には、修正後(更新版)のプログラムだけでなく、修正日時や修正作業者も登録されるようにしてもよい。また、作業者は必要に応じてベースライン番号(版数)を設定することも可能である。この場合には、変更差分の情報には、修正日時、修正作業者、ベースライン番号(版数)などの付帯情報を含めることができる。
【0072】
更新版が存在するプログラムに関しては、さらに任意のときに(例えば最新版が登録されて静的解析が行われた後等であるが、この例に限らない)、静的解析結果変化要因分析部7によって、任意の2つの版同士の静的解析結果に係る差分(特に旧版では何らかの設計規約違反の警告があった箇所が、新版では警告が解消されている部分)が抽出・登録される。
【0073】
この分析処理の一例を、図4に示すフローチャート図を参照して説明する。
図4は、静的解析結果変化要因分析部7による分析処理フローチャート図である。
尚、この処理の前に、ユーザが任意の解析対象プログラムを指定(そのファイル名の入力等)を行うようにしてもよい。また、本説明では、解析対象プログラムは、初版、2版、3版が作成・登録されているものとし(登録時に静的解析も実行済み)、3版(最新版)のプログラム登録後に本処理が行われる場合を例にして説明するものとする。
【0074】
図4において、まず、解析対象プログラムの初版の静的解析結果をキーとして取得する(ステップS101)。これは、上記のように、静的解析結果は例えばファイル名と版数(バージョン)、“規約違反があった箇所(警告箇所)の行番号”と違反規約番号等から成るものであるので、そのなかでファイル名が解析対象プログラムのファイル名であり且つ版数が初版であるデータ全てを、上記キーとして取得すればよい。
【0075】
次に、キーとして取得した静的解析結果における全ての警告(規約違反)それぞれについて(各規約違反箇所を順次、処理対象として)、以下のステップS103〜S107の処理を実行する(S102−S102a間でループ)。
【0076】
まず、初版における処理対象の規約違反箇所(上記“規約違反があった箇所(警告箇所)の行番号”;以下、違反箇所行番号と言う)と、上記変更差分抽出部6による上記2つの版のプログラム同士の対応付け結果もしくは差分の抽出処理結果とに基づいて、1つ後の版(最初は、初版の次の版;本例では2版)のプログラムにおける「該当箇所」の静的解析結果を取得する(ステップS103)。
【0077】
これは、上記変更差分抽出部6の対応付け結果によって、初版の各行毎に、その行に対応する2版の行が分かるので(例えば対応する行番号同士がペアで登録されているので)、上記各規約違反箇所(上記“違反箇所行番号”)毎に、その“違反箇所行番号”の行に対応する1つ後の版のプログラムにおける行の行番号(上記「該当箇所」の行番号)が分かる。これより、上記1つ後の版のプログラムに関する静的解析結果に、この「該当箇所」に関する情報がある場合にはこの情報を取得する。但し、もし、「該当箇所」に関する情報が無い場合には、警告は解消されたものと見做し、ステップS103では例えば“警告なし”が取得されたものとする。
【0078】
ここで、上述した具体例において仮に3.0版が初版、3.1版が1つ後の版であるものとし、例えば上記「初版における処理対象の規約違反箇所」が3.0版の110行目〜115行目であったとするならば、上記例では3.1版における「該当箇所」は120行目〜125行目ということになる。よって、この場合には、3.1版に関する静的解析結果のなかに120行目〜125行目に関する警告があった場合には、この警告内容(違反があった設計規約の規約番号等)が、上記「該当箇所」の静的解析結果として取得されることになる。尚、もし、3.1版に関する静的解析結果のなかに120行目〜125行目に関する警告が無かった場合には、上記「該当箇所」の静的解析結果として“警告なし”が取得されることになる。
【0079】
尚、上記一例では事前に変更差分抽出部6の処理(少なくとも対応付け処理)が行われているものとしたが、この例に限らない。例えば、事前ではなく本処理中に、変更差分抽出部6の処理を行うようにしてもよい。この場合には、ステップS103の処理は、例えば図中に点線で囲ったステップS103a〜S103cの処理を行う。
【0080】
すなわち、変更差分抽出部6の機能の一部(対応付け機能)によって、上記処理対象の規約違反箇所のプログラム文等に基づいて、上記1つ後の版のプログラムを検索して「該当箇所」を求める。すなわち、上記の例では2版のプログラムにおいて初版の上記違反箇所のプログラム文と同一(完全一致)のプログラム文がある箇所の行番号等を、上記「該当箇所」として抽出する(ステップS103a)。
【0081】
そして、この「該当箇所」の行番号等を用いて、上記の例では2版のプログラムに関する静的解析結果を検索して、「該当箇所」に関する警告があればこの警告情報(違反規約番号等)を取得し、警告が無ければ例えば“警告なし”が取得されるものとする(ステップS103b、S103c)。
【0082】
そして、上記初版の規約違反箇所と1つ後の版における「該当箇所」とで、解析結果に変化があるか否かを判定する(ステップS104)。これは、例えば、上記初版プログラムに係る(上記キーにおける)上記規約違反箇所の違反規約番号と、1つ後の版(ここでは2版)のプログラムに係る上記該当箇所に関する違反規約番号とが、一致するか否かを判定し、不一致の場合には解析結果に変化あり(ステップS104,YES)と判定する。尚、上記“警告なし”の場合には、違反規約番号が無いことになるので、必ず不一致となり解析結果に変化あり(ステップS104,YES)と判定されることになる。
【0083】
但し、この例に限らず、典型例としては例えば、1つ後の版(ここでは2版)のプログラムに係る上記「該当箇所」に関しては“警告なし”となっている場合にのみ(この様な変化があった場合のみ)、解析結果に変化あり(ステップS104,YES)と判定するようにしてもよい。
【0084】
尚、上記の通り、1つ後の版(ここでは2版)のプログラムに関する静的解析結果も静的解析DB3に格納されている。この静的解析結果には上記の通り“規約違反があった箇所の行番号”(違反規約番号)が登録されているので、このなかに上記「該当箇所」の行番号が存在しなければ“警告なし”(規約違反なし)と見做すようにすればよい。
【0085】
ステップS104がYESの場合、変更箇所に関する情報(差分情報)の取得を行い(ステップS106)、当該差分情報の登録を行う(ステップS107)。差分情報は、例えば、上記処理対象の新旧2つの版(ここでは初版と2版;本例では後に初版と3版、2版と3版の処理も行うことになる)の相互に対応する行の行番号とこれらの行の違反規約番号、版数等である。ステップS107は、例えば図5(a)に示す修正データテーブル30への差分情報の登録を行うものである。尚、修正データテーブル30も静的解析DB3に格納されるものであってよいが、この例に限らない。
【0086】
図5(a)には、上記修正データテーブル30の構成例を示す。
尚、本例における(修正前)、(修正後)とは、例えば相対的な旧版、新版を意味する。上記図4の処理例では、最初の方の処理では、初版が修正前、その1つ後の版(2版)が修正後として、修正データテーブル30への登録が行われることになる。更に続いて、初版が修正前、上記2版の更にその1つ後の版(3版)が修正後として、修正データテーブル30への登録が行われることになる。更に、2版が修正前、その1つ後の版(3版)が修正後として、修正データテーブル30への登録が行われることになる。尚、何れの場合も、ステップS104がYESの場合に、修正データテーブル30への登録が行われることになる。
【0087】
図5(a)に示す修正データテーブル30は、違反規約番号(修正前)31、プロジェクト名32、ファイル名33、行番号(修正前)34、行番号(修正後)35、違反規約番号(修正後)36、版数(修正前)37、版数(修正後)38、判定39、説明40の各データ項目より成る。
【0088】
ファイル名33には上記解析対象プログラムのファイル名が格納される。尚、プロジェクト名32には、ファイル名33のプログラムが含まれるプロジェクトのプロジェクト名が格納されるが、これは本説明には特に関係ないので、本説明ではプロジェクト名32に関しては省略して説明するものとする。
【0089】
そして、違反規約番号(修正前)31、行番号(修正前)34、版数(修正前)37には、それぞれ、ファイル名33のプログラムの旧版に関する情報が格納される。上記の例では初版プログラムの版数(初版)が版数(修正前)37に格納され、上記違反箇所行番号が行番号(修正前)34に格納され、上記規約違反箇所の違反規約番号が違反規約番号(修正前)31に格納されることになる。
【0090】
同様にして、上記行番号(修正後)35、違反規約番号(修正後)36、版数(修正後)38には、それぞれ、ファイル名33のプログラムの新版に関する情報が格納される。上記の例では2版プログラムの版数(2版)が版数(修正後)38に格納され、上記「該当箇所」の行番号が行番号(修正後)35に格納され、「該当箇所」に関する静的解析結果が違反規約番号(修正後)36に格納されることになる。
【0091】
尚、上記典型例の場合には違反規約番号(修正後)36には必ず「規約違反なし(警告なし)」を意味する情報(図示の例では‘−’)が格納されることになる。これは、上記の通り、典型例では、1つ後の版のプログラムに係る「該当箇所」に関して“警告なし”となっている場合にのみ、ステップS104がYESとなってステップS107の処理が行われるからである。
【0092】
尚、図4の処理の段階では、判定39と説明40には、未だデータは格納されないことになる(例えば判定39に関しては‘未判定’としておく)。判定39と説明40には、後述する処理によって任意の情報が格納され、更にその後、画面表示されることになる。詳しくは後述する。
【0093】
違反規約番号(修正前)31には、修正前(相対的に旧版)のプログラムにおいて違反が指摘された設計規約を示す識別番号(この識別番号は、本例では図5(b)の“規約番号”)が格納される。
【0094】
尚、逐一「相対的に旧版」、「相対的に新版」等と記すことなく、単に「旧版」、「新版」と記す場合もあるものとする。
プロジェクト名32には、ファイル名33のプログラム・ファイルが係るプロジェクトのプロジェクト名が格納される。
【0095】
ファイル名33には、上記の通り解析対象のプログラム・ファイルの名称が格納される。
行番号(修正前)34には、修正前のプログラムにおける設計規約違反が指摘されている箇所を示す情報(行番号)が格納される。
【0096】
行番号(修正後)35には、修正後(相対的に新版)のプログラムにおいて、修正前のプログラムで設計規約違反が指摘されている箇所に該当する箇所(上記「該当箇所」)を示す行番号が格納される。つまり、上記行番号(修正前)34の行に対応する行の行番号が格納される。
【0097】
違反規約番号(修正後)36には、上記行番号(修正後)35の行のプログラム文に関して、設計規約違反がある場合にはその規約番号が格納され、違反が無い場合には違反が無いことを示す記号等(本例では‘−’)が格納される。尚、図4の処理による場合、違反規約番号(修正前)31に‘−’が格納されることはない。また、上記一例のように違反規約番号が不一致の場合にステップS104がYESとなってステップS107の処理が行われる例では、違反規約番号(修正前)31と違反規約番号(修正後)36とは必ず異なることになる。また、上記典型例の場合、違反規約番号(修正後)36には必ず‘−’が格納されることになる(但し、図5(b)は典型例を示すものではない)。
【0098】
版数(修正前)37には、修正前のプログラムの版数が格納されている。
版数(修正後)38には、修正後のプログラムの版数が格納されている。
判定39には、特定ユーザ(熟練した作業者等)が入力した“プログラムの修正方法の評価結果”が格納される。
【0099】
説明40には、特定ユーザ(熟練した作業者等)が入力した任意の“補足説明”の内容が格納される。
上記の通り、判定39、説明40に関しては、後に説明する処理により後からデータが格納されることになる。
【0100】
尚、ここで、設計規約DB(データベース)5に格納される規約データテーブルについて、図5(b)に示す一例を用いて説明しておく。
図5(b)に示す規約データテーブル41は、規約番号42、設計規約43、有効/無効44の各データ項目より成る。
【0101】
設計規約43には、各設計規約の内容が格納されている。尚、上述したように各設計規約は表示用とコンピュータ処理用とから成り、図では表示用のみ示すが、コンピュータ処理用も格納されている。
【0102】
上記各設計規約43に対応して、規約番号42にはその設計規約に割り当てられた識別番号(ID)が格納される。また、有効/無効44にはその設計規約が静的解析実行部4で使用されるか否かを示す情報が格納されている(有効であれば使用され、無効であれば使用されない)。これは、組織毎に必要な設計規約が異なる場合に、その適用/非適用を切り替えるために使用されるが、ここでは特に関係ないので、これ以上は説明しない。
【0103】
再び図4の説明に戻る。
上記ステップS104で“解析結果に変化無し”と判定された場合(ステップS104,NO)、最新版まで参照したか否かを確認し(ステップS105)、未だ最新版まで参照していないときには(ステップS105,NO)、ステップS103に戻る。
【0104】
この場合のステップS103,S104の処理は、上記最初の版の警告(規約違反)に関して更に次の版(本例では3版)のプログラムに関する静的解析結果を取得して、これを用いて上記判定を行うことになる。つまり、3版における上記「該当箇所」とその警告内容も、上記2版の場合と略同様にして分かるので、ステップS104では今度は、この3版の「該当箇所」の警告内容が、初版の警告内容と異なるか否かを判定することになる。あるいは、典型例では、3版の「該当箇所」が“警告なし”となっているか否かを判定し、“警告なし”の場合には解析結果に変化あり(ステップS104,YES)と判定することになる。
【0105】
そして、ステップS104がYESの場合、初版と3版との上記差分情報を取得して上記テーブル30に格納することになる(ステップS106,S107)。
一方、最新版(3版)まで参照済みの場合には(ステップS105,YES)、ループの処理の最後(ステップS102a)にジャンプすることで、未だ未処理の警告があった場合にはループの処理の最初(ステップS102)に戻り、次の処理対象の警告について上記ステップS103〜S107の処理を実行する。また、ステップS102aにおいて未処理の警告が残っていない場合には、ループを抜けて、ステップS108以降の処理へ移行する。
【0106】
また、上記ステップS106,S107の処理を実行した場合も、ループの処理の最後(ステップS102a)に移行することで、上記と同様の処理を行う。この場合には、特に上記典型例では警告(規約違反)が解消されているので、それより後の版を参照する必要性は少ないと考えられるからであるが、この例に限らず、例えばステップS107の後にステップS105を実行するようにしてもよい。
【0107】
ステップS108の処理では、初版(または前回のステップS108の処理で静的解析結果をキーとして取得した版)の次の版の静的解析結果を、キーとして取得する。
次に、これが最新版の静的解析結果をキーとして取得したものであるか否かを判定し(ステップS109)、最新版でなければ(ステップS109,NO)、ループの先頭(ステップS102)の処理に戻る。そして、今度は、上記ステップS101で得たキーではなく、ステップS108で得たキーを用いて、上記ステップS102−s102a間のループ処理を実行することになる。上記の例では、今度は2版をキーとして、2版と1つ後の版(3版)との間で上述した処理を行って、2版において警告を受けた各箇所毎に、3版において警告が変化していた(特に“警告なし”となった)場合には、テーブル30に登録する処理を行うことになる。
【0108】
一方、キーが最新版のものであった場合には(ステップS109,YES)、ステップS102に戻って処理続行してもステップS103で「1つ後の版」が存在しないことになるので、本処理を終了する。
【0109】
上述した図4の処理では、任意のプログラム・ファイル名のプログラムに関して、仮に初版、2版、3版(最新版)が作成されていた場合、最初は初版の静的解析結果(各警告)をキーとして取得して、これら各警告に関して2版、3版それぞれとの変化の有無をチェックする(変化があれば差分情報を登録する)。そして、初版の全警告について処理実行したら、ステップS108で2版の静的解析結果をキーとして取得すると共に、ステップS109がNOとなることからステップS102に戻り、今度は2版に係る各警告について3版における変化の有無をチェックすることになる。そして、2版の全警告について処理実行したら、ステップS108で今度は3版の静的解析結果をキーとして取得するが、ステップS109がYESとなることから、本処理を終了することになる。
【0110】
なお、ステップS107の登録の際には、同じ情報が重複して保存されないように、警告の種別と、変更前の版と、変更後の版についての情報を合わせて保存し、ステップS107で登録する際に同じ情報が既に登録されていたときには重複登録しないようにする。
【0111】
以上の処理により、静的解析結果に基づく各版(バージョン)間の差分の分析結果(例えば図5(a)に示す修正データテーブル30)が、静的解析DB3に格納されることになる。典型例としては、(相対的に)旧版において任意の警告(規約違反)があった箇所について、(相対的に)新版における「該当箇所」では「警告なし」となった場合には、これら旧版と新版との差分情報(旧版の版数と違反規約番号と違反箇所の行番号、新版の版数と違反箇所に対応する箇所(上記「該当箇所」)の行番号等)が、修正データテーブル30に登録される。
【0112】
このように、典型例としては、任意の警告(規約違反)があった版とこの警告が解消された版とに関して、違反箇所/「該当箇所」の行番号や、警告の種別を示す情報等が修正データテーブル30に格納されることになる。
【0113】
変化要因評価結果入力部11は、上述した静的解析結果変化要因分析部7による分析結果(修正データテーブル30)に基づいて、例えば図6に示すような差分表示入力画面50を表示すると共に、当該画面50上で特定ユーザ(熟練者等)による任意の評価結果(判定、説明)の入力を受け付ける。
【0114】
変化要因評価結果入力部11は、例えば修正データテーブル30に新たなレコードが追加される毎に、この新規レコードの情報を用いて、例えば予め設定されている特定ユーザ(熟練者等)の端末のディスプレイに、例えば図6に示すような差分表示入力画面50を表示する。そして、特定ユーザ(熟練者等)に、任意の評価結果(判定、説明)を入力させる。勿論、これは一例であるが、基本的には、修正データテーブル30に格納される全てのレコードに関して、その判定39に(場合によっては説明40も)熟練者等による判定結果が格納されるようにすることが望ましい。それ故、未だ判定39に判定結果が格納されていないレコードに関しては、任意のときに当該レコード(判定対象レコードという)の情報を用いて上記差分表示入力画面50を表示させることになる。
【0115】
図5の差分表示入力画面50の例では、まず、画面50の最上部には、表示対象とするプログラム・ファイル名の表示領域51がある(ここではfile_a.cが表示されている)。これは、例えば上記判定対象レコードのファイル名33が表示されるものである。
【0116】
上記表示領域51の下の表示領域は、左と右に分割されていて、基本的には左側には“旧版に係る情報”、右側には“新版に係る情報”が表示される。尚、旧版とはテーブル30における“修正前”に相当し、新版は同“修正後”に相当する。
【0117】
上記左右どちらも、版数と、該当箇所プログラム文と、警告内容とから成る。すなわち、まず左側の表示領域には、旧版に関する版数52と該当箇所プログラム文53と警告内容54とが表示される。同様に、右側の表示領域には、新版に関する版数55と該当箇所プログラム文56と警告内容57とが表示される。
【0118】
これは、例えば、上記判定対象レコードの版数(修正前)37が上記版数52の表示領域に表示されると共に、版数(修正後)38が上記版数55の表示領域に表示される。
同様に、上記判定対象レコードの行番号(修正前)34のプログラム文が上記該当箇所プログラム文53の表示領域に表示されると共に、行番号(修正後)35のプログラム文が上記該当箇所プログラム文56の表示領域に表示される。
【0119】
尚、これは、図6の例のように複数行のプログラム文が表示されるものであってもよい。すなわち、行番号(修正前)34や行番号(修正後)35の行だけでなく、その数行後までの複数行やその前後の複数行等も、表示されるものであってもよい。あるいは、該当箇所プログラム文53,56には、初期状態では行番号(修正前)34や行番号(修正後)35の行を中心として表示されるが、全プログラムがスクロール表示可能であるように表示されるものであってもよい。
【0120】
尚、これらの表示の際には、上記テーブル30だけでなく、対象プログラム・ファイル(ここではfile_a.cの3.0版と3.1版)も参照される。
同様に、判定対象レコードの違反規約番号(修正前)31に対応する設計規約43が、警告内容54の表示領域に表示されると共に、違反規約番号(修正後)36に対応する設計規約43が、警告内容57の表示領域に表示される。つまり、これらの表示の際には、上記テーブル30だけでなく、上記テーブル41も参照される。
【0121】
上記判定対象レコードは、例えばユーザが「次の警告」ボタン61を操作する毎に順次切り換わる。これは、例えば一例としては、テーブル30において判定39が「未判定」である各レコードを、順次、上記判定対象レコードとする。あるいは、判定39が「未判定」であるレコードだけでなく、説明40が空欄(NULL)となっているレコードも含めて、これらの各レコードを、順次、上記判定対象レコードとする。
【0122】
但し、この様な例に限らない。例えば、上記表示領域51にはユーザが自由に任意のプログラム・ファイル名を入力できるようにして、このプログラムに関する各レコードを、順次、上記判定対象レコードとするようにしてもよい。
【0123】
この様な例の場合、図示の例では表示領域51に設定されたファイルは「file_a.c」であるので、図5(a)のテーブル30の例では、1番目と2番目と3番目の3つのレコードが、「次の警告」ボタン61が操作される毎に、順次、判定対象レコードとなる。判定対象レコードが変わる毎に、新たな判定対象レコードの情報に基づいて、上記のように各表示領域52,53,54,55,56,57の表示を行うことになる。
【0124】
例えば、最初は1番目のレコードが判定対象レコードとなって上記各表示領域の表示が行われることになる。そして、この状態でユーザが「次の警告」ボタン61を操作すると、今度は2番目のレコードが判定対象レコードとなって上記各表示領域の表示が行われることになる。この状態で更にユーザが「次の警告」ボタン61を操作すると、今度は3番目のレコードが判定対象レコードとなって上記各表示領域の表示が行われることになる。
【0125】
但し、既に判定39と説明40の両方とも情報が格納されているレコードは、判定対象レコードとはしないように制御してもよい。
尚、該当箇所プログラム文53、56の表示については、旧版と新版とで異なる部分が分かり易いように表示されるようにしてもよい。例えば、旧版と新版とで異なる部分については、灰色の背景色が塗られた状態で表示されている。これにより、プログラムの変更点がユーザに分かり易くなっている。
【0126】
また、警告内容54、57の表示部分については、プログラムの修正前後の警告内容(違反した設計規約の内容、または「警告なし(規約違反無し)」)が表示されているので、プログラムの修正に伴って警告内容が変化する様子が分かるようになっている。特に、修正後の警告内容57が「警告なし」となっている場合には、該当箇所プログラム文53、56の表示内容を参照することで、どの様な修正を行ったことで警告が解消されたのかが、分かることになる。
【0127】
図5の画面50では、上記表示領域(52〜57)の下側に、更に、判定の入力欄58と説明の入力欄59が設けられている。
ここで、これらの入力欄58、59に任意のデータを入力できるのは、予め決められた特定のユーザ(例えば熟練した作業者)のみであるように制限することが望ましい。
【0128】
その為に、例えば上述したように、図5の画面50は、予め設定された特定ユーザ(熟練者等)の端末の画面12にのみ自動的に表示させるようにするが、この例に限らない。例えば、画面50自体は任意に表示可能であり、更に上記表示領域51には任意のユーザが任意のプログラム・ファイル名を入力することができ、このファイル名のプログラムに関して上記表示領域(52〜57)の情報が表示されるようにしてもよい。但し、入力欄58、59への入力に関しては、例えばユーザIDを入力させることでこのユーザが上記特定ユーザであるか否かをチェックし、特定ユーザではない場合には入力を許可しないようにする。尚、勿論、特定ユーザのユーザIDは、予め登録されている。
【0129】
上記特定のユーザ(例えば熟練した作業者)は、上記表示領域(52〜57)の表示内容を参照することで、プログラムの修正内容やその結果(警告内容の変化;特に修正後に「警告なし」となったか否か)を確認する。そして、修正内容について評価し、評価結果を判定の入力欄58で入力する。
【0130】
尚、本例では、判定の入力欄58において所定のマーク(▽マーク)を操作することで所定の評価結果選択肢が表示され、この中から任意の評価結果を選択する。選択肢は、「3:良い」、「2:問題なし」、「1:悪い」の3つであり、この中から任意の評価結果を選択することになる。
【0131】
尚、「1:悪い」とは、例えば修正を行っても警告が解消されない場合であるが、この例に限らず、修正によって警告が解消されても「1:悪い」と判定される場合に有り得る。すなわち、例えば上記従来の課題で説明した「表面的には警告を受けないような形にできるが、本質的に問題を解決できるものではない場合」等に対しては、「1:悪い」と評価される場合も有り得る。一方、(表面的ではなく)実質的に警告を解消させた修正に関しては、「3:良い」または「2:問題なし」と評価されることになる。
【0132】
また、説明の入力欄59には、任意の補足説明等が入力できるようになっており、具体例としては例えば図5(a)の上から3番目のレコードにおける説明40の欄に示す文章等があるが、勿論、この例に限らない(上記特定のユーザが自由に所望の補足説明文章を入力すればよい)。
【0133】
そして、ユーザが図示の「登録」ボタン60を操作すると、上記各入力欄58,59に入力された情報は、上記判定対象レコードにおける上記判定39、説明40の各フィールドに、それぞれ、格納される。尚、本例では表示していないが、これら入力欄58,59の入力情報が、どの特定ユーザ(熟練した作業者)により入力されたものであるのかを記録しても良い。
【0134】
上述したようにして作成された修正データテーブル30を用いて、例えば図7図8に示す画面を表示させることができる。これにより、各ユーザ(基本的には上記特定ユーザ以外のユーザ;特に熟練度が低いユーザ(初心者等))は、任意の警告(設計規約違反)に関して、特にその警告を(表面的ではなく)実質的に解消させた修正を、熟練者などによる評価によって知ることができ、その修正内容を参考にして的確な(警告を実質的に解消させる)修正を行うことができる。また、熟練者等によって更に補足説明が成されていた場合には、より的確な修正を行える(あるいは的確な修正が行える可能性が高まる)ことになる。
【0135】
上記のように、本システムでは、例えば各ユーザの端末のディスプレイに、例えば図7図8に示す画面を表示させることができるので、特に熟練者以外の各ユーザは、自己が作成したプログラムであって1以上の警告があったプログラムの修正に役立てることができる。すなわち、より的確な修正を手間/時間が掛かることなく行えるようになる。これについて、以下、図7図8を参照しながら説明する。
【0136】
まず、静的解析警告指摘対応検索部9は、例えば図7に示すような検索画面70を表示し、修正データテーブル30を参照することで図示の検索結果表示領域73に検索結果を表示できる。
【0137】
図7の検索画面70では、初期状態では図示の検索結果表示領域73には何も表示されていない。初期状態では図示の設計規約指定領域71、「検索」ボタン72、「内容表示」ボタン74、「終了」ボタン75が表示される。
【0138】
設計規約指定領域71における所定マーク(▽)を操作すると、例えば上記規約データテーブル41の全てのレコードの設計規約43の内容が、一覧表示される(不図示のドロップダウンメニューが表示される)。ユーザが、この一覧のなかから所望の設計規約を選択すると、選択された設計規約に対応する規約番号41(図示の例では規約番号=‘1’)を用いて修正データテーブル30を検索することで、該当レコード(ここでは違反規約番号(修正前)31=‘1’であるレコード)が全て抽出される。
【0139】
そして、全ての該当レコードが上記検索結果表示領域73に一覧表示される(但し、予め任意に決められている所定のデータ項目のみが表示される)。本例では、該当レコードのファイル名33、行番号(修正前)34、判定39、説明40の内容が、それぞれ、図7に示す検索結果表示領域73におけるファイル名73b、行番号73c、判定73d、説明73eに表示されることになるが、これは一例であり、この例に限らない。
【0140】
尚、図5(a)に示す例では全レコードが違反規約番号(修正前)31=‘1’であるので、全レコードが該当レコードとなり、図7の検索結果表示領域73に示すような表示が行われることになる。
【0141】
そして、ユーザは、マウス等を操作することで、上記検索結果表示領域73に一覧表示されるレコードのなかから任意のレコードを選択指定する。尚、図示の選択73aに三角矢印マークが表示されているレコードが、現在指定されているレコードである。
【0142】
そして、任意のレコードが選択指定された状態でユーザが図示の「内容表示」ボタン74を操作すると、選択指定されているレコードについての詳細情報を表示する画面(図8の詳細表示画面80)が表示される(静的解析警告指摘対応検索部9が、画面80を表示する)。
【0143】
図8の詳細表示画面80において、ファイル名81には上記選択指定されたレコードのファイル名33が表示される。
また、ファイル名81の下側には、左と右それぞれに各種情報表示領域がある。左側には修正前に関する情報、右側には修正後に関する情報が表示される。
【0144】
すなわち、まず、上記選択指定されたレコードの版数(修正前)37が、図示の版数の表示領域82に表示されると共に、版数(修正後)38が図示の版数の表示領域85に表示される。
【0145】
同様に、選択指定されたレコードの行番号(修正前)34のプログラム文が、図示の該当箇所プログラム文の表示領域83に表示されると共に、行番号(修正後)35のプログラム文が図示の該当箇所プログラム文の表示領域86に表示される。尚、これは、図6の例と同様に、複数行のプログラム文が表示されるものであってもよく、また、これらの表示の際には、上記テーブル30だけでなく、対象プログラム・ファイル(ここではfile_a.cの3.0版と3.1版)も参照される。
【0146】
同様に、選択指定されたレコードの違反規約番号(修正前)31に対応する設計規約43が、警告内容の表示領域84に表示されると共に、違反規約番号(修正後)36に対応する設計規約43が、警告内容の表示領域87に表示される。尚、これらの表示の際には、上記テーブル30だけでなく、上記テーブル41も参照する。つまり、テーブル41から違反規約番号に該当するレコード(その規約番号42が違反規約番号と同一であるレコード)の設計規約43を取得して、これを表示することになる。尚、違反規約番号(修正後)36が“−”となっている場合には、例えば図示のように「警告なし」と表示する。
【0147】
更に、選択指定されたレコードの判定39が判定結果表示領域88に表示されると共に、説明40が補足説明表示領域89に表示される。
上記のように詳細表示画面80を表示させることで、ユーザは、所望の警告に係る他者のプログラム文修正例(修正前と修正後)を、熟練した作業者等による評価結果と共に参照することができる。
【0148】
これにより、静的解析の結果、作成したプログラムに対して設計規約への違反を警告された作業者が、適切な修正方法が分からない場合にも、過去に行われた修正方法が熟練者の評価付き(場合によっては更に説明付き)で蓄積されて且つ容易に検索可能となっている本システムを用いれば、適切な修正方法を容易に見出し易くなる。
【0149】
ここで、図6の検索画面70は、例えば図3に示す警告箇所表示画面20からジャンプして表示させることもできる。そして、この場合には、上記設計規約指定領域71による指定と「検索」ボタン72の操作を行わなくても、最初から検索結果表示領域73に検索結果が表示された状態で表示させることができる。これについて以下、説明する。
【0150】
まず、上述した図3に関する説明で、ユーザが、プログラム表示領域21において任意の行を選択したうえで(黒四角■の行)「修正候補の検索」ボタン24を操作すると、現在選択されている行(黒四角■の行)の設計規約違反を解消する為に参考となる情報が得られる表示が行われる旨、説明した。当該参考となる情報が得られる表示が、上記図7図8の表示である。
【0151】
上述したように、黒四角■の行のプログラム文が違反している設計規約は分かるので(設計規約表示領域22に表示される)、「修正候補の検索」ボタン24が操作された場合には、この違反している設計規約を、そのまま、上記設計規約指定領域71による指定と見做すと共に、「検索」ボタン72が操作されたものと見做して、上述した検索処理と検索結果に基づく検索結果表示領域73の表示処理を行う。
【0152】
尚、他の例としては、例えば警告箇所表示画面20上において、ユーザがマウス操作等によって設計規約表示領域22の部分を指定すると共に「検索」ボタン72を操作する場合でも、上記と同様に、検索画面70へジャンプして検索済みの状態で表示させることができる。
【0153】
尚、上記図6の画面50上の領域58,59に関して、もし熟練した作業者等による入力がなければ、テーブル30における判定39には「−:未判定」が格納され、説明40は空欄となる。
【0154】
なお、図7の画面70における検索方法に関して、図7には示していないが、例えば検索条件に判定のレベルや、ファイル名、日付などの条件を指定して、絞り込んで検索を行うようにすることも可能である。
【0155】
最後に、図9に、プログラム改善支援システム10のハードウェア構成例を示す。
本例のプログラム改善支援システム10は、汎用的なコンピュータシステム上に構築することができる。これより、図9は、汎用的なコンピュータシステム(一般的なパソコン、サーバ装置等)のハードウェア構成例と見做すこともできる。
【0156】
図9に示すコンピュータ90は、演算装置91、主記憶装置92、ディスプレイ装置93、補助記憶装置94、入力装置95等を備えており、これらがバス96に接続されて相互に信号を送受信可能な構成となっている。
【0157】
プログラム改善支援システム10の上記各種処理機能を実現させるアプリケーションプログラムは、例えば予め補助記憶装置94(ハードディスク等)に記憶されている。実行時には、このプログラムが補助記憶装置94から主記憶装置92(メモリ等)にロードされ、演算装置91(CPU/MPU等)上で実行されることにより、上記各種処理機能を実現させることができる。すなわち、上述したプログラム登録部1、静的解析実行部4、変更差分抽出部6、静的解析結果変化要因分析部7、静的解析警告指摘箇所抽出部8、静的解析警告指摘対応検索部9、変化要因評価結果入力部11等の各種処理機能を実現させることができる。
【0158】
また、上述した構成管理DB(データベース)2、設計規約DB(データベース)5、静的解析DB(データベース)3等の各種データベースは、例えば補助記憶装置94(ハードディスク等)に記憶されるものであってよいが、この例に限らない。
【0159】
尚、入力装置95は例えばキーボード、マウス等である。
以上説明したように、本例のプログラム改善支援システム10によれば、プログラムを作成した後に静的解析を行うシステムにおいて、ユーザが静的解析結果に応じてプログラムを修正する際に(設計規約違反部分の修正)、この設計規約違反に対する過去の他者による修正結果(修正内容、修正後に警告が解消されたか否か等)を、熟練者等の評価/説明付きで参照することができる。これにより、ユーザは、より具体的に修正方法を知ったり、より適切な修正方法を知ることができるようになるため、プログラムの設計規約違反部分の修正を、効率的・高品質に行うことができるようになる。
【0160】
本システムを活用することにより、より高品質のプログラムを効率的に作成することができるようになる。
【符号の説明】
【0161】
1 プログラム登録部
2 構成管理DB(データベース)
3 静的解析DB(データベース)
4 静的解析実行部
5 設計規約DB(データベース)
6 変更差分抽出部
7 静的解析結果変化要因分析部
8 静的解析警告指摘箇所抽出部
9 静的解析警告指摘対応検索部
10 プログラム改善支援システム
11 変化要因評価結果入力部
12 画面
20 警告箇所表示画面
21 プログラム表示領域
22 設計規約表示領域
23 指摘箇所表示領域
24 「修正候補の検索」ボタン
25 ファイル名
30 修正データテーブル
31 違反規約番号(修正前)
32 プロジェクト名
33 ファイル名
34 行番号(修正前)
35 行番号(修正後)
36 違反規約番号(修正後)
37 版数(修正前)
38 版数(修正後)
39 判定
40 説明
41 規約データテーブル
42 規約番号
43 設計規約
44 有効/無効
50 差分表示入力画面
51 ファイル名表示領域
52 版数(旧版)
53 該当箇所プログラム文(旧版)
54 警告内容(旧版)
55 版数(新版)
56 該当箇所プログラム文(新版)
57 警告内容(新版)
58 判定の入力欄
59 説明の入力欄
60 「登録」ボタン
61 「次の警告」ボタン
70 検索画面
71 設計規約指定領域
72 「検索」ボタン
73 検索結果表示領域
73a 選択
73b ファイル名
73c 行番号
73d 判定
73e 説明
74 「内容表示」ボタン
75 「終了」ボタン
80 詳細表示画面
81 ファイル名
82 版数(修正前)の表示領域
83 該当箇所プログラム文(修正前)の表示領域
84 警告内容(修正前)の表示領域
85 版数(修正後)の表示領域
86 該当箇所プログラム文(修正後)の表示領域
87 警告内容(修正後)の表示領域
88 判定結果表示領域
89 補足説明表示領域
90 コンピュータ
91 演算装置
92 主記憶装置
93 ディスプレイ装置
94 補助記憶装置
95 入力装置
96 バス
図1
図2
図3
図4
図5
図7
図9
図6
図8