kenju's blog

About Programming, Mathematics, Security and Blockchain

書評『レガシーソフトウェア改善ガイド』を読んで

レガシーソフトウェア改善ガイド

レガシーソフトウェア改善ガイド

なお、書籍名が似ている書籍として、レガシーコード改善ガイド (Object Oriented SELECTION)も存在する。こちらは少し内容が古いが、今でも使える内容が多いとのこと。

この本を読む中で「調査的リファクタリング」という概念を学んだ。この記事では、「調査的リファクタリング」を中心にまとめている。

「調査的リファクタリング(exploratory refactoring)」とは

  • 『レガシーソフトウェア改善ガイド』で紹介されている、リファクタリングの一手法
  • 『レガシーコード改善ガイド』における「試行リファクタリング(scratch refactoring)」と同義らしい
  • 「未知への恐れ(コードをいじるたびに全然関係ない箇所が壊れ、修正したくないと感じる)」を克服するための方法
    • とにかく思いつく限り、コードをクリーンで読みやすい状態にすること
      • メソッドの名前を変えたり、新しいインターフェースを導入したり、コメントを加えたり。なんでも

調査的リファクタリングの利点

  1. コードに対する理解を深める(最も重要)
  2. コードが読みやすいものとなる
    • このような改善は累積するものなので、調査的リファクタリングを定期的に行う習慣があればコードがだんだん扱いやすいものになる

なので、自分がリファクタリングする過程で理解を深めるのは良いとして、そのリファクタリングが「読みやすくなっている」というコンセンサスを、レビューを通じてチームメンバーから得られるようなリファクタリングでないと意味がない(これは調査的リファクタリングに限らず当然のことだが、改めて言語化した)。

また、リファクタリングを通じて理解を深めたのはリファクタリングの主体者のみなので、

  • 調査的リファクタリングに参加する開発者を増やす
  • 調査的リファクタリングを通じて得た知識をシェアする

ことが推奨されている。なので、新しい発見があればどんどんシェアしていきたい。

雑感

調査的リファクタリングをするときの身近な援助として

  • バージョン管理システム
  • 統合開発環境
  • 開発の仲間
  • コンパイラ

があげられており、「コンパイラ」の欄では

  • Javaなどの静的にコンパイルされる言語は、コンパイルエラーによってリファクタリングが誤っていないか検知できる
  • コンパイラがない動的言語の場合、テストを使ってコンパイラから得られないサポートを受けている

と記述されていた。