JP7046217B2 - ソフトウェア解析装置、ソフトウェア解析方法およびソフトウェア解析プログラム - Google Patents

ソフトウェア解析装置、ソフトウェア解析方法およびソフトウェア解析プログラム Download PDF

Info

Publication number
JP7046217B2
JP7046217B2 JP2020550997A JP2020550997A JP7046217B2 JP 7046217 B2 JP7046217 B2 JP 7046217B2 JP 2020550997 A JP2020550997 A JP 2020550997A JP 2020550997 A JP2020550997 A JP 2020550997A JP 7046217 B2 JP7046217 B2 JP 7046217B2
Authority
JP
Japan
Prior art keywords
analysis
dependency
software
analysis unit
function
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
JP2020550997A
Other languages
English (en)
Other versions
JPWO2020070817A1 (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 JPWO2020070817A1 publication Critical patent/JPWO2020070817A1/ja
Application granted granted Critical
Publication of JP7046217B2 publication Critical patent/JP7046217B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding
    • 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
    • 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
    • G06F11/3612Software analysis for verifying properties of programs by runtime analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/74Reverse engineering; Extracting design information from source code

Landscapes

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

Description

本発明は、ソフトウェア解析装置、ソフトウェア解析方法およびソフトウェア解析プログラムに関し、特に、ソフトウェアのオブジェクト間の依存関係を解析するためのソフトウェア解析装置、ソフトウェア解析方法およびソフトウェア解析プログラムに関する。
近年、製品の多機能化に伴い、ソフトウェア開発の規模および複雑度が増加している。また、多種多様な要望に迅速に対応するため、新規にソフトウェアを開発するより、既存のソフトウェアを流用して開発を行うことが主流となっている。ソフトウェア、特に既存のソフトウェアを変更した場合に影響が及ぶ範囲を把握するために、ソフトウェアのオブジェクト等の構成要素間の依存関係を解析する必要がある。
特許文献1は、コンピュータにソースコードの構文解析を実行させるための構文解析部と、コンピュータに構文解析部による構文解析結果から、ソースコード中の記述位置毎に区別された複数の変数について、変数間の依存関係を導出させるための変数依存関係解析部と、を備えるソフトウェアの構造可視化プログラムを開示する。これにより、設計者や検証者がソフトウェアの構造や処理概要を、変数依存関係の観点から理解することができる。
特許文献2は、ソースコードをログ取得可能なプログラムに加工するソースコード加工手段と、ソースコード加工手段により加工されたプログラムについてユーザが着目する機能に関するテストケースで実行し、ログを取得するテスト実行手段と、テスト実行手段により取得されたログを解析し、オブジェクトの一覧と該オブジェクト間の関係を収集するログ解析手段と、ログ解析手段により収集されたオブジェクト間の関係をもとに、重要度の高いオブジェクトの組み合わせをつなぎあわせてオブジェクト構造を抽出するオブジェクト構造抽出手段と、を備えるオブジェクト図表示装置を開示する。これにより、オブジェクト指向言語で記述されたソースコードの視覚化に際して、包含関係や関連を含むクラス間の関係情報でユーザに必要な情報を表示するとともに、実際にプログラムを実行した場合のクラス間関係を明確化することで、ユーザのソフトウェア開発を効果的に支援することができる。
特開2013-156786号公報 国際公開第2018/96632号
しかしながら、特許文献1に開示された発明は、ソースコードの静的な構文解析結果を用いているため、アドレスを介するポインタ変数等によって依存関係を有することになるソフトウェア構成要素間の依存関係を解析することができない。
特許文献2に開示された発明は、ソースコードの静的解析のみならず、プログラムをテストケースで実行し、ログを取得する動的解析を用いるものであるが、ソフトウェア構成要素間の依存関係は静的解析で全て解析されており、動的解析の結果は、依存関係の重要度を示すことに使用されているに過ぎない。したがって、アドレスを介するポインタ変数等によって依存関係を有することになるソフトウェア構成要素間の依存関係を解析することができない。
本発明は、上記のような課題を解決するためになされたものであり、静的解析によって得られたソフトウェアの構成要素間の依存関係と、動的解析によって得られたソフトウェアの構成要素間の依存関係と、に基づいて、従来技術より網羅的かつ高精度にソフトウェアの構成要素間の依存関係を解析することを目的する。
本発明の一態様は、ソフトウェアのソースコードの構造を静的に解析し、ソフトウェアのオブジェクト間の依存関係を解析する第1解析部と、ソースコードが示すプログラムを実行してオブジェクトの動作に関する第1情報を取得し、第1情報に基づいてオブジェクト間の依存関係を解析する第2解析部と、を備え、第1解析部の解析結果と、第2解析部の解析結果と、に基づいて、オブジェクト間の依存関係を解析するソフトウェア解析装置を提供する。
本発明の他の態様は、ソフトウェアのソースコードの構造を静的に解析し、ソフトウェアのオブジェクト間の依存関係を解析する第1解析ステップと、ソースコードが示すプログラムを実行してオブジェクトの動作に関する第1情報を取得し、第1情報に基づいてオブジェクト間の依存関係を解析する第2解析ステップと、第1解析ステップの解析結果と、第2解析ステップの解析結果と、に基づいて、オブジェクト間の依存関係を解析するステップと、を含むソフトウェア解析方法を提供する。
本発明の更に他の態様は、上記のソフトウェア解析方法をコンピュータに実行させるためのソフトウェア解析プログラムを提供する。
本発明により、従来技術より網羅的かつ高精度にソフトウェアの構成要素間の依存関係を解析することができるソフトウェア解析装置、ソフトウェア解析方法およびソフトウェア解析プログラムを得る。
本発明の実施の形態1に係る解析装置の構成を示すブロック図である。 本発明の実施の形態1に係る解析装置の動作の流れを示すフローチャートである。 図2に示した静的解析ステップの詳細な流れを示すフローチャートである。 ソースコードの一例を示す図である。 静的解析結果データベースの一例を示す図である。 静的依存関係データベースの一例を示す図である。 図2に示した動的解析ステップの詳細な流れを示すフローチャートである。 修正コードの一例を示す図である。 ログを生成するステップの詳細な流れを示すフローチャートである。 動作ログの一例を示す図である。 動的依存関係を解析するステップの詳細な流れを示すフローチャートである。 動的依存関係解析スタックの一例を示す図である。 動的依存関係データベースの一例を示す図である。 図2に示した総合的な依存関係を解析するステップの詳細な流れを示すフローチャートである。 解析結果の一例を示す図である。 本発明の実施の形態2に係る解析装置の構成を示すブロック図である。 実施の形態2における動的解析の流れを示すフローチャートである。 図15のログを生成するステップの詳細な流れを示すフローチャートである。 メッセージログの一例を示す図である。 動的依存関係を解析するステップの詳細な流れを示すフローチャートである。 動的依存関係データベースの一例を示す図である。 本発明の実施の形態3に係る解析装置の構成を示すブロック図である。 実施の形態3における動的解析の流れを示すフローチャートである。 ソースコードの一例を示す図である。 共有メモリのアドレス一覧を示す図である。 関数実行ログの一例を示す図である。 共有メモリアクセスログの一例を示す図である。 動的依存関係を解析するステップの詳細な流れを示すフローチャートである。 共有メモリアクセス記録の一例を示す図である。 動的依存関係データベースの一例を示す図である。 本発明の実施の形態4に係る解析装置の構成を示すブロック図である。 実施の形態4における動的解析の流れを示すフローチャートである。 プログラムの実行の途中から取得された動作ログの一例を示す図である。 動的依存関係を解析するステップの詳細な流れを示すフローチャートである。 動的依存関係解析スタックの一例を示す図である。 呼出し元不明関数スタックの一例を示す図である。 動的依存関係データベースの一例を示す図である。 本発明の実施の形態5に係る解析装置の構成を示すブロック図である。 動作ログの一例を示す図である。 実施の形態5における動的依存関係を解析するステップの詳細な流れを示すフローチャートである。 本発明の実施の形態6に係る解析装置の構成を示すブロック図である。 動作ログの一例を示す図である。 動的依存関係解析スタックの一例を示す図である。 実施の形態6における動的依存関係を解析するステップの詳細な流れを示すフローチャートである。 動的依存関係データベースの一例を示す図である。 ソースコードの一例を示す図である。 静的依存関係データベースの一例を示す図である。 総合的な依存関係を解析するステップの詳細な流れを示すフローチャートである。 総合的な依存関係を解析するステップを終えた後の解析結果の一例を示す図である。 本発明の実施の形態7に係る解析装置の構成を示すブロック図である。 動的依存関係データベースの一例を示す図である。 総合的な依存関係を解析するステップの詳細な流れを示すフローチャートである。 解析結果の一例を示す図である。 本発明の実施の形態8に係る解析装置の構成を示すブロック図である。 本発明の実施の形態8に係る解析装置の動作の流れを示すフローチャートである。 ソースコードの一例を示す図である。 静的解析結果データベースの一例を示す図である。 動的依存関係データベースの一例を示す図である。 図52に示した関数テーブル内の関数の依存関係を解析するステップの詳細な流れを示すフローチャートである。 関数テーブル依存関係データベースの一例を示す図である。 関数テーブル依存関係データベースの他の例を示す図である。 解析結果の一例を示す図である。 本発明の実施の形態9に係る解析装置の構成を示すブロック図である。 特定の環境で特定の入力データを与えて実行プログラムを実行して得られた動作ログの一例を示す図である。 他の環境でまたは他の入力データを与えて実行プログラムを実行することにより得られた動作ログの一例を示す図である。 図60aの動作ログに基づいて得られる動的依存関係を示す図である。 図60bの動作ログに基づいて得られる動的依存関係を示す図である。 図61aの動的依存関係と図61bの動的依存関係とを組み合わせることによって得られる動的依存関係を示す図である。
以下、本発明の実施の形態に係る解析装置について、図面を参照して説明する。各実施の形態において、同一の構成には同一の符号を付して、重複説明を省略する。
実施の形態1.
[1.構成]
図1は、本発明の実施の形態1に係る解析装置100の構成を示すブロック図である。解析装置100は、入力部1、静的解析部2、静的解析結果データベース(DB)3、静的依存関係解析部4および静的依存関係データベース(DB)5を備える。
入力部1は、プログラムとして実行可能なソースコード20を読み込み、解析装置100に入力する。入力されるソースコード20は、例えばユーザのファイル指定によって選択される。ソースコードは、例えばオブジェクト指向言語で記載される。
静的解析部2は、ソースコード20の静的構造解析を行い、解析結果を出力する。ここで、静的構造解析とは、プログラムを実行することなく、ソースコードの構文および構造等を解析する技術を指す。静的解析部2から出力された静的解析結果には、クラス参照、関数呼出し、オブジェクト呼出し、ヘッダーファイル参照等のソフトウェア構成要素(オブジェクト)間の依存関係(呼出し関係または被呼出し関係とも呼ばれる)に関する情報が含まれる。ここで、オブジェクトとは、関数およびデータ(例えば変数および定数)の集合である。
静的解析結果データベース3には、静的解析部2から出力された静的解析結果が格納される。
静的依存関係解析部4は、静的解析結果データベース3に格納された静的解析結果を解析して、ソフトウェア構成要素間の依存関係を整理して静的依存関係データベース5に格納する。
解析装置100は、コード加工部6、コンパイル部7、実行部8、動的解析部9および動的解析結果データベース(DB)10を更に備える。
入力部1に入力されたソースコード20は、静的解析部2にだけでなく、動的解析を行うために、コード加工部6にも送信される。コード加工部6は、ソースコード20を加工して、ログ取得可能な修正コードを作成する。
コンパイル部7は、修正コードをコンパイルする。すなわち、コンパイル部7は、修正コードを機械語等の実行可能な形式の実行プログラムに変換する。
実行部8は、実行プログラムを実行する。この際、動的解析部9は、実行プログラムの処理を監視して実行ログ、アクセスログ等のログを生成し、動的解析結果データベース10に格納する。
解析装置100は、動的依存関係解析部11および動的依存関係データベース(DB)12を更に備える。動的依存関係解析部11は、動的解析結果データベース10に格納された情報から、ソフトウェア構成要素間の依存関係を解析して動的依存関係データベース12に格納する。
解析装置100は、総合的依存関係解析部13および出力部15を更に備える。総合的依存関係解析部13は、静的依存関係データベース5に格納された静的依存関係と、動的依存関係データベース12に格納された動的依存関係を組み合わせて、ソフトウェア構成要素間の総合的な依存関係を示す解析結果14を出力する。出力部15は、解析結果14を解析装置100の外部へ出力する。
静的解析結果データベース3、静的依存関係データベース5、動的解析結果データベース10および動的依存関係データベース12は、種々の情報を記録する媒体である。これらのデータベースは、それぞれ、例えば、ROM、フラッシュメモリ、SSD等の半導体メモリ装置、ハードディスク等のディスク装置、その他の記憶デバイス単独でまたはそれらを適宜組み合わせて実現される。
解析装置100は、ソフトウェアによって実現される。例えば、解析装置100の静的解析部2、静的依存関係解析部4、コード加工部6、コンパイル部7、実行部8、動的解析部9、動的依存関係解析部11、総合的依存関係解析部13および出力部15は、プログラムによって実現される。このようなプログラムは、上記の記憶デバイス内に格納され、CPUまたはMPUのような汎用プロセッサによって呼び出されて実行される。
[2.動作]
図2は、解析装置100の動作の流れを示すフローチャートである。まず、解析装置100は、入力部1を介して、ソースコード20を読み込む(S101)。次に、解析装置100は、ソースコード20に静的解析を実行し、静的依存関係を解析する(S102)。次に、解析装置100は、ソースコード20に動的解析を実行し、動的依存関係を解析する(S103)。解析装置100は、ステップS102で得られた静的依存関係と、ステップS103で得られた動的依存関係を組み合わせて、総合的な依存関係を解析する(S104)。最後に、解析装置100は、ステップS104で得られた解析結果14を出力部15から出力する(S105)。なお、ステップS102とステップS103の実行順は逆であってもよく、ステップS102の前にステップS103が実行されてもよい。
[2-1.静的解析]
図3は、図2に示した静的解析ステップS102の詳細な流れを示すフローチャートである。まず、静的解析部2は、ソースコード20の静的構造解析を行う(S110)。次に、静的解析結果データベース3に、静的解析部2から出力された静的解析結果が格納される(S111)。
図4aは、ソースコード20の一例を示す図である。図4bは、静的解析結果データベース3の一例を示す図である。ステップS110の静的構造解析では、ソースコード20を実行せずに(静的に)、ソースコード20の構文、構造等が解析され、図4bのような静的解析結果を得る。図4bは、ソースコード20に記載された関数を列挙する関数一覧であり、列挙された関数が呼び出している呼出し先関数についての情報を含む。図4bの「関数」列には、ソースコード20に含まれる関数が列挙されている。図4bの「呼出し先関数」列には、「関数」列に示された関数が呼び出している関数が示されている。
例えば、図4bのNo.1の行は、ソースコード20において、main関数内でtest1関数、test2関数およびtest3関数が呼び出されることを示している。次にNo.5の行を見ると、test3関数からfunc関数が呼び出されていることがわかる。
しかしながら、静的解析によるソフトウェア構成要素間の依存関係解析には限界がある。例えば、図4aに示したソースコードでは、test1関数においてfunc関数のアドレスが関数ポインタpfに代入され、test2関数において関数ポインタpfが呼び出されている。しかし、図4bの静的解析結果データベース3に示されているように、静的解析ではtest2関数から関数ポインタpfのアドレス先であるfunc関数が呼び出されたことは解析できていない。関数ポインタpfのアドレス先であるfunc関数がtest2関数から呼び出されたことは、後述の動的解析によって解析される。
図3に戻り、ステップS111の後、静的依存関係解析部4は、静的解析結果データベース3に格納された静的解析結果を解析して(S112)、ソフトウェア構成要素間の依存関係を整理して静的依存関係データベース5に格納する(S113)。図4cは、静的依存関係データベース5の一例を示す図である。例えば図4cのNo.1の行は、main関数がtest1関数に依存していることを示している。したがって、図4cのNo.1の行を見ると、test1関数に変更が生じた場合、その変更の影響がmain関数にも及ぶことがわかる。
[2-2.動的解析]
図5は、図2に示した動的解析ステップS103の詳細な流れを示すフローチャートである。まず、コード加工部6は、ソースコード20をログ取得可能に加工して、図6に示すような修正コード21を作成する(S120)。修正コード21は、例えばソースコード20に記載されている関数の先頭に[関数名]_IN(例えば、func_IN)という関数を挿入し、関数の末尾に[関数名]_OUT(例えば、func_OUT)という関数を挿入したものである。
次に、コンパイル部7は、修正コード21をコンパイルし、実行可能な形式の実行プログラムに変換する(S121)。実行部8は、実行プログラムを実行する。実行の際、例えば、実行プログラムにテストケースが与えられる。ここで、テストケースとは、プログラムの特定の機能を実現するための入力データである。テストケースは、ユーザや開発者によって外部から入力されてもよい。あるいは、テストケースは、解析装置100に備えられたフラッシュメモリ、HDD、SSD等の記憶装置(図示せず)の中に予め格納されていてもよい。実行プログラムの実行の際、動的解析部9は、実行プログラムの処理を監視して実行ログ、アクセスログ等のログを生成する(S122)。
図7は、ログを生成するステップS122の詳細な流れを示すフローチャートである。ログを生成するステップS122では、まず、動的解析部9が、実行プログラムの実行が終了したか否かを判定する(S130)。実行プログラムの実行が終了していないと判定した場合、動的解析部9は、修正コード21(実際は、修正コード21をコンパイルした後の実行プログラム)の[関数名]_IN関数または[関数名]_OUT関数が実行されたか否かを監視する(S131)。いずれも実行されていない場合は、ステップS130に戻る。
ステップS131において[関数名]_IN関数が実行された場合は、図8に示すような動作ログ22の「関数名」欄に[関数名]を、「状態」欄にINを記録する(S132)。例えば、図8に示す例では、最初(実行順1)にmain_IN関数が実行されたため、動作ログ22の「関数名」欄にmainと記録され、「状態」欄にINと記録されている。記録した後、ステップS130に戻る。
ステップS131において[関数名]_OUT関数が実行された場合は、動作ログ22の「関数名」欄に[関数名]を、「状態」欄にOUTを記録する(S133)。記録した後、ステップS130に戻る。
以上のステップS130~S133を繰り返すことにより、図8に示すような動作ログ22が生成される。ステップS130において実行プログラムの終了を検知した場合は、ログを生成するステップS122を終え、図5に示したステップS123に進む。
図5に戻り、ステップS122で生成された動作ログ22は、動的解析結果データベース10に格納される(S123)。動的依存関係解析部11は、動的解析結果データベース10に格納された動作ログ22等の情報から、ソフトウェア構成要素間の動的依存関係を解析する(S124)。
図9は、動的依存関係を解析するステップS124の詳細な流れを示すフローチャートである。まず、動的依存関係解析部11は、動作ログ22(図8参照)の実行順1の「状態」欄の内容を確認する(S140、S141)。動作ログ22の「状態」欄にINが記録されていると判定した場合、動的依存関係解析部11は、動的依存関係解析スタック23(以下、「第1スタック」という。)に関数が格納されているか否かを判定する(S142)。図8に示した例では、実行順1の「状態」欄にはINが記録されているため、第1スタック23に関数が格納されているか否かを判定することになる。
第1スタック等のスタックは、例えば種々の情報を一時的に記憶するSRAM、DRAM等の揮発性メモリを用いて実現される。
図10は、第1スタック23の一例を示す図である。実行順1についてのステップS142の時点では、第1スタック23には関数が格納されていない(図10の実行順1の行の上の行を参照)。ステップS142において、第1スタック23に関数が格納されていない場合、動作ログ22の現在の実行順の関数を第1スタック23に登録(プッシュ、push)する(S144)。図示の例では、実行順1で実行される関数はmain関数である(図8参照)。したがって、図10に示す第1スタック23の実行順1に、main関数をプッシュする。このようにして、第1スタック23は、図10の実行順1の行に示した状態となる。
図9のフローチャートの説明に戻ると、ステップS142において、第1スタック23に関数が格納されている場合、動的依存関係解析部11は、第1スタック23に格納された関数を依存元とし、動作ログ22の現在の実行順の関数を依存先として、動的依存関係に登録する(S143)。図9に示すように、ステップS143の次にも、ステップS144が実行される。
ステップS144の次に、動的依存関係解析部11は、動作ログ22の実行順が最後であるか否かを判定する(S147)。最後である場合は、動的依存関係を解析するステップS124を終えて、図5に示すステップS125に進む。最後でない場合は、実行順をインクリメントし(S148)、ステップS141に戻る。
以上では、動作ログ22の「状態」欄にINが記録されている場合、すなわち、ステップS141の判定結果がYesである場合について説明した。次に、動作ログ22の「状態」欄にINが記録されていない場合、すなわち、ステップS141の判定結果がNoである場合について説明する。この場合、動作ログ22の「状態」欄にOUTが記録されていることになる。この場合、ステップS142と同様に、第1スタック23に関数が格納されているか否かを判定する(S145)。
ステップS145において、第1スタック23に関数が格納されている場合、動的依存関係解析部11は、第1スタック23から関数を除外(ポップ、pop)する(S146)。ステップS145において、第1スタック23に関数が格納されていない場合、ステップS147に進む。ステップS146が実行された後も、ステップS147に進む。
このようにして、最後の実行順まで実行順がインクリメントされ、ステップS147においてYesと判定された後は、第1スタック23からは全ての関数がポップされ(図10の実行順12の行を参照)、図11に示したような動的依存関係が得られている。そして図5に示すステップS125に進み、図11に示したような動的依存関係が、動的依存関係データベース12に格納される。
[2-3.総合的依存関係解析]
図12は、図2に示した総合的な依存関係を解析するステップS104の詳細な流れを示すフローチャートである。ステップS104では、静的依存関係データベース5に格納された情報と、動的依存関係データベース12に格納された情報と、を統合した依存関係が得られる。まず、総合的依存関係解析部13は、図4cに示すような静的依存関係データベース5に格納されている全ての依存関係を解析結果14に格納する(S150)。
次に、総合的依存関係解析部13は、図11に示すような動的依存関係データベース12のNo.1の行に格納された依存関係を取得する(S151)。図11に示す例では、動的依存関係データベース12のNo.1の行には、main関数を依存元とし、test1関数を依存先とする依存関係が格納されている。
次に、総合的依存関係解析部13は、取得した依存関係が解析結果14の中に存在するか否かを判定する(S152)。存在しないと判定した場合、総合的依存関係解析部13は、取得した依存関係を解析結果14に格納し(S153)、次のステップS154に進む。ステップS152において、取得した依存関係が解析結果14の中に存在すると判定した場合も、ステップS154に進む。
ステップS154では、総合的依存関係解析部13は、動的依存関係データベース12の全ての行の依存関係を確認したか否かを判定する。全ての行の依存関係を確認し終えていない場合、総合的依存関係解析部13は、動的依存関係データベース12の次の行に格納された依存関係を取得する(S155)。その後、ステップS152に戻る。
ステップS154において、動的依存関係データベース12の全ての行の依存関係を確認したと判定した場合には、総合的な依存関係を解析するステップS104を終え、図2に示したステップS105に進む。
図13は、総合的な依存関係を解析するステップS104を終えた後の解析結果14の一例を示す図である。図4cに示した静的依存関係データベース5と比較すると、図13の解析結果14には、No.4の行の依存関係が追加されている。静的解析ではtest2関数から関数ポインタpfのアドレス先であるfunc関数が呼び出されたことは解析できないが、動的解析によって解析できるため、解析結果14には静的依存関係データベース5にはない依存関係が追加されている。
[3.効果等]
以上のように、解析装置100は、ソフトウェアのソースコード20の構造を静的に解析する静的解析部2と、静的解析結果に基づいてソフトウェアのオブジェクト間の依存関係を解析する静的依存関係解析部4と、ソースコード20が示すプログラムを実行して動作ログ22を取得し、動作ログ22に基づいてオブジェクト間の依存関係を解析する動的依存関係解析部11と、を備える。解析装置100は、静的依存関係解析部4の解析結果と、動的依存関係解析部11の解析結果と、に基づいて、オブジェクト間の依存関係を解析する。
解析装置100は、動的依存関係解析部11による解析結果を用いることにより、静的解析では解析できなかったポインタ参照を介した関数間の依存関係を解析することができる。このように、解析装置100は、動的解析と静的解析とを組み合わせることにより、従来技術より網羅的にソフトウェアの構成要素間の依存関係を解析することができる。
実施の形態2.
図14は、本発明の実施の形態2に係る解析装置200の構成を示すブロック図である。実施の形態1の解析装置100と比較すると、解析装置200にはコード加工部6が備えられていない。また、解析装置200の動的解析部209、動的解析結果データベース210および動的依存関係解析部211のそれぞれの機能または動作が、実施の形態1の場合と異なる。
実施の形態2では、ソースコード20の動的解析は、タスク間で送受信されるメッセージパッシングを解析することによって行われる。メッセージパッシングは、オブジェクト間の通信方式の1つであり、複数のタスクが並列に実行されるソフトウェアプログラムにおいて、タスク間で情報を共有するための手段の1つである。
解析装置200の動作の流れは、実施の形態1の図2のフローチャートが示す流れと同様であるが、動的解析ステップ(図2のS103)の中身のみが異なる。図15は、実施の形態2における動的解析の流れを示すフローチャートである。実施の形態1の図5のフローチャートと比較すると、図15には、修正コードを作成するステップと、動的依存関係を動的依存関係データベースに格納するステップがない。動的依存関係を動的依存関係データベースに格納する動作は、実施の形態2では、後述のステップS224に含まれている。
図16は、図15のログを生成するステップS222の詳細な流れを示すフローチャートである。まず、動的解析部209が、実行プログラムの実行が終了したか否かを判定する(S230)。実行プログラムの実行が終了していないと判定した場合、動的解析部209は、タスクがメッセージを受信または送信したか否かを監視する(S231)。受信も送信もしていない場合は、ステップS230に戻る。
ステップS231においてタスクがメッセージを送信したことを認めた場合、動的解析部209は、図17に示すようなメッセージログ222に、送信されたメッセージのコンテキストIDと、メッセージ内容と、メッセージを送信したタスクと、を記録する(S232)。例えば、タスクAがコンテキストID=0x0001で識別されるメッセージを送信した場合、図17のメッセージログ222の最上行に示すように、「コンテキストID」欄と、「メッセージ内容」欄と、「送信タスク」欄に図示のような値が記録される。記録した後、ステップS230に戻る。
ステップS231においてタスクがメッセージを受信したと判定した場合、動的解析部209は、メッセージログ222に、メッセージを受信したタスクを記録する(S233)。例えば、タスクAがコンテキストID=0x0001で識別されるメッセージを送信した先の例において、タスクXがこのメッセージを受信した場合、動的解析部209は、図17のメッセージログ222の最上行に示すように、「受信タスク」欄にタスクXと記録する。記録した後、ステップS230に戻る。
以上のステップS230~S233を繰り返すことにより、図17に示すようなメッセージログ222が生成される。ステップS230において実行プログラムの終了を検知した場合は、ログを生成するステップS222を終え、図15に示したステップS223に進む。
ステップS222で生成されたメッセージログ222は、動的解析結果データベース210に格納される(S223)。動的依存関係解析部211は、動的解析結果データベース210に格納されたメッセージログ222等の情報から、ソフトウェア構成要素間の動的依存関係を解析する(S224)。
図18は、動的依存関係を解析するステップS224の詳細な流れを示すフローチャートである。まず、動的依存関係解析部211は、動的解析結果データベース210に格納されたメッセージログ222の全てのメッセージについて解析を終えたか否かを判定する(S240)。終えていない場合、動的依存関係解析部211は、未解析のメッセージを1つ選択し、そのコンテキストIDで識別される「受信タスク」欄の記録と「送信タスク」欄の記録を取得する(S241)。
次に、動的依存関係解析部211は、取得した受信タスクを依存元とし、かつ、送信タスクを依存先とする依存関係が動的依存関係データベース212に格納されているか否かを確認する(S242)。格納されている場合は、ステップS240に戻る。格納されていない場合は、取得した受信タスクを依存元とし、かつ、送信タスクを依存先とする依存関係を、動的依存関係データベース212に格納する(S243)。
S240において、全てのメッセージについて解析を終えたと判定した場合、動的依存関係を解析するステップS224を終える。このようにして、図19に示したような動的依存関係データベース212が得られる。
以上のように、解析装置200において、動的依存関係解析部211は、メッセージを送信したタスクと、前記メッセージを受信したタスクと、の間に依存関係があることを示す解析結果を生成する。動的依存関係解析部211は、この解析結果に基づいて動的解析を行い、解析装置200は、静的依存関係解析部4の解析結果と、動的依存関係解析部211の解析結果と、に基づいて、タスク間の依存関係を解析する。
あるタスクから発信されたメッセージパッシングが、どのタスクで受信されて処理されるかは、プログラムを実行して動作させなければ把握できず、ソースコードの構造を静的に解析しただけではわからない。解析装置200は、動的依存関係解析部211による解析結果を用いることにより、静的解析では解析できなかったメッセージパッシングを介した関数間の依存関係を解析することができる。このように、解析装置200は、動的解析と静的解析とを組み合わせることにより、従来技術より網羅的にソフトウェアの構成要素間の依存関係を解析することができる。
実施の形態3.
図20は、本発明の実施の形態3に係る解析装置300の構成を示すブロック図である。実施の形態1の解析装置100と比較すると、解析装置300の動的解析部309、動的解析結果データベース310および動的依存関係解析部311のそれぞれの機能または動作が、実施の形態1の動的解析部9、動的解析結果データベース10および動的依存関係解析部11と異なる。
実施の形態3では、解析装置300は、共有メモリを介してデータの受け渡しを行うオブジェクト間の動作を解析する。共有メモリは、例えば種々の情報を一時的に記憶するSRAM、DRAM等の揮発性メモリで構成される。
解析装置300の動作の流れは、実施の形態1の図2のフローチャートが示す流れと同様であるが、動的解析ステップ(図2のS103)の中身のみが異なる。図21は、実施の形態3における動的解析の流れを示すフローチャートである。図20および図21を参照して、動的解析の流れを説明する。
まず、コンパイル部7は、ソースコード320をコンパイルし、実行可能な形式の実行プログラムに変換する(S321)。図22は、ソースコード320の一例を示す図である。ソースコード320内では、共有メモリが利用されている。ソースコード320では、構造体Pointがグローバルに宣言され、main関数内で実体が宣言されている。main関数内からPrintPoint関数が実行される際に、PrintPoint関数の引数としてアドレスが渡されている。PrintPoint関数では、渡されたアドレス先の値を読み込む処理が行われている。図23は、ソースコード320内で利用されている共有メモリのアドレス一覧321を示す図である。
次に、実行部8は、実行プログラムを実行する。この際、動的解析部309は、実行プログラムの処理を監視して、図24に示すような関数実行ログ322と、図25に示すような共有メモリアクセスログ323と、を生成する(S322)。
関数実行ログ322には、関数処理の開始時刻と終了時刻が記録される。図24に示す例では、main関数が時刻00:00から時刻00:05まで実行され、PrintPoint関数が時刻00:05から時刻00:20まで実行されたことがわかる。
共有メモリアクセスログ323には、アクセス先アドレスとアクセス時刻が記録される。動的解析部309は、共有メモリが宣言された際に確保されるアドレスを解析してアクセス先アドレスとアクセス時刻とを取得する。動的解析部309は、共有メモリにアクセスがあった際のアクセス先アドレスおよびアクセス時刻を共有メモリアクセスログ323に記録する。図25に示す例では、アドレス0x0000にアクセスがあった時刻は、00:01および00:06であったことがわかる。
図21に戻り、生成された関数実行ログ322および共有メモリアクセスログ323は、動的解析結果データベース310に格納される(S323)。動的依存関係解析部311は、動的解析結果データベース310に格納された関数実行ログ322および共有メモリアクセスログ323から、ソフトウェア構成要素間の動的依存関係を解析する(S324)。
図26は、動的依存関係を解析するステップS324の詳細な流れを示すフローチャートである。まず、動的依存関係解析部311は、共有メモリアクセスログ323からアクセス時刻を取得する(S340)。例えば、図25に示した例において、アクセス時刻00:01を取得する。他のアクセス時刻は、後のループの後に取得されるが、その際、取得済みの時刻(例えば00:01)は取得しない。
図26に戻り、動的依存関係解析部311は、ステップS340で取得したアクセス時刻に実行されていた関数を、関数実行ログ322から取得する(S341)。先の例では、取得したアクセス時刻は00:01であった。図24を参照すると、アクセス時刻00:01において実行されていた関数は、main関数である。したがって、動的依存関係解析部311は、関数実行ログ322からmain関数を取得する。
次に、動的依存関係解析部311は、ステップS341で取得した関数を、アクセス時刻に共有メモリアドレスにアクセスしていた関数として、図27に示すような共有メモリアクセス記録324に記録する(S342)。
次に、動的依存関係解析部311は、共有メモリアクセスログ323の全てのアクセス時刻を取得したか否かを判定する(S343)。取得していないと判定した場合は、ステップS340に戻る。取得したと判定した場合は、ステップS344に進む。共有メモリアクセスログ323の全てのアクセス時刻を取得した場合、図27に示すような共有メモリアクセス記録324が完成したことになる。
次に、動的依存関係解析部311は、共有メモリアクセス記録324に記録された共有メモリアドレスのうち、未確認の1つを選択する(S344)。動的依存関係解析部311は、共有メモリアクセス記録324を確認し、選択された共有メモリアドレスに複数の関数からアクセスがあったか否かを判定する(S345)。
例えば、図27に示した例において、ステップS344で共有メモリアドレス0x0000を選択した場合、選択した共有メモリアドレス0x0000にはmain関数およびPrintPoint関数の複数の関数からアクセスがあったと判定できる。
ステップS345において複数の関数からアクセスがあったと判定した場合、アクセスした全ての関数を互いに依存元および依存先として組み合わせて、動的依存関係データベース312に格納する(S346)。先述の例では、共有メモリアドレス0x0000にアクセスした関数は、main関数およびPrintPoint関数であった。したがって、動的依存関係データベース312には、PrintPoint関数を依存元とし、main関数を依存先とする依存関係No.1と、main関数を依存元とし、PrintPoint関数を依存先とする依存関係No.2とが格納される。このようにして、図28に示したような動的依存関係データベース312が得られる。
以上のように、解析装置300は、共有メモリを利用する。動的依存関係解析部311は、ソースコード320が示すプログラムがアクセスした共有メモリのアドレスと、アクセスした時刻と、に基づいて、関数間の依存関係を解析する。
従来、関数呼出しによってアドレス渡しをした先の関数で共有メモリの値が書き換えられた場合、静的解析ではアドレスを介した依存関係を解析できなかった。解析装置300は、静的解析では解析できなかった共有メモリを介した関数間の依存関係を解析することができる。このように、解析装置300は、動的解析と静的解析とを組み合わせることにより、従来技術より網羅的にソフトウェアの構成要素間の依存関係を解析することができる。
実施の形態4.
図29は、本発明の実施の形態4に係る解析装置400の構成を示すブロック図である。解析装置400は、実施の形態1の解析装置100の構成に加えて、依存元補完部411を更に備える。依存元補完部411は、動作ログ(図8参照)がプログラム実行の途中から取得された場合であっても、呼出し先関数から呼出し元関数に遷移する際に依存関係を解析することができる。
解析装置400の動作の流れは、実施の形態1の図2のフローチャートが示す流れと同様であるが、動的解析ステップ(図2のS103)の中身のみが異なる。図30は、実施の形態4における動的解析の流れを示すフローチャートである。図30のフローチャートも、動的依存関係を解析するステップS424以外は実施の形態1の図5のフローチャートと同様である。
しかしながら、ログを生成するステップS122がプログラムの途中から実行されているため、動作ログがプログラム実行の途中から取得されている。図31は、プログラムの実行の途中から取得された動作ログ422の一例を示す図である。動作ログ422には、実行順4以降の関数名と状態が記録されている。実行順1~3の関数名と状態は記録されていない。
図32は、動的依存関係を解析するステップS424の詳細な流れを示すフローチャートである。依存元補完部411は、動作ログ422の実行順1の「状態」欄にINが記録されているか否かを判定する(S140、S141)。INが記録されていると判定した場合、ステップS142へ進むが、ステップS142以降の流れは図9に示した実施の形態1の流れと同様であるため、説明を省略する。
ステップS141においてINが記録されていないと判定した場合、依存元補完部411は、図33に示す動的依存関係解析スタック(第1スタック)423に関数が格納されているか否かを判定する(S145)。第1スタック423に関数が格納されている場合、第1スタック423から関数をポップする(S146)。
ポップした後、依存元補完部411は、第1スタック423が空になったか否かを判定する(S440)。空になったと判定した場合、依存元補完部411は、ステップS146でポップされた関数を、呼出し元不明関数スタック424(以下、「第2スタック」という。)にプッシュする(S441)。図34は、第2スタックの一例を示す図である。ステップS441の後、実施の形態1で述べたステップS147(図9参照)に進む。
ステップS145において第1スタック423に関数が格納されていないと判定した場合、依存元補完部411は、第2スタックに関数が格納されているか否かを判定する(S442)。第2スタックに関数が格納されていると判定した場合、依存元補完部411は、動作ログ422の現在の実行順の関数を依存元とし、第2スタックに登録されている関数を依存先として、動的依存関係に登録する(S443)。登録後、ステップS147に進む。
このような実施の形態4の特徴を図示の例を用いて説明する。図示の例では、プログラムの途中から動作ログ422(図31参照)を取得したため、test2関数の開始処理より前のプログラム動作が不明となっている。そのため、実行順7でtest2関数の状態がOUTとなった際に(図31参照)、第1スタック423(図33)からtest2関数がポップされ、第1スタック423内の関数がなくなってしまう。すなわち、test2関数の呼出し元が不明である。そこで、test2関数を呼出し元不明関数スタック(第2スタック)424に登録する(S441)。test2関数の呼出し関数がmain関数であったことがわかるのは、実行順12でmain関数の状態がOUTとなった(図31参照)時である。そこで、依存元関数をmain関数、依存先関数をtest2関数として動的依存関係に登録する(S443)。test3関数についても同様である。
以上のようにして、図35に示すような動的依存関係データベース412が得られる。
上記のように、解析装置400において、依存元補完部411は、関数の実行順を示す動作ログ422をプログラムの実行途中から取得した場合、呼出し先の関数から呼出し元の関数への遷移を示す動作ログ422の情報に基づいて、関数間の依存関係を補完する。
これにより、解析装置400は、動的解析においてプログラムが途中から実行された場合においても、呼出し元の関数を解析することができ、従来技術より網羅的にソフトウェアの構成要素間の依存関係を解析することができる。
実施の形態5.
図36は、本発明の実施の形態5に係る解析装置500の構成を示すブロック図である。解析装置500は、実施の形態1の解析装置100の構成に加えて、タスク指定部511を更に備える。
解析装置500の動作の流れは、実施の形態1の図2のフローチャートが示す流れと同様であるが、動的解析ステップ(図2のS103)の中の動的依存関係を解析するステップ(図5のS124)のみが異なる。
図37は、動作ログ522を示す図である。動作ログ522は、動的解析部509によって作成され、動的解析結果データベース510に格納される。図8に示した実施の形態1の動作ログ22と比較すると、動作ログ522には、「タスク」欄が更に設けられている。「タスク」欄には、「関数名」欄に記載された関数を実行するタスクが記録される。動作ログ522の実行順5および6に記載されたinterrupt関数は、割り込みタスクInterruptによって実行された割り込み処理の一例である。
図38は、実施の形態5における動的依存関係を解析するステップの詳細な流れを示すフローチャートである。実施の形態5では、ユーザが、除外タスク530(図36参照)を指定する。指定されたタスクは、解析対象から除外される。ユーザは、マウス、キーボード、タッチパネル、ボタン、音声入力のためのマイク等の入力装置(図示せず)を用いて、解析装置500に除外タスク530を入力する。除外タスク530は、動作ログ522の中から選択されてもよいし、予め設定されていてもよい。
タスク指定部511は、まず、入力された除外タスク530を読み込む(S539)。次に、動作ログ522(図37参照)の実行順1の「状態」欄と「タスク」欄とを確認する(S540)。「タスク」欄に記録されたタスクが除外タスク530に該当しない場合、ステップS141に進む(S541)。ステップS141~S148は、図9に示した実施の形態1のステップと同様であるため、説明を省略する。
ステップS541において「タスク」欄に記録されたタスクが除外タスク530に該当すると判定した場合、動的依存関係の解析を省略してステップS147に進む。
例えば、ユーザが割り込み処理についての依存関係解析を除外したいと考えた場合、ユーザは、除外タスク530としてInterruptタスクを指定する。これにより、図37に示した動作ログ522の実行順5および6は解析対象から除外される。したがって、test2関数とinterrupt関数との間の依存関係は出力されない。
以上のように、解析装置500は、解析対象のタスクを指定する除外タスク530の入力を受け付けるタスク指定部511を更に備える。タスク指定部511は、除外タスク530で指定されたタスクに関する関数間の依存関係は解析せず、それ以外のタスクに関する関数間の依存関係を解析する。これにより、本来は依存関係がない割込み関数についての解析を除外することができ、動的解析処理において解析装置500に加えられる負荷を低減させることができる。また、ユーザがソフトウェア変更時の影響を確認する工数を削減することができる。
実施の形態6.
図39は、本発明の実施の形態6に係る解析装置600の構成を示すブロック図である。解析装置600は、実施の形態1の解析装置100の構成に加えて、影響度補完部611を更に備える。
解析装置600の動作の流れは、実施の形態1の図2のフローチャートが示す流れと同様であるが、動的解析ステップ(図2のS103)の中の動的依存関係を解析するステップ(図5のS124)のみが異なる。解析装置600の動作を、図40に示した動作ログ622と、図41に示した動的依存関係解析スタック(第1スタック)623と、を用いて説明する。
図42は、実施の形態6における動的依存関係を解析するステップの詳細な流れを示すフローチャートである。図9に示した実施の形態1のフローチャートと比較すると、図42のフローチャートには、ステップS640およびステップS641が追加されている。
影響度補完部611は、動作ログ622の実行順1の「状態」欄にINが記録されているか否かを判定する(S140、S141)。INが記録されていないと判定した場合、ステップS145へ進むが、ステップS145~S148の流れは図9に示した実施の形態1の流れと同様であるため、説明を省略する。
ステップS141においてINが記録されていると判定した場合、動的依存関係解析部11は、第1スタック623に関数が格納されているか否かを判定する(S142)。格納されていないと判定した場合、ステップS144に進む。
ステップS142において第1スタック623に関数が格納されていると判定した場合、影響度補完部611は、現在の実行順の関数依存関係が動的依存関係に登録されているか否かを判定する(S640)。具体的には、影響度補完部611は、第1スタック623に格納された関数を依存元とし、動作ログ622の現在の実行順の関数を依存先とした関数依存関係が動的依存関係に登録されているか否かを判定する。
現在の実行順の関数依存関係が動的依存関係に登録されていると判定した場合、影響度補完部611は、その関数依存関係についての依存強度値をインクリメントする(S641)。依存強度値は、2つの関数間の依存の強度を示す値である。依存強度値が大きいほど関数間の依存強度が強いことを意味する。依存強度値の初期値は例えば0である。依存強度値をインクリメントした後、ステップS144に進む。
ステップS640において、現在の実行順の関数依存関係が動的依存関係に登録されていないと判定した場合、影響度補完部611は、現在の実行順の関数依存関係を動的依存関係に登録する(S143)。登録した後、ステップS144に進む。
図42に示した各ステップを行うことにより、図43に示したような動的依存関係が得られ、動的依存関係データベース612に格納される。
次に、総合的依存関係解析部613(図39参照)の動作について説明する。図44に示すようなソースコード620に静的解析(図3参照)を行うと、図45に示すような静的依存関係が静的依存関係データベース5に格納される。また、ソースコード620に動的解析を行うと、図43に示したような動的依存関係が動的依存関係データベース612に格納される。
図46は、総合的な依存関係を解析するステップの詳細な流れを示すフローチャートである。図12に示した実施の形態1のフローチャートと比較すると、図46のフローチャートには、ステップS653が追加されている。
総合的な依存関係を解析するステップでは、総合的依存関係解析部613は、静的依存関係データベース5に格納されている全ての依存関係を解析結果614に格納する(S150)。次に、総合的依存関係解析部613は、図43に示すような動的依存関係データベース612のNo.1の行に格納された依存関係を取得する(S151)。次に、総合的依存関係解析部613は、取得した依存関係が解析結果614の中に存在するか否かを判定する(S152)。存在しないと判定した場合、総合的依存関係解析部613は、取得した依存関係を解析結果614に格納し(S153)、次のステップS154に進む。
ステップS152において、取得した動的依存関係が解析結果614の中に存在すると判定した場合、取得した依存関係の依存強度値を解析結果に格納する(S653)。格納した後、ステップS154に進む。
ステップS154およびステップS155は実施の形態1と同様であるため、説明を省略する。
図47は、総合的な依存関係を解析するステップを終えた後の解析結果614の一例を示す図である。
以上のように、解析装置600では、依存強度値が付与された解析結果614を得ることができる。これにより、重み付けの指標が負荷された依存関係を得ることができる。したがって、ソフトウェアを変更した場合に効率的に変更の影響範囲を確認することができ、高精度にソフトウェアの構成要素間の依存関係を解析することができる。
実施の形態7.
図48は、本発明の実施の形態7に係る解析装置700の構成を示すブロック図である。解析装置700は、総合的依存関係解析部713の動作と解析結果714の内容を除き、実施の形態1の解析装置100と同様である。
実施の形態6と同様のソースコード620(図44参照)を解析する例について説明する。ソースコード620に静的解析(図3参照)を行うと、実施の形態6と同様に図45に示したような静的依存関係が静的依存関係データベース5に格納される。また、ソースコード620に動的解析を行うと、図49に示すような動的依存関係が動的依存関係データベース12に格納される。
図50は、総合的な依存関係を解析するステップの詳細な流れを示すフローチャートである。まず、総合的依存関係解析部713は、静的依存関係データベース5に格納されている全ての依存関係を解析結果714に格納する(S150)。次に、総合的依存関係解析部713は、図49に示すような動的依存関係データベース12のNo.1の行に格納された依存関係を取得する(S151)。次に、総合的依存関係解析部713は、取得した依存関係が解析結果714の中に存在するか否かを判定する(S152)。
存在すると判定した場合、総合的依存関係解析部713は、取得した依存関係の重要度値をインクリメントし、その結果を解析結果714に格納する(S753)。格納した後、次のステップS154に進む。ステップS152において、取得した依存関係が解析結果714の中に存在しないと判定した場合も、ステップS154に進む。
依存関係の重要度値は、その依存関係の重要度を示す値である。重要度値が大きいほどその依存関係がプログラムにとって重要であることを意味する。重要度値の初期値は例えば0である。
ステップS154およびステップS155は実施の形態1と同様であるため、説明を省略する。
図51は、総合的な依存関係を解析するステップを終えた後の解析結果714の一例を示す図である。
以上のように、解析装置700では、重要度値が付与された解析結果714を得ることができる。これにより、重み付けの指標が負荷された依存関係を得ることができる。したがって、ソフトウェアを変更した場合に効率的に変更の影響範囲を確認することができ、高精度にソフトウェアの構成要素間の依存関係を解析することができる。
実施の形態8.
図52は、本発明の実施の形態8に係る解析装置800の構成を示すブロック図である。解析装置800は、実施の形態1の解析装置100の構成に加えて、関数テーブル解析部816と、関数テーブル依存関係データベース(DB)817とを備える。図52のソースコード820は、関数テーブルが含まれたソースコードの一例である。
図53は、解析装置800の動作の流れを示すフローチャートである。解析装置800は、図2に示した実施の形態1の動作に加えて、関数テーブル内の関数の依存関係を解析するステップS806を更に含む。
まず、解析装置800は、入力部1を介して、ソースコード820を読み込む(S101)。図54は、ソースコード820の一例を示す図である。ソースコード820には、関数テーブルの記載が含まれている。関数テーブルは、本開示の「一括データ群」の一例である。
次に、図53に示すように、解析装置800は、ソースコード820に静的解析を実行し、静的依存関係を解析する(S102)。図55は、ステップS102中において生成される静的解析結果データベース803の一例を示す図である。静的解析結果データベース803には、実施の形態1の図4bに示したような関数一覧8031と、ソースコード820内の文字列配列を示す文字列配列8032と、が含まれる。ソースコード820には複数の文字列配列8032が記載されている場合があり、静的解析結果データベース803には、複数の文字列配列8032が含まれてもよい。
図53に戻り、静的依存関係を解析するステップS102の後、解析装置800は、ソースコード20に動的解析を実行し、動的依存関係を解析する(S103)。図56は、ステップS103において得られた結果を格納する動的依存関係データベース12の一例を示す図である。なお、ステップS102とステップS103の実行順は逆であってもよく、ステップS102の前にステップS103が実行されてもよい。
図52に示したように、静的解析結果データベース803および動的依存関係データベース12は、関数テーブル解析部816にも入力される。関数テーブル解析部816は、図53に示すように、ステップS102およびステップS103の後、関数テーブル内の関数の依存関係を解析する(S806)。
図57は、図53に示した関数テーブル内の関数の依存関係を解析するステップS806の詳細な流れを示すフローチャートである。まず、関数テーブル解析部816は、動的依存関係データベース12内の依存先関数が、静的解析結果データベース803内の文字列配列8032に登録された文字列のいずれかに一致するか否かを判定する(S807)。一致する場合は次のステップS808に進み、一致しない場合は関数テーブル内の関数の依存関係を解析するステップS806(図53参照)を終える。図55および図56に示した例では、動的依存関係データベース12内のtest1関数が文字列配列8032に登録された文字列に一致するため、ステップS808に進むことになる。
次に、静的解析結果データベース803の文字列配列8032の配列要素番号に1を設定し、文字列配列8032の配列要素番号1について確認する(S808)。
次に、関数テーブル解析部816は、文字列配列8032の文字列のうち設定された配列要素番号に登録された文字列が、関数一覧8031の中にあるか否かを判定する(S809)。設定された配列要素番号に登録された文字列が関数一覧8031の中にない場合、関数テーブル内の関数の依存関係を解析するステップS806(図53参照)を終える。
文字列配列8032の文字列のうち設定された配列要素番号に登録された文字列が関数一覧8031の中にある場合は、関数テーブル解析部816は、当該文字列配列8032の文字列を依存先とし、動的依存関係データベース12の依存元関数を依存元とした依存関係を関数テーブル依存関係データベース817に格納する(S810)。ステップS809およびS810を、静的解析結果データベース803の文字列配列8032の全ての配列要素番号について行う(S811、S812)。
図58aは、関数テーブル内の関数の依存関係を解析するステップS806を終えた後の関数テーブル依存関係データベース817の一例を示す図である。関数テーブル依存関係データベース817が示しているのは、ソースコード820の特定の実行時には実行されなかったが、ランダム関数の戻り値によっては実行され得る呼出し先関数を含めた依存関係である。
すなわち、図54に示したようなソースコード820をコンパイルして実行すると、main関数内で、ランダム関数であるrand関数の戻り値を使って、関数テーブルtestTable内に登録された関数が実行される。図56に示した動的依存関係解析の結果では、test1関数が実行されている。そこで、図55に示した静的解析結果データベース803を確認すると、test1関数を含む文字列配列8032には、test2~4関数も含まれていることがわかる。したがって、ランダム関数の戻り値によっては、test1関数の代わりにtest2~4関数が実行され得ることがわかる。このような場合、test2~4関数の内容が変更された場合にも、main関数への影響を考慮すべきである。実施の形態8の解析装置800を用いると、以上のようにtest2~4関数とmain関数との依存関係をも解析することができる。
図58bは、関数テーブル内の関数の依存関係を解析するステップS806を終えた後の関数テーブル依存関係データベース817の他の例を示す図である。図58bの表には、図58aの「依存元」欄および「依存先」欄に加えて、「影響度」欄が追加されている。
影響度は、関数テーブル解析部816によって、例えば関数テーブル内の関数の依存関係を解析するステップS806の中で算出される。例えば、関数テーブル解析部816は、図57に示したステップS807において、動的依存関係データベース12内の依存先関数が、静的解析結果データベース803内の文字列配列8032に登録された文字列のいずれかに一致すると判定した場合、当該文字列配列8032に登録されている文字列の数(N1)をカウントする。図55に示した例では、N1=4である。カウント結果は、影響度算出情報として関数テーブル依存関係データベース817に格納されてもよい。
次に、関数テーブル解析部816は、当該文字列配列8032に登録されている文字列のうち、動的依存関係データベース12内の依存先関数に記録されているものの数(N2)をカウントする。図55および図56に示した例では、N2=1である。カウント結果は、影響度算出情報として関数テーブル依存関係データベース817に格納されてもよい。
文字列配列8032に登録されている文字列のうち、動的依存関係データベース12内の依存先関数に記録されているものについては、関数テーブル依存関係データベース817の影響度を1とする。図58bでは、test1関数についての影響度が1となっている。test1関数は、実際の動的解析において実行されているため、main関数との依存関係が強いと考えられるからである。
文字列配列8032に登録されている文字列のうち、動的依存関係データベース12内の依存先関数に記録されているもの以外については、影響度Xは、上記のN1およびN2を用いて、次の式(1)によって算出される。
Figure 0007046217000001
図55および図56に示した例では、N1=4、N2=1であるから、図58bでは、test2関数、test3関数およびtest4関数についての影響度Xは、式(1)より0.25となる。影響度Xは、関数テーブルの中の関数の数に応じて、依存関係に均等に割り付けられた割合値を示している。
関数テーブル内の関数の依存関係を解析するステップS806を終えた後、総合的な依存関係を解析するステップS804が実行される。ステップS804では、図59に示すように、静的依存関係データベース5に格納された情報と、動的依存関係データベース12に格納された情報と、関数テーブル依存関係データベース817に格納された情報と、を統合した解析結果814が得られる。
以上のように、解析装置800は、動的依存関係解析部11の解析結果において他の関数と依存関係を有するとされた関数が、ソフトウェアの関数テーブルに含まれる場合、関数テーブル内の全ての関数と当該他の関数との間に依存関係があることを示す解析結果を生成する。
従来技術では、ポインタを介する関数テーブルによる依存関係は、静的解析によっては解析できなかった。また、従来の動的解析では、関数テーブルへの依存関係のうち実行された関数への依存関係は解析できるものの、未実行の関数への依存関係は解析できなかった。これに対して、解析装置800は、プログラムが関数テーブルに登録されている一部の関数を実行した場合、関数テーブルに登録されている他の関数に対する依存関係を解析することができる。これにより、ソフトウェアを変更した場合に効率的に変更の影響範囲を確認することができ、高精度にソフトウェアの構成要素間の依存関係を解析することができる。
実施の形態9.
図60は、本発明の実施の形態9に係る解析システム1000の構成を示すブロック図である。解析システム1000は、解析装置900と、外部装置950とを含む。本発明の解析機能は、実施の形態1の解析装置100(図1参照)のように1つの装置内の構成要素のみで実現される必要はなく、複数の装置が協働することによって実現されてもよい。
実施の形態9では、ソースコード20は、解析装置900にだけでなく、外部装置950にも入力される。外部装置950は、ソースコード20を読み込む入力部951を備える。さらに、外部装置950は、実施の形態1の解析装置100と同様のコード加工部6と、コンパイル部7と、実行部8と、動的解析部9と、動的解析結果データベース10とを備える。外部装置950は、動的解析結果データベース10に格納されたデータを出力する出力部952を更に備える。
外部装置950は、図5に示す修正コードを作成するステップS120と、修正コードをコンパイルして実行プログラムに変換するステップS121と、ログ生成ステップS122と、ログを動的解析結果データベース10に格納するステップS123とを行う。動的解析結果データベース10に格納されたデータは、出力部952を介して解析装置900に出力される。
外部装置950の出力部952から出力されたデータは、解析装置900の第2入力部916に入力される。
解析装置900は、実施の形態1の解析装置100と異なり、コード加工部6、コンパイル部7、実行部8、動的解析部9、および動的解析結果データベース10を備えていない。これらの構成要素が実現していた機能は、外部装置950によって実現されるからである。これらの構成要素以外については、解析装置900は、実施の形態1の解析装置100と同様の構成要素を備える。
このように、本発明の解析機能を実現する構成要素は、複数の装置によって実現されてもよい。これにより、例えば、処理能力の高いコンピュータに、処理負荷の高い動的解析を担当させることができる。
また、上記の様に動的解析を行う部分を担当する装置を設けるだけでなく、例えば、静的解析結果データベース3、動的解析結果データベース10、静的依存関係データベース5および動的依存関係データベース5等のデータベースが、解析装置900の外部の記憶装置に格納されてもよい。このような外部の記憶装置は、例えばネットワークを介して解析装置900および外部装置950と通信可能な外部サーバであってもよい。
変形例1.
以上の実施の形態1~9では、動的解析として、プログラムを一度だけ実行する例について説明した。しかしながら、本発明はこれに限定されず、プログラムを複数回実行して動作ログを併合または蓄積する動的解析が行われてもよい。
図61aは、実行部8(図1参照)によって、ステップS122(図5参照)において特定の環境で特定の入力データを与えて実行プログラムを実行して得られた動作ログ22aを示す図である。図61bは、他の環境でまたは他の入力データを与えて実行プログラムを実行することにより得られた動作ログ22bを示す図である。図61aおよび図61bに示すように、同じプログラムであっても、異なる実行パスを経由した場合、異なる動作ログが出力される。
動作ログ22aおよび22bは、動的解析結果データベース10に格納される。動作ログ22aに基づいて動的依存関係を解析するステップS124(図9参照)を行うと、図62aに示すような動的依存関係14aが得られる。一方、動作ログ22bに基づいて動的依存関係を解析するステップS124を行うと、図62bに示すような動的依存関係14bが得られる。動的依存関係14aと動的依存関係14bとを併せることにより、図62cに示すような動的依存関係14cが得られる。
このようにして、様々な実行パスを経由してプログラムを解析することができ、精度の高い解析を実現することができる。
変形例2.
以上の実施の形態1~9では、出力部15から解析結果を出力する解析装置について説明した。解析結果を出力する代わりに、本発明の解析装置は、解析結果をユーザに表示する表示部を備えてもよい。表示部には、最終的な総合的依存関係解析の結果だけでなく、静的構造解析結果、静的依存関係解析結果、動的解析結果および動的依存関係解析結果が表示されてもよい。表示部は、例えば液晶ディスプレイ、有機ELディスプレイ、プロジェクタである。これにより、ユーザは、表示部に表示された解析結果を確認することにより、関数間の依存関係を把握することができる。例えば、依存先の関数を変更した場合、表示部に表示された依存元の関数を確認することにより、効率良くかつ高精度にソフトウェア開発を行うことができる。
本明細書では、本発明の実施の形態および変形例を説明した。しかしながら、上記の説明は本発明の例示である。上記の実施の形態および変形例には、本発明の範囲を逸脱することなく種々の改良や変形を加えることができる。また、各実施の形態および変形例は、適宜組み合わせることができる。
1 入力部、2 静的解析部、3 静的解析結果データベース、4 静的依存関係解析部、5 静的依存関係データベース、5 動的依存関係データベース、6 コード加工部、7 コンパイル部、8 実行部、9 動的解析部、10 動的解析結果データベース、11 動的依存関係解析部、12 動的依存関係データベース、13 総合的依存関係解析部、14 解析結果、15 出力部、20 ソースコード、21 修正コード、22 動作ログ、23 動的依存関係解析スタック(第1スタック)、100 解析装置。

Claims (14)

  1. ソフトウェアのソースコードの構造を静的に解析し、前記ソフトウェアのオブジェクト間の依存関係を解析する第1解析部と、
    前記ソースコードが示すプログラムを実行して前記オブジェクトの動作に関する第1情報を取得し、前記第1情報に基づいて前記オブジェクト間の依存関係を解析する第2解析部と、を備え、
    前記第1解析部の解析結果と、前記第2解析部の解析結果と、に基づいて、前記オブジェクト間の依存関係を解析し、
    前記第2解析部の解析結果において他のオブジェクトと依存関係を有するとされたオブジェクトが、前記ソフトウェアの一括データ群に含まれる場合、前記一括データ群の全てと前記他のオブジェクトとの間に依存関係があることを示す解析結果を生成するソフトウェア解析装置。
  2. ソフトウェアのソースコードの構造を静的に解析し、前記ソフトウェアのオブジェクト間の依存関係を解析する第1解析部と、
    前記ソースコードが示すプログラムを実行して前記オブジェクトの動作に関する第1情報を取得し、前記第1情報に基づいて前記オブジェクト間の依存関係を解析する第2解析部と、を備え、
    前記第1解析部の解析結果と、前記第2解析部の解析結果と、に基づいて、前記オブジェクト間の依存関係を解析し、
    前記第2解析部が取得する前記第1情報は、前記オブジェクトの実行順を示す第2情報を含み、
    前記第2情報は、オブジェクトから他のオブジェクトへの遷移を示す情報を含み、
    前記第2解析部は、前記第2情報を前記ソースコードが示すプログラムの実行途中から取得した場合、呼出し先のオブジェクトから呼出し元のオブジェクトへの遷移を示す情報に基づいて、前記オブジェクト間の依存関係を補完する、ソフトウェア解析装置。
  3. ソフトウェアのソースコードの構造を静的に解析し、前記ソフトウェアのオブジェクト間の依存関係を解析する第1解析部と、
    前記ソースコードが示すプログラムを実行して前記オブジェクトの動作に関する第1情報を取得し、前記第1情報に基づいて前記オブジェクト間の依存関係を解析する第2解析部と、を備え、
    前記第1解析部の解析結果と、前記第2解析部の解析結果と、に基づいて、前記オブジェクト間の依存関係を解析し、
    前記第1解析部の解析結果のうち前記第2解析部の解析結果の中に存在しない依存関係を、前記第2解析部の解析結果に加えた解析結果を生成する第3解析部を更に備えた、ソフトウェア解析装置。
  4. 前記第2解析部が取得する前記第1情報は、前記オブジェクトの実行順を示す第2情報を含む、請求項1又は3に記載のソフトウェア解析装置。
  5. 前記第2解析部は、他のオブジェクトを呼び出すオブジェクトと、呼び出される前記他のオブジェクトと、の間に依存関係があることを示す解析結果を生成する、請求項1~4のいずれかに記載のソフトウェア解析装置。
  6. 前記第2解析部は、メッセージを送信したオブジェクトと、前記メッセージを受信したオブジェクトと、の間に依存関係があることを示す解析結果を生成する、請求項1~のいずれかに記載のソフトウェア解析装置。
  7. 前記第2解析部は、前記ソースコードが示すプログラムがアクセスした共有メモリのアドレスと、アクセスした時刻と、に基づいて、前記オブジェクト間の依存関係を解析する、請求項1~のいずれかに記載のソフトウェア解析装置。
  8. 前記ソフトウェア解析装置は、解析対象のタスクを指定する指示の入力を受け付けるタスク指定部を更に備え、
    前記第2解析部は、指定された前記タスクに関する前記オブジェクト間の依存関係のみを解析する、請求項1~のいずれかに記載のソフトウェア解析装置。
  9. 前記第2解析部による解析過程における前記オブジェクトの実行回数に応じた重要度値を含む解析結果を生成する、
    請求項1~のいずれかに記載のソフトウェア解析装置。
  10. 前記オブジェクト間の依存関係の影響の程度を示す影響度値を算出し、
    前記影響度値は、前記一括データ群の中のデータと前記他のオブジェクトとの間の依存関係に対して、前記一括データ群の中のデータの数に応じて均等に割り付けられた割合値である、請求項に記載のソフトウェア解析装置。
  11. 前記一括データ群の中のデータのうち前記第2解析部の解析結果において前記他のオブジェクトと依存関係を有するとされたオブジェクトと、前記他のオブジェクトと、の間の依存関係に対して、前記一括データ群の中の他のデータと前記他のオブジェクトとの間の依存関係に付与された前記影響度値よりも高い影響度値を付与する、
    請求項10に記載のソフトウェア解析装置。
  12. 前記第1解析部の解析結果、前記第2解析部の解析結果、並びに、前記第1解析部の解析結果および前記第2解析部の解析結果に基づいて解析された前記オブジェクト間の依存関係のうち少なくとも1つを表示する表示装置を更に備えた、
    請求項1~11のいずれかに記載のソフトウェア解析装置。
  13. ソフトウェアのソースコードの構造を静的に解析し、前記ソフトウェアのオブジェクト間の依存関係を解析する第1解析ステップと、
    前記ソースコードが示すプログラムを実行して前記オブジェクトの動作に関する第1情報を取得し、前記第1情報に基づいて前記オブジェクト間の依存関係を解析する第2解析ステップと、
    前記第1解析ステップの解析結果と、前記第2解析ステップの解析結果と、に基づいて、前記オブジェクト間の依存関係を解析するステップと、
    前記第2解析ステップの解析結果において他のオブジェクトと依存関係を有するとされたオブジェクトが、前記ソフトウェアの一括データ群に含まれる場合、前記一括データ群の全てと前記他のオブジェクトとの間に依存関係があることを示す解析結果を生成するステップと、
    を含むソフトウェア解析方法。
  14. 請求項13に記載のソフトウェア解析方法をコンピュータに実行させるためのソフトウェア解析プログラム。
JP2020550997A 2018-10-03 2018-10-03 ソフトウェア解析装置、ソフトウェア解析方法およびソフトウェア解析プログラム Active JP7046217B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2018/036996 WO2020070817A1 (ja) 2018-10-03 2018-10-03 ソフトウェア解析装置、ソフトウェア解析方法およびソフトウェア解析プログラム

Publications (2)

Publication Number Publication Date
JPWO2020070817A1 JPWO2020070817A1 (ja) 2021-05-13
JP7046217B2 true JP7046217B2 (ja) 2022-04-01

Family

ID=70054712

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020550997A Active JP7046217B2 (ja) 2018-10-03 2018-10-03 ソフトウェア解析装置、ソフトウェア解析方法およびソフトウェア解析プログラム

Country Status (4)

Country Link
US (1) US11630662B2 (ja)
EP (1) EP3862873A4 (ja)
JP (1) JP7046217B2 (ja)
WO (1) WO2020070817A1 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11360751B2 (en) * 2020-03-19 2022-06-14 Codelogic, Inc. Systems and methods for dependency analysis

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000284988A (ja) 1999-03-31 2000-10-13 Toshiba Corp オブジェクト指向システム解析装置及び方法並びにオブジェクト指向システム解析用ソフトウェアを記録した記録媒体
JP2001290639A (ja) 2000-04-07 2001-10-19 Hitachi Ltd ソフトウェア再構成方式
JP2003256235A (ja) 2002-02-27 2003-09-10 Mitsubishi Electric Corp 分散オブジェクトシステムの試験支援システム
JP2007293383A (ja) 2006-04-20 2007-11-08 Toshiba Corp プログラム開発支援装置及びプログラム開発支援装置の動作方法
JP2009237654A (ja) 2008-03-26 2009-10-15 Hitachi Software Eng Co Ltd テストプログラム管理システム
JP2013117803A (ja) 2011-12-02 2013-06-13 Hitachi Ltd トレース情報の数を算出する計算機、トレース情報の数を算出する方法及びトレース情報の数を算出させるプログラム

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05165680A (ja) * 1991-12-13 1993-07-02 Mitsubishi Electric Corp メモリ操作トレ−ス装置
JP3349057B2 (ja) * 1997-02-24 2002-11-20 株式会社東芝 マルチタスク処理装置、マルチタスク処理方法およびマルチタスク処理表示方法
US7409676B2 (en) * 2003-10-20 2008-08-05 International Business Machines Corporation Systems, methods and computer programs for determining dependencies between logical components in a data processing system or network
US7975257B2 (en) * 2006-06-13 2011-07-05 Microsoft Corporation Iterative static and dynamic software analysis
US7496893B2 (en) * 2006-06-15 2009-02-24 International Business Machines Corporation Method for no-demand composition and teardown of service infrastructure
JP5775829B2 (ja) 2012-01-30 2015-09-09 日立オートモティブシステムズ株式会社 ソフトウェアの構造可視化プログラムおよびシステム
US8893101B2 (en) * 2012-12-21 2014-11-18 International Business Machines Corporation Hybrid dependency analysis using dynamic and static analyses
US9569334B2 (en) * 2013-03-14 2017-02-14 Whitehat Security, Inc. Techniques for traversing representations of source code
US10089218B2 (en) * 2013-03-17 2018-10-02 Typemock Ltd. Methods circuits apparatuses systems and associated computer executable code for generating a software unit test
US20140289712A1 (en) * 2013-03-20 2014-09-25 Nec Laboratories America, Inc. Effective Lifetime Dependency Analysis and Typestate Analysis
US9342300B2 (en) * 2014-03-11 2016-05-17 Blue Wolf Group, LLC Analyzing components related to a software application in a software development environment
US9483240B1 (en) * 2015-05-27 2016-11-01 Google Inc. Data binding dependency analysis
JP6440895B2 (ja) 2016-02-17 2018-12-19 三菱電機株式会社 ソフトウェア分析装置及びソフトウェア分析方法
US10339480B2 (en) * 2016-08-15 2019-07-02 International Business Machines Corporation Executing a set of business rules on incomplete data
AU2016228166A1 (en) * 2016-09-13 2018-03-29 Canon Kabushiki Kaisha Visualisation for guided algorithm design to create hardware friendly algorithms
WO2018081629A1 (en) * 2016-10-28 2018-05-03 Tala Security, Inc. Application security service
WO2018096632A1 (ja) 2016-11-24 2018-05-31 オリンパス株式会社 データ処理装置、コンピュータ読取可能媒体、データ処理方法、及びプログラム

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000284988A (ja) 1999-03-31 2000-10-13 Toshiba Corp オブジェクト指向システム解析装置及び方法並びにオブジェクト指向システム解析用ソフトウェアを記録した記録媒体
JP2001290639A (ja) 2000-04-07 2001-10-19 Hitachi Ltd ソフトウェア再構成方式
JP2003256235A (ja) 2002-02-27 2003-09-10 Mitsubishi Electric Corp 分散オブジェクトシステムの試験支援システム
JP2007293383A (ja) 2006-04-20 2007-11-08 Toshiba Corp プログラム開発支援装置及びプログラム開発支援装置の動作方法
JP2009237654A (ja) 2008-03-26 2009-10-15 Hitachi Software Eng Co Ltd テストプログラム管理システム
JP2013117803A (ja) 2011-12-02 2013-06-13 Hitachi Ltd トレース情報の数を算出する計算機、トレース情報の数を算出する方法及びトレース情報の数を算出させるプログラム

Also Published As

Publication number Publication date
JPWO2020070817A1 (ja) 2021-05-13
US11630662B2 (en) 2023-04-18
EP3862873A4 (en) 2021-10-13
EP3862873A1 (en) 2021-08-11
WO2020070817A1 (ja) 2020-04-09
US20210232392A1 (en) 2021-07-29

Similar Documents

Publication Publication Date Title
US8286149B2 (en) Apparatus for and method of implementing feedback directed dependency analysis of software applications
Oaks Java Performance: The Definitive Guide: Getting the Most Out of Your Code
US8776014B2 (en) Software build analysis
US8997065B2 (en) Automatic modularization of source code
US20040054991A1 (en) Debugging tool and method for tracking code execution paths
US7500149B2 (en) Generating finite state machines for software systems with asynchronous callbacks
Claessen et al. Generating constrained random data with uniform distribution
Kausler et al. Evaluation of string constraint solvers in the context of symbolic execution
US20110154127A1 (en) Test support system, method and computer program product, which optimize test scenarios to minimize total test time
Song et al. Open source vizier: Distributed infrastructure and api for reliable and flexible blackbox optimization
US10275238B2 (en) Hybrid program analysis
US6330714B1 (en) Method and computer program product for implementing redundant lock avoidance
US10872025B1 (en) Automatic performance testing and performance regression analysis in a continuous integration environment
Smetsers et al. Complementing model learning with mutation-based fuzzing
JP7046217B2 (ja) ソフトウェア解析装置、ソフトウェア解析方法およびソフトウェア解析プログラム
US20080148232A1 (en) Method and Apparatus for Managing Selective and Subtractive Merges in a Software Configuration
Tonella et al. Web application slicing in presence of dynamic code generation
US20100313190A1 (en) Determining target types for generic pointers in source code
Alba et al. Software testing with evolutionary strategies
US20100010801A1 (en) Conflict resolution and error recovery strategies
US11995096B2 (en) Creation of message serializer for event streaming platform
Spæren Performance analysis and improvements for Apache Beam
US7844627B2 (en) Program analysis method and apparatus
Palomo-Duarte et al. Automatic dynamic generation of likely invariants for WS-BPEL compositions
US11935655B2 (en) Scalable deployment of ontology-based decision trees for clinical decision support and automated clinical workflows

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20201027

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20201027

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20211116

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220114

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: 20220222

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220322

R150 Certificate of patent or registration of utility model

Ref document number: 7046217

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150