JP2010157147A - ソフトウェア検査装置、ソフトウェア検査方法およびソフトウェア検査プログラム - Google Patents
ソフトウェア検査装置、ソフトウェア検査方法およびソフトウェア検査プログラム Download PDFInfo
- Publication number
- JP2010157147A JP2010157147A JP2008335654A JP2008335654A JP2010157147A JP 2010157147 A JP2010157147 A JP 2010157147A JP 2008335654 A JP2008335654 A JP 2008335654A JP 2008335654 A JP2008335654 A JP 2008335654A JP 2010157147 A JP2010157147 A JP 2010157147A
- Authority
- JP
- Japan
- Prior art keywords
- semaphore
- shared resources
- managed
- detected
- software
- 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.)
- Withdrawn
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
【課題】1つのセマフォで管理している複数の共有リソースのうち、個別のセマフォで管理すべき共有リソースをソースコードの静的解析で検出。
【解決手段】ソースコードを入力するためのソースコード入力部11と、入力されたソースコードの中のセマフォを検出するためのセマフォ検出部13と、検出されたセマフォごとに、管理されている複数の共有リソースを検出するための共有リソース検出部14と、検出されたセマフォごとに、管理されている複数の共有リソースそれぞれについて、他の共有リソースとアクセスタイミングに関連があるかどうかを判定するための判定表生成部15と、検出されたセマフォごとに、管理されている複数の共有リソースのうちアクセスタイミングに関連のある共有リソースについてグループ化処理を行なうための独立リソース判定部16と、検出されたセマフォごとに、グループ化処理の結果を出力するための結果出力部17とを備える。
【選択図】図4
【解決手段】ソースコードを入力するためのソースコード入力部11と、入力されたソースコードの中のセマフォを検出するためのセマフォ検出部13と、検出されたセマフォごとに、管理されている複数の共有リソースを検出するための共有リソース検出部14と、検出されたセマフォごとに、管理されている複数の共有リソースそれぞれについて、他の共有リソースとアクセスタイミングに関連があるかどうかを判定するための判定表生成部15と、検出されたセマフォごとに、管理されている複数の共有リソースのうちアクセスタイミングに関連のある共有リソースについてグループ化処理を行なうための独立リソース判定部16と、検出されたセマフォごとに、グループ化処理の結果を出力するための結果出力部17とを備える。
【選択図】図4
Description
本発明は、ソフトウェア検査装置、ソフトウェア検査方法およびソフトウェア検査プログラムであって、特に、セマフォを使用したソフトウエアを検査することにより、1つのセマフォにおいて管理されている共有リソース間のアクセスタイミングについての関係を出力するためのソフトウェア検査装置、ソフトウェア検査方法およびソフトウェア検査プログラムに関する。
複数の処理が同時に実行されるプログラムにおいて、複数の処理が共通のリソース(変数)に同時にアクセスすると、データの不整合が発生するなど不具合の原因となる。そのため、通常はセマフォ等の技術を用いて1つの処理のみが共有リソースを占有してアクセスする方法をとる。
基本的には1つの共有リソースを1つのセマフォが管理すべきであるが、実際にはセマフォが使用するメモリ量を減らす、あるいはセマフォによるロック/アンロックの手間を削減するため、複数の共有リソースを1つのセマフォで管理するということが行われている。
例えば特許文献1では、セマフォが使用するメモリ量を減らす工夫をしている。また、特許文献2では、セマフォなどのSW(ソフトウェア)資源の長い待ち時間の原因を特定するために、待ちプロセスの多いSW資源を検出することが記載されている。
特開昭63−201732号公報
特開2005−339437号公報
実際にはアクセスの競合が起きない2以上の共有リソースが、1つのセマフォで管理されると、不必要な待ち時間が生じる場合がある。したがって、1つのセマフォで管理されている複数の共有リソースに、本来別のセマフォで管理すべき共有リソースが含まれるか否かを検出することができれば有用である。
一般的に、共有リソースへのアクセスの競合(排他制御不具合)による待ちの発生の検出は動的解析により行なわれる。このため、処理内の条件分岐を網羅するために、条件を変更して動的解析を行なう必要があり、解析に相当な時間がかかる。また、このような解析を行なうためには、動的解析の実行に必要な環境を別途用意する必要がある。
上述の従来技術では、1つのセマフォで管理されている複数の共有リソースに、本来別のセマフォで管理すべき共有リソースが含まれるか否かの検出までは行なわれていない。
本発明は、上記のような問題を解決するためになされたものであって、その目的は、1つのセマフォで管理している複数の共有リソースのうち、個別のセマフォで管理すべき共有リソースをソースコードの静的解析で検出することのできるソフトウェア検査装置、ソフトウェア検査方法およびソフトウェア検査プログラムを提供することである。
この発明のある局面に従うソフトウェア検査装置は、セマフォを使用したソフトウエアを検査することにより、1つのセマフォにおいて管理されている共有リソース間のアクセスタイミングについての関係を出力するためのソフトウェア検査装置であって、解析対象となるソフトウェアのソースコードを入力するための入力手段と、入力手段から入力されたソースコードの中のセマフォを検出するためのセマフォ検出手段と、セマフォ検出手段で検出されたセマフォごとに、管理されている複数の共有リソースを検出するための共有リソース検出手段と、検出されたセマフォごとに、管理されている複数の共有リソースそれぞれについて、他の共有リソースとアクセスタイミングに関連があるかどうかを判定するための判定手段と、検出されたセマフォごとに、判定手段による判定結果に基づいて、管理されている複数の共有リソースのうちアクセスタイミングに関連のある共有リソースについてグループ化処理を行なうためのグループ化手段と、検出されたセマフォごとに、グループ化処理の結果を出力するための出力手段とを備える。
好ましくは、セマフォを取得および解放する関数名の指定を受付けるための関数指定手段をさらに備え、セマフォ検出手段は、指定された関数名に基づいてセマフォを検出する。
好ましくは、出力手段は、管理されている複数の共有リソースをグループ化手段によるグループ単位で出力する。
好ましくは、共有リソース検出手段は、検出されたセマフォごとに、排他区間内で用いられている共有リソースのうち、排他区間外で用いられている共有リソースを除外した共有リソースを、管理されている複数の共有リソースとして検出する。
好ましくは、判定手段は、管理されている複数の共有リソースを縦軸および横軸にした判定表を生成し、管理されている複数の共有リソースの各対について、全ての排他区間に両方含まれるか否かの判定結果を記録する。
この発明の他の局面に従うソフトウェア検査方法は、セマフォを使用したソフトウエアを検査するソフトウェア検査装置によって実行される、1つのセマフォにおいて管理されている共有リソース間のアクセスタイミングについての関係を出力するための方法であって、解析対象となるソフトウェアのソースコードを入力するステップと、入力されたソースコードの中のセマフォを検出するステップと、検出されたセマフォごとに、管理されている複数の共有リソースを検出するステップと、検出されたセマフォごとに、管理されている複数の共有リソースそれぞれについて、他の共有リソースとアクセスタイミングに関連があるかどうかを判定するステップと、検出されたセマフォごとに、管理されている複数の共有リソースのうちアクセスタイミングに関連のある共有リソースについてグループ化処理を行なうステップと、検出されたセマフォごとに、グループ化処理の結果を出力するステップとを備える。
この発明のさらに他の局面に従うソフトウェア検査プログラムは、セマフォを使用したソフトウエアを検査するソフトウェア検査装置によって実行される、1つのセマフォにおいて管理されている共有リソース間のアクセスタイミングについての関係を出力するためのプログラムであって、解析対象となるソフトウェアのソースコードを入力するステップと、入力されたソースコードの中のセマフォを検出するステップと、検出されたセマフォごとに、管理されている複数の共有リソースを検出するステップと、検出されたセマフォごとに、管理されている複数の共有リソースそれぞれについて、他の共有リソースとアクセスタイミングに関連があるかどうかを判定するステップと、検出されたセマフォごとに、管理されている複数の共有リソースのうちアクセスタイミングに関連のある共有リソースについてグループ化処理を行なうステップと、検出されたセマフォごとに、グループ化処理の結果を出力するステップとを備える。
本発明によると、1つのセマフォにおいて管理されている共有リソース間のアクセスタイミングについての関係が検出されて、出力される。したがって、ユーザは、1つのセマフォで管理している複数の共有リソースの中に、個別のセマフォで管理すべき共有リソースが存在するか否かを把握することができる。
また、ソースコードを静的に解析するため、効率的に、共有リソース間のアクセスタイミングについての関係が検出することができる。
本発明の実施の形態について図面を参照しながら詳細に説明する。なお、図中同一または相当部分には同一符号を付してその説明は繰返さない。
本発明の実施の形態におけるソフトウェア検査装置は、ソースコードの静的解析により、1つのセマフォにおいて管理されている共有リソース間のアクセスタイミングについての関係を検出して出力する。
ここで、「セマフォ」について簡単に説明する。
「セマフォ」とは、並行プログラミングにおいて同期をサポートするための機構である。このセマフォは、共有リソースを複数のプロセスが同時にアクセスするのを防ぐために使用されるが、ソフトウェアにおいて、1つのセマフォは、共有リソースとして複数の変数を管理することがある。
「セマフォ」とは、並行プログラミングにおいて同期をサポートするための機構である。このセマフォは、共有リソースを複数のプロセスが同時にアクセスするのを防ぐために使用されるが、ソフトウェアにおいて、1つのセマフォは、共有リソースとして複数の変数を管理することがある。
なお、「共有リソース」とは、その変数に割り当てられているあるメモリの中のある領域を表わすものとする。
また、セマフォがデータベースへの同時アクセスを制限するために用いられる場合には、共有リソースは、アクセス対象のデータを指すものとする。
図1は、セマフォを説明するための第1の図である。
図1を参照して、1つの「セマフォ1」によって、共有変数a,bが管理されているとする。処理1が共有変数aにアクセスするために、セマフォ1がロックされたとする。その場合、そのセマフォ1がアンロックされる前に、処理2が共有変数bにアクセスしようとすると、変数a,bが同じセマフォ1で管理されているために、タスク2は処理1の処理が終わるまで待たされてしまう。
図1を参照して、1つの「セマフォ1」によって、共有変数a,bが管理されているとする。処理1が共有変数aにアクセスするために、セマフォ1がロックされたとする。その場合、そのセマフォ1がアンロックされる前に、処理2が共有変数bにアクセスしようとすると、変数a,bが同じセマフォ1で管理されているために、タスク2は処理1の処理が終わるまで待たされてしまう。
このことについて、図2を参照してより詳細に説明する。
図2は、セマフォを説明するための第2の図である。
図2は、セマフォを説明するための第2の図である。
図2に示されるように、共有リソースとして変数a,b,cを1つのセマフォが管理していると仮定する。タスク(処理)Aが変数a,bを、タスクBが変数b,cを変更するような場合、同じ変数bを変更することになる。したがって、このような場合は、共通のセマフォによる制御が必要である。
しかし、タスクBが変数cしか変更しない場合にも、共通のセマフォによる排他制御をすると、不必要な待ち時間が発生してしまう。つまり、タスクAが共有変数a,bにアクセスするためにセマフォをロックしたあと、そのセマフォがアンロックされる前にタスクBが変数cにアクセスしようとしたとする。そうすると、変数a,b,cが同じセマフォで管理されているために、タスクAが変数cにアクセスすることがないにも関わらず、タスクBはタスクAの処理が終わるまで待たされてしまう。
なお、本実施の形態において、アクセスタイミングに関連のない変数同士を同じセマフォで管理することを、「過剰な排他制御」という。
このような場合、共有リソースa,b,cごとに個別のセマフォで管理するようにすれば不必要な待ち時間の発生は解消される。しかし、その分、セマフォが増えるのでメモリ使用量も増えてしまう。
また、1つのセマフォで管理されている複数の共有リソースを異なるセマフォで管理してよいかどうかは、その共有リソースにアクセスしている個所を1か所だけ見ただけでは判断がつかない。そのため、ソースコード全体にわたってその共有リソースにアクセスしている個所を探し出し、セマフォを分けてよいかどうかを判定しなければならない。
そこで、本実施の形態では、1つのセマフォで管理している全ての変数について、共通のセマフォで管理すべきかどうかをソースコードの静的解析で検出する。
以下に、本発明に係るソフトウェア検査装置の実施の形態について具体的に説明する。
<構成について>
(ハードウェア構成)
図3は、本発明の実施の形態におけるソフトウェア検査装置1のハードウェア構成を示すハードウェアブロック図である。
<構成について>
(ハードウェア構成)
図3は、本発明の実施の形態におけるソフトウェア検査装置1のハードウェア構成を示すハードウェアブロック図である。
図3を参照して、ソフトウェア検査装置1は、たとえば、一般的なPC(Personal Computer)で実現される。ソフトウェア検査装置1は、各種演算処理を実行するためのCPU(Central Processing Unit)210と、プログラム(ソフトウェア)や各種の情報を不揮発的に記憶するためのハードディスク部(HDD:Hard Disk Drive)212と、各種データを一時的に記憶するためのメモリ部214と、ユーザからの指示の入力を受付けるための操作部211と、各種情報を表示するためのディスプレイ部213と、着脱可能な記録媒体215aに記憶されたデータやプログラムを読み出すためのデータ読出部215と、外部機器との間でデータの授受を行なうための通信インターフェイス部217とを含む。また、上述の各部は、内部バス218を介して相互にデータを授受する。
HDD212は、プログラムやデータを保持する複数のディスクと、当該ディスクへのデータの書き込みおよび読出しを行なう駆動部(磁気ヘッドとモータを含む)とを含む。
記録媒体215aは、たとえば、CD−ROM(Compact Disk-Read Only Memory)などの光学媒体であってもよいし、USB(Universal Serial Bus)メモリなどであってもよい。
なお、ソフトウェア検査装置1は、PCに限定されず、たとえば、携帯電話やPDA(Personal Digital Assistants)などの携帯端末であってもよい。
また、ソフトウェア検査装置1は、スキャナなどの画像読取装置(図示せず)を備えていてもよい。
(機能構成)
図4は、本発明の実施の形態におけるソフトウェア検査装置1の機能構成を示す機能ブロック図である。
図4は、本発明の実施の形態におけるソフトウェア検査装置1の機能構成を示す機能ブロック図である。
図4を参照して、ソフトウェア検査装置1は、その機能として、ソースコード入力部11、ロック関数指定部12、セマフォ検出部13、共有リソース検出部14、判定表生成部15、独立リソース判定部16、および、結果出力部17を含む。
ソースコード入力部11は、解析対象となるソフトウェア(プログラム)のソースコード21を入力する。入力されるソースコード21は、コンピュータで直接扱えない非電子データの形式である。ソースコード入力部11は、入力されたソースコード21を、セマフォ検出部13が利用できる形式すなわち、コンピュータで直接扱える電子データの形式に変換する。
なお、1つのプログラムは、複数のソースコードで構成されていることが多い。このような場合、ソースコード入力部11は、複数のソースコードを入力する。
ソースコード入力部11の機能は、たとえば、HDD212のハードディスク(図示せず)に記録されたソースコードを読み出すためのデータ記録読出ヘッド(図示せず)と、CPU210とによって実現される。
なお、ソースコードを入力するデバイスは、上記に限られず、データ読出部215、または、通信インターフェイス部217であってもよい。あるいは、操作部211によってソースコードが入力されてもよい。操作部211によりソースコードが入力される場合とは、たとえば、ユーザが、紙媒体に印刷されたソースコードを手入力する場合が想定される。
または、ソースコードを入力するデバイスは、たとえば紙媒体に印刷されたソースコードを読取るための画像読取部(図示せず)であってもよい。
ロック関数指定部12は、入力対象のソースコードにおいて記述されている、セマフォを取得(ロック)および解放(アンロック)するためのロック/(および)アンロック関数名22の指定をユーザより受付ける。ロック関数指定部12は、ロック/アンロック関数の名称22を、セマフォ検出部13が利用できる形式に変換する。
ロック関数指定部12の機能は、たとえば、操作部211およびCPU210によって実現される。
セマフォ検出部13は、ソースコード入力部11から入力されたソースコードの中のセマフォを検出する。具体的には、入力されたソースコードの構文解析を行ない、ソースコード中からロック関数指定部12で指定されたロック/アンロック関数を抽出(検索)する。そして、抽出した関数でセマフォを指定している個所から、セマフォ名を検出する。つまり、指定されたロック/アンロック関数をキーワードとして、セマフォ名を検出する。セマフォ検出部13は、検出した全てのセマフォ名を含むセマフォ一覧を作成する。
共有リソース検出部14は、検出されたセマフォごとに、そのセマフォが管理している共有リソースを検出する。具体的には、検出されたセマフォごとに、ロック区間(排他区間)内で用いられている共有リソースのうち、ロック区間外で用いられている共有リソースを除外した共有リソースを、そのセマフォが管理している複数の共有リソースとして検出する。
判定表生成部15は、セマフォごとに、共有リソース検出部14で検出された複数の共有リソースのアクセスタイミングの関連の有無を示す判定表を生成する。なお、本実施の形態では、このように、判定表を用いてアクセスタイミングに関連のある組とそうでない組とを判定することとする。しかしながら、検出されたセマフォごとに、管理されている複数の共有リソースそれぞれについて、他の共有リソースとアクセスタイミングに関連があるかどうかを判定できれば、判定表を用いた判定に限定されない。
独立リソース判定部16は、判定表生成部15での判定結果に基づいて、1つのセマフォで管理している複数の共有リソースは2以上のセマフォで管理すべきか否かを判定する。より具体的には、検出されたセマフォごとに、管理されている複数の共有リソースのうちアクセスタイミングに関連のある共有リソースについてグループ化処理を行なう。2以上のグループができた場合には、2以上のセマフォで管理すべきと判定することができる。
なお、複数の共有リソースに優先順位をつけて、別のセマフォで管理すべき(独立して扱うべき)共有リソースがどれであるかを検出してもよい。優先順位は、たとえば、共有リソースの検出順に従ってもよい。つまり、1つ目のソースコードで検出された1つ目の共有リソースを最優先としてもよい。
セマフォ検出部13、共有リソース検出部14、判定表生成部15および独立リソース判定部16による機能は、たとえば、CPU210によって実現される。
結果出力部17は、独立リソース判定部16による判定結果に基づいて、独立して扱うべき共有リソースの一覧23を出力する。具体的には、アクセスタイミングに関連のあるグループごとに、そのグループに含まれる共有リソースの名称を出力する。
結果出力部17の機能は、たとえば、CPU100およびディスプレイ部213によって実現される。
なお、上記機能ブロックのうちの少なくとも1つについては、ハードウェアで実現されてもよい。
<動作について>
図5〜図15を用いて、ソフトウェア検査装置の動作について説明する。
図5〜図15を用いて、ソフトウェア検査装置の動作について説明する。
図5は、本発明の実施の形態における過剰排他制御検出処理の流れを示すフローチャートである。図5のフローチャートに示す処理は、予めプログラムとしてHDD212に格納されており、CPU210がこのプログラムを読み出して実行することにより、過剰排他制御検出処理の機能が実現される。
図5を参照して、ソースコード入力部11は、解析対象のソフトウェア(プログラム)を構成する(1以上の)ソースコードを読込む(ステップST2)。そして、読込んだソースコードをコンピュータが扱える形式に変換する。
次に、ロック関数指定部12は、ロック/アンロック関数の指定を読込む(ステップST4)。ロック/アンロック関数の指定は、たとえば、ユーザによって行なわれる。ロック関数指定部12は、たとえば、ソースコードが入力されると、ディスプレイ部213に、ロック/アンロック関数名を入力させるための画面を表示する。そして、ユーザによりロック/アンロック関数名が入力されると、入力された関数名を、コンピュータが扱える形式に変換する。
図6は、図5のステップST4において指定されるロック/アンロック関数名の一例を示す図である。
なお、本実施の形態では、ユーザからの指示によってロック/アンロック関数が指定されるものとするが、これに代えて次のような処理を行なってもよい。つまり、たとえばHDD212には、ソースコードに用いられる複数の言語それぞれに対応付けて、複数対のロック/アンロック関数を記憶させておく。そして、ロック関数指定部12は、ソースコード入力部11が入力したソースコードに用いられている言語を解析し、その解析結果に応じて、対応するロック/アンロック関数を選択してもよい。
再び図5を参照して、セマフォ検出部13は、セマフォ一覧を初期化し(ステップST6)、セマフォ検出処理を実行する(ステップST8)。
(セマフォ検出処理)
図7は、本発明の実施の形態におけるセマフォ検出処理を示すフローチャートである。
図7は、本発明の実施の形態におけるセマフォ検出処理を示すフローチャートである。
図7を参照して、セマフォ検出部13は、入力されたソースコード(形式が変換されたもの)から、図5のステップST4で指定されたロック関数またはアンロック関数(つまり、ユーザにより入力されたロック/アンロック関数名に対応する関数)を検索する(ステップST102)。
ロック関数またはアンロック関数が見つけられると(ステップST104においてYES)、見つかった関数からセマフォ名を特定し、セマフォ一覧へ追加する(ステップST106)。つまり、検索された関数でセマフォを指定している箇所からセマフォ名を取得し、取得したセマフォ名をセマフォ一覧に追加する。
この処理が終わると、ステップST102に戻り、関数の検索を繰返す。
ステップST104において、対応するロック関数またはアンロック関数が見つけられなかったと判断されると(ステップST104においてNO)、セマフォ検出処理は終了される。
ステップST104において、対応するロック関数またはアンロック関数が見つけられなかったと判断されると(ステップST104においてNO)、セマフォ検出処理は終了される。
このようにして、指定されたロック/アンロック関数が用いられている全てのセマフォ名を含むセマフォ一覧が生成される。
図8は、セマフォ検出部13によって生成されるセマフォ一覧の一例を示す図である。
図8を参照して、図5のステップST2において異なるソースコード1〜3が入力されたとする。ソースコード1では、セマフォ名として「S1」が検出される。ソースコード2では、セマフォ名「S2」が検出されている。ソースコード3では、セマフォ名「S3」および「S4」が検出されている。そのため、セマフォ一覧には、検出されたS1、S2、S3およびS4が含まれる。
図8を参照して、図5のステップST2において異なるソースコード1〜3が入力されたとする。ソースコード1では、セマフォ名として「S1」が検出される。ソースコード2では、セマフォ名「S2」が検出されている。ソースコード3では、セマフォ名「S3」および「S4」が検出されている。そのため、セマフォ一覧には、検出されたS1、S2、S3およびS4が含まれる。
再び図5を参照して、セマフォ検出処理が終わると、生成されたセマフォ一覧のうち1つのセマフォが選択される(ステップST10)。そして、選択されたセマフォについて、以下に示すような、別のセマフォで管理すべき共有リソースがあるかどうかの判定が行なわれる。
(共有リソース検出処理)
選択中のセマフォについて、まず、共有リソース検出処理が実行される(ステップST12)。
選択中のセマフォについて、まず、共有リソース検出処理が実行される(ステップST12)。
図9は、本発明の実施の形態における共有リソース検出処理を示すフローチャートである。
図9を参照して、共有リソース検出部14は、共有リソース一覧L4を初期化する(ステップST112)。
次に、共有リソース検出部14は、選択中のセマフォを用いているロック関数とアンロック関数を検索する(ステップST114)。そして、検索された関数の中でのそのセマフォに関する(複数の)ロック区間を求める(ステップST116)。
次に、ロック区間内で使用されている変数を集合L1に登録する(ステップST118)。また、ロック区間外で使用されている変数を集合L2に登録する(ステップST120)。集合L1と集合L2との差集合L3を求め(ステップST122)、共有リソース一覧L4を更新する(ステップST124)。具体的には、共有リソース一覧L4に登録されている変数の集合と、ステップST122で得られた差集合L3との和集合となるように、共有リソース一覧L4が更新される。
次に、共有リソース検出部14は、ステップST116で求められた全てのロック区間についての処理が終了したか否かを判断する(ステップST126)。未終了であれば(ステップST126においてNO)、ステップST118に戻る。全ロック区間についての処理が終了すると(ステップST126においてYES)、共有リソース検出処理は終了される。
図10は、共有リソース検出部14によって生成される共有リソース一覧L4を説明するための図である。
図10を参照して、セマフォS1を用いている1つ目のロック区間が左図に示され、同じセマフォS1を用いている2つ目のロック区間が右図に示されているとする。この図において、“sem_lock()”がロック関数、“sem_unlock()”がアンロック関数であるとする。
図10の左図を参照して、関数pにおける集合L1(L1pと表すことにする)は、sem_lock(S1)とsem_unlock(S1)の間で出現する変数{a,b,c,d,e,f}となる。
また、共有リソース検出部14は、指定されたロック/アンロック関数で排他制御を行っていない変数の候補として、ロック区間外の変数の集合L2を作成する。
図10の左図を参照して、関数pにおける集合L2(L2pとする)はL2p={b}となる。したがって関数pにおける和集合L3(L3pとする)は、L3p=L1p−L2p={a,c,d,e,f}となる。
また、図10の右図を参照して、関数qにおける和集合L3(L3qとする)は、同様の処理を行なうと、L3q={a,c,d}となる。
そうすると、図10の例では、L3の和集合L4は、L4=L3p∪L3q={a,c,d,e,f}である。このL4が、共有リソース検出部14で検出された、セマフォS1に対する共有リソースとなる。
再び図5を参照して、共有リソース検出処理が終わると、共有リソース検出部14は、複数の共有リソースが検出されたか否かを判断する(ステップST14)。複数の共有リソースが検出された判断すると(ステップST14においてYES)、ステップST16に進む。
一方、複数の共有リソースが検出されなかったと判断した場合(ステップST14においてNO)、ステップST24に進む。
(判定表生成処理)
共有リソース検出処理が終わると、判定表生成処理が実行される(ステップST16)。
共有リソース検出処理が終わると、判定表生成処理が実行される(ステップST16)。
図11は、本発明の実施の形態における判定表生成処理を示すフローチャートである。
図11を参照して、判定表生成部15は、共有リソース検出部14で検出された、共有リソース一覧L4に含まれる共有リソースの数を“N”とし、N×Nの大きさの判定表を初期化する(ステップST132)。
図11を参照して、判定表生成部15は、共有リソース検出部14で検出された、共有リソース一覧L4に含まれる共有リソースの数を“N”とし、N×Nの大きさの判定表を初期化する(ステップST132)。
図12は、判定表生成部15によって生成される判定表を説明するための図である。図12(A)には、図10に示したセマフォS1について、ステップST132において初期化された判定表の一例が示されている。
判定表生成部15は、判定表の1マスを選択する(ステップST134)。
判定表生成部15は、判定表の1マスが選択されると、判定表のマスで指定された2つの変数が、全てのロック区間で、常に両方含まれるか、または両方含まれないかを判定する(ステップST136)。
判定表生成部15は、判定表の1マスが選択されると、判定表のマスで指定された2つの変数が、全てのロック区間で、常に両方含まれるか、または両方含まれないかを判定する(ステップST136)。
全てのロック区間で、両方含まれるまたは両方含まれないと判断された場合(ステップST138においてYES)、判定表生成部15は、判定表のマスに“○”を入れる(ステップST140)。たとえば、変数a,cの組のマスの場合、変数a,cは、集合L3pおよびL3qのいずれにも含まれているため、全てのロック区間で常に両方含まれると判断される。そのため、変数a,cの交点のマスには“○”が入る。
交点に○が入る2つの変数は、互いに、アクセスタイミングに関連のある変数であることが示される。
一方、ステップST136での判定の結果、1マスで指定される2つの変数が、全てのロック区間において片方のみが含まれると判断された場合(ステップST138においてNO)、判定表生成部15は、判定表のマスに“×”を入れる(ステップST142)。たとえば、変数a,eの組のマスの場合、変数a,eは、集合L3pでは両方含まれるが、集合L3qでは変数eは含まれていないので、片方のみが含まれると判断される。そのため、変数a,eの交点のマスには“×”が入る。
交点に×が入る2つの変数は、互いに、アクセスタイミングに関連のない変数であることが示される。
なお、判定表における変数a,aの交点のように自分自身に対する判定は必要ない。また、判定表は常に対称形になるため、判定表は右上の半分または左下の半分のみを作成すれば良い。
ステップST140またはステップST142の処理が終わると、ステップST144に進む。
ステップST144において、判定表生成部15は、全てのマスを選択済みか否かを判断する。全てのマスが選択済みでない場合(ステップST144においてNO)、ステップST134に戻り、上記処理を繰返す。一方、全てのマスを選択済みと判断された場合(ステップST144においてYES)、判定表生成処理を終了する。
図12(A)に示した初期の判定表について、判定表生成処理が実行されると、図12(B)のような判定表が生成される。
(独立リソース判定処理)
再び図5を参照して、判定表の生成が終わると、独立リソース判定処理が実行される(ステップST18)。
再び図5を参照して、判定表の生成が終わると、独立リソース判定処理が実行される(ステップST18)。
図13は、本発明の実施の形態における独立リソース判定処理を示すフローチャートである。
図13を参照して、独立リソース判定部16は、判定表生成部15によって生成された判定表をもとに、各変数をノードとし、各変数間の交点が○であればその2つの変数を表すノード間にエッジを引いて、グラフを作成する(ステップST152)。
図14は、図13のステップST152で作成されるグラフの一例を示す図である。図14には、図12(B)に示した判定表に対するグラフが示されている。
独立リソース判定部16は、グラフの連結性から、このグラフがいくつの連結部からなっているかを判定し、現在は同じセマフォで排他制御されている変数群をどのように分割すれば良いかを検出する。
具体的には、まず、グラフの1つのノードに着目し(ステップST154)、この着目したノードと繋がっているノードを変数群としてリストアップする(ステップST156)。つまり、繋がりのあるノードの変数群が、1グループとして検出される。
独立リソース判定部16は、リストアップしたノードをグラフから取除く(ステップST158)。
独立リソース判定部16は、グラフにノードが残っているか否かを判断する(ステップST160)。グラフにノードが残っていると判断された場合(ステップST160においてYES)、ステップST154に戻り上記処理を繰返す。
一方、グラフにノードが残っていないと判断した場合(ステップST160においてNO)、独立リソース判定処理は終了される。
再び図5を参照して、独立リソース判定部16は、ステップST156でリストアップ結果に応じた検査結果情報を生成する(ステップST20)。
(結果出力)
結果出力部17は、独立して扱うべき共有リソースの一覧23として、ステップST20で生成された検査結果情報を出力する(ステップST22)。具体的には、たとえば、ディスプレイ部213によって、検査結果が表示される。なお、表示による出力に限定されず、たとえば、図示しないプリンタに出力されてもよい。
結果出力部17は、独立して扱うべき共有リソースの一覧23として、ステップST20で生成された検査結果情報を出力する(ステップST22)。具体的には、たとえば、ディスプレイ部213によって、検査結果が表示される。なお、表示による出力に限定されず、たとえば、図示しないプリンタに出力されてもよい。
図15は、本発明の実施の形態において、図5のステップST22で出力される検査結果の一例を示す図である。
図15を参照して、独立して扱うべき共有リソースの一覧23は、セマフォ名に対応付けて、3つのグループ(変数群1,2,3)の欄を有している。1つのグループの欄に含まれる変数は、互いにアクセスタイミングに関連のある変数であることが示される。
図15の例では、変数a,c,dが「変数群1」の欄に含まれ、変数e,fは「変数群2」の欄に含まれている。したがって、セマフォS1は、変数a,c,d,e,fを扱っているが、これらのうち、変数a,c,dについてのアクセスタイミングと、変数e,fについてのアクセスタイミングとは、関連していないと判定されたことが示される。
これにより、プログラム開発者は、変数群1の変数a,c,dと、変数群2の変数e,fとを個別のセマフォで管理すべきことを把握することができる。
なお、図15のように、グループ化された結果をそのまま出力する例に限定されず、たとえば、別のセマフォで管理すべきグループの変数のみを出力してもよい。上記例では、変数e,fのみを別のセマフォで管理すべきグループとして出力してもよい。
再び図5を参照して、ステップST8で検出された全てのセマフォが、ステップST10で選択済みか否かが判断される(ステップST24)。つまり、全てのセマフォについて、ステップST12〜ST22の処理が実行されたか否かが判断される。
全てのセマフォを選択済みでなければ(ステップST24においてNO)、ステップST10に戻り、上述の一連の処理を繰返す。一方、全てのセマフォを選択済みと判断されると(ステップST24においてYES)、当該プログラムは終了される。
上述のように、本実施の形態によると、複数の共有リソースを1つのセマフォで管理している場合にその管理が過剰であるかどうかを検査することができる。また、独立して扱うべき共有リソースの一覧が表示されるので、プログラム開発者は、グループ(変数群)が2以上あれば、それらを別のセマフォにするようソースコードを書き換えることができる。そして、1つのセマフォで管理する共有リソースが1グループとして検出されるように調整されることによって、共有リソースへの不必要な排他制御を防止することができる。その意味で、本実施の形態におけるソフトウェア検査装置は、プログラム開発者を支援する支援装置と言い換えることもできる。
また、本実施の形態では、ソースコードを静的に解析するため、膨大な時間をかけることなく効率的に、個別のセマフォで管理すべき共有リソースがあるかどうかを検出することができる。
本実施の形態のソフトウェア検査装置が行なう、過剰排他制御検出方法(ソフトウェア検査方法)を、プログラムとして提供することもできる。このようなプログラムは、CD−ROM(Compact Disc-ROM)などの光学媒体や、メモリカードなどのコンピュータ読取り可能な記録媒体にて記録させて、プログラム製品として提供することもできる。また、ネットワークを介したダウンロードによって、プログラムを提供することもできる。
なお、本発明にかかるプログラムは、コンピュータのオペレーティングシステム(OS)の一部として提供されるプログラムモジュールのうち、必要なモジュールを所定の配列で所定のタイミングで呼出して処理を実行させるものであってもよい。その場合、プログラム自体には上記モジュールが含まれずOSと協働して処理が実行される。このようなモジュールを含まないプログラムも、本発明にかかるプログラムに含まれ得る。
また、本発明にかかるプログラムは他のプログラムの一部に組込まれて提供されるものであってもよい。その場合にも、プログラム自体には上記他のプログラムに含まれるモジュールが含まれず、他のプログラムと協働して処理が実行される。このような他のプログラムに組込まれたプログラムも、本発明にかかるプログラムに含まれ得る。
提供されるプログラム製品は、ハードディスクなどのプログラム格納部にインストールされて実行される。なお、プログラム製品は、プログラム自体と、プログラムが記憶された記憶媒体とを含む。
今回開示された実施の形態は全ての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内での全ての変更が含まれることが意図される。
1 ソフトウェア検査装置、12 ロック関数指定部、13 セマフォ検出部、14 共有リソース検出部、15 判定表生成部、16 独立リソース判定部、17 結果出力部、210 CPU、211 操作部、212 HDD、213 ディスプレイ部、214 メモリ部、215 データ読出部、215a 記録媒体、217 通信インターフェイス部、218 内部バス。
Claims (7)
- セマフォを使用したソフトウエアを検査することにより、1つのセマフォにおいて管理されている共有リソース間のアクセスタイミングについての関係を出力するためのソフトウェア検査装置であって、
解析対象となるソフトウェアのソースコードを入力するための入力手段と、
前記入力手段から入力されたソースコードの中のセマフォを検出するためのセマフォ検出手段と、
前記セマフォ検出手段で検出されたセマフォごとに、管理されている複数の共有リソースを検出するための共有リソース検出手段と、
前記検出されたセマフォごとに、前記管理されている複数の共有リソースそれぞれについて、他の共有リソースとアクセスタイミングに関連があるかどうかを判定するための判定手段と、
前記検出されたセマフォごとに、前記判定手段による判定結果に基づいて、前記管理されている複数の共有リソースのうちアクセスタイミングに関連のある共有リソースについてグループ化処理を行なうためのグループ化手段と、
前記検出されたセマフォごとに、前記グループ化処理の結果を出力するための出力手段とを備える、ソフトウェア検査装置。 - セマフォを取得および解放する関数名の指定を受付けるための関数指定手段をさらに備え、
前記セマフォ検出手段は、指定された関数名に基づいてセマフォを検出する、請求項1に記載のソフトウェア検査装置。 - 前記出力手段は、前記管理されている複数の共有リソースを前記グループ化手段によるグループ単位で出力する、請求項1または2に記載のソフトウェア検査装置。
- 前記共有リソース検出手段は、前記検出されたセマフォごとに、排他区間内で用いられている共有リソースのうち、前記排他区間外で用いられている共有リソースを除外した共有リソースを、前記管理されている複数の共有リソースとして検出する、請求項1〜3のいずれかに記載のソフトウェア検査装置。
- 前記判定手段は、前記管理されている複数の共有リソースを縦軸および横軸にした判定表を生成し、前記管理されている複数の共有リソースの各対について、全ての前記排他区間に両方含まれるか否かの判定結果を記録する、請求項4に記載のソフトウェア検査装置。
- セマフォを使用したソフトウエアを検査するソフトウェア検査装置によって実行される、1つのセマフォにおいて管理されている共有リソース間のアクセスタイミングについての関係を出力するための方法であって、
解析対象となるソフトウェアのソースコードを入力するステップと、
入力されたソースコードの中のセマフォを検出するステップと、
検出されたセマフォごとに、管理されている複数の共有リソースを検出するステップと、
前記検出されたセマフォごとに、前記管理されている複数の共有リソースそれぞれについて、他の共有リソースとアクセスタイミングに関連があるかどうかを判定するステップと、
前記検出されたセマフォごとに、前記管理されている複数の共有リソースのうちアクセスタイミングに関連のある共有リソースについてグループ化処理を行なうステップと、
前記検出されたセマフォごとに、前記グループ化処理の結果を出力するステップとを備える、ソフトウェア検査方法。 - セマフォを使用したソフトウエアを検査するソフトウェア検査装置によって実行される、1つのセマフォにおいて管理されている共有リソース間のアクセスタイミングについての関係を出力するためのプログラムであって、
解析対象となるソフトウェアのソースコードを入力するステップと、
入力されたソースコードの中のセマフォを検出するステップと、
検出されたセマフォごとに、管理されている複数の共有リソースを検出するステップと、
前記検出されたセマフォごとに、前記管理されている複数の共有リソースそれぞれについて、他の共有リソースとアクセスタイミングに関連があるかどうかを判定するステップと、
前記検出されたセマフォごとに、前記管理されている複数の共有リソースのうちアクセスタイミングに関連のある共有リソースについてグループ化処理を行なうステップと、
前記検出されたセマフォごとに、前記グループ化処理の結果を出力するステップとを備える、ソフトウェア検査プログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008335654A JP2010157147A (ja) | 2008-12-29 | 2008-12-29 | ソフトウェア検査装置、ソフトウェア検査方法およびソフトウェア検査プログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008335654A JP2010157147A (ja) | 2008-12-29 | 2008-12-29 | ソフトウェア検査装置、ソフトウェア検査方法およびソフトウェア検査プログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2010157147A true JP2010157147A (ja) | 2010-07-15 |
Family
ID=42575024
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008335654A Withdrawn JP2010157147A (ja) | 2008-12-29 | 2008-12-29 | ソフトウェア検査装置、ソフトウェア検査方法およびソフトウェア検査プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2010157147A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2014112303A1 (ja) * | 2013-01-21 | 2014-07-24 | 日産自動車株式会社 | データ更新漏れ検査装置、データ更新漏れ検査方法、データ更新漏れ検査プログラム |
JP2014197377A (ja) * | 2013-03-04 | 2014-10-16 | 株式会社リコー | 画像形成装置及び画像形成装置の制御方法 |
-
2008
- 2008-12-29 JP JP2008335654A patent/JP2010157147A/ja not_active Withdrawn
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2014112303A1 (ja) * | 2013-01-21 | 2014-07-24 | 日産自動車株式会社 | データ更新漏れ検査装置、データ更新漏れ検査方法、データ更新漏れ検査プログラム |
CN104885060A (zh) * | 2013-01-21 | 2015-09-02 | 日产自动车株式会社 | 数据漏更新检查装置、数据漏更新检查方法、数据漏更新检查程序 |
JP2014197377A (ja) * | 2013-03-04 | 2014-10-16 | 株式会社リコー | 画像形成装置及び画像形成装置の制御方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR0172472B1 (ko) | 소프트웨어 시스템 관리 장치 | |
US8296769B2 (en) | Order-relation analyzing apparatus, method, and computer program product thereof | |
JP3910302B2 (ja) | 文書表示装置および文書表示方法 | |
US20080244332A1 (en) | Machine instruction level race condition detection | |
JP2008083781A (ja) | 検証支援プログラム、該プログラムを記録した記録媒体、検証支援装置、および検証支援方法 | |
US6279025B1 (en) | Parallel processing procedure selecting apparatus and method selecting and implementing parallel-executable processing procedures | |
JP2010157147A (ja) | ソフトウェア検査装置、ソフトウェア検査方法およびソフトウェア検査プログラム | |
JPH03294925A (ja) | 同値データ項目検出方法 | |
JP2013077124A (ja) | ソフトウェアテストケース生成装置 | |
JP5001703B2 (ja) | システム設計検証装置 | |
JP3781007B2 (ja) | 計算機間のデータ引き継ぎ方法 | |
JP2008182650A (ja) | 画像形成装置及びプログラム | |
CN113468316A (zh) | 一种快速检索svn文档库的方法及*** | |
CN111414337B (zh) | 一种文件读取方法、装置、计算设备及存储介质 | |
JP6001173B2 (ja) | データ分析装置、rdfデータの拡張方法、およびデータ分析プログラム | |
JP2007207158A (ja) | サイクルシミュレーション方法、サイクルシミュレーションプログラム、該プログラムを記録した記録媒体、およびサイクルシミュレータ | |
WO2016166876A1 (ja) | プログラム診断装置、プログラム診断方法及びプログラム診断プログラム | |
JP5140332B2 (ja) | 部品管理システム | |
JP5151541B2 (ja) | タスク管理装置、タスク管理方法、及びタスク管理プログラム | |
JP4587908B2 (ja) | メタデータ生成装置、メタデータ制約定義処理装置およびその制御方法 | |
JPH10222528A (ja) | 情報処理装置及びその制御方法 | |
JP3460265B2 (ja) | 計算機間のデータ引き継ぎ方法 | |
JP2007080205A (ja) | 検索装置及び検索方法 | |
JP2009032233A (ja) | 排他制御不具合候補抽出装置、排他制御不具合候補抽出方法、および排他制御不具合候補抽出プログラム | |
JP2006018448A (ja) | 設計情報データベースシステム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A300 | Withdrawal of application because of no request for examination |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20120306 |