アイデアとインサイト

AI ファースト開発、コーディングガードレール、使い捨て前提のアーキテクチャを探求します。

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のメッセージが届き始めた。…

クラッシュの相関は嘘をつく。真のバグを指させる方法はこちら

statistical debuggingはクラッシュと相関するpredicatesを見つけるが、相関はファイル名と行番号ではない。相関スコアから実際のバグの場所へと導くランキング、フィルタリング、トライアングレーションの方法を解説する。

statistical debuggingは、根本原因ではなくソートされたpredicatesのリストを与える。すべての分岐とnull…

SentryのSeerはtraceを読める。だからといつも根本原因を見つけるわけではない

Seerはtrace tree、関連付けられたエラー、プロファイリングデータを取り込んで分散問題を診断する。実際にどう機能するか、どこで輝き、どこでまだ人間の助けを必要とするかを解説する。

フロントエンドが500エラーを投げる。stack traceはReactコンポーネントを指す。本当の問題は3つ先のサービスにあり、リークしているバックグラウンドジョブによって使い果たされたデータベース接続プールにある。 trace…

テストはパスした。だがデータはまだ間違っている

statistical debuggingは本番データを信号として扱い、バグをその異常として捉える。unit testを1つも追加せずに、データの破損、オフバイワンエラー、静かな失敗を見つける方法を解説する。

テストスイートはグリーンだ。ログは静かだ。ダッシュボードに赤い線はない。それでも、ユーザーの3%がマイナスの合計金額の請求書を受け取っているかもしれないし、推薦モデルが削除された製品を静かに先頭にランキングしているかもしれないし、集計パイプラインが特定のタイムゾーンからの返金を二重にカウントしているかもしれない。…

Metamorphic testingがGCCとLLVMで147件のコンパイラバグ、自動運転車の重大欠陥を発見した。その仕組みを解説する

Metamorphic testingはGCC、LLVM、Vulkanシェーダコンパイラ、ADASシミュレータで実際のバグを発見してきた。この記事では、その手法を実行可能なコードとともに解説し、あなたのテストスイートのどこに位置づけるべきかを示す。

Metamorphic testingはGCCとLLVMで147件の確認済みバグ、自動車OEMが使用する商用ADASシミュレータの欠陥、そして歩行者を轢き殺す8日前に自動運転車の認識システムにおいて致命的な欠陥を発見した。この手法は学術的に聞こえるが、バグは学術的ではない。 問題はoracle…