JP2004126866A - 記述出力抑制プログラム解析装置及び記述出力抑制プログラム解析方法 - Google Patents

記述出力抑制プログラム解析装置及び記述出力抑制プログラム解析方法 Download PDF

Info

Publication number
JP2004126866A
JP2004126866A JP2002288800A JP2002288800A JP2004126866A JP 2004126866 A JP2004126866 A JP 2004126866A JP 2002288800 A JP2002288800 A JP 2002288800A JP 2002288800 A JP2002288800 A JP 2002288800A JP 2004126866 A JP2004126866 A JP 2004126866A
Authority
JP
Japan
Prior art keywords
warning
range
information
version
change
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2002288800A
Other languages
English (en)
Inventor
Takuya Fujimoto
藤本 卓也
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Priority to JP2002288800A priority Critical patent/JP2004126866A/ja
Publication of JP2004126866A publication Critical patent/JP2004126866A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

【課題】変更前後のプログラム静的解析結果から、差分情報と領域情報に基いて対応した変更部分のみに対して警告文出力を行ない、不用な警告文を抑制する。
【解決手段】プログラム・ファイルを解析する静的解析ツールを用いたシステムにおいて、プログラム・ファイルの変更が発生した状態をバージョンとして、各バージョンにおける静的解析ツールによる解析結果を記憶する複数の解析結果ファイル20,21,22を備えて、あるバージョンの解析結果ファイルと、他のバージョンの解析結果ファイルとの差分情報からこの差分にある変更処置部分を抽出し、かつこの差分情報の警告文中の範囲情報を得て、この差分情報に対応する警告文を出力するデータ管理部3、を備えた。
【選択図】    図1

Description

【0001】
【発明の属する技術分野】
この発明は、静的解析の対象となるプログラムコード自体及びプログラムの静的解析システム自体に変更を加えることなく、解析対象のソフトウェアのプログラムファイルを静的解析システムに入力した場合に発生する膨大な警告情報を減らして、真に重要な警告のみを抽出する方法及び装置に関するものである。
【0002】
【従来の技術】
ソフトウェアの開発において、コーディング時のミスによって、ソフトウェアが正常に動作しないという不具合が多々発生する。この種の誤りはソースコードをレビューすることで防止することが可能であるが、ソフトウェアの規模が大きくなるにつれて、また、内容が複雑になるにつれて不具合が急増する。
【0003】
プログラムの実行試験前にこのような誤りを検出することを目的として、ソフトウェアのソースファイルを実際に実行せずに構文的、または意味的に解析し、バグとなる可能性を含むソースコードの記述に対して警告を出力する静的解析システムが英国Programming Research社のQAC、QAC++、富士通ミドルウェアのEYDS等として開発され、販売されている。こうした解析システムは、ソフトウェア開発者が修正できるような情報を出力する。
【0004】
しかし、これまでの静的解析システムには次のような問題点があった。
(101)検査対象となるソフトウェアのソースファイルは実際にソフトウェアとして計算機上で実行されず、ソースファイル内のソースコードを構文的、または意味的に解析することでエラーとなる可能性のあるソースコードの記述を検出するため、静的解析システムに用意された潜在的エラーパターンに合致するソースコードの記述は全て警告として出力される。このため、非常に大量の警告が出力され、静的解析システム使用者を混乱させてしまう。
(102)大量の警告が出力されるため、本当にエラーとなる可能性のあるソースコードの記述に対する警告が、ソフトウェアの実行上は問題のないソースコードの記述、またはソフトウェアの実行上、警告対象となるが故意にそのような記述をしているソースコードに対して出力された警告に埋没してしまう。このため本当にエラーとなる可能性のある警告を見つけ出すため、静的解析システム使用者は出力された結果の解析に時間を費やさなければならない。
【0005】
上記(101)及び(102)の問題点を防止するため、出力される警告を抑制する方法として、図19に示した第1の従来例である特開平11−134187号公報では、警告を抑制したいソースコードの記述をインクルード文として分離して付加する方法及び警告を抑制したいソースコードの記述に対してそのソースコードの記述にコメントを記述する方法が示されている。
また、第2の従来例として、英国Programming Research社の静的解析システムQAC及びQAC++では、図20に示したように#pragma文を使用して警告を抑制したいソースコードの記述の部分を囲んでその部分から出力される警告を抑制する。しかし、これらの方法は警告の抑制のために検査対象のソースファイルに変更を加える必要がある。
(103)このため、変更により新たなエラーを記述してしまう可能性があり、これを避けるために静的解析のためのソースファイルと実際にソフトウェアを動作させるためのソースファイルを別々に用意しなければならない。
(104)また、静的解析システムに用意された複数の警告情報を一意に識別する番号や記号、または意味的に分類した警告グループを一意に識別する番号や記号を指定することで、警告毎やグループ毎に警告として出力を抑制する機能が実装されているが、一旦、出力を抑制することを指定した警告は、実際のエラーを含むソースコードの記述で指定した警告が発生する場合でも出力が抑制され、静的解析システム使用者はその警告を見ることができなくなってしまう。
【0006】
【発明が解決しようとする課題】
このようにこれまでの静的解析システムは(101)、(102)対応ではエラーとなる可能性のあるプログラムコードの記述を検出して警告を出力するが、大量の警告から本当のエラーとなるプログラムコードを見つけにくいという課題がある。
(103)対応ではエラー記述を避けるためには、ソースファイルを別々に用意する必要があり、煩雑な処理が要求される。
(104)対応ではこれらのツールはエラーを起こすプログラムコード自体の記述が出力されないこともあるという課題がある。
【0007】
本発明は上記のような課題を解決するためになされたもので、変更や流用によって時系列的に連続するプログラムファイルとそのプログラムファイルに対する静的解析システムの出力結果を対応付け、時系列的に継続して出力される警告を抑制することで、重要度の高い警告を出力し、重要度の低い警告を抑制する方法及び装置を得る。
また、本発明は警告の出力抑制を警告の単位ではなく、プログラムファイルの位置で指定することにより、重要な警告の出力は抑制せず、警告を出力させたいプログラムファイル中の部分に対してのみ、警告を出力させる。
【0008】
【課題を解決するための手段】
この発明に係る記述出力抑制プログラム解析装置は、プログラム・ファイルを解析する静的解析ツールを用いたシステムにおいて、
プログラム・ファイルの変更が発生した状態をバージョンとして、各バージョンにおける静的解析ツールによる解析結果を記憶する複数の解析結果ファイルを備えて、
あるバージョンの解析結果ファイルと、他のバージョンの解析結果ファイルとの差分情報からこの差分にある変更処置部分を抽出し、かつこの差分情報の警告文中の範囲情報を得て、この差分情報に対応する警告文を出力するデータ管理部、を備えた。
【0009】
また更に、データ管理部は、解析対象の変更範囲を指定されると、この指定された変更範囲の差分情報に対応する警告文を出力するようにした。
【0010】
また更に、データ管理部は、解析対象の構文及び構文中の構成要素が等しい場合は、警告内容を比較して同様警告であれば、この同様警告を出力しないようにした。
【0011】
また更に、データ管理部は、解析対象の領域を指定されるか、または関数を指定されると、この指定された条件で差分情報を検索して、該当する警告文を出力するようにした。
【0012】
データ管理部は、差分情報に基づいて、この差分情報に対応する警告文を出力することに代えて、先のバージョンが示す警告記述と、後のバージョンが示す警告記述とが重なる部分を出力するようにした。
【0013】
この発明に係る記述出力抑制プログラム解析方法は、プログラム・ファイルを静的解析ツールにより静的解析する方法において、
プログラム・ファイルの変更をバージョンとして、各バージョンにおける上記静的解析ツールによる解析結果を各バージョン毎に記憶する解析結果記憶ステップと、
上記あるバージョンの記憶した解析結果と、他のバージョンの記憶した解析結果との差分情報から今回の変更処置部分を抽出するステップと、
差分情報の警告文中の範囲情報を得るステップと、
差分情報に対応する警告文を出力するステップ、とを備えた。
【0014】
【発明の実施の形態】
実施の形態1.
図1は本発明の実施の形態1における記述出力抑制プログラム解析装置の構成を示す図である。図において、1はプログラム変更部解析装置全体を制御する統括制御部、2はソースファイルに対して静的解析を実行する静的解析システム、3はソースファイル及び解析結果から必要なデータを抽出する又は不必要なデータを抑制するデータ管理部、9は静的解析システム使用者からの入力を受け付ける、又は静的解析システム使用者に出力を表示する入出力装置である。10〜12は静的解析の対象となるソースファイルで、20はソースファイル10を、21はソースファイル11を、また、22はソースファイル12を、それぞれプログラムの変更が発生した状態をバージョンとして、各バージョン毎に、静的解析システムに入力して得た静的解析結果であり、30は静的解析を行うソースファイル中の範囲を外部から指定する範囲指定外部情報である。
【0015】
図2は図1のデータ管理部の詳細を示す図であり、図において、4はデータ管理部3を制御するデータ管理制御部、5はソースファイル10〜11、静的解析結果20〜21及び範囲指定情報から必要なデータを抽出する、又は不必要なデータを抑制する選択処理部、6はソースファイル10〜11の差分情報を生成する差分情報生成部、7は静的解析システム使用者によって指定されたソースファイルの静的解析対象、又は静的解析対象外の範囲を記録する範囲指定情報であり、8は差分情報生成部6によって生成されるソース差分情報である。
なお、静的解析システム2は販売されているシステムでも、独自に開発したシステムのどちらでもよい。また、図2において、ソースファイル及びそれに対応する静的解析結果を二つづつとして記載しているが、ソースファイル及びそれに対応する各バージョン対応の静的解析結果は三つづつ、つまりA,B,Cバージョン以上のバージョンがあっても構わない。
【0016】
図3は図1及び図2に示した記述抑制プログラム解析装置による本実施の形態における動作の例を示すフローチャートである。図1及び図2のプログラム変更部解析装置の動作を図3のフローチャートを用いて説明する。なお、説明を簡略化するため、使用するソースファイルを二つとしているが、ソースファイルは三つ以上であってもよい。
図4から図10は図1、図2及び図3に示した記述抑制プログラム変更部解析方法及び解析装置による動作を説明するための図である。即ち図4は時系列的に関連するソースファイルの例えばあるバージョンにおける変更前と変更後の例であり、変更後ソースは変更前ソースを変更して得られたものである。図5は図4に示した二つのソースファイルそれぞれに対して静的解析システムを実行した結果の警告メッセージ出力の例である。図6は図4に示した二つのソースファイルの差分情報の例を示す図である。図7は図6の差分情報から抽出した、変更が加えられていないソース上の箇所の範囲情報と変更(追加及び削除を含む)が加えられたソース上の箇所の範囲情報の例を示す図である。図7はまた、変更が加えられていないソース上の箇所の範囲情報と変更(追加及び削除を含む)が加えられたソース上の箇所の範囲情報の形式を示している。図8は図7に例として示された情報のイメージである。図9は図5の警告メッセージ出力と図7の変更/非変更範囲情報とを対応付けた警告メッセージのイメージである。図10は変更前のソースファイルから継続して静的解析により報告される警告を抑制した結果の警告メッセージと抑制前の警告メッセージの例である。
【0017】
以下、実施の形態1の動作の説明において、図4(a)の変更前ソースを図2のソースファイル10、図4(b)の変更後ソースを図2のソースファイル11、図5(a)の変更前ソースの警告メッセージ出力を図2の解析結果20、図5(b)の変更後ソースの警告メッセージ出力を図2の解析結果21、及び図6の差分情報を図2のソース差分情報8として説明する。このとき、旧いソースもソースファイル10に残っていることが前提となっている。
(1)先ず手順S1において、プログラム変更部解析システム使用者は変更前のソースファイル10と変更後のソースファイル11を入出力装置9を用いて指定する。統括制御部1はこの情報を静的解析システム2及びデータ管理部3に伝達する。
【0018】
(2)手順S2において、静的解析システム使用者は、ソースの変更によって新たに静的解析システムが出力する警告又は変更前から発生していて変更後も発生している静的解析システムの警告、のどちらを表示するかを入出力装置9を用いて指定する。統括制御部1はこの情報をデータ管理部3に伝達する。この指定は任意であり、指定をしない場合は変更後に新たに静的解析システムが発生させる警告を表示する動作をデフォルトとする。これら2つのステップは、解析開始前の人による設定ステップであるが、次のステップS3以降が、システムが行なう実動作ステップである。
(3)手順S3において、静的解析システム2は指定されたソースファイル10と11に対する静的解析を実行し、それぞれのソースファイルに対して静的解析結果20と21を生成する。例えば、図4のソースコードを静的解析システム2に入力すると図5に示すような結果が得られる。
【0019】
(4)手順S4において、データ管理部3の中に存在するデータ管理制御部4は差分情報生成部6に指示を出し、ソースファイル10と11に対するソース差分情報8を生成させる。例えば、図4のソースファイルからは図6に示すような差分情報が得られる。
(5)手順S5において、選択処理部5は得られたソース差分情報8から変更前のソースファイル10と変更後のソースファイル11で変更が加えられていないソース上の箇所の範囲情報と変更(追加及び削除を含む)が加えられたソース上の箇所の範囲情報を求める。図4のソースファイル及び図6のソース差分情報8からは図7の変更/非変更範囲情報が得られる。図7に示した変更/非変更範囲情報には、ソースファイル10とソースファイル11のどの範囲が対応(それぞれ、開始行の列40及び終了行の列41がソースファイル10の範囲を、開始行の列42及び終了行の列43がソースファイル11の範囲を示す)していることが示され、それぞれ対応範囲(例えば、行45は第1の範囲を指す)が変更されているか、いないかが一致の列44のYES又はNOで示される。図8は図7の情報を視覚的に分かりやすく示したものである。
【0020】
(6)手順S6において、選択処理部5は、変更前のソースファイル10の静的解析結果20及び変更後のソースファイル11の静的解析結果21に含まれている各警告が手順S5で求めた変更/無変更箇所範囲のどこに含まれているかを判断し、各警告とその警告が含まれる範囲とを対応付ける。例えば、図4のソースファイル、図5の警告メッセージ出力及び図7の変更/非変更範囲情報から図9に示すような対応付けが行われ、対応表が生成される。
なお逆に、新しく変更した部分に対する警告に代えて、2つのバージョンを比較して、共通の部分に対してどのような警告文が出ているかを調べたい場合もある。こうしたときにも本実施の形態は有効であり、差分情報に代えて共通に得られる警告文のみを出力指定してもよい。即ちS6で変更範囲を出力せず、無変更範囲で、かつ警告文がある場合を出力指定すればよい。
【0021】
(7)手順S7〜S13は、選択処理部5での動作であり、手順S5及びS6で求められた変更/無変更箇所範囲の一つ一つを順にループとして処理を行う。記録された変更/無変更箇所範囲がなくなったところで動作を終了する(手順S8の状態となる)。手順S7〜S13のループにより、図4のソースファイルに対しては最終的に図10(b)(右側の列で警告メッセージ(抑制後))に示される警告メッセージが使用者に表示される。
なお、比較のため、抑制なしで警告メッセージを表示した際の出力を図10(a)(左側の列で警告メッセージ(抑制前))に示す。
(8)なお、図10(b)の出力を得る過程として、手順S7において、現在注目している箇所範囲が変更箇所範囲であった場合は手順S9へ、そうではなく無変更箇所範囲であった場合は手順S12に進む。
(9)注目範囲が変更箇所範囲の場合で、手順S9において、手順S2での指定情報又はデフォルトの指定情報により変更箇所範囲を表示する指示があることを確認した場合は手順S10において、その範囲に含まれる変更後の静的解析結果21に含まれる警告を選択処理部5、データ管理部3を経由して統括制御部1に伝達し、入出力装置9に警告として表示する。処理が終了したら手順S7に戻る。
【0022】
(10)注目範囲が変更箇所範囲の場合で、手順S9において、手順S2での指定情報により変更箇所範囲を表示する指示がないことを確認した場合は、手順S11において、その範囲に含まれる静的解析結果21の警告がソースファイル上の位置情報以外の情報と異なるかどうかの確認を行う。位置情報のみが異なる場合は何もせず、静的解析システム使用者にその警告を表示しないで手順S7に戻る。警告の位置情報以外の情報が異なる場合は非表示指示に関わらずその警告を、統括制御部1に伝達し、入出力装置9に警告として表示する。処理が終了したら手順S7に戻る。
【0023】
(11)注目範囲が無変更箇所範囲の場合で、手順S12において、手順S2での指定情報又はデフォルトの指定情報により変更箇所範囲を表示する指示があることを確認した場合は、何もしないで手順S7に戻る。
(12)注目範囲が無変更箇所範囲の場合で、手順S12において、手順S2での指定情報により変更箇所範囲を表示する指示がないことを確認した場合は、手順S13において、その範囲に含まれる変更後の静的解析結果21に含まれる警告を、統括制御部1に伝達し、入出力装置9に警告表示する。処理が終了したら手順S7に戻る。
全てが完了するとS8になり、上記の図10(b)が得られる。
なお図4の例では、変更は論理記述に差がある場合の例を示したが、例えば図4の2行目の*Sの記述を変更するような、単語を変更した場合にも、多くの警告出力が発生する。従って特に単語の変更による警告文の抑制は出力の減少に大いに寄与する。これについては実施の形態3で詳しく述べる。
【0024】
実施の形態2.
解析対象のプログラムは、あるプログラムから流用したものであってもよい。即ち、プログラムを全て新規に作成する場合もあるが、他の一部等を流用することも多い。この際に流用を含めて作成した今回のプログラムコードを解析すると、新しく作成した部分以外に、流用部分に対する警告文等も同時に出力される。流用分の警告出力を抑え、新規作成分に対してのみ解析結果をえる場合を説明する。
即ち、図1及び図2において、範囲指定情報7を使用することによって、実施の形態2における構成が得られる。また、図11は図1及び図2に示したプログラム解析方法及び解析装置による動作を示すフローチャートである。このフローチャートを用いて動作を説明する。なお、説明を簡略化するため、使用するソースファイルを二つとしているが、ソースファイルは三つ以上であってもよい。
【0025】
(21)先ず手順S101において、静的解析システム使用者は流用元のソースファイル10と流用先のソースファイル11を入出力装置9を用いて指定する。この際、合せて流用元のソースファイル10のどこを流用したか、及び流用先のソースファイル11のどこにその流用した部分を使用したかのソースファイル上の位置と範囲の情報を入力する。統括制御部1はこの情報をデータ管理部3に伝達し、これを受け取ったデータ管理制御部4は範囲指定情報7として記録する。範囲指定情報7へのデータ設定は入出力装置9により範囲指定外部情報30を指定することで行ってもよい。また、範囲指定情報7を範囲指定外部情報30に出力し、再利用することも可能である。
【0026】
(22)手順S102において、手順S101で指定した範囲指定情報に対して、静的解析システム使用者は、流用先のソースファイル11の流用範囲以外で静的解析システムが出力する警告又は流用範囲で発生する静的解析システムの警告、のどちらを表示するかを入出力装置9を用いて指定する。この指定は任意であり、指定をしない場合は流用範囲以外で静的解析システムが発生させる警告を表示する動作をデフォルトとする。
また、さらに静的解析システム使用者は、流用範囲を表示対象として指示した場合には、流用範囲に対するソースの変更によって新たに静的解析システムが出力する警告又は変更前から発生していて変更後も発生している静的解析システムの警告、のどちらを表示するかについても入出力装置9を用いて指定する。この指定は任意であり、指定をしない場合は変更後に新たに静的解析システムが発生させる警告を表示する動作をデフォルトとする。統括制御部1はこれらの情報をデータ管理部3に伝達し、これを受け取ったデータ管理制御部4は範囲指定情報情報7として記録する。表示対象を流用範囲外で静的解析システムが出力する警告と指定してもよい。
(23)手順S103において、データ管理部3の中に存在するデータ管理制御部4は差分情報生成部6に指示を出し、ソースファイル10と11に対するソース差分情報8を生成させる。
【0027】
(24)手順S104〜S113は、選択処理部5での動作であり、手順S101及びS102で得られた範囲指定情報7に記録された流用範囲の一つ一つに対して順にループとして処理を行う。記録された範囲指定情報7がなくなったところで動作を終了する(手順S105の状態となる)。
(25)手順S106において、注目している範囲が流用範囲か非流用範囲かを確認する。流用範囲であった場合は手順S109へ、非流用範囲であった場合は手順S107に進む。
(26)注目している範囲が非流用範囲の場合は手順S107において、手順S102で指定された表示指示を確認し、非流用範囲が表示対象となっている場合は手順S108において、その範囲に含まれる静的解析結果21に含まれる警告を選択処理部5、データ管理部3を経由して統括制御部1に伝達し、入出力装置9に表示し、静的解析システム使用者にその警告を表示する。処理が終了したら手順S104に戻る。
【0028】
(27)注目している範囲が流用範囲の場合は手順S109において、データ管理部3の中に存在するデータ管理制御部4は差分情報生成部6に指示を出し、ソースファイル10と11に対するソース差分情報8を生成させる。
(28)手順S110において、選択処理部5は得られたソース差分情報8から流用元のソースファイル10と流用先のソースファイル11の現在注目している流用範囲の中で変更が加えられていないソース上の箇所の範囲情報と変更(追加及び削除を含む)が加えられたソース上の箇所の範囲情報を求める。
(29)手順S111において、選択処理部5は、流用元のソースファイル10の静的解析結果20及び流用先のソースファイル11の静的解析結果21に含まれている各警告が手順S110で求めた変更/無変更箇所範囲のどこに含まれているかを判断し、各警告とその警告が含まれる範囲とを対応付ける。
【0029】
(30)手順S112及びS113は、手順S110及びS111で求められた変更/無変更箇所範囲の一つ一つを順にループとして処理を行う。記録された変更/無変更箇所範囲がなくなったところで手順S104に戻り次の流用範囲に対する処理を実行する。
(31)手順S112及びS113は、処理対象が流用範囲内の変更範囲又は無変更範囲となるだけで図3の手順S7〜S13と同様である。
【0030】
実施の形態3.
解析対象のプログラムにおいて、変更が制御構造、構文の場合と、文字とか単語とかの細分化項目である場合とは、以後の取り扱いが異なる。従ってこの区別を明確にしたプログラム解析の方法を説明する。
即ち図3のフローチャートに記載された手順S10を図12に示すフローチャートに置き換えることによって実施の形態3における動作の手順を示すことができる。このフローチャートに基いて動作を説明する。
【0031】
図13から図16は実施の形態3の動作を説明するための図である。図13は時系列的に関連するソースファイルの例であり、変更後ソースは変更前ソースを変更して得られたものである。図13における変更では、変更前ソースファイルのcheck_file_size関数内で使用されているfiledesという名前の内部変数をfdという名前に改名し、これに合わせてcheck_file_size関数内でfiledesを使用していた箇所の記述をfdに修正して変更後のソースファイルが作成されている。図14は図13に示した二つのソースファイルそれぞれに対して静的解析システムを実行した結果の警告メッセージ出力の内、ソースコードの変更が行われた15行目で出力されるメッセージの例である(その他のメッセージは示していない)。図15は、変更前及び変更後のソースファイルの変更を行われたソースコードの断片の内、15行目について構文解析を行った結果の構文木及びトークンの属性列を示す例である。図16は実施の形態3のより警告メッセージを抑制した場合の警告メッセージと抑制前の警告メッセージの例(15行目対応部分のみ抜粋)である。
【0032】
(41)図3の手順S10の手前までの動作は図3に示す通りである。
(42)図3の手順S10と置き換えた図12の手順S201において、ソースファイル10とソースファイル11の変更範囲又は流用範囲のソースコードを構文解析し、それらのソースコードの構成要素(識別子、演算子等)とそれらの構成要素の構文的なつながりを示す構文木の構文解析情報を得る。図13に示した変更前及び変更後のソースファイルの中で変更が行われた15行目に対する構文解析の結果の例を図15に示す。なお、図15に示した構文解析結果は一例であり、構文と構文要素の比較が可能となる解析ならばどのような解析方法を採用しても良い。
(43)図3の手順S10と置き換えた図12の手順S202において、手順S201で得た構文解析情報を比較し、構文木の構造が一致するか、構文木の構造が一致する場合は構文木を構成する構成要素の意味が一致するかどうかを検査する。構文木及び構成要素の意味の双方が一致する場合は手順S203に、一致しない場合は手順S204に進む。図15において、得られた変更前及び変更後の構文木及び構成要素の意味(トークンの属性)を比較するとこの場合は構文木及び構文要素の意味が一致していることが分かる。従って、図13に示したソースファイルの15行目の変更部分に対しては手順S203に進むことになる。なお、構文木及び構文要素の比較方法については一致又は不一致が明確に判定できる方法であればどのような方法を採用しても良い。
【0033】
(44)図3の手順S10と置き換えた図12の手順S203に進んだ場合は、手順S203において、さらにその範囲に含まれる静的解析結果20と静的解析結果21の警告内容が同種(警告内容を一意に示す警告識別番号等が一致する)かどうかを検査する。同種の場合は何もせずに処理を終了し(終了S205へ)、図3の手順S7に戻る(警告を出力しない)。同種でない場合は手順S204に進む。図13のソースファイルの例から得られる図14の警告メッセージの例を検査すると警告内容は同種であるため、何も処理を行わない。従って、図13に示したソースファイルの例で15行目で出力された警告メッセージは抑制され、図16に示す通り、メッセージは出力されないことになる。
(45)図3の手順S10と置き換えた図12の手順S204に進んだ場合は、手順S204において、その範囲に含まれる静的解析結果21の警告を選択処理部5、データ管理部3を経由して統括制御部1に伝達し、入出力装置9に表示し、静的解析システム使用者にその警告を表示する。処理が終了したら手順S7に戻る。
なお、実施の形態2では、アドレス等による領域で範囲指定したが、この実施の形態の図15の構文木等の制御構造ブロックで範囲指定してもよい。こうしても出力の限定が行える。
【0034】
実施の形態4.
解析対象のプログラムの、解析範囲を指定することも、もちろん可能であり、本実施の形態はこうした範囲指定した場合の動作を説明する。
即ち、図1及び図2は図1に示す範囲指定外部情報30を使用することによって、実施の形態4における動作が行なわれる。図17は、本実施の形態における、動作を示すフローチャートである。本解析装置の動作をこのフローチャートを用いて説明する。
【0035】
(51)手順S301において、静的解析システム使用者は静的解析対象となるソースファイル10を、入出力装置9を用いて指定する。統括制御部1はこの情報を静的解析システム2及びデータ管理部3に伝達する。データ管理部3に伝達された情報はデータ管理制御部4に伝達され、範囲指定情報7として記録される。範囲指定情報7へのデータ設定は入出力装置9により範囲指定外部情報30を指定することで行ってもよい。また、範囲指定情報7を範囲指定外部情報30に出力し、再利用することも可能である。
(52)手順S302において、静的解析システム使用者はソースファイル10に含まれるソースコードの解析対象又は非解析対象とする範囲を入出力装置9を用いて指定する。統括制御部1はこの情報をデータ管理部3に伝達する。データ管理部3に伝達された情報はデータ管理制御部4に伝達され、範囲指定情報7として記録される。範囲指定情報7へのデータ設定は入出力装置9により範囲指定外部情報30を指定することで行ってもよい。
【0036】
(53)手順S303において、静的解析システム使用者は、先に指定した範囲に対してその範囲の警告を出力する、しないを入出力装置9を用いて指定する。統括制御部1はこの情報をデータ管理部3に伝達する。統括制御部1はこの情報をデータ管理部3に伝達する。データ管理部3に伝達された情報はデータ管理制御部4に伝達され、範囲指定情報7として記録される。範囲指定情報7へのデータ設定は入出力装置9により範囲指定外部情報30を指定することで行っても良い。
(54)手順S304において、静的解析システム2は指定されたソースファイル10に対する静的解析を実行し、静的解析結果20を生成する。
【0037】
(55)手順S305〜S310は、選択処理部5での動作であり、範囲指定情報7に記録された範囲及び範囲として指定されなかった範囲一つ一つを順にループとして処理を行う。記録された変更/無変更箇所範囲がなくなったところで動作を終了する(手順S306の状態となる)。
(56)手順S307において、現在注目している範囲が指定されなかった範囲であった場合は手順S308へ、指定された範囲であった場合は手順S310に進む。
【0038】
(57)注目範囲が指定されなかった範囲の場合で、手順S308において、手順S302で指定範囲のいずれかが警告を出力しない指定になっていた場合、手順S309において、その範囲に含まれる静的解析結果20に含まれる警告を選択処理部5、データ管理部3を経由して統括制御部1に伝達し、入出力装置9に表示し、静的解析システム使用者にその警告を表示する。処理が終了したら手順S305に戻る。そうでない場合は何もせず手順S305に戻る。
(58)注目範囲が指定された範囲の場合で、手順S310において、手順S302でその指定範囲が警告を出力する指定になっていた場合、手順S309において、その範囲に含まれる静的解析結果20に含まれる警告を選択処理部5、データ管理部3を経由して統括制御部1に伝達し、入出力装置9に表示し、静的解析システム使用者にその警告を表示する。処理が終了したら手順S305に戻る。そうでない場合は何もせず手順S305に戻る。
【0039】
図17の動作フローにおいては、警告の出力又はは抑制のためにソースコード中の範囲を指定したが、この指定を関数で指定してもよい。この場合、動作も実施の形態4の動作を示す図17のフローチャートと同様であるが、異なる点は範囲の指定が関数となり、実際に使用される範囲情報が指定された関数の定義の始まりから終わりの位置となる。
【0040】
解析対象の範囲指定を行った場合、その範囲指定の情報が適用されるソースファイルが変更されると、範囲指定の情報もソースファイルの変更に合せて修整しなければならない。図18はこうしたソースファイルの変更に伴って範囲情報が変更される動作を示すフローチャートである。この場合の解析装置の動作を図18のフローチャートを用いて説明する。
【0041】
(61)手順S401において、変更前のソースファイル10及び変更後のソースファイル11並びに変更前の範囲指定情報を範囲指定外部情報30として、入出力装置9を用いて指定する。統括制御部1はこの情報をデータ管理部3に伝達する。データ管理部3に伝達された情報はデータ管理制御部4に伝達され、範囲指定外部情報30を範囲指定情報7にコピーする。
(62)手順S402において、データ管理制御部4は、指定された範囲が関数単位か、ソースファイル中の位置で示された範囲かを確認する。関数単位の範囲指定であった場合は手順S403に、それ以外の場合は手順409に進む。
【0042】
(63)関数単位の範囲指定であった場合、手順S403において、選択処理部5が変更後のソースファイル11に指定された関数が存在するかどうかを探査する。
(64)手順S404において、指定された関数が存在しない場合は手順S405に進み、変更後のソースファイル11には新しく対応する関数が存在しないことを選択処理部5、データ管理部3を経由して統括制御部1に伝達し、入出力装置9に表示し、静的解析システム使用者にその旨を表示する。表示後は動作を終了する(手順S406の状態となる)。
(65)手順S404において、指定された関数が存在する場合は手順S407に進み、変更後のソースファイル11には新しく対応する関数が存在することを選択処理部5、データ管理部3を経由して統括制御部1に伝達し、入出力装置9に表示し、静的解析システム使用者にその旨を表示する。また、データ管理制御部4により、範囲指定外部情報30に新しい範囲情報を記録する。その後は動作を終了する(手順S408の状態となる)。
【0043】
(66)範囲の指定がソースファイル中の位置で指定されていた場合、手順S409において、差分情報生成部6が範囲指定情報7で示された変更前のソースファイル10のソースコードの断片と変更後のソースファイル10の差分情報を生成する。
(67)手順S410において、得られた差分情報から選択処理部5がソースコード断片と一致する変更後のソースファイル11の範囲が存在するかどうかを確認する。一致する範囲が存在しない場合は手順S405に進み、変更後のソースファイル11には新しく対応する領域が存在しないことを選択処理部5、データ管理部3を経由して統括制御部1に伝達し、入出力装置9に表示し、静的解析システム使用者にその旨を表示する。表示後は動作を終了する(手順S406の状態となる)。一致する範囲が存在した場合は手順S411へ進む。
【0044】
(68)手順S411において、一致する範囲が一箇所かどうかを検査し、一箇所しか存在しない場合は変更後のソースファイル11には新しく対応する範囲が存在することを選択処理部5、データ管理部3を経由して統括制御部1に伝達し、入出力装置9に表示し、静的解析システム使用者にその旨を表示する。その後は動作を終了する(手順S408の状態となる)。複数箇所に存在する場合は手順S412に進む。
(69)手順S412において、複数存在する一致箇所のうち、現在注目している範囲を新範囲として良いかどうかの問合わせを選択処理部5、データ管理部3を経由して統括制御部1に伝達し、入出力装置9に表示し、静的解析システム使用者にその旨を表示する。静的解析システム使用者からの回答を逆に伝達して、静的解析システム使用者から承認の回答があった場合は変更後のソースファイル11には新しく対応する範囲が存在することを選択処理部5、データ管理部3を経由して統括制御部1に伝達し、入出力装置9に表示し、静的解析システム使用者にその旨を表示する。その後は動作を終了する(手順S408の状態となる)。静的解析システム使用者から否認の回答があった場合は手順S410に戻る。
【0045】
【発明の効果】
以上のようにこの発明によれば、変更前後の解析結果ファイルと差分情報に基づく警告文のみを出力するデータ管理部を備えたので、対応した差分に基く変更部分のみを抽出して警告表示してチェックを容易にする効果がある。
【0046】
また更に、解析対象の範囲を限定するようにしたので、警告文の出力を更に減らす効果がある。
【図面の簡単な説明】
【図1】この発明の実施の形態1等における記述出力抑制プログラム解析装置の全体構成を示す図である。
【図2】実施の形態1におけるデータ管理部の詳細構成を示す図である。
【図3】実施の形態1における記述出力抑制プログラム解析装置の動作フローを示す図である。
【図4】実施の形態1におけるソースファイルの変更前と変更後の例を示す図である。
【図5】図4の変更に対して静的解析結果が示す警告文の例を示す図である。
【図6】図4に示す変更の差分情報を示す図である。
【図7】図6に示す差分情報から抽出した各範囲における変更の有無情報を示す図である。
【図8】図7に示された情報の補足説明としてのイメージを示す図である。
【図9】図5の警告文と図7の変更の有無情報とを対応付けた補足説明としてのイメージを示す図である。
【図10】実施の形態1における抑制後の警告文の出力例を示す図である。
【図11】この発明の実施の形態2における記述出力抑制プログラム解析装置の動作フローを示す図である。
【図12】この発明の実施の形態3における記述出力抑制プログラム解析装置の動作フローを示す図である。
【図13】図12のフローチャートを説明するためのサンプルソースである。
【図14】図12のフローチャートを説明するための解析システム出力例を示す図である。
【図15】図12のフローチャートを説明するための構文解析の例を示す図である。
【図16】実施の形態3における解析結果を示す抑制された警告文の例を示す図である。
【図17】この発明の実施の形態4における記述出力抑制プログラム解析装置の動作フローを示す図である。
【図18】実施の形態4における他の記述出力抑制プログラム解析装置の動作フローを示す図である。
【図19】第1の従来例における警告抑制出力のための記述と出力例を示す図である。
【図20】第2の従来例における警告抑制出力のための記述と出力例を示す図である。
【符号の説明】
1 統括制御部、2 静的解析システム、3 データ管理部、4 データ管理制御部、5 選択処理部、6 差分情報生成部、7 範囲指定情報、8 ソース差分情報、10 ソースファイル1、11 ソースファイル2、12 ソースファイルn、20 解析結果1、21 解析結果2、22 解析結果n、30 範囲指定外部情報、S3 静的解析ステップ、S4 差分情報生成ステップ、S5
変更範囲対応付けステップ、S10 解析結果表示ステップ。

Claims (6)

  1. プログラム・ファイルを解析する静的解析ツールを用いたシステムにおいて、
    上記プログラム・ファイルの変更が発生した状態をバージョンとして、各バージョンにおける上記静的解析ツールによる解析結果を記憶する複数の解析結果ファイルを備えて、
    上記あるバージョンの解析結果ファイルと、他のバージョンの解析結果ファイルとの差分情報から該差分にある変更処置部分を抽出し、かつ該差分情報の警告文中の範囲情報を得て、該差分情報に対応する警告文を出力するデータ管理部、を備えたことを特徴とする記述出力抑制プログラム解析装置。
  2. データ管理部は、解析対象の変更範囲を指定されると、該指定された変更範囲の差分情報に対応する警告文を出力するようにしたことを特徴とする請求項1記載の記述出力抑制プログラム解析装置。
  3. データ管理部は、解析対象の構文及び構文中の構成要素が等しい場合は、警告内容を比較して同様警告であれば、該同様警告を出力しないようにしたことを特徴とする請求項1記載の記述出力抑制プログラム解析装置。
  4. データ管理部は、解析対象の領域を指定されるか、または関数を指定されると、該指定された条件で差分情報を検索して、該当する警告文を出力するようにしたことを特徴とする請求項1記載の記述出力抑制プログラム解析装置。
  5. データ管理部は、差分情報に基づいて該差分情報に対応する警告文を出力することに代えて、先のバージョンが示す警告記述と、後のバージョンが示す警告記述とが重なる部分を出力するようにしたことを特徴とする請求項1または請求項4いずれか記載の記述出力抑制プログラム解析装置。
  6. プログラム・ファイルを静的解析ツールにより静的解析する方法において、
    上記プログラム・ファイルの変更をバージョンとして、各バージョンにおける上記静的解析ツールによる解析結果を各バージョン毎に記憶する解析結果記憶ステップと、
    上記あるバージョンの記憶した解析結果と、他のバージョンの記憶した解析結果との差分情報から今回の変更処置部分を抽出するステップと、
    上記差分情報の警告文中の範囲情報を得るステップと、
    上記差分情報に対応する警告文を出力するステップ、とを備えたことを特徴とする記述出力抑制プログラム解析方法。
JP2002288800A 2002-10-01 2002-10-01 記述出力抑制プログラム解析装置及び記述出力抑制プログラム解析方法 Pending JP2004126866A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2002288800A JP2004126866A (ja) 2002-10-01 2002-10-01 記述出力抑制プログラム解析装置及び記述出力抑制プログラム解析方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2002288800A JP2004126866A (ja) 2002-10-01 2002-10-01 記述出力抑制プログラム解析装置及び記述出力抑制プログラム解析方法

Publications (1)

Publication Number Publication Date
JP2004126866A true JP2004126866A (ja) 2004-04-22

Family

ID=32281191

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2002288800A Pending JP2004126866A (ja) 2002-10-01 2002-10-01 記述出力抑制プログラム解析装置及び記述出力抑制プログラム解析方法

Country Status (1)

Country Link
JP (1) JP2004126866A (ja)

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005346660A (ja) * 2004-06-07 2005-12-15 Ntt Docomo Inc ソースコード管理サーバ及びソースコード管理プログラム
JP2006344145A (ja) * 2005-06-10 2006-12-21 Fujitsu Ltd ソースコード解析プログラムおよびソースコード解析方法
WO2008129619A1 (ja) * 2007-04-09 2008-10-30 Fujitsu Limited ソースプログラム再検討プログラム、ソースプログラム再検討方法およびソースプログラム再検討装置
JP2013020519A (ja) * 2011-07-13 2013-01-31 Fuji Electric Co Ltd プログラム改善支援システム
JP2013045307A (ja) * 2011-08-24 2013-03-04 Nec Corp 静的解析システム、静的解析結果表示方法及びプログラム
JP2016018307A (ja) * 2014-07-07 2016-02-01 富士通株式会社 開発支援プログラム,開発支援方法及び開発支援装置
CN110381386A (zh) * 2018-04-12 2019-10-25 武汉斗鱼网络科技有限公司 一种道具礼物的展示方法及相关设备
US10761840B2 (en) 2015-11-30 2020-09-01 Nec Corporation Software analysis device, software analysis method, and recording medium
CN111736875A (zh) * 2020-06-28 2020-10-02 深圳前海微众银行股份有限公司 版本更新监控方法、装置、设备及计算机存储介质
US12099822B2 (en) * 2021-10-22 2024-09-24 Tata Consultancy Services Limited Method and system for identifying static analysis alarms based on semantics of changed source code

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005346660A (ja) * 2004-06-07 2005-12-15 Ntt Docomo Inc ソースコード管理サーバ及びソースコード管理プログラム
JP2006344145A (ja) * 2005-06-10 2006-12-21 Fujitsu Ltd ソースコード解析プログラムおよびソースコード解析方法
WO2008129619A1 (ja) * 2007-04-09 2008-10-30 Fujitsu Limited ソースプログラム再検討プログラム、ソースプログラム再検討方法およびソースプログラム再検討装置
JP5056849B2 (ja) * 2007-04-09 2012-10-24 富士通株式会社 ソースプログラム再検討プログラム、ソースプログラム再検討方法およびソースプログラム再検討装置
JP2013020519A (ja) * 2011-07-13 2013-01-31 Fuji Electric Co Ltd プログラム改善支援システム
JP2013045307A (ja) * 2011-08-24 2013-03-04 Nec Corp 静的解析システム、静的解析結果表示方法及びプログラム
JP2016018307A (ja) * 2014-07-07 2016-02-01 富士通株式会社 開発支援プログラム,開発支援方法及び開発支援装置
US10761840B2 (en) 2015-11-30 2020-09-01 Nec Corporation Software analysis device, software analysis method, and recording medium
CN110381386A (zh) * 2018-04-12 2019-10-25 武汉斗鱼网络科技有限公司 一种道具礼物的展示方法及相关设备
CN111736875A (zh) * 2020-06-28 2020-10-02 深圳前海微众银行股份有限公司 版本更新监控方法、装置、设备及计算机存储介质
CN111736875B (zh) * 2020-06-28 2024-07-02 深圳前海微众银行股份有限公司 版本更新监控方法、装置、设备及计算机存储介质
US12099822B2 (en) * 2021-10-22 2024-09-24 Tata Consultancy Services Limited Method and system for identifying static analysis alarms based on semantics of changed source code

Similar Documents

Publication Publication Date Title
US5926638A (en) Program debugging system for debugging a program having graphical user interface
JP4396994B2 (ja) リソース・ファイルの翻訳検証方法、装置、およびプログラム
KR0125774B1 (ko) 대화형 소프트웨어 애플리케이션내 텍스트 필드의 번역을 용이하게 하기 위한 방법 및 그를 포함하는 데이터 처리 시스템
JP3963394B2 (ja) ソフトウェア障害情報をレポートするための装置
JP4395761B2 (ja) プログラムテスト支援装置およびその方法
US20090276206A1 (en) Dynamic Software Localization
US20070168909A1 (en) System And Method For Context-Sensitive Help In A Design Environment
WO2010136763A1 (en) Software development tool
JP2013156786A (ja) ソフトウェアの構造可視化プログラムおよびシステム
US7331042B2 (en) Fault-tolerant dynamic editing of GUI display and source code
US9311077B2 (en) Identification of code changes using language syntax and changeset data
JP6440895B2 (ja) ソフトウェア分析装置及びソフトウェア分析方法
US7730466B2 (en) System and method for manipulating source code in a text editor
CN115080448B (zh) 一种软件代码不可达路径自动检测的方法和装置
JP2004126866A (ja) 記述出力抑制プログラム解析装置及び記述出力抑制プログラム解析方法
CN113821496B (zh) 数据库迁移方法、系统、设备及计算机可读存储介质
US20050108426A1 (en) Identifying computer messages that should be revised
JP2009169573A (ja) 解析結果出力装置、及び解析結果出力方法
JP2005190330A (ja) ソースプログラムのレビュー支援システム
US9910647B2 (en) Field size calculation and color coding display options usable in an emulated integrated development environment (IDE)
JP4397393B2 (ja) モジュラー構造のメッセージを修正する方法および装置
JPH0926897A (ja) プログラム解析装置及びプログラム解析方法
KR101976167B1 (ko) 프로그램 소스 및 db 스키마의 누락 연관 관계 검증 방법 및 그 장치
JP4894602B2 (ja) 修正対象ファイル検索装置と修正対象ファイル検索方法および修正対象ファイル検索プログラム
JPH06290039A (ja) プログラム変更方法

Legal Events

Date Code Title Description
RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20040119

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20040518

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20041025

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20051108

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20051129

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20060110

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20060131