LoginSignup
34
60

More than 5 years have passed since last update.

リファクタリングを進めていく

Last updated at Posted at 2017-01-23

リファクタリングを進めていく。
十分な単体テストをしてリファクタリングしていかなくてはならない。

自分ならもっと上手に書けるのにという場合でも、今あるコードを壊さないことが大事。

「橋を燃やすな原則」

単体テストしやすいライブラリは、外部仕様の設計が大切です。よい外部仕様を作成することは、手離れのよいライブラリになって、自分の作業を減らしていくことにつながります。

手離れのいい外部仕様を作成しよう

ヘッダファイルは、外部への約束です。ですから約束する(記述する)内容は最小限にします。そして約束の内容がテキストファイルとして人が読んでわかるものにします。ですからDoxygenのdocumentation コメントは .cppファイルではなく、ヘッダファイルに記載します。

ヘッダファイルの記述は最小限に

一連のモジュールの設計が妥当かどうかをチェックするには、ヘッダファイルの依存関係を確認することです。ヘッダファイルが名前空間やディレクトリ構造を持っている場合には、それらの依存関係も見てみます。それらが交互に依存している場合には、設計が何か変である可能性が高いと思われます。Doxygenを使いながら設計と実装の妥当性を検証していきましょう。

Doxygenでヘッダファイルの依存関係を確認しよう

開発をすすめていく中では、その仕様が開発のしやすいものになっているかが重要です。開発の経験が少ないマネジャーの場合には、開発のしにくい仕様を作成してしまう場合があります。そのような判断間違いをしやすい事例をいくつか示し、どういう理由で間違いと考えるのかを述べています。

開発のしやすさを重視した仕様を作成しよう

モジュールの関数を作成する場合には、「関数が多ければ便利でいい」というわけではないことを単一責務の原理にしたがって、次のようにまとめました。

単一責務の原理(Single Responsibility Principle)を守るとバグに苦しむことが減る

次の3つの記事は、いずれもよいデータ構造を使うことで、コードは簡潔になり、データ構造の操作(例:データ追加、データの検索)とロジックのコードが区別しやすくなることの利点を指摘していて、STLなどの標準的なデータ構造を積極的に活用すべきと主張しています。

データ構造の操作とロジックのコードは区別しよう。
よいデータ構造でコードを簡潔にする
std::map型を使って見通しのよいコーディングをしよう

次の記事はmap型を使えば、switch文を使う必要はなくなり、一連の記述の可読性が大幅に向上し、分岐が増えたときでも保守しやすいことを述べています。

私はswitch文が嫌い

モジュールの設計がどこかしら変で、再利用性をそこなっている例の1つとしてextern があります。
そのextern を削除する設計の変更方法を示しました。

extern をC++のライブラリから取り除く

問題のあるソースコードの1つは、マクロ定数の多すぎるヘッダファイルです。その引き起こす問題と対策とを示しました。

マクロ定数が多すぎる。
マクロ定数が多すぎるへの対策

さらに、リファクタリングをしていくためのコツを以下に示します。変数のスコープを少しでも狭めることは、ソースコードの理解をしやすいものにすることだと主張しています。

変数のスコープを少しでも狭める

不幸にして長すぎる関数を読んで保守する必要を生じたときのヒントを示しました。

長すぎる関数を短くするヒント
深すぎるif文for文の入れ子を書き換える

これらの記事が、あなたの関わっている開発でのリファクタリングをしやすくするものであれば幸いです。


執筆後1年以上経過しての付記

自動ビルド・自動テストを活用すること。

継続的インテグレーション(デリバリー)サービスを利用しないという罪悪

リファクタリングに適したエディタ・統合環境を使おう

名前大事:適切な名前をつけることで、ドキュメンテーションコメントさえ不要にすること。

最新の文法が用意している機能を使って、間違いが入りにくいコーディングを進めること。

34
60
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
34
60