テストの無い古いコードを、どう安全に直しますか

直す前に、いまの動きをそのまま固定するテストを書き、小さな一歩ずつ変えて毎回確かめる、と答える問い。大きな部分は一度に書き直さず、新しい作りへ少しずつ置き換えていく判断まで話します。

まず 4 択で考える

2 問

答えに入れるべき考えを選びます。選ぶと、すぐに正誤と解説が出ます。そのあと下の欄で、自分の言葉で答えてみます。

  1. 問 1テストの無い古いコードを直す前に書くテストとして、正しいものはどれか

  2. 問 2整理の途中で、古いコードのおかしな動きを見つけた。扱いとして正しいものはどれか

2 問中 0 問に答えました

答えてみる

面接官に「テストの無い古いコードを、どう安全に直しますか」と聞かれたつもりで、答えを見る前に自分の言葉で、声に出して答えてみます。

解説を読む

聞かれ方から関連するコースまで、この問いの解説を全部ここに置いています。

こう聞かれます

  • 「テストの無い古いコードを、どう安全に直しますか」
  • 「誰も中身を分かっていない 2000 行の関数に、機能を足すことになりました。どう進めますか」
  • 「いっそ全部書き直したほうが早くないですか」(裏から聞く形)

面接官が見ている点

  • 直す前に、いまの動きを確かめる手段 (テスト) を先に作るか
  • 正しい動きではなく「いまの動き」を固定する、という考え方を知っているか
  • 一度に大きく変えず、小さく変えて毎回確かめる進め方ができるか
  • 全部の書き直しの危うさと、置き換えながら進める手を比べられるか

短い答え

  • 直す前に、いまの動きをそのまま固定するテストを書きます。正しいかどうかではなく、今こう動いている、を記録するテストです。
  • そのテストを守りながら、名前を変える、関数を切り出す、のような小さな一歩ずつ変え、一歩ごとにテストを回します。
  • 大きな部分は一度に書き直さず、新しい作りを横に置いて、入口から少しずつ流れを移していきます。

この問いを含む分野をレッスンで練習する

レッスンを開く

少し詳しい答え

いまの動きを固定するテスト

テストの無いコードは、何が正しい動きなのか、書いた人にしか分かりません。そこで、正しさを決めるのではなく、「この入力のとき、今はこう返る」をそのまま記録するテストを書きます。仕様を確かめるテストではなく、変えてしまったことに気づくためのテストです。

おかしな動きを見つけても、ここではまだ直しません。テストに「今はこう返る」と書き、気になる点として別に残します。直すのは、動きを変えないための作業が終わってからです。動きを変える作業と、動きを変えない作業を、同じ一歩に混ぜないのが大事です。

差し込める所を作る

古いコードは、DB や時刻、外の API を中で直接呼んでいて、テストで動かせないことがよくあります。そこで、その呼び出しだけを引数や別の関数に出し、テストのときは差し替えられるようにします。この差し込める所を作る変更は、テストが無い状態で行うので、道具の機能で名前を変える、関数を切り出す、のような機械的な変更だけにとどめます。

小さく変えて毎回確かめる

一歩ずつの変更は、1 つのコミットで 1 つのことにします。名前を変えたら回す、関数を切り出したら回す、です。テストが落ちたら、直前の一歩を戻せば済みます。

AI に直させるときも同じです。いまの動きを固定するテストを先に置き、変更は小さく区切って、テストが通ったものだけを取り込みます。

書き直すか、置き換えるか

全部を一度に書き直すと、古いコードに隠れていた例外の扱いを落とし、終わるまで何も出せません。そこで、新しい作りを横に置き、入口で機能ごとに新しい側へ流れを移していく進め方を選びます。古いほうは、使われなくなった所から消していきます。

ただし、小さくて、使う人も少なく、動きがはっきりしているなら、書き直したほうが早いこともあります。どちらにするかは、壊したときの影響の大きさと、いまの動きをどれだけ把握できているかで決めます。

話すときは、自分が触った古いコードで、どのテストを先に書き、どの順で直したかの例を 1 つ用意します。話す例は架空の例で構いません。

よくある間違い

  • テストを書かずに、読んで分かったつもりで直す気づかない所で動きが変わり、あとで別の画面が壊れます
  • 見つけたおかしな動きを、整理のついでに直す整理で壊したのか、直したせいで変わったのか、区別がつかなくなります
  • 全部を一度に書き直す古いコードの隠れた扱いを落とし、終わるまで価値を出せません

深掘りの問い

  • 「そもそもテストが書けない作りなら」 DB や時刻の呼び出しを外に出して差し込める所を作るか、画面や API の外側から入出力を記録するテストを書く、と答えます
  • 「どこから手を付けますか」これから機能を足す所、よく不具合が出る所から先に手を付け、使われていない所は後に回す、と答えます
  • 「直す時間を、どう確保しますか」機能を足す作業の中に、その周りの整理を含めて見積もる、と答えます

確認日 2026年10月30日書き手 小尾 知希 (講師)

技術面接問題の一覧へ戻る