JP6611963B2 - プログラム解析装置、プログラム解析システム、プログラム解析方法および解析プログラム - Google Patents

プログラム解析装置、プログラム解析システム、プログラム解析方法および解析プログラム Download PDF

Info

Publication number
JP6611963B2
JP6611963B2 JP2018558641A JP2018558641A JP6611963B2 JP 6611963 B2 JP6611963 B2 JP 6611963B2 JP 2018558641 A JP2018558641 A JP 2018558641A JP 2018558641 A JP2018558641 A JP 2018558641A JP 6611963 B2 JP6611963 B2 JP 6611963B2
Authority
JP
Japan
Prior art keywords
program
analysis
function
reception
warning
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.)
Active
Application number
JP2018558641A
Other languages
English (en)
Other versions
JPWO2018123065A1 (ja
Inventor
卓也 藤本
忠隆 浅川
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
Publication of JPWO2018123065A1 publication Critical patent/JPWO2018123065A1/ja
Application granted granted Critical
Publication of JP6611963B2 publication Critical patent/JP6611963B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3664Environments for testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/32Monitoring with visual or acoustical indication of the functioning of the machine
    • G06F11/324Display of status information
    • G06F11/327Alarm or error message display
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Description

本発明は、プログラム解析システム、プログラム解析装置、プログラム解析方法および解析プログラムに関する。
特許文献1には、警告のグループ化により解析結果のレビュー時間を短縮する技術が開示されている。また、特許文献2には、複数のドメインで並行実行されるプログラム群の実行時間の正確な見積りを行う技術が開示されている。
特開2014−170530号公報 特開2015−169997号公報
しかしながら、特許文献1に開示された技術は、一つのドメインで実行されるプログラム群を静的解析の解析対象としている。このため、ドメイン間通信によりプログラムが並行して実行されるシステムに対して静的解析が実行された場合、ドメイン間通信の情報が考慮されず、実動作では起こり得ない警告、すなわち、誤検出された警告が発生することがあった。
また、特許文献2に開示された技術によれば、並行実行されるプログラムの振る舞いに関する情報を得ることができる。しかし、並行実行されるプログラム間で通信される情報は何も考慮されていない。このため、並行実行されるプログラムのソースコードに共通して内在する問題を明確にするための静的解析に関する情報は得ることができない。
本発明は、互いに異なるドメインで実行されるプログラム群がドメイン間通信をしながら並行して実行される場合に、通信による影響を考慮した的確な解析結果を得ることを目的とする。
本発明に係るプログラム解析システムは、第1のプログラムを実行する第1の実行装置と、第2のプログラムを実行する第2の実行装置と、前記第1のプログラムと前記第2のプログラムとを解析するプログラム解析装置とを備えたプログラム解析システムであって、前記第1のプログラムは第2のプログラムに値を送信する送信関数を含むと共に、前記第2のプログラムは第1のプログラムから値を受信する受信関数を含み、第1の実行装置と第2の実行装置とが通信しながら前記第1のプログラムと前記第2のプログラムとを並行して実行するプログラム解析システムにおいて、
前記プログラム解析装置は、
前記第1の実行装置が前記送信関数に従って行った通信を表す送信情報と、前記第2の実行装置が前記受信関数に従って行った通信を表す受信情報とを収集する収集部と、
前記収集部により収集された前記送信情報と前記受信情報とを用いて、前記第1のプログラムと前記第2のプログラムとの各々のソースコードを解析ツールにより解析して得られた解析結果に含まれる警告に、誤検出された警告があるか否かを検査する検査部とを備えた。
本発明に係るプログラム解析システムでは、第1の実行装置と第2の実行装置とが通信しながら第1のプログラムと第2のプログラムとを並行して実行する。また、プログラム解析装置は、第1の実行装置が送信関数に従って行った通信を表す送信情報と、第2の実行装置が受信関数に従って行った通信を表す受信情報とを収集する収集部を備える。また、プログラム解析装置は、送信情報と受信情報とを用いて、第1のプログラムと第2のプログラムとの各々のソースコードを解析ツールにより解析して得られた解析結果に含まれる警告に、誤検出された警告があるか否かを検査する検査部を備える。したがって、本発明に係るプログラム解析システムによれば、解析結果に含まれる警告に、通信による影響で誤って検出された警告があるか否かを検査できるので、通信による影響を考慮した的確な解析結果を得ることができる。
実施の形態1に係るプログラム解析システム500およびプログラム解析装置100の構成図。 実施の形態1に係るプログラム21のソースコード210の例を示す図。 実施の形態1に係る通信データ142の構成図。 図2に示した第1のプログラム211と第2のプログラム212との間の通信を表す通信データ142の例を示す図。 実施の形態1に係るプログラム解析装置100のプログラム解析方法510および解析プログラム520のプログラム解析処理S100を示すフローチャート。 図2に示した第1のプログラム211と第2のプログラム212との各々のソースコード210の解析結果141の例を示す図。 実施の形態1に係る検査処理S20を示すフローチャート。 実施の形態1に係る検査処理S20の具体例を示す図。 実施の形態1の変形例に係るプログラム解析装置100の構成図。
以下、本発明の実施の形態について、図を用いて説明する。なお、各図中、同一または相当する部分には、同一符号を付している。実施の形態の説明において、同一または相当する部分については、説明を適宜省略または簡略化する。
実施の形態1.
***構成の説明***
図1を用いて、本実施の形態に係るプログラム解析システム500およびプログラム解析装置100の構成について説明する。
プログラム解析システム500は、各々がプログラムを実行する複数の実行装置と、複数の実行装置の各々が実行するプログラムを解析するプログラム解析装置100とを有する。複数の実行装置には、第1のプログラム211を実行する第1の実行装置201と、第2のプログラム212を実行する第2の実行装置202と、第nのプログラム21nを実行する第nの実行装置20nが含まれる。ここで、nは自然数である。プログラム解析システム500は、第1のプログラム211と第2のプログラム212とを含むプログラム21を解析する。
なお、第1のプログラム211、第2のプログラム212、および第nのプログラム21nの全てあるいは少なくとも1部を、単に、プログラム21と呼ぶ場合がある。また、第1の実行装置201、第2の実行装置202、および第nの実行装置20nの全てあるいは少なくとも1部を、単に、実行装置20と呼ぶ場合がある。
複数の実行装置の各々は互いに独立したドメインに属する。プログラム解析システム500では、複数の実行装置の各々がドメイン間通信を行いながらプログラムを並行して実行する。すなわち、プログラム解析システム500では、第1の実行装置201と第2の実行装置202とが通信しながら第1のプログラム211と第2のプログラム212とを並行して実行する。
本実施の形態では、第1のプログラム211は第2のプログラム212に値を送信する送信関数を含む。また、第2のプログラム212は第1のプログラム211から値を受信する受信関数を含む。第1のプログラム211は第2のプログラム212に引数の値を送信する。また、第2のプログラム212は第1のプログラム211から戻り値または引数を受信する。送信関数および受信関数を通信関数ともいう。
図1に示すように、プログラム解析装置100は、コンピュータである。
プログラム解析装置100は、プロセッサ910、記憶装置920、入力インタフェース930、出力インタフェース940、および通信装置950といったハードウェアを備える。記憶装置920は、メモリと補助記憶装置とを含む。
プログラム解析装置100は、機能構成として、解析ツール110と、収集部120と、検査部130と、記憶部140とを備える。検査部130は、判定部131と、抽出部132と、決定部133とを備える。記憶部140には、解析結果141と、通信データ142と、抽出解析結果143とが記憶される。
解析ツール110と、収集部120と、判定部131と、抽出部132と、決定部133との機能は、ソフトウェアで実現される。
記憶部140は、メモリおよび補助記憶装置により実現される。また、記憶部140は、メモリのみ、あるいは、補助記憶装置のみで実現されてもよい。記憶部140の実現方法は任意である。本実施の形態では、解析結果141と、通信データ142と、抽出解析結果143とは、メモリに記憶される。
プロセッサ910は、信号線を介して他のハードウェアと接続され、これら他のハードウェアを制御する。プロセッサ910は、演算処理を行うIC(Integrated Circuit)である。プロセッサ910は、CPU(Central Processing Unit)あるいはMPU(Micro−Processing Unit)である。
補助記憶装置は、具体的には、ROM(Read Only Memory)、フラッシュメモリ、または、HDD(Hard Disk Drive)である。メモリは、具体的には、RAM(Random Access Memory)である。
入力インタフェース930は、マウス、キーボード、タッチパネルといった入力装置と接続されるポートである。入力インタフェース930は、具体的には、USB(Universal Serial Bus)端子である。なお、入力インタフェース930は、LAN(Local Area Network)と接続されるポートであってもよい。
出力インタフェース940は、ディスプレイといった表示機器のケーブルが接続されるポートである。出力インタフェース940は、具体的には、USB端子またはHDMI(登録商標)(High Definition Multimedia Interface)端子である。ディスプレイは、具体的には、LCD(Liquid Crystal Display)である。
通信装置950は、レシーバとトランスミッタとを備える。具体的には、通信装置は通信チップまたはNIC(Network Interface Card)である。通信装置はデータを通信する通信部である。レシーバはデータを受信する受信部である。トランスミッタはデータを送信する送信部である。
補助記憶装置には、解析ツール110と、収集部120と、判定部131と、抽出部132と、決定部133との機能を実現するプログラムが記憶されている。解析ツール110と、収集部120と、判定部131と、抽出部132と、決定部133との機能を実現するプログラムを解析プログラム520ともいう。このプログラムは、メモリにロードされ、プロセッサ910に読み込まれ、プロセッサ910によって実行される。また、補助記憶装置には、OSが記憶されている。OSの少なくとも一部がメモリにロードされる。プロセッサ910はOSを実行しながら、解析プログラム520を実行する。
プログラム解析装置100は、1つのプロセッサ910のみを備えていてもよいし、複数のプロセッサ910を備えていてもよい。複数のプロセッサ910が解析ツール110と、収集部120と、判定部131と、抽出部132と、決定部133との機能を実現するプログラムを連携して実行してもよい。
解析ツール110と、収集部120と、判定部131と、抽出部132と、決定部133との処理の結果を示す情報、データ、信号値、および変数値は、プログラム解析装置100の補助記憶装置、メモリ、または、プロセッサ910内のレジスタまたはキャッシュメモリに記憶される。
解析ツール110と、収集部120と、判定部131と、抽出部132と、決定部133との機能を実現するプログラムは、可搬記録媒体に記憶されてもよい。可搬記録媒体とは、具体的には、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ブルーレイ(登録商標)ディスク、DVD(Digital Versatile Disc)である。
なお、解析プログラムプロダクトとは、解析プログラム520が記録された記憶媒体および記憶装置である。解析プログラムプロダクトは、外観に関わらず、コンピュータ読み取り可能なプログラムをロードしているものを指す。
***機能構成の説明***
つぎに、図1のプログラム解析装置100の各機能構成について説明する。
解析ツール110は、複数の実行装置で並行して実行されるプログラム21のソースコード210を取得し、取得したソースコード210に対し解析を実行する。解析ツール110は、解析の実行結果を解析結果141として記憶部140に記憶する。解析ツール110は、具体的には、静的解析ツールである。また、解析結果141は、具体的には、静的解析結果である。
収集部120は、プログラム21からプログラム間で通信される個別通信データ220を収集し、通信データ142として記憶部140に記憶する。具体的には、収集部120は、実行装置20がプログラム21に含まれる通信関数に従って行った通信を表す個別通信データ220を収集する。収集部120は、個別通信データ220として、第1の実行装置201が送信関数511に従って行った通信を表す送信情報251と、第2の実行装置202が受信関数512に従って行った通信を表す受信情報252とを収集する。
検査部130は、収集部120により収集された送信情報251と受信情報252とを用いて、第1のプログラム211と第2のプログラム212との各々のソースコード210を解析ツール110により解析して得られた解析結果141に含まれる警告に、誤検出された警告があるか否かを検査する。具体的には、検査部130は、記憶部140から解析結果141と通信データ142とを読み出す。通信データ142には、個別通信データ220として、送信情報251と受信情報252とが含まれる。検査部130は、解析結果141と通信データ142とを解析し、解析結果141に含まれる警告のうち、誤検出された警告451を除去する。検査部130は、誤検出された警告を除去した解析結果141を、抽出解析結果143として記憶部140に記憶する。
図2を用いて、本実施の形態に係るプログラム21のソースコード210の例について説明する。図2は、第1のプログラム211と第2のプログラム212の各々のソースコード210の例である。
第1のプログラム211では、write_to_B(unit_no,i)が第2のプログラム212に引数の値を送信する送信関数511の例である。また、第2のプログラム212では、idx=read_from_A(unit_no)が第1のプログラム211から戻り値を受信する受信関数512の例である。受信関数512の例では戻り値を受信する例を示しているが、引数を受信する場合もあり得る。
図3は、本実施の形態に係る通信データ142の構成を示す図である。
また、図4は、図2に示した第1のプログラム211と第2のプログラム212との間の通信を表す通信データ142の例である。
図3に示すように、通信データ142は、通信時刻101、関数名102、ソースファイル名103、行番号104、および変数の名105と値106とのデータ対56といった項目を有する。通信時刻101は、実行装置20が通信を行った時刻である。関数名102は、通信を行った通信関数の名前である。ソースファイル名103は、その通信関数が呼び出されているソースコードのファイル名である。行番号104は、ファイル名103のソースファイル中における、その通信関数の行番号である。変数の名105と値106とはデータ対56となっている。戻り値の名105は通信関数の戻り値の変数名である。戻り値の名105と戻り値の値106とがデータ対56を形成する。また、引数1の名105と引数1の値106とはデータ対56を形成する。また、引数2の名105と引数2の値106とはデータ対56を形成する。引数のデータ対56は、引数の個数分だけ連続して記録される。
図4の通信データ142の1行目は、図2の第1のプログラム211を実行する第1の実行装置201が、送信関数511に従って行った通信を表す送信情報251の例である。図4の通信データ142の2行目は、図2の第2のプログラム212を実行する第2の実行装置202が、受信関数512に従って行った通信を表す受信情報252の例である。
送信情報251は、第1の実行装置201が通信を行った通信時刻101と、送信関数511の関数名102とを含む。また、送信情報251は、第1のプログラム211のソースコード210における送信関数511の行番号104を含む。また、送信情報251は、送信関数511に用いられた引数の名105と引数に設定された値106とを含む。
受信情報252は、第2の実行装置202が通信を行った通信時刻101と、受信関数512の関数名102とを含む。また、受信情報252は、第2のプログラム212のソースコード210における受信関数512の行番号104を含む。また、受信情報252は、受信関数512に用いられた戻り値および引数の各々の名105と、戻り値および引数の各々に設定された値106とを含む。
***動作の説明***
図5は、本実施の形態に係るプログラム解析装置100のプログラム解析方法510および解析プログラム520のプログラム解析処理S100を示すフローチャートである。解析プログラム520は、以下に示す各処理をコンピュータであるプログラム解析装置100に実行させる。
なお、前提として、解析結果141は生成済みとする。すなわち、解析ツール110は、プログラム21のソースコード210を解析し、解析して得られた解析結果141を記憶部140に記憶している。
図6は、図2に示した第1のプログラム211と第2のプログラム212との各々のソースコード210の解析結果141の例を示す図である。図6に示すように、解析結果141には、解析の対象のソースコードのファイル名411と、解析の対象のソースコードにおいて警告が検出された行数412とが含まれる。また、解析結果141には、警告が発生する発生条件413、および警告の内容414といった情報が含まれる。
さらに、前提として、実行装置20から収集部120に個別通信データ220を送る機構は、プログラム21のソースコード210に挿入済みとする。この機構が組み込まれたプログラム21は、実行可能なロードモジュールとして生成されている。
<収集処理S10>
ステップS101において、収集部120が起動される。具体的には、ユーザが入力インタフェース930を介して収集部120の起動要求をプログラム解析装置100に入力する。プログラム解析装置100にこの起動要求が入力されることにより、収集部120が起動される。
ステップS102において、複数のプログラム21が起動される。具体的には、ユーザが入力インタフェース930を介してプログラム実行要求をプログラム解析装置100に入力する。プログラム解析装置100にこのプログラム実行要求が入力されると、プログラム解析装置100は、プログラム21の実行を指示するプログラム実行指示を、通信装置950を介して、複数の実行装置20のそれぞれに送信する。実行装置20は、プログラム実行指示を受信するとプログラム21を実行する。
ステップS103において、収集部120は、第1の実行装置201が送信関数511に従って行った通信を表す送信情報251と、第2の実行装置202が受信関数512に従って行った通信を表す受信情報252とを収集する。具体的には、収集部120は、各実行装置20から送られてくる個別通信データ220を収集し、通信データ142として記憶部140に記憶する。個別通信データ220には、送信情報251と受信情報252とが含まれる。
ステップS104において、プログラム解析装置100は、各プログラム21の実行の終了を確認する。具体的には、プログラム解析装置100は、各実行装置20から、通信装置950を介して、プログラム21の終了確認を受信する。あるいは、プログラム解析装置100は、ユーザから、入力インタフェース930を介して、プログラム21の強制終了の指示を入力し、プログラム21を強制終了させる。
<検査処理S20>
次に、プログラム解析装置100は、検査部130による検査処理S20を実行する。
検査処理S20において、検査部130は、収集部120により収集された送信情報251と受信情報252とを用いて、第1のプログラム211と第2のプログラム212とを対象とした解析の結果である解析結果141に含まれる警告に、誤検出された警告があるか否かを検査する。解析結果141は、第1のプログラム211と第2のプログラム212との各々のソースコード210を解析ツール110により解析して得られる。なお、収集処理S20では受信関数512で戻り値を受信する例を示しているが、引数を受信する場合もあり得る。この場合、戻り値を引数に置き換えて処理を実行することとなる。
図7は、本実施の形態に係る検査処理S20を示すフローチャートである。
ステップS105において、検査部130は、記憶部140から解析結果141を取得する。検査部130は、入力インタフェース930を介してユーザが解析結果141の取得指示を入力することにより、解析結果141を取得してもよい。
ステップS106において、検査部130は、記憶部140から通信データ142を取得する。検査部130は、入力インタフェース930を介してユーザが通信データ142の取得指示を入力することにより、通信データ142を取得してもよい。
ステップS107において、検査部130の判定部131は、送信情報251に含まれる通信時刻101と受信情報252に含まれる通信時刻101とを比較する。また、判定部131は、送信情報251に含まれる送信関数511の関数名102と受信情報252に含まれる受信関数512の関数名102とを比較する。また、判定部131は、送信情報251に含まれる送信関数511に用いられた引数の名105および値106と、受信情報252に含まれる受信関数512に用いられた戻り値の名105および値106とを比較する。判定部131は、比較した結果に基づいて、送信関数511と受信関数512とが対応する関数であるか否かを判定する。送信関数511と受信関数512とが対応する関数であるとは、具体的には、送信関数511が書込み関数であり、受信関数512が読込み関数である場合である。
判定部131は、通信データ142に記録された個別通信データ220から、通信の書込みおよび読込みを実行した個別通信データ220の対を抽出する。判定部131は、通信時刻101と、関数名102と、引数あるいは戻り値の名105および値106とに基づいて、通信データ142に記録された個別通信データ220から、通信の書込みおよび読込みを実行した個別通信データ220の対を抽出する。
ステップS108において、判定部131は、抽出された個別通信データ220の対に対応する引数あるいは戻り値の名105および値106のデータ対を解析し、値が通信により設定された引数あるいは戻り値を検出する。
具体的に図4の通信データ142において、判定部131は、1行目の個別通信データ220と2行目の個別通信データ220とを、通信の書込みおよび読込みを実行した個別通信データ220の対として抽出する。そして、判定部131は、1行目の個別通信データ220と2行目の個別通信データ220との各々のデータ対を解析し、以下の(A),(B)を検出する。
(A)write_to_B(unit_no,i)の引数2のi==7が、idx=read_from_A(unit_no)の戻り値idxに設定されている。
(B)write_to_B(unit_no,i)の引数1のunit_no==2は、idx=read_from_A(unit_no)の引数1のunit_no==2に設定されている。
ステップS109において、検査部130の抽出部132は、送信関数511と受信関数512とが対応する関数である場合に、解析結果141に含まれる警告から、送信情報251により表された通信と受信情報252により表された通信との影響impを受ける警告を抽出する。具体的には、抽出部132は、抽出された個別通信データ220の対に基づいて、解析結果141に示された警告のうち通信により影響impを受ける可能性のある警告を抽出する。抽出部132は、送信関数511の行番号104と受信関数512の行番号104とを用いて、解析結果141に含まれる警告から影響impを受ける警告を抽出する。具体的には、抽出部132は、個別通信データ220の対に含まれるファイル名103および行数104と、解析結果141に含まれるファイル名411および行数412とに基づいて、通信により影響impを受ける可能性のある警告を抽出する。
具体的には、図4に示す個別通信データ220の対では、図2に示すファイル名BBB.cのソースコードにおいて、5行目のidxが通信による戻り値となっている。また、図6に示す解析結果141では、ファイル名BBB.cのソースコードにおいて、6行目と7行目に、idxを条件とする警告が示されている。よって、この6行目と7行目の警告が、通信により影響impを受ける可能性のある警告として抽出される。ここで、ファイル名BBB.cのソースコードにおいて、6行目に示された警告を警告1とし、7行目に示された警告を警告2とする。
ステップS110において、決定部133は、第1のプログラム211と第2のプログラム212との各々のソースコード210と送信情報251と受信情報252とに基づいて、抽出部132により抽出された警告について、警告を出す条件が成立するか否かを判定する。決定部133は、条件が成立しない警告を誤検出された警告として決定する。決定部133は、第1のプログラム211と第2のプログラム212との各々のソースコード210と、送信関数251に用いられた引数の名105および値106と、受信関数252に用いられた戻り値の名105および値106とを用いて、抽出部132により抽出された警告について、警告を出す条件が成立するか否かを判定する。具体的には、決定部133は、通信により影響impを受ける可能性のある警告として抽出された警告のうち、ステップS108で検出された引数あるいは戻り値が警告を出す発生条件になっている警告を検出する。そして、決定部133は、引数あるいは戻り値に値が設定された場合に警告を出す発生条件が成立するかどうかを確認する。
図8を用いて、本実施の形態に係る検査処理S20の具体例について説明する。
図8に示すように、検査部130は、通信データ142の個別通信データ220の対から、write_to_B(unit_no,i)の引数2のi==7が、idx=read_from_A(unit_no)の戻り値idxに設定されていることを検出する。また、検査部130は、write_to_B(unit_no,i)の引数1のunit_no==2は、idx=read_from_A(unit_no)の引数1のunit_no==2に設定されていることを検出する。
警告1は、「idx>4となり、サイズ4のa_abc配列のサイズ外領域を参照する可能性あり」である。警告1の発生条件は、idx>4である。戻り値idxの値は7であるため、idx>4の可能性がある。よって、警告1について、発生条件が成立する。
一方、警告2は、「idx>8となり、サイズ8のa_def配列のサイズ外領域を参照する可能性あり」である。警告2の発生条件は、idx>8である。戻り値idxの値は7であるため、idx>8の可能性はない。よって、警告2について、発生条件が成立しない。
よって、検査部130は、警告2を、誤検出された警告451として決定する。
ステップS111において、検査部130は、発生条件が成立する警告を抽出解析結果143に書き出す。検査部130は、発生条件が成立しない警告は抽出解析結果143に書き出さない。
ステップS112において、検査部130は、通信データ142から抽出した個別通信データ220の対に、処理されていない個別通信データ220の対があるか否かを判定する。処理されていない個別通信データ220の対がある場合、検査部130はステップS107に戻り、処理されていない個別通信データ220の対についてステップS107からステップS111までの処理を実行する。処理されていない個別通信データ220の対がない場合、検査部130はステップS113に進む。
ステップS113において、検査部130は、出力インタフェース940を介して、ディスプレイといった出力装置に抽出解析結果143を出力する。
以上で、本実施の形態に係るプログラム解析処理S100の説明を終わる。
***他の構成***
本実施の形態において、図2、図4、図6および図8に示した構成または内容は一例であり、使用する解析ツールによって解析結果に含まれる情報は他の構成および内容でもよい。また、プログラム21で呼び出される通信を行う通信関数の形態およびデータの収集方法についても、本実施の形態は一例である。通信関数およびデータの収集方法によって、個別通信データとして収集するデータの種類、数および形態は他の種類、数および形態でもよい。つまり、図2に基づいて図4、図6および図8に例として示した情報は適宜整理できれば、他の形式を利用するものであってもよい。
また、本実施の形態の図1では、ソースコード210は通信装置950を介して取得されているが、その他の方法で取得されてもよい。例えば、ソースコード210は入力インタフェース930を介して取得されてもよい。プログラム解析装置100がソースコード210を取得することができれば、他のどのような方法でソースコード210を取得しても構わない。
本実施の形態では、解析ツール110と、収集部120と、判定部131と、抽出部132と、決定部133との機能がソフトウェアで実現される。しかし、変形例として、解析ツール110と、収集部120と、判定部131と、抽出部132と、決定部133との機能がハードウェアで実現されてもよい。
図9を用いて、本実施の形態の変形例に係るプログラム解析装置100の構成について説明する。
図9に示すように、プログラム解析装置100は、処理回路909、入力インタフェース930、出力インタフェース940、および通信装置950といったハードウェアを備える。
処理回路909は、上述した解析ツール110と、収集部120と、判定部131と、抽出部132と、決定部133との機能および記憶部140を実現する専用の電子回路である。処理回路909は、具体的には、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ロジックIC、GA、ASIC、または、FPGAである。GAは、Gate Arrayの略語である。ASICは、Application Specific Integrated Circuitの略語である。FPGAは、Field−Programmable Gate Arrayの略語である。
解析ツール110と、収集部120と、判定部131と、抽出部132と、決定部133との機能は、1つの処理回路909で実現されてもよいし、複数の処理回路909に分散して実現されてもよい。
別の変形例として、プログラム解析装置100の機能がソフトウェアとハードウェアとの組合せで実現されてもよい。すなわち、プログラム解析装置100の一部の機能が専用のハードウェアで実現され、残りの機能がソフトウェアで実現されてもよい。
プログラム解析装置100のプロセッサ910、記憶装置920、および、処理回路909を、総称して「プロセッシングサーキットリ」という。つまり、プログラム解析装置100の構成が図1および図9のいずれに示した構成であっても、解析ツール110と、収集部120と、判定部131と、抽出部132と、決定部133との機能および記憶部140は、プロセッシングサーキットリにより実現される。
「部」を「工程」または「手順」または「処理」に読み替えてもよい。また、「部」の機能をファームウェアで実現してもよい。
***本実施の形態の効果の説明***
本実施の形態に係るプログラム解析システム500によれば、解析ツールが実動作では起こり得ない条件を想定したために誤って検出した警告、すなわち、誤認識警告を排除することができる。よって、本実施の形態に係るプログラム解析システム500によれば、確認すべき解析結果の警告数が減り、解析の不具合検出ヒット率が向上し、実装品質が効率的に確保される。
本実施の形態に係るプログラム解析システム500では、プログラム間の通信により協調して処理を実行するプログラムを構成するソースコードに対して、一つのドメインにて実行されるプログラムのソースコードが解析対象である。本実施の形態に係るプログラム解析システム500によれば、ドメイン間通信の情報が考慮されれば実動作では起こり得ないことが明確となる警告、すなわち、誤検出の警告を警告として出力させないことができる。
本実施の形態では、解析ツール110と、収集部120と、判定部131と、抽出部132と、決定部133との各々が独立した機能ブロックとしてプログラム解析装置100を構成している。しかし、上述した実施の形態のような構成でなくてもよく、プログラム解析装置100の構成は任意である。プログラム解析装置100の機能ブロックの構成は、上述した実施の形態で説明した機能を実現することができれば、任意である。プログラム解析装置100は、これらの機能ブロックの他のどのような組み合わせにより、あるいは任意のブロック構成により、プログラム解析装置100を構成しても構わない。
また、プログラム解析装置100は、1つの装置でもよいし、複数の装置から構成されてもよい。
実施の形態1について説明したが、この実施の形態のうち、複数の部分を組み合わせて実施しても構わない。あるいは、この実施の形態のうち、1つの部分を実施しても構わない。その他、この実施の形態の複数の部分を、全体として実施しても構わないし、あるいは部分的にどのように組み合わせて実施しても構わない。
なお、上述した実施の形態は、本質的に好ましい例示であって、本発明、その適用物および用途の範囲を制限することを意図するものではなく、必要に応じて種々の変更が可能である。
100 プログラム解析装置、110 解析ツール、120 収集部、130 検査部、131 判定部、132 抽出部、133 決定部、140 記憶部、141 解析結果、142 通信データ、143 抽出解析結果、20 実行装置、201 第1の実行装置、202 第2の実行装置、20n 第nの実行装置、21 プログラム、211 第1のプログラム、212 第2のプログラム、21n 第nのプログラム、210 ソースコード、220 個別通信データ、251 送信情報、252 受信情報、511 送信関数、512 受信関数、56 データ対、101 通信時刻、102 関数名、103 ファイル名、104 行番号、105 名、106 値、411 ファイル名、412 行数、413 発生条件、414 内容、451 誤検出された警告、500 プログラム解析システム、510 プログラム解析方法、520 解析プログラム、S100 プログラム解析処理、S10 収集処理、S20 検査処理、909 処理回路、910 プロセッサ、920 記憶装置、930 入力インタフェース、940 出力インタフェース、950 通信装置、idx 戻り値、i 引数、imp 影響。

Claims (8)

  1. 第1の実行装置で実行される第1のプログラムと、前記第1の実行装置と通信する第2の実行装置で前記第1のプログラムと並行して実行される第2のプログラムとを解析するプログラム解析装置であって、前記第1のプログラムは第2のプログラムに値を送信する送信関数を含み、前記第2のプログラムは第1のプログラムから値を受信する受信関数を含み
    前記第1の実行装置が前記送信関数に従って行った通信を表す送信情報と、前記第2の実行装置が前記受信関数に従って行った通信を表す受信情報とを収集する収集部と、
    前記収集部により収集された前記送信情報と前記受信情報とを用いて、前記第1のプログラムと前記第2のプログラムとの各々のソースコードを解析ツールにより解析して得られた解析結果に含まれる警告に、誤検出された警告があるか否かを検査する検査部と
    を備えたプログラム解析装置
  2. 前記収集部は、
    前記第1の実行装置が通信を行った通信時刻と前記送信関数の関数名とを含む前記送信情報と、前記第2の実行装置が通信を行った通信時刻と前記受信関数の関数名とを含む前記受信情報とを収集する請求項1に記載のプログラム解析装置
  3. 前記検査部は、
    前記送信情報に含まれる通信時刻と前記受信情報に含まれる通信時刻とを比較すると共に、前記送信情報に含まれる前記送信関数の関数名と前記受信情報に含まれる前記受信関数の関数名とを比較し、前記送信関数と前記受信関数とが対応する関数であるか否かを判定する判定部と、
    前記送信関数と前記受信関数とが対応する関数である場合に、前記解析結果に含まれる警告から、前記送信情報により表された通信と前記受信情報により表された通信との影響を受ける警告を抽出する抽出部と、
    前記第1のプログラムと第2のプログラムとの各々のソースコードと前記送信情報と前記受信情報とに基づいて、前記抽出部により抽出された警告について、警告を出す発生条件が成立するか否かを判定し、前記発生条件が成立しない警告を前記誤検出された警告として決定する決定部と
    を備えた請求項2に記載のプログラム解析装置
  4. 前記収集部は、
    前記第1のプログラムのソースコードにおける前記送信関数の行番号を含む前記送信情報と、前記第2のプログラムのソースコードにおける前記受信関数の行番号を含む前記受信情報とを収集し、
    前記抽出部は、
    前記送信関数の行番号と前記受信関数の行番号とを用いて、前記解析結果に含まれる警告から前記影響を受ける警告を抽出する請求項3に記載のプログラム解析装置
  5. 前記送信関数は、前記第2のプログラムに引数の値を送信し、前記受信関数は、前記第1のプログラムから戻り値または引数の値を受信し、
    前記収集部は、
    前記送信関数に用いられた引数の名と前記引数に設定された値とを含む前記送信情報と、前記受信関数に用いられた戻り値または引数の名と前記戻り値または引数に設定された値とを含む前記受信情報とを収集し、
    前記決定部は、
    前記第1のプログラムと第2のプログラムとの各々のソースコードと、前記送信関数に用いられた引数の名と前記引数に設定された値と、前記受信関数に用いられた戻り値または引数の名と前記戻り値または引数に設定された値とを用いて、前記抽出部により抽出された警告について、前記発生条件が成立するか否かを判定する請求項3または4に記載のプログラム解析装置
  6. 第1のプログラムを実行する第1の実行装置と、第2のプログラムを実行する第2の実行装置と、前記第1のプログラムと前記第2のプログラムとを解析するプログラム解析装置とを備えたプログラム解析システムであって、前記第1のプログラムは第2のプログラムに値を送信する送信関数を含むと共に、前記第2のプログラムは第1のプログラムから値を受信する受信関数を含み、第1の実行装置と第2の実行装置とが通信しながら前記第1のプログラムと前記第2のプログラムとを並行して実行するプログラム解析システムにおいて、
    前記プログラム解析装置は、
    前記第1の実行装置が前記送信関数に従って行った通信を表す送信情報と、前記第2の実行装置が前記受信関数に従って行った通信を表す受信情報とを収集する収集部と、
    前記収集部により収集された前記送信情報と前記受信情報とを用いて、前記第1のプログラムと前記第2のプログラムとの各々のソースコードを解析ツールにより解析して得られた解析結果に含まれる警告に、誤検出された警告があるか否かを検査する検査部と
    を備えたプログラム解析システム
  7. 第1のプログラムを実行する第1の実行装置と、第2のプログラムを実行する第2の実行装置と、前記第1のプログラムと前記第2のプログラムとを解析するプログラム解析装置とを備えたプログラム解析システムであって、前記第1のプログラムは第2のプログラムに値を送信する送信関数を含むと共に、前記第2のプログラムは第1のプログラムから値を受信する受信関数を含み、第1の実行装置と第2の実行装置とが通信しながら前記第1のプログラムと前記第2のプログラムとを並行して実行するプログラム解析システムのプログラム解析方法において、
    前記プログラム解析装置の収集部が、前記第1の実行装置が前記送信関数に従って行った通信を表す送信情報と、前記第2の実行装置が前記受信関数に従って行った通信を表す受信情報とを収集し、
    前記プログラム解析装置の検査部が、前記収集部により収集された前記送信情報と前記受信情報とを用いて、前記第1のプログラムと前記第2のプログラムとの各々のソースコードを解析ツールにより解析して得られた解析結果に含まれる警告に、誤検出された警告があるか否かを検査するプログラム解析方法。
  8. 第1のプログラムを実行する第1の実行装置と、第2のプログラムを実行する第2の実行装置と、前記第1のプログラムと前記第2のプログラムとを解析するプログラム解析装置とを備えたプログラム解析システムであって、前記第1のプログラムは第2のプログラムに値を送信する送信関数を含むと共に、前記第2のプログラムは第1のプログラムから値を受信する受信関数を含み、第1の実行装置と第2の実行装置とが通信しながら前記第1のプログラムと前記第2のプログラムとを並行して実行するプログラム解析システムの解析プログラムにおいて、
    前記第1の実行装置が前記送信関数に従って行った通信を表す送信情報と、前記第2の実行装置が前記受信関数に従って行った通信を表す受信情報とを収集する収集処理と、
    前記収集処理により収集された前記送信情報と前記受信情報とを用いて、前記第1のプログラムと前記第2のプログラムとの各々のソースコードを解析ツールにより解析して得られた解析結果に含まれる警告に、誤検出された警告があるか否かを検査する検査処理とをコンピュータである前記プログラム解析装置に実行させる解析プログラム。
JP2018558641A 2016-12-29 2016-12-29 プログラム解析装置、プログラム解析システム、プログラム解析方法および解析プログラム Active JP6611963B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2016/089210 WO2018123065A1 (ja) 2016-12-29 2016-12-29 プログラム解析システム、プログラム解析装置、プログラム解析方法および解析プログラム

Publications (2)

Publication Number Publication Date
JPWO2018123065A1 JPWO2018123065A1 (ja) 2019-04-04
JP6611963B2 true JP6611963B2 (ja) 2019-11-27

Family

ID=62710464

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018558641A Active JP6611963B2 (ja) 2016-12-29 2016-12-29 プログラム解析装置、プログラム解析システム、プログラム解析方法および解析プログラム

Country Status (4)

Country Link
US (1) US11068381B2 (ja)
EP (1) EP3564819B1 (ja)
JP (1) JP6611963B2 (ja)
WO (1) WO2018123065A1 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20230325156A1 (en) * 2022-04-08 2023-10-12 Red Hat, Inc. Cross-validating files to facilitate code generation

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003157185A (ja) * 2001-11-19 2003-05-30 Nec Corp 計算機の動作の解析・表示装置とその解析・表示方法及びコンピュータプログラム
JP4208461B2 (ja) 2001-12-11 2009-01-14 キヤノン株式会社 ソフトウエアシステム動作確認装置
JP2004171318A (ja) 2002-11-21 2004-06-17 Fuji Xerox Co Ltd デバッグ方法、デバッグシステム、情報処理ユニット、デバッグ装置、プログラム
JP4787551B2 (ja) 2005-06-22 2011-10-05 日本電気株式会社 デバッグシステム、デバッグ方法およびプログラム
CN101208667B (zh) 2005-06-22 2012-01-11 日本电气株式会社 调试系统及方法
US8527976B2 (en) 2007-11-14 2013-09-03 Nec Laboratories America, Inc. System and method for generating error traces for concurrency bugs
JP2009211424A (ja) 2008-03-04 2009-09-17 Mitsubishi Electric Corp 最適化箇所判定装置及び最適化箇所判定システム及びコンピュータプログラム及び最適化箇所判定方法
JP5343840B2 (ja) 2009-12-22 2013-11-13 富士通株式会社 プログラムの解析装置及び解析方法
JP5564448B2 (ja) 2011-02-08 2014-07-30 株式会社日立製作所 ソフトウェアの類似性評価方法
US8793664B2 (en) * 2011-12-12 2014-07-29 Microsoft Corporation Reducing false alarms for static analysis of concurrent programs
JP5901668B2 (ja) 2013-02-28 2016-04-13 タタ コンサルタンシー サービシズ リミテッドTATA Consultancy Services Limited 静的解析中に発生した警告をグループ化するシステムおよび方法
JP2015043198A (ja) * 2013-07-22 2015-03-05 株式会社東芝 解析システム、解析方法および解析プログラム
US8997060B2 (en) 2013-07-31 2015-03-31 International Business Machines Corporation Parallel program analysis and branch prediction
US9256512B1 (en) * 2013-12-13 2016-02-09 Toyota Jidosha Kabushiki Kaisha Quality analysis for embedded software code
JP6218645B2 (ja) 2014-03-05 2017-10-25 三菱電機株式会社 プログラム解析装置及びプログラム解析方法及びプログラム
US10664601B2 (en) * 2016-10-25 2020-05-26 Nanjing University Method and system automatic buffer overflow warning inspection and bug repair
US9983976B1 (en) * 2016-11-29 2018-05-29 Toyota Jidosha Kabushiki Kaisha Falsification of software program with datastore(s)

Also Published As

Publication number Publication date
EP3564819A1 (en) 2019-11-06
JPWO2018123065A1 (ja) 2019-04-04
US20200081821A1 (en) 2020-03-12
US11068381B2 (en) 2021-07-20
EP3564819B1 (en) 2021-03-17
WO2018123065A1 (ja) 2018-07-05
EP3564819A4 (en) 2020-01-22

Similar Documents

Publication Publication Date Title
US9536200B2 (en) Sentiment analysis of data logs
US10616570B2 (en) Determination method and determination apparatus
WO2020029466A1 (zh) 图像处理方法和装置
US11797668B2 (en) Sample data generation apparatus, sample data generation method, and computer readable medium
US10586335B2 (en) Hand segmentation in a 3-dimensional image
US20200201309A1 (en) Information processing device, production facility monitoring method, and computer-readable recording medium recording production facility monitoring program
US20140310812A1 (en) Identifying security vulnerabilities related to inter-process communications
CN111310912A (zh) 机器学习系统、域变换装置、及机器学习方法
JP6611963B2 (ja) プログラム解析装置、プログラム解析システム、プログラム解析方法および解析プログラム
US9286036B2 (en) Computer-readable recording medium storing program for managing scripts, script management device, and script management method
CN111309606A (zh) 页面异常处理方法、装置、计算机设备及存储介质
US20100306745A1 (en) Efficient Code Instrumentation
US9373153B2 (en) Diagnosing graphics display problems
JP6873332B2 (ja) 点数化装置、点数化プログラム及び点数化方法
JP5755861B2 (ja) テストケース生成装置、テストケース生成方法およびテストケース生成プログラム
JP2022518659A (ja) エクスプロイト・キット検出
US10885462B2 (en) Determine an interval duration and a training period length for log anomaly detection
WO2018158893A1 (ja) ソースコード解析装置、ソースコード解析方法及びソースコード解析プログラム
WO2018142477A1 (ja) 要求分析装置、要求分析方法および要求分析プログラム
KR101367062B1 (ko) 컴퓨터 포렌식 과정에서 디스크 인터페이스를 사용한 저장매체 파일 직접 접근 시스템 및 방법
JP6407181B2 (ja) 設計支援装置、設計支援方法及び設計支援プログラム
US20230176958A1 (en) Monitoring code coverage
CN116166462A (zh) 程序异常的收集管理方法、装置、终端设备及介质
JP5496377B1 (ja) ログ出力装置及びログ出力プログラム
JP2023180960A (ja) 信号処理システムおよび信号処理方法

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20181204

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20181204

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20191001

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20191029

R150 Certificate of patent or registration of utility model

Ref document number: 6611963

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250