連載
» 2019年10月08日 10時00分 公開

山浦恒央の“くみこみ”な話(122):ソフトウェア技術者のためのバグ百科事典(1)うるう年 (1/3)

ソフトウェア技術者に向けて、バグに関する基礎知識をまとめていく新シリーズ「バグ百科事典」が始まります。記念すべき第1回は、超常連バグである「うるう年バグ」を取り上げます。

[山浦恒央 東海大学 大学院 組込み技術研究科 非常勤講師(工学博士),MONOist]

⇒連載「山浦恒央の“くみこみ”な話」バックナンバー

1.はじめに

 これまで約2年に渡り、バグ検出能力向上問題集となる「バグ検出ドリル」シリーズとして、合計21個のバグを見つけていただきました。今回から新シリーズ、「ソフトウェア技術者のためのバグ百科事典」をお送りいたします。

2.バグ百科事典とは

 これまでの「バグ検出ドリル」は、将棋、チェス、囲碁でいえば「次の一手問題」です。難解な局面を理解し最善手を選ぶように、ソースコードを読み、バグをピンポイントで見つけて修正していただきました。ある意味、実践力の養成であり、「バグを見つける嗅覚」と、長手数の詰将棋を解く場合のような「必ず解くという強靭な精神力」を鍛えるものでした。

百科事典 ※写真はイメージです

 新シリーズでは、「うるう年のバグ」「デッドロックの発生」「メモリ破壊のバグ」など、バグの種類別に詳しく解説します。将棋なら「角換わり」「四間飛車」の戦法、チェスなら「クイーンズ・ギャンビット」「ルイ・ロペス」のオープニング、囲碁なら「厚み優先」「地にからい」「模様」みたいな戦略ごとに、詳細を解説するものです。

 「バグ検出ドリル」が実践力を鍛えるなら、「バグ百科事典」は、基礎知識を増やすことを目的にしています。両方を読んでいただければ、バグを未然に防ぐとともに、バグを作らない能力が高くなるでしょう。

 ソフトウェア技術者の日頃の悩みとして、「バグの原因が見つからない」で困る場合が少なくありません。新シリーズの目的は、「ある特定のバグに関する知識を増やす」ことにあります。筆者が毎回、1つのバグに注目し、解説します。「そのバグの特定」や「そのバグの未然防止」に役立てば幸いです。

 バグの原因を特定することは非常に大変です。限られた時間内で標準出力やログを解析し、原因を見つけようとしますが、非常につらい時間ですね。「一生見つからないかもしれない」とくじけることもあります。

 自分が困っていることは、他の人も困っているはずです。そんな時に「バグの種類別」に百科事典的にまとめたものがあると便利だと考えました。特に、「常連バグ」「過去に話題となったバグ」が大きなヒントになる可能性があります。

3.バグ百科事典の目的

 新シリーズの「バグ百科事典」で筆者が意図している目的を以下に示します。

  • (1)バグの種類の把握
  • (2)バグ発生時のトラブルシュート
  • (3)バグの未然防止

(1)バグの種類の把握

 ソフトウェア技術者には、想像力が非常に重要です。想像できないバグは防げませんし、検出できません。バグの未然防止は、まず、どんなバグがあるか知ることです。なお、本バグ百科事典は、「あいうえお」順に掲載できないため、最終的に、ソートした形でまとめる予定です。

(2)バグ発生時のトラブルシュート

 バグが発生して最も苦しい時間が、バグの原因を見つけることです。場合によっては、数日から1週間、最悪は見つからないまま出荷することになります。「バグ百科事典」で取り上げた知識を持ち、原因を見つけるヒントになればうれしく思います。また、顧客にバグの原因を説明する際の理論武装にも使えます。

(3)バグの未然防止

 プログラムを作ってから「ある特定のバグ」で悩むのではなく、設計段階で、「ある特定のバグ」を作り込まないようにしましょう。そのための対策や方策を示します。

       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.