CIはコードをテストしていたが、contractsは見ていなかった——だから本番でAPIが壊れた
ほとんどのCIパイプラインは構文エラーや論理バグを検出する。しかし、実際に本番を落とすAPI contractの破壊変更は見逃している。修正方法を解説する。
私のチームで本番に到達したAPIの破壊変更は、どれもCIを通過していた。すべてだ。ユニットテストはグリーンだった。統合テストスイートも合格していた。デプロイが完了し、次にSlackのメッセージが届き始めた。…
7 posts
ほとんどのCIパイプラインは構文エラーや論理バグを検出する。しかし、実際に本番を落とすAPI contractの破壊変更は見逃している。修正方法を解説する。
私のチームで本番に到達したAPIの破壊変更は、どれもCIを通過していた。すべてだ。ユニットテストはグリーンだった。統合テストスイートも合格していた。デプロイが完了し、次にSlackのメッセージが届き始めた。…
Inferを使ってCIパイプラインで形式的静的解析を実行する方法。動作する設定と現実的なトレードオフを紹介する。
抽象解釈は、エンジニアがタブを閉じてしまうような言葉だ。束理論を一学期学ばなければ理解できないようなものに聞こえる。ほとんどの開発者は、それが研究論文の世界のもので、プルリクエストの世界のものではないと思い込んでいる。…
Literate programming は単一事実情報源を約束するが、手動の weave と tangle のステップが CI/CD パイプラインを破壊する。Markdown ファイルを正規のものに保つため、抽出とドキュメント生成を自動化する方法を紹介する。
ビルドパイプラインが、ターミナルを開いて と打たなければ実行できないなら、あなたはリテラート・プログラムを持っていない。コンパイラの付いた日記を持っているだけだ。 リテラート・プログラミングの全目的は、散文とコードが単一事実情報源を共有することにある。Markdown…
多くのチームはアーキテクチャルールをWikiに記載している。依存グラフが逸脱した時にCIを失敗させる実行可能なテストとして書く方法を紹介する。
テストスイートは、が正しい入力を与えられたときに42を返すことを検証する。しかし、がをimportしてよいかどうかは検証しない。コンパイラはどちらも問題ない。ユニットテストもどちらも問題ない。だが、一方はアーキテクチャ違反であり、6か月後に1週間のリファクタリングを強いることになる。…
クリーンアーキテクチャの図はホワイトボード上では美しい。ここでは、ビルドパイプラインが依存方向を強制し、ドメインコードがインフラストラクチャに到達できないようにする方法を紹介する。
チームの誰かがにをimportした。PRはコンパイルを通る。テストも通る。コードレビューは300行に及び、誰も気づかない。…
ほとんどのチームはすべてのコミットでフルのミューテーションテストスイートを実行していない。ここでは、ビルドパイプラインを破壊することなく、エンジニアリングチームが実際にミューテーションテストをCIに統合する方法を紹介する。
ミューテーションテストスイートの実行に4時間かかるなら、おめでとう。誰もが疑っていたことを証明したことになる:テストスイートに穴が空いている。…
人間のレビューは一貫性がない。AIレビューはさらに悪い。AI生成codebaseに対するスケーラブルな唯一の防御は決定的enforcement — 無視される提案ではなく、ビルドを失敗させるルールだ。
AI生成コードに対する標準的なアドバイスは「注意深くレビューせよ」だ。 このアドバイスは正しいが、スケールにおいては無意味だ。 AI出力をレビューする開発者は、注意力があり、ドメインに精通し、時間的プレッシャーがないときに問題を発見する。それ以外のすべての条件 — つまり大半の条件 — では、見落としが発生する。…