Open2

アート・リファクタリング

kenpa55511kenpa55511

VUCA(ブーカ)という言葉で表現されることも多くなりましたが、今は変化が激しく、様々なことが予測困難な時代です。そのような時代のシステム開発が、開発の開始からリリースまでに、長い時間と多くのお金を掛けるウォーターフォールではなく、必要最低限の機能のみを短時間でリリースし、ユーザの反応やその時の状況を踏まえて機能の追加/改善を行うアジャイルに変わったのは、当然の流れだと思います。

アジャイル開発では、その時点で想定される目指すべきシステムのイメージを元に、アーキテクチャー等の基本的な設計のみを行った上で、個別の機能を実現する際に詳細な設計及び実装を行うことになります。
事前に想定していなかった機能を追加することもあるため、ある時点では良いと思われた設計/実装が、将来良くない状態となることもあり、設計/実装も常に見直す必要があります。つまり、常にリファクタリングを行うことになり、エンジニアにはそのスキルが求められます。

ここでは、コードを、単に「良い」と思われる状態を超えて、「美しい」と思われる状態に保つためのリファクタリングを「アート・リファクタリング」と定義し、それを実現するためのマインドセットやスキルについてまとめていきたいと思います。

kenpa55511kenpa55511

まず、リファクタリングを積極的に行うための前提として、各機能を実装する際には、自動テストも合わせて整備しておく必要がある。
システムとしての品質を保証するためではなく、エンジニアとして、実現した機能が正しく動作し続けることを保証するために。

したがって、各レベルの自動テストを、無条件に全て作成するようなことをする必要はない。
具体的に言えば、関数レベルの自動テストであれば、複雑なロジックを含んだ特定の関数のみを対象に作成すればよいが、システムレベルの自動テストであれば、基本的には全ての機能を網羅すべきである。
また、システムの複雑さに応じて、コンポーネントテストのような結合レベルの自動テストも作成することを検討すべきである。