ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

ブログに、地図を貼り付けられる「ちず窓」

2005-12-16 17:11:45 | Weblog

ブログに、地図を貼り付けられる「ちず窓」っていうのがある。
ここ http://chizumado.jp/

 会員登録をして(今のところ無料)、地図の場所をクリック、そのURLを、ブログにはり込むと、地図が見れるというものらしい??

 今、ウィリアムのいたずらは、使い道がないので、会員登録はしていないが、
 ブログを地図にはりたい人には、いいかも。。
 たとえば、姉歯物件を、地図入りで、糾弾したいという人など。。
 (ちなみに、物件の住所は、ここのブログにあるみたい)
 って、そんなに糾弾したい人、いるのか(^^;)


 でも、これを提供しているのが、昭文社なんだけど、最近の昭文社って、センスいいよね。
 あの、震災マップとかもそうだし。。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

最近のユニットテストなどの方法では実現困難なテストがあり、今回の東証のケースは一例かも?

2005-12-16 16:24:54 | Weblog


最近のユニットテストなんかでは、JUnitのような、流しのツールを使うことが多いと思います(もしくは、画面からの流しでテストする)。
 昔の単体テストのホワイトボックステストのような、ソースを1行1行止めて、確認するテストなんてのは、しないと。。

 結果、「Junitなどを使ったユニットテスト < 昔の単体テスト」となることがある。

 じゃあ、単体テスト - Junitなどを使ったユニットテスト = 何?っていう話をしてない気がするので、そのケースについて。




 このケースには、いろいろあるけど、
1.モジュール内に、副作用があるが、その副作用について、どこにも記述されていないケース。

 これは、ユニットテストだと、ケースすらあがらない場合があります。

 正常系の場合、その副作用となるものを削除してしまうケースで、仕様書上には記載されていないが、プログラマの判断で利用したものが、それにあたります。
 (ワークファイルや、ワーク用の共通メモリ領域(セッションを含む)など)


2.モジュール中、ある状況にならないとおきないケースで、そのケースは、ソースを追っかけて、止めない限り、テストが難しいケース。
 ユニットテストでも、テストケースとして、本来は、あげなければいけませんが、あげてない場合がよくありますね(できないから)。

 なんていうのがある。今回話題にするのは、2のケース。




2のケースで、格好の材料が最近出たので、これで説明しよう。

 東証(富士通の障害?)のケース。

問題は、
<<テストケース>>
1.買い注文と、売り注文があり、
    売り注文が1個残っている(部分約定)ときで、
    買い注文が複数ある最中において、
2.この瞬間に、売り注文のキャンセルを入れる。

<<予想される結果>>
・買い注文の残りよりも先に売り注文をキャンセルし、
 部分約定で終了すること

 なにが、難しいって、1の状況を作っている最中に、2の注文を入れること

 この1って、瞬時なのよ(1秒も、ないこともある)

 これは、単体のホワイトボックステストか、あることを行って(なにをするのかは、後述する)、処理をとめない限り難しい。




 コンピューターの処理は、

1.買い注文のキューと、売り注文のキューがあって、
2.そのキューを見ながら、条件判定をして、売買してよければ、
  どちらかのキューがなくなるまで、「約定処理をループして実行する」

 という感じだと思う。
 これが約定モジュールとして、1モジュールになって、ユニットとしてテストしなければいけないというような、ケースがある。

(今回の富士通の件が、こうなってるかどうかはわかんないけど、こういう、「ループ処理最中に、あるデータを挿入して、そのループをとめる」というテストをしないといけないことは、人によっては、結構ある)。

 こういうテストの場合、「ループ処理中に、データを滑り込んで打つ」って、最近のパソコンだと、きついのよ。

 「いっせーのせ」で同時にやっても、もう、ループが終わってしまうんです。
 100万件も投入しても。
 かつ、1000万件とか、ありえない件数は、エラーになって、投入できなかったりする(>_<!)

 ちょっと前にやると、ループに入る前に、データがはいってしまう。。。

 なんつーので、ループ中に、何かするものの確認っていうのは、難しかったりする。

 DBのデッドロックの確認なんかも、難しかったりする。




 こういう場合、どうするのか。。。

 ホワイトボックステストのように、1行1行とめられるなら、そのタイミングでいれればいいから楽なんだけど、1行1行、とめると、今度は、他の部分で、テストが大変だよね!




 そういうときは、デバッグログを使うと楽かもよ。

 デバッグログって、debug(書き出すメッセージ)のような、かんじじゃないですか?

 ここで、引数の、書き出すメッセージが、ある言葉だったら、キー入力を待て(getchar()とか)みたいな、待たせる関数を実行するように、プログラムを記述する
(もしくは、あらかじめ、このときにやるべき処理を書いておく)。

 そーすると、このテストのときだけ、このメッセージのところで、入力まちになる。

 で、このデバッグ関数のほうを、このテストだけ、こっちを使うようにリンクする。
(javaなら、クラスファイルのパスを、こっちのほうをさきにすると、こっちをみる)

 あとは、さっきの例なら、
1.買い注文と、売り注文があり、
    売り注文が1個残っている(部分約定)ときで、
    買い注文が複数ある

この瞬間のときに、

上記の(入力まちになる)メッセージで、デバッグログの関数を呼び出すように書いておけばいい。

ってこと。




 なんてことは、結構あるのよねー。
 ケータイなんかだと、この瞬間に、こういうことをすると。。。とか


 なんか、パチンコの梁山泊のノリになってきたので、この辺で。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ソースコードに「表」という文字を書くと、動きがおかしくなるものがある

2005-12-16 13:34:38 | Weblog
 あー、またひっかかったあー・

 表という文字。

 この文字のやっかいさは、2つあるんだよねー。

 表はSJISコードで、(16進にすると)955c
 で、後ろの5cというのは、\マークに相当する。

 なので、国際化されてないようなコンパイラとか、そんなこんなだと、
 ソースコードに、"なんとか表"とかくと、

 表"が、95 5c 22、つまり、

16進数の95のあとに\"(エスケープの")とみなされ、
=”がエスケープされて、”文字そのものと解釈される
=その文字列の終わりとみなさない
=文字列が永遠に続く
=エラー
となるもんがあるのだよ。。。

 しまった、今、ひっかかった。

 一覧表なんて、書かなきゃ良かった。一覧は、表だよな、ふつう・・・
 こんなことで悩んでしまった。。

 実は、こんな、「表という文字を書いたらおかしくなる」というのは、
 (BREWのコンパイラである)ARMコンパイラで起こる。

(実は、こんなに簡単なケースではなかったのだが、最終的には、一覧表がわるくて、一覧にしたらOKだった)




 ちなみに、もうひとつの「表」のこまることは、

 文字列だけ抽出して、翻訳するとき。。。

 表と、一字だけ書かれると、「おもて」なのか「ひょう」なのか。。??

 普通は表だけど、DTPなんかだと、「おもて」の場合も結構あるので、こまるのだよ。
 

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする