【13-E-4】 「レガシーコード」とはいったい!? ~あなたも書いてるかもしれないレガシーコード~ | 川西俊之 氏/ 大中浩行 氏/ 中谷秀洋 氏/ 高橋邦彦 氏

高橋さん・・・ディノという会社でWebアプリを作っている。 大中さん・・・通称せとあずさ。Working Effectively With Legacy Code読書会 会長、S2コミッタ。 中谷さん・・・サイボウズラボでiVocaとか。 川西さん・・・C、C++で開発。C言語用CSpec(そんなのあるんだ)等

レガシーコードとは?

  • COBOLで書かれたコード→×
  • WinNT4.0→×
  • あの先輩から引き継いだコード→×
  • 理解しづらい・変更しにくいコード。ではない。
  • ずばり、テストのないコード、を指す
    • コードでテストができないもの。

どうしたらよいのか?ということを考える

  • レガシーから逃げない
  • レガシーを作らない
  • レガシーを作り込ませない

用語

  • Edit&Pray
    • 編集して祈る。頼むから動いてくれ。
    • 現在の開発の主流(自分もそうです。。)
  • Cover&Modify
    • カバーして変更する
    • 変更の正しさを確かめるテストを用意

実践レガシーコード

  • コンストラクタが5個とかあるコードはどうやってテストする?
    • とりあえず、全部null渡してテストしてみる→いらないやつがいるはず。。
  • privateなプロパティの扱い方
    • テストのためならリフレクションもいとわない。(自分も昔そうしてました)
  • サーブレットコンテキストが業務クラスで呼ばれてる
    • 本番のコードに手を入れちゃう?→やりすぎ
    • JUnitからでもサーブレットコンテキストにつっこむ → シングルトンのオブジェクトに静的setter(ちょっと良く分からなかった)
  • CharactariseTest(?)
    • テストを通すより今あるコードの振る舞いをテストを通して追いかける。

本(Working Effectively With Legacy Code)について

  • 目次にグチが並んでる
    • 構造がないとか。クラスが大きすぎるとか。
    • 読み進めていくと、解決の糸口になるような。
    • 逃げないで。捨てずにそこからなんとかしよう。
    • テストがないものをリファクタリングとは呼ばない。
    • 本の中ではリファクタリングという言葉が出てこない
    • 負のスパイラルを自分が断ち切る。
      • 自分が作りなおしてもテストコードがなければ、それはレガシーだ。

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

  • 言葉で説明されてもよくわからない
  • コードをコードで説明してやればいい。テストコード。

他にも川柳とか、とても楽しいセッションでした。 読書会楽しそう。

というか↓ほじぃ。。 

Working Effectively With Legacy Code
Michael C. Feathers
Prentice Hall
売り上げランキング: 11427
おすすめ度の平均: 5.0
5 設計が悪いシステムの保守でお悩みの方へ