エンターテイメント!!

遊戯王好きのJavaエンジニアのブログ。バーニングソウルを会得する特訓中。

【意訳+要約】リファクタリングをする際にソースコードの設計からはじめてはいけない

※本記事は、Bardによる意訳+翻訳を活用し、レイアウト調整したものです。
※感想は、オリジナルです。

原文

リファクタリングをする際にソースコードの設計からはじめてはいけない - MonotaRO Tech Blog

意訳+要約

リファクタリングをする際にソースコードの設計からはじめてはいけない

リファクタリングとは、ソフトウェアの品質を向上させるために、ソースコードの構造や内容を変更することである。リファクタリングは、ソフトウェアの保守性を向上させ、新機能の追加を容易にする効果がある。

しかし、リファクタリングをする際には、ソースコードの設計からはじめてはいけない。設計からはじめると、リファクタリングの目的を見失い、かえって品質を低下させてしまう可能性がある。

リファクタリングの目的

リファクタリングの目的は、ソフトウェアの品質を向上させることである。品質の向上とは、次のようなものである。

  • 保守性:ソフトウェアの修正や拡張が容易になる
  • 拡張性:新機能の追加や変更が容易になる
  • 理解しやすさ:ソースコードを理解しやすくなる
  • パフォーマンス:ソフトウェアのパフォーマンスが向上する

設計からはじめると失敗する

設計からはじめると、リファクタリングの目的を見失い、かえって品質を低下させてしまう可能性がある。その理由は、次のようなものである。

  • 設計は、ソフトウェアの全体像を把握した上で行う必要がある。しかし、リファクタリングの段階では、全体像がまだ明らかになっていない場合がある。
  • 設計は、将来の拡張性やパフォーマンスを考慮して行う必要がある。しかし、リファクタリングの段階では、将来の拡張性やパフォーマンスがまだ明らかになっていない場合がある。

リファクタリングの進め方

リファクタリングは、次の手順で進めるとよい。

  1. リファクタリングの目的を明確にする
  2. リファクタリングの対象を特定する
  3. リファクタリングを行う
  4. テストを行う

リファクタリングの目的は、前述した品質の向上につながるものである。リファクタリングの対象は、品質を向上させるために必要な部分である。リファクタリングを行う際には、テストを実施して、品質が向上していることを確認する。

結論

リファクタリングをする際には、設計からはじめてはいけない。設計からはじめると、リファクタリングの目的を見失い、かえって品質を低下させてしまう可能性がある。リファクタリングは、品質を向上させることを目的として、目的を明確にして、対象を特定して、テストを実施しながら行うことが重要である。

重要な部分

Bardさんに聞いてみた

Q:リファクタリングするためのテクニックについて教えてください

リファクタリングとは、ソフトウェアの品質を向上させるために、ソースコードの構造や内容を変更することです。リファクタリングは、ソフトウェアの保守性を向上させ、新機能の追加を容易にする効果があります。

リファクタリングを行うためには、いくつかのテクニックを身につける必要があります。ここでは、重要なリファクタリングのテクニックをいくつか紹介します。

純化

純化とは、コードをよりシンプルにすることです。コードを単純化することで、コードの理解しやすさや保守性が向上します。
純化を行うには、次のようなものがあります。
- 重複したコードを削除する - 不要な変数やメソッドを削除する - コードを整理して、読みやすくする

抽象化

抽象化とは、コードの共通部分を抽出することです。コードを抽象化することで、コードの再利用性が向上します。
抽象化を行うには、次のようなものがあります。
- 関数やメソッドを抽出する - クラスやインターフェースを抽出する

名前付け

名前付けは、コードの可読性を向上させるために重要です。コードの意味を正確に伝える名前を付けることで、コードの理解しやすさが向上します。

名前付けを行うには、次のようなものがあります。

  • 変数やメソッドの名前を、その役割や意味を示すものにする
  • クラスやインターフェースの名前を、その役割や意味を示すものにする

テスト

テストは、リファクタリングを行う上で重要な役割を果たします。リファクタリングを行う前に、テストを実施することで、リファクタリングによってコードが壊れていないことを確認することができます。

テストを行うには、次のようなものがあります。

リファクタリングは、ソフトウェアの品質を向上させるための重要な技術です。上記のテクニックを身につけて、効果的なリファクタリングを実施しましょう。

具体的なリファクタリングの手法としては、Martin Fowler氏の著書「リファクタリング―プログラムの体質改善テクニック」に、179の具体的なリファクタリング手法が紹介されています。この本を参考にしながら、リファクタリングのスキルを磨いていきましょう。

Q:179種類のテクニックを覚えるのは無理ゲーでは?

179種類のテクニックをすべて覚えることは、確かに難しいかもしれません。しかし、すべてのテクニックを覚える必要はありません。

リファクタリングの目的は、ソフトウェアの品質を向上させることです。そのため、品質を向上させるために必要なテクニックを覚えれば十分です。

具体的には、次のようなものが挙げられます。

  • 重複したコードを削除する
  • 不要な変数やメソッドを削除する
  • コードを整理して、読みやすくする
  • 関数やメソッドを抽出する
  • クラスやインターフェースを抽出する
  • 変数やメソッドの名前を、その役割や意味を示すものにする
  • クラスやインターフェースの名前を、その役割や意味を示すものにする

これらのテクニックは、リファクタリングの基本的なテクニックであり、多くの場合で効果を発揮します。

また、リファクタリングは、経験を積むことでスキルが向上します。そのため、まずは基本的なテクニックを身につけて、経験を積んでいきましょう。

具体的なリファクタリングのテクニックを学ぶには、以下のようなものがあります。

リファクタリングは、ソフトウェアの品質を向上させるために重要な技術です。ぜひ、リファクタリングのスキルを身につけて、ソフトウェアの品質を向上させましょう。

Q:リファクタリングのサイクルを高速・効率化する手法やアイディアはありますか?

リファクタリングのサイクルを高速・効率化する手法やアイディアとしては、以下のようなものが挙げられます。

具体的な手法としては、以下のようなものが挙げられます。

これらの手法やアイディアを参考にして、リファクタリングのサイクルを高速・効率化しましょう。

Q:自動化ツールとは、具体的に何のことですか?

自動化ツールとは、人間の代わりにタスクを自動的に実行するソフトウェアです。リファクタリングの自動化ツールは、リファクタリングを行うための作業を自動化することで、リファクタリングの効率化を図ることができます。

リファクタリングの自動化ツールには、以下のようなものがあります。

リファクタリングの自動化ツールを活用することで、以下のメリットを得ることができます。

リファクタリングの自動化ツールは、リファクタリングを効率化するために有効なツールです。リファクタリングの自動化ツールを活用して、リファクタリングのサイクルを高速・効率化しましょう。

感想+雑記

要するに目的を見失うなってことだな。
設計段階からリファクタリングする前提で設計しないからな。
リファクタリングとセットとして説明されるのか、テストの自動化だな。
逆に、テストできないところは、リファクタリングしてはいけないな。理由は、動作担保ができないリファクタリングは、怖いから。
何度、泣かされたことか。。。
テストできないところはリファクタリングすべきではないと釘をさされたのは、想定通り。

なぜ、リファクタリングするのかを明確にすることも大切ではないのかと思った。

リファクタリング手法は、経験を積まないと、リファクタリングするべきかどうかで悩む。
経験も、ただ積むだけではダメ。かならず、日々の振り返りをして、悪かった点がなんなのか考える習慣がついてないと、リファクタリング能力は向上しないと思う。
あとは、障害管理一覧を、見通すことだな。
何が原因で仕様を満たせてないのか確認できるから。
意外と、他人の障害からでも学べることはあるので、システムエンジニアプログラマーは、学ぶ姿勢を常に維持しなきゃいけないと思う。あと、圧倒的当事者意識もね。
あと、最初から完璧なものを作ろうとするマインドセットは、捨てるべきだと思う。
最初から完璧なものができるなら、それに越したことはないけど、それはかなり面倒だし、それを理由に工数をかけすぎるのは、目的を見失っている。
これに陥りやすいひとは、既存のものづくりに執着している人に多い気がする。
建築とか、もろそう。ソフトウェアにはテストするという手法があるから、なんでもかんでも建築の手法を取り入れればいいというものではない。たしか、前に読んだ本ですごく納得したのを今でも覚えてる。何の本だったかは忘れたが。