バグと機能拡張
2007/03/18
「主筆」第18版の機能拡張に着手する。とりあえず、変更が加わった行に印を付けて明示する機能を実装する。この機能には、拡張情報領域の機能を用いておいた。すなわち、更新されたら、所定のカラムの拡張情報領域にフラグを設定する。これにより、その行が更新されたのかを知ることができるようになる。
だが、その過程で幾多のバグがあることに気が付いた。まず一つは、行が追加・削除された時の、拡張情報領域の値の処理だ。今までは拡張情報領域に設定された値が、行の追加・削除に合わせて移動しなかった。例えば、10行目にフラグが設定されていたときに、5行目の行が削除されたとしたら、拡張情報領域のフラグが9行目に移動することが無く、そのまま10行目に残り続けていた。
始末の悪いことに、これは行の追加・削除が発生することにより、拡張情報領域の値として不正なメモリを参照していたことにより発生するバグだった。考えただけでも身の毛がよだつ。
プラグインの管理周辺でも、似たようなバグがあった。だが、これはまだ顕在化していなかった。しかし、おそらくおかしくなるのは時間の問題だっただろう。そのどちらも、対処しておいた。だが、似たような問題が他にもないとは、まだ言い切れない。確実に潰しておかなければならないだろう。
今ひとつのバグは、ファイルの排他制御に関するものだった。無名のファイル、すなわち新しいファイルを開いている「主筆」が複数ある状態で、二番目に起動された方で何らかのファイルを開こうとすると、初めに起動された方の「主筆」がアクティブになるだけで、目的のファイルを開くことができない。
これは、指定されたファイルがすでに開かれているか否かを判断する処理で、どちらかのファイル名が空白だった時には偽を返さなければならないところで、真を返していた事によるバグだった。
極めて単純なミスである。だが、なぜ今までこれで良いものだと思っていたのだろうか。思ったほど、ここのロジックが実行されることはなかったのだろうか。あるいは、正常に動作していないことに、気が付かないでいただけなのだろうか。それとも、存在して欲しくないものの存在を、無意識的に無視していただけなのだろうか。
このように考えていくと、プログラムを作ること難しさが、今更ながらに身にしみる。
だが、その過程で幾多のバグがあることに気が付いた。まず一つは、行が追加・削除された時の、拡張情報領域の値の処理だ。今までは拡張情報領域に設定された値が、行の追加・削除に合わせて移動しなかった。例えば、10行目にフラグが設定されていたときに、5行目の行が削除されたとしたら、拡張情報領域のフラグが9行目に移動することが無く、そのまま10行目に残り続けていた。
始末の悪いことに、これは行の追加・削除が発生することにより、拡張情報領域の値として不正なメモリを参照していたことにより発生するバグだった。考えただけでも身の毛がよだつ。
プラグインの管理周辺でも、似たようなバグがあった。だが、これはまだ顕在化していなかった。しかし、おそらくおかしくなるのは時間の問題だっただろう。そのどちらも、対処しておいた。だが、似たような問題が他にもないとは、まだ言い切れない。確実に潰しておかなければならないだろう。
今ひとつのバグは、ファイルの排他制御に関するものだった。無名のファイル、すなわち新しいファイルを開いている「主筆」が複数ある状態で、二番目に起動された方で何らかのファイルを開こうとすると、初めに起動された方の「主筆」がアクティブになるだけで、目的のファイルを開くことができない。
これは、指定されたファイルがすでに開かれているか否かを判断する処理で、どちらかのファイル名が空白だった時には偽を返さなければならないところで、真を返していた事によるバグだった。
極めて単純なミスである。だが、なぜ今までこれで良いものだと思っていたのだろうか。思ったほど、ここのロジックが実行されることはなかったのだろうか。あるいは、正常に動作していないことに、気が付かないでいただけなのだろうか。それとも、存在して欲しくないものの存在を、無意識的に無視していただけなのだろうか。
このように考えていくと、プログラムを作ること難しさが、今更ながらに身にしみる。

