朝から昨日の続き。操作フローで「戻る」操作が効かない問題を片付ける。(なお、午後に予定していた回路設計者との動作試験は設計者が病欠のため延期になった。)
問題のある箇所の見当はついているが、条件分岐やマジックナンバーや意味不明の変数やらでジャングル状態になっている。ちょっと遠回りになるかもしれないが、まずはリファクタリングで藪掃除にかかる。
半日ほどかけて変数と関数の名前を適切なものに変更して、マジックナンバーを#defineマクロで置き換えた。詳しくは書かないが、今回のソースでは特に不適切な変数名・関数名に大変苦しめられた。ちなみにマジックナンバーは数が多すぎて全部は片付かなかったが、意味の明確なものはほぼ全てマクロに置き換えられた。残っているマジックナンバーの大半はマクロよりむしろenumにすべきものだが、普通にenumを使うと値が変わってしまうため変更するなら慎重にやらないといけない。それに、そもそもアルゴリズム自体を変更して残ったマジックナンバーを一掃してしまう可能性もあるので今日は保留した。
リファクタリングはだいぶ進んだが、どうにも問題の原因が見えてこない。散々首をひねった挙句、古いバージョンで動作を確認してみたらなんのことは無い、こちらも同じように操作フローを戻れない。どうやら問題だと思っていたのは元々の「仕様」で、古いバージョンで動作していると思ったのはただの勘違いだった。リファクタリングにかけた時間は無駄ではないけど、眉間にしわを寄せてウンウン唸りながらソースをにらむ必要はなかったようだ。