additional-strategies

5 posts

mainブランチが壊れた。探すべきコミットは200個ある

git bisectは手動のコミット探索を自動化された二分探索に変える。すべてをチェックアウトすることなく、バグを導入した正確なコミットを見つける方法を解説する。

mainのCIは赤いが、昨日はグリーンだった。その間のどこかでバグが忍び込んだ。200個のコミットをスクロールしてdiffを読み、推測することもできる。Slackで聞いて、誰かが関連コードに触れたことを覚えていることを祈ることもできる。あるいは、Gitに仕事を任せることもできる。…

エラートラッカーはどこで死んだか知っている。再現には役立たない

スタックトレースはクラッシュの発生場所を示すが、原因ではない。ここでは、本番のクラッシュを実際にデバッグ可能なローカルテストケースに変える、キャプチャ&リプレイのパターンを解説する。

本番がどこでクラッシュしたかは正確にわかっている。スタックトレースは の147行目を指している。例外は に対する だ。コードを引っ張り出してテストを実行すれば、すべて合格する。サンプルペイロードでエンドポイントを手動で叩いても、問題なく動く。 バグは本物だ。顧客が遭遇している。自分のマシンでは再現できない。…

テストカバレッジ94%でも見逃した整数オーバーフローを、symbolic executionが発見した

ユニットテストは特定の入力をチェックする。symbolic executionはあらゆる可能な入力をチェックする。仕組み、コスト、始め方を解説する。

テストスイートのカバレッジは94%で、失敗はゼロだ。symbolic executionエンジンは3秒未満でコードのクラッシュを発見する。 テストは壊れていない。カバレッジメトリックが嘘をついているわけでもない。問題は、テストが特定の地点での振る舞いを検証するのに対し、symbolic…

ログからPIIが漏れている。grepでは救えない

ほとんどのチームは顧客からの苦情の後にPII漏洩を発見する。ここでは、機密データを取り込みから出力まで追跡し、今日から使えるコード例を紹介する。

ほとんどのチームは、顧客からの苦情やコンプライアンス監査の後にPII漏洩を発見する。その時点で、データはすでにETLパイプラインを横断し、アプリケーションログに着地し、3つの異なるオブザーバビリティツールにインデックスされている。…

CIはコードをテストしていたが、contractsは見ていなかった——だから本番でAPIが壊れた

ほとんどのCIパイプラインは構文エラーや論理バグを検出する。しかし、実際に本番を落とすAPI contractの破壊変更は見逃している。修正方法を解説する。

私のチームで本番に到達したAPIの破壊変更は、どれもCIを通過していた。すべてだ。ユニットテストはグリーンだった。統合テストスイートも合格していた。デプロイが完了し、次にSlackのメッセージが届き始めた。…