Verification Testで検証に失敗

予備機に仕掛けておいたVerification Testで検証に失敗している.

Verification Test for the Collatz Tree Structure ( 22/01/16 18:00 UTC )
Start From 402654307 upto 469763169
Total odd number count: 33554432
Big number : 2194137831130865
Max degree: 14 @ 2102744405
Tree height: 361 @ 423186581
Time spent: 03:36:36
Verification Test Failed!
Click the mail button above and send the result to us (babalabos@outlook.jp) !!
If you have any additional infomation, use the colored textbox as a sticky ote.
Thanks in advance...


Enter any additional information here.

サイトの掲示では,すでに469763169までは検証完了となっていたので,402654305まで巻き戻した.このエラーが発生していることは昨晩中に確認されているが,すでに少しアルコールが入っていたため,そのときどう対応したのかよく覚えていない.レポートは送信されているので,「メール送信」ボタンはクリックしているようだが,パネルに表示されているテキストには少し不審な点がある.上掲のメール本文には

Start From 402654307 upto 469763169

とあるが,画面ではこの行の後ろの部分「upto 469763169」が欠けている.

image

このテキストが表示されているRTFテキストボックスは読み取り専用で,間違っても上書きしたり,修正したりすることはできないはずであり,うっかり消してしまうようなことは起こり得ないはずなのだが…念のため,スクロールして下の部分もスクショを取っておいた.

image

ピンクのテキストボックスは書き込み可能で,「VAIO2 FAILED」の文字列はわたしが後から書き入れたものだ.ただし,「メール送信」ボタンは一度しか使えないため,この画面内容は送信されていない.ともかく,障害が再現可能かどうかを見るために,開発機で同一設定のテストを開始したところだ.ただし,走っているのは最新版のV1.07でエラーが起きているのはV1.06だから,必ずしも再現できるとは限らない.エラーが発生した実機でV1.06を走らせて再現性を見ることにする.

RTFテキストボックスはRead Onlyのはずだったが,書き込みできてしまう.これはかなりまずいと思う.また,エラーが発生したときの進捗率が表示されていないのも問題だ.Odd numberに表示されている423186581という数字はエラーが発生したときの対象となる奇数番号とみられるから,この数字から開始してエラーが発生するかどうか確認できるはずだ.ともかく,このエラーは最重要なのでじっくり取り組むことにしよう.コラッツ木構造に何らかの欠陥があるとすれば致命的だが,修正ミス,その他の理由も考えられる.

現行版で423186581からテストを開始してみたが,再現しない.もう少し若い番号から初めてみよう.1000番ないし10000番前から開始してみたが再現しない.V1.06に戻って確認してみよう.どうも,この版はバックアップされていなかったようだ.あるいは削除されてしまったのだろう.EXEは残っているが,パッケージが見当たらない.⇒EXEを走らせて再現を試みたが,再現できない.⇒この一つ前のV1.05で試してみよう.今回は実機と完全に同じ条件で走らせてみる.予備機では障害発生までに3時間36分掛かっているのだが,開発機ならもう少し速いだろう.この版ではすでに「Test Failed」を表示するようになっているので,条件はほぼ等しいと見てよいはずだ.

V1.05とV1.07を開発機に仕掛け,V1.06を予備機で走らせている.予備機では設定を間違えていたためやり直しになっているが,開発機のV1.07はすでにエラーが発生したポイントを通過している.⇒当初は検証テストが失敗して奇数Nとそれから計算したコラッツ木枝番号数列から得られる奇数N’で不一致が生じた場合,当初はStop文で停止するだけになっていたところ,V1.06辺りからエラーメッセージを表示するように変更している.このとき,エラー処理の動作を確認するために,ある条件が成立したときにはこのエラーを発生させるような論理を暫定的に組み込んでいるが,もしかしたら,この仮修正を残したままリリース版を起こしてしまったという可能性もある.

ただし,もしそうであるとすれば,その条件はたとえば,対象の奇数があるきりのよい数より大きくなったときとか,カウンタがあるきりのよい値を超えたときにエラーとなるように作っているはずだが,エラーの発生状況から見るとそのいずれにも該当していない.本命の予備機で走らせているV1.06はまだ6%を超えたばかりで,障害地点に達するまであと3時間は掛かる模様だ.最新版のV1.07はすでにこの地点をパスしているので,「コラッツ木構造に何らかの欠陥がある」可能性は少ないと見ているのだが…

Facebookで2000人近くいた友だちをすべて抹消されてしまった.グループ登録も消え,メッセンジャーにも何も残っていない(発信できなかった下書きが1本だけ残っている).数学物理etcに山本氏が投稿した「あのシュレーディンガーが、実は小児性愛者だった、という話。」に付けたコメントが虎の尾を踏んだのだろう.わたしはネット上の住人なら誰でも知っているような「公知の事実」しか書いていないのだが…https://www.facebook.com/groups/2354748741306929/posts/4738902149558231/ 辛うじてアカウントだけは残っているがFBからすればいますぐにでもパージしたいところなのだろう.まぁ,わたしはFBと刺し違えるつもりはないからね.

ごみ箱からRel 2022-01-17というフォルダを2つ見つけた.もしかしたら,この中にV1.06のソースコードが入っている可能性はある.しかし,開発環境では最新版を実行中なので,それが終わるまでは開くことができない.いま,96%というところをやっているので,ほどなく終わるだろう.⇒終わった.これはV1.06でエラーが出た領域の再試験に当たる.いや,おかしい.アプリは閉じたのにまだ走っている.V1.07と思ったが,走っているのはV1.05の方だ.こちらは,まだ15%しか進んでいない.

VSのインスタンスをもう一つ開いてみよう.[ごみ箱に残っていたフォルダは]2つともV1.06だが,一つはStopで止まるだけのものだ.もう一つはエラーパネルを出すようになっているが,動作確認用の仮修正は残っていない.予備機にはV1.06のEXEが2つ残っている.いまテストしているのがそのうちのどちらなのかは分からない.もし,新しい方なら多分停止しないで最後まで走ることになるだろう.古い方であれば,同じ障害が再現されなくてはならないはずだ.しかし,仮に障害を再現できたとしても原因を突き止めるのはかなり難しい.

すでに予備機で走っているテストは障害ポイントをパスしてしまっているので,おそらく新しいバージョンの方なのだろう.古い方を立ち上げて試してみよう.いや,見ている場所が違う.古い方というのは,BlackHawkのフォルダだった.⇒もう一つのケースとしては,単純にボタンを2度押しして停止しただけという可能性がある.ノーマルに終了したとき以外はすべてVerification Test failedを表示するようになっているので,何かの理由で停止したのを忘れていたのかも知れない.⇒いずれにせよ,単に打ち切った場合とエラーが発生した場合を切り分けるようにしなくてはならない.

メールを送信しようとして,エラーになったような場合,エラーメッセージの内容がメール本文に書き込まれるようになっている.検証テストでエラーが発生した場合も,例外を発行してエラーハンドラで処理するようにした方が安全なのではないか?こうしてあれば,メール本文を参照することで本物のエラーか,単に停止しただけなのかを読み分けることができる.どうも,いまのところ,状況判断した限りではテストを打ち切っていたのを忘れて,ないし,うっかり止めてしまったのを,画面上の「Failed」というテキストだけを見て勘違いしてしまった可能性が一番高いような気がする.

▲Odd numberが空の状態でVerifyボタンを押すとハンドルされていない例外が発生する.⇒関数の冒頭でOn Error GoTo を実行すると,エラーが反復発生するようになる.⇒ボックスが空でないことをチェックして警告を出すようにした.

B面のDegreeとTree heightはInt32の範囲に限定するという仕様になっているが,内部計算でそれを超える場合が考えられる.従って,内部では従来通りBigIntegerを用いるようにした方がよいのではないか?⇒一度バックアップを取ってから修正に入ることにしよう.⇒いや,とりあえず,そこまではよいのではないだろうか?確かに,32767×32767の木をくまなく調べればIntegerで間に合わない場合が出てくる可能性はあるが,Integerの範囲は2147483647なのでまず,大概のところはカバーできるのではないか?⇒当面は現状のままとする.

▲Collatz Tree 3-8-766.zelを人名枠幅を調整してから印刷しようとして,GetPageCountのエラーになる.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA