Saturday, April 3, 2010

レガシーコード

吉岡氏のブログは常に目を通しているが、以下のブログ

http://d.hatena.ne.jp/hyoshiok/20100403

は得に目についた。僕自身も激しく共感する内容である。で、こんなのを読むとOOoのコードベースがいかにレガシーで、いかに危険でいかに未来がないかがわかる。

テストのないコードは危険である。だが多くの開発プロジェクトはテストが書かれること無く開発が進められている。中にはOOoのような大規模なプ ロジェクトもこれに含まれる。一応VCLTestToolという、OOoの機能を一通りチェックするテストは存在するが、それは「統合テスト」であって 「単体テスト」ではない。で、統合テストというのはないよりはマシであるが、それ以上でもそれ以下でもない。

テストのない大規模なプロジェクトに長年関わってると、それが当たり前になってしまい、テストを書くというくせが出来ないしテストを走らせるとい うこともしない。だから、コードを書くときもテストが書きにくいような書き方をする。OOoはそのようなコードで充満されている。救いようがない。だから 1から始める必要がある。

ちなみにそのようなレガシーコードにいざ単体テストを設置しようとしても、莫大な労力を必要とし、しかも他の開発陣がそれを意識せずテストできな いコードをどんどん増やしていくと、無駄な努力となる。なのでそのようなコードを蘇生させるには、テスト・ハーネスが設置されるまで新しいコードがチェックインされるのを全て廃止する必要がある。大抵のプロジェクトの場合はそんなのは不可能なので、フォークする必要があるという訳だ。

ちなみに、この吉岡氏が使っている本の引用をよく見ると、僕が持ってる本の一冊によーく似ている。と思ったら、実はその本の日本語訳みたいである(笑)。

ちなみに僕の持ってるのは

Working Effectively with Legacy Code, by Michael C. Feathers

http://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052

で、SlickEdit時代に買った本。OOoの開発にも恐ろしいほど当てはまる、読んでて笑えてくる(でも半分涙目)本である。