debugging

5 posts

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

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

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

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

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

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

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

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

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

変化内容がわからない生存ミュータントを倒す方法

ミューテーションテストで生存者が見つかったが、そのミューテーションが何をしているのかまったくわからない。ミュータントを理解せずに正しいテストを書くためのステップバイステップの方法を紹介する。

あなたのミューテーションテストレポートは生存者でいっぱいで、そのうち少なくとも1つはあなたにとって意味不明だ。…