[http://www.seshop.com/event/dev/2009/timetable/Default.asp?mode=detail&eid=124&sid=767&tr=10_Development+Style(Test)#767:title=「レガシーコード」とはいったい!? 〜あなたも書いてるかもしれないレガシーコード〜]

以下メモ。嘘書いてるかもしれません。

副題:クラウドもSaaSiPhoneもレガシーやろ!

レガシーコードとはいったい!?
あなたも書いているレガシーコード

Q. レガシーコードとは?
A. COBOLで書かれたコード → ×
A. Win NT 4.0 のコード → ×
A. あの先輩から引き継いだコード → ×

教科書「WORKING EFFECTIVELY WITH LEGACY CODE」
翔泳社から日本語訳出版決定

一般には「理解しづらい・変更しにくいコードのこと」を指すかもしれないが、この本では、テストのないコードを指す

明日あなたが書くコードもレガシーコードかもしれない

  • レガシーから逃げない
  • レガシーを作らない
  • レガシーを作り込ませない
  • Edit&Pray
    • 編集し、そして祈る
    • 不安を抱きながらコードを変更
    • うまくいったと一息つくのも束の間
    • たまに、納品後にその不安が的中
    • 原罪のソフトウェア開発の主流
  • Cover&Modify
    • カバーして、変更する
    • 変更の正しさを確かめるテストを用意
    • 作成したテストをセーフティネットとしてコードを変更
    • 変更の影響がわかるので安心
    • このセッションでこれを目指したい

きっちりしたテスト、まではいかなくても、最低限次のステップに踏み出すためのテストコードを書く

  • 本の目次に愚痴が並んでるw
  • 自分のための本では!
  • ちょっとでもいじればこわれてしまうコードをどうしたらいいか。
  • ちょっとずつでも何とかしていくしかない。
  • 何とかなっていく。
  • 捨てて作り直したい。
  • けど、稼働している。そこから逃げない。捨てずに。
  • 本の中では「リファクタリング」という用語を使ってない。
  • テストがないものはリファクタリングできない。
  • なりふりか舞わずにテストを入れていけ。
  • テストのためなら何でもする。
    • テストのためなら private でも public にしてしまえ。
    • C で書いてあるのを C++ で書き直せ。
  • 少しずつでもコードを綺麗にしていく。
  • レガシーコードに中途半端な修正を加えると、レガシーコード側の人に。
  • 書き直しても問題は解決しない。
  • 書き直してもテストがなければレガシーコード。
  • 今あるコードの中にどうやってテストを組み込んでいくか。

コミュニケーションとしてのレガシーコード

  • Developer's 川柳
  • 略すとデブセン
  • 今までは語る言葉がなかった
  • この本のおかげで共通の言葉ができる。相談できる
  • 引き継ぎ
  • 資料がいくらあっても役に立たない
  • 仕様書書くよりコードを残す
  • コードで書かれてないものは資産じゃなくて遺産(legacy)

まとめ

  • 「コードに手を入れることはすばらしい」
  • 変更することでプログラムのコードの価値が高まっていく。
  • 自分の目の前にレガシーがあると萎えてしまう。
  • このコードを見捨てずに生かすことができるということを考えてほしい。