JP2022150518A - テスト処理プログラム、テスト処理方法および情報処理装置 - Google Patents

テスト処理プログラム、テスト処理方法および情報処理装置 Download PDF

Info

Publication number
JP2022150518A
JP2022150518A JP2021053156A JP2021053156A JP2022150518A JP 2022150518 A JP2022150518 A JP 2022150518A JP 2021053156 A JP2021053156 A JP 2021053156A JP 2021053156 A JP2021053156 A JP 2021053156A JP 2022150518 A JP2022150518 A JP 2022150518A
Authority
JP
Japan
Prior art keywords
test
function
software
variable
address
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.)
Pending
Application number
JP2021053156A
Other languages
English (en)
Inventor
幸浩 木村
Yukihiro Kimura
治人 永田
Haruto Nagata
公規 矢野
Kiminori Yano
和久 ▲高▼栗
Kazuhisa Takakuri
卓弥 桐山
Takuya Kiriyama
輝美 笠井
Terumi Kasai
憲治 数村
Kenji Kazumura
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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2021053156A priority Critical patent/JP2022150518A/ja
Priority to US17/699,435 priority patent/US20220308991A1/en
Publication of JP2022150518A publication Critical patent/JP2022150518A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3692Test management for test results analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites

Landscapes

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

Abstract

【課題】ソフトウェアテストを簡便化する。【解決手段】情報処理装置は、記憶部と処理部とを有する。記憶部は、ソフトウェアとソフトウェアとは別個のテストプログラムとを記憶する。処理部は、ソフトウェアをテストモードで実行することを示すテスト指定情報に応じて、テストプログラムを呼び出す。処理部は、呼び出されたテストプログラムを用いて、ソフトウェアに含まれる関数が使用する変数を示すアドレスを特定し、アドレスが示す変数の値を書き換える。【選択図】図3

Description

本発明はテスト処理プログラム、テスト処理方法および情報処理装置に関する。
ソフトウェア開発においては、作成されたソフトウェアが仕様通りに正しく動作することを確認するソフトウェアテストが行われる。ソフトウェアテストは、ソフトウェアの内部状態を特定の状態に設定し、その内部状態のもとでソフトウェアの挙動を確認する手順を含むことがある。例えば、ソフトウェアテストは、ソフトウェアの内部状態を異常状態に設定し、異常からのリカバリが適切に行われることを確認する手順を含むことがある。
なお、テスト対象プログラムに含まれる複数のモジュールをデバッガにロードし、ロードされた状態のまま、スタブプログラムを動的に結合して各モジュールの単体テストを行うことで、テスト工数を削減するモジュール検証システムが提案されている。
特開2008-135008号公報
ソフトウェアによっては、通常の外部操作のみでは特定の内部状態を意図的に作り出すことが難しいことがある。例えば、ソフトウェアに入力する入力データを変更するだけでは、特定の異常状態を再現することが難しいことがある。その場合、ソフトウェアテストは、ソフトウェアの中にテストプログラムを埋め込み、内部のテストプログラムによって特定の内部状態を強制的に作り出す手順を含むことがある。
しかし、テスト毎にソフトウェアを一時的に修正することは、ソフトウェアテストの手順やソフトウェアの品質管理を煩雑にするおそれがある。そこで、1つの側面では、本発明は、ソフトウェアテストを簡便化することを目的とする。
1つの態様では、以下の処理をコンピュータに実行させるテスト処理プログラムが提供される。ソフトウェアをテストモードで実行することを示すテスト指定情報に応じて、ソフトウェアとは別個のテストプログラムを呼び出す。呼び出されたテストプログラムを用いて、ソフトウェアに含まれる関数が使用する変数を示すアドレスを特定し、アドレスが示す変数の値を書き換える。
また、1つの態様では、コンピュータが実行するテスト処理方法が提供される。また、1つの態様では、記憶部と処理部とを有する情報処理装置が提供される。
1つの側面では、ソフトウェアテストが簡便化される。
第1の実施の形態の情報処理装置を説明するための図である。 情報処理装置のハードウェア例を示すブロック図である。 ソフトウェア製品の構造例を示す図である。 製品モジュールとテストモジュールの第1の例を示す図である。 製品モジュールとテストモジュールの第2の例を示す図である。 ローカル変数のアドレスの算出例を示す図である。 製品モジュールとテストモジュールの第3の例を示す図である。 製品モジュールとテストモジュールの第4の例を示す図である。 製品モジュールとテストモジュールの構造例を示す図である。 情報処理装置の機能例を示すブロック図である。 コンパイラスレッドの手順例を示すフローチャートである。 アドレス解決の手順例を示すフローチャートである。
以下、本実施の形態を図面を参照して説明する。
[第1の実施の形態]
第1の実施の形態を説明する。
図1は、第1の実施の形態の情報処理装置を説明するための図である。
第1の実施の形態の情報処理装置10は、ソフトウェアテストを支援する。情報処理装置10は、クライアント装置でもよいしサーバ装置でもよい。情報処理装置10が、コンピュータ、テスト処理装置またはソフトウェア開発装置と呼ばれてもよい。
情報処理装置10は、記憶部11および処理部12を有する。記憶部11は、RAM(Random Access Memory)などの揮発性半導体メモリでもよいし、HDD(Hard Disk Drive)やフラッシュメモリなどの不揮発性ストレージでもよい。処理部12は、例えば、CPU(Central Processing Unit)、GPU(Graphics Processing Unit)、DSP(Digital Signal Processor)などのプロセッサである。ただし、処理部12が、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの特定用途の電子回路を含んでもよい。プロセッサは、例えば、RAMなどのメモリに記憶されたプログラムを実行する。プロセッサの集合が、マルチプロセッサまたは単に「プロセッサ」と呼ばれてもよい。
記憶部11は、ソフトウェア13およびテストプログラム16を記憶する。ソフトウェア13は、テスト対象のソフトウェア製品またはソフトウェア製品の一部分である製品モジュールである。ソフトウェア13は、1以上のプログラムファイルを含む。ソフトウェア13は、ユーザプログラムの実行に用いられるプログラム実行環境などのミドルウェアであってもよい。プログラム実行環境は、高級言語プログラムまたは中間言語プログラムを機械語プログラムに変換するJIT(Just In Time)コンパイラを含むことがある。
ソフトウェア13は、関数14を含む。関数14は、呼び出しに応答して特定の情報処理を実行するプログラム単位である。関数14が、メソッド、プロシジャまたはサブルーチンと呼ばれてもよい。関数14は、情報処理において変数15を使用する。変数15の値は、ソフトウェア13の内部状態を表してもよい。
変数15は、関数14のローカル変数であってもよい。関数14のローカル変数は、関数14および関数14から呼び出される他の関数から参照可能であり、それ以外の関数14の外部からは参照不可である。ローカル変数の値は、メモリの中のスタック領域に格納されてもよい。スタック領域の中で各ローカル変数の値が格納される相対位置は、例えば、関数14をコンパイルするコンパイラによって決定される。複数の関数が階層的に呼び出される場合、各関数がもつローカル変数の値がスタック領域に積み上げられる。
テストプログラム16は、ソフトウェア13とは別個のテスト用モジュールである。テストプログラム16は、呼び出しに応答してソフトウェア13の内部状態を特定の状態に設定する処理を規定する。特定の状態は、外部からソフトウェア13への通常の入力操作のみでは再現することが難しい状態であってもよい。また、特定の状態は、メモリアクセス違反、内部矛盾検出、応答なしなどの異常状態であってもよい。テストプログラム16は、テスト番号の指定に応じて異なる内部状態を作り出す処理を規定してもよい。
また、テストプログラム16は、変数15を示すアドレスを特定するための情報を保持してもよい。変数15を示すアドレスは、例えば、メモリ上で変数15の値が格納される位置を示すメモリアドレスである。テストプログラム16が保持する情報は、スタック領域における基準位置からのアドレス差分を示すオフセットであってもよく、変数名とオフセットとを対応付けたテーブル情報であってもよい。
上記のように変数15の位置は、関数14をコンパイルするコンパイラによって決定されることがある。そこで、テストプログラム16が保持する情報は、コンパイル済みの関数14の命令を解析することでテスト開始前に生成されてもよく、コンパイラからメモリ割り当ての情報を抽出することでテスト開始前に生成されてもよい。
処理部12は、テストプログラム16を用いてソフトウェア13をテストする。処理部12は、ソフトウェア13をテストモードで実行することを示すテスト指定情報17を受け付ける。テスト指定情報17は、開発者から入力されてもよい。また、テスト指定情報17は、ソフトウェア13を起動するためのコマンドに含まれるオプションであってもよい。また、テスト指定情報17は、テスト種別を示すテスト番号を含んでもよい。
処理部12は、テスト指定情報17に応じて、テストプログラム16を呼び出す。テスト指定情報17を受け付けた場合にテストプログラム16を呼び出す処理は、ソフトウェア13に規定されていてもよく、関数14に規定されていてもよい。
このとき、処理部12は、テストプログラム16からデジタル署名を抽出し、デジタル署名の検証に失敗した場合にはテストプログラム16の呼び出しを拒否してもよい。デジタル署名の検証では、例えば、処理部12は、デジタル署名を特定の暗号鍵で復号し、テストプログラム16の他の部分のハッシュ値を算出し、復号結果とハッシュ値が一致するか判定する。一致した場合は検証成功であり、一致しない場合は検証失敗である。これにより、テスト実行者によって作成されていない不正プログラムの呼び出しが拒否される。
処理部12は、呼び出されたテストプログラム16を用いて、変数15を示すアドレスを特定し、特定されたアドレスが示す変数15の値を書き換える。例えば、処理部12は、テストプログラム16に含まれる命令に従い、変数15の値を、テスト指定情報17に含まれるテスト番号に対応する特定の異常値に変更する。これにより、処理部12は、ソフトウェア13の内部状態を強制的に特定の状態に設定する。
例えば、処理部12は、変数15の値を書き換えた後に関数14の実行を続ける。処理部12は、ソフトウェア13の処理結果を示すログを保存する。これにより、特定の内部状態のもとでのソフトウェア13の挙動を確認するソフトウェアテストが実現される。例えば、確率の低い異常状態が発生した際のソフトウェア13の挙動が確認される。
以上説明したように、第1の実施の形態の情報処理装置10は、ソフトウェア13のテストを実行する。このため、仕様に適合しない動作が検出され、ソフトウェア13の不具合が発見される。よって、デバッグを通じてソフトウェア13の品質が向上する。
また、情報処理装置10は、ソフトウェア13の外部のテストプログラム16を用いて、ソフトウェアテストを実行する。このため、開発者はソフトウェア13の中にテストプログラムを埋め込まなくてよく、テストのためにソフトウェア13を一時的に修正しなくてよい。よって、テスト作業を通じてソフトウェア13に不具合が発生するリスクが低減され、ソフトウェア13の品質管理の負担が低減される。また、ソフトウェア13の中にテストプログラムが残ることによるセキュリティリスクが低減される。
また、情報処理装置10は、テストプログラム16を呼び出すことで、変数15のアドレスを特定して変数15の値を外部から書き換えることを可能にする。これにより、情報処理装置10は、ソフトウェア13の外部から、ソフトウェア13に特定の内部状態を設定する。よって、情報処理装置10は、ソフトウェア13に対する通常の入力操作のみでは再現することが難しい内部状態(例えば、メモリアクセス違反などの特定の異常状態)を意図的に作り出すことができ、ソフトウェアテストを簡便化できる。
[第2の実施の形態]
次に、第2の実施の形態を説明する。
第2の実施の形態の情報処理装置100は、ソフトウェアテストを支援する。情報処理装置100は、第1の実施の形態の情報処理装置10に対応する。情報処理装置100は、クライアント装置でもよいしサーバ装置でもよい。
図2は、情報処理装置のハードウェア例を示すブロック図である。
情報処理装置100は、バスに接続されたCPU101、RAM102、HDD103、GPU104、入力インタフェース105、媒体リーダ106および通信インタフェース107を有する。CPU101は、第1の実施の形態の処理部12に対応する。RAM102またはHDD103は、第1の実施の形態の記憶部11に対応する。
CPU101は、プログラムの命令を実行するプロセッサである。CPU101は、HDD103に記憶されたプログラムおよびデータの少なくとも一部をRAM102にロードし、プログラムを実行する。情報処理装置100は、複数のプロセッサを有してもよい。プロセッサの集合が、マルチプロセッサまたは単に「プロセッサ」と呼ばれてもよい。
RAM102は、CPU101で実行されるプログラムおよびCPU101で演算に使用されるデータを一時的に記憶する揮発性半導体メモリである。情報処理装置100は、RAM以外の種類の揮発性メモリを有してもよい。
HDD103は、OS(Operating System)、ミドルウェア、アプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性ストレージである。情報処理装置100は、フラッシュメモリやSSD(Solid State Drive)などの他の種類の不揮発性ストレージを有してもよい。
GPU104は、CPU101と連携して画像を生成し、情報処理装置100に接続された表示装置111に画像を出力する。表示装置111は、例えば、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ、有機EL(Electro Luminescence)ディスプレイまたはプロジェクタである。なお、情報処理装置100に、プリンタなどの他の種類の出力デバイスが接続されてもよい。
入力インタフェース105は、情報処理装置100に接続された入力デバイス112から入力信号を受け付ける。入力デバイス112は、例えば、マウス、タッチパネルまたはキーボードである。情報処理装置100に複数の入力デバイスが接続されてもよい。
媒体リーダ106は、記録媒体113に記録されたプログラムおよびデータを読み取る読み取り装置である。記録媒体113は、例えば、磁気ディスク、光ディスクまたは半導体メモリである。磁気ディスクには、フレキシブルディスク(FD:Flexible Disk)およびHDDが含まれる。光ディスクには、CD(Compact Disc)およびDVD(Digital Versatile Disc)が含まれる。媒体リーダ106は、記録媒体113から読み取られたプログラムおよびデータを、RAM102やHDD103などの他の記録媒体にコピーする。読み取られたプログラムは、CPU101によって実行されることがある。
記録媒体113は、可搬型記録媒体であってもよい。記録媒体113は、プログラムおよびデータの配布に用いられることがある。また、記録媒体113およびHDD103が、コンピュータ読み取り可能な記録媒体と呼ばれてもよい。
通信インタフェース107は、ネットワーク114に接続され、ネットワーク114を介して他の情報処理装置と通信する。通信インタフェース107は、スイッチやルータなどの有線通信装置に接続される有線通信インタフェースでもよいし、基地局やアクセスポイントなどの無線通信装置に接続される無線通信インタフェースでもよい。
図3は、ソフトウェア製品の構造例を示す図である。
ソフトウェア製品の開発者は、ユーザプログラムが情報処理装置100で動作するようにプログラム実行環境120を開発する。プログラム実行環境120は、有償または無償で第三者に提供されるソフトウェア製品である。情報処理装置100は、品質向上のためにプログラム実行環境120のテストを行う。プログラム実行環境120は、ユーザプログラム123とコンピュータハードウェアとの間に介在してユーザプログラム123の実行を制御するミドルウェアである。プログラム実行環境120が、バーチャルマシンまたはフレームワークと呼ばれることがある。
ユーザプログラム123は、高級言語と機械語との間の抽象度をもつ中間言語を用いて記述される。ユーザプログラム123は、高級言語で記述されたソースコードをコンパイルすることで生成される。ユーザプログラム123が中間コードまたはバイトコードと呼ばれることがある。プログラム実行環境120は、ユーザプログラム123の中間言語命令を機械語命令に変換する。プログラム実行環境120は、機械語命令セットが異なる様々なプロセッサの上でユーザプログラム123を実行することを可能にする。
プログラム実行環境120は、インタープリタ121およびJITコンパイラ122を含む。プログラム実行環境120は、ユーザプログラム123を指定したコマンドを受け付ける。すると、インタープリタ121は、ユーザプログラム123に含まれる中間言語命令を1つずつ解釈して、中間言語命令に対応する機械語命令に変換し、プロセッサに機械語命令を実行させる。このとき、インタープリタ121は、各メソッドの呼び出し頻度を監視する。メソッドは、呼び出し可能なひとまとまりのプログラム単位である。メソッドが関数、プロシジャまたはサブルーチンと呼ばれることがある。
インタープリタ121は、メソッド毎に呼び出し回数をカウントし、呼び出し回数が閾値(例えば、3回)に達したメソッドのコンパイルをJITコンパイラ122に要求する。呼び出し頻度の高いメソッドについては、中間言語命令を1つずつ解釈するよりも、事前に全体を機械語命令に変換した方が高速化されるためである。インタープリタ121の処理とJITコンパイラ122の処理は、同一のプロセッサコアによって時分割に実行されてもよいし、異なるプロセッサコアによって並列に実行されてもよい。JITコンパイラ122の処理が、コンパイラスレッドと呼ばれることがある。
JITコンパイラ122は、インタープリタ121から指定されたメソッドのバイトコード(中間言語命令群)をネイティブコード(機械語命令群)に変換する。このとき、JITコンパイラ122は、実行速度が上がるようにネイティブコードを最適化し得る。JITコンパイラ122は、生成されたネイティブコードを保存する。コンパイル済みのメソッドが呼び出された場合、プログラム実行環境120は、インタープリタ121によるバイトコードの解釈に代えて、ネイティブコードをプロセッサに実行させる。
ただし、JITコンパイラ122は、異常状態の発生によってバイトコードのコンパイルに失敗することがある。異常状態は、JITコンパイラ122のプログラム上の不具合(いわゆるバグ)に起因して発生することがある。異常状態には、不適切なメモリ領域にアクセスするメモリアクセス違反、コンパイル中に生成される幾つかのデータが互いに整合していない内部矛盾検出、無限ループまたはイベント待ちによってコンパイルが進行不能になる応答なし状態などが含まれる。コンパイルに失敗すると、JITコンパイラ122は、メソッドに失敗フラグを付与し、以降の当該メソッドのコンパイルを抑止する。
また、コンパイルに失敗すると、JITコンパイラ122は、プログラム実行環境120を正常状態に復旧するリカバリ処理を実行する。リカバリ処理は、メモリ上のデータをコンパイル前の状態に復元するなど、JITコンパイラ122のエラーがプログラム実行環境120の他の機能に影響を与えないようにする事後処理である。
JITコンパイラ122は、ソフトウェア製品に包含される製品モジュールの一例である。第2の実施の形態では情報処理装置100は、プログラム実行環境120のテストとして特に、JITコンパイラ122のリカバリ処理のテストを行う。コンパイラスレッドのリカバリ処理のテストでは、情報処理装置100は、JITコンパイラ122の内部状態を意図的に特定の異常状態に設定して、JITコンパイラ122を実行する。
ただし、テストしたい異常状態の中には、JITコンパイラ122の外部からの通常の入力操作のみでは再現することが難しい異常状態も存在する。そこで、1つの方法として、開発者は、JITコンパイラ122のソースコードを一時的に修正して、異常状態を強制的に発生させるテストコードをソースコード中に埋め込むことが考えられる。テストコードは、例えば、特定の変数の値を異常値に書き換える。
しかし、上記の方法では、開発者はテスト後にテストコードを除去して、テストコード以外の機能がテスト時と同一であるようにJITコンパイラ122を完成させることになる。そのため、JITコンパイラ122の品質管理の負担が増大する。また、JITコンパイラ122にテストコードが残っていると、不具合の原因になるおそれがあると共に、セキュリティリスクを増大させるおそれがある。また、テストケースを変更するために、開発者はソースコードの再コンパイルなどJITコンパイラ122の再ビルドを行うことになり、テスト自体の作業負担が増大する。
他の方法として、開発者は、デバッガと呼ばれる開発支援ツールを利用して、特定のタイミングでレジスタやメモリの内容を書き換えながら、JITコンパイラ122の命令をプロセッサに実行させる方法も考えられる。しかし、開発者は低レベルの命令やデータ構造を意識してデバッガを操作することになり、テスト作業の負担が大きくテスト工数が増大するおそれがある。また、開発者がテスト技術を習得するための学習コストが高い。
そこで、第2の実施の形態の情報処理装置100は、JITコンパイラ122の外部に用意されたテストモジュール124を用いて、JITコンパイラ122の内部状態を変更する。テストモジュール124は、プログラム実行環境120に組み込まれておらず、テスト時にJITコンパイラ122から呼び出される動的リンクライブラリである。
プログラム実行環境120がテストモードでの起動を示すオプションを含むコマンドを受け付けた場合に、JITコンパイラ122がテストモジュール124を呼び出す。このオプションは、プログラム実行環境120の提供先の第三者には開示されない非公開オプションである。オプションは、テスト種別を示すテスト番号を含む。JITコンパイラ122は、呼び出しの際にテスト番号をテストモジュール124に通知する。テストモジュール124は、指定されたテスト番号に応じて、JITコンパイラ122に含まれる変数の値を書き換えて、特定の異常状態を強制的に作り出す。
ただし、テストモジュール124を単純にJITコンパイラ122から分離するだけでは、スコープの関係上、テストモジュール124から直接参照することができるJITコンパイラ122の変数および関数が限定されてしまう。
1つの方法として、テストモジュール124が使用する変数および関数のアドレスを、関数呼び出しの引数としてJITコンパイラ122からテストモジュール124に渡す方法が考えられる。しかし、この方法ではテスト内容に応じて引数のデータ構造が変化してしまい、JITコンパイラ122およびテストモジュール124の修正作業が多くなるおそれがある。また、他の1つの方法として、JITコンパイラ122に含まれる変数および関数のスコープを、外部モジュールから参照可能に設定する方法も考えられる。しかし、この方法ではセキュリティリスクが増大するおそれがある。
そこで、第2の実施の形態ではソフトウェアテストを容易にするため、製品モジュールおよびテストモジュールが、以下に説明するプログラム構造をもつように作成される。なお、テストモジュール124の外部に設定ファイルを用意することで、テストモジュール124の挙動の詳細を簡便的に指定できるようにしてもよい。
図4は、製品モジュールとテストモジュールの第1の例を示す図である。
製品モジュール141は、関数fun_aを含む。関数fun_aは、整数型のローカル変数である変数var1をもつ。関数fun_aは、メモリ上の変数var1のアドレスを引数として渡して、テストモジュール151の関数testを呼び出す。その後、関数fun_aは、変数var1の値に応じた処理を実行する。
テストモジュール151は、整数型変数のポインタを引数として受け取る関数testを含む。関数testは、受け取ったポインタが指し示す変数var1の値を特定の値に書き換える。このような製品モジュール141およびテストモジュール151は、引数のデータ構造がテストモジュール151のテスト内容に依存しているため結合度が高い。そこで、製品モジュールとテストモジュールのプログラム構造が以下のように変更される。
図5は、製品モジュールとテストモジュールの第2の例を示す図である。
製品モジュール142は、関数fun_aを含む。関数fun_aは、整数型のローカル変数である変数var1をもつ。関数fun_aは、テストモジュール152の関数testを呼び出す。テストモジュール152の関数testは、引数をもたない。その後、関数fun_aは、変数var1の値に応じた処理を実行する。
テストモジュール152は、関数testおよび関数get_var_addr(関数153)を含む。関数153は、関数名fnameおよび変数名vnameを引数として受け取り、引数によって特定される変数のアドレスを応答するユーティリティ関数である。関数153がアドレス解決関数と呼ばれることがある。関数testは、製品モジュール142がもつ変数のうち値を書き換えたいローカル変数について、ローカル変数が属する関数の名称とローカル変数の名称とを指定して関数153を呼び出す。関数testは、関数153から受け取ったポインタが指し示す変数の値を特定の値に書き換える。
関数153は、以下に説明するスタックオフセットテーブル175を用いて、指定されたローカル変数のアドレスを算出する。関数153によってアドレスが解決されるローカル変数は、呼び出し元関数をテストモジュール152から呼び出し方向の逆順に辿った場合に到達する何れかの関数がもつローカル変数である。スタックオフセットテーブル175は、製品モジュール142のテストを行う開発者によって事前に作成される。
図6は、ローカル変数のアドレスの算出例を示す図である。
メモリはスタック領域176を含む。テストモジュール152の関数testが呼び出されたとき、スタック領域176には、関数testに到達するまでに実行された1以上の関数の情報が階層的に積み上げられている。ここでは一例として、関数testの呼び出し元が関数fun_aであり、関数fun_aの呼び出し元が関数fun_bである。
関数fun_aが変数var1,var2をもつ場合、スタック領域176の中の関数fun_aに対応する区間には、変数var1,var2の値が格納される。同様に、関数fun_bが変数var11をもつ場合、スタック領域176の中の関数fun_bに対応する区間には、変数var11の値が格納される。関数fun_aの区間の先頭は、関数fun_aのフレームポインタが指し示している。関数fun_bの区間の先頭は、関数fun_bのフレームポインタが指し示している。
スタック領域176へのローカル変数の値の格納方法は、製品モジュール142をコンパイルするコンパイラによって静的に決定される。そのため、製品モジュール142を何度実行しても、フレームポインタからローカル変数の先頭までのメモリアドレスの差分(オフセット)は不変である。例えば、関数fun_aの変数var1の位置は、関数fun_aのフレームポインタから4バイト後ろである。関数fun_aの変数var2の位置は、関数fun_aのフレームポインタから8バイト後ろである。関数fun_bの変数var11の位置は、関数fun_bのフレームポインタの位置である。
そこで、スタックオフセットテーブル175は、関数名と変数名とオフセットとを対応付ける。スタックオフセットテーブル175は、製品モジュール142に対応付けられている。1つの製品モジュールにつき1つのスタックオフセットテーブルが作成される。関数153は、引数として受け取った関数名および変数名に対応するオフセットをスタックオフセットテーブル175から検索する。関数153は、関数名に対応するフレームポインタにオフセットを加算して、変数のアドレスを算出する。関数名に対応するフレームポインタは、スタック領域176を逆方向に辿ることで検出できる。
スタックオフセットテーブル175は、製品モジュール142を解析することで作成される。例えば、情報処理装置100は、コンパイル済みの製品モジュール142をアセンブリコードに変換する。または、開発者は、製品モジュール142をコンパイルするコンパイラがアセンブリコードも出力するよう設定する。情報処理装置100は、ローカル変数の値をスタック領域176に格納する命令を、アセンブリコードの中から検出する。開発者は、検出された命令に基づいて各ローカル変数のオフセットを特定する。なお、スタックオフセットテーブル175は、関数153の中に組み込まれていてもよいし、関数153の外部の設定ファイルとして保存されてもよい。
図7は、製品モジュールとテストモジュールの第3の例を示す図である。
製品モジュール143は、関数fun_aおよび関数fun_c(関数144)を含む。関数144は、外部モジュールからの関数名による参照が制限される非グローバル関数である。関数144は、例えば、C++言語のスタティック関数に相当する。スタティック関数は、外部モジュールと同一の関数名を使用することが許容される代わりに、スコープが同一モジュール内に限定される非グローバル関数である。
関数fun_aは、テストモジュール154の関数testを呼び出す。テストモジュール154は、関数testを含む。関数testは、製品モジュール143の内部状態を変更するにあたり、関数144を呼び出す。しかし、関数testが製品モジュール143の外部に存在するため、関数testからは関数144の関数名が認識されず、関数名による通常の関数呼び出しは失敗する。そこで、関数144のアドレス解決のため、製品モジュールとテストモジュールのプログラム構造が以下のように変更される。
図8は、製品モジュールとテストモジュールの第4の例を示す図である。
製品モジュール145は、関数fun_a、関数fun_c(関数144)および関数get_internal_fun_addr(関数146)を含む。関数146は、関数名fnameを引数として受け取り、引数によって特定される関数のアドレスを応答するユーティリティ関数である。関数146は、外部モジュールからでも関数名で呼び出し可能なグローバル関数である。関数146がアドレス解決関数と呼ばれることがある。
関数146は、関数144と同一のモジュールに属する。このため、関数146は、関数144の関数名を引数として受け取ると、プログラムがもつ通常のアドレス解決のメカニズムに基づいて、関数名から関数144のアドレスを検索できる。関数146が応答するアドレスは、関数144がロードされたメモリ領域の先頭を指し示すメモリアドレスである。関数fun_aは、テストモジュール155の関数testを呼び出す。
テストモジュール155は、関数testおよび関数get_fun_addr(関数156)を含む。関数156は、関数名fnameを引数として受け取り、引数によって特定される関数のアドレスを応答するユーティリティ関数である。関数156がアドレス解決関数と呼ばれることがある。関数156は、関数testと製品モジュール145の関数146との間で、関数のアドレス解決を仲介する。関数156は、引数として受け取った関数名を用いて関数146を呼び出し、関数146から関数のアドレスを示すポインタを受け取り、受け取ったポインタを関数testに渡す。
関数testは、製品モジュール145がもつ関数のうち利用したい非グローバル関数について、関数名を指定して関数156を呼び出す。関数testは、関数156から受け取ったポインタが指し示す関数を、関数名に代えてアドレスを用いて呼び出す。
以上の通り、製品モジュール145の関数fun_aは、テストモジュール155の関数testを呼び出す。関数testは、関数144のアドレスをテストモジュール155の関数156に問い合わせる。関数156は、関数144のアドレスを製品モジュール145の関数146に問い合わせる。関数146はアドレスを関数156に通知し、関数156はアドレスを関数testに通知する。関数testは、関数144を呼び出す。
なお、前述のローカル変数のアドレス解決では、テストモジュール152がスタックオフセットテーブル175をもつ。この点、製品モジュール142が、スタックオフセットテーブル175を参照するアドレス解決関数をもち、テストモジュール152が、製品モジュール142にローカル変数のアドレスを問い合わせるようにすることも可能である。
図9は、製品モジュールとテストモジュールの構造例を示す図である。
製品モジュール160は、テスト対象コード161、署名検証コード162、テスト起動コード163、関数アドレス解決コード164および検証鍵165を含む。テストモジュール170は、テスト実行コード171、デジタル署名172、変数アドレス解決コード173、関数アドレス解決コード174およびスタックオフセットテーブル175を含む。ただし、スタックオフセットテーブル175は、テストモジュール170と分離されていてもよく、変数アドレス解決コード173に埋め込まれていてもよい。
テスト対象コード161は、テスト対象となる製品モジュール160の本来のプログラムである。テスト対象コード161は、ローカル変数をもつ関数を含むことがある。また、テスト対象コード161は、関数144のような非グローバル関数を含むことがある。
署名検証コード162は、テストモジュール170に含まれるデジタル署名172を、製品モジュール160に含まれる検証鍵165を用いて検証するプログラムである。デジタル署名172を検証することで、攻撃者によって作成された不正なテストモジュールを製品モジュール160が呼び出してしまうセキュリティリスクを低減できる。例えば、署名検証コード162は、テストモジュール170のうちデジタル署名172以外の部分のダイジェストをハッシュ関数を用いて算出し、デジタル署名172を検証鍵165で復号し、ダイジェストと復号結果とが一致するか判定する。ダイジェストと復号結果とが一致する場合は検証成功であり、一致しない場合は検証失敗である。
テスト起動コード163は、テストモジュール170に含まれるテスト実行コード171を呼び出すプログラムである。テスト起動コード163は、テスト番号オプションを含むコマンドに基づいてソフトウェア製品が起動された場合、テスト番号を引数として渡してテスト実行コード171を呼び出す。ただし、テスト起動コード163は、テストモジュール170が見つからない場合や、署名検証コード162による検証が失敗した場合、テスト実行コード171の呼び出しをスキップする。
関数アドレス解決コード164は、テストモジュール170からの要求に応じて、非グローバル関数のアドレスを応答するプログラムである。関数アドレス解決コード164は、前述の関数146に相当する。関数アドレス解決コード164は、関数名を引数として受け取り、テスト対象コード161の中から指定された関数名をもつ非グローバル関数を検索し、非グローバル関数のメモリ上のアドレスを応答する。
検証鍵165は、デジタル署名172の検証に使用される暗号鍵である。通常、検証鍵165は、デジタル署名172に使用された秘密鍵とペアになる公開鍵である。公開鍵と秘密鍵のペアは、製品モジュール160の開発者によって保持されている。
テスト実行コード171は、製品モジュール160の内部状態を、指定されたテスト番号に対応する異常状態に強制的に変更するプログラムである。テスト実行コード171は、前述の関数testに相当する。テスト実行コード171は、テスト対象コード161で定義された変数の値をメモリ上で異常値に書き換える。このとき、テスト実行コード171は、ローカル変数のアドレスを取得するために変数アドレス解決コード173を呼び出すことがある。また、テスト実行コード171は、非グローバル関数のアドレスを取得するために関数アドレス解決コード174を呼び出すことがある。
デジタル署名172は、テストモジュール170の作成者の正当性を証明する暗号文である。例えば、デジタル署名172は、テストモジュール170の他の部分のダイジェストを、製品モジュール160の開発者がもつ秘密鍵で暗号化することで生成される。ペアとなる検証鍵で復号した場合のみ、デジタル署名172の検証が成功する。
変数アドレス解決コード173は、テスト実行コード171からの要求に応じて、ローカル変数のメモリ上のアドレスを応答するプログラムである。変数アドレス解決コード173は、前述の関数153に相当する。変数アドレス解決コード173は、関数名および変数名を引数として受け取り、スタックオフセットテーブル175から関数名および変数名に対応するオフセットを検索する。変数アドレス解決コード173は、スタック領域176から、関数名に対応するフレームポインタを特定し、フレームポインタにオフセットを加算してローカル変数のアドレスを算出する。
関数アドレス解決コード174は、テスト実行コード171からの要求に応じて、非グローバル関数のメモリ上のアドレスを応答するプログラムである。関数アドレス解決コード174は、前述の関数156に相当する。関数アドレス解決コード174は、関数名を引数として受け取り、関数アドレス解決コード164を呼び出し、関数アドレス解決コード164から取得したアドレスをテスト実行コード171に渡す。
次に、情報処理装置100の機能および処理手順を説明する。
図10は、情報処理装置の機能例を示すブロック図である。
情報処理装置100は、インタープリタ121、JITコンパイラ122、検証鍵記憶部131、オフセットテーブル記憶部132、テスト起動部133、署名検証部134、テスト実行部135、変数アドレス解決部136および関数アドレス解決部137を有する。検証鍵記憶部131およびオフセットテーブル記憶部132は、RAM102またはHDD103を用いて実装される。検証鍵記憶部131は、検証鍵165を記憶する。オフセットテーブル記憶部132は、スタックオフセットテーブル175を記憶する。
テスト起動部133は、テスト起動コード163に従って動作する。署名検証部134は、署名検証コード162に従って動作する。テスト実行部135は、テスト実行コード171に従って動作する。変数アドレス解決部136は、変数アドレス解決コード173に従って動作する。関数アドレス解決部137は、関数アドレス解決コード164および関数アドレス解決コード174に従って動作する。
テスト起動部133は、JITコンパイラ122によるコンパイラスレッドが起動したとき、コマンドにテスト番号オプションが含まれるか、および、テストモジュール170が特定のディレクトリに存在するか判定する。この条件を満たす場合、テスト起動部133は、署名検証部134にデジタル署名172の検証を依頼する。デジタル署名172の検証が成功した場合、テスト起動部133は、テスト実行部135を呼び出す。一方、コマンドにテスト番号オプションが含まれない場合、テストモジュール170が存在しない場合、または、デジタル署名172の検証が失敗した場合、テスト起動部133は、テスト実行部135を呼び出さない。この場合、コンパイラスレッドが通常通り実行される。
署名検証部134は、テスト起動部133からの要求に応じて、テストモジュール170からデジタル署名172を抽出し、検証鍵記憶部131に記憶された検証鍵165を用いてデジタル署名172を検証する。署名検証部134は、デジタル署名172の検証の成功または失敗をテスト起動部133に報告する。
テスト実行部135は、JITコンパイラ122の中で定義される変数の値を、指定されたテスト番号に対応する異常値に書き換えることで、特定の異常状態を強制的に作り出す。そして、テスト実行部135は、異常状態のもとでJITコンパイラ122にコンパイラスレッドを実行させる。これにより、JITコンパイラ122は、発生した異常状態に対応したリカバリ処理を実行する。異常状態を作り出す過程で、テスト実行部135は、変数アドレス解決部136にローカル変数のアドレスを問い合わせることがあり、関数アドレス解決部137に非グローバル関数のアドレスを問い合わせることがある。
変数アドレス解決部136は、テスト実行部135から関数名と変数名を受け取る。すると、変数アドレス解決部136は、オフセットテーブル記憶部132に記憶されたスタックオフセットテーブル175から、関数名と変数名のペアに対応するオフセットを検索する。変数アドレス解決部136は、関数名に対応するフレームポインタにオフセットを加算して、ローカル変数のアドレスを算出する。
関数アドレス解決部137は、テスト実行部135から関数名を受け取る。すると、関数アドレス解決部137は、製品モジュール側とテストモジュール側との間の通信を通じて、指定された関数名に対応する非グローバル関数のアドレスを解決する。
図11は、コンパイラスレッドの手順例を示すフローチャートである。
(S10)JITコンパイラ122は、インタープリタ121からコンパイルの依頼を受け付ける。すると、JITコンパイラ122は、コンパイル対象のメソッドのクラス名およびメソッド名を特定し、メソッドのバイトコードを抽出する。
(S11)テスト起動部133は、プログラム実行環境120を起動するためのコマンドに、テスト番号オプションが含まれていたか判断する。コマンドにテスト番号オプションが含まれていた場合、ステップS12に処理が進む。コマンドにテスト番号オプションが含まれていなかった場合、ステップS19に処理が進む。
(S12)テスト起動部133は、ファイルシステムからテストモジュールを検索し、テストモジュールが存在するか判断する。テストモジュールが存在する場合、ステップS13に処理が進む。テストモジュールが存在しない場合、ステップS19に処理が進む。
(S13)署名検証部134は、テストモジュールからデジタル署名を検索し、テストモジュールにデジタル署名が含まれるか判断する。テストモジュールにデジタル署名が含まれる場合、ステップS14に処理が進む。テストモジュールにデジタル署名が含まれない場合、ステップS19に処理が進む。
(S14)署名検証部134は、テストモジュールからデジタル署名を抽出する。署名検証部134は、検証鍵を読み出し、デジタル署名を検証鍵で検証する。
(S15)署名検証部134は、デジタル署名の検証が成功したか判断する。デジタル署名の検証が成功した場合、ステップS16に処理が進む。デジタル署名の検証が失敗した場合、ステップS19に処理が進む。
(S16)テスト起動部133は、テストモジュールをメモリにロードし、テストモジュールに含まれるテスト関数のアドレスを解決する。テスト関数のアドレス解決では、テスト関数の関数名とメモリ上のアドレスとの対応関係が保持される。
(S17)テスト起動部133は、コマンドのテスト番号オプションで指定されたテスト番号を引数として渡して、テストモジュールのテスト関数を呼び出す。
(S18)テスト実行部135は、テスト起動部133から受け取ったテスト番号に対応する処理を実行する。このとき、テスト実行部135は、JITコンパイラ122で定義された変数の値を特定の異常値に書き換えることで、JITコンパイラ122の中に特定の異常状態を発生させる。異常状態の発生によってリカバリ処理が開始されるため、テスト実行部135は、JITコンパイラ122によるバイトコードのコンパイルをスキップしてもよい。異常状態の例として、メモリアクセス違反、内部矛盾検出、応答なし状態などが挙げられる。そして、ステップS20に処理が進む。
(S19)JITコンパイラ122は、インタープリタ121から指定されたメソッドのバイトコードをネイティブコードにコンパイルする。
(S20)JITコンパイラ122は、バイトコードのコンパイルにおいて異常状態が発生したか判断する。異常状態は、ステップS19のコンパイル処理の中で実際に発生することもあるし、ステップS18によって擬似的に発生することもある。異常状態が発生した場合、ステップS21に処理が進む。それ以外の場合、インタープリタ121からの要求に対するコンパイラスレッドの処理が終了する。なお、コンパイラスレッド自体は、ユーザプログラム123が停止するまで起動したままとなる。
(S21)JITコンパイラ122は、バイトコードのコンパイルを停止してリカバリ処理に移行する。JITコンパイラ122は、プログラム実行環境120の他の機能に影響を与えないようにメモリ状態を復旧するリカバリ処理を実行する。JITコンパイラ122は、上記の一連の処理の結果を出力する。
例えば、JITコンパイラ122は、コマンドにテスト番号オプションが含まれていたもののテストモジュールを呼び出さなかった場合、エラーメッセージを出力する。また、JITコンパイラ122は、リカバリ処理を実行した場合、リカバリ処理の原因となった異常状態の情報およびリカバリ処理の結果を出力する。JITコンパイラ122は、処理結果をログファイルに記録してもよいし、表示装置111に表示してもよい。また、JITコンパイラ122は、処理結果を他の情報処理装置に送信してもよい。
図12は、アドレス解決の手順例を示すフローチャートである。
(S30)テスト実行部135は、テスト関数において、変数アドレス解決ユーティリティの呼び出しが規定されているか判断する。変数アドレス解決ユーティリティの呼び出しが規定されている場合、ステップS31に処理が進む。変数アドレス解決ユーティリティの呼び出しが規定されていない場合、ステップS35に処理が進む。
(S31)変数アドレス解決部136は、テスト関数が参照したいローカル変数について、関数名および変数名をテスト実行部135から取得する。
(S32)変数アドレス解決部136は、スタック領域をテスト関数の区間から遡って、指定された関数名に対応するフレームポインタを特定する。
(S33)変数アドレス解決部136は、スタックオフセットテーブル175から、指定された関数名と変数名のペアに対応するオフセットを検索する。
(S34)変数アドレス解決部136は、ステップS32で特定されたフレームポインタにステップS33のオフセットを加算して、ローカル変数のアドレスを算出する。変数アドレス解決部136は、算出されたアドレスをテスト関数に渡す。
(S35)テスト実行部135は、テスト関数において、関数アドレス解決ユーティリティの呼び出しが規定されているか判断する。関数アドレス解決ユーティリティの呼び出しが規定されている場合、ステップS36に処理が進む。関数アドレス解決ユーティリティの呼び出しが規定されていない場合、アドレス解決が終了する。
(S36)関数アドレス解決部137は、テスト関数が呼び出したい非グローバル関数について、関数名をテスト実行部135から取得する。
(S37)関数アドレス解決部137は、関数名を指定して、グローバル関数である製品モジュール側の関数アドレス解決ユーティリティを呼び出す。
(S38)関数アドレス解決部137は、製品モジュール側の処理として、指定された関数名をもつ非グローバル関数のアドレスを検索する。関数アドレス解決部137は、関数のアドレスをテストモジュール側に渡し、テスト関数に転送する。
以上説明したように、第2の実施の形態の情報処理装置100は、プログラム実行環境120に含まれるJITコンパイラ122のリカバリ処理のテストを行う。これにより、リカバリ処理の不具合が発見され、デバッグを通じてJITコンパイラ122の品質が向上する。また、情報処理装置100は、テストモジュールを利用して、JITコンパイラ122に含まれる変数の値を異常値に書き換えて、擬似的に異常状態を作り出す。これにより、情報処理装置100は、通常の入力操作のみでは再現が難しい異常状態を作り出すことができ、様々な異常状態に対するリカバリ処理を効率的にテストすることができる。
また、異常状態を設定するテストモジュールは、プログラム実行環境120から分離されており、テスト番号オプションが指定された場合にJITコンパイラ122から呼び出される動的リンクライブラリとして実装される。これにより、開発者はプログラム実行環境120にテストコードを埋め込まなくてよく、プログラム実行環境120の品質管理の負担が軽減される。また、テスト内容を変更しても開発者はプログラム実行環境120を再ビルドしなくてよく、テスト作業が効率化される。
また、デバッガを利用してJITコンパイラ122の動作を検証する場合と比べて、開発者はプログラムの命令のステップ実行やメモリ書き換えなどの低レベルの操作を行わなくてよく、開発者がテスト技術を習得するための学習コストが低下する。また、JITコンパイラ122からテストモジュールにテスト番号を通知することで、同一のテストモジュールが様々な異常状態を作り出すことができる。また、テストモジュールにデジタル署名を付加することで、JITコンパイラ122が不正な外部モジュールを呼び出してしまうリスクが低減され、セキュリティが向上する。
また、テストモジュールには、コンパイラが決定したスタック領域のデータ構造に基づいて事前に作成されるスタックオフセットテーブルと、オフセットからローカル変数のアドレスを算出するユーティリティ関数とが含まれる。このユーティリティ関数を利用することで、外部モジュールであるテストモジュールは、JITコンパイラ122に含まれる関数がもつローカル変数の値にアクセスすることができる。また、このユーティリティ関数を利用することで、テスト関数を実装する開発者の負担が軽減される。
また、JITコンパイラ122には、関数名から関数のアドレスを検索して応答するグローバル関数が含まれ、テストモジュールには、このグローバル関数に関数のアドレスを問い合わせるユーティリティ関数が含まれる。このユーティリティ関数を利用することで、外部モジュールであるテストモジュールは、JITコンパイラ122に含まれる非グローバル関数を呼び出すことができる。また、このユーティリティ関数を利用することで、テスト関数を実装する開発者の負担が軽減される。
10 情報処理装置
11 記憶部
12 処理部
13 ソフトウェア
14 関数
15 変数
16 テストプログラム
17 テスト指示情報

Claims (8)

  1. ソフトウェアをテストモードで実行することを示すテスト指定情報に応じて、前記ソフトウェアとは別個のテストプログラムを呼び出し、
    呼び出された前記テストプログラムを用いて、前記ソフトウェアに含まれる関数が使用する変数を示すアドレスを特定し、前記アドレスが示す前記変数の値を書き換える、
    処理をコンピュータに実行させるテスト処理プログラム。
  2. 前記変数は、前記関数のローカル変数であり、前記テストプログラムは、変数名とスタック領域内の基準位置からのオフセットとを対応付けたオフセット情報を保持し、
    前記テストプログラムは、前記オフセット情報から前記変数に対応するオフセットを取得し、前記取得されたオフセットを用いて前記アドレスを算出する処理を規定する、
    請求項1記載のテスト処理プログラム。
  3. 前記変数の値は、前記ソフトウェアの異常な内部状態を示す異常値に書き換えられる、
    請求項1記載のテスト処理プログラム。
  4. 前記テスト指定情報は、テストケースを識別するテスト番号を含み、
    前記変数の値は、前記テスト番号に応じて異なる値に書き換えられる、
    請求項1記載のテスト処理プログラム。
  5. 前記ソフトウェアは、関数名による参照が制限されるローカル関数と、前記ローカル関数の位置を示す他のアドレスを出力するアドレス解決関数とを更に含み、
    呼び出された前記テストプログラムを用いて、前記アドレス解決関数から前記他のアドレスを取得し、前記他のアドレスに基づいて前記ローカル関数を呼び出す処理を前記コンピュータに更に実行させる、
    請求項1記載のテスト処理プログラム。
  6. 前記テストプログラムは、デジタル署名を含み、
    特定の暗号鍵を用いて前記デジタル署名を検証し、検証が失敗した場合は前記テストプログラムの呼び出しを拒否する処理を前記コンピュータに更に実行させる、
    請求項1記載のテスト処理プログラム。
  7. ソフトウェアをテストモードで実行することを示すテスト指定情報に応じて、前記ソフトウェアとは別個のテストプログラムを呼び出し、
    呼び出された前記テストプログラムを用いて、前記ソフトウェアに含まれる関数が使用する変数を示すアドレスを特定し、前記アドレスが示す前記変数の値を書き換える、
    処理をコンピュータが実行するテスト処理方法。
  8. ソフトウェアと前記ソフトウェアとは別個のテストプログラムとを記憶する記憶部と、
    前記ソフトウェアをテストモードで実行することを示すテスト指定情報に応じて、前記テストプログラムを呼び出し、呼び出された前記テストプログラムを用いて、前記ソフトウェアに含まれる関数が使用する変数を示すアドレスを特定し、前記アドレスが示す前記変数の値を書き換える処理部と、
    を有する情報処理装置。
JP2021053156A 2021-03-26 2021-03-26 テスト処理プログラム、テスト処理方法および情報処理装置 Pending JP2022150518A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2021053156A JP2022150518A (ja) 2021-03-26 2021-03-26 テスト処理プログラム、テスト処理方法および情報処理装置
US17/699,435 US20220308991A1 (en) 2021-03-26 2022-03-21 Test processing method and information processing apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2021053156A JP2022150518A (ja) 2021-03-26 2021-03-26 テスト処理プログラム、テスト処理方法および情報処理装置

Publications (1)

Publication Number Publication Date
JP2022150518A true JP2022150518A (ja) 2022-10-07

Family

ID=83364611

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021053156A Pending JP2022150518A (ja) 2021-03-26 2021-03-26 テスト処理プログラム、テスト処理方法および情報処理装置

Country Status (2)

Country Link
US (1) US20220308991A1 (ja)
JP (1) JP2022150518A (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117234944B (zh) * 2023-11-09 2024-01-30 天津华来科技股份有限公司 一种基于pytest的接口自动化测试方法

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6961924B2 (en) * 2002-05-21 2005-11-01 International Business Machines Corporation Displaying variable usage while debugging
US9529696B2 (en) * 2014-05-30 2016-12-27 Apple Inc. Screen bounds for view debugging
US10565087B2 (en) * 2017-08-03 2020-02-18 Microsoft Technology Licensing, Llc Tentative execution of code in a debugger
US10514969B2 (en) * 2018-01-09 2019-12-24 Microsoft Technology Licensing, Llc Bit-accurate-tracing analysis with applied memory region lifetimes

Also Published As

Publication number Publication date
US20220308991A1 (en) 2022-09-29

Similar Documents

Publication Publication Date Title
US9858072B2 (en) Portable executable file analysis
US8930884B2 (en) Efficient extraction of software dependencies from program code
US20180260199A1 (en) Method and apparatus for intermediate representation of applications
US8359496B1 (en) Fault-resistant just-in-time compiler
US6996808B1 (en) Function injector
US20050108562A1 (en) Technique for detecting executable malicious code using a combination of static and dynamic analyses
Viennot et al. Transparent mutable replay for multicore debugging and patch validation
US9594670B2 (en) Managing software dependencies during software testing and debugging
KR20140124774A (ko) 소프트웨어 코드의 생성 및 캐싱 기법
CN111428233A (zh) 一种嵌入式设备固件的安全性分析方法
Peng et al. {GLeeFuzz}: Fuzzing {WebGL} Through Error Message Guided Mutation
US20220308991A1 (en) Test processing method and information processing apparatus
CN114676436A (zh) 一种基于结构化变异的安卓应用多媒体解析库漏洞挖掘系统及方法
Li et al. Towards a generic framework for automating extensive analysis of android applications
Hermann et al. Getting to know you: Towards a capability model for java
Dong et al. What did you pack in my app? a systematic analysis of commercial Android packers
Saieva et al. Ad hoc test generation through binary rewriting
Edwards et al. AFID: an automated approach to collecting software faults
JP2009064125A (ja) サーバ装置、そのプログラム
Gauriar Automating and Simplifying Memory Corruption Attack Response Using Failure-Aware Computing
US20070169062A1 (en) Suspending memory analyzing of a program performed by a runtime memory analysis system
Edwards et al. AFID: an automated fault identification tool

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20231207