年がら年中 yak shaving [1] をやっていますが、最近のケースはなかなか様式美な感じだったのでメモ。こういうのは一度悪いループに入ってしまうとなかなか抜け出せないものですね。
1) 新しい機能を追加したのでテストを書こうと思い立つ
2) が、新しい機能以前に基本的なテストがないことに気づく
3) 基本的なテストを書こうと思い立つ
4) が、そのためには激しくリファクタリングが必要であることに気づく
5) 激しくリファクタリングしつつテストを書く
6) 完成と思いきやリリースビルドではテストがなぜか不安定であることに気づく
7) デバッグを開始するが、デバッグ用のログがリリースビルドだとなぜか表示されないことに気づく
8) ログの出力をフィルタしているところを突き止めて適当に対処する
9) 不安定の原因(タイミングの問題)を特定して修正したところで週末を迎える
10) 週が明けたのでチェックインを試みると、なぜかテストが通らなくなっている
11) 調べてみると、週末のうちに入っていた変更が原因とわかる
12) が、大きめの変更なのでどの部分が真の原因かはよくわからない
13) 真の原因(今までなかった不要なページ遷移)を突き止める
14) 適当に対処法を見つけてバグをファイルする
15) 今度こそ完成と思いきや、これまで隠れていたクラッシュをなぜか踏んでしまう
16) スレッド間のレースが原因で、小手先では直らない
17) レースを解消するために巨大なクラスのスレッドモデルを修正し始める
18) つづく...
[1] http://0xcc.net/blog/archives/000196.html