(57)【要約】【課題】変更前後のプログラム静的解析結果から、差分情報と領域情報に基いて対応した変更部分のみに対して警告文出力を行ない、不用な警告文を抑制する。【解決手段】プログラム・ファイルを解析する静的解析ツールを用いたシステムにおいて、プログラム・ファイルの変更が発生した状態をバージョンとして、各バージョンにおける静的解析ツールによる解析結果を記憶する複数の解析結果ファイル２０，２１，２２を備えて、あるバージョンの解析結果ファイルと、他のバージョンの解析結果ファイルとの差分情報からこの差分にある変更処置部分を抽出し、かつこの差分情報の警告文中の範囲情報を得て、この差分情報に対応する警告文を出力するデータ管理部３、を備えた。【選択図】　　　　図１
2004126866.tif 000002
【特許請求の範囲】
【請求項１】
プログラム・ファイルを解析する静的解析ツールを用いたシステムにおいて、
上記プログラム・ファイルの変更が発生した状態をバージョンとして、各バージョンにおける上記静的解析ツールによる解析結果を記憶する複数の解析結果ファイルを備えて、
上記あるバージョンの解析結果ファイルと、他のバージョンの解析結果ファイルとの差分情報から該差分にある変更処置部分を抽出し、かつ該差分情報の警告文中の範囲情報を得て、該差分情報に対応する警告文を出力するデータ管理部、を備えたことを特徴とする記述出力抑制プログラム解析装置。
【請求項２】
データ管理部は、解析対象の変更範囲を指定されると、該指定された変更範囲の差分情報に対応する警告文を出力するようにしたことを特徴とする請求項１記載の記述出力抑制プログラム解析装置。
【請求項３】
データ管理部は、解析対象の構文及び構文中の構成要素が等しい場合は、警告内容を比較して同様警告であれば、該同様警告を出力しないようにしたことを特徴とする請求項１記載の記述出力抑制プログラム解析装置。
【請求項４】
データ管理部は、解析対象の領域を指定されるか、または関数を指定されると、該指定された条件で差分情報を検索して、該当する警告文を出力するようにしたことを特徴とする請求項１記載の記述出力抑制プログラム解析装置。
【請求項５】
データ管理部は、差分情報に基づいて該差分情報に対応する警告文を出力することに代えて、先のバージョンが示す警告記述と、後のバージョンが示す警告記述とが重なる部分を出力するようにしたことを特徴とする請求項１または請求項４いずれか記載の記述出力抑制プログラム解析装置。
【請求項６】
プログラム・ファイルを静的解析ツールにより静的解析する方法において、
上記プログラム・ファイルの変更をバージョンとして、各バージョンにおける上記静的解析ツールによる解析結果を各バージョン毎に記憶する解析結果記憶ステップと、
上記あるバージョンの記憶した解析結果と、他のバージョンの記憶した解析結果との差分情報から今回の変更処置部分を抽出するステップと、
上記差分情報の警告文中の範囲情報を得るステップと、
上記差分情報に対応する警告文を出力するステップ、とを備えたことを特徴とする記述出力抑制プログラム解析方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、静的解析の対象となるプログラムコード自体及びプログラムの静的解析システム自体に変更を加えることなく、解析対象のソフトウェアのプログラムファイルを静的解析システムに入力した場合に発生する膨大な警告情報を減らして、真に重要な警告のみを抽出する方法及び装置に関するものである。
【０００２】
【従来の技術】
ソフトウェアの開発において、コーディング時のミスによって、ソフトウェアが正常に動作しないという不具合が多々発生する。この種の誤りはソースコードをレビューすることで防止することが可能であるが、ソフトウェアの規模が大きくなるにつれて、また、内容が複雑になるにつれて不具合が急増する。
【０００３】
プログラムの実行試験前にこのような誤りを検出することを目的として、ソフトウェアのソースファイルを実際に実行せずに構文的、または意味的に解析し、バグとなる可能性を含むソースコードの記述に対して警告を出力する静的解析システムが英国Ｐｒｏｇｒａｍｍｉｎｇ　Ｒｅｓｅａｒｃｈ社のＱＡＣ、ＱＡＣ＋＋、富士通ミドルウェアのＥＹＤＳ等として開発され、販売されている。こうした解析システムは、ソフトウェア開発者が修正できるような情報を出力する。
【０００４】
しかし、これまでの静的解析システムには次のような問題点があった。
（１０１）検査対象となるソフトウェアのソースファイルは実際にソフトウェアとして計算機上で実行されず、ソースファイル内のソースコードを構文的、または意味的に解析することでエラーとなる可能性のあるソースコードの記述を検出するため、静的解析システムに用意された潜在的エラーパターンに合致するソースコードの記述は全て警告として出力される。このため、非常に大量の警告が出力され、静的解析システム使用者を混乱させてしまう。
（１０２）大量の警告が出力されるため、本当にエラーとなる可能性のあるソースコードの記述に対する警告が、ソフトウェアの実行上は問題のないソースコードの記述、またはソフトウェアの実行上、警告対象となるが故意にそのような記述をしているソースコードに対して出力された警告に埋没してしまう。このため本当にエラーとなる可能性のある警告を見つけ出すため、静的解析システム使用者は出力された結果の解析に時間を費やさなければならない。
【０００５】
上記（１０１）及び（１０２）の問題点を防止するため、出力される警告を抑制する方法として、図１９に示した第１の従来例である特開平１１−１３４１８７号公報では、警告を抑制したいソースコードの記述をインクルード文として分離して付加する方法及び警告を抑制したいソースコードの記述に対してそのソースコードの記述にコメントを記述する方法が示されている。
また、第２の従来例として、英国Ｐｒｏｇｒａｍｍｉｎｇ　Ｒｅｓｅａｒｃｈ社の静的解析システムＱＡＣ及びＱＡＣ＋＋では、図２０に示したように＃ｐｒａｇｍａ文を使用して警告を抑制したいソースコードの記述の部分を囲んでその部分から出力される警告を抑制する。しかし、これらの方法は警告の抑制のために検査対象のソースファイルに変更を加える必要がある。
（１０３）このため、変更により新たなエラーを記述してしまう可能性があり、これを避けるために静的解析のためのソースファイルと実際にソフトウェアを動作させるためのソースファイルを別々に用意しなければならない。
（１０４）また、静的解析システムに用意された複数の警告情報を一意に識別する番号や記号、または意味的に分類した警告グループを一意に識別する番号や記号を指定することで、警告毎やグループ毎に警告として出力を抑制する機能が実装されているが、一旦、出力を抑制することを指定した警告は、実際のエラーを含むソースコードの記述で指定した警告が発生する場合でも出力が抑制され、静的解析システム使用者はその警告を見ることができなくなってしまう。
【０００６】
【発明が解決しようとする課題】
このようにこれまでの静的解析システムは（１０１）、（１０２）対応ではエラーとなる可能性のあるプログラムコードの記述を検出して警告を出力するが、大量の警告から本当のエラーとなるプログラムコードを見つけにくいという課題がある。
（１０３）対応ではエラー記述を避けるためには、ソースファイルを別々に用意する必要があり、煩雑な処理が要求される。
（１０４）対応ではこれらのツールはエラーを起こすプログラムコード自体の記述が出力されないこともあるという課題がある。
【０００７】
本発明は上記のような課題を解決するためになされたもので、変更や流用によって時系列的に連続するプログラムファイルとそのプログラムファイルに対する静的解析システムの出力結果を対応付け、時系列的に継続して出力される警告を抑制することで、重要度の高い警告を出力し、重要度の低い警告を抑制する方法及び装置を得る。
また、本発明は警告の出力抑制を警告の単位ではなく、プログラムファイルの位置で指定することにより、重要な警告の出力は抑制せず、警告を出力させたいプログラムファイル中の部分に対してのみ、警告を出力させる。
【０００８】
【課題を解決するための手段】
この発明に係る記述出力抑制プログラム解析装置は、プログラム・ファイルを解析する静的解析ツールを用いたシステムにおいて、
プログラム・ファイルの変更が発生した状態をバージョンとして、各バージョンにおける静的解析ツールによる解析結果を記憶する複数の解析結果ファイルを備えて、
あるバージョンの解析結果ファイルと、他のバージョンの解析結果ファイルとの差分情報からこの差分にある変更処置部分を抽出し、かつこの差分情報の警告文中の範囲情報を得て、この差分情報に対応する警告文を出力するデータ管理部、を備えた。
【０００９】
また更に、データ管理部は、解析対象の変更範囲を指定されると、この指定された変更範囲の差分情報に対応する警告文を出力するようにした。
【００１０】
また更に、データ管理部は、解析対象の構文及び構文中の構成要素が等しい場合は、警告内容を比較して同様警告であれば、この同様警告を出力しないようにした。
【００１１】
また更に、データ管理部は、解析対象の領域を指定されるか、または関数を指定されると、この指定された条件で差分情報を検索して、該当する警告文を出力するようにした。
【００１２】
データ管理部は、差分情報に基づいて、この差分情報に対応する警告文を出力することに代えて、先のバージョンが示す警告記述と、後のバージョンが示す警告記述とが重なる部分を出力するようにした。
【００１３】
この発明に係る記述出力抑制プログラム解析方法は、プログラム・ファイルを静的解析ツールにより静的解析する方法において、
プログラム・ファイルの変更をバージョンとして、各バージョンにおける上記静的解析ツールによる解析結果を各バージョン毎に記憶する解析結果記憶ステップと、
上記あるバージョンの記憶した解析結果と、他のバージョンの記憶した解析結果との差分情報から今回の変更処置部分を抽出するステップと、
差分情報の警告文中の範囲情報を得るステップと、
差分情報に対応する警告文を出力するステップ、とを備えた。
【００１４】
【発明の実施の形態】
実施の形態１．
図１は本発明の実施の形態１における記述出力抑制プログラム解析装置の構成を示す図である。図において、１はプログラム変更部解析装置全体を制御する統括制御部、２はソースファイルに対して静的解析を実行する静的解析システム、３はソースファイル及び解析結果から必要なデータを抽出する又は不必要なデータを抑制するデータ管理部、９は静的解析システム使用者からの入力を受け付ける、又は静的解析システム使用者に出力を表示する入出力装置である。１０〜１２は静的解析の対象となるソースファイルで、２０はソースファイル１０を、２１はソースファイル１１を、また、２２はソースファイル１２を、それぞれプログラムの変更が発生した状態をバージョンとして、各バージョン毎に、静的解析システムに入力して得た静的解析結果であり、３０は静的解析を行うソースファイル中の範囲を外部から指定する範囲指定外部情報である。
【００１５】
図２は図１のデータ管理部の詳細を示す図であり、図において、４はデータ管理部３を制御するデータ管理制御部、５はソースファイル１０〜１１、静的解析結果２０〜２１及び範囲指定情報から必要なデータを抽出する、又は不必要なデータを抑制する選択処理部、６はソースファイル１０〜１１の差分情報を生成する差分情報生成部、７は静的解析システム使用者によって指定されたソースファイルの静的解析対象、又は静的解析対象外の範囲を記録する範囲指定情報であり、８は差分情報生成部６によって生成されるソース差分情報である。
なお、静的解析システム２は販売されているシステムでも、独自に開発したシステムのどちらでもよい。また、図２において、ソースファイル及びそれに対応する静的解析結果を二つづつとして記載しているが、ソースファイル及びそれに対応する各バージョン対応の静的解析結果は三つづつ、つまりＡ，Ｂ，Ｃバージョン以上のバージョンがあっても構わない。
【００１６】
図３は図１及び図２に示した記述抑制プログラム解析装置による本実施の形態における動作の例を示すフローチャートである。図１及び図２のプログラム変更部解析装置の動作を図３のフローチャートを用いて説明する。なお、説明を簡略化するため、使用するソースファイルを二つとしているが、ソースファイルは三つ以上であってもよい。
図４から図１０は図１、図２及び図３に示した記述抑制プログラム変更部解析方法及び解析装置による動作を説明するための図である。即ち図４は時系列的に関連するソースファイルの例えばあるバージョンにおける変更前と変更後の例であり、変更後ソースは変更前ソースを変更して得られたものである。図５は図４に示した二つのソースファイルそれぞれに対して静的解析システムを実行した結果の警告メッセージ出力の例である。図６は図４に示した二つのソースファイルの差分情報の例を示す図である。図７は図６の差分情報から抽出した、変更が加えられていないソース上の箇所の範囲情報と変更（追加及び削除を含む）が加えられたソース上の箇所の範囲情報の例を示す図である。図７はまた、変更が加えられていないソース上の箇所の範囲情報と変更（追加及び削除を含む）が加えられたソース上の箇所の範囲情報の形式を示している。図８は図７に例として示された情報のイメージである。図９は図５の警告メッセージ出力と図７の変更／非変更範囲情報とを対応付けた警告メッセージのイメージである。図１０は変更前のソースファイルから継続して静的解析により報告される警告を抑制した結果の警告メッセージと抑制前の警告メッセージの例である。
【００１７】
以下、実施の形態１の動作の説明において、図４（ａ）の変更前ソースを図２のソースファイル１０、図４（ｂ）の変更後ソースを図２のソースファイル１１、図５（ａ）の変更前ソースの警告メッセージ出力を図２の解析結果２０、図５（ｂ）の変更後ソースの警告メッセージ出力を図２の解析結果２１、及び図６の差分情報を図２のソース差分情報８として説明する。このとき、旧いソースもソースファイル１０に残っていることが前提となっている。
（１）先ず手順Ｓ１において、プログラム変更部解析システム使用者は変更前のソースファイル１０と変更後のソースファイル１１を入出力装置９を用いて指定する。統括制御部１はこの情報を静的解析システム２及びデータ管理部３に伝達する。
【００１８】
（２）手順Ｓ２において、静的解析システム使用者は、ソースの変更によって新たに静的解析システムが出力する警告又は変更前から発生していて変更後も発生している静的解析システムの警告、のどちらを表示するかを入出力装置９を用いて指定する。統括制御部１はこの情報をデータ管理部３に伝達する。この指定は任意であり、指定をしない場合は変更後に新たに静的解析システムが発生させる警告を表示する動作をデフォルトとする。これら２つのステップは、解析開始前の人による設定ステップであるが、次のステップＳ３以降が、システムが行なう実動作ステップである。
（３）手順Ｓ３において、静的解析システム２は指定されたソースファイル１０と１１に対する静的解析を実行し、それぞれのソースファイルに対して静的解析結果２０と２１を生成する。例えば、図４のソースコードを静的解析システム２に入力すると図５に示すような結果が得られる。
【００１９】
（４）手順Ｓ４において、データ管理部３の中に存在するデータ管理制御部４は差分情報生成部６に指示を出し、ソースファイル１０と１１に対するソース差分情報８を生成させる。例えば、図４のソースファイルからは図６に示すような差分情報が得られる。
（５）手順Ｓ５において、選択処理部５は得られたソース差分情報８から変更前のソースファイル１０と変更後のソースファイル１１で変更が加えられていないソース上の箇所の範囲情報と変更（追加及び削除を含む）が加えられたソース上の箇所の範囲情報を求める。図４のソースファイル及び図６のソース差分情報８からは図７の変更／非変更範囲情報が得られる。図７に示した変更／非変更範囲情報には、ソースファイル１０とソースファイル１１のどの範囲が対応（それぞれ、開始行の列４０及び終了行の列４１がソースファイル１０の範囲を、開始行の列４２及び終了行の列４３がソースファイル１１の範囲を示す）していることが示され、それぞれ対応範囲（例えば、行４５は第１の範囲を指す）が変更されているか、いないかが一致の列４４のＹＥＳ又はＮＯで示される。図８は図７の情報を視覚的に分かりやすく示したものである。
【００２０】
（６）手順Ｓ６において、選択処理部５は、変更前のソースファイル１０の静的解析結果２０及び変更後のソースファイル１１の静的解析結果２１に含まれている各警告が手順Ｓ５で求めた変更／無変更箇所範囲のどこに含まれているかを判断し、各警告とその警告が含まれる範囲とを対応付ける。例えば、図４のソースファイル、図５の警告メッセージ出力及び図７の変更／非変更範囲情報から図９に示すような対応付けが行われ、対応表が生成される。
なお逆に、新しく変更した部分に対する警告に代えて、２つのバージョンを比較して、共通の部分に対してどのような警告文が出ているかを調べたい場合もある。こうしたときにも本実施の形態は有効であり、差分情報に代えて共通に得られる警告文のみを出力指定してもよい。即ちＳ６で変更範囲を出力せず、無変更範囲で、かつ警告文がある場合を出力指定すればよい。
【００２１】
（７）手順Ｓ７〜Ｓ１３は、選択処理部５での動作であり、手順Ｓ５及びＳ６で求められた変更／無変更箇所範囲の一つ一つを順にループとして処理を行う。記録された変更／無変更箇所範囲がなくなったところで動作を終了する（手順Ｓ８の状態となる）。手順Ｓ７〜Ｓ１３のループにより、図４のソースファイルに対しては最終的に図１０（ｂ）（右側の列で警告メッセージ（抑制後））に示される警告メッセージが使用者に表示される。
なお、比較のため、抑制なしで警告メッセージを表示した際の出力を図１０（ａ）（左側の列で警告メッセージ（抑制前））に示す。
（８）なお、図１０（ｂ）の出力を得る過程として、手順Ｓ７において、現在注目している箇所範囲が変更箇所範囲であった場合は手順Ｓ９へ、そうではなく無変更箇所範囲であった場合は手順Ｓ１２に進む。
（９）注目範囲が変更箇所範囲の場合で、手順Ｓ９において、手順Ｓ２での指定情報又はデフォルトの指定情報により変更箇所範囲を表示する指示があることを確認した場合は手順Ｓ１０において、その範囲に含まれる変更後の静的解析結果２１に含まれる警告を選択処理部５、データ管理部３を経由して統括制御部１に伝達し、入出力装置９に警告として表示する。処理が終了したら手順Ｓ７に戻る。
【００２２】
（１０）注目範囲が変更箇所範囲の場合で、手順Ｓ９において、手順Ｓ２での指定情報により変更箇所範囲を表示する指示がないことを確認した場合は、手順Ｓ１１において、その範囲に含まれる静的解析結果２１の警告がソースファイル上の位置情報以外の情報と異なるかどうかの確認を行う。位置情報のみが異なる場合は何もせず、静的解析システム使用者にその警告を表示しないで手順Ｓ７に戻る。警告の位置情報以外の情報が異なる場合は非表示指示に関わらずその警告を、統括制御部１に伝達し、入出力装置９に警告として表示する。処理が終了したら手順Ｓ７に戻る。
【００２３】
（１１）注目範囲が無変更箇所範囲の場合で、手順Ｓ１２において、手順Ｓ２での指定情報又はデフォルトの指定情報により変更箇所範囲を表示する指示があることを確認した場合は、何もしないで手順Ｓ７に戻る。
（１２）注目範囲が無変更箇所範囲の場合で、手順Ｓ１２において、手順Ｓ２での指定情報により変更箇所範囲を表示する指示がないことを確認した場合は、手順Ｓ１３において、その範囲に含まれる変更後の静的解析結果２１に含まれる警告を、統括制御部１に伝達し、入出力装置９に警告表示する。処理が終了したら手順Ｓ７に戻る。
全てが完了するとＳ８になり、上記の図１０（ｂ）が得られる。
なお図４の例では、変更は論理記述に差がある場合の例を示したが、例えば図４の２行目の＊Ｓの記述を変更するような、単語を変更した場合にも、多くの警告出力が発生する。従って特に単語の変更による警告文の抑制は出力の減少に大いに寄与する。これについては実施の形態３で詳しく述べる。
【００２４】
実施の形態２．
解析対象のプログラムは、あるプログラムから流用したものであってもよい。即ち、プログラムを全て新規に作成する場合もあるが、他の一部等を流用することも多い。この際に流用を含めて作成した今回のプログラムコードを解析すると、新しく作成した部分以外に、流用部分に対する警告文等も同時に出力される。流用分の警告出力を抑え、新規作成分に対してのみ解析結果をえる場合を説明する。
即ち、図１及び図２において、範囲指定情報７を使用することによって、実施の形態２における構成が得られる。また、図１１は図１及び図２に示したプログラム解析方法及び解析装置による動作を示すフローチャートである。このフローチャートを用いて動作を説明する。なお、説明を簡略化するため、使用するソースファイルを二つとしているが、ソースファイルは三つ以上であってもよい。
【００２５】
（２１）先ず手順Ｓ１０１において、静的解析システム使用者は流用元のソースファイル１０と流用先のソースファイル１１を入出力装置９を用いて指定する。この際、合せて流用元のソースファイル１０のどこを流用したか、及び流用先のソースファイル１１のどこにその流用した部分を使用したかのソースファイル上の位置と範囲の情報を入力する。統括制御部１はこの情報をデータ管理部３に伝達し、これを受け取ったデータ管理制御部４は範囲指定情報７として記録する。範囲指定情報７へのデータ設定は入出力装置９により範囲指定外部情報３０を指定することで行ってもよい。また、範囲指定情報７を範囲指定外部情報３０に出力し、再利用することも可能である。
【００２６】
（２２）手順Ｓ１０２において、手順Ｓ１０１で指定した範囲指定情報に対して、静的解析システム使用者は、流用先のソースファイル１１の流用範囲以外で静的解析システムが出力する警告又は流用範囲で発生する静的解析システムの警告、のどちらを表示するかを入出力装置９を用いて指定する。この指定は任意であり、指定をしない場合は流用範囲以外で静的解析システムが発生させる警告を表示する動作をデフォルトとする。
また、さらに静的解析システム使用者は、流用範囲を表示対象として指示した場合には、流用範囲に対するソースの変更によって新たに静的解析システムが出力する警告又は変更前から発生していて変更後も発生している静的解析システムの警告、のどちらを表示するかについても入出力装置９を用いて指定する。この指定は任意であり、指定をしない場合は変更後に新たに静的解析システムが発生させる警告を表示する動作をデフォルトとする。統括制御部１はこれらの情報をデータ管理部３に伝達し、これを受け取ったデータ管理制御部４は範囲指定情報情報７として記録する。表示対象を流用範囲外で静的解析システムが出力する警告と指定してもよい。
（２３）手順Ｓ１０３において、データ管理部３の中に存在するデータ管理制御部４は差分情報生成部６に指示を出し、ソースファイル１０と１１に対するソース差分情報８を生成させる。
【００２７】
（２４）手順Ｓ１０４〜Ｓ１１３は、選択処理部５での動作であり、手順Ｓ１０１及びＳ１０２で得られた範囲指定情報７に記録された流用範囲の一つ一つに対して順にループとして処理を行う。記録された範囲指定情報７がなくなったところで動作を終了する（手順Ｓ１０５の状態となる）。
（２５）手順Ｓ１０６において、注目している範囲が流用範囲か非流用範囲かを確認する。流用範囲であった場合は手順Ｓ１０９へ、非流用範囲であった場合は手順Ｓ１０７に進む。
（２６）注目している範囲が非流用範囲の場合は手順Ｓ１０７において、手順Ｓ１０２で指定された表示指示を確認し、非流用範囲が表示対象となっている場合は手順Ｓ１０８において、その範囲に含まれる静的解析結果２１に含まれる警告を選択処理部５、データ管理部３を経由して統括制御部１に伝達し、入出力装置９に表示し、静的解析システム使用者にその警告を表示する。処理が終了したら手順Ｓ１０４に戻る。
【００２８】
（２７）注目している範囲が流用範囲の場合は手順Ｓ１０９において、データ管理部３の中に存在するデータ管理制御部４は差分情報生成部６に指示を出し、ソースファイル１０と１１に対するソース差分情報８を生成させる。
（２８）手順Ｓ１１０において、選択処理部５は得られたソース差分情報８から流用元のソースファイル１０と流用先のソースファイル１１の現在注目している流用範囲の中で変更が加えられていないソース上の箇所の範囲情報と変更（追加及び削除を含む）が加えられたソース上の箇所の範囲情報を求める。
（２９）手順Ｓ１１１において、選択処理部５は、流用元のソースファイル１０の静的解析結果２０及び流用先のソースファイル１１の静的解析結果２１に含まれている各警告が手順Ｓ１１０で求めた変更／無変更箇所範囲のどこに含まれているかを判断し、各警告とその警告が含まれる範囲とを対応付ける。
【００２９】
（３０）手順Ｓ１１２及びＳ１１３は、手順Ｓ１１０及びＳ１１１で求められた変更／無変更箇所範囲の一つ一つを順にループとして処理を行う。記録された変更／無変更箇所範囲がなくなったところで手順Ｓ１０４に戻り次の流用範囲に対する処理を実行する。
（３１）手順Ｓ１１２及びＳ１１３は、処理対象が流用範囲内の変更範囲又は無変更範囲となるだけで図３の手順Ｓ７〜Ｓ１３と同様である。
【００３０】
実施の形態３．
解析対象のプログラムにおいて、変更が制御構造、構文の場合と、文字とか単語とかの細分化項目である場合とは、以後の取り扱いが異なる。従ってこの区別を明確にしたプログラム解析の方法を説明する。
即ち図３のフローチャートに記載された手順Ｓ１０を図１２に示すフローチャートに置き換えることによって実施の形態３における動作の手順を示すことができる。このフローチャートに基いて動作を説明する。
【００３１】
図１３から図１６は実施の形態３の動作を説明するための図である。図１３は時系列的に関連するソースファイルの例であり、変更後ソースは変更前ソースを変更して得られたものである。図１３における変更では、変更前ソースファイルのｃｈｅｃｋ＿ｆｉｌｅ＿ｓｉｚｅ関数内で使用されているｆｉｌｅｄｅｓという名前の内部変数をｆｄという名前に改名し、これに合わせてｃｈｅｃｋ＿ｆｉｌｅ＿ｓｉｚｅ関数内でｆｉｌｅｄｅｓを使用していた箇所の記述をｆｄに修正して変更後のソースファイルが作成されている。図１４は図１３に示した二つのソースファイルそれぞれに対して静的解析システムを実行した結果の警告メッセージ出力の内、ソースコードの変更が行われた１５行目で出力されるメッセージの例である（その他のメッセージは示していない）。図１５は、変更前及び変更後のソースファイルの変更を行われたソースコードの断片の内、１５行目について構文解析を行った結果の構文木及びトークンの属性列を示す例である。図１６は実施の形態３のより警告メッセージを抑制した場合の警告メッセージと抑制前の警告メッセージの例（１５行目対応部分のみ抜粋）である。
【００３２】
（４１）図３の手順Ｓ１０の手前までの動作は図３に示す通りである。
（４２）図３の手順Ｓ１０と置き換えた図１２の手順Ｓ２０１において、ソースファイル１０とソースファイル１１の変更範囲又は流用範囲のソースコードを構文解析し、それらのソースコードの構成要素（識別子、演算子等）とそれらの構成要素の構文的なつながりを示す構文木の構文解析情報を得る。図１３に示した変更前及び変更後のソースファイルの中で変更が行われた１５行目に対する構文解析の結果の例を図１５に示す。なお、図１５に示した構文解析結果は一例であり、構文と構文要素の比較が可能となる解析ならばどのような解析方法を採用しても良い。
（４３）図３の手順Ｓ１０と置き換えた図１２の手順Ｓ２０２において、手順Ｓ２０１で得た構文解析情報を比較し、構文木の構造が一致するか、構文木の構造が一致する場合は構文木を構成する構成要素の意味が一致するかどうかを検査する。構文木及び構成要素の意味の双方が一致する場合は手順Ｓ２０３に、一致しない場合は手順Ｓ２０４に進む。図１５において、得られた変更前及び変更後の構文木及び構成要素の意味（トークンの属性）を比較するとこの場合は構文木及び構文要素の意味が一致していることが分かる。従って、図１３に示したソースファイルの１５行目の変更部分に対しては手順Ｓ２０３に進むことになる。なお、構文木及び構文要素の比較方法については一致又は不一致が明確に判定できる方法であればどのような方法を採用しても良い。
【００３３】
（４４）図３の手順Ｓ１０と置き換えた図１２の手順Ｓ２０３に進んだ場合は、手順Ｓ２０３において、さらにその範囲に含まれる静的解析結果２０と静的解析結果２１の警告内容が同種（警告内容を一意に示す警告識別番号等が一致する）かどうかを検査する。同種の場合は何もせずに処理を終了し（終了Ｓ２０５へ）、図３の手順Ｓ７に戻る（警告を出力しない）。同種でない場合は手順Ｓ２０４に進む。図１３のソースファイルの例から得られる図１４の警告メッセージの例を検査すると警告内容は同種であるため、何も処理を行わない。従って、図１３に示したソースファイルの例で１５行目で出力された警告メッセージは抑制され、図１６に示す通り、メッセージは出力されないことになる。
（４５）図３の手順Ｓ１０と置き換えた図１２の手順Ｓ２０４に進んだ場合は、手順Ｓ２０４において、その範囲に含まれる静的解析結果２１の警告を選択処理部５、データ管理部３を経由して統括制御部１に伝達し、入出力装置９に表示し、静的解析システム使用者にその警告を表示する。処理が終了したら手順Ｓ７に戻る。
なお、実施の形態２では、アドレス等による領域で範囲指定したが、この実施の形態の図１５の構文木等の制御構造ブロックで範囲指定してもよい。こうしても出力の限定が行える。
【００３４】
実施の形態４．
解析対象のプログラムの、解析範囲を指定することも、もちろん可能であり、本実施の形態はこうした範囲指定した場合の動作を説明する。
即ち、図１及び図２は図１に示す範囲指定外部情報３０を使用することによって、実施の形態４における動作が行なわれる。図１７は、本実施の形態における、動作を示すフローチャートである。本解析装置の動作をこのフローチャートを用いて説明する。
【００３５】
（５１）手順Ｓ３０１において、静的解析システム使用者は静的解析対象となるソースファイル１０を、入出力装置９を用いて指定する。統括制御部１はこの情報を静的解析システム２及びデータ管理部３に伝達する。データ管理部３に伝達された情報はデータ管理制御部４に伝達され、範囲指定情報７として記録される。範囲指定情報７へのデータ設定は入出力装置９により範囲指定外部情報３０を指定することで行ってもよい。また、範囲指定情報７を範囲指定外部情報３０に出力し、再利用することも可能である。
（５２）手順Ｓ３０２において、静的解析システム使用者はソースファイル１０に含まれるソースコードの解析対象又は非解析対象とする範囲を入出力装置９を用いて指定する。統括制御部１はこの情報をデータ管理部３に伝達する。データ管理部３に伝達された情報はデータ管理制御部４に伝達され、範囲指定情報７として記録される。範囲指定情報７へのデータ設定は入出力装置９により範囲指定外部情報３０を指定することで行ってもよい。
【００３６】
（５３）手順Ｓ３０３において、静的解析システム使用者は、先に指定した範囲に対してその範囲の警告を出力する、しないを入出力装置９を用いて指定する。統括制御部１はこの情報をデータ管理部３に伝達する。統括制御部１はこの情報をデータ管理部３に伝達する。データ管理部３に伝達された情報はデータ管理制御部４に伝達され、範囲指定情報７として記録される。範囲指定情報７へのデータ設定は入出力装置９により範囲指定外部情報３０を指定することで行っても良い。
（５４）手順Ｓ３０４において、静的解析システム２は指定されたソースファイル１０に対する静的解析を実行し、静的解析結果２０を生成する。
【００３７】
（５５）手順Ｓ３０５〜Ｓ３１０は、選択処理部５での動作であり、範囲指定情報７に記録された範囲及び範囲として指定されなかった範囲一つ一つを順にループとして処理を行う。記録された変更／無変更箇所範囲がなくなったところで動作を終了する（手順Ｓ３０６の状態となる）。
（５６）手順Ｓ３０７において、現在注目している範囲が指定されなかった範囲であった場合は手順Ｓ３０８へ、指定された範囲であった場合は手順Ｓ３１０に進む。
【００３８】
（５７）注目範囲が指定されなかった範囲の場合で、手順Ｓ３０８において、手順Ｓ３０２で指定範囲のいずれかが警告を出力しない指定になっていた場合、手順Ｓ３０９において、その範囲に含まれる静的解析結果２０に含まれる警告を選択処理部５、データ管理部３を経由して統括制御部１に伝達し、入出力装置９に表示し、静的解析システム使用者にその警告を表示する。処理が終了したら手順Ｓ３０５に戻る。そうでない場合は何もせず手順Ｓ３０５に戻る。
（５８）注目範囲が指定された範囲の場合で、手順Ｓ３１０において、手順Ｓ３０２でその指定範囲が警告を出力する指定になっていた場合、手順Ｓ３０９において、その範囲に含まれる静的解析結果２０に含まれる警告を選択処理部５、データ管理部３を経由して統括制御部１に伝達し、入出力装置９に表示し、静的解析システム使用者にその警告を表示する。処理が終了したら手順Ｓ３０５に戻る。そうでない場合は何もせず手順Ｓ３０５に戻る。
【００３９】
図１７の動作フローにおいては、警告の出力又はは抑制のためにソースコード中の範囲を指定したが、この指定を関数で指定してもよい。この場合、動作も実施の形態４の動作を示す図１７のフローチャートと同様であるが、異なる点は範囲の指定が関数となり、実際に使用される範囲情報が指定された関数の定義の始まりから終わりの位置となる。
【００４０】
解析対象の範囲指定を行った場合、その範囲指定の情報が適用されるソースファイルが変更されると、範囲指定の情報もソースファイルの変更に合せて修整しなければならない。図１８はこうしたソースファイルの変更に伴って範囲情報が変更される動作を示すフローチャートである。この場合の解析装置の動作を図１８のフローチャートを用いて説明する。
【００４１】
（６１）手順Ｓ４０１において、変更前のソースファイル１０及び変更後のソースファイル１１並びに変更前の範囲指定情報を範囲指定外部情報３０として、入出力装置９を用いて指定する。統括制御部１はこの情報をデータ管理部３に伝達する。データ管理部３に伝達された情報はデータ管理制御部４に伝達され、範囲指定外部情報３０を範囲指定情報７にコピーする。
（６２）手順Ｓ４０２において、データ管理制御部４は、指定された範囲が関数単位か、ソースファイル中の位置で示された範囲かを確認する。関数単位の範囲指定であった場合は手順Ｓ４０３に、それ以外の場合は手順４０９に進む。
【００４２】
（６３）関数単位の範囲指定であった場合、手順Ｓ４０３において、選択処理部５が変更後のソースファイル１１に指定された関数が存在するかどうかを探査する。
（６４）手順Ｓ４０４において、指定された関数が存在しない場合は手順Ｓ４０５に進み、変更後のソースファイル１１には新しく対応する関数が存在しないことを選択処理部５、データ管理部３を経由して統括制御部１に伝達し、入出力装置９に表示し、静的解析システム使用者にその旨を表示する。表示後は動作を終了する（手順Ｓ４０６の状態となる）。
（６５）手順Ｓ４０４において、指定された関数が存在する場合は手順Ｓ４０７に進み、変更後のソースファイル１１には新しく対応する関数が存在することを選択処理部５、データ管理部３を経由して統括制御部１に伝達し、入出力装置９に表示し、静的解析システム使用者にその旨を表示する。また、データ管理制御部４により、範囲指定外部情報３０に新しい範囲情報を記録する。その後は動作を終了する（手順Ｓ４０８の状態となる）。
【００４３】
（６６）範囲の指定がソースファイル中の位置で指定されていた場合、手順Ｓ４０９において、差分情報生成部６が範囲指定情報７で示された変更前のソースファイル１０のソースコードの断片と変更後のソースファイル１０の差分情報を生成する。
（６７）手順Ｓ４１０において、得られた差分情報から選択処理部５がソースコード断片と一致する変更後のソースファイル１１の範囲が存在するかどうかを確認する。一致する範囲が存在しない場合は手順Ｓ４０５に進み、変更後のソースファイル１１には新しく対応する領域が存在しないことを選択処理部５、データ管理部３を経由して統括制御部１に伝達し、入出力装置９に表示し、静的解析システム使用者にその旨を表示する。表示後は動作を終了する（手順Ｓ４０６の状態となる）。一致する範囲が存在した場合は手順Ｓ４１１へ進む。
【００４４】
（６８）手順Ｓ４１１において、一致する範囲が一箇所かどうかを検査し、一箇所しか存在しない場合は変更後のソースファイル１１には新しく対応する範囲が存在することを選択処理部５、データ管理部３を経由して統括制御部１に伝達し、入出力装置９に表示し、静的解析システム使用者にその旨を表示する。その後は動作を終了する（手順Ｓ４０８の状態となる）。複数箇所に存在する場合は手順Ｓ４１２に進む。
（６９）手順Ｓ４１２において、複数存在する一致箇所のうち、現在注目している範囲を新範囲として良いかどうかの問合わせを選択処理部５、データ管理部３を経由して統括制御部１に伝達し、入出力装置９に表示し、静的解析システム使用者にその旨を表示する。静的解析システム使用者からの回答を逆に伝達して、静的解析システム使用者から承認の回答があった場合は変更後のソースファイル１１には新しく対応する範囲が存在することを選択処理部５、データ管理部３を経由して統括制御部１に伝達し、入出力装置９に表示し、静的解析システム使用者にその旨を表示する。その後は動作を終了する（手順Ｓ４０８の状態となる）。静的解析システム使用者から否認の回答があった場合は手順Ｓ４１０に戻る。
【００４５】
【発明の効果】
以上のようにこの発明によれば、変更前後の解析結果ファイルと差分情報に基づく警告文のみを出力するデータ管理部を備えたので、対応した差分に基く変更部分のみを抽出して警告表示してチェックを容易にする効果がある。
【００４６】
また更に、解析対象の範囲を限定するようにしたので、警告文の出力を更に減らす効果がある。
【図面の簡単な説明】
【図１】この発明の実施の形態１等における記述出力抑制プログラム解析装置の全体構成を示す図である。
【図２】実施の形態１におけるデータ管理部の詳細構成を示す図である。
【図３】実施の形態１における記述出力抑制プログラム解析装置の動作フローを示す図である。
【図４】実施の形態１におけるソースファイルの変更前と変更後の例を示す図である。
【図５】図４の変更に対して静的解析結果が示す警告文の例を示す図である。
【図６】図４に示す変更の差分情報を示す図である。
【図７】図６に示す差分情報から抽出した各範囲における変更の有無情報を示す図である。
【図８】図７に示された情報の補足説明としてのイメージを示す図である。
【図９】図５の警告文と図７の変更の有無情報とを対応付けた補足説明としてのイメージを示す図である。
【図１０】実施の形態１における抑制後の警告文の出力例を示す図である。
【図１１】この発明の実施の形態２における記述出力抑制プログラム解析装置の動作フローを示す図である。
【図１２】この発明の実施の形態３における記述出力抑制プログラム解析装置の動作フローを示す図である。
【図１３】図１２のフローチャートを説明するためのサンプルソースである。
【図１４】図１２のフローチャートを説明するための解析システム出力例を示す図である。
【図１５】図１２のフローチャートを説明するための構文解析の例を示す図である。
【図１６】実施の形態３における解析結果を示す抑制された警告文の例を示す図である。
【図１７】この発明の実施の形態４における記述出力抑制プログラム解析装置の動作フローを示す図である。
【図１８】実施の形態４における他の記述出力抑制プログラム解析装置の動作フローを示す図である。
【図１９】第１の従来例における警告抑制出力のための記述と出力例を示す図である。
【図２０】第２の従来例における警告抑制出力のための記述と出力例を示す図である。
【符号の説明】
１　統括制御部、２　静的解析システム、３　データ管理部、４　データ管理制御部、５　選択処理部、６　差分情報生成部、７　範囲指定情報、８　ソース差分情報、１０　ソースファイル１、１１　ソースファイル２、１２　ソースファイルｎ、２０　解析結果１、２１　解析結果２、２２　解析結果ｎ、３０　範囲指定外部情報、Ｓ３　静的解析ステップ、Ｓ４　差分情報生成ステップ、Ｓ５
変更範囲対応付けステップ、Ｓ１０　解析結果表示ステップ。
【図１】
2004126866.tif 000003
【図２】
2004126866.tif 000004
【図３】
2004126866.tif 000005
【図４】
2004126866.tif 000006
【図５】
2004126866.tif 000007
【図６】
2004126866.tif 000008
【図７】
2004126866.tif 000009
【図８】
2004126866.tif 000010
【図９】
2004126866.tif 000011
【図１０】
2004126866.tif 000012
【図１１】
2004126866.tif 000013
【図１２】
2004126866.tif 000014
【図１３】
2004126866.tif 000015
【図１４】
2004126866.tif 000016
【図１５】
2004126866.tif 000017
【図１６】
2004126866.tif 000018
【図１７】
2004126866.tif 000019
【図１８】
2004126866.tif 000020
【図１９】
2004126866.tif 000021
【図２０】
2004126866.tif 000022