システム構成図のデータ入力を通じたバグの掘り出し

ゼルコバの木システム構成図のデータ入力を通じたバグの掘り出しとそのシューティングは順調に進んでいると言ってよいだろう.データ入力はここで一旦中断することにしているが,本線のDrawingObjectクラスの導入に移る前に一度これまでのバックログを見直してできれば一掃してしまうのがよいのではないか?まず,昨日の修正で気付いたいくつかのポイントをメモ書きしておこう.

  1. スプリット検定をグラフの連結性の問題として解く
  2. 全体図は隠蔽される 親族図を活用する
  3. ※クラス名でクラスインスタンスを表示する
  4. あいまい検索では大文字と小文字を区別しない
  5. cardQのリングの使い方 リングをテンプレートクラスにする
  6. リリース版作成時の手順リストを作る
  7. クラスの固有データ部を追加する

スプリット検定には2種がある.系列内スプリットを扱うCheckTribeSplitと,広域的なスプリットを無差別に検査するCheckHSplitsだ.前者と後者では方式が大きく異なる.後者は縦長の検査枠をずらしながら手続き的に検査する方式だが,前者はオブジェクトの矩形領域を水平区間に変換し,交叉している区間を一つの区間にまとめて最終的にそれらが一つの区間に集約されない場合をスプリットと認定している.これは手法的には完全にグラフの連結性判定と同じであり,節点をオブジェクトの水平区間,枝を水平区間の交叉関係とするグラフを連結成分に分解してやればそれがそのまま回答になると考えられる.系列内スプリット検定ではSPLITLISTというリストクラスを使ってこの検査を実施しているが,このリストはSIMPLEGRAPHのCOMPLISTに(連結成分リスト)相当する.検定では交叉する2つの区間を一つに合併しながら検定を進めるという手順になっているが,このようなカスタマイズは抽象グラフ検証系でもできることだ.

後者の広域スプリット検定に関して言えば,現行方式では結婚枠間ギャップよりかなり広いスプリットを見落とす可能性がある.現行の値を使えば検査枠の幅は16,結婚枠間ギャップは15なので,最大で幅30のスプリットが見落とされる可能性がある.これは現行方式では検査枠を検査枠幅を単位にずらしているためで,このスライド量をより小さくすることでこのような事態を回避することは可能になる.たとえば,スライド量を1とすれば15より大きなスプリットを見逃すことは100%起こり得ない.しかしこれではコストが掛かり過ぎだ.許容されるスプリット幅をS,検査幅をΔ,スライド量をδとするとき,

S = Δ + δ -2

となるから,Δ=16,δをその半分の8とすれば,コストは現状の2倍,許容スプリット幅(検出不能スプリットの最大値)は22となる.δ ≦Δ ≦ 検出すべきスプリットの最小値=許容スプリット幅+1,結婚枠間ギャップをGとして Δ = G +1のとき,S = G + δ ー1に S = G を与えると,δ =1を得る.つまり,結婚枠間ギャップ以上のスプリットを見逃さないためにはスライド量を1とするしかない.許容スプリット幅30というのは微妙だが,δ値を1≦δ≦Δの間で調整することで許容スプリット幅を狭めることは可能だ.

ZTシステム構成図7.ZELの部分図「クラス継承図」をNODULEでソートして全体図に戻ろうとしたところで出口検査:InvestigateHSplitsが出る.しかし,全体図ではスプリットは見当たらない.⇒バージョンが古いのではないか?⇒バージョンは同じだが,開発環境では再現しない.最新版を作ってインストールし直してみよう.⇒※すでに解決.

おかしい.ゼルコバの木はインストールされているはずだが,コントロールパネル→プログラムと機能で表示されない.机上にはZTアイコンがあって起動できる…Program Files(x86)にはbabalaboフォルダがあり,コンポーネントはすべてそろっている…ダメだ.OCXが差し替わっていない.プログラムと機能には表示されていない.インストールしたプログラムがプログラムと機能に表示されないというのは今回始めてのような気がする.⇒アホなことをしていたような.サブマシンの画面を操作していた.マルチスクリーンをビデオ切替スイッチで切り替えて使っているのでこんなことも起きる…アプリが12本しかインストールされていないのでおかしいな~とは思ったが…開発用メイン機には120個近くのアプリがインストールされている!

ZTシステム構成図の現在の登録点数は189でそれほど大きなものではないが,養親子関係が多重に掛かって相当混雑した図面になっているためデータ入力の意欲もそがれてしまうが,「全体図は隠蔽されるもの」だと決めつけてしまえば,かなり気楽にデータの追加もできるようになる.ZTシステムがデータベースを持つようになって,10万件,100万件のデータが蓄積されるようになったら,もちろん全体図を描画するなどということは夢想することもできない.この意味では「親族図ないし部分図を活用する」というのが今後のZTの進むべき方向だろう.現行では構成図にはNODULEクラスしか登録されていないが,この図面を傍らに置いて参照しながらプログラミングするとすれば,固有データ部の構成も必要になってくる.そうなると全体図はさらにますます膨張することになるが,全体図を見ないことにすれば項目7で取り上げた「クラスの固有データを追加する」ことも現実的な課題となるだろう.

クラス名は大文字で書くようにしているが,必ずしも徹底していない.例外はあまり多くないので調整してもよいが,構成図でクラス名とクラスの代表インスタンス名が同じというのはあまりよくないと思う.しかし,これに小文字名を与えるというのもよい考えではない.インスタンス名は実在するものでなくてはならない.NODULEシステムではある意味で無名のオブジェクトが無数にあると言ってもよいので,それらをクラス名で代表しておくというのは妥当だが,クラスと実装を区分するために何か修飾を加える必要がある.名前の末尾に♂,♀を付けるというのでもよいが,頭に※印を付けるくらいが妥当だろう.

ゼルコバの木の検索はカード編集→カード検索で「姓名の完全一致」を指定しない限り文字列の一部が一致したものを列挙するような「あいまい検索」になっているが,英字に関しては厳密に大文字・小文字を区別しているというのは片手落ちだ.ゼルコバの木のユーザはいまのところ日本語ユーザに限定されているので,急を要する話ではないが,将来的には対処する必要があると思う.

cardQなどというものを使っていたこと自体忘れてしまっているが,読み直すとリングという機能を一部使っているようだ.リストや参照チェーンなどの操作はゼルコバの木では生命線であり,NODULEという基底クラスの基本機能と考えられるので,これらを整理して完全に汎用化することが強く求められている.リングやリストをテンプレートクラスにするというのも悪いアイディアではないような気がする.ただちに着手する課題ではないが,検討を要するとしておこう.

リリース版をインストールするたびにアンインストールするというのは好ましくないし,ユーザは上書きインストールするものだから「インストールの実機テスト」としての意味もない.パッケージの中で上書きインストールされないのはOCXだけのようで,バージョンを更新してやればインストールできることは確認されている.漏れのないようにリリース版作成時の手順リストをまとめておく必要があるが,まだやっていないのはプリンタのインク切れということになっているからだ…このところ家から一歩も出ない日が続いているのでなかなかそこまで手が回らない.ネットで購入という手もあるけど…あ,モノクロならtamo2さんのプリンタがある.なんでそれに気付かなかったのだろう?

ログを読み直してバックログを拾い出すという作業も確立した手順があったのだが,すっかり忘れてしまった.今回は「再開発スタート版」から始めているのでとりあえずはそこまで戻ればよいと思う.再開発スタート版というのは2020/10/23に始まっている.今回のセッションは2020/09/15の「作業に復帰した模様」からスタートしているのでそこから読み直してみることにする.

要対処項目リスト(93件):2020/09/15~2020/11/01

  1. バグ:実親を基準ノードでソートしているのに直下に来ないというのはかなりおかしい
  2. バグ:血統軸線図で実子が軸線上に来ないというバグがある
  3. バグ:カード合併を実行→UNDO…→REDO…でSTOPパネルが出て止まらなくなった 反例サンプルは保存されているはずだが,ファイル名は不明
  4. バグ:#33 baselistの子ども氏名欄の「NLIST」に「NLIST <GENEBOX, ‘g’>」を上書き→登録でエラー「結婚リンクが消えていない」が発生した 反例サンプルはゼルコバの木モジュール構成図(ERR1).ZEL
  5. バグ:UNDOメニューがすでに不能状態になっているときにCTRL+Zを押してエラーになった
  6. バグ:kakeizuの子どもとしてnoduleを登録→リネームで「結婚リンクが消えていない」エラーになった 
  7. バグ:人名カードでテキストボックスをダブルクリックしてテキストを全選択状態にしようとして戻ってしまう ⇒意味不明 入力ボックスをダブルクリックしたときは通常そのカードにジャンプするはずだ 入力中の場合は新規カードを作ってジャンプになっていると思うのだが…
  8. バグ:tajugraph2で配偶者SIMPLEGRAPHを子ども欄に移す付け替えをやっていてSTOPで停止した 反例サンプルは(ERR2)として保存した
  9. バグ:SIMPLEGRAHPHの父母ページで登録ページ数4のとき,5ページ目に移動しようとして「ページ番号不正」エラーになった 反例サンプルは(ERR3) 父母ページ数の上限は4になっていた
  10. バグ:検索ボックスでテキストを全選択してDELキーで「削除する対象カードを選択してください」が出る.OKでテキストはそのまま残っている.BSで一文字づつ消すことはできる
  11. バグ:子ども12人を登録して子ども数が11のままになっている
  12. バグ:結婚枠データの保存でMAXMARRIAGEでループしている
  13. バグ:クラス部分図を全選択→反転してTREEVIEW::selectAllで (topology->ActiveList->count) という理由で停止した
  14. バグ:クラス部分図で全選択→反転→部分図登録で作った部分図に女性カードのCOUPLINGが入っていた
  15. バグ:部分図をリネームして登録したのに部分図が3つになってしまった.そのうちの一つを削除して部分図の選択メニューが壊れてしまった
  16. バグ:構成図6で保存した このファイルを開き直そうとして,nodule::Sansyoで停止した previous->Refcount()–;を実行していて例外が発生している
  17. バグ:要素包含図で全選択したのに一覧画面ではごく一部のカードしか選択されていない.今度は動くようになった
  18. バグ:GENEBOXの父にbaselistを登録しようとしてMakePairListClean中PAIRBOX::getLocationで停止した サンプルは構成図7
  19. バグ:構成図7を開き,上図の部分図を再現しようとしてSIMPLEGRAPH:TightenHasseDiagramで「孤立ノードが存在する」エラーが発生した
  20. バグ:UNDOで戻ったときにも「孤立ノードが存在する」が発生した
  21. バグ:出口検査で多重カード1というのは明らかに間違っている.少なくともMDBとPDBは多重カードだ.tribelistも多重だし,NLISTも多重だ.当然避けられない多重1とは思われない.重婚同類循環が3もあれば多重が多発するのは避けられない
  22. バグ:treeviewの出現は2つあるが,2番目の出現は配偶者であるはずなのに頭に垂線が入っているのはおかしい.これではTREEVIEWの子どものように見える
  23. バグ:NAMEBOX::IsPossibleBTWLeftHandでASSERT_NEVER (rightwife->IsLeftHandBox())により停止した.treeviewの父母ページで母氏名をCOUPLINGとして登録しようとしたところ.UNDOで戻して(ERR4)で保存
  24. バグ:TRIBEBOX::SetMinorTribeで(primary->getrelation() == REL_SPOUSE)により停止した.starttribeから子どものTRIBEBOXを削除して配偶者に付け替えようとしたところ.UNDOで戻して(ERR5)で保存した.topUndo,UndoCurptrなどでも起こる
  25. バグ:BASETABLE<CARDLINK, MAXPDB>の本人タブの氏名をダブルクリックして「検定続行不能エラー」が発生した 反例は(ERR7)
  26. バグ:REEVIEW::GetViewSizeで(!_size->cx || !_size->cy) 描画領域空エラーで停止
  27. バグ:ZTシステム構成図(ERR7).ZELを開こうとしてTRIBELIST::GoDownStreamで(marg && !marg->Invalid() && (!marg->margbox || !marg->margbox->ISSETTLED()))により停止,その後続行して以下を出してエラー終了
  28. バグ:部分図から親族図に切り替えようとしてPAIRBOX::CalcPairBoxでASSERT_NEVER (nocommon) エラーになった.⇒再現できる.この状態で保存しておこう.(ERR8)とする
  29. バグ:NLISTの母をEDGELISTに付け替えて,CARDLINK::ScootParentPageで停止した. (!OnImportEnd && !APPENDFILE && !PrimaryMergeCard && !OnDeleteCard) 同一親ページの重複を検出
  30. バグ:所属グループの親ページからtreeview+TREEVIEWを除去して,PAIRBOX::repairCommonEndPointでDEBUG_NEVER (CheckSamePoint())が起きる
  31. バグ:ファイルを保存しようとしてMARGLINK::getOnumで(!margbase.otto)により停止した.このあと,例外が発生した
  32. バグ:SUW(Show Under Wear)が出てしまった.(ERR9)として保存したが再現できるだろうか?undoで戻ってもSUWになる
  33. バグ:構成図5として保存したファイルから部分図に移動するだけで障害が発生する ⇒SUWを止めて画面は表示できた.このファイルを(ERR10)として保存 これはmarghgapをゼロから15に変更したことが直接の原因となっている ⇒障害の原因はTRIBELIST:CheckInnerSplitで区間計算にmarghgapを加算していなかったためだ ⇒人名枠ではなく結婚枠を対象に計算するように変更した
  34. バグ:ZTシステム構成図(ERR11).ZELの部分図でズームの動作がおかしい.+をクリックして拡大する代わりに上に動いたり…画面に合わせてズームなども不調 「系統並び替えで遅延処理されるためここではパス」という理由で画面が更新されていない 部分図のタイトル情報の更新で系統並び替えフラグが立っている これは明らかに誤り ⇒PARTIAL_UPDATEのときはフラグを立てないようにした ⇒解決 
  35. バグ:障害は系列内スプリット MAXPARENTS=4.ZELで再現できる
  36. バグ:ZTシステム構成図3.ZELの出口検査でInvestigateHSplitsが検出される ⇒スプリット検定のパラメータδの仕様変更の副作用
  37. バグ:MAXPARENTS=32で保存されたサンプル→ZTシステム構成図 MAX=8.ZEL
  38. 不良:子ども並び替えでドラッグ移動が効かない⇒説明文を改訂する
  39. 不良:人名カード画面の子ども氏名欄でホイールでスクロールしたときのスクロール量が大き過ぎる ページスクロールの動作になっているようだが,次行に書き込めない 最小限一行分のダブリが必要だ
  40. 不良:検索ボックスに名前を入力して虫眼鏡をクリックしてもジャンプしない⇒選択/無選択に関わりなくつねにジャンプする
  41. 不良:カード一覧表で一覧表セル幅→均等分割するのとき全列表示に戻ってしまう
  42. 不良:ウィンドウのドッキングでウィンドウ境界に隙間ができてしまう
  43. 不良:一般に婚姻による理由以外では下流の子どもとの連結のために抽出枠を作る必要はないように思われる
  44. 不良:一覧表でカードを選択してDELで削除パネルが出ない.メニューからは実行できる
  45. 不良:部分図から親族図に戻ったとき,選択されたカードが画面内に入っていない.⇒全体図→部分図→親族図のように遷移したものと思われる.全体図では選択カードは見えている
  46. 不良:BASETABLE<CARDLINK, MAXPDB>はクラス(女性)だが,父がCARDTABLEになっている.CARDTABLEは女性のはずだ 女性カードが父となっているのは子どもカード生成ないしリンク時の動作が誤っていた可能性が高い.クラスノードを親とするほとんどのノードにこの誤りが起きている
  47. 不良:部分図でtoplistの父がDATALISTだったのを母に移動して登録したら,新しい女性カードのDATALISTが生成された.これはまずいのではないか?⇒多分DATALISTはtoplistの子どもだったのだろう.このようなケースでは自動的に新規カードを生成する
  48. 不良:toplistの母氏名にDATALISTを記入するとグリーンになるのは,実在するDATALISTカードを押さえているためと考えられるのに,実動作では新規カードが生成されるというのはどこかに誤りがあるためと考えられる.おそらく,このカードDATALISTが部分図画面上にないことが誤動作の原因になっているのではなかと考えられる
  49. 不良:下図ではnoduleが選択されているが,多重出現している.これは回避可能な多重であり,本来解決されるべきものだ
  50. 不良:tajugraph2の子ども氏名欄をクリックしただけで,以下のようなパネルが出る.まったく意味不明だ
  51. 不良:一覧表で行クリックするたびに画面を更新している
  52. 不良:配偶者のいない2つの結婚ページにそれぞれ子どもが1人づつ記入されているとき,登録では1ページに合併するはずだが,そのような動作になっていない.BASETABLEにARRAY<bnum>とlookupをそれぞれ登録されているが2ページのまま
  53. 不良:一覧表の並び替えをしただけで系図画面の再描画が発生する
  54. 不良:カードをクリックしただけで系統並び替えが発生している.⇒この動作で結婚枠オブジェクトのリサイクルが起きている.⇒これではトレース不能なので暫定的に系統並び替えを抑制
  55. 不良:リリース版をインストール時,OCXだけが上書きインストールされない
  56. 不良:ファイルを閉じようとするとき,ときどき下記のパネル「検索文字列.TXTへのアクセスが拒否されました」が出る ⇒ファイルのプロパティで見るとUsersは読み取りと実行しかできない設定になっている これはProgram Files(x86)のフォルダに書き込んでいるためと推定されるので,保管場所をドキュメントフォルダに戻すことにする インストール時「すべてのユーザ」を指定したときの動作については別途調査が必要
  57. 不良:Ancesty.zelのシンメトリが崩れてしまった⇒系列内スプリット検定の修正で起きた副作用 区間計算は人名枠ベースで行う必要がある
  58. 改善:連結線の途切れをチェックするための検査を系線グラフ検定,そのために使うグラフを系線接続関係グラフとする 座標値を保持する任意長のCPointテーブルを扱えるようにする
  59. 改善:描画オブジェクトを扱うクラスとしてDrawingObjectクラスを新設する DrawingObjectのインスタンスはTreeViewが管理する DrawingObjectクラスの中に座標対と属性を保持するテーブルを持つ
  60. 改善:人名枠氏名欄の左側に説明文を出したい できれば任意配置できるとさらによい 表示項目の範囲を広げて取捨選択できるようにしたい
  61. 改善:①対象ノードがすでに外部に実子関係を持っているときは養子関係で接続,②対象ノードを実子として登録する場合にはそのノードがすでに実子関係を持っている場合には警告パネルを出す
  62. 改善:「画面設定」メニューは「設定」とした方がよい
  63. 改善:子どもが親を2つ以上持っているとき,どちらの親の直下に配置するか指定できるとよい 
  64. 改善:純血統図では養親子関係のノードは表示しない
  65. 改善:部分図に色属性を与えて全体図の中で色別表示できるようにする
  66. 改善:NODULE,Bobject,DATALISTなどを「抽象クラス」として再定義する
  67. 改善:人名欄がイエローのとき登録ボタンで新たなカードが追加される 複数候補があるときは登録でパネルを出すべきだ また,ヒントも改善を要する
  68. 改善:マルチスクリーンで作業しているとき,別のスクリーンに出ているパネルを見落とすことがある 同じスクリーンに出した方がよい
  69. 改善:ZTでは入力ボックスの氏名とリンクすると循環が発生するような場合には,黙って新規カードを作成する⇒パネルを出した方がよい
  70. 改善:名前を付けて保存したときは,ただちにタイトルバーの表示を更新すべきだ もう一つの案として名前を付けて保存したあとも対象ファイルを切り替えないという方式も考えられる
  71. 改善:カード一覧表の表示範囲はもっと広げてよい たとえば不可視カードなど.選択されたカードというのも表示できればよいのだが… カード一覧表には表示されているカードの点数を(タイトルバーに)表示してほしい
  72. 改善:氏名同定のあいまい探索は確かに便利ではあるが,危険でもある.該当が1件の場合登録で無条件で確定するが,そのときに名前を補充している.少なくとも名前を補充した場合には,一度保留して「再登録」を待つべきだろう.氏名が厳密一致していないときはイエロー表示でもよいのではないか?
  73. 改善:系図画面では右クリックしてもメニューは出ない
  74. 改善:先祖並び替えで先祖ノードを複数選択して移動できると便利なのだが…ないし,ドラッグ移動して並び替えが実行できるとさらによい
  75. 改善:カードが削除されたとき,別のカードにジャンプする動作はあまりうれしくない.むしろ単純にその場所で再描画してもらった方がよいのだが…
  76. 改善:人名カード記入中カードを移動する場合はデフォルトで登録した方がよい.キャンセルは右クリックメニュー→再読み込みでできる
  77. 改善:カード入力中フィールドを移動するたびにIMEの文字種が(全角に)変わるのはうれしくない
  78. 改善:子ども欄に記入中ページフルになると強制登録して本人タブに移るが,次ページに移れるようにしたい
  79. 改善:InvestigateHSplits,CheckInnerSplitなどは公式版では停止する.⇒SOKUDOSAIYUSENというフラグがある
  80. 改善:可変長配列をサポートする
  81. 改善:部分図を128個まで扱えるようにする
  82. 検証:VBとC++で定数が一致していることを確認する
  83. 検証:画面上のカードを保存では生成されるファイルは誤りを含まない正規データでなくてはならない
  84. 検証:父ないし母が複数ページに存在するときの描画上の不具合,ないし,部分図で実質的に項目1のような状態になっているときの対処法
  85. 検証:サンプルは基本的にすべて読み取り専用に設定しておく必要がある
  86. 検証:MoveBundledLDRでMoveLongTailの動作をカバーできるのではないか?
  87. 宿題:先祖ノードにも結婚枠を与えるべきだった 結婚枠枠線というものがあってもよい 「先祖ノードだけの結婚枠」ないし「結婚枠の中には誰が入ってもよい」とする
  88. 参考:2019/01/11に要対処項目55件の記載がある
  89. 参考:2020/10/22「tamo2さんへの応答」に要調査項目7件の記載がある
  90. 参考:2020/10/23にグラフ処理の一般的手順リストがある
  91. 参考:regsvr32 /u DLLファイルパスでレジストリ登録解除できる
  92. 参考:部分図を使えばカードを個別に隠蔽することはできる
  93. 参考:一覧表で横スクロールバーが出る場合がある

▲構成図7.zelを閉じようとして,また「検索文字列.TXTへのアクセスが拒否されました」が出た.これはすでに解決済みではなかったのか?検索文字列.TXTというファイル名はSearchTextFileに入っている.アプリ起動時に一度読み込まれ,終了時に書き込んでいる.読み込んだときに使ったStringReaderはその場で解放している…ReadAllText,WriteAllTextはファイルのオープン・クローズなどの操作なしに読み書きできるはずなのだが…検索文字列.TXTは読み取り専用にはなっていない.⇒確かに検索文字列リストは更新されていないようだ.GetAttributesでチェックしても読み取り専用にはなっていない.

ファイルのプロパティがUserに対して解放されていなかった.Administtratorsに対してはフルコントロールを認めているが,Usersには読み取りと実行の許可しか与えられていない.templatesにはいろいろな設定ファイルが入っているが,いちいちこれでは面倒だ.置いているフォルダが悪いのだろうか?Program Files(x86)\Common Filesというのは置き場所としてはあまり適切ではないのかもしれない.ドキュメントフォルダがもっとも適切と思われるが,ここに置くと「すべてのユーザ」を設定したとき不都合かと思ったので共通フォルダを選んだのだが…「すべてのユーザ」を選択したときの複数ユーザに対する影響を調べる必要がある.

▲MoveLongTailは下流のTYW婚を1個だけ除外した移動を行う MoveBundledLDRでは下流のすべてのTYW婚を除外している MoveBundledLDRでMoveLongTailの動作をカバーできるのでは?

コメントを残す

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

CAPTCHA