Gherkin仕様があなたに嘘をついている
Gherkin仕様は、人間に手動更新を任せた瞬間から乖離し始める。featureファイルを正直に保つための自動検証の方法を紹介する。
あなたのGherkin仕様は、あなたに嘘をついている。 故意ではない。最初は忠実だった。しかし6スプリント後、誰かがチェックアウトフローをリファクタリングし、 ステップの更新を忘れた。…
AI ファースト開発、コーディングガードレール、使い捨て前提のアーキテクチャを探求します。
Gherkin仕様は、人間に手動更新を任せた瞬間から乖離し始める。featureファイルを正直に保つための自動検証の方法を紹介する。
あなたのGherkin仕様は、あなたに嘘をついている。 故意ではない。最初は忠実だった。しかし6スプリント後、誰かがチェックアウトフローをリファクタリングし、 ステップの更新を忘れた。…
多くのチームはアーキテクチャルールをWikiに記載している。依存グラフが逸脱した時にCIを失敗させる実行可能なテストとして書く方法を紹介する。
テストスイートは、が正しい入力を与えられたときに42を返すことを検証する。しかし、がをimportしてよいかどうかは検証しない。コンパイラはどちらも問題ない。ユニットテストもどちらも問題ない。だが、一方はアーキテクチャ違反であり、6か月後に1週間のリファクタリングを強いることになる。…
クリーンアーキテクチャの図はホワイトボード上では美しい。ここでは、ビルドパイプラインが依存方向を強制し、ドメインコードがインフラストラクチャに到達できないようにする方法を紹介する。
チームの誰かがにをimportした。PRはコンパイルを通る。テストも通る。コードレビューは300行に及び、誰も気づかない。…
アーキテクチャ資料は、保存した瞬間から陳腐化する。コード生成ダイアグラム、ADR、自動化されたアーキテクチャテストを使って、資料を正直な状態に保つ方法を解説する。
私がWikiで見たアーキテクチャ図は、すべて間違っていた。劇的に間違っているわけではない。静かに、徐々に間違っているのだ。「Auth」と書かれたサービスは半年前に3つのマイクロサービスに分割された。「sync…
タイムアウトやクラッシュは、APIリクエストが消失したことを意味しない。idempotency keyがどうやってリトライを安全にするか、そして実際に重複を防ぐストレージパターンについて解説する。
あなたのサービスが リクエストの途中でクラッシュした。クライアントはタイムアウトを検知してリトライする。結果として2件の課金が発生する。顧客は怒っている。データベースは整合性を保っている。だがビジネスロジックは保っていない。…
インメモリのミューテックスはサーバー再起動時に消滅する。フェンシングトークンとTTLを持つ分散リースが、クラッシュを跨いだ重複作業をどう防ぐか、そしてどこで破綻するかを解説する。
はを生き延びない。OOM、デプロイのロールアウト、ノードのリブートも同様だ。プロセスが終了した瞬間、ロックは消える。そのロックがスケジュールされたジョブ、データ移行、リーダー選出を守っていたなら、今や2つのプロセスが自分だけが動いていると確信している状況になっている。…
ほとんどのサーキットブレーカーライブラリは、復旧を検知するためにバックグラウンドスレッドを起動する。それは不要だ。ここでは、正確性を損なうことなくすべてのバックグラウンドオーバーヘッドを排除する、リクエスト駆動型の設計を紹介する。
私がレビューしたすべての本番環境のサーキットブレーカーは、最終的にバックグラウンドスレッドを起動する。それはGoのゴルーチンかもしれないし、Javaのかもしれないし、Rustのtokioタスクかもしれない。仕事はいつも同じだ:数秒ごとに目を覚まし、ダウンストリームサービスが復旧したかどうかを確認し、OPENからCLOS…
クラッシュオンリーソフトウェアは、あらゆる障害をクラッシュとして扱い、あらゆる起動をリカバリーとして扱う。Webサービスにとってこれは、シャットダウンロジックを削除し、kill -9でも生き残る状態を設計することを意味する。
あなたのWebサービスにはシャットダウンハンドラがある。バッファをフラッシュし、コネクションを閉じ、チェックポイントを書き出す。一度くらいはテストしたかもしれない。本番では、計画的なデプロイのときに年に一度動く程度だ。残りの時間、サービスはOOMキル、ノードの追放、停電、あるいはタイムアウトしてSIGKILLを受けるデ…
ミューテーションテストで生存者が見つかったが、そのミューテーションが何をしているのかまったくわからない。ミュータントを理解せずに正しいテストを書くためのステップバイステップの方法を紹介する。
あなたのミューテーションテストレポートは生存者でいっぱいで、そのうち少なくとも1つはあなたにとって意味不明だ。…
コードベース全体に単一のmutation scoreを課すのが間違いである理由と、実際のリスクに応じたモジュールごとのthresholdの設定方法。
コードベース全体に単一のmutation scoreを課すのは、チームにテストを嫌わせる最も効率的な方法だ。…