(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-11-11
(45)【発行日】2022-11-21
(54)【発明の名称】インタープロシージャル制御フローグラフにおいて各プログラム位置からエラー位置までの最短距離を効率的に計算するためのコンピュータシステム、その方法、およびコンピュータ読み取り可能な記録媒体
(51)【国際特許分類】
G06F 11/36 20060101AFI20221114BHJP
【FI】
G06F11/36 104
(21)【出願番号】P 2021085670
(22)【出願日】2021-05-20
【審査請求日】2021-05-20
(31)【優先権主張番号】10-2020-0171575
(32)【優先日】2020-12-09
(33)【優先権主張国・地域又は機関】KR
(73)【特許権者】
【識別番号】514260642
【氏名又は名称】コリア アドバンスド インスティチュート オブ サイエンス アンド テクノロジィ
(74)【代理人】
【識別番号】110000408
【氏名又は名称】弁理士法人高橋・林アンドパートナーズ
(72)【発明者】
【氏名】ペク ジョンムン
(72)【発明者】
【氏名】イ ナクウォン
【審査官】中村 信也
(56)【参考文献】
【文献】米国特許出願公開第2018/0114026(US,A1)
【文献】米国特許出願公開第2014/0165208(US,A1)
【文献】米国特許出願公開第2020/0272658(US,A1)
【文献】中国特許出願公開第104360938(CN,A)
【文献】米国特許出願公開第2016/0170725(US,A1)
【文献】米国特許出願公開第2020/0174872(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/36
(57)【特許請求の範囲】
【請求項1】
インタープロシージャル制御フローグラフにおいて各プログラム位置からエラー位置までの最短距離を効率的に計算するためのコンピュータシステムの方法であって、
前記コンピュータシステムはメモリ、および、前記メモリに接続され、前記メモリに記録されたプログラムを実行するように構成されたプロセッサを含み、
前記プログラムは、
前記エラー位置を確認する段階
、
前記エラー位置から繋がる少なくとも1つのエッジを追跡しながら、前記エラー位置と少なくとも1つの関数によって連関するプログラム位置に対して前記最短距離を計算する段階
、および、
前記インタープロシージャル制御フローグラフが構成される間に、各関数に対する関数呼び出し位置と関数返還位置の対を含む呼び出し関係情報を格納する段階を含み、
前記最短距離を計算する段階は、
前記呼び出し関係情報に基づき、前記エラー位置と連関する少なくとも1つの関数に対する関数返還位置と関数呼び出し位置を逆に追跡すること、
前記プログラム位置が少なくとも1つのブロック位置を含むと共に、前記エラー位置から前記プログラム位置までのブロック位置の個数をカウントすること、
前記エラー位置から逆に追跡しながら、前記エラー位置を基準に、前記プログラム位置のそれぞれに対して、位置変数を設定する段階、および、
前記プログラム位置の位置変数に基づき、前記最短距離を計算する段階を含み、
前記インタープロシージャル制御フローグラフは、複数のプログラム位置を含み、複数のエッジが前記プログラム位置の間をそれぞれ連結し、前記プログラム位置のうちの2つが、各関数に対する関数呼び出し位置と関数返還位置であり、
前記位置変数は、前記エラー位置からのカウント値または前記エラー位置との相関情報のうちの少なくとも1つを含む、
方法。
【請求項2】
前記プログラム位置は、少なくとも1つの非ブロック位置をさらに含み、
前記最短距離を計算する段階は、
前記エラー位置から前記プログラム位置の間の非ブロック位置は無視する、
請求項
1に記載の方法。
【請求項3】
前記プログラム位置のうちの少なくとも1つは終了位置であり、
各関数に対する関数呼び出し位置と関数返還位置、および前記終了位置のそれぞれは前記非ブロック位置である、
請求項
2に記載の方法。
【請求項4】
インタープロシージャル制御フローグラフにおいて各プログラム位置からエラー位置までの最短距離を効率的に計算するためのコンピュータシステムであって、
メモリ、および
前記メモリに接続され、前記メモリに記録された少なくとも1つの命令を実行するように構成されたプロセッサを含み、
前記プロセッサは、
前記エラー位置を確認し、
前記エラー位置から繋がる少なくとも1つのエッジを追跡しながら、前記エラー位置と少なくとも1つの関数によって連関するプログラム位置に対して前記最短距離を計算
し、
前記インタープロシージャル制御フローグラフが構成される間に、各関数に対する関数呼び出し位置と関数返還位置の対を含む呼び出し関係情報を格納するように構成され、
前記最短距離を計算することは、
前記呼び出し関係情報に基づき、前記エラー位置と連関する少なくとも1つの関数に対する関数返還位置と関数呼び出し位置を逆に追跡すること、
前記プログラム位置が少なくとも1つのブロック位置を含むと共に、前記エラー位置から前記プログラム位置までのブロック位置の個数をカウントすること、
前記エラー位置から逆に追跡しながら、前記エラー位置を基準に、前記プログラム位置のそれぞれに対して、位置変数を設定すること、および、
前記プログラム位置の位置変数に基づき、前記最短距離を計算することを含み、
前記インタープロシージャル制御フローグラフは、複数のプログラム位置を含み、複数のエッジが前記プログラム位置の間をそれぞれ連結し、前記プログラム位置のうちの2つが、各関数に対する関数呼び出し位置と関数返還位置であり、
前記位置変数は、前記エラー位置からのカウント値または前記エラー位置との相関情報のうちの少なくとも1つを含む、
コンピュータシステム。
【請求項5】
前記プログラム位置は、少なくとも1つの非ブロック位置をさらに含み、
前記プロセッサは、
前記エラー位置から前記プログラム位置の間の非ブロック位置は無視するように構成される、
請求項
4に記載のコンピュータシステム。
【請求項6】
前記プログラム位置のうちの少なくとも1つは終了位置であり、
各関数に対する関数呼び出し位置と関数返還位置、および前記終了位置のそれぞれは前記非ブロック位置である、
請求項
5に記載のコンピュータシステム。
【請求項7】
インタープロシージャル制御フローグラフにおいて各プログラム位置からエラー位置までの最短距離を効率的に計算するためのコンピュータシステムによって実行されるプログラムを記録する非一時的なコンピュータ読み取り可能な記録媒体であって、
前記エラー位置を確認する段階
、
前記エラー位置から繋がる少なくとも1つのエッジを追跡しながら、前記エラー位置と少なくとも1つの関数によって連関するプログラム位置に対して前記最短距離を計算する段階、および、
前記インタープロシージャル制御フローグラフが構成される間に、各関数に対する関数呼び出し位置と関数返還位置の対を含む呼び出し関係情報を格納する段階
を実行するための1つ以上のプログラムを記録し、
前記最短距離を計算する段階は、
前記呼び出し関係情報に基づき、
前記エラー位置から前記プログラム位置までのブロック位置の個数をカウントすること、
前記プログラム位置が少なくとも1つのブロック位置を含むと共に、前記エラー位置から前記プログラム位置までのブロック位置の個数をカウントすること、
前記エラー位置から逆に追跡しながら、前記エラー位置を基準に、前記プログラム位置のそれぞれに対して、位置変数を設定する段階、および
前記プログラム位置の位置変数に基づき、前記最短距離を計算する段階を含み、
前記インタープロシージャル制御フローグラフは、複数のプログラム位置を含み、複数のエッジが前記プログラム位置の間をそれぞれ連結し、前記プログラム位置のうちの2つが、各関数に対する関数呼び出し位置と関数返還位置であり、
前記位置変数は、前記エラー位置からのカウント値または前記エラー位置との相関情報のうちの少なくとも1つを含む、
コンピュータ読み取り可能な記録媒体。
【請求項8】
前記プログラム位置は、少なくとも1つの非ブロック位置をさらに含み、
前記プログラム位置のうちの少なくとも1つは終了位置であり、
各関数に対する関数呼び出し位置と関数返還位置、および前記終了位置のそれぞれは前記非ブロック位置である、
前記最短距離を計算する段階は、
前記エラー位置から前記プログラム位置の間の非ブロック位置は無視する、
請求項
7に記載のコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【0001】
多様な実施形態は、インタープロシージャル(inter-procedural)制御フローグラフ(control-flow graph)において各プログラム位置からエラー(error)位置までの最短距離を効率的に計算するためのコンピュータシステムおよびその方法に関する。
【背景技術】
【0002】
インタープロシージャル制御フローグラフとは、プログラムを構成する各関数に対する制御フローグラフがあるときに関数呼び出しと返還に該当するエッジによって関数を連結し、全体プログラムを1つの制御フローグラフで表現するものである。インタープロシージャル制御フローグラフでは、複数のプログラム位置で同じ関数を呼び出すことがあるため、エラー位置までの最短距離を計算するときに関数呼び出し関係を考慮しなければならない。特に、インタープロシージャル制御フローグラフで位置間の距離を計算する従来の技法は、すべてのプログラム位置の対の距離を計算するアルゴリズムを使用することから、相対的に多くの時間を要するという問題がある。さらに、「最短距離」が、単にグラフエッジの数またはグラフノードの数でない場合もあるため、最短距離を柔軟に計算することのできる技法が求められている。
【発明の概要】
【発明が解決しようとする課題】
【0003】
多様な実施形態は、インタープロシージャル制御フローグラフにおいて各プログラム位置からエラー位置までの最短距離を効率的に計算するためのコンピュータシステムおよびこの方法を提供することができる。
【課題を解決するための手段】
【0004】
多様な実施形態に係るコンピュータシステムによる方法は、インタープロシージャル制御フローグラフにおいてエラー位置を確認する段階、および前記エラー位置から繋がる少なくとも1つのエッジを追跡しながら、前記エラー位置と少なくとも1つの関数によって連関するプログラム位置に対して最短距離を計算する段階を含んでよい。
【0005】
多様な実施形態に係るコンピュータシステムは、メモリ、および前記メモリに接続され、前記メモリに記録された少なくとも1つの命令を実行するように構成されたプロセッサを含み、前記プロセッサは、インタープロシージャル制御フローグラフにおいてエラー位置を確認し、前記エラー位置から繋がる少なくとも1つのエッジを追跡しながら、前記エラー位置と少なくとも1つの関数によって連関するプログラム位置に対して最短距離を計算するように構成されてよい。
【0006】
多様な実施形態に係る非一時的なコンピュータ読み取り可能な記録媒体は、インタープロシージャル制御フローグラフにおいてエラー位置を確認する段階、および前記エラー位置から繋がる少なくとも1つのエッジを追跡しながら、前記エラー位置と少なくとも1つの関数によって連関するプログラム位置に対して最短距離を計算する段階を実行するための1つ以上のプログラムを記録してよい。
【発明の効果】
【0007】
多様な実施形態によると、コンピュータシステムは、インタープロシージャル制御フローグラフにおいてエラー位置から逆に追跡しながら、エラー位置と連関するプログラム位置までの最短距離を計算することができる。これにより、コンピュータシステムは、インタープロシージャル制御フローグラフですべてのプログラム位置の間の位置対に対して距離を計算しなくても、エラー位置までの最短距離を計算することができる。したがって、コンピュータシステムが、インタープロシージャル制御フローグラフでエラー位置までの最短距離を計算するのにかかる時間を減らすことができる。さらに、コンピュータシステムが、インタープロシージャル制御フローグラフにおいてエラー位置までの最短距離を効率的に計算することができる。
【図面の簡単な説明】
【0008】
【
図1】多様な実施形態における、コンピュータシステムを示した図である。
【
図2】多様な実施形態における、コンピュータシステムの動作特徴を例示的に説明するための図である。
【
図3】多様な実施形態における、コンピュータシステムの動作特徴を例示的に説明するための図である。
【
図4】多様な実施形態における、コンピュータシステムによる方法を示した図である。
【
図5】
図4の最短距離計算段階をより詳しく示した図である。
【発明を実施するための形態】
【0009】
以下、本文書の多様な実施形態について、添付の図面を参照しながら説明する。
【0010】
図1は、多様な実施形態における、コンピュータシステム100を示した図である。
図2および
図3は、多様な実施形態における、コンピュータシステム100の動作特徴を例示的に説明するための図である。
【0011】
図1を参照すると、多様な実施形態に係るコンピュータシステム100は、インタフェースモジュール110、メモリ120、またはプロセッサ130のうちの少なくとも1つを含んでよい。一実施形態において、コンピュータシステム100の構成要素のうちの少なくともいずれか1つが省略されてもよく、少なくとも1つの他の構成要素が追加されてもよい。一実施形態において、コンピュータシステム100の構成要素のうちの少なくともいずれか2つが、1つの統合された回路で実現されてよい。
【0012】
インタフェースモジュール110は、コンピュータシステム100のためのインタフェースを提供してよい。一実施形態によると、インタフェースモジュール110は、通信モジュールを含み、通信モジュールは、外部装置との通信を実行してよい。通信モジュールは、コンピュータシステム100と外部装置との間に通信チャネルを樹立し、通信チャネルを介して外部装置との通信を実行してよい。通信モジュールは、有線通信モジュールまたは無線通信モジュールのうちの少なくとも1つを含んでよい。有線通信モジュールは、外部装置と有線で接続し、有線で通信してよい。無線通信モジュールは、近距離通信モジュールまたは遠距離通信モジュールのうちの少なくともいずれか1つを含んでよい。近距離通信モジュールは、外部装置と近距離通信方式によって通信してよい。遠距離通信モジュールは、外部装置と遠距離通信方式によって通信してよい。ここで、遠距離通信モジュールは、無線ネットワークを介して外部装置と通信してよい。他の実施形態によると、インタフェースモジュール110は、入力モジュールまたは出力モジュールのうちの少なくとも1つを含んでよい。入力モジュールは、コンピュータシステム100の少なくとも1つの構成要素に使用される信号を入力してよい。入力モジュールは、ユーザがコンピュータシステム100に信号を直接入力するように構成される入力装置、周辺環境を感知して信号を発生するように構成されるセンサ装置、または映像を撮影して映像データを生成するように構成されるカメラモジュールのうちの少なくともいずれか1つを含んでよい。出力モジュールは、情報を視覚的に表示するための表示モジュール、または情報をオーディオ信号で出力するためのオーディオモジュールのうちの少なくとも1つを含んでよい。
【0013】
メモリ120は、コンピュータシステム100の少なくとも1つの構成要素によって使用される多様なデータを記録してよい。例えば、メモリ120は、揮発性メモリまたは不揮発性メモリのうちの少なくともいずれか1つを含んでよい。データは、少なくとも1つのプログラム、およびこれと関連する入力データまたは出力データを含んでよい。プログラムは、メモリ120に少なくとも1つの命令を含むソフトウェアとして記録されてよい。
【0014】
プロセッサ130は、メモリ120のプログラムを実行し、コンピュータシステム100の少なくとも1つの構成要素を制御してよい。これにより、プロセッサ130は、データ処理または演算を実行してよい。このとき、プロセッサ130は、メモリ120に記録された命令を実行してよい。
【0015】
プロセッサ130は、インタープロシージャル制御フローグラフを構成してよい。プロセッサ130は、プログラムの少なくとも1つの関数(function)を実行しながら、インタープロシージャル制御フローグラフを構成してよい。このとき、インタープロシージャル制御フローグラフは、複数のプログラム位置(program location)(l)、およびプログラム位置(l)の間をそれぞれ連結する複数のエッジ(edge)を含んでよい。プログラム位置(l)は、少なくとも1つのブロック位置(block location)(lblock)と少なくとも1つの非ブロック位置(non block location)(lnon-block)を含んでよい。ここで、ブロック位置(lblock)とは、ユーザの必要によって事前に定義される位置であり、プログラム位置(l)からユーザによって選択されてよい。一方、非ブロック位置(lnon-block)は、プログラム位置(l)からブロック位置(lblock)を除いた残りを示してよい。
【0016】
プロセッサ130は、プログラム位置(l)からエラー位置(error location)(le)を確認してよい。これに応答し、プロセッサ130は、エラー位置(le)からターゲット位置(ltarget)までの最短距離を計算してよい。ここで、ターゲット位置(ltarget)とは、プログラム位置(l)のうちの1つであって、エラー位置(le)と少なくとも1つの関数によって連関するブロック位置(lblock)を示してよい。プロセッサ130は、エラー位置(le)から逆に追跡しながら、ターゲット位置(ltarget)までの最短距離を計算してよい。このために、プロセッサ130は、エラー位置(le)から繋がる少なくとも1つのエッジを逆に追跡しながら、エラー位置(le)と連関する有効な(valid)経路上の少なくとも1つのブロック位置(lblock)の個数をカウントし、これによってターゲット位置(ltarget)に対して最短距離を計算してよい。このとき、プロセッサ130は、有効な経路上の非ブロック位置(lnon-block)は無視してよい。
【0017】
このとき、プロセッサ130は、エラー位置(le)およびプログラム位置(l)のそれぞれに対し、プログラム位置(l)に対する位置変数(F(l))を設定してよい。プログラム位置(l)に対する位置変数(F(l))は、下記の数1のように、エラー位置(le)からのカウント値とエラー位置(le)との相関情報を含み、カウント値は自然数で表現され、相関情報はT(true)またはF(false)のうちの1つで表現されてよい。例えば、エラー位置(le)の位置変数(F(l))は<0、F>で設定され、終了位置(lend)の位置変数(F(l))は<∞、T>で設定されてよい。
【0018】
【0019】
ここで、distはカウント値を示してよく、fromExistは相関情報を示してよい。
【0020】
例えば、
図2に示すように、プロセッサ150は、インタープロシージャル制御フローグラフにおいて、エラー位置(l
e)からターゲット位置(l
target)までの最短距離を計算してよい。このとき、L5がエラー位置(l
e)であり、L4が終了位置(l
end)であってよい。また、L1およびL2はブロック位置(l
block)であってよく、L3は非ブロック位置(l
non-block)であってよい。このような場合、プロセッサ130は、L5から逆に追跡しながら、L2およびL1を順にカウントしてよい。これにより、プロセッサ130は、L1をターゲット位置(l
target)として確認し、L5からL1までの最短距離を2として計算してよい。
【0021】
多様な実施形態によると、インタープロシージャル制御フローグラフが構成される間に、プロセッサ130は、呼び出し関係情報を格納してよい。呼び出し関係情報は、各関数に対する関数呼び出し位置(lcall)と関数返還位置(lreturn)の対(pair)を含むものであってよい。このとき、非ブロック位置(lnon-block)は、各関数に対する関数呼び出し位置(function call location)(lcall)と関数返還位置(function return location)(lreturn)、および少なくとも1つの終了位置(end location)(lend)を含んでよい。これにより、プロセッサ130は、呼び出し関係情報に基づき、エラー位置(le)からターゲット位置(ltarget)までの最短距離を計算してよい。
【0022】
例えば、
図3に示すように、プロセッサ130は、呼び出し関係情報に基づき、インタープロシージャル制御フローグラフにおいて、エラー位置(l
e)からターゲット位置(l
target)までの最短距離を計算してよい。このとき、L43がエラー位置(l
e)であり、プロセッサ130はL43のカウント値を0に設定してよい。先ず、プロセッサ130は、L43から逆に追跡しながら、L42を検出してよい。このとき、L42はブロック位置(l
block)であるため、プロセッサ130はカウント値を1に増加させてよい。この後、プロセッサ130は、L42から逆に追跡しながら、L41を検出してよい。L41はp関数の関数返還位置(l
return)であるため、プロセッサ130は、L41からL26をp関数の関数呼び出し位置(l
call)として検出してよい。このとき、L41およびL26は非ブロック位置(l
non-block)であるため、プロセッサ130はカウント値を1に維持させてよい。このような方式により、プロセッサ130は、L43から逆に追跡しながら、L42、L32、およびL21を順にカウントしてよい。これにより、プロセッサ130は、L21をターゲット位置(l
target)として確認し、L43からL21までの最短距離を3として計算してよい。
【0023】
図4は、多様な実施形態における、コンピュータシステム100による方法を示した図である。
【0024】
図4を参照すると、コンピュータシステム100は、段階410で、インタープロシージャル制御フローグラフを構成してよい。プロセッサ130は、プログラムの少なくとも1つの関数(function)を実行しながら、インタープロシージャル制御フローグラフを構成してよい。このとき、インタープロシージャル制御フローグラフは、複数のプログラム位置(l)とプログラム位置(1)との間をそれぞれ連結する複数のエッジを含んでよい。プログラム位置は、ブロック位置(l
block)と非ブロック位置(l
non-block)を含んでよい。ここで、ブロック位置(l
block)は、ユーザの必要によって事前に定義される位置であって、プログラム位置(l)からユーザによって選択されてよい。一方、非ブロック位置(l
non-block)は、プログラム位置(l)からブロック位置(l
block)を除いた残りを示してよい。非ブロックロック位置(l
non-block)は、各関数に対する関数呼び出し位置(l
call)と関数返還位置(l
return)、および少なくとも1つの終了位置(l
end)を含んでよい。インタープロシージャル制御フローグラフが構成される間に、プロセッサ130は、呼び出し関係情報を格納してよい。呼び出し関係情報は、各関数に対する関数呼び出し位置(l
call)と関数返還位置(l
return)の対(pair)を含んでよい。
【0025】
次に、コンピュータシステム100は、段階420で、プログラム位置(l)からエラー位置(le)を確認してよい。インタープロシージャル制御フローグラフが構成される間に、プロセッサ130は、エラー位置(le)を検出してよい。このとき、プロセッサ130は、エラー位置(le)に対応して、プログラム位置(l)に対する位置変数(F(l))を初期設定してよい。例えば、エラー位置(le)の位置変数(F(l))は<0、F>に設定されてよい。この後、プロセッサ130は、終了位置(lend)に対応して、プログラム位置(l)に対する位置変数(F(l))を設定してよい。例えば、終了位置(lend)の位置変数(F(l))は<∞、T>に設定されてよい。
【0026】
次に、コンピュータシステム100は、段階430で、呼び出し関係情報に基づき、エラー位置(l
e)からターゲット位置(l
target)までの最短距離を計算してよい。ここで、ターゲット位置(l
target)は、プログラム位置(l)のうちの1つであって、エラー位置(l
e)と少なくとも1つの関数によって連関するブロック位置(l
block)を示してよい。プロセッサ130は、エラー位置(l
e)から逆に追跡しながら、ターゲット位置(l
target)までの最短距離を計算してよい。このために、プロセッサ130は、エラー位置(l
e)から繋がる少なくとも1つのエッジを逆に追跡しながら、エラー位置(l
e)と連関する有効な経路上の少なくとも1つのブロック位置(l
block)の個数をカウントしてよい。このとき、プロセッサ130は、エラー位置(l
e)を基準に、プログラム位置(l)に対して位置変数(F(l))を順に設定してよい。これにより、プロセッサ130は、ターゲット位置(l
target)に対して最短距離を計算してよい。このとき、プロセッサ130は、有効な経路上の非ブロック位置(l
non-block)は無視してよい。これについては、
図5を参照しながらより詳しく説明する。
【0027】
図5は、
図4の最多距離計算段階(段階430)をより詳しく説明した図である。
【0028】
図5を参照すると、コンピュータシステム100は、段階510で、現在位置に対して、隣接プログラム位置を検出してよい。このとき、現在位置に対して、プログラム位置(l)に対する位置変数(F(l))は<dist、F>または<dist、T>に設定されていてよい。ここで、現在位置がエラー位置であれば、現在位置に対して、エラー位置(l
e)に対する位置変数(F(l))は<0、F>に設定されていてよい。現在位置がエラー位置(l
e)であれば、プロセッサ130は、エッジにより、エラー位置(l
e)と連結するプログラム位置(l)を隣接プログラム位置として検出してよい。または、現在位置がエラー位置(l
e)ででない、あるプログラム位置(l)であれば、プロセッサ130は、エラー位置(l
e)から遠ざかる方向に、現在プログラム位置(l)と連結する他のプログラム位置(l)を隣接プログラム位置として検出してよい。これにより、現在位置は以前位置が転換され、隣接プログラム位置は現在位置が転換されてよい。次に、コンピュータシステム100は、段階520で、隣接プログラム位置がブロック位置(l
block)かどうかを判断してよい。
【0029】
段階520で、隣接プログラム位置がブロック位置(lblock)でないと判断されれば、コンピュータシステム100は、段階530で、隣接プログラム位置が関数返還位置(lreturn)かどうかを判断してよい。このとき、プロセッサ130は、隣接プログラム位置に対して、プログラム位置(l)に対する位置変数(F(l))を設定してよい。隣接プログラム位置はブロック位置(lblock)でないため、プロセッサ130は、以前位置に対して設定されたカウント値を隣接プログラム位置、すなわち、現在位置のカウント値として設定してよい。この後、プロセッサ130は、エラー位置(le)と関連し、隣接プログラム位置に対する相関情報を設定してよい。以前位置がエラー位置(le)であれば、プロセッサ130は、隣接プログラム位置の位置変数(F(l))を<0、F>または<0、T>に設定してよい。または、以前位置がエラー位置(le)でない、あるプログラム位置であれば、プロセッサ130は、隣接プログラム位置の位置変数(F(l))を<dist、F>または<dist、T>に設定してよい。この後、プロセッサ130は、呼び出し関係情報に基づき、隣接プログラム位置が関数返還位置(lreturn)かどうかを判断してよい。
【0030】
段階530で、隣接プログラム位置が関数返還位置(lreturn)でないと判断されれば、コンピュータシステム100は、段階510にリターンしてよい。プロセッサ130は、隣接プログラム位置を現在位置として見なし、段階510を実行してよい。このとき、隣接プログラム位置は終了位置(lend)であってよい。
【0031】
一方、段階530で、隣接プログラム位置が関数返還位置(lreturn)であると判断されれば、コンピュータシステム100は、段階540で、関数返還位置(lreturn)に対応する関数呼び出し位置(lcall)に移動してよい。このとき、プロセッサ130は、関数呼び出し位置(lcall)に対して、プログラム位置(l)に対する位置変数(F(l))を設定してよい。関数呼び出し位置(lcall)はブロック位置でないため、プロセッサ130は、関数返還位置(lreturn)に対して設定されたカウント値を関数呼び出し位置(lcall)のカウント値として設定してよい。ここで、関数返還位置(lreturn)と関数呼び出し位置(lcall)との間に少なくとも1つの他のプログラム位置が存在する場合、プロセッサ130は、関数呼び出し位置(lcall)のカウント値をそのプログラム位置のカウント値として設定してよい。この後、プロセッサ130は、エラー位置(le)と関連し、関数呼び出し位置(lcall)に対する相関情報を設定してよい。ここで、関数返還位置(lreturn)と関数呼び出し位置(lcall)との間に少なくとも1つの他のプログラム位置が存在する場合、プロセッサ130は、そのプログラム位置に対しても相関情報を設定してよい。この後、コンピュータシステム100は、段階510にリターンしてよい。プロセッサ130は、関数呼び出し位置(lcall)を現在位置として見なし、段階510を実行してよい。
【0032】
一方、段階520で、隣接プログラム位置がブロック位置(lblock)であると判断されれば、コンピュータシステム100は、段階550で、カウント値を増加させてよい。このとき、プロセッサ130は、隣接プログラム位置に対して、プログラム位置(l)に対する位置変数(F(l))を設定してよい。隣接プログラム位置はブロック位置であるため、プロセッサ130は、以前位置に対して設定されたカウント値を1だけ増加させ、隣接プログラム位置、すなわち、現在位置のカウント値として設定してよい。この後、プロセッサ130は、エラー位置(le)と関連し、隣接プログラム位置に対する相関情報を設定してよい。以前位置がエラー位置(le)であれば、プロセッサ130は、隣接プログラム位置の位置変数(F(l))を<1、F>または<1、T>に設定してよい。または、以前位置がエラー位置(le)でない、あるプログラム位置であれば、プロセッサ130は、隣接プログラム位置の位置変数(F(l))を<dist+1、F>または<dist+1、T>に設定してよい。次に、コンピュータシステム100は、段階560で、隣接プログラム位置がターゲット位置(ltarget)かどうかを判断してよい。
【0033】
段階560で、隣接プログラム位置がターゲット位置(ltarget)でないと判断されれば、コンピュータシステム100は、段階510にリターンしてよい。プロセッサ130は、隣接プログラム位置を現在位置として見なし、段階510を実行してよい。
【0034】
一方、段階560で、隣接プログラム位置がターゲット位置(ltarget)であると判断されれば、コンピュータシステム100は、段階570で、カウント値を最短距離として計算してよい。プロセッサ130は、隣接プログラム位置に対して設定されたカウント値を最短距離として計算してよい。このとき、プロセッサ130は、隣接プログラム位置の位置変数(F(l))に基づき、最短距離を計算してよい。
【0035】
多様な実施形態によると、コンピュータシステム100は、インタープロシージャル制御フローグラフでエラー位置(le)から逆に追跡しながら、エラー位置(le)と連関するプログラム位置(l)までの最短距離を計算してよい。これにより、コンピュータシステム100は、インタープロシージャル制御フローグラフにおいてすべてのプログラム位置(l)間の位置対に対する距離を計算しなくても、エラー位置(le)までの最短距離を計算することができる。したがって、コンピュータシステム100が、インタープロシージャル制御フローグラフでエラー位置(le)までの最短距離を計算するのにかかる時間を減らすことできる。さらに、コンピュータシステム100が、インタープロシージャル制御フローグラフでエラー位置(le)までの最短距離を効率的に計算することができる。
【0036】
多様な実施形態は、インタープロシージャル制御フローグラフにおいて各プログラム位置(l)からエラー位置(le)までの最短距離を効率的に計算するためのコンピュータシステム100およびその方法を提供する。
【0037】
多様な実施形態によると、コンピュータシステム100の方法は、エラー位置(le)を確認する段階、およびエラー位置(le)と繋がる少なくとも1つのエッジを追跡しながら、エラー位置(le)と少なくとも1つの関数によって連関するプログラム位置(l)に対して最短距離を計算する段階を含んでよい。
【0038】
多様な実施形態によると、コンピュータシステム100の方法は、インタープロシージャル制御フローグラフが構成される間に、各関数に対する関数呼び出し位置(lcall)と関数返還位置(lreturn)の対を含む呼び出し関係情報を格納する段階をさらに含んでよい。
【0039】
多様な実施形態によると、最短距離を計算する段階は、呼び出し関係情報に基づき、エラー位置(le)と連関する少なくとも1つの関数に対する関数返還位置(lreturn)と関数呼び出し位置(lcall)を逆に追跡して、最短距離を計算してよい。
【0040】
多様な実施形態によると、インタープロシージャル制御フローグラフは、複数のプログラムグラム位置(l)を含んでよい。
【0041】
多様な実施形態によると、複数のエッジがプログラム位置(l)の間をそれぞれ連結してよい。
【0042】
多様な実施形態によると、プログラム位置(l)のうちの2つが、各関数に対する関数呼び出し位置(lcall)と関数返還位置(lreturn)であってよい。
【0043】
多様な実施形態によると、プログラム位置(l)は、少なくとも1つのブロック位置(lblock)を含んでよい。
【0044】
多様な実施形態によると、最短距離を計算する段階は、エラー位置(le)からプログラム位置(l)までのブロック位置(lblock)の個数をカウントし、最短距離として計算してよい。
【0045】
多様な実施形態によると、プログラム位置(l)は、少なくとも1つの非ブロック位置(lnon-block)をさらに含んでよい。
【0046】
多様な実施形態によると、最短距離を計算する段階は、エラー位置からプログラム位置(l)の間の非ブロック位置(lnon-block)は無視してよい。
【0047】
多様な実施形態によると、プログラム位置(l)のうちの少なくとも1つは、終了位置(lend)であってよい。
【0048】
多様な実施形態によると、各関数に対する関数呼び出し位置(lcall)と関数返還位置(lreturn)、および終了位置(lend)のそれぞれは、非ブロック位置(lnon-block)であってよい。
【0049】
多様な実施形態によると、最短距離を計算する段階は、エラー位置(le)から逆に追跡しながら、エラー位置(le)を基準に、プログラム位置(l)のそれぞれに対して、位置変数を設定する段階、およびプログラム位置(l)の位置変数に基づき、最短距離を計算する段階を含んでよい。
【0050】
多様な実施形態によると、位置変数は、エラー位置(le)からのカウント値、またはエラー位置(le)との相関情報のうちの少なくとも1つを含んでよい。
【0051】
多様な実施形態によると、コンピュータシステム100は、メモリ120、およびメモリ120に接続され、メモリ120に記録された少なくとも1つの命令を実行するように構成されたプロセッサ130を含んでよい。
【0052】
多様な実施形態によると、プロセッサ130は、エラー位置(le)を確認し、エラー位置(le)から繋がる少なくとも1つのエッジを追跡しながら、エラー位置(le)と少なくとも1つの関数によって連関するプログラム位置(l)に対して最短距離を計算するように構成されてよい。
【0053】
多様な実施形態によると、プロセッサ130は、インタープロシージャル制御フローグラフが構成される間に、各関数に対する関数呼び出し位置(lcall)と関数返還位置(lreturn)の対を含む呼び出し関係情報を格納し、呼び出し関係情報に基づき、エラー位置(le)と連関する少なくとも1つの関数に対する関数返還位置(lreturn)と関数呼び出し位置(lcall)を逆に追跡して、最短距離を計算するように構成されてよい。
【0054】
多様な実施形態によると、インタープロシージャル制御フローグラフは、複数のプログラムグラム位置(l)を含んでよい。
【0055】
多様な実施形態によると、複数のエッジがプログラム位置(l)の間をそれぞれ連結してよい。
【0056】
多様な実施形態によると、プログラム位置(l)のうちの2つが、各関数に対する関数呼び出し位置(lcall)と関数返還位置(lreturn)であってよい。
【0057】
多様な実施形態によると、プログラム位置(l)は、少なくとも1つのブロック位置(lblock)を含んでよい。
【0058】
多様な実施形態によると、プロセッサ130は、エラー位置(le)からプログラム位置(l)までのブロック位置(lblock)の個数をカウントし、最短距離として計算するように構成されてよ。
【0059】
多様な実施形態によると、プログラム位置(l)は、少なくとも1つの非ブロック位置(lnon-block)をさらに含んでよい。
【0060】
多様な実施形態によると、プロセッサ130は、エラー位置(le)からプログラム位置(l)の間の非ブロック位置(lnon-block)は無視するように構成されてよい。
【0061】
多様な実施形態によると、プログラム位置(l)のうちの少なくとも1つは、終了位置(lend)であってよい。
【0062】
多様な実施形態によると、各関数に対する関数呼び出し位置(lcall)と関数返還位置(lreturn)、および終了位置(lend)のそれぞれは、非ブロック位置(lnon-block)であってよい。
【0063】
多様な実施形態によると、プロセッサ130は、エラー位置(le)から逆に追跡しながら、エラー位置(le)を基準に、プログラム位置(l)のそれぞれに対して、位置変数を設定し、プログラム位置(l)の位置変数に基づき、最短距離を計算してよい。
【0064】
多様な実施形態によると、位置変数は、エラー位置(le)からのカウント値またはエラー位置(le)との相関情報のうちの少なくとも1つを含んでよい。
【0065】
上述した装置は、ハードウェア構成要素、ソフトウェア構成要素、および/またはハードウェア構成要素とソフトウェア構成要素との組み合わせによって実現されてよい。例えば、実施形態で説明された装置および構成要素は、プロセッサ、コントローラ、ALU(arithmetic logic unit)、デジタル信号プロセッサ、マイクロコンピュータ、FPGA(field programmable gate array)、PLU(programmable logic unit)、マイクロプロセッサ、または命令を実行して応答することができる様々な装置のように、1つ以上の汎用コンピュータまたは特殊目的コンピュータを利用して実現されてよい。処理装置は、オペレーティングシステム(OS)および前記OS上で実行される1つ以上のソフトウェアアプリケーションを実行してよい。また、処理装置は、ソフトウェアの実行に応答し、データにアクセスし、データを格納、操作、処理、および生成してもよい。理解の便宜のために、1つの処理装置が使用されるとして説明される場合もあるが、当業者は、処理装置が複数個の処理要素および/または複数種類の処理要素を含んでもよいことが理解できるであろう。例えば、処理装置は、複数個のプロセッサまたは1つのプロセッサおよび1つのコントローラを含んでよい。また、並列プロセッサのような、他の処理構成も可能である。
【0066】
ソフトウェアは、コンピュータプログラム、コード、命令、またはこれらのうちの1つ以上の組み合わせを含んでもよく、思うままに動作するように処理装置を構成したり、独立的または集合的に処理装置に命令したりしてよい。ソフトウェアおよび/またはデータは、処理装置に基づいて解釈されたり、処理装置に命令またはデータを提供したりするために、いかなる種類の機械、コンポーネント、物理装置、コンピュータ格納媒体または装置に具現化されてよい。ソフトウェアは、ネットワークによって接続されたコンピュータシステム上に分散され、分散された状態で格納されても実行されてもよい。ソフトウェアおよびデータは、1つ以上のコンピュータ読み取り可能な記録媒体に格納されてよい。
【0067】
多様な実施形態に係る方法は、多様なコンピュータ手段によって実行可能なプログラム命令の形態で実現されてコンピュータ読み取り可能な媒体に記録されてよい。このとき、媒体は、コンピュータ実行可能なプログラムを継続して記録するものであっても、実行またはダウンロードのために一時記録するものであってもよい。また、媒体は、単一または複数のハードウェアが結合した形態の多様な格納手段または格納手段であってよく、あるコンピュータシステムに直接接続する媒体に限定されることはなく、ネットワーク上に分散して存在するものであってもよい。媒体の例としては、ハードディスク、フロッピー(登録商標)ディスク、および磁気テープのような磁気媒体、CD-ROMおよびDVDのような光媒体、フロプティカルディスク(floptical disk)のような光磁気媒体、およびROM、RAM、フラッシュメモリなどを含み、プログラム命令語が記録されるように構成されたものであってよい。また、媒体の他の例として、アプリケーションを配布するアプリケーションストアやその他の多様なソフトウェアを供給または配布するサイト、サーバなどで管理する記録媒体または格納媒体が挙げられる。
【0068】
本文書の多様な実施形態およびこれに使用された用語は、本文書に記載された技術を特定の実施形態だけに対して限定するためのものではなく、該当の実施例の多様な変更、均等物、および/または代替物を含むものと理解されなければならない。図面の説明と関連し、類似する構成要素に対しては類似する参照符号を付与した。単数の表現は、文脈上で明らかに異なるように意味していない限り、複数の表現を含んでよい。本文書において、「AまたはB」、「Aおよび/またはBのうちの少なくとも1つ」、「A、B、またはC」、または「A、B、および/またはCのうちの少なくとも1つ」などの表現は、ともに羅列される項目のすべての可能な組み合わせを含んでよい。「第1」、「第2」、「1番目」、または「2番目」などの表現は、該当の構成要素を順序または重要度とは関係なく修飾するものであり、ある構成要素を他の構成要素と区分するために使用されるものに過ぎず、該当の構成要素を限定するためのものではない。ある(例:第1)構成要素が他の(例:第2)構成要素に「(機能的にまたは通信的に)連結されて」いるか「接続されて」いると記載されるときには、前記ある構成要素が前記他の構成要素に直接に連結されているのはもちろん、他の構成要素(例:第3構成要素)を介して連結されている場合も含まれる。
【0069】
本文書で使用される用語「モジュール」は、ハードウェア、ソフトウェア、またはファームウェアで構成されたユニットを含み、例えば、ロジック、論理ブロック、部品、または回路などの用語と互換的に使用されてよい。モジュールは、一体で構成された部品、または1つまたはそれ以上の機能を実行する最小単位またはその一部であってよい。例えば、モジュールは、ASIC(application-specific integrated circuit)で構成されてよい。
【0070】
多様な実施形態によると、記載した構成要素のそれぞれの構成要素(例:モジュールまたはプログラム)は、単数または複数の個体を含んでよい。多様な実施形態によると、上述した該当の構成要素のうちの1つ以上の構成要素または段階が省略されてもよいし、1つ以上の他の構成要素または段階が追加されてもよい。大体的にまたは追加的に、複数の構成要素(例:モジュールまたはプログラム)は、1つの構成要素として統合されてよい。このような場合、統合された構成要素は、複数の構成要素それぞれの構成要素の1つ以上の機能を、統合される前に複数の構成要素のうちの該当の構成要素によって実行されるときと同一または類似するように実行してよい。多様な実施形態によると、モジュール、プログラム、または他の構成要素によって実行される段階は、順次的に、並列的に、反復的に、または発見的に実行されても、段階のうちの1つ以上が他の順序で実行されても、省略されても、または1つ以上の他の段階が追加されてもよい。
【符号の説明】
【0071】
100:コンピュータシステム
110:インタフェースモジュール
120:メモリ
130:プロセッサ