以下メモ。嘘書いてるかもしれません。
レガシーコードとはいったい!?
あなたも書いているレガシーコード
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)
まとめ
- 「コードに手を入れることはすばらしい」
- 変更することでプログラムのコードの価値が高まっていく。
- 自分の目の前にレガシーがあると萎えてしまう。
- このコードを見捨てずに生かすことができるということを考えてほしい。