駆け出しフリーランスエンジニアのブログ

iOS,Android,Web,フロントエンドをやっているフリーランスエンジニアの記録です

テスト駆動開発のユニットテストの考え方。

テスト駆動開発」というバイブル的な本があって、ここに書くことなるとは、おもっていなかったんだけど、 あまりに感銘を受けたので翻訳者みずから本の内容を実演(ライブコーディング)で紹介している動画と共に紹介します。

テスト駆動開発

テスト駆動開発

なぜ、テストコードを先に書くのか。 なぜ、糞コードが大量生産されてきたのか。 なぜ、設計もおろそかに、いきなりコードを書くのか。

ここを見ている現役エンジニアは、とても長い動画ですが、一度見てほしいです。


TDD Boot Camp 2020 Online #1 基調講演/ライブコーディング

目次

まえがき

  • 勇気

謝辞

はじめに

第I部 多国通貨

第1章 仮実装

第2章 明白な実装

第3章 三角測量

第4章 意図を語るテスト

第5章 原則をあえて破るとき

第6章 テスト不足に気づいたら

第7章 疑念をテストに翻訳する

第8章 実装を隠す

第9章 歩幅の調整

第10章 テストに聞いてみる

第11章 不要になったら消す

第12章 設計とメタファー

第13章 実装を導くテスト

第14章 学習用テストと回帰テスト

第15章 テスト任せとコンパイラ任せ

第16章 将来の読み手を考えたテスト

第17章 多国通貨の全体ふりかえり

  • ここから先はどうなるのか
  • メタファー
  • JUnitの使用状況
  • コードメトリクス
  • プロセス
  • テスト品質
  • 最後のふりかえり

第II部 xUnit

第18章 xUnitへ向かう小さな一歩

第19章 前準備

第20章 後片付け

第21章 数え上げ

第22章 失敗の扱い

第23章 スイートにまとめる

第24章 xUnitの全体ふりかえり

第III部 テスト駆動開発のパターン

第25章 テスト駆動開発のパターン

  • テスト(名詞)
  • 独立したテスト
  • TODOリスト
  • テストファースト
  • アサートファースト
  • テストデータ
  • 明示的なデータ

第26章 レッドバーのパターン

  • 一歩を示すテスト
  • はじめのテスト
  • 説明的なテスト
  • 学習用テスト
  • 脱線はTODOリストへ
  • 回帰テスト
  • 休憩
  • やり直す
  • 安い机に良い椅子

第27章 テスティングのパターン

  • 小さいテスト
  • Mock Object(擬装オブジェクト)パターン
  • Self Shunt(自己接続)パターン
  • Log String(記録用文字列)パターン
  • Crash Test Dummy(衝突実験ダミー人形)パターン
  • 失敗させたままのテスト
  • きれいなチェックイン

第28章 グリーンバーのパターン

  • 仮実装を経て本実装へ
  • 三角測量
  • 明白な実装
  • 一から多へ

第29章 xUnitのパターン

  • アサーション
  • フィクスチャー
  • 外部フィクスチャー
  • テストメソッド
  • 例外のテスト
  • まとめてテスト

第30章 デザインパターン

  • Commandパターン
  • Value Objectパターン
  • Null Objectパターン
  • Template Methodパターン
  • Pluggable Objectパターン
  • Pluggable Selectorパターン
  • Factory Methodパターン
  • Imposterパターン
  • Compositeパターン
  • Collecting Parameterパターン
  • Singletonパターン

第31章 リファクタリング

  • 差異をなくす
  • 変更の分離
  • データ構造の変更
  • メソッドの抽出
  • メソッドのインライン化
  • インタフェースの抽出
  • メソッドの移動
  • メソッドオブジェクト
  • パラメータの追加
  • メソッドからコンストラクタへのパラメータの移動

第32章 TDDを身につける

  • 一歩の大きさはどのくらいか
  • テストしなくてよいものはあるか
  • 良いテストを見分けることができるか
  • TDDはどのようにフレームワークを導くか
  • どのくらいのフィードバックが必要か
  • どのようなときにテストを消すべきか
  • プログラミング言語や環境はTDDに影響するか
  • 巨大なシステムをテスト駆動できるか
  • アプリケーションレベルのテストで開発を駆動できるか
  • 途中からTDDに乗り換えるにはどうすればよいか
  • TDDは誰のためのものか
  • TDDは初期状況に左右されるか
  • TDDとパターンの関係
  • なぜTDDは機能するのか
  • 名前の由来は
  • TDDとXP(eXtreme Programming)のプラクティスとの関係
  • Darachの挑戦

付録A 因果ループ図

  • フィードバック

付録B フィボナッチ

付録C 訳者解説:テスト駆動開発の現在

参考文献

あとがき

訳者あとがき

索引

著者・訳者について

Linux(Ubuntu 20.04.1 LTS)でRuby3.0.0とRails6.1.0の開発環境を作る

2021年、あけましておめでとうございます。

今年も在宅で頑張ってまいります。

劇的に進化したRuby3Rails6.1の環境構築を試してみたという話です。

せっかくなので、OSも新しいUbuntu desktop 20.04.1 LTSのremix 日本語版を新調しました。 したがって、あとは開発環境を入れて、そのまま開発に使っていこうという目論見です。

ターミナル(端末)での操作です。

現在の環境を最新の状態にアップデートします。

% sudo apt update -y
% sudo apt upgrade -y

開発に必須のパッケージとRuby on Railsで必要なパッケージをインストールします。

% sudo apt-get -y install git curl g++ make libyaml-dev libxml2-dev libxslt-dev sqlite3 libsqlite3-dev nodejs
% sudo apt install build-essential -y
% sudo apt install -y libssl-dev libreadline-dev zlib1g-dev

Gitのアカウントを設定します。

% git config –global user.name <ユーザー名>
% git config –global user.email <メールアドレス>

rbenv(パッケージ管理ツール)をインストールします。

% git clone https://github.com/sstephenson/rbenv.git ~/.rbenv

環境変数Pathを設定します。

% echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
% echo 'eval "$(rbenv init -)"' >> ~/.bashrc

シェルを再起動します。

% exec $SHELL -l

ruby-buildをインストールします。

% git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

Rubyをインストール

% rbenv install 3.0.0
% rbenv global 3.0.0

Railsのインストール

% gem install -v 6.1.0 rails

ひとまず、開発環境が整いました。

このほかに、ブラウザーとしてChromeを、 エディタとしてVSCodeを、 癒やしとしてSportifyをインストールしました。

この素晴らしい環境ならば、いい仕事ができそうです。