あるシステムを構築したとき、高速性を求めて、タスク間のインターフェースをイベント駆動にした。
Aというタスクからイベント発行し、Bのタスクでそれを受ける。
Bのタスクはその処理をきっかけとしてCのタスクに動作要求をかける。

3つのタスクが関わるこの処理では、B→Cの要求中にAの処理が動けるので高速化することが可能である。
しかし、B→Cへの要求中に、Aの処理が動き、A→Bへのイベント発行がなされる時、その処理が、一連の動きの中で問題ないことを十分確認しなければならない。

問題ないことが確認できない、また十分に確認できる手段を用意できないのであれば、そのような高速化は行ってはならない。

まずは安定性が最優先で、その上で高速化を図るべきである。

あるシステムの仕様変更を行うとき、ソースを見て、呼び出されていず、使っていない関数をコメント化して抜いた。
ほかのところで、ifとelse ifで同じ条件(関数呼び出しの戻り値の判定)をしているところがあって、無駄なので整理した。

実は、ifとelse ifでは異なる条件で判断しなければならなかった。
それと、else ifの条件には、使っていないと思っていた関数を使用するべきであった。
そのままで、運用上支障が出なかったので、バグが見過ごされた。

そもそも、単体テストをきちんと通していれば、 ifとelse ifで同じ条件であるとか、使わなければならなかった関数が使われていないとか、開発の初期段階でわかったはずだが、それがなされていないと思われる。
その結果、リリース後時間がたったところで、あるパターンを行うとNGになる、という状況になった。

単体テストの重要性を思い知らされる事例である。

新年を迎えるとともに、当社の新しい年度が始まりました。第35期になりました。
それに伴い1月7日(土)に今季の「継営方針発表会」が行われました。
今期の全社スローガンは「生産性の向上」です。
全社員一丸となって目標達成に向けて努力致します。

写真は南社長の方針発表の様子です。

IMG_0384

↑このページのトップヘ