ソフトウェアのバグをなくすには?--プログラミングの際に避けるべき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 記事を毎朝メールでまとめ読み(登録無料)

  • このエントリーをはてなブックマークに追加

この記事を読んだ方に

連載

CIO
IT部門の苦悩
Rethink Internet:インターネット再考
インシデントをもたらすヒューマンエラー
トランザクションの今昔物語
エリック松永のデジタルIQ道場
研究現場から見たAI
Fintechの正体
米ZDNet編集長Larryの独り言
大木豊成「仕事で使うアップルのトリセツ」
山本雅史「ハードから読み解くITトレンド放談」
田中克己「2020年のIT企業」
松岡功「一言もの申す」
松岡功「今週の明言」
内山悟志「IT部門はどこに向かうのか」
林 雅之「デジタル未来からの手紙」
谷川耕一「エンプラITならこれは知っとけ」
大河原克行「エンプラ徒然」
内製化とユーザー体験の関係
「プロジェクトマネジメント」の解き方
ITは「ひみつ道具」の夢を見る
セキュリティ
「企業セキュリティの歩き方」
「サイバーセキュリティ未来考」
「ネットワークセキュリティの要諦」
「セキュリティの論点」
スペシャル
ざっくりわかるSNSマーケティング入門
課題解決のためのUI/UX
誰もが開発者になる時代 ~業務システム開発の現場を行く~
「Windows 10」法人導入の手引き
ソフトウェア開発パラダイムの進化
エンタープライズトレンド
10の事情
座談会@ZDNet
Dr.津田のクラウドトップガン対談
Gartner Symposium
IBM World of Watson
de:code
Sapphire Now
VMworld
Microsoft WPC
Microsoft Connect()
HPE Discover
Oracle OpenWorld
Dell EMC World
AWS re:Invent
AWS Summit
PTC LiveWorx
より賢く活用するためのOSS最新動向
古賀政純「Dockerがもたらすビジネス変革」
中国ビジネス四方山話
ベトナムでビジネス
米株式動向
日本株展望
企業決算