1. B-Testing.fm
  2. #56 テストを書きやすいコード..
#56 テストを書きやすいコードはシンプルな設計になりやすい
2026-10-26 08:07

#56 テストを書きやすいコードはシンプルな設計になりやすい

今回は、「テストを書きやすいコードはシンプルな設計になりやすい」というテーマで、実装における設計とテストコードの関係性について解説します。階乗を計算するプログラムの例題を用いて、for文を使ったシンプルな実装と、if文で全てのケースを分岐させた複雑な実装を比較。テストコードの書きやすさやバグ(計算間違い)の見つけやすさの違いについて分かりやすく紐解きます。テストコードを書くことを意識することが、いかにして手戻りを防ぎ、より良い設計を生み出すヒントになるのか、その本質に迫るエピソードです。


📌 今回のエピソードのポイント

  • 階乗プログラムを用いた実装比較: for文によるループ実装とif文による全分岐実装を比較し、それぞれのコードの特徴を解説します。
  • if文の落とし穴とテストの重要性: 全てのケースを分岐させた場合、一部の計算間違い(例:4の階乗が28になっているなど)を見つけるために全パターンのテストが必要になる点を指摘します。
  • テストの書きやすさは設計のバロメーター: テストが書きづらい、あるいは複雑なテストが必要なコードは、そもそも実装の設計がシンプルではない可能性が高いという本質について語ります。



🕒 チャプター

  • () オープニング
  • () テーマ:テストを書きやすいコードはシンプルな設計になりやすい
  • () 例題:階乗を計算するプログラム
  • () 回答例1:for文を使ったシンプルな実装
  • () 回答例2:if文で分岐させる実装とその落とし穴
  • () テストが書きづらいコード=シンプルではないコード
  • () エンディングとお知らせ


📢 あなたのご意見をお聞かせください

皆さんは、テストコードを書く際に「なんだかテストが書きづらいな…」と感じて、そもそもの設計を見直した経験はありますか?あるいは、テストを書く前提で設計することでスムーズに開発が進んだ事例などがあれば、ぜひ教えてください!皆さんの現場での体験談や、今回のエピソードを聞いての感想をお待ちしております。

  • X(旧Twitter):ハッシュタグ #b_testing でのポストをお待ちしています。

  • お便りフォーム:こちらからお気軽にどうぞ。

  • フォローのお願い:最新回を逃さないよう、Podcastアプリでのフォローをぜひお願いします!

感想

まだ感想はありません。最初の1件を書きましょう!

サマリー

テストを書きやすいコードはシンプルな設計になりやすい、という考えを階乗計算の例で説明します。1から10の整数を受け取り、範囲外なら-1を返すプログラムについて、for文で計算する実装と、入力ごとにif文で分岐する実装を比較します。if文の例では4の階乗を28としてしまう間違いがあり、全入力パターンのテストが必要になります。テストコードの書きづらさは実装や設計の複雑さを見直すきっかけになり、開発後ではなくテストから考えることで手戻りを防げると語ります。

テストしやすいコードとシンプルな設計
皆さん、こんにちは。B-Testing のブロッコリーです。この B-Testing.fm は、QAエンジニアである私、ブロッコリーが、テストや品質に対する私なりの考えを、約10分間で語っていくポッド
キャスト番組です。
最近、スライドなしで喋ることが多かったかなと思います。自動テストの話と言いつつも、自動化ってどういうものなんだろうっていう概念的な話が多かったので、スライドなしで喋っていることが多かったかなと思って
います。
ただ、今日ちょっと話そうと思っているのはですね、コードがどういう風になればいいかっていう、そういう考えの話をすることがあるので、コードを見せながら説明できない回っていうのはやっぱり正直あるし、今回は
それに当たるかなと思っているので、今回はスライドありで喋っていきたいなと思います。
ということで、今日のテーマはですね、テストを書きやすいコードはシンプルな設計になりやすいよっていうことについて話していきたいと思います。ということで、今回も btesting.fm スタート
です。
ということで、今日はテストを書きやすいコードはシンプルな設計になりやすいという話を進めていきます。
それはどういうことかっていうのは、やっぱりちょっと例題を用いていろいろ喋っていければなぁと思っています。
階乗計算プログラムの実装例
ということで例題ですが、以下のプログラムを実装しなさいと。
1から10までのいずれかの整数を入力すると、その数値の会場の計算結果が現れると。
それ以外の整数を入力するとマイナス1と出力する。そんなプログラムがあったとします。
例として3って入力したら3の会場って3×2×1で6になるので6って出力されますよ。
3って入力したら6って出力されますよみたいな。そういうものを実装してほしいと。
1から10以外の整数、だから11とかそういうのを入力するとマイナス1と出力するみたいな。そういうものがあったとします。
このプログラムを実装しなさいっていうと、じゃあどういうふうに実装するか。
一番単純でわかりやすい話としては、これで4分で回すとか、ファイル分で回すとか、そういうのがあるかなと思っています。
何かっていうと、これ1から10以外の整数だったらマイナス1を出力するっていうのは今回ここで何かしてるんですけれども、
1から10の値を入力するっていったときに、結果、リザルトの変数に1を入れといて、
例えば4分で1からその入力値の値を入力して、それの4分を回してその分だけ掛け算していけばいいと。
最後それがプリントして出力するみたいな。こういうのが思い浮かぶかなと思います。
もちろん言語によって書き込みが違ったりとか、アルゴリズムとして4分ではなくて、ファイル分を使って表現しようとする人もいるかなと思っています。
if文による分岐実装の落とし穴
ただ一方で、今回のお題って1から10までの数字を入力したらそれに対応して会場の値を出すっていう話でいくと、
要は1だったら1を出力する、2だったら2×1で2を出力する、3だったら3×2×1で6を出力するみたいに、
この値を入力したらこの値を出力するっていうのは決まってるっていうことで言えば、こういうふうにif分で分岐して書いてもいいんですよねと。
1だったら1を出力しますよ、2を入力したら2を出力しますよ、3を入力したら6を出力しますよっていうふうに、
入力と出力が1対1で関係しているので、こういうふうにif分で分岐して書くこともできますよねと。
ただこれってよくよく今回の今のスライドの画面を見てもらえればと思うんですけど、今回のこれって一箇所ちょっとあえて間違いを書いています。
何かっていうと4の時ですね。4の時ってここでは28が出力されるって書いていますけれども、よくよく考えてみると4の時って4×3×2×1なんで24が答えになるはずですよね。
今回のここつまり28ってこれ間違ってるんですよね。
じゃあこの間違いを見つけるためにはどうすればいいかっていうと、このif分で分岐している場合は1の時1出力されて2の時2出力されて3の時6出力されて4の時24が出力されるよねっていう全部のテストを書か
ないとこれおそらく見つけられないんですよね。
一方で4分の方はこれ全部1の時2の時3の時4の時って多分やらないと思うんですよね。
テストから設計を見直す
つまりこれ何言いたいかというとですね。テストコードが書きづらい、要はたくさんのテストが必要みたいな話とか、あとはテストコードを書くにあたってちょっと複雑になっているようなコードっていうのは、これはそも
そもの実装コード自体がシンプルではないコードになっている可能性が高いと言えます。
つまりテストコードをどういうふうに書こうって考えることが、実はもともとの実装とか設計がもっとシンプルにできないかっていうフィードバックのタイミング、きっかけになるんですよね。
これが自動テストを書くと言った時に、自動テストを書くというかテストコードを書くときの良さの一つです。テストを書きやすいコードっていうのはどうなるかって考えるとシンプルな設計になりやすいという話にな
ります。
まとめとお便り案内
なので最初に開発とか実際にプロダクトのコードを実装した後に、さあ終わったテストの番だっていうふうになってしまうと、そもそもこれシンプルにできるぞっていうふうなことを後から考えることになってしまって、手
戻りがやっぱり発生してしまうんですよね。
そうならないようにやっぱりテストコードから考えるとかテストから考えるとシンプルな設計につながるっていうところがわかっていただけるかなと思います。ということで今日はテストを書きやすいコードはシンプ
ルな設計になりやすいというお話をしてきました。
はいエンディングです。 btesting.fmではリスナーさんからのお便りを募集しています。エピソードの感想や私に聞いてみたい質問やテストのお悩みなどをどんなことでも構いません。投稿フォームは番組概
要欄にあります。またエピソードの感想はハッシュタグbtesting banscotestingでxのポストをお願いいたします。
今日の話で言うとシンプルな設計につながるテストコードというかテストの話をしてきましたけれども、そう考えてみると自分もテストをやってたらこういうシンプルなことにできたなみたいなそういう体験談とかもしあれ
ばハッシュタグに投稿していただければと思います。
もしもこれからも聞きたいという方はお手持ちのポッドキャストアプリで番組のフォローもお願いします。最新回が上がった時にすぐに気づけると思います。ということで今回はここまでです。それではまた次回バイバイ。
08:07

コメント

スクロール