プログラマーだけど、いつも自分が実装するプログラムはバグが多くて修正が大変だ。動作確認はしているつもりなんだけどなぁ。バグを減らすにはどうすればいいの?
こんなお悩みにお答えします。
この記事で解説する「バグが多いプログラマーの特徴と解決策」を読めば、バグを減らす方法を知ることができ、余計な工数の増加を防げるようになりますよ。
実際に僕は現役のフリーランスエンジニアで、これまでバグが多いプログラマーと少ないプログラマーをたくさんみてきました。
自分自身の体験も含め、どのような実装をすればバグを減らすことができるのかなど把握しているので、それらの知見をもとに解説していきますね。
バグが多いと余計な工数が増えるだけでなく、実際にシステムを使うユーザーにも迷惑がかかってしまいます。あまりにバグが多いと、上司や客先からの信頼が低下しかねません。
ぜひ本記事の内容を参考いただき、バグの少ないプログラムを生み出す術をみにつけていきましょう!
バグを全く出さないプログラマーはほぼいない【前提】
前提として、バグを全く出さないプログラマーはほぼいません。
ほぼいないというのは、一部の天才プログラマーを除いてという意味です。
プログラムを書いて一発で完璧に動作することは稀です。もちろんどの程度の量を実装するのかにもよりますが、たとえば1行修正する程度の簡単な改修であれば、バグがなく修正を終えることはできるでしょう。
しかし、Webアプリで1画面まるまる実装するとなった場合、実装を終えて一発で完璧に動作することは考えにくいです。
プログラムは仕様によってはロジックがかなり複雑になりますし、人の手で書く以上、ミスは発生します。また、1箇所を修正することで別の箇所に影響がでてしまい、バグに繋がることはよくあります。
そのため、「最初から完全にバグを無くそう」という考えをもつのではなく、「なるべくバグの少ないプログラムを書けるようになる」ことを目指すのが賢明かなと。
バグが多いプログラマーの特徴
バグが多いプログラマーの特徴は以下の通り。
- 仕様を理解していない
- コードを理解せず勘で修正している
- テストケースが不足している
仕様を理解していない
仕様を理解していないとバグが多くなりがちです。
仕様を理解していないということは、正しい実装方法がわからないまま、プログラムを書くことになるから。
たとえば、なんとなく理解しているのもNGです。厳しいかもですが、それは理解しているうちに入りません。
人は自分に都合の良いように考える傾向にあります。正しくないことも、なぜか正しいように頭で勝手に変換してしまいがち。
そのため、「本当に自分のこの認識は正しいのか?」と、自身に問いかける癖をつけるのも効果的です。
コードを理解せず勘で修正している
仕様はある程度理解していても、実際のコードを理解せず勘で修正するのも、バグが多くなりやすいです。
勘で修正するくらいの理解度では、影響範囲も把握できていないと思うので、あとでバグとして上がってくることが多いです。
よくネットやSNSで取り上げられるプログラマーのあるあるとして、「何でかわからないけど動いた」という投稿をみることがありませんか?実際に僕も現場で開発していて、「何でかわからないけど動いた」というのは、時々あります。
しかし、これには一つ問題があります。それは、何でかわからないけど動いたまではいいとして、「なぜ動いたのか?」をその後調査せずに終わってしまうパターンです。バグが多いプログラマーはこのパターンが多いです。
反対にバグが少ないプログラマーは、たとえ意図せず正常に動作したとしても、その後必ず動作できた理由を調査を行います。
プログラムが動作する理由を、人に説明できるレベルまで持っていきます。そうすることで実装として論理的なのか判断できるので、結果としてバグを事前に防ぐことができるのです。
これがバグが多いプログラマーとバグが少ないプログラマーの違いの一つです。
テストケースが不足している
バグを減らすためにテストは実施するけれど、肝心のテストケースが不足していては、バグに気が付きにくいです。
テストは正常系と異常系は基本するとして、修正箇所以外にも影響がでていないかを考慮して作成する必要があります。
しかし、プログラマーは納期に追われることが多く、テストケースの作成やテストの実施がおろそかになりがちですよね。
でも忙しい時こそテストは丁寧に実施した方が、あなたもチームメンバーも、あとあと余計な負担を増やさなくてすみます。
バグを減らす具体的な解決策
最後にバグを減らす具体的な解決策をお伝えいたします。
下記4つをみていきましょう。
- 仕様を正しく理解する
- 修正箇所は人に説明できるようにする
- テストケースを網羅する
- プログラミング力を磨く
仕様を正しく理解する
まずは仕様を正しく理解することです。これができてないといくらプログラミングスキルがあったとしても、正確に実装することができません。
仕様を正しく理解する方法はいくつかあります。
- 設計書を一言一句読む
- 既存システムやコードを解析する
- 有識者に質問する
上記の通り。設計書を一言一句読み飛ばさずに読むこと、そして読むだけでなくきちんと理解しながら読むのがコツです。
既存システムがあるなら、そのシステムを実際に動かしてみること。また、コードを解析しながら理解する方法もあります。
自力で理解できない場合、有識者に質問をしてみると良いですね。
以下記事でエンジニアが仕様を理解する方法について具体的に解説しているので、より詳しく知りたい方は参考にしてみてください。
修正箇所は論理的に説明できるようにしておく
修正箇所は論理的に説明できる状態にしておきましょう。「なぜそのコードを修正するのか」「なぜその実装方法なのか」この辺は説明できるようにしておくと良いです。
コツとしては、誰か空想の人物を設定し、その人に向けて頭の中で説明してみてください。そして、その空想の人物からの指摘を想像してみます。
たとえば、「そのコードは何をしていますか?」「それで本当にバグは出ない?」「影響範囲は?」「他に修正すべき箇所は?」などなど。自分に問いかけてみるのです。
すると、自然と頭の中で回答を探し始めると思います。そこで的確に答えられるようにセルフレビューを繰り返し行ってみてください。
セルフレビューのやり方は以下記事で詳しく解説していますので、あわせて参考にしてみてください。
テストケースを網羅する
テストケースは過不足なく追加しておきましょう。
他人が書いたテスト仕様書でも、自分が書いた仕様書でも同じ。自分が実装してテストする以上、テストケースは網羅されているべきです。
極端な話、多少雑な実装でも、テストケースが網羅されていればバグは発見しやすいです。
プログラミングスキルを磨く
プログラミングスキルを磨いておくのもバグを減らすためには重要です。
プログラミングスキルがあればどういうコードがバグが少ないのかが分かりますし、実装のスピードも上がるからですね。
実装が早く終わればその分テストに時間を費やせます。すると結果的にバグを減らすことができます。
まとめ
バグが多いプログラマーの特徴と具体的な解決策を解説してきました。
- 仕様を理解する
- 修正・実装箇所は人に説明できるように
- テストケースを網羅する
- プログラミングスキルを磨き続ける
本記事で挙げたバグを減らす解決策は、明日からすぐに使えるものばかりなので、ぜひ実践してみてください。
以下では、優秀なITエンジニアの特徴となり方について解説しているので、ぜひチェックしてみてくださいね。