(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-07-01
(45)【発行日】2024-07-09
(54)【発明の名称】検出プログラム、検出方法及び検出装置
(51)【国際特許分類】
G06F 11/36 20060101AFI20240702BHJP
【FI】
G06F11/36 192
G06F11/36 188
(21)【出願番号】P 2020128950
(22)【出願日】2020-07-30
【審査請求日】2023-04-07
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】桐山 卓弥
【審査官】山本 俊介
(56)【参考文献】
【文献】特表2019-530927(JP,A)
【文献】特開2017-102920(JP,A)
【文献】IDS09-J. 適切なロケールを指定せずに、ロケール依存メソッドをロケール依存データに対して使用しない,JPCERT/CC [online],一般社団法人JPCERTコーディネーションセンター,2012年01月16日,https://www.jpcert.or.jp/java-rules/ids09-j.html [2024年5月23日検索]
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/36
(57)【特許請求の範囲】
【請求項1】
コンピュータに、
ソフトウェアのテストを実行し、ロケールが未設定であるサブプロセスを特定し、
テストの実行結果に基づいて、エラーとなったテストのうち出力結果が英語でないテストを特定し、
特定されたサブプロセスの情報と特定されたテストの情報とに基づいて、英語ロケールの設定漏れを検出する
処理を実行させることを特徴とする検出プログラム。
【請求項2】
前記サブプロセスを特定する処理は、前記サブプロセスの環境変数又はコマンドラインに基づいてロケールが未設定であることを特定することを特徴とする請求項1に記載の検出プログラム。
【請求項3】
前記出力結果が英語でないテストを特定する処理は、出力結果のコード、出力結果に含まれる通貨の単位又は出力結果に含まれる数値の区切りを用いて該テストを特定することを特徴とする請求項1又は2に記載の検出プログラム。
【請求項4】
前記検出する処理は、特定されたサブプロセスのメインプロセスの識別子と前記出力結果が英語でないテストのメインプロセスの識別子に基づいて前記設定漏れを検出することを特徴とする請求項1、2又は3に記載の検出プログラム。
【請求項5】
前記コンピュータに、
前記サブプロセスを起動するコマンドラインを修正して英語ロケールを設定する処理をさらに実行することを特徴とする請求項1~4のいずれか1つに記載の検出プログラム。
【請求項6】
前記ソフトウェアは、オープンソースソフトウェアであることを特徴とする請求項1~5のいずれか1つに記載の検出プログラム。
【請求項7】
コンピュータが、
ソフトウェアのテストを実行し、ロケールが未設定であるサブプロセスを特定し、
テストの実行結果に基づいて、エラーとなったテストのうち出力結果が英語でないテストを特定し、
特定されたサブプロセスの情報と特定されたテストの情報とに基づいて、英語ロケールの設定漏れを検出する
処理を実行することを特徴とする検出方法。
【請求項8】
ソフトウェアのテストを実行し、ロケールが未設定であるサブプロセスを特定する特定部と、
テストの実行結果に基づいて、エラーとなったテストのうち出力結果が英語でないテストを特定し、特定部により特定されたサブプロセスの情報と特定されたテストの情報とに基づいて、英語ロケールの設定漏れを検出する検出部と
を有することを特徴とする検出装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、検出プログラム、検出方法及び検出装置に関する。
【背景技術】
【0002】
ソフトウェアの実装では、テストプログラムの実行が欠かせない。このため、例えばオープンソースソフトウェア(OSS:Open Source Software)では、テストプログラムがソースプログラムとともに提供される。OSSコミュニティの共通言語は英語であり、OSSの動作を確認するテストプログラムも英語ロケールでの走行を前提に作成される。ここで、ロケールとは、プログラムの実行環境に設定される言語を表す。
【0003】
例えば、テスト結果の判定文は英語で記載される。このため、英語ロケール以外の環境でテストを実行すると、英語以外の言語による出力がテスト結果の判定に用いられる判定文と不一致となり、テストでエラーが発生したと判定される。
【0004】
エラーが発生すると、エラーの原因が英語ロケールにあるのか英語ロケール以外の環境にあるのかを確認する必要がある。また、OSSのテスト項目は、非常に多く、例えば、OpenJDK(Java Development Kit)のJCK(Java Compatibility Kit)の場合、10万件以上ある。このため、英語ロケールを設定してテストプログラムを実行することで、英語ロケールを原因とするエラーの発生を防ぐことが行われる。
【0005】
なお、従来技術として、アプリケーションソースコード内の地域化されていない行の検出、修正、及び翻訳を自動で行う技術がある。また、従来技術として、グローバライゼーション・テスト動作の組を用いたグローバライゼーション・テスト管理システムがある。このグローバライゼーション・テスト管理システムは、グローバライゼーション・データの組を収集し、グローバライゼーション・データの組に基づいて、グローバライゼーション・テスト動作の組の実行を決定する。そして、このグローバライゼーション・テスト管理システムは、グローバライゼーション・テスト動作の組を実行することによって、グローバライゼーション・データの組を処理する。そして、このグローバライゼーション・テスト管理システムは、処理したことに応答して、グローバライゼーション・テスト出力データの組を確立する。
【先行技術文献】
【特許文献】
【0006】
【文献】特表2019-530927号公報
【文献】特開2017-102920号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
英語ロケール以外の環境において、英語ロケールを設定してテストプログラムを実行しても、テストプログラム内で起動されるサブプロセスには、英語ロケールが設定されない。
図7は、テストプログラム内で起動されるサブプロセスのロケールを示す図である。
図7に示すように、例えば日本では、OS(Operating System)に日本語ロケールが設定される。このため、英語ロケールでの走行を前提に作成されたテストプログラム(TP:Test Program)は、英語ロケール設定の下に実行される。
【0008】
しかしながら、テストプログラムのメインプロセスからforkにより生成されたサブプロセスは、OSのロケール設定を参照し、OSのロケール設定が日本語ロケールであるので、日本語ロケール下で実行される。このため、サブプロセスにおいては英語ロケールの設定漏れが原因でエラー(Error)が発生するが、エラーの原因が英語ロケールにあるのか英語ロケール以外の環境にあるのかを判定することができない。
【0009】
本発明は、1つの側面では、テストプログラムの実行において発生したエラーの原因が英語ロケールの設定漏れにあることを自動的に判定することを目的とする。
【課題を解決するための手段】
【0010】
1つの態様では、検出プログラムは、コンピュータに、ソフトウェアのテストを実行し、ロケールが未設定であるサブプロセスを特定し、テストの実行結果に基づいて、エラーとなったテストのうち出力結果が英語でないテストを特定する処理を実行させる。そして、前記検出プログラムは、前記コンピュータに、特定されたサブプロセスの情報と特定されたテストの情報とに基づいて、英語ロケールの設定漏れを検出する処理を実行させる。
【発明の効果】
【0011】
1つの側面では、本発明は、テストプログラムの実行において発生したエラーの原因が英語ロケールの設定漏れにあることを自動的に判定することができる。
【図面の簡単な説明】
【0012】
【
図1】
図1は、実施例に係る検出装置の機能構成を示す図である。
【
図2】
図2は、ロケール未設定リストの一例を示す図である。
【
図3】
図3は、テスト結果ログの一例を示す図である。
【
図4】
図4は、検出装置による検出処理のフローを示すフローチャートである。
【
図5】
図5は、プロセス監視部による監視処理のフローを示すフローチャートである。
【
図6】
図6は、実施例に係る検出プログラムを実行するコンピュータのハードウェア構成を示す図である。
【
図7】
図7は、テストプログラム内で起動されるサブプロセスのロケールを示す図である。
【発明を実施するための形態】
【0013】
以下に、本願の開示する検出プログラム、検出方法及び検出装置の実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。
【実施例】
【0014】
まず、実施例に係る検出装置の機能構成について説明する。
図1は、実施例に係る検出装置の機能構成を示す図である。
図1に示すように、実施例に係る検出装置1は、プロセス監視部11と、テスト実行部12と、判定部13と、修正部14とを有する。
【0015】
プロセス監視部11は、プロセスの起動を監視し、プロセスが起動されると、起動されたプロセスの環境変数又はコマンドライン引数に基づいてロケール設定を確認する。ここで、環境変数は、プロセスが実行される環境を示す変数である。コマンドライン引数は、プロセスを起動するコマンドラインの引数である。
【0016】
プロセス監視部11は、ps、/proc.[pid]等を用いてロケール設定を確認する。Java(登録商標)の場合には、コマンドラインの「-Duser.language=en」、「-Duser.country=US」等がロケール設定の確認に用いられる。
【0017】
そして、プロセス監視部11は、起動されたプロセスにロケール設定がない場合には、親プロセスをメインプロセスまで順番にたどり、メインプロセスまでのプロセスの識別子をロケール未設定リスト16に出力する。なお、プロセス監視部11は、特許請求の範囲に記載の特定部に対応する。
図2は、ロケール未設定リスト16の一例を示す図である。
図2に示すように、ロケール未設定リスト16には、P識別子、プロセスID、親プロセスID、コマンドライン、環境変数が含まれる。
【0018】
P識別子は、親プロセスであるか否かを示し、親プロセスの場合は「P」であり、親プロセスでない場合は空白である。プロセスIDは、プロセスを識別する識別子である。最初の行のプロセスID「1603」が起動されたサブプロセスの識別子である。親プロセスIDは、親のプロセスを識別する識別子である。環境変数の「LANG=・・・」は、ロケール設定の確認に用いられる。
【0019】
テスト実行部12は、OSSのテストプログラムを実行し、エラーが発生したか否かを判定する。そして、テスト実行部12は、エラーが発生した場合には、判定部13にテストプログラムのメインプロセスのプロセスIDとともにエラーの発生を通知し、エラーが発生しなかった場合には、次のテストプログラムを実行する。
【0020】
また、テスト実行部12は、テストプログラムの実行結果を示すログをテスト結果ログ17に出力する。
図3は、テスト結果ログ17の一例を示す図である。
図3において、「test result:Failed」は、エラーの発生を示す。また、「¥u3053¥u308c¥u306f¥u3001¥u30c6¥u30b9¥u30c8¥u3067¥u3059¥u3002」はunicode表記で日本語のメッセージを示す。
【0021】
判定部13は、テスト実行部12から通知されたメインプロセスのプロセスIDとロケール未設定リスト16とテスト結果ログ17とに基づいて、英語ロケールの設定漏れを検出する。そして、判定部13は、英語ロケールの設定漏れを検出すると、エラーの原因が英語ロケールの設定漏れにあると判定する。
【0022】
具体的には、判定部13は、テスト実行部12から通知されたメインプロセスのプロセスIDとロケール未設定リスト16に含まれるメインプロセスのプロセスIDとに基づいて、ロケールが未設定のサブプロセスを特定する。
【0023】
また、判定部13は、テスト結果ログ17に英語でないログが含まれるか否かを判定し、英語でないログが含まれる場合には、テストプログラムを出力結果が英語でないテストプログラムとして特定する。具体的には、判定部13は、テスト結果ログ17に含まれるメッセージが期待されるメッセージと異なる場合に、メッセージのunicodeに基づいてメッセージが英語であるか否かを判定する。
【0024】
例えば、期待されるメッセージが「This is a test.」であるとする。このとき、テスト結果ログ17に含まれるメッセージがunicodeで「¥u3053¥u308c¥u306f¥u3001¥u30c6¥u30b9¥u30c8¥u3067¥u3059¥u3002」であるとする。「¥u3053¥u308c¥u306f¥u3001¥u30c6¥u30b9¥u30c8¥u3067¥u3059¥u3002」は、「これはテストです。」のunicodeなので、判定部13は、メッセージは英語でないと判定する。
【0025】
あるいは、判定部13は、期待されるメッセージに「$123,456」のように通貨の単位「$」が含まれ、テスト結果ログ17のメッセージに「¥123,456」のように異なる通貨の単位「¥」が含まれる場合、メッセージは英語でないと判定する。あるいは、判定部13は、期待されるメッセージに「4,294,967.00」のような数値が含まれ、テスト結果ログ17のメッセージに「42,94,967.00」が含まれる場合、数値の区切りが異なるので、メッセージは英語でないと判定する。なお、「42,94,967.00」はヒンズー語における数値の区切りである。
【0026】
そして、判定部13は、ロケールが未設定のサブプロセスを特定することができ、テストプログラムの出力結果が英語でないと判定した場合に、英語ロケールの設定漏れがあると判定し、エラーの原因が英語ロケールの設定漏れにあると判定する。なお、判定部13は、特許請求の範囲に記載の検出部に対応する。
【0027】
修正部14は、英語ロケールの設定漏れがある場合に、判定部13により特定されたサブプロセスの英語ロケールを設定する。修正部14は、例えば、サブプロセスを生成するコマンドライン引数を修正することで英語ロケールを設定する。
【0028】
次に、検出装置1による処理のフローについて
図4及び
図5を用いて説明する。
図4は、検出装置1による検出処理のフローを示すフローチャートである。
図4に示すように、検出装置1は、最新テストセット(テストプログラム)をクローンする(ステップS1)。ここで、クローンするとは、コピーすることである。そして、検出装置1は、テストセットをビルドする(ステップS2)。ここで、ビルドするとは、テストセットに対してコンパイル等を行ってテストセットを実行可能にすることである。
【0029】
そして、検出装置1は、プロセス監視部11を起動する(ステップS3)。そして、検出装置1は、テストを実行し(ステップS4)、エラーが発生したか否かを判定する(ステップS5)。そして、検出装置1は、エラーが発生しなかった場合には、全テストを終了したか否かを判定し(ステップS6)、全テストを終了した場合には検出処理を終了し、終了していないテストセットがある場合には、ステップS1に戻る。
【0030】
一方、エラーが発生した場合には、検出装置1は、ロケール未設定リスト16に基づいて、テストセットのサブプロセスにロケール未設定があるか否かを判定する(ステップS7)。そして、ロケール未設定がある場合には、検出装置1は、テストセットの出力結果が英語であるか否かを判定する(ステップS8)。
【0031】
そして、テストセットの出力結果が英語でない場合には、検出装置1は、テストセットの修正又はテスト環境を変更する(ステップS9)。検出装置1は、例えば、ロケール未設定のサブプロセスを起動するコマンドラインを修正する。そして、検出装置1は、ステップS2に戻る。
【0032】
一方、テストセットの出力結果が英語である場合、又は、テストセットのサブプロセスにロケール未設定がない場合には、検出装置1は、エラーメッセージを出力する(ステップS10)。例えば、検出装置1は、エラー原因を調査し、エラー原因への対策を行うように、エラーメッセージで依頼する。
【0033】
このように、検出装置1は、テストセットのサブプロセスにロケール未設定があるか否か、及び、テストセットの出力結果が英語であるか否かを判定することで、英語ロケールの設定漏れを検出することができる。なお、検出装置1は、ステップS7とステップS8の順序を入れ替えてもよい。
【0034】
図5は、プロセス監視部11による監視処理のフローを示すフローチャートである。
図5に示すように、プロセス監視部11は、プロセス監視を行い(ステップS21)、プロセス起動があるか否かを判定する(ステップS22)。そして、プロセス起動がない場合には、プロセス監視部11は、ステップS21に戻る。
【0035】
一方、プロセス起動がある場合には、プロセス監視部11は、プロセスID、コマンドライン、環境変数を取得し(ステップS23)、コマンドライン又は環境変数に基づいて、起動されたサブプロセスにロケール設定があるか否かを判定する(ステップS24)。そして、ロケール設定がある場合には、プロセス監視部11は、ステップS21に戻る。
【0036】
一方、ロケール設定がない場合には、プロセス監視部11は、親プロセスがあるか否かを判定し(ステップS25)、親プロセスがある場合には、親プロセスのプロセスID、コマンドライン、環境変数を取得し(ステップS26)、ステップS25に戻る。一方、親プロセスがない場合には、プロセス監視部11は、起動されたサブプロセス及び全ての親プロセスの情報を解析して、ロケール未設定リスト16に格納する(ステップS27)。そして、プロセス監視部11は、ステップS21に戻る。
【0037】
このように、プロセス監視部11は、サブプロセスが起動され、起動されたサブプロセスにロケール設定がないときに、サブプロセス及び全ての親プロセスの情報を解析して、ロケール未設定リスト16に格納する。したがって、検出装置1は、ロケール未設定リスト16を用いて英語ロケールの設定漏れを検出することができる。
【0038】
上述してきたように、実施例では、プロセス監視部11は、テストプログラムの実行中に、ロケールが未設定であるサブプロセスを特定し、ロケールが未設定であるサブプロセス及び全ての親プロセスの情報を解析してロケール未設定リスト16に格納する。また、判定部13は、テスト結果ログ17に基づいて、テストプログラムの出力結果が英語であるか否かを判定する。そして、判定部13は、テストプログラムの実行においてロケールが未設定のサブプロセスがあり、テストプログラムの出力結果が英語でないと判定した場合に、英語ロケールの設定漏れがあると判定する。したがって、検出装置1は、テストプログラムの実行において発生したエラーの原因が英語ロケールの設定漏れにあることを自動的に判定することができる。
【0039】
また、実施例では、プロセス監視部11は、サブプロセスの環境変数又はコマンドラインに基づいてロケールが未設定であることを特定するので、ロケール未設定を正確に判定することができる。
【0040】
また、実施例では、判定部13は、テスト結果ログ17に含まれるメッセージのコード、当該メッセージに含まれる通貨の単位又は当該メッセージに含まれる数値の区切りを用いてテストプログラムの出力結果が英語でないと判定する。したがって、判定部13は、テストプログラムの出力結果が英語でないことを正確に判定することができる。
【0041】
また、実施例では、判定部13は、テスト実行部12から通知されたメインプロセスのプロセスIDとロケール未設定リスト16に含まれるメインプロセスのプロセスIDとに基づいて、ロケールが未設定のサブプロセスがあるか否かを判定する。したがって、判定部13は、ロケールが未設定のサブプロセスの有無を正確に判定することができる。
【0042】
なお、実施例では、検出装置1について説明したが、検出装置1が有する構成をソフトウェアによって実現することで、同様の機能を有する検出プログラムを得ることができる。そこで、検出プログラムを実行するコンピュータについて説明する。
【0043】
図6は、実施例に係る検出プログラムを実行するコンピュータのハードウェア構成を示す図である。
図6に示すように、コンピュータ50は、メインメモリ51と、CPU(Central Processing Unit)52と、LAN(Local Area Network)インタフェース53と、HDD(Hard Disk Drive)54とを有する。また、コンピュータ50は、スーパーIO(Input Output)55と、DVI(Digital Visual Interface)56と、ODD(Optical Disk Drive)57とを有する。
【0044】
メインメモリ51は、プログラムやプログラムの実行途中結果等を記憶するメモリである。CPU52は、メインメモリ51からプログラムを読み出して実行する中央処理装置である。CPU52は、メモリコントローラを有するチップセットを含む。
【0045】
LANインタフェース53は、コンピュータ50をLAN経由で他のコンピュータに接続するためのインタフェースである。HDD54は、プログラムやデータを格納するディスク装置であり、スーパーIO55は、マウスやキーボード等の入力装置を接続するためのインタフェースである。DVI56は、液晶表示装置を接続するインタフェースであり、ODD57は、DVDの読み書きを行う装置である。
【0046】
LANインタフェース53は、PCIエクスプレス(PCIe)によりCPU52に接続され、HDD54及びODD57は、SATA(Serial Advanced Technology Attachment)によりCPU52に接続される。スーパーIO55は、LPC(Low Pin Count)によりCPU52に接続される。
【0047】
そして、コンピュータ50において実行される検出プログラムは、コンピュータ50により読み出し可能な記録媒体の一例であるDVDに記憶され、ODD57によってDVDから読み出されてコンピュータ50にインストールされる。あるいは、検出プログラムは、LANインタフェース53を介して接続された他のコンピュータシステムのデータベース等に記憶され、これらのデータベースから読み出されてコンピュータ50にインストールされる。そして、インストールされた検出プログラムは、HDD54に記憶され、メインメモリ51に読み出されてCPU52によって実行される。
【0048】
また、実施例では、OSSの英語ロケールの設定漏れを検出する場合について説明したが、検出装置1は、他のソフトウェアの英語ロケールの設定漏れを検出してもよい。また、実施例では、英語ロケールの設定漏れを検出する場合について説明したが、検出装置1は、他の言語のロケールの設定漏れを検出してもよい。
【符号の説明】
【0049】
1 検出装置
11 プロセス監視部
12 テスト実行部
13 判定部
14 修正部
16 ロケール未設定リスト
17 テスト結果ログ
50 コンピュータ
51 メインメモリ
52 CPU
53 LANインタフェース
54 HDD
55 スーパーIO
56 DVI
57 ODD