pubDate: 2024-03-04
author: sakakibara
テストをトップダウンから行うか、ボトムアップで行うかという問題が(自分の中で)ある。 トップダウンのメリットとしては、全体の流れを把握しやすく、テストの範囲を絞りやすいという点がある。 また、使用感(ユーザーエクスペリエンス)を含めてテストを行うことができる上に、 むやみやたらにテストを行うのではなく、テストの範囲を絞ることでテストの効率をあげることができる。 デメリットとして、一度のテストが大きくなりがちなことと、テスト漏れが発生しやすいこと、 また、(関係があるかわからないが、)モジュールの分割が曖昧になりがち(ボトムアップのテストを行っていない)で、順序に依存した関数など、結合度の高いモジュールを作ってしまってテストが難しくなりがちなことが挙げられる。
一方、ボトムアップのメリットとしてはモジュールをテストしやすい単位で区切り、テストを行うことができる。 デメリットとしては全体の流れが把握しにくく、不要なテストを行いがちであることが挙げられる。 不要なテストばかり書いていると開発のモチベーションが落ちる。
おそらく中庸がよいのだろう。 つまり、橋を作るときのように、端から端まで一気に作るのではなく、中間となる地点を定め、そこから両端に向かって作っていくのがよいのだろう。 これに習うと、トップダウンテストを行う地点を定め、そこへ向かってボトムアップのテストを行い、トップダウンのテストを行う。というふうに進めるのがよいのだろうか。
これって意味あるかなぁと思うことがある。 引数validationに時間ばかり吸い取られてビジネスロジックの実装が進まない。 しかし、引数validationをしないと、バグが発生しやすくなる。 validation のチェックばっかりしすぎて単体test イコール validation check な気がしてくる。
契約によるテストとは事前に入出力の条件を決めておき、その条件に基づいたテストを行うこと。 たとえば、このプログラムのlistは全てnp.ndarrayを許すなどの前提条件を決めておき、その条件はクリアしている前提でテストを行う。