このまえ2016 Japan IT Week春に行ってきたんだけど、
そこで、スクリプトによるテスト自動化ツールというのをやっていた。
スクリプトを書いて、負荷テスト、機能テストをやろうという話なんだけど、
この手のスクリプトによる自動化テストは、負荷テスト以外にも、
回帰テストにも良く使われるよね。
だけど、国際化対応の確認にもいいと思う。
国際化対応というと、getTextすればいい・・・と思うかもしれないけど、
実は、ソースの見えるところだけではだめだったりする。
たとえば
・コメント中に漢字などが入っていると、2バイト目が円コード(半角の¥)
と同じコードだと、文字化けする→コメントでも漢字が入ってたらだめ
・スペースならいいだろうと思うと、その国に2バイトがない、フォントがない
などで、文字化け化けする→とにかく漢字が入っちゃだめ
・データに漢字が入っていて、文字化けする(それを表示しようとして、
フォントが無く、画面が崩れておかしくなる)→データベースもだめ
ということで、以下のように国際化を行うことがある。
(1)日本語の部分を置き換えて、抽出するプログラムを予め作成、
そのプログラムに全てのソースをかける
そうすると
キャンセル(Cancel)
は、そのプログラムを書けると
ソース部分
$NO_11$Cancel$NO_12$
置き換え部分
NO_11 キャンセル(
NO_12 )
のように、漢字部分(ここでは()も漢字にした)だけが分離される。
(2)抽出プログラムと同時に復元プログラムも作っておいて、
この抽出プログラムと復元プログラムが正しいかどうか、
(1)で作った「ソース部分ファイル」と「置き換え部分」ファイルを
使って、復元プログラムで復元し、それをもう一度コンパイルする。
→これでエラーが出たら、復元プログラムか抽出プログラムがおかしい
(3)「置き換え部分」ファイルが翻訳部にまわるのだが、漢字部分が全部抽出
できているかどうか、以下のようにして確かめる。
(3-1)「置き換え部分」ファイルの翻訳を、仮に固定の漢字にしてしまう
NO_11 ああああああ
NO_12 あ
(3-2)こうして、コンパイルしなおす。
(3-3)コンパイルできたら、プログラムが実行できるか確認する。
→出来ない場合、(文字で比較しているとき等、その文字でないといけない
場合がある)その箇所を確認し、文字を元のものに戻す。
→その文字で無いといけない=翻訳してはいけないということになるので、
特別の考慮が居ることになる。これを早く知る為に、ここでチェックする
(3-4)プログラムが実行できたら、データを固定の漢字や数字を入れる
あああああああ
とか
11111111
とか
わざとしているな!と分かる文字を入れる。
(3-5)これで全画面をもう一度確認。すべて、こちらが意図した固定された
文字になっていればOK
(4)翻訳してもらう担当者に画面のどこに入るか、わかってもらう必要が
あるときがある。たとえば
表
と1文字あるとき、「ひょう」なのか「おもて」なのか、分からない。
このため、翻訳の際には、ダイアログが出る場合、ダイアログと画面イメージと
翻訳番号が入ったイメージを渡したい。この翻訳番号がはいった画面イメージを
以下のように作成する
(4-1)「置き換え部分」ファイルの翻訳を、翻訳番号にする
NO_11 NO_11
NO_12 2
実際には、ピッたし同じ字数にならないので、あまるときは漢字スペースをいれ、
足りない場合はできるだけ末尾の文字を入れて、文字数を合わせる。
(4-2)その状態で復元して、コンパイル
(4-3)プログラム実行すると、翻訳番号が入ったダイアログになるので、
それをハードコピー、もともとの日本語の画面のハードコピーと一緒に
渡す
実際には、すべての言葉を翻訳するわけではなく、その一部に絞るのだが、
それについては、本筋ではないので、置いておく。
ここで、(3-3)、(3-5)、(4-3)で、「全画面確認」する。
この操作、すんごい大変。そこで、1回スクリプトを作ってしまって、
あとはスクリプトを流せば、全部チェックしてくれなくても、画面ハードコピー
とってくれるだけでも、ありがたいと思う。
じつは、これより、翻訳中に修正が入ることのほうが問題なんだけど、
それについては、また別のエントリで書く。長くなりすぎたので・・・
そこで、スクリプトによるテスト自動化ツールというのをやっていた。
スクリプトを書いて、負荷テスト、機能テストをやろうという話なんだけど、
この手のスクリプトによる自動化テストは、負荷テスト以外にも、
回帰テストにも良く使われるよね。
だけど、国際化対応の確認にもいいと思う。
国際化対応というと、getTextすればいい・・・と思うかもしれないけど、
実は、ソースの見えるところだけではだめだったりする。
たとえば
・コメント中に漢字などが入っていると、2バイト目が円コード(半角の¥)
と同じコードだと、文字化けする→コメントでも漢字が入ってたらだめ
・スペースならいいだろうと思うと、その国に2バイトがない、フォントがない
などで、文字化け化けする→とにかく漢字が入っちゃだめ
・データに漢字が入っていて、文字化けする(それを表示しようとして、
フォントが無く、画面が崩れておかしくなる)→データベースもだめ
ということで、以下のように国際化を行うことがある。
(1)日本語の部分を置き換えて、抽出するプログラムを予め作成、
そのプログラムに全てのソースをかける
そうすると
キャンセル(Cancel)
は、そのプログラムを書けると
ソース部分
$NO_11$Cancel$NO_12$
置き換え部分
NO_11 キャンセル(
NO_12 )
のように、漢字部分(ここでは()も漢字にした)だけが分離される。
(2)抽出プログラムと同時に復元プログラムも作っておいて、
この抽出プログラムと復元プログラムが正しいかどうか、
(1)で作った「ソース部分ファイル」と「置き換え部分」ファイルを
使って、復元プログラムで復元し、それをもう一度コンパイルする。
→これでエラーが出たら、復元プログラムか抽出プログラムがおかしい
(3)「置き換え部分」ファイルが翻訳部にまわるのだが、漢字部分が全部抽出
できているかどうか、以下のようにして確かめる。
(3-1)「置き換え部分」ファイルの翻訳を、仮に固定の漢字にしてしまう
NO_11 ああああああ
NO_12 あ
(3-2)こうして、コンパイルしなおす。
(3-3)コンパイルできたら、プログラムが実行できるか確認する。
→出来ない場合、(文字で比較しているとき等、その文字でないといけない
場合がある)その箇所を確認し、文字を元のものに戻す。
→その文字で無いといけない=翻訳してはいけないということになるので、
特別の考慮が居ることになる。これを早く知る為に、ここでチェックする
(3-4)プログラムが実行できたら、データを固定の漢字や数字を入れる
あああああああ
とか
11111111
とか
わざとしているな!と分かる文字を入れる。
(3-5)これで全画面をもう一度確認。すべて、こちらが意図した固定された
文字になっていればOK
(4)翻訳してもらう担当者に画面のどこに入るか、わかってもらう必要が
あるときがある。たとえば
表
と1文字あるとき、「ひょう」なのか「おもて」なのか、分からない。
このため、翻訳の際には、ダイアログが出る場合、ダイアログと画面イメージと
翻訳番号が入ったイメージを渡したい。この翻訳番号がはいった画面イメージを
以下のように作成する
(4-1)「置き換え部分」ファイルの翻訳を、翻訳番号にする
NO_11 NO_11
NO_12 2
実際には、ピッたし同じ字数にならないので、あまるときは漢字スペースをいれ、
足りない場合はできるだけ末尾の文字を入れて、文字数を合わせる。
(4-2)その状態で復元して、コンパイル
(4-3)プログラム実行すると、翻訳番号が入ったダイアログになるので、
それをハードコピー、もともとの日本語の画面のハードコピーと一緒に
渡す
実際には、すべての言葉を翻訳するわけではなく、その一部に絞るのだが、
それについては、本筋ではないので、置いておく。
ここで、(3-3)、(3-5)、(4-3)で、「全画面確認」する。
この操作、すんごい大変。そこで、1回スクリプトを作ってしまって、
あとはスクリプトを流せば、全部チェックしてくれなくても、画面ハードコピー
とってくれるだけでも、ありがたいと思う。
じつは、これより、翻訳中に修正が入ることのほうが問題なんだけど、
それについては、また別のエントリで書く。長くなりすぎたので・・・