ソフトウェアのバグをなくすには?--プログラミングの際に避けるべき10の失敗

David Gewirtz (Special to ZDNET.com) 翻訳校正: 村上雅章 野崎裕子

2016-06-17 06:00

 プログラムがきちんと動作しないのはなぜだろうか?19世紀にエイダ・ラブレスが汎用計算機の可能性に目を向けた時から長い年月が経過しているにもかかわらず、ソフトウェアにはいまだにバグがつきものだ。

 なぜだろうか?


 この疑問に対する答えにたどり着くまでの道筋は数多くあるが、ここでは現実的な答えを提示したい。その答えとは、プログラマーが過ちをおかすためというものだ。彼らは、時にいいかげんな作業をする。また彼らは、最適なツールや最適なプラクティスを常に選択するわけでもない。

 筆者はカリフォルニア大学バークレー校の公開講座でオブジェクト指向プログラミングを教えており、ソースコードそのものに対する理解を助けるために費やす時間と同じくらいの(あるいはそれ以上の)時間をかけて、優れたプログラミングプラクティスとは何かを教えている。本記事では、この講座の学生らがしでかす数多くの過ちを紹介したい。

 なお、本記事を執筆するにあたり、ノースウェスタンポリテクニック大学工学部のJames A. Connor教授に連絡を取り、同教授の学生たちがしでかす過ちを紹介してもらった。

#1:コメントの付け方が貧弱

 コメントという要素は、プログラム内に記述されながらも、コンピュータによって実行されることはない。これはプログラマーによって記述されるメモ書きであり、ソースコード内での処理を説明するためのものだ。

 学生らの多くは、ソースコード中にコメントを記述せずに済ませようとする。また、コメントの重要性を理解できていない。実行コードを記述する時間を減らしてでもコメントを記述するべきなのだ。以下の事例は、筆者自身の経験に基づくものだ。

 21世紀に入る前に、筆者は初期のコンテンツ管理システムの1つである「ZENPRESS 1.0」を開発した。当時、数年間は記事の配信に使用されるだろうと考えていたが、その14年後も使用され続けており、7万5000件近くの記事を扱い、26億ページを配信していた。

 しかし最終的に、基盤としているプラットフォームが陳腐化したため、ソースコードを見直す必要に迫られた。このため筆者は2009年に、当初のプラットフォームから近代的なプラットフォームへの移植作業を実施した。さらに最近、PHPのバージョンアップにともなって、使用していた主要機能が使えなくなったため、再び移植作業を実施しなければならなくなった。

 ソースコードの記述から19年も経った後で、そのロジックなど思い出せようはずもない。しかし、適切なコメントがあったおかげで、道路地図にあたるものとして使用できた。ソースコードを読み、ソースコードに埋め込まれたコメントに目を通すことで、修正作業を進められたのだった。

 またコメントは、チームの一員として作業している場合や、ソースコードが自らの手を離れた後も長く使用されていく場合にも重要となる。あなたが次のキャリアに向けて旅立った後、誰か他の人がそのソースコードを理解しなければならなくなるかもしれない。そうした場合、コメントが役立つはずだ。

#2:変数名がいいかげん

 言葉の力によってソースコードの理解を促すという観点から話を続けたい。例を挙げて説明しよう。1ガロン(約3.8リットル)のガソリンで20マイル(約32.2km)走れる自動車で、100マイル(約160.9km)の距離を走行したと考えてほしい。ガソリンの消費量はどれだけだろうか?

 これは簡単すぎる例だが、ここでの役目は十分に果たしてくれる。ソースコードを読んでいると「a = b / c」という文があったとしてほしい。これは何を意味しているのだろうか?bとcはそれぞれ何を表しているのだろうか?また、それらはソースコードのその他の部分とどのような関係を持っているのだろうか?ソースコードを記述して10分も経つと、忘却が始まる。誰か他の人が担当になり、修正や、アップデートを行おうとしても、当然ながら意味が分からないはずだ。

ZDNET Japan 記事を毎朝メールでまとめ読み(登録無料)

ZDNET Japan クイックポール

所属する組織のデータ活用状況はどの段階にありますか?

NEWSLETTERS

エンタープライズコンピューティングの最前線を配信

ZDNET Japanは、CIOとITマネージャーを対象に、ビジネス課題の解決とITを活用した新たな価値創造を支援します。
ITビジネス全般については、CNET Japanをご覧ください。

このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]