(57)【特許請求の範囲】
【請求項１】
第１の実行装置で実行される第１のプログラムと、前記第１の実行装置と通信する第２の実行装置で前記第１のプログラムと並行して実行される第２のプログラムとを解析するプログラム解析装置であって、前記第１のプログラムは第２のプログラムに値を送信する送信関数を含み、前記第２のプログラムは第１のプログラムから値を受信する受信関数を含み、
前記第１の実行装置が前記送信関数に従って行った通信を表す送信情報と、前記第２の実行装置が前記受信関数に従って行った通信を表す受信情報とを収集する収集部と、
前記収集部により収集された前記送信情報と前記受信情報とを用いて、前記第１のプログラムと前記第２のプログラムとの各々のソースコードを解析ツールにより解析して得られた解析結果に含まれる警告に、誤検出された警告があるか否かを検査する検査部と
を備えたプログラム解析装置。
【請求項２】
前記収集部は、
前記第１の実行装置が通信を行った通信時刻と前記送信関数の関数名とを含む前記送信情報と、前記第２の実行装置が通信を行った通信時刻と前記受信関数の関数名とを含む前記受信情報とを収集する請求項１に記載のプログラム解析装置。
【請求項３】
前記検査部は、
前記送信情報に含まれる通信時刻と前記受信情報に含まれる通信時刻とを比較すると共に、前記送信情報に含まれる前記送信関数の関数名と前記受信情報に含まれる前記受信関数の関数名とを比較し、前記送信関数と前記受信関数とが対応する関数であるか否かを判定する判定部と、
前記送信関数と前記受信関数とが対応する関数である場合に、前記解析結果に含まれる警告から、前記送信情報により表された通信と前記受信情報により表された通信との影響を受ける警告を抽出する抽出部と、
前記第１のプログラムと第２のプログラムとの各々のソースコードと前記送信情報と前記受信情報とに基づいて、前記抽出部により抽出された警告について、警告を出す発生条件が成立するか否かを判定し、前記発生条件が成立しない警告を前記誤検出された警告として決定する決定部と
を備えた請求項２に記載のプログラム解析装置。
【請求項４】
前記収集部は、
前記第１のプログラムのソースコードにおける前記送信関数の行番号を含む前記送信情報と、前記第２のプログラムのソースコードにおける前記受信関数の行番号を含む前記受信情報とを収集し、
前記抽出部は、
前記送信関数の行番号と前記受信関数の行番号とを用いて、前記解析結果に含まれる警告から前記影響を受ける警告を抽出する請求項３に記載のプログラム解析装置。
【請求項５】
前記送信関数は、前記第２のプログラムに引数の値を送信し、前記受信関数は、前記第１のプログラムから戻り値または引数の値を受信し、
前記収集部は、
前記送信関数に用いられた引数の名と前記引数に設定された値とを含む前記送信情報と、前記受信関数に用いられた戻り値または引数の名と前記戻り値または引数に設定された値とを含む前記受信情報とを収集し、
前記決定部は、
前記第１のプログラムと第２のプログラムとの各々のソースコードと、前記送信関数に用いられた引数の名と前記引数に設定された値と、前記受信関数に用いられた戻り値または引数の名と前記戻り値または引数に設定された値とを用いて、前記抽出部により抽出された警告について、前記発生条件が成立するか否かを判定する請求項３または４に記載のプログラム解析装置。
【請求項６】
第１のプログラムを実行する第１の実行装置と、第２のプログラムを実行する第２の実行装置と、前記第１のプログラムと前記第２のプログラムとを解析するプログラム解析装置とを備えたプログラム解析システムであって、前記第１のプログラムは第２のプログラムに値を送信する送信関数を含むと共に、前記第２のプログラムは第１のプログラムから値を受信する受信関数を含み、第１の実行装置と第２の実行装置とが通信しながら前記第１のプログラムと前記第２のプログラムとを並行して実行するプログラム解析システムにおいて、
前記プログラム解析装置は、
前記第１の実行装置が前記送信関数に従って行った通信を表す送信情報と、前記第２の実行装置が前記受信関数に従って行った通信を表す受信情報とを収集する収集部と、
前記収集部により収集された前記送信情報と前記受信情報とを用いて、前記第１のプログラムと前記第２のプログラムとの各々のソースコードを解析ツールにより解析して得られた解析結果に含まれる警告に、誤検出された警告があるか否かを検査する検査部と
を備えたプログラム解析システム。
【請求項７】
第１のプログラムを実行する第１の実行装置と、第２のプログラムを実行する第２の実行装置と、前記第１のプログラムと前記第２のプログラムとを解析するプログラム解析装置とを備えたプログラム解析システムであって、前記第１のプログラムは第２のプログラムに値を送信する送信関数を含むと共に、前記第２のプログラムは第１のプログラムから値を受信する受信関数を含み、第１の実行装置と第２の実行装置とが通信しながら前記第１のプログラムと前記第２のプログラムとを並行して実行するプログラム解析システムのプログラム解析方法において、
前記プログラム解析装置の収集部が、前記第１の実行装置が前記送信関数に従って行った通信を表す送信情報と、前記第２の実行装置が前記受信関数に従って行った通信を表す受信情報とを収集し、
前記プログラム解析装置の検査部が、前記収集部により収集された前記送信情報と前記受信情報とを用いて、前記第１のプログラムと前記第２のプログラムとの各々のソースコードを解析ツールにより解析して得られた解析結果に含まれる警告に、誤検出された警告があるか否かを検査するプログラム解析方法。
【請求項８】
第１のプログラムを実行する第１の実行装置と、第２のプログラムを実行する第２の実行装置と、前記第１のプログラムと前記第２のプログラムとを解析するプログラム解析装置とを備えたプログラム解析システムであって、前記第１のプログラムは第２のプログラムに値を送信する送信関数を含むと共に、前記第２のプログラムは第１のプログラムから値を受信する受信関数を含み、第１の実行装置と第２の実行装置とが通信しながら前記第１のプログラムと前記第２のプログラムとを並行して実行するプログラム解析システムの解析プログラムにおいて、
前記第１の実行装置が前記送信関数に従って行った通信を表す送信情報と、前記第２の実行装置が前記受信関数に従って行った通信を表す受信情報とを収集する収集処理と、
前記収集処理により収集された前記送信情報と前記受信情報とを用いて、前記第１のプログラムと前記第２のプログラムとの各々のソースコードを解析ツールにより解析して得られた解析結果に含まれる警告に、誤検出された警告があるか否かを検査する検査処理とをコンピュータである前記プログラム解析装置に実行させる解析プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム解析システム、プログラム解析装置、プログラム解析方法および解析プログラムに関する。
【背景技術】
【０００２】
特許文献１には、警告のグループ化により解析結果のレビュー時間を短縮する技術が開示されている。また、特許文献２には、複数のドメインで並行実行されるプログラム群の実行時間の正確な見積りを行う技術が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１４−１７０５３０号公報
【特許文献２】特開２０１５−１６９９９７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、特許文献１に開示された技術は、一つのドメインで実行されるプログラム群を静的解析の解析対象としている。このため、ドメイン間通信によりプログラムが並行して実行されるシステムに対して静的解析が実行された場合、ドメイン間通信の情報が考慮されず、実動作では起こり得ない警告、すなわち、誤検出された警告が発生することがあった。
また、特許文献２に開示された技術によれば、並行実行されるプログラムの振る舞いに関する情報を得ることができる。しかし、並行実行されるプログラム間で通信される情報は何も考慮されていない。このため、並行実行されるプログラムのソースコードに共通して内在する問題を明確にするための静的解析に関する情報は得ることができない。【０００５】
本発明は、互いに異なるドメインで実行されるプログラム群がドメイン間通信をしながら並行して実行される場合に、通信による影響を考慮した的確な解析結果を得ることを目的とする。
【課題を解決するための手段】
【０００６】
本発明に係るプログラム解析システムは、第１のプログラムを実行する第１の実行装置と、第２のプログラムを実行する第２の実行装置と、前記第１のプログラムと前記第２のプログラムとを解析するプログラム解析装置とを備えたプログラム解析システムであって、前記第１のプログラムは第２のプログラムに値を送信する送信関数を含むと共に、前記第２のプログラムは第１のプログラムから値を受信する受信関数を含み、第１の実行装置と第２の実行装置とが通信しながら前記第１のプログラムと前記第２のプログラムとを並行して実行するプログラム解析システムにおいて、
前記プログラム解析装置は、
前記第１の実行装置が前記送信関数に従って行った通信を表す送信情報と、前記第２の実行装置が前記受信関数に従って行った通信を表す受信情報とを収集する収集部と、
前記収集部により収集された前記送信情報と前記受信情報とを用いて、前記第１のプログラムと前記第２のプログラムとの各々のソースコードを解析ツールにより解析して得られた解析結果に含まれる警告に、誤検出された警告があるか否かを検査する検査部とを備えた。
【発明の効果】
【０００７】
本発明に係るプログラム解析システムでは、第１の実行装置と第２の実行装置とが通信しながら第１のプログラムと第２のプログラムとを並行して実行する。また、プログラム解析装置は、第１の実行装置が送信関数に従って行った通信を表す送信情報と、第２の実行装置が受信関数に従って行った通信を表す受信情報とを収集する収集部を備える。また、プログラム解析装置は、送信情報と受信情報とを用いて、第１のプログラムと第２のプログラムとの各々のソースコードを解析ツールにより解析して得られた解析結果に含まれる警告に、誤検出された警告があるか否かを検査する検査部を備える。したがって、本発明に係るプログラム解析システムによれば、解析結果に含まれる警告に、通信による影響で誤って検出された警告があるか否かを検査できるので、通信による影響を考慮した的確な解析結果を得ることができる。
【図面の簡単な説明】
【０００８】
【図１】実施の形態１に係るプログラム解析システム５００およびプログラム解析装置１００の構成図。
【図２】実施の形態１に係るプログラム２１のソースコード２１０の例を示す図。
【図３】実施の形態１に係る通信データ１４２の構成図。
【図４】図２に示した第１のプログラム２１１と第２のプログラム２１２との間の通信を表す通信データ１４２の例を示す図。
【図５】実施の形態１に係るプログラム解析装置１００のプログラム解析方法５１０および解析プログラム５２０のプログラム解析処理Ｓ１００を示すフローチャート。
【図６】図２に示した第１のプログラム２１１と第２のプログラム２１２との各々のソースコード２１０の解析結果１４１の例を示す図。
【図７】実施の形態１に係る検査処理Ｓ２０を示すフローチャート。
【図８】実施の形態１に係る検査処理Ｓ２０の具体例を示す図。
【図９】実施の形態１の変形例に係るプログラム解析装置１００の構成図。
【発明を実施するための形態】
【０００９】
以下、本発明の実施の形態について、図を用いて説明する。なお、各図中、同一または相当する部分には、同一符号を付している。実施の形態の説明において、同一または相当する部分については、説明を適宜省略または簡略化する。
【００１０】
実施の形態１．
＊＊＊構成の説明＊＊＊
図１を用いて、本実施の形態に係るプログラム解析システム５００およびプログラム解析装置１００の構成について説明する。
プログラム解析システム５００は、各々がプログラムを実行する複数の実行装置と、複数の実行装置の各々が実行するプログラムを解析するプログラム解析装置１００とを有する。複数の実行装置には、第１のプログラム２１１を実行する第１の実行装置２０１と、第２のプログラム２１２を実行する第２の実行装置２０２と、第ｎのプログラム２１ｎを実行する第ｎの実行装置２０ｎが含まれる。ここで、ｎは自然数である。プログラム解析システム５００は、第１のプログラム２１１と第２のプログラム２１２とを含むプログラム２１を解析する。
なお、第１のプログラム２１１、第２のプログラム２１２、および第ｎのプログラム２１ｎの全てあるいは少なくとも１部を、単に、プログラム２１と呼ぶ場合がある。また、第１の実行装置２０１、第２の実行装置２０２、および第ｎの実行装置２０ｎの全てあるいは少なくとも１部を、単に、実行装置２０と呼ぶ場合がある。
【００１１】
複数の実行装置の各々は互いに独立したドメインに属する。プログラム解析システム５００では、複数の実行装置の各々がドメイン間通信を行いながらプログラムを並行して実行する。すなわち、プログラム解析システム５００では、第１の実行装置２０１と第２の実行装置２０２とが通信しながら第１のプログラム２１１と第２のプログラム２１２とを並行して実行する。
本実施の形態では、第１のプログラム２１１は第２のプログラム２１２に値を送信する送信関数を含む。また、第２のプログラム２１２は第１のプログラム２１１から値を受信する受信関数を含む。第１のプログラム２１１は第２のプログラム２１２に引数の値を送信する。また、第２のプログラム２１２は第１のプログラム２１１から戻り値または引数を受信する。送信関数および受信関数を通信関数ともいう。
【００１２】
図１に示すように、プログラム解析装置１００は、コンピュータである。
プログラム解析装置１００は、プロセッサ９１０、記憶装置９２０、入力インタフェース９３０、出力インタフェース９４０、および通信装置９５０といったハードウェアを備える。記憶装置９２０は、メモリと補助記憶装置とを含む。
【００１３】
プログラム解析装置１００は、機能構成として、解析ツール１１０と、収集部１２０と、検査部１３０と、記憶部１４０とを備える。検査部１３０は、判定部１３１と、抽出部１３２と、決定部１３３とを備える。記憶部１４０には、解析結果１４１と、通信データ１４２と、抽出解析結果１４３とが記憶される。
【００１４】
解析ツール１１０と、収集部１２０と、判定部１３１と、抽出部１３２と、決定部１３３との機能は、ソフトウェアで実現される。
記憶部１４０は、メモリおよび補助記憶装置により実現される。また、記憶部１４０は、メモリのみ、あるいは、補助記憶装置のみで実現されてもよい。記憶部１４０の実現方法は任意である。本実施の形態では、解析結果１４１と、通信データ１４２と、抽出解析結果１４３とは、メモリに記憶される。
【００１５】
プロセッサ９１０は、信号線を介して他のハードウェアと接続され、これら他のハードウェアを制御する。プロセッサ９１０は、演算処理を行うＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）である。プロセッサ９１０は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）あるいはＭＰＵ（Ｍｉｃｒｏ−Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）である。
【００１６】
補助記憶装置は、具体的には、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、フラッシュメモリ、または、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）である。メモリは、具体的には、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。
【００１７】
入力インタフェース９３０は、マウス、キーボード、タッチパネルといった入力装置と接続されるポートである。入力インタフェース９３０は、具体的には、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）端子である。なお、入力インタフェース９３０は、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）と接続されるポートであってもよい。
【００１８】
出力インタフェース９４０は、ディスプレイといった表示機器のケーブルが接続されるポートである。出力インタフェース９４０は、具体的には、ＵＳＢ端子またはＨＤＭＩ（登録商標）（Ｈｉｇｈ  Ｄｅｆｉｎｉｔｉｏｎ  Ｍｕｌｔｉｍｅｄｉａ  Ｉｎｔｅｒｆａｃｅ）端子である。ディスプレイは、具体的には、ＬＣＤ（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ）である。
【００１９】
通信装置９５０は、レシーバとトランスミッタとを備える。具体的には、通信装置は通信チップまたはＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）である。通信装置はデータを通信する通信部である。レシーバはデータを受信する受信部である。トランスミッタはデータを送信する送信部である。
【００２０】
補助記憶装置には、解析ツール１１０と、収集部１２０と、判定部１３１と、抽出部１３２と、決定部１３３との機能を実現するプログラムが記憶されている。解析ツール１１０と、収集部１２０と、判定部１３１と、抽出部１３２と、決定部１３３との機能を実現するプログラムを解析プログラム５２０ともいう。このプログラムは、メモリにロードされ、プロセッサ９１０に読み込まれ、プロセッサ９１０によって実行される。また、補助記憶装置には、ＯＳが記憶されている。ＯＳの少なくとも一部がメモリにロードされる。プロセッサ９１０はＯＳを実行しながら、解析プログラム５２０を実行する。
【００２１】
プログラム解析装置１００は、１つのプロセッサ９１０のみを備えていてもよいし、複数のプロセッサ９１０を備えていてもよい。複数のプロセッサ９１０が解析ツール１１０と、収集部１２０と、判定部１３１と、抽出部１３２と、決定部１３３との機能を実現するプログラムを連携して実行してもよい。
【００２２】
解析ツール１１０と、収集部１２０と、判定部１３１と、抽出部１３２と、決定部１３３との処理の結果を示す情報、データ、信号値、および変数値は、プログラム解析装置１００の補助記憶装置、メモリ、または、プロセッサ９１０内のレジスタまたはキャッシュメモリに記憶される。
【００２３】
解析ツール１１０と、収集部１２０と、判定部１３１と、抽出部１３２と、決定部１３３との機能を実現するプログラムは、可搬記録媒体に記憶されてもよい。可搬記録媒体とは、具体的には、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ブルーレイ（登録商標）ディスク、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）である。
なお、解析プログラムプロダクトとは、解析プログラム５２０が記録された記憶媒体および記憶装置である。解析プログラムプロダクトは、外観に関わらず、コンピュータ読み取り可能なプログラムをロードしているものを指す。
【００２４】
＊＊＊機能構成の説明＊＊＊
つぎに、図１のプログラム解析装置１００の各機能構成について説明する。
解析ツール１１０は、複数の実行装置で並行して実行されるプログラム２１のソースコード２１０を取得し、取得したソースコード２１０に対し解析を実行する。解析ツール１１０は、解析の実行結果を解析結果１４１として記憶部１４０に記憶する。解析ツール１１０は、具体的には、静的解析ツールである。また、解析結果１４１は、具体的には、静的解析結果である。
収集部１２０は、プログラム２１からプログラム間で通信される個別通信データ２２０を収集し、通信データ１４２として記憶部１４０に記憶する。具体的には、収集部１２０は、実行装置２０がプログラム２１に含まれる通信関数に従って行った通信を表す個別通信データ２２０を収集する。収集部１２０は、個別通信データ２２０として、第１の実行装置２０１が送信関数５１１に従って行った通信を表す送信情報２５１と、第２の実行装置２０２が受信関数５１２に従って行った通信を表す受信情報２５２とを収集する。
検査部１３０は、収集部１２０により収集された送信情報２５１と受信情報２５２とを用いて、第１のプログラム２１１と第２のプログラム２１２との各々のソースコード２１０を解析ツール１１０により解析して得られた解析結果１４１に含まれる警告に、誤検出された警告があるか否かを検査する。具体的には、検査部１３０は、記憶部１４０から解析結果１４１と通信データ１４２とを読み出す。通信データ１４２には、個別通信データ２２０として、送信情報２５１と受信情報２５２とが含まれる。検査部１３０は、解析結果１４１と通信データ１４２とを解析し、解析結果１４１に含まれる警告のうち、誤検出された警告４５１を除去する。検査部１３０は、誤検出された警告を除去した解析結果１４１を、抽出解析結果１４３として記憶部１４０に記憶する。
【００２５】
図２を用いて、本実施の形態に係るプログラム２１のソースコード２１０の例について説明する。図２は、第１のプログラム２１１と第２のプログラム２１２の各々のソースコード２１０の例である。
第１のプログラム２１１では、ｗｒｉｔｅ＿ｔｏ＿Ｂ（ｕｎｉｔ＿ｎｏ，ｉ）が第２のプログラム２１２に引数の値を送信する送信関数５１１の例である。また、第２のプログラム２１２では、ｉｄｘ＝ｒｅａｄ＿ｆｒｏｍ＿Ａ（ｕｎｉｔ＿ｎｏ）が第１のプログラム２１１から戻り値を受信する受信関数５１２の例である。受信関数５１２の例では戻り値を受信する例を示しているが、引数を受信する場合もあり得る。
【００２６】
図３は、本実施の形態に係る通信データ１４２の構成を示す図である。
また、図４は、図２に示した第１のプログラム２１１と第２のプログラム２１２との間の通信を表す通信データ１４２の例である。
図３に示すように、通信データ１４２は、通信時刻１０１、関数名１０２、ソースファイル名１０３、行番号１０４、および変数の名１０５と値１０６とのデータ対５６といった項目を有する。通信時刻１０１は、実行装置２０が通信を行った時刻である。関数名１０２は、通信を行った通信関数の名前である。ソースファイル名１０３は、その通信関数が呼び出されているソースコードのファイル名である。行番号１０４は、ファイル名１０３のソースファイル中における、その通信関数の行番号である。変数の名１０５と値１０６とはデータ対５６となっている。戻り値の名１０５は通信関数の戻り値の変数名である。戻り値の名１０５と戻り値の値１０６とがデータ対５６を形成する。また、引数１の名１０５と引数１の値１０６とはデータ対５６を形成する。また、引数２の名１０５と引数２の値１０６とはデータ対５６を形成する。引数のデータ対５６は、引数の個数分だけ連続して記録される。
【００２７】
図４の通信データ１４２の１行目は、図２の第１のプログラム２１１を実行する第１の実行装置２０１が、送信関数５１１に従って行った通信を表す送信情報２５１の例である。図４の通信データ１４２の２行目は、図２の第２のプログラム２１２を実行する第２の実行装置２０２が、受信関数５１２に従って行った通信を表す受信情報２５２の例である。
送信情報２５１は、第１の実行装置２０１が通信を行った通信時刻１０１と、送信関数５１１の関数名１０２とを含む。また、送信情報２５１は、第１のプログラム２１１のソースコード２１０における送信関数５１１の行番号１０４を含む。また、送信情報２５１は、送信関数５１１に用いられた引数の名１０５と引数に設定された値１０６とを含む。
受信情報２５２は、第２の実行装置２０２が通信を行った通信時刻１０１と、受信関数５１２の関数名１０２とを含む。また、受信情報２５２は、第２のプログラム２１２のソースコード２１０における受信関数５１２の行番号１０４を含む。また、受信情報２５２は、受信関数５１２に用いられた戻り値および引数の各々の名１０５と、戻り値および引数の各々に設定された値１０６とを含む。
【００２８】
＊＊＊動作の説明＊＊＊
図５は、本実施の形態に係るプログラム解析装置１００のプログラム解析方法５１０および解析プログラム５２０のプログラム解析処理Ｓ１００を示すフローチャートである。解析プログラム５２０は、以下に示す各処理をコンピュータであるプログラム解析装置１００に実行させる。
【００２９】
なお、前提として、解析結果１４１は生成済みとする。すなわち、解析ツール１１０は、プログラム２１のソースコード２１０を解析し、解析して得られた解析結果１４１を記憶部１４０に記憶している。
図６は、図２に示した第１のプログラム２１１と第２のプログラム２１２との各々のソースコード２１０の解析結果１４１の例を示す図である。図６に示すように、解析結果１４１には、解析の対象のソースコードのファイル名４１１と、解析の対象のソースコードにおいて警告が検出された行数４１２とが含まれる。また、解析結果１４１には、警告が発生する発生条件４１３、および警告の内容４１４といった情報が含まれる。
【００３０】
さらに、前提として、実行装置２０から収集部１２０に個別通信データ２２０を送る機構は、プログラム２１のソースコード２１０に挿入済みとする。この機構が組み込まれたプログラム２１は、実行可能なロードモジュールとして生成されている。
【００３１】
＜収集処理Ｓ１０＞
ステップＳ１０１において、収集部１２０が起動される。具体的には、ユーザが入力インタフェース９３０を介して収集部１２０の起動要求をプログラム解析装置１００に入力する。プログラム解析装置１００にこの起動要求が入力されることにより、収集部１２０が起動される。
【００３２】
ステップＳ１０２において、複数のプログラム２１が起動される。具体的には、ユーザが入力インタフェース９３０を介してプログラム実行要求をプログラム解析装置１００に入力する。プログラム解析装置１００にこのプログラム実行要求が入力されると、プログラム解析装置１００は、プログラム２１の実行を指示するプログラム実行指示を、通信装置９５０を介して、複数の実行装置２０のそれぞれに送信する。実行装置２０は、プログラム実行指示を受信するとプログラム２１を実行する。
【００３３】
ステップＳ１０３において、収集部１２０は、第１の実行装置２０１が送信関数５１１に従って行った通信を表す送信情報２５１と、第２の実行装置２０２が受信関数５１２に従って行った通信を表す受信情報２５２とを収集する。具体的には、収集部１２０は、各実行装置２０から送られてくる個別通信データ２２０を収集し、通信データ１４２として記憶部１４０に記憶する。個別通信データ２２０には、送信情報２５１と受信情報２５２とが含まれる。
【００３４】
ステップＳ１０４において、プログラム解析装置１００は、各プログラム２１の実行の終了を確認する。具体的には、プログラム解析装置１００は、各実行装置２０から、通信装置９５０を介して、プログラム２１の終了確認を受信する。あるいは、プログラム解析装置１００は、ユーザから、入力インタフェース９３０を介して、プログラム２１の強制終了の指示を入力し、プログラム２１を強制終了させる。
【００３５】
＜検査処理Ｓ２０＞
次に、プログラム解析装置１００は、検査部１３０による検査処理Ｓ２０を実行する。
検査処理Ｓ２０において、検査部１３０は、収集部１２０により収集された送信情報２５１と受信情報２５２とを用いて、第１のプログラム２１１と第２のプログラム２１２とを対象とした解析の結果である解析結果１４１に含まれる警告に、誤検出された警告があるか否かを検査する。解析結果１４１は、第１のプログラム２１１と第２のプログラム２１２との各々のソースコード２１０を解析ツール１１０により解析して得られる。なお、収集処理Ｓ２０では受信関数５１２で戻り値を受信する例を示しているが、引数を受信する場合もあり得る。この場合、戻り値を引数に置き換えて処理を実行することとなる。
【００３６】
図７は、本実施の形態に係る検査処理Ｓ２０を示すフローチャートである。
ステップＳ１０５において、検査部１３０は、記憶部１４０から解析結果１４１を取得する。検査部１３０は、入力インタフェース９３０を介してユーザが解析結果１４１の取得指示を入力することにより、解析結果１４１を取得してもよい。
ステップＳ１０６において、検査部１３０は、記憶部１４０から通信データ１４２を取得する。検査部１３０は、入力インタフェース９３０を介してユーザが通信データ１４２の取得指示を入力することにより、通信データ１４２を取得してもよい。
【００３７】
ステップＳ１０７において、検査部１３０の判定部１３１は、送信情報２５１に含まれる通信時刻１０１と受信情報２５２に含まれる通信時刻１０１とを比較する。また、判定部１３１は、送信情報２５１に含まれる送信関数５１１の関数名１０２と受信情報２５２に含まれる受信関数５１２の関数名１０２とを比較する。また、判定部１３１は、送信情報２５１に含まれる送信関数５１１に用いられた引数の名１０５および値１０６と、受信情報２５２に含まれる受信関数５１２に用いられた戻り値の名１０５および値１０６とを比較する。判定部１３１は、比較した結果に基づいて、送信関数５１１と受信関数５１２とが対応する関数であるか否かを判定する。送信関数５１１と受信関数５１２とが対応する関数であるとは、具体的には、送信関数５１１が書込み関数であり、受信関数５１２が読込み関数である場合である。
判定部１３１は、通信データ１４２に記録された個別通信データ２２０から、通信の書込みおよび読込みを実行した個別通信データ２２０の対を抽出する。判定部１３１は、通信時刻１０１と、関数名１０２と、引数あるいは戻り値の名１０５および値１０６とに基づいて、通信データ１４２に記録された個別通信データ２２０から、通信の書込みおよび読込みを実行した個別通信データ２２０の対を抽出する。
【００３８】
ステップＳ１０８において、判定部１３１は、抽出された個別通信データ２２０の対に対応する引数あるいは戻り値の名１０５および値１０６のデータ対を解析し、値が通信により設定された引数あるいは戻り値を検出する。
【００３９】
具体的に図４の通信データ１４２において、判定部１３１は、１行目の個別通信データ２２０と２行目の個別通信データ２２０とを、通信の書込みおよび読込みを実行した個別通信データ２２０の対として抽出する。そして、判定部１３１は、１行目の個別通信データ２２０と２行目の個別通信データ２２０との各々のデータ対を解析し、以下の（Ａ），（Ｂ）を検出する。
（Ａ）ｗｒｉｔｅ＿ｔｏ＿Ｂ（ｕｎｉｔ＿ｎｏ，ｉ）の引数２のｉ＝＝７が、ｉｄｘ＝ｒｅａｄ＿ｆｒｏｍ＿Ａ（ｕｎｉｔ＿ｎｏ）の戻り値ｉｄｘに設定されている。
（Ｂ）ｗｒｉｔｅ＿ｔｏ＿Ｂ（ｕｎｉｔ＿ｎｏ，ｉ）の引数１のｕｎｉｔ＿ｎｏ＝＝２は、ｉｄｘ＝ｒｅａｄ＿ｆｒｏｍ＿Ａ（ｕｎｉｔ＿ｎｏ）の引数１のｕｎｉｔ＿ｎｏ＝＝２に設定されている。
【００４０】
ステップＳ１０９において、検査部１３０の抽出部１３２は、送信関数５１１と受信関数５１２とが対応する関数である場合に、解析結果１４１に含まれる警告から、送信情報２５１により表された通信と受信情報２５２により表された通信との影響ｉｍｐを受ける警告を抽出する。具体的には、抽出部１３２は、抽出された個別通信データ２２０の対に基づいて、解析結果１４１に示された警告のうち通信により影響ｉｍｐを受ける可能性のある警告を抽出する。抽出部１３２は、送信関数５１１の行番号１０４と受信関数５１２の行番号１０４とを用いて、解析結果１４１に含まれる警告から影響ｉｍｐを受ける警告を抽出する。具体的には、抽出部１３２は、個別通信データ２２０の対に含まれるファイル名１０３および行数１０４と、解析結果１４１に含まれるファイル名４１１および行数４１２とに基づいて、通信により影響ｉｍｐを受ける可能性のある警告を抽出する。
【００４１】
具体的には、図４に示す個別通信データ２２０の対では、図２に示すファイル名ＢＢＢ．ｃのソースコードにおいて、５行目のｉｄｘが通信による戻り値となっている。また、図６に示す解析結果１４１では、ファイル名ＢＢＢ．ｃのソースコードにおいて、６行目と７行目に、ｉｄｘを条件とする警告が示されている。よって、この６行目と７行目の警告が、通信により影響ｉｍｐを受ける可能性のある警告として抽出される。ここで、ファイル名ＢＢＢ．ｃのソースコードにおいて、６行目に示された警告を警告１とし、７行目に示された警告を警告２とする。
【００４２】
ステップＳ１１０において、決定部１３３は、第１のプログラム２１１と第２のプログラム２１２との各々のソースコード２１０と送信情報２５１と受信情報２５２とに基づいて、抽出部１３２により抽出された警告について、警告を出す条件が成立するか否かを判定する。決定部１３３は、条件が成立しない警告を誤検出された警告として決定する。決定部１３３は、第１のプログラム２１１と第２のプログラム２１２との各々のソースコード２１０と、送信関数２５１に用いられた引数の名１０５および値１０６と、受信関数２５２に用いられた戻り値の名１０５および値１０６とを用いて、抽出部１３２により抽出された警告について、警告を出す条件が成立するか否かを判定する。具体的には、決定部１３３は、通信により影響ｉｍｐを受ける可能性のある警告として抽出された警告のうち、ステップＳ１０８で検出された引数あるいは戻り値が警告を出す発生条件になっている警告を検出する。そして、決定部１３３は、引数あるいは戻り値に値が設定された場合に警告を出す発生条件が成立するかどうかを確認する。
【００４３】
図８を用いて、本実施の形態に係る検査処理Ｓ２０の具体例について説明する。
図８に示すように、検査部１３０は、通信データ１４２の個別通信データ２２０の対から、ｗｒｉｔｅ＿ｔｏ＿Ｂ（ｕｎｉｔ＿ｎｏ，ｉ）の引数２のｉ＝＝７が、ｉｄｘ＝ｒｅａｄ＿ｆｒｏｍ＿Ａ（ｕｎｉｔ＿ｎｏ）の戻り値ｉｄｘに設定されていることを検出する。また、検査部１３０は、ｗｒｉｔｅ＿ｔｏ＿Ｂ（ｕｎｉｔ＿ｎｏ，ｉ）の引数１のｕｎｉｔ＿ｎｏ＝＝２は、ｉｄｘ＝ｒｅａｄ＿ｆｒｏｍ＿Ａ（ｕｎｉｔ＿ｎｏ）の引数１のｕｎｉｔ＿ｎｏ＝＝２に設定されていることを検出する。
警告１は、「ｉｄｘ＞４となり、サイズ４のａ＿ａｂｃ配列のサイズ外領域を参照する可能性あり」である。警告１の発生条件は、ｉｄｘ＞４である。戻り値ｉｄｘの値は７であるため、ｉｄｘ＞４の可能性がある。よって、警告１について、発生条件が成立する。
一方、警告２は、「ｉｄｘ＞８となり、サイズ８のａ＿ｄｅｆ配列のサイズ外領域を参照する可能性あり」である。警告２の発生条件は、ｉｄｘ＞８である。戻り値ｉｄｘの値は７であるため、ｉｄｘ＞８の可能性はない。よって、警告２について、発生条件が成立しない。
よって、検査部１３０は、警告２を、誤検出された警告４５１として決定する。
【００４４】
ステップＳ１１１において、検査部１３０は、発生条件が成立する警告を抽出解析結果１４３に書き出す。検査部１３０は、発生条件が成立しない警告は抽出解析結果１４３に書き出さない。
ステップＳ１１２において、検査部１３０は、通信データ１４２から抽出した個別通信データ２２０の対に、処理されていない個別通信データ２２０の対があるか否かを判定する。処理されていない個別通信データ２２０の対がある場合、検査部１３０はステップＳ１０７に戻り、処理されていない個別通信データ２２０の対についてステップＳ１０７からステップＳ１１１までの処理を実行する。処理されていない個別通信データ２２０の対がない場合、検査部１３０はステップＳ１１３に進む。
ステップＳ１１３において、検査部１３０は、出力インタフェース９４０を介して、ディスプレイといった出力装置に抽出解析結果１４３を出力する。
【００４５】
以上で、本実施の形態に係るプログラム解析処理Ｓ１００の説明を終わる。
【００４６】
＊＊＊他の構成＊＊＊
本実施の形態において、図２、図４、図６および図８に示した構成または内容は一例であり、使用する解析ツールによって解析結果に含まれる情報は他の構成および内容でもよい。また、プログラム２１で呼び出される通信を行う通信関数の形態およびデータの収集方法についても、本実施の形態は一例である。通信関数およびデータの収集方法によって、個別通信データとして収集するデータの種類、数および形態は他の種類、数および形態でもよい。つまり、図２に基づいて図４、図６および図８に例として示した情報は適宜整理できれば、他の形式を利用するものであってもよい。
【００４７】
また、本実施の形態の図１では、ソースコード２１０は通信装置９５０を介して取得されているが、その他の方法で取得されてもよい。例えば、ソースコード２１０は入力インタフェース９３０を介して取得されてもよい。プログラム解析装置１００がソースコード２１０を取得することができれば、他のどのような方法でソースコード２１０を取得しても構わない。
【００４８】
本実施の形態では、解析ツール１１０と、収集部１２０と、判定部１３１と、抽出部１３２と、決定部１３３との機能がソフトウェアで実現される。しかし、変形例として、解析ツール１１０と、収集部１２０と、判定部１３１と、抽出部１３２と、決定部１３３との機能がハードウェアで実現されてもよい。
【００４９】
図９を用いて、本実施の形態の変形例に係るプログラム解析装置１００の構成について説明する。
図９に示すように、プログラム解析装置１００は、処理回路９０９、入力インタフェース９３０、出力インタフェース９４０、および通信装置９５０といったハードウェアを備える。
【００５０】
処理回路９０９は、上述した解析ツール１１０と、収集部１２０と、判定部１３１と、抽出部１３２と、決定部１３３との機能および記憶部１４０を実現する専用の電子回路である。処理回路９０９は、具体的には、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ロジックＩＣ、ＧＡ、ＡＳＩＣ、または、ＦＰＧＡである。ＧＡは、Ｇａｔｅ  Ａｒｒａｙの略語である。ＡＳＩＣは、Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔの略語である。ＦＰＧＡは、Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙの略語である。
【００５１】
解析ツール１１０と、収集部１２０と、判定部１３１と、抽出部１３２と、決定部１３３との機能は、１つの処理回路９０９で実現されてもよいし、複数の処理回路９０９に分散して実現されてもよい。
【００５２】
別の変形例として、プログラム解析装置１００の機能がソフトウェアとハードウェアとの組合せで実現されてもよい。すなわち、プログラム解析装置１００の一部の機能が専用のハードウェアで実現され、残りの機能がソフトウェアで実現されてもよい。
【００５３】
プログラム解析装置１００のプロセッサ９１０、記憶装置９２０、および、処理回路９０９を、総称して「プロセッシングサーキットリ」という。つまり、プログラム解析装置１００の構成が図１および図９のいずれに示した構成であっても、解析ツール１１０と、収集部１２０と、判定部１３１と、抽出部１３２と、決定部１３３との機能および記憶部１４０は、プロセッシングサーキットリにより実現される。
【００５４】
「部」を「工程」または「手順」または「処理」に読み替えてもよい。また、「部」の機能をファームウェアで実現してもよい。
【００５５】
＊＊＊本実施の形態の効果の説明＊＊＊
本実施の形態に係るプログラム解析システム５００によれば、解析ツールが実動作では起こり得ない条件を想定したために誤って検出した警告、すなわち、誤認識警告を排除することができる。よって、本実施の形態に係るプログラム解析システム５００によれば、確認すべき解析結果の警告数が減り、解析の不具合検出ヒット率が向上し、実装品質が効率的に確保される。
【００５６】
本実施の形態に係るプログラム解析システム５００では、プログラム間の通信により協調して処理を実行するプログラムを構成するソースコードに対して、一つのドメインにて実行されるプログラムのソースコードが解析対象である。本実施の形態に係るプログラム解析システム５００によれば、ドメイン間通信の情報が考慮されれば実動作では起こり得ないことが明確となる警告、すなわち、誤検出の警告を警告として出力させないことができる。
【００５７】
本実施の形態では、解析ツール１１０と、収集部１２０と、判定部１３１と、抽出部１３２と、決定部１３３との各々が独立した機能ブロックとしてプログラム解析装置１００を構成している。しかし、上述した実施の形態のような構成でなくてもよく、プログラム解析装置１００の構成は任意である。プログラム解析装置１００の機能ブロックの構成は、上述した実施の形態で説明した機能を実現することができれば、任意である。プログラム解析装置１００は、これらの機能ブロックの他のどのような組み合わせにより、あるいは任意のブロック構成により、プログラム解析装置１００を構成しても構わない。
また、プログラム解析装置１００は、１つの装置でもよいし、複数の装置から構成されてもよい。
【００５８】
実施の形態１について説明したが、この実施の形態のうち、複数の部分を組み合わせて実施しても構わない。あるいは、この実施の形態のうち、１つの部分を実施しても構わない。その他、この実施の形態の複数の部分を、全体として実施しても構わないし、あるいは部分的にどのように組み合わせて実施しても構わない。
なお、上述した実施の形態は、本質的に好ましい例示であって、本発明、その適用物および用途の範囲を制限することを意図するものではなく、必要に応じて種々の変更が可能である。
【符号の説明】
【００５９】
１００  プログラム解析装置、１１０  解析ツール、１２０  収集部、１３０  検査部、１３１  判定部、１３２  抽出部、１３３  決定部、１４０  記憶部、１４１  解析結果、１４２  通信データ、１４３  抽出解析結果、２０  実行装置、２０１  第１の実行装置、２０２  第２の実行装置、２０ｎ  第ｎの実行装置、２１  プログラム、２１１  第１のプログラム、２１２  第２のプログラム、２１ｎ  第ｎのプログラム、２１０  ソースコード、２２０  個別通信データ、２５１  送信情報、２５２  受信情報、５１１  送信関数、５１２  受信関数、５６  データ対、１０１  通信時刻、１０２  関数名、１０３  ファイル名、１０４  行番号、１０５  名、１０６  値、４１１  ファイル名、４１２  行数、４１３  発生条件、４１４  内容、４５１  誤検出された警告、５００  プログラム解析システム、５１０  プログラム解析方法、５２０  解析プログラム、Ｓ１００  プログラム解析処理、Ｓ１０  収集処理、Ｓ２０  検査処理、９０９  処理回路、９１０  プロセッサ、９２０  記憶装置、９３０  入力インタフェース、９４０  出力インタフェース、９５０  通信装置、ｉｄｘ  戻り値、ｉ  引数、ｉｍｐ  影響。
【図１】
0006611963.tif 000002
【図２】
0006611963.tif 000003
【図３】
0006611963.tif 000004
【図４】
0006611963.tif 000005
【図５】
0006611963.tif 000006
【図６】
0006611963.tif 000007
【図７】
0006611963.tif 000008
【図８】
0006611963.tif 000009
【図９】
0006611963.tif 000010