Featured image of post 差し替えた部品が月末だけ落ちる。Perl でインタフェースを書き、can で確かめる【Extract Interface】

差し替えた部品が月末だけ落ちる。Perl でインタフェースを書き、can で確かめる【Extract Interface】

通知先を別の部品に替えたら、日次処理は通るのに月末処理だけがメソッド不足で止まった。使う側が呼ぶメソッド名の一覧を1か所に書き、can で本物と替えの両方を確かめる――インタフェースの抽出(Extract Interface)を素の Perl で書きます。

連載 コード大工 (第11話 / 全12話)
Featured image of post 数百行の関数の「途中だけ」をテストしたい。関数をクラスへ移して段ごとに割る【Break Out Method Object】

数百行の関数の「途中だけ」をテストしたい。関数をクラスへ移して段ごとに割る【Break Out Method Object】

数百行の決算処理は途中の値がすべて関数の中に閉じていて、3段目だけを確かめられない。関数をクラスへ移し、局所変数をフィールドにする――メソッドオブジェクトの抽出(Break Out Method Object)を、呼び方も戻り値も変えずに行います。

連載 コード大工 (第10話 / 全12話)
Featured image of post 関数名を揃えたらモックが効かなくなった。テストは緑のまま本物が動く罠【Introduce Instance Delegator】

関数名を揃えたらモックが効かなくなった。テストは緑のまま本物が動く罠【Introduce Instance Delegator】

関数名を揃えたら、テストは緑のまま、差し替えたはずの印字処理が本物のまま動いていた。名前で縛った差し替えは名前が変わると効かなくなる。インスタンス委譲の導入(Introduce Instance Delegator)で、差し替えを渡すオブジェクトで決める形にします。

連載 コード大工 (第9話 / 全12話)
Featured image of post コンストラクタが本番の帳簿ファイルを開いてしまうクラスを、テストできる形にする【Parameterize Constructor】

コンストラクタが本番の帳簿ファイルを開いてしまうクラスを、テストできる形にする【Parameterize Constructor】

組み立てた途端に本番の帳簿ファイルを開いてしまうクラスは、そのままではテストできない。コンストラクタのパラメータ化(Parameterize Constructor)で、依存を外から渡しても渡さなくても動く形にします。

連載 コード大工 (第8話 / 全12話)
Featured image of post テストのたびに外部 API を叩いてしまうコードを、サブクラスで差し替える【Extract and Override Call】

テストのたびに外部 API を叩いてしまうコードを、サブクラスで差し替える【Extract and Override Call】

郵便番号の引き当てがテストのたびに外部へ問い合わせてしまう。取り込んだ関数には local が届かない――呼び出しの抽出とオーバーライド(Extract and Override Call)でテスト用のサブクラスに差し替えます。

連載 コード大工 (第7話 / 全12話)
Featured image of post テストで組み立てられないクラスへの機能追加は、新しいクラスを別に起こす【Sprout Class】

テストで組み立てられないクラスへの機能追加は、新しいクラスを別に起こす【Sprout Class】

既存の在庫クラスはコンストラクタで帳簿ファイルを開くため、テストの中で組み立てられない。判定ロジックを芽生やしクラス(Sprout Class)として別に起こし、既存クラスからは委譲するだけにします。

連載 コード大工 (第5話 / 全12話)
Featured image of post コードを書き換えずにテスト用の差し替え口を見つける。Perl の local で関数を一時置換【Seam】

コードを書き換えずにテスト用の差し替え口を見つける。Perl の local で関数を一時置換【Seam】

差し替える場所が無いように見える Perl コードでも、パッケージ境界そのものが継ぎ目(Seam)になる。シンボルテーブルを local でテストの間だけ差し替え、本体を書き換えずに税率計算を確かめます。

連載 コード大工 (第3話 / 全12話)
Featured image of post コードディスパッチャー【Prompt Registry】「次の当直が、困らないように」〜指示書は、誰かの持ち物です〜

コードディスパッチャー【Prompt Registry】「次の当直が、困らないように」〜指示書は、誰かの持ち物です〜

引き継ぎ書を作ろうとして、指示書がどこにも一元管理されていないと気づいた。散らばったプロンプトに版・所有者・変更理由を持たせ、資産として渡せる形にするPrompt Registryを解説します。

Featured image of post コードディスパッチャー【Audit Trail】「三ヶ月前と、同じように、動かしただけです」〜答えだけでは、証拠になりません〜

コードディスパッチャー【Audit Trail】「三ヶ月前と、同じように、動かしただけです」〜答えだけでは、証拠になりません〜

外部監査に三か月前の判定根拠を求められても、同じ入力から同じ答えは再現できない。入力・版・パラメータ・出力を紐づけて残すAudit Trailで、答えでなく道筋を残す設計を解説します。