(57)【要約】【課題】既存のモデル検査ツールであるプログラム検査部を変更することなく、独自のＡＰＩなどツールに登録されていないＡＰＩの検証を可能とする。【解決手段】記憶媒体１５２に記憶された方法実行プログラムにより、制御部１５９が各部を制御することにより、ユーザが検証したいＡＰＩとその仕様をＡＰＩ仕様入力支援部１０１を介して入力し、この情報に基づいて検証対象のプログラム１００をプログラム検査部１０３に入力可能な形式にプログラム変換部１０２で変換してプログラム検査部１０３に出力し、プログラム検査部１０３が、変換されたプログラムを検証し、検証結果を出力し、プログラム検査部１０３から得られる検証結果を出力変換部１０４が変換して検証結果を表示部１０５に表示出力するようにした。【選択図】図１
2006127496.tif 000002
【特許請求の範囲】
【請求項１】
プログラムで用いられるＡＰＩの利用方法が仕様を満たしているか検証し、検証結果を出力するプログラム検査ステップに前置し、
前記ＡＰＩとその仕様を入力するＡＰＩ仕様入力支援ステップと、
検証対象のプログラムが前記プログラム検査ステップに入力可能な形式でない場合に入力された前記ＡＰＩとその仕様を用いて、前記検証対象のプログラムを前記プログラム検査ステップの入力可能な形式に変換し、前記プログラム検査ステップへ出力するプログラム変換ステップと、を含むＡＰＩ仕様検証方法。
【請求項２】
前記ＡＰＩ仕様入力支援ステップは、前記ＡＰＩの生成関数、解放関数、及びリソースを表現する変数を登録し、検証すべき仕様の入力作業を支援する請求項１記載のＡＰＩ仕様検証方法。
【請求項３】
前記プログラム変換ステップで前記プログラムの変換箇所を記録し、前記検証結果がエラーである場合に前記変換箇所に対応するエラーメッセージを抽出し、前記ＡＰＩ仕様入力支援ステップにおいて入力されたＡＰＩに対応するエラーメッセージを出力する出力変換ステップを、前記プログラム検査ステップに後置して、さらに含む請求項２記載のＡＰＩ仕様検証方法。
【請求項４】
コンピュータに、応用プログラムで用いられるＡＰＩの利用方法が仕様を満たしているか検証し、検証結果を出力するプログラム検査ステップに前置し、
前記ＡＰＩとその仕様を入力するＡＰＩ仕様入力支援ステップと、検証対象の応用プログラムが前記プログラム検査ステップに入力可能な形式でない場合に入力された前記ＡＰＩとその仕様を用いて、前記検証対象の応用プログラムを前記プログラム検査ステップの入力可能な形式に変換し、前記プログラム検査ステップへ出力するプログラム変換ステップと、を含むＡＰＩ仕様検証方法を実行させる方法実行プログラム。
【請求項５】
前記ＡＰＩ仕様入力支援ステップは、前記ＡＰＩの生成関数、解放関数、及びリソースを表現する変数を登録し、検証すべき仕様の入力作業を支援する請求項４記載の方法実行プログラム。
【請求項６】
前記プログラム変換ステップで前記応用プログラムの変換箇所を記録し、
前記ＡＰＩ仕様検証方法は、前記検証結果がエラーである場合に前記変換箇所に対応するエラーメッセージを抽出し、前記ＡＰＩ仕様入力支援ステップにおいて入力されたＡＰＩに対応するエラーメッセージを出力する出力変換ステップを、前記プログラム検査ステップに後置して、さらに含む請求項５記載の方法実行プログラム。
【請求項７】
コンピュータに、応用プログラムで用いられるＡＰＩの利用方法が仕様を満たしているか検証し、検証結果を出力するプログラム検査ステップに前置し、
前記ＡＰＩとその仕様を入力するＡＰＩ仕様入力支援ステップと、
検証対象の応用プログラムが前記プログラム検査ステップに入力可能な形式でない場合に入力された前記ＡＰＩとその仕様を用いて、前記検証対象の応用プログラムを前記プログラム検査ステップの入力可能な形式に変換し、前記プログラム検査ステップへ出力するプログラム変換ステップと、を含むＡＰＩ仕様検証方法を実行させる方法実行プログラムを格納する記憶媒体。
【請求項８】
前記ＡＰＩ仕様入力支援ステップは、前記ＡＰＩの生成関数、解放関数、及びリソースを表現する変数を登録し、検証すべき仕様の入力作業を支援する請求項７記載の記憶媒体。
【請求項９】
前記プログラム変換ステップで前記応用プログラムの変換箇所を記録し、前記ＡＰＩ仕様検証方法は、前記検証結果がエラーである場合に前記変換箇所に対応するエラーメッセージを抽出し、前記ＡＰＩ仕様入力支援ステップにおいて入力されたＡＰＩに対応するエラーメッセージを出力する出力変換ステップを、前記プログラム検査ステップに後置して、さらに含む請求項８記載の記憶媒体。
【請求項１０】
プログラムで用いられるＡＰＩの利用方法が仕様を満たしているか検証し、検証結果を出力するプログラム検査部に前置し、
前記ＡＰＩとその仕様を入力するＡＰＩ仕様入力支援部と、
検証対象のプログラムが前記プログラム検査部に入力可能な形式でない場合に前記ＡＰＩ仕様入力支援部から入力された前記ＡＰＩとその仕様を用いて、前記検証対象のプログラムを前記プログラム検査部の入力可能な形式に変換し、前記プログラム検査部へ出力するプログラム変換部とを、具備するＡＰＩ仕様検証装置。
【請求項１１】
前記ＡＰＩ仕様入力支援部は、前記ＡＰＩの生成関数、解放関数、及びリソースを表現する変数を登録し、検証すべき仕様の入力作業を支援する請求項１０記載のＡＰＩ仕様検証装置。
【請求項１２】
前記プログラム変換部が前記プログラムの変換箇所を記録し、前記検証結果がエラーである場合に前記変換箇所に対応するエラーメッセージを抽出し、前記ＡＰＩ仕様入力支援部において入力されたＡＰＩに対応するエラーメッセージを出力する出力変換部を、前記プログラム検査部に後置して、さらに有する請求項１１記載のＡＰＩ仕様検証装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウエアがエーピーアイ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ（以下、ＡＰＩと記す））の仕様を満たしてＡＰＩを利用していることを検証するソフトウエア検証装置及び方法、当該方法を実行させるプログラム、当該プログラムを格納する記憶媒体に関する。
【背景技術】
【０００２】
ソフトウエアモジュールが、その機能を他のソフトウエアモジュールに対して提供するインターフェースは、ＡＰＩと呼ばれる。ＡＰＩを通してソフトウエアモジュールの機能を利用する際には、ＡＰＩを利用するソフトウエアは、ＡＰＩの仕様に従ってＡＰＩを利用しなければならない。
【０００３】
例えば、Ｃ言語の標準ライブラリ関数では、ＡＰＩを利用するソフトウエアである応用プログラム（以下、アプリケーションと記す）が使用するメモリ領域を動的に確保するＡＰＩとして「ｍａｌｌｏｃ（）」，「ｃａｌｌｏｃ（）」，「ｒｅａｌｌｏｃ（）」などが用意されている。また、メモリ領域を解放するＡＰＩとして「ｆｒｅｅ（）」が用意されている。
【０００４】
このＡＰＩを使用するソフトウエアは、このＡＰＩの仕様である「メモリ確保ＡＰＩにより確保されたメモリ領域は、ｆｒｅｅ（）で解放されなければならない」という要件を満たしていなければならない。この要件を満たさないと、確保されたメモリ領域が解放されないため、メモリ資源が枯渇し、ソフトウエアがメモリ不足により停止するという故障が発生する可能性がある。
【０００５】
確保されたメモリ領域が必ず解放されているかを検証するツールとして、シービーエムシー（Ｂｏｕｎｄｅｄ  Ｍｏｄｅｌ  Ｃｈｅｃｋｉｎｇ  ｆｏｒ  ＡＮＳＩ−Ｃ（以下、ＣＢＭＣと記す））がある。ＣＢＭＣはモデル検査技術を用いて、確保された領域が必ず解放されるかを検証するツールである（非特許文献１参照）。
【非特許文献１】Ｃｌａｒｋｅ，  Ｅｄｍｕｎｄ，  Ｋｒｏｅｎｉｎｇ，  Ｄａｎｉｅｌ  ａｎｄ  Ｌｅｒｄａ，  Ｆｌａｖｉｏ，  “Ａ  Ｔｏｏｌ  ｆｏｒ  Ｃｈｅｃｋｉｎｇ  ＡＮＳＩ−Ｃ  Ｐｒｏｇｒａｍｓ”，  ｐｐ１６８−１７６，  Ｔｏｏｌｓ  ａｎｄ  Ａｌｇｏｒｉｔｈｍｓ  ｆｏｒ  ｔｈｅ  Ｃｏｎｓｔｒｕｃｔｉｏｎ  ａｎｄ  Ａｎａｌｙｓｉｓ  ｏｆ  Ｓｙｓｔｅｍｓ  （ＴＡＣＡＳ  ２００４）
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、上記に述べた従来の検証ツールは、ツールに登録されている、「ｍａｌｌｏｃ（）」，「ｆｒｅｅ（）」などのＡＰＩのみ検証可能であり、そのままでは独自ＡＰＩなどツールに未登録のＡＰＩを検証することができないことがあり得る。検証ツールを改変して検証したいＡＰＩを登録すれば検証が可能となるが、検証ツールのソースコードが配布されていない場合や、検証ツールが大規模なソフトウエアで内部構造を理解するのが困難な場合には、検証ツールの改変が困難なことがあり得る。検証ツールは、ハードウエアで構成しても、あるいはソフトウエアで構成してもよい。
【０００７】
本発明は、検証ツールであるプログラム検査部を改変することなく、ユーザが検証したいＡＰＩとその仕様を入力し、この情報に基づいて検証対象のプログラム（応用プログラムとも記す）を検証ツールが入力可能な形式に変換して検証ツールに対して出力し、プログラム検査部が、変換されたプログラムを検証できるようにしたＡＰＩ仕様検証装置及び方法、当該方法を実行させるプログラム（方法実行プログラムとも記す）、当該方法実行プログラムを格納する記憶媒体を提供する。
【課題を解決するための手段】
【０００８】
本発明のＡＰＩ仕様検証装置は、プログラムで用いられるＡＰＩの利用方法が仕様を満たしているか検証し検証結果を出力するプログラム検査部に前置する。ＡＰＩ仕様検証装置は、ＡＰＩ仕様入力支援部と、プログラム変換部とを、具備する。ＡＰＩ仕様入力支援部は、検証したいＡＰＩとその仕様を入力する。プログラム変換部は、検証対象のプログラムがプログラム検査部に入力可能な形式でない場合にＡＰＩ仕様入力支援部から入力されたＡＰＩとその仕様を用いて、検証対象のプログラムをプログラム検査部が入力可能な形式に変換し、プログラム検査部へ出力する。
【０００９】
これにより、既存のモデル検査ツールであるプログラム検査部を改変することなく、モデル検査ツールに登録されていないＡＰＩが仕様を満たしているかどうかを検証することが可能となる。
【００１０】
また、本発明のＡＰＩ仕様検証装置は、ＡＰＩ仕様入力支援部が、検証したいＡＰＩの生成関数、解放関数、及びリソースを表現する変数を登録し、検証すべき仕様の入力作業を支援する。
【００１１】
これにより、ＡＰＩの仕様の入力が容易になる。
【００１２】
また、本発明のＡＰＩ仕様検証装置は、出力変換部を、プログラム検査部に後置して、有するようにしてもよい。プログラム変換部は、プログラムの変換箇所を記録するようにしてもよい。そして、出力変換部は、検証結果がエラーである場合に変換箇所に対応するエラーメッセージを抽出し、ＡＰＩ仕様入力支援部において入力されたＡＰＩに対応するエラーメッセージを出力する。
【００１３】
これにより、ユーザがプログラム変換部によって変換されたプログラムを知る必要がなくなり、さらに、ユーザの利便性が向上する。
【００１４】
また、本発明のＡＰＩ仕様検証装置は、ＡＰＩ仕様入力支援部が、検証したいＡＰＩが使用するリソースを表現する値を入力する。
【００１５】
これにより、ＡＰＩを使用して確保されるリソースが、戻り値、もしくは何番目の引数を用いて返されるかを指定することができる。また、リソースを使用するＡＰＩがどの引数でリソースを表現する値を渡されるかを指定することができ、ＡＰＩの仕様の入力を柔軟に行うことが可能となる。
【００１６】
本発明のＡＰＩ仕様検証方法は、プログラムで用いられるＡＰＩの利用方法が仕様を満たしているか検証し、検証結果を出力するプログラム検査ステップに前置し、ＡＰＩ仕様入力支援ステップと、プログラム変換ステップとを含む。ＡＰＩ仕様入力支援ステップは、検証したいＡＰＩと、その仕様を入力するステップである。プログラム変換ステップは、検証対象のプログラムがプログラム検査ステップに入力可能な形式でない場合に入力されたＡＰＩとその仕様を用いて、検証対象のプログラムをプログラム検査ステップが入力可能な形式に変換し、プログラム検査ステップへ出力するステップである。
【００１７】
本発明の方法実行プログラムは、コンピュータに上記ＡＰＩ仕様検証方法を実行させるプログラムである。また、本発明の記憶媒体は、上記方法実行プログラムを格納する記憶媒体である。
【発明の効果】
【００１８】
従来の検証ツールであるプログラム検査部を改変することなく、ツール未登録のＡＰＩの検証が可能となる。また、ＡＰＩの仕様の入力を柔軟に行うことができ、ユーザに負担をかけずにＡＰＩの利用方法が仕様を満たしているかどうかを検証することが可能となる。
【発明を実施するための最良の形態】
【００１９】
以下、本発明の一実施例にかかるＡＰＩ仕様検証装置を含むＡＰＩ仕様検証システムについて図面を用いて説明する。
【００２０】
（実施例）
まず、本実施例にかかるＡＰＩ仕様検証装置を含むＡＰＩ仕様検証システムの構成について、図１を用いて説明する。図１は、本発明の一実施例にかかるＡＰＩ仕様検証装置を含むＡＰＩ仕様検証システムのブロック図である。
【００２１】
ＡＰＩ仕様検証システムは、ＡＰＩ仕様検証装置１０と、プログラム検査部１０３と、キーボード１５１とを備える。ＡＰＩ仕様検証装置１０は、ＡＰＩ仕様入力支援部１０１と、プログラム変換部１０２と、出力変換部１０４と、表示部１０５と、ＡＰＩ仕様検証装置１０を動作させるプログラムである方法実行プログラムを記憶する記憶媒体１５２と、ＡＰＩ仕様検証装置１０の各部を制御する制御部１５９とを備える。応用プログラムであるプログラム１００は、検証対象のプログラムである。ＡＰＩ仕様検証装置１０の動作は、記憶媒体１５２に記憶されたプログラムに基づき、制御部１５９の制御による。
【００２２】
ＡＰＩ仕様入力支援部１０１は、キーボード１５１によるユーザからのＡＰＩ仕様を入力させるジーユーアイ（Ｇｒａｐｈｉｃ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ（以下、ＧＵＩと記す））である。ＡＰＩ仕様入力支援部１０１で、ＡＰＩを確保（生成）系関数、解放系関数、アクセス系関数に分類して登録する。
【００２３】
なお、ＡＰＩ仕様入力支援部１０１を用いたＡＰＩ登録の詳細に関しては、図２を用いて後述する。
【００２４】
また、ＡＰＩ仕様入力支援部１０１は、登録されたＡＰＩの情報を、プログラム変換部１０２に渡す。以降、ＡＰＩ仕様入力支援部から入力されたＡＰＩを独自ＡＰＩと呼ぶ。一方、メモリ確保関数など既存のモデル検査ツールであるプログラム検査部１０３で検証可能なＡＰＩを登録ＡＰＩと呼ぶ。
【００２５】
プログラム変換部１０２は、ＡＰＩ仕様入力支援部１０１から受けとった独自ＡＰＩの情報に基づき、入力されたプログラム１００をプログラム検査部１０３で検証が可能なプログラムに変換する。具体的には、プログラム変換部１０２は、独自ＡＰＩの識別子に基づいてプログラム１００を検索し、独自ＡＰＩを呼び出すステートメントを、独自ＡＰＩと登録ＡＰＩの両方を呼び出すステートメントに変換する。
【００２６】
なお、プログラムの変換方法の詳細に関しては、図４を用いて後述する。
【００２７】
また、プログラム変換部１０２は、プログラムを変換した箇所の行番号を行番号テーブルに記録する。プログラム変換部１０２は、変換したプログラムをプログラム検査部１０３に対して出力する。
【００２８】
プログラム検査部１０３は、既存の検証ツールである。プログラム検査部１０３は、例えば、ＣＢＭＣのようなモデル検査技術に基づく検証ツールであってもよい。あるいは、スプリント（Ｓｅｃｕｒｅ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｌｉｎｔ（以下、ＳＰＬＩＮＴと記す））のような静的解析技術に基づく検証ツールであってもよい。プログラム検査部１０３は、プログラム変換部１０２からのプログラムのＡＰＩの利用方法が仕様を満たしていない場合にエラーを出力変換部１０４へ出力する。エラー出力は、エラーを含む行番号と、どのようなエラーであるかを示すエラーメッセージの組となっている。
【００２９】
出力変換部１０４は、検証ツールの出力を監視する。プログラム検査部１０３からエラーが出力された場合に、プログラム変換部１０２において行番号テーブルに記録した行番号と、エラー出力に含まれる行番号を比較する。そして、行番号が一致していた場合に、検証ツールのエラーメッセージをＡＰＩの利用方法に誤りがあることを示すエラーメッセージに変換し、表示部１０５に出力する。なお、出力変換部１０４における、エラーメッセージの変換方法の詳細は図６の説明において後述する。表示部１０５は、出力変換部１０４により変換されたエラーメッセージを出力する。
【００３０】
次に、本実施例にかかるＡＰＩ仕様入力支援部１０１のＧＵＩについて、図２を用いて説明する。図２は、本実施例にかかるＡＰＩ仕様入力支援部１０１のＧＵＩの例を示す図である。本実施例のＡＰＩ仕様入力支援部１０１のＧＵＩ２００は、図２中に示すように、ＡＰＩを生成関数２０ａ、アクセス関数２０ｂ、解放関数２０ｃの３種類に分類して登録するようにしている。
【００３１】
生成関数２０ａは、ＡＰＩを利用する際に、リソースを確保するＡＰＩである。アクセス関数２０ｂは、生成関数を使って確保されたリソースにアクセスするＡＰＩである。解放関数２０ｃは、生成関数により確保されたリソースを解放する関数である。例えば、ネットワークにアールティーピー（ＲＴＰ：Ｒｅａｌｔｉｍｅ  Ｔｒａｎｓｐｏｒｔ  Ｐｒｏｔｏｃｏｌ、ＡＶデータをストリーム伝送するためのプロトコル）パケットを送受信するためのＡＰＩがあり、以下の仕様だったとする。
【００３２】
「ＲＴＰ  ＊ＣｒｅａｔｅＲＴＰ（ｃｈａｒ  ＊ａｄｄｒ，  ｉｎｔ  ｐｏｒｔ）」はＲＴＰパケットを送受信するためのリソースを確保し、その戻り値によって確保されたリソースを表現する。「ａｄｄｒ」と「ｐｏｒｔ」によりＲＴＰパケットのあて先アドレスとポート番号を指定するものとする。「ｖｏｉｄ  ＳｅｎｄＤａｔａ（ＲＴＰ  ＊ｒｔｐ，  ｃｈａｒ  ＊ｄａｔａ）：ｒｔｐ」によって表現されるリソースを使って、ＲＴＰパケットを送信する。リソースを確保しない状態でパケットを送信してはならない。
【００３３】
「ＤｅｌｅｔｅＲＴＰ（ＲＴＰ  ＊ｒｔｐ）：ｒｔｐ」によって表現されるリソースを解放する。確保されたリソースは、必ず解放されなければならない。確保されていないリソースを解放してはならない。上記のＡＰＩの仕様に基づくと、生成関数は「ＣｒｅａｔｅＲＴＰ（）」であり、これがＧＵＩ２００の生成関数２０１の欄に登録される。また、リソースを表現する値は戻り値に設定されるため、リソースを表現する値は、ＧＵＩ２００の戻り値２０２に設定される。
【００３４】
また、アクセス関数は「ＳｅｎｄＤａｔａ（）」であり、これがＧＵＩ２００のアクセス関数２０３の欄に登録される。また、「ＳｅｎｄＤａｔａ（）」において利用されるリソースを表現する値は第１引数により渡されるため、リソースを表現する値はＧＵＩ２００の第１引数２０４に設定される。また、解放関数は「ＤｅｌｅｔｅＲＴＰ（）」であり、これがＧＵＩ２００の解放関数２０５の欄に登録される。また、解放されるリソースを表現される値は、第１引数で渡されるため、リソースを表現する値はＧＵＩ２００の第１引数２０６に設定される。
【００３５】
また、リソースを確保する前に「ＳｅｎｄＤａｔａ（）」，「ＤｅｌｅｔｅＲＴＰ（）」を呼び出すのは禁止されているため、確認したい仕様の未確保リソースへのアクセス２０８、未確保リソースの解放２０９をオン（以下、ＯＮと記す）に設定している。また、確保されたリソースは必ず解放されなければならないため、確認したい仕様の未解放２０７をＯＮに設定している。
【００３６】
このような、ＧＵＩ２００を用いて、ＡＰＩを生成関数、アクセス関数、解放関数の３種類に関する情報を分類して登録するようになっている。これにより、ＡＰＩの仕様の入力が容易になる。また、ＧＵＩ２００を用いて、ＡＰＩを使用して確保されるリソースが、戻り値、もしくは何番目の引数を用いて返されるかを指定することができる。また、リソースを使用するＡＰＩがどの引数でリソースを表現する値を渡されるかを指定することができる。従って、ＡＰＩの仕様の入力を柔軟に行うことが可能となる。
【００３７】
次に、本実施例にかかるＡＰＩ仕様検証装置を含むＡＰＩ仕様検証システムの動作について、図３を用いて説明する。図３は、本実施例にかかるＡＰＩ仕様検証装置を含むＡＰＩ仕様検証システムの動作を示すフローチャートである。まず、ユーザがキーボード１５１により入力したＡＰＩの仕様を、ＡＰＩ仕様入力支援部１０１を介してＡＰＩ仕様検証装置１０内に取り込み、プログラム変換部１０２に送る（ステップ３０１）。
【００３８】
続いて、プログラム変換部１０２が検証対象のプログラム１００を読み込み（ステップ３０２）、ＡＰＩ仕様入力支援部１０１において入力された仕様に基づいてプログラムを変換する。また、プログラム変換部１０２は、この際、変換によって変化した行の行番号を行番号テーブルに記録する（ステップ３０３）。続いて、プログラム変換部１０２は、変換したプログラムをプログラム検査部１０３に対して出力する。
【００３９】
プログラム検査部１０３は、プログラム変換部１０２から入力されたプログラムを検査する（ステップ３０４）。次に、プログラム検査部１０３は、プログラムの検査結果を出力変換部１０４に出力する。出力変換部１０４は、行番号テーブルに格納される行番号と一致する行番号を出力から検索し、エラー出力を変換し、表示部１０５に出力する（ステップ３０５）。
【００４０】
このように、プログラム変換部１０２がプログラムの変換箇所を記録し、出力変換部１０４が、検証結果がエラーである場合にプログラム変換部１０２が記録した変換箇所に対応するエラーメッセージを抽出する。そして、ＡＰＩ仕様入力支援部１０１において入力されたＡＰＩに対応するエラーメッセージを出力する出力変換部１０４をさらに有する。これにより、ユーザがプログラム変換部１０２によって変換されたプログラムを知る必要がなくなり、ユーザの利便性がさらに向上する。最後に、表示部１０５は、出力変換部１０４から得られた出力を表示して処理を終了する（ステップ３０６）。このように、ＡＰＩ仕様検証装置を含むＡＰＩ仕様検証システムは、記憶媒体１５２に記憶されたプログラムに基づく制御部１５９の制御により、プログラム１００が仕様を満たしているか検証する。
【００４１】
次に、図３に示すプログラム変換部１０２のプログラム変換の動作（ステップ３０３）の処理について、図４を用いて説明する。図４は、プログラム変換部１０２のプログラム変換の動作（ステップ３０３）を詳細化したフローチャートである。まず、プログラム変換部１０２は、プログラム１００を解釈し、プログラム１００をステートメント単位に区切る（ステップ４０１）。以下の説明では、全ステートメント数をＮａ、ｉ番目のステートメントをＳ［ｉ］とする。そして、プログラム変換部１０２は、宣言されている変数ｉのうち、リソースを表現する値を格納する型として宣言されている変数を抽出して変換テーブル（リスト）を作成して記録する（ステップ４０２）。
【００４２】
変換テーブルを図５（ａ）に示す。図５（ａ）に示すように、変換テーブル５００は独自ＡＰＩ５０１のリソース変数と登録ＡＰＩ５０２のリソース変数との対応関係をとるためのテーブルである。プログラム変換部１０２は、変換テーブル５００を独自ＡＰＩのリソース変数に基づいて参照することで、対応する登録ＡＰＩのリソース変数を見つけることができる。
【００４３】
次に、プログラム変換部１０２は、変数ｉを１にセットし（ステップ４０３）、１番目のステートメントからチェックを開始する。まず、プログラム変換部１０２は、１番目のステートメントが、ＡＰＩ仕様入力支援部１０１に入力されたＡＰＩ（独自ＡＰＩと呼ぶ）の生成関数を呼び出しているステートメントであるかどうかをチェックする（ステップ４０４）。ステップ４０４においてチェックしているステートメントが生成関数を呼び出しているステートメントであれば、そのステートメントを、プログラム検査部１０３で検証可能なＡＰＩ（登録ＡＰＩと呼ぶ）の生成関数と、独自ＡＰＩの生成関数の両方を呼び出すステートメントに変換する（ステップ４０５）。この際、プログラム変換部１０２は、登録ＡＰＩの生成関数から返されるリソース値を格納する変数（リソース変数と呼ぶ）の名前を、以下の手順で決定する。
【００４４】
まず、プログラム変換部１０２は、当該ステートメントの独自ＡＰＩの生成関数のリソース変数を取り出し、変換テーブル５００を参照する。プログラム変換部１０２は、対応する登録ＡＰＩのリソース変数がすでに登録されている場合、その変数を利用する。対応する登録ＡＰＩのリソース変数が登録されていない場合には、プログラム変換部１０２は、一意に定まる変数名を生成し、その変数名を登録ＡＰＩのリソース変数として登録し、その変数を用いてステートメントを生成する。
【００４５】
そして、プログラム変換部１０２は、該当する行番号を行番号テーブルに記録して（ステップ４０５）、変数ｉを１インクリメントして（ステップ４０６）、ステップ４０７に進む。そして、プログラム変換部１０２は、全てのステートメントに対してチェックが終了したか、つまり、変数ｉが全ステートメント数Ｎａを越えたかチェックする（ステップ４０７）。全てのステートメントに対してチェックが終了しない場合は、ステップ４０４の処理に戻る。
【００４６】
一方、ステップ４０４においてチェック中のステートメントが生成関数を呼び出しているステートメントでなければ、プログラム変換部１０２は、アクセス関数を呼び出しているステートメントであるかどうかをチェックする（ステップ４０８）。ステップ４０８においてチェック中のステートメントがアクセス関数を呼び出しているステートメントであれば、そのステートメントを、登録ＡＰＩのアクセス関数と、独自ＡＰＩのアクセス関数の両方を呼び出すステートメントに変換する。この際、プログラム変換部１０２は、登録ＡＰＩのアクセス関数に渡されるリソース変数を、生成関数の際に説明した方法と同じ方法により決定する。そして、プログラム変換部１０２は、該当する行番号を行番号テーブルに記録して（ステップ４０９）、ステップ４０６に進む。
【００４７】
一方、ステップ４０８においてチェック中のステートメントがアクセス関数を呼び出しているステートメントでなければ、プログラム変換部１０２は、解放関数を呼び出しているステートメントであるかどうかをチェックする（ステップ４１０）。ステップ４１０においてチェック中のステートメントが解放関数を呼び出しているステートメントであれば、そのステートメントを、登録ＡＰＩの解放関数と、独自ＡＰＩの解放関数の両方を呼び出すステートメントに変換する。この際、プログラム変換部１０２は、登録ＡＰＩの解放関数に渡されるリソース変数を、生成関数の変換で説明した処理と同じ処理で決定する。そして、プログラム変換部１０２は、該当する行番号を行番号テーブルに記録して（ステップ４１１）、ステップ４０６に進む。
【００４８】
一方、ステップ４１０においてチェック中のステートメントが解放関数を呼び出しているステートメントでなければ、ステップ４０６に進む。そして、プログラム変換部１０２は、全てのステートメントのチェックが終了したかどうかを判定する（ステップ４０７）。全てのステートメントのチェックが終了していれば、最後に変換テーブルのリソース変数の宣言を変換結果に追加する。さらに、プログラム変換部１０２は、変換後のプログラムと変換前のプログラムの行番号の対応をとって行番号テーブルに登録し（ステップ４１２）、変換結果を出力して処理を終了する。
【００４９】
図５（ａ）〜図５（ｄ）は、図３のプログラム変換を検証対象プログラムに適用した結果の例を示す図である。図５（ａ）は、図３のプログラム変換処理における変換テーブルを示す図である。図５（ｂ）は、プログラム変換適用前の検証対象プログラムを示す図である。図５（ｃ）は、変換適用後の検証対象プログラムを示す図である。変換適用後の検証対象プログラムは、変換適用箇所について、変換適用前のソースコードを削除して書き換えるのではなく、変換結果を追記する形式であることが望ましい。
【００５０】
例えば、図５（ａ）〜（ｄ）の例では、変換適用箇所である図５（ｂ）の０４行目の「ｒｔｐ１＝ＣｒｅａｔｅＲＴＰ（ａｄｄｒ，ｐｏｒｔ）」は、変換後に削除されずに、図５（ｃ）の０５行目に示すように、「ｄｍｙ１＝ｍａｌｌｏｃ（ｓｉｚｅｏｆ（ｉｎｔ））」が追記される形式となっている。図５（ｂ）の０５行目、０６行目についても同様である。それは、変換適用後の検証対象プログラムで、データの実行結果が変換適用前から変わってしまい、後の処理で振る舞いが変わってしまうのを避けるためである。
【００５１】
例えば、図５（ｂ）の例で、０３行目と０４行目に「ｒｔｐ１＝ＮＵＬＬ；」が挿入され、０４行目と０５行目の間に、「ｉｆ（ｒｔｐ１＝ＮＵＬＬ）  ｒｅｔｕｒｎ；」という行が挿入されたプログラムについて考える。変換処理の際、「ｄｍｙ１＝ｍａｌｌｏｃ（ｓｉｚｅｏｆ（ｉｎｔ））」を追記するのではなく、「ｒｔｐ１＝ＣｒｅａｔｅＲＴＰ（ａｄｄｒ，ｐｏｒｔ）」を削除して、「ｄｍｙ１＝ｍａｌｌｏｃ（ｓｉｚｅｏｆ（ｉｎｔ））」に書き換えた場合、上記で挿入したＩＦ文が常に真となってしまい、プログラム変換前とプログラム変換後でプログラムの振る舞いが変わってしまう。
【００５２】
本実施例のように、変換処理の際、「ｄｍｙ１＝ｍａｌｌｏｃ（ｓｉｚｅｏｆ（ｉｎｔ））」を追記した場合には、プログラム変換によって上記のような振る舞いの変化が発生することがなくなるため、変換によって後の処理で振る舞いが変わってしまうのを避けることができる。また、図５（ｄ）は、図３のプログラム変換処理を終えた後の行番号テーブルを示す図である。
【００５３】
この例では、図５（ｂ）の０４行目に生成関数、０５、０６行目に解放関数が含まれている。図４において説明した処理を適用すると、図５（ｂ）の０４行目の生成関数、０５、０６行目の解放関数が変換処理の対象となる。処理の順を追って説明する。まず、プログラム変換部１０２は、図５（ｂ）の０２行目にリソース変数があるので、これに基づき変換テーブルを作成する。この時点では、図５（ａ）に示される変換テーブル５００中の対応する登録ＡＰＩのリソース変数は空欄である。
【００５４】
続いて、プログラム変換部１０２は、図５（ｂ）の０４行目の生成関数を、図５（ｃ）の０５行目に変換する。このとき、プログラム変換部１０２は、変換テーブル５００を参照する。「ｒｔｐ１」に対応する登録ＡＰＩのリソース変数がまだ登録されていないため、一意に定まる変数「ｄｍｙ１」を登録し、「ｄｍｙ１」を登録ＡＰＩの生成関数のリソース変数として図５（ｃ）の０５行目のように出力する。
【００５５】
続いて、プログラム変換部１０２は、図５（ｂ）の０５行目を図５（ｃ）の０６行目に変換する。このとき、プログラム変換部１０２は、変換テーブル５００を参照すると、「ｒｔｐ１」に対応する登録ＡＰＩのリソース変数が「ｄｍｙ１」であることがわかるので、「ｄｍｙ１」を用いて図５（ｃ）の０６行目を生成する。続いて、プログラム変換部１０２は、図５（ｂ）の０６行目を図５（ｃ）の０７行目に変換する。このとき、プログラム変換部１０２は、変換テーブル５００を参照する。「ｒｔｐ２」に対応する登録ＡＰＩのリソース変数がまだ登録されてないため、一意に定まる変数「ｄｍｙ２」を登録し、「ｄｍｙ２」を登録ＡＰＩの生成関数のリソース変数として図５（ｃ）の０７行目のように出力する。
【００５６】
全てのステートメントを調べ終えたので、プログラム変換部１０２は、最後に変換テーブル５００中の登録ＡＰＩのリソース変数全ての変数宣言を、図５（ｃ）０２行目に出力して処理を終える。このように、プログラム変換部１０２は、プログラム変換を行う。
【００５７】
次に、出力変換部１０４のプログラムの出力変換処理（図３のステップ３０５）について、図６を用いて詳細に説明する。図６は、出力変換部１０４のプログラムの出力変換処理を詳細化したフローチャートである。まず、出力変換部１０４は、プログラム検査部１０３のエラー出力を読み込み（ステップ６０１）、行番号テーブルの変換後番号欄にある行番号がエラー出力にあるかどうかを判定する（ステップ６０２）。
【００５８】
ステップ６０２において行番号テーブルの変換後番号欄にある行番号がエラー出力にある場合には、出力変換部１０４は、そのエラーメッセージを抽出して行番号を変換前のプログラムの行番号に変更する（ステップ６０３）。そして、エラーのコメント（メッセージ）を変換し（ステップ６０４）、処理を終了する。一方、ステップ６０２において行番号テーブルの変換後番号欄にある行番号がエラー出力にない場合には、出力変換部１０４は、そのまま処理を終了する。
【００５９】
図７（ａ）及び図７（ｂ）に、出力変換部１０４が出力するエラーメッセージの変換の例を示す。図７（ａ）が変換適用前、図７（ｂ）が変換適用後のエラーメッセージを示す図である。図７（ａ）及び図７（ｂ）からわかるように、行番号が変更され、また、コメントがエラーに対応するコメントになっている。このように、出力変換部１０４は、プログラム検査部からのプログラムの出力変換処理を行う。
【００６０】
以上説明したように、本実施例によれば、ユーザが検証したいＡＰＩとその仕様を入力し、この情報に基づいて検証対象のプログラムをプログラム検査部１０３に入力可能な形式に変換できる。これにより、従来の検証ツールであるプログラム検査部１０３を改変することなく、ツール未登録のＡＰＩの検証が可能となる。また、ＡＰＩの仕様の入力を柔軟に行うことができ、ユーザに負担をかけずにＡＰＩの利用方法が仕様を満たしているかどうかを検証することが可能となる。
【００６１】
なお、本実施例では、ＡＰＩ仕様検証装置と従来の検証ツールであるプログラム検査部とは分離されている場合で説明したが、本発明はこれに限定されず、装置として一体化してもよい。また、１つのコンピュータが、ＡＰＩ仕様検証動作と検証ツール動作とを、ソフトウエアツールとして実行可能としてもよい。
【産業上の利用可能性】
【００６２】
本発明にかかるＡＰＩ仕様検証装置及び方法、当該方法を実行させるプログラム、当該プログラムを格納する記憶媒体は、ソフトウエアがＡＰＩの仕様を満たしてＡＰＩを利用していることを検証するのに有用である。
【図面の簡単な説明】
【００６３】
【図１】本発明の一実施例にかかるＡＰＩ仕様検証装置を含むＡＰＩ仕様検証システムのブロック図
【図２】同実施例にかかるＡＰＩ仕様入力支援部のＧＵＩの例を示す図
【図３】同実施例にかかるＡＰＩ仕様検証装置を含むＡＰＩ仕様検証システムの動作を示すフローチャート
【図４】同実施例にかかるプログラム変換部のプログラム変換の動作を詳細化したフローチャート
【図５】（ａ）同実施例にかかる変換テーブルを示す図（ｂ）同実施例にかかるプログラム変換適用前の検証対象プログラムを示す図（ｃ）同実施例にかかるプログラム変換適用後の検証対象プログラムを示す図（ｄ）同実施例にかかるプログラム変換処理を終えた後の行番号テーブルを示す図
【図６】同実施例にかかる出力変換部のプログラムの出力変換処理を詳細化したフローチャート
【図７】（ａ）同実施例にかかる出力変換部により変換される前のエラーメッセージを示す図（ｂ）同実施例にかかる出力変換部により変換された後のエラーメッセージを示す図
【符号の説明】
【００６４】
１０    ＡＰＩ仕様検証装置
１００    プログラム
１０１    ＡＰＩ仕様入力支援部
１０２    プログラム変換部
１０３    プログラム検査部
１０４    出力変換部
１０５    表示部
１５１    キーボード
１５２    記憶媒体
１５９    制御部
２００    ＧＵＩ
５００    変換テーブル
【図１】
2006127496.tif 000003
【図２】
2006127496.tif 000004
【図３】
2006127496.tif 000005
【図４】
2006127496.tif 000006
【図５】
2006127496.tif 000007
【図６】
2006127496.tif 000008
【図７】
2006127496.tif 000009