【初心者からの脱却】100%失敗しない不具合対応をしよう

あしたのチームでエンジニアをやっています。KECです。
エンジニアならば誰もが不具合対応を経験したことがあるかと思います。

複雑なコードであればあるほど、不安がよぎります。
デグレが発生していないか」
「ミスしていないか」
この記事では上記のような不安を解消する不具合対応の手順を紹介したいと思います。

焦ることで2次災害を呼ぶ

(不具合の内容が共有される)
うわーこの不具合、前に自分が対応したあれが原因かなぁ・・・
早くなおさないとまずいなぁ・・・

・・・よし対応できた!いちかばちか本番リリースや!

・・・500エラー ^o^

発生させてしまった不具合により罪悪感に苛まれ、焦った状態で対応してより被害を出してしまう。
まさに地獄絵図です。

たったの5秒で改善!焦りをなくす方法

そもそも焦りはどうして発生してしまうのでしょうか?
この焦りや不安、緊張などは一般的にストレスと呼ばれています。 人はストレスを感じると自律神経の交感神経が刺激されます。

ではこのストレスを和らげるにはどうしたらいいかというと、この交感神経を和らげてあげる。
その手段として有効なのが「深呼吸」です。
ここでのポイントは大きく息を吐くこと、吐く時間を長くするとより効果的なようです。

私も緊急的なタスクほど深呼吸を実践していて、気持ちが楽になるといった実感があります。
では本題の不具合対応に戻りましょう。

不具合対応でやるべき6つのステップ

  1. 不具合が再現する手順を調査する
    再現手順がわからないと修正できたかどうかの確認やデバッガなどを使った調査が難しいです。
    まずは「このボタンを押すとエラーになる時がある」のように曖昧でも再現手順を特定するのが良いでしょう。

  2. 不具合が発生する条件のテストを追加する
    ここで大事なポイントは必ずテストが失敗したことを確認すること。
    不具合を修正できた!と思っていたが、実は修正されていなかったことを防いでいます。
    将来的にデグレが発生したとしても、テストで気づけることが可能になるでしょう。
    そもそもテストがなかったり、テストを追加するのにリファクタリングが必要な場合は適宜行なってください。

  3. コミットを遡り、不足していたテストを考える
    修正するべきコードを見つけたら、そのコードがいつ追加されたのか、そのコミットのテストでは何を確認していたのかを調べます。
    今回発生した不具合以外でも起こり得そうなバグがないか考えましょう。

  4. 横展開をする
    横展開とは、同じ原因で不具合が発生する可能性がないか確認することを指します。
    これで不具合を見つけるケースが非常に多いので、大事な作業と言えます。

  5. コードを修正する
    ここまでの手順を経てようやくコードを修正します。
    ここで必ずテストが成功することを確認しましょう。

  6. 不具合が発生しても検知できる仕組みを作る(必要に応じて)
    今後追加されるコードに関しても検知ができたら、同じバグは2度と発生しないと言えます。

まとめ

不具合対応はいかに同じミスを繰り返さないかが大事だと思っています。
6つのステップを踏んで、過ちを繰り返さない不具合対応ができるようになりましょう!

あしたのチームではスマートな不具合対応ができるエンジニアを募集しています!