Featured image of post ただの数値や文字列で渡していた値を、Perlの値オブジェクトとTDDで守る全5回【目次】

ただの数値や文字列で渡していた値を、Perlの値オブジェクトとTDDで守る全5回【目次】

金額やバージョン番号を数値や文字列のまま渡すと、ありえない値が黙って通る。Perl と Moo で値オブジェクトを作り、Test2 のテスト駆動開発で守りを固めていく全5回の案内板です。題材は JSON-RPC 2.0 の仕様で、Money から Request/Response、エラー処理と境界値テストまで順に積み上げます。

Perl と Moo で値オブジェクト(Value Object)を作り、Test2 を使ったテスト駆動開発(TDD)で仕上げていく全5回の連載です。題材は JSON-RPC 2.0 の仕様で、金額を表す Money から始めて、Request/Response、エラー処理と境界値テストまで順に積み上げます。

各回は単独でも読めますが、第2回で設計した値オブジェクトを第3回以降で実装していく作りなので、通して読むなら第1回からが早道です。このページは目次を兼ねた案内板です。入口は「どこから読むか」で、困りごとが決まっているなら「困りごとから探す」で、順に追うなら「全話一覧」で選んでください。

対象は、Perl の基本文法(変数・サブルーチン・リファレンス)が分かり、cpanm などでモジュールを入れられる方です。Moo・Test2・Type::Tiny の使い方は本文で説明するので、先に学んでおく必要はありません。

どこから読むか

  • 第1回 — 値オブジェクトを初めて聞くなら。金額を数値のまま渡すと何が起きるかから始め、Money クラスを Moo で書く回
  • 第3回 — 値オブジェクトは分かっていて、TDD の進め方を知りたいなら。失敗するテストを先に書き、最小の実装で通して整える流れを、1つのクラスで一巡する回
  • 第5回 — エラー処理と境界値テストの書き方を知りたいなら。第4回までのコードを使うので、前の回は必要に応じて引きながら

困りごとから探す

数値や文字列のまま渡して、ありえない値が通ってしまう

  • 第1回 — 円とドルの金額を足しても、負の金額でも止まらない
  • 第2回 — “2.0” でなければならない値を、文字列のまま受け取っている

仕様書をコードに落とすとき、何をどこで守るか決められない

  • 第2回 — MUST・SHOULD・MAY のどれを、どこで検査するか
  • 第4回 — 省略できる項目や、省略すると意味が変わる項目の扱い

テストを書いているのに、バグがすり抜ける

  • 第3回 — テストが実装に合わせて甘くなっている
  • 第5回 — 範囲の端や文字列長の境目を試していない

エラーのときだけ、おかしな値が紛れ込む

  • 第5回 — エラー応答に result が混じる、範囲外のエラーコードが通る

全話一覧

関連シリーズ

Moo のクラス設計をもっと知りたいなら

困ったコードを直しながら、デザインパターンを引き出しに増やす

参考リンク

comments powered by Disqus
システム開発・AIワークフローのご相談は Meetsource へ
Hugo で構築されています。
テーマ Stack は Jimmy によって設計されています。