ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

考えて実装して、改めて考えなおしてシンプルに実装しなおす

一旦実装が終わってテストを始めると、結果が正しくありませんでした。
具体的には、3月23日 8時~9時に予定ありというような時間帯の情報の作成を行う処理で、
・3月23日 8時~9時に予定あり
・3月23日 8時~9時15分に予定あり
というように、時間帯が重複してしましまいました。

原因を探っていくと、既にこの時間帯には予定が入っていると判定する処理において2つの切り口で判定をしていて、2つ目の切り口での判定が正しくないのがわかりました。
2つ目の切り口は、当初想定していなかった切り口で、後から追加した切り口です。

2つ目の切り口での判定を追加する際、1つ目の切り口での判定を真似しつつ、2つ目の切り口の特性を考慮して、条件をやや複雑にしていました。
複雑にした分、間違いもあるだろうと、正しくない結果から正しい結果になるように、条件を追加して対処しました。

再度テストを行うと、新たな時間帯で同じように時間帯の重複が発生していました。
先ほどとは異なる条件を、2つ目の切り口での判定条件をさらに追加すれば、正しくはなりそうです。

どんどん複雑になっていく条件を見ていて、

  • これはそもそも、このまま条件を追加していくべきなのか?正しい方向性なのか?
  • 根本的に、2つ目の切り口での判定を追加したときに、考え方が正しかったのか?

と疑問が出てきました。

プログラミング中
unsplash-logoPer Lööv

当初の想定とテストを経た後の現状の実装から考え直すと、

  • 2つ目の切り口での判定を追加ときに、条件をやや複雑にした意味がなくなっているのでは?

と気がつきました。

気がついたので改めてじっくり考えなおした結果、

  • 1つ目の切り口と考え方は一緒で、ほぼ同じ条件で判定できて、戻り値もほぼ同じようにできるのでは?

という考えに至り、2つ目の切り口での判定を実装しなおしました。

実装しなおしてテストをした結果、これまで発生していた時間帯の重複の不具合は発生しなくなりました。


当初の実装時点では必要と考えていた条件を不要にできるよう、思いつけていればよかったのでしょうが、それまでのテストがなかったら、思いつけなかった内容です。
実装時点で要件を抜けなく決めるとともに、要件の抜けが見抜けるテスト方法の確立が重要だと思っています。