mongolyyのブログ

開発(Javascript, Typescript, React, Next.js)や開発手法(スクラム, アジャイル)、勉強したことについて色々書ければと。

テストも書かずにリファクタリングとは何事か

はじめに

知人と話していて、「レガシーコードをメンテナンスしており、リファクタリングをしているが、テストは書いていない」という話を聞いて、それは違うのではないか?と思ったので、ポエムを書こうと思います

書いていることは、大体「リファクタリング」本や「レガシーソフトウェア改善ガイド」「レガシーコード改善ガイド」に書いてあることなので、まずはこれらを読みましょう。

リファクタリングとはなにか?

外から見たときの振る舞いを変えずに、内部の構造を変えることです。

外から見たときの振る舞いを変えずに、というのを検証するためにテストが必要になってきます。

テストを書かなかった場合に、どんな問題があるか?

テストを書かなかったときの問題点①

壊していても気づかない。気づけない。

テストを書かなかったときの問題点②

良い設計になっているか検証できない。 悪い設計になっている特徴として、テスタビリティが低いというのがあると思っています。 リファクタリングしたと思ったけれど、逆リファクタリングデグレさせている可能性さえあります。

レガシーコード(テストがない)の場合の対処法

個人的には以下の選択肢があると思っています

終わりに

テストが書けないと言っている場合も、よくよく見てみるとテストをかける場合が多いと思っています。 また、こんな面倒なことにしないためにも、最初からテストを書いておきましょう。