検索

Google
Web www.icefree.org

RSS of recent changes

 

リファクタリング

2017-06-20 (火) 23:23:54 (2991d)

 マーチン・ファウラー著のリファクタリングの第2,4章のノートです。これらの章にはリファクタリングとテストの概要がまとめられています。他の章にはリファクタリングの具体的な手法が挙げられています。

 「リファクタリング」を基にしていますが、一度咀嚼されたノート的なものなので、内容的に180度違うことを言っているかもしれません。それは、私の理解不足から来るものです。また、本には書いてないことが出てくることもあります。

§2.リファクタリング

リファクタリングとは

 外部インタフェース等を変えず内部構造を修正する作業

 これは、小さな修正と、まめなテストからなる。
 従来からプログラマが行っていたソースコードの整理を体系付けたもの。

利点

   ・機能追加が容易になる
   ・コードの理解が容易になる
   ・バグが見つけやすくなる
   ・開発時間の短縮につながる

 これらは、リファクタリングの以下のような性質から導かれる。

 ロジックの重複を避けること。
 変更するときに複数の箇所に及ばないようにすること。
 複雑なコードを避けること。

 そして、開発が容易になることで、結果として全体の開発時間も短縮できる。プロジェクトやソースコードを破綻させないためにも役立つ。

リファクタリングの時期

 必要性を感じたとき。
 いわゆる、「不吉な匂い」を感じたときに行う。定期的に期間を決めて行うようなものではない。

公布インタフェース

 公布インタフェースとは、第三者に公開したインタフェース。ヘッダーでパブリックで公開されているというレベルのさらに上を行く拘束力がある。

リファクタリング時には旧インタフェースを残して、新しいインタフェースを加える
 旧クラスをコピーして新しいクラスを作るようなことはしてはいけない。
・不要な公開を避ける

リファクタリングしてはいけないとき

   ・書き直したほうが早いとき
   ・締め切り間近

 そうなる前にリファクタリングする。

事前設計も無視しない

 XP信者の中には、事前設計は全くいらないと言う人もいるかもしれないが、一応事前設計もするべき。
 ウォーターフォール的に事前設計を行うというのではない。その設計が完全でなくても、後でリファクタリングで補える。

パフォーマンス

 パフォーマンスチューニングの手順

1. リファクタリング
2. プロファイリング
3. パフォーマンスチューニング

 プロファイリングを行うこと。主観的な判断は多くの場合、はずれる。
 そして必要な部分に重点を置いたチューニング。多くの場合、パフォーマンスに大きく影響するのは、一部のコードである。全体をそれぞれ局所的にチューニングしても効果は薄い。
 チューニングの準備にもなるリファクタリングリファクタリングをあらかじめしておくことによって、必要な部分の洗い出しが容易になり、さらにチューニングも楽になる。

§4.テスト

 リファクタリングは一種の破壊行為でもあるから、テストが必要である。
 「動いているものは触らない」の古典的原則もあるので、壊していないことを試すためにテストをする。それは、バグの早期発見にも繋がるし、エンバグを防ぐことにもなる。古典的原則を守っていては、そのうちに動かないものになるか、綱渡りのコードになるだろう。

 テストは原則として単体テスト。クラス毎にテストコードを入れる。そして、部分毎にまめなテスト。全体のテストも1日1回は行う。

 テストは「完全に」自動化すべし。テストが面倒だと思うようになったら続かない。

 テストコードは自分で書くのだが、完全でなくてもよい。
 怪しい部分、危険な香りのするところだけでも十分に役立つ。 (境界条件、特殊条件)
 完全なテストは非生産的だ。

 テストを容易にするフレームワーク(CppUNIT等)を活用。フレームワークを活用することで、面倒なコードを自分で書く必要もないし、テストコード自身のバグも減らせる。

 機能テストは、別チームでブラックボックステストとして行う。発見されたバグに対しては、それを見つけられる単体テストを追加すること。単体テストを追加することで、バグが直ったかの確認にも役立つし、類似のバグを見つけることにも役立つし、その後同じバグを発生させる心配も減らせる。

 テストを書くことで理解も深まる。

参考文献

リファクタリング―プログラムの体質改善テクニック Object Technology Series〈10〉

#amazon(4894712288,,image)

マーチン ファウラー (著), Martin Fowler (原著), 児玉 公信 (翻訳), 友野 晶夫 (翻訳), 平沢 章 (翻訳), 梅沢 真史 (翻訳)
価格: ¥4,800
単行本 - 423 p (2000/05/01)
ピアソン・エデュケーション ; ISBN: 4894712288 ; サイズ(cm): 24 x 19


コメント

  • hirano 2006-03-24 (金) 01:41:30
    人生リファクタリングしたいです。
  • vvp 2006-03-24 (金) 22:44:58
    外部インタフェースは変わらないので、結果は変わらないかも。リファクタリングは原則的に内部実装の改善なので、人生に置き換えると、体調を整えて健康的に生活できるようにする、ってことかも。というわけで、酒とかは控えましょう。
  • Zoey 2013-09-25 (水) 18:46:41
    Hi my family member! I wish to say that this article is awesome, nice written and come with almost all significant infos. I・d like to see more posts like this .
    Zoey http://anthroclosetchaos.blogspot.com/2011/10/bunny-bombs-away-lemon-lift-off-love.html

Counter: 2485, today: 1, yesterday: 0