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

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

デバッグは機能を少しずつ追加して原因を探る

複数のメソッドからなる、新しい機能のメソッドを作成しました。
新しい機能のメソッドのみでの動作が正しいのはテストで確認しました。
システム全体を通してのテストを行うと、動作が正しくありません。

テスト間での違いを考える

まず現象を確認しました。
現象を引き起こしている可能性がある箇所を確認しましたが、現象が起きる理由が思いつきません。

次に、新しい機能メソッドのみでの動作と、システム全体を通してのテストで何が違うのか想像しましたが、データ量の差ぐらいしか思いつきませんでした。

新しい機能のメソッドは、methodAからmethodB、methodC、methodDを呼び出して、methodB、methodC、methodDからmethodEを共通して呼び出します。
methodAからmethodBだけ呼び出すようにして、methodC、methodDを呼び出さないようにして、現象が起きるか確認しました。
結果は、現象が発生します。

ここに来て、現象が起きる原因が、なんとなく推測できました。
新しい機能のメソッドを作成およびテストしている際には考えていなかったパターンが、システム全体を通してのテストでは発生していると推測しました。

推測したパターンへの対処を考えて、新しい機能のメソッドをシステム全体を修正してテストしたところ、methodAからmethodBだけ呼びした状態では現象は発生しなくなりました。
methodAからmethodBだけでなく、methodCも含めて呼び出した状態にしても現象は発生しなくなりました。

プログラミング中
unsplash-logoWes Hicks

新しい機能のメソッドは、テストをしていたので、なぜ動作が正しくないのかと当初は悩みました。
新しい機能のメソッドのみでのテストと、システム全体を通してのテストは何が違うのかと考えながら、新しい機能を部分的に利用するようにした結果、比較的短時間で理由がわかって対応ができました。