こう 聞かれます
- 「テストの
無い 古い コードを、 どう 安全に 直しますか」 - 「誰も
中身を 分かっていない 2000 行の 関数に、 機能を 足すことになりました。 どう 進めますか」 - 「いっそ全部書き直した
ほうが 早くないですか」 (裏から聞く形)
面接官が 見ている点
- 直す前に、
いまの 動きを 確かめる 手段 (テスト) を 先に作るか - 正しい
動きではなく 「いまの動き」を 固定する、という 考え方を 知っているか - 一度に
大きく 変えず、 小さく 変えて 毎回確かめる 進め方ができるか - 全部の
書き直しの 危うさと、 置き換えながら 進める 手を 比べられるか
短い答え
- 直す前に、
いまの 動きを そのまま 固定する テストを 書きます。 正しいか どうかではなく、 今こう 動いている、を 記録する テストです。 - その
テストを 守りながら、 名前を 変える、 関数を 切り出す、のような 小さな 一歩ずつ 変え、 一歩ごとに テストを 回します。 - 大きな
部分は 一度に 書き直さず、 新しい 作りを 横に 置いて、 入口から 少しずつ 流れを 移していきます。
この
少し 詳しい答え
いまの 動きを 固定するテスト
テストの
おかしな
差し込める所を作る
古い
小さく 変えて 毎回確かめる
一歩ずつの
AI に
書き直すか、 置き換えるか
全部を
ただし、
話すときは、
よく ある間違い
- テストを
書かずに、 読んで 分かった つもりで直す気づかない所で 動きが 変わり、 あとで 別の 画面が壊れます - 見つけた
おかしな 動きを、 整理の ついでに直す整理で 壊したのか、 直したせいで 変わったのか、 区別が つかなくなります - 全部を
一度に書き直す古い コードの 隠れた 扱いを 落とし、 終わるまで 価値を 出せません
深掘りの問い
- 「そも
そも テストが 書けない 作りなら」 DB や 時刻の 呼び出しを 外に 出して 差し込める 所を 作るか、 画面や API の 外側から 入出力を 記録する テストを 書く、と答えます - 「どこから
手を 付けますか」 これから 機能を 足す所、 よく 不具合が 出る 所から 先に 手を 付け、 使われていない所は 後に 回す、と答えます - 「直す
時間を、 どう 確保しますか」 機能を 足す作業の 中に、 その 周りの 整理を 含めて 見積もる、と答えます
