8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ソフトウェアテストAdvent Calendar 2021

Day 4

初心者こそTDDを始めるべき理由

Last updated at Posted at 2021-12-04

概要

エンジニア1年目の駆け出しのものです。
チームでTDDを推進していくことになり、TDDを勉強、実践していくうちに初心者こそTDDを始めるべきだと思ったのでまとめました。
TDDを始めようと思っている方の一助になれば幸いです。

目次

  • 結論
  • TDDって何?
  • TDDのメリットは?
  • TDDをどうやって始める?
  • まとめ
  • 余談

【結論】なぜ初心者こそTDDを始めるべきか

  • レッド、グリーン、リファクタリングのサイクルを小さく、素早く回す事により、__問題を小さく分解して確実に進む__ことができるから
  • なおかつ、コードにバグがないと__自信を持ちながら進む__ことができるから

TDDについての説明となぜ上記の結論のように思ったのかを書く↓。

TDDって何?

テスト駆動開発 (てすとくどうかいはつ、英: test-driven development; TDD) とは、プログラム開発手法の一種で、プログラムに必要な各機能について、最初にテストを書き(これをテストファーストと言う)、そのテストが動作する必要最低限な実装をとりあえず行なった後、コードを洗練させる、という短い工程を繰り返すスタイルである。
wikipedia参照

スクリーンショット 2021-11-29 20.43.41.png
t_wadaさんの資料参照

ある機能を実装する際、TDDでは以下のサイクルを回す。
①その実装が満たすべき挙動のテストを書く(レッド)
②最低限の実装でテストを通す(グリーン)
③リファクタリングする(リファクタリング)

TDDはただテストを始めにかけばいいのか?というとそうゆうことではない。
TDDのテストは以下のような意味を持つと書かれている。

TDDはテスト技法ではない。TDDは設計技法である。
TDDのテストはいわばプログラミングの設計の補助線、治具である。
テスト駆動開発

テストとはその機能が最終的にあってほしい姿(設計)であり、テストを先に書くことでゴールを明確にできる。
また、テストが書きづらいのであれば、考えている設計を考え直すきっかけにもなる。

TDDのメリットは?

  • 「動作するコードを書く」と「きれいなコードを書く」のフェーズを分離することで、__小さく確実に進む__ことができる
  • 今書いたコードにバグがないと自信を持てる
  • これから書くコードが既存コードを破壊していない自信を持てる

TDDをどうやって始める?

TDDの手順は大まかに以下の通り
① 実装したい機能をリストアップする
② リストアップした中から機能の中から1つ選び、最終的にあるべき挙動のテスト書く
③ ②のテストがレッドであることを確かめる
④ 仮実装でテストをグリーンにする
⑤ ④を一般化したコードに置き換える(テスト駆動開発で言う明白な実装)
⑥ ④のコードをリファクタリングする
⑦ ②に戻る

先程の図に当てはめるとこんなイメージ
スクリーンショット 2021-11-29 20.43.17.png

仮実装など行わずともはじめから一般化したコード、きれいなを書けるのであれば書けば良い。
ただし、問題が複雑で混乱してきたときは__小さなステップに立ち返る__。
つまり、まずは仮実装を行い、次に動作するコード、次にリファクタリングを行う。

###初心者にすすめる理由
ベテランエンジニアであれば、一気にきれいで動作するコードを書くことができるだろう。
しかし、初心者はそうは行かない。(少なくとも私は)
そこで、TDD使うことでプログラミングの補助輪をつけることができ、小さなステップで着実にコードを書くことができる。

まとめ

  • TDDはレッド、グリーン、リファクタリングの__サイクルを小さく、素早く回す__
  • これにより問題を__小さく分解して確実に進む__ことができる
  • なおかつ、コードにバグがないと__自信を持ちながら進む__ことができる

余談

###TDDで書くテストはソフトウェアテストの世界の一部
ソフトウェアテストは下の図のように分類でき、TDDで書くテストはその一部である。
TDDはチームや個人を支援する、つまり、より確実に安心してコードを書けるテストを提供する。
一方でセキュリティパフォーマンステストなど「製品を批評する」テストも必要である。

スクリーンショット 2021-11-30 8.48.48.png
テスト駆動開発 参照

8
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?