いざ制作者側で直面すると途方に暮れる… 「バグ」
「バグ」(Bug) とは、コンピュータ (ソフトウエア 開発) の世界においてプログラムに誤りや欠陥があること、それに伴いしばしば誤作動したり、プログラム結果が反映されるディスプレイ画面の表示が崩れるといった、バグによる状態異常も含めて使われる言葉です。 不都合やエラー (Error) と呼ぶこともあります。
元々は英語の 「虫」 で、機械や道具関係における不具合や不都合の俗語として使われており、その後コンピュータ関係の世界でも使われるように。 どこからともなく入り込んで悪さをする、人を悩ませいらいらさせる、見つけるのも大変な上に潰しても潰してもキリがないといったイメージが合致することから主に英語圏で広がり、日本でもプログラムやソフトウェア関係、なかでも ゲーム の世界で制作者側のミスや誤作動を起こすような状況を指す言葉として広く一般化しています。
バグと云っても指し示す範囲はとても広くなっています。 実用性が損なわれるほど画面が壊れる、ありえない値を返してくる、処理がループしたり中断する、そこが 単一障害点 となってシステム全体がダウンして使えなくなるほどの大きなものから、単に表示の一部だけが崩れる、ごく限られた特殊な処理の時だけ一部の処理が不完全なまま値を返す、ちょっと動作がもたつくと云った、場合によっては気が付かないほど軽微なものまで、内容も様々です。 これらはプログラムが複雑になるほど発生しやすく、また原因の特定が難しくなり、個人が 趣味 で行うプログラムのミスならともかく、ビジネスや業務の世界では単純に制作上の欠陥、瑕疵として、その原因が発注者側にあるのか受注者 (制作者側) にあるのかで争われることもあります。
なおバグを探すことはデバック (Debug) と呼びますが、バグだらけのゲームや出来の悪いゲーム (クソゲー) をプレイすることをデバッグとか有料デバッグと呼んだり、そうした プレイヤー をデバッグ要員と呼んだりします。 バグの修正は バグフィクス (Bug fix) と呼びます。 一方ゲームの世界でバグを利用した特殊なプレイ方法をバグ技とか裏技 (バグではなく意図的に仕組んだ隠れ機能の発見と利用を含む) と呼ぶこともあります。
バグと仕様
バグの定義は難しいものです。 計画とは異なる誤った挙動をする、画面が崩れる、処理が中断してシステムが落ちるといったわかりやすいものならどこが原因にせよ何かしらのバグだとある程度は即断できますが、一部の処理漏れなどは、明らかにおかしな動きをしていても、必ずしもバグだとは云えない部分があります。
例えば年月日の処理で元号の表示がある場合、発注者側が 「昭和まで表示できればいい」 と明示的、あるいは暗黙の前提で要件定義していた場合、平成になった後に昭和65年とか66年と表示されてもバグだとは云えません。 そもそもプログラムの前提に 「元号が変わったらそれに伴い元号も変わること」「昭和の次は平成だ」 というプログラム要求がされていないからで、1990年を昭和65年と表示するのはプログラム的には正しい処理と云えます。
この場合、顧客から 「おい表示が昭和のままだぞ」 と問われても、「バグではありません、仕様です (そういう要件定義に従って実装した正しい処理です)」 としか言いようがありません。 いずれにせよ昭和65年では使えないので平成表示にするなり西暦で統一するなりプログラムを修正する必要がありますが、その場合の作業や費用はどちらが負担するのかで、発注者側・受注者側 (制作者側) で、責任の所在を巡って争いが生じることもあります。
このケースではあえてわかりやすい元号を例にしていますが、実際はもっと複雑で、それぞれのケースで異なる、部外者では分からないような個別の細かい常識や慣行の行き違いなどで、どちらが悪いのか裁判所でなければ判断できないような トラブル も起こりがちです。
バグはどこにありや?
バグの発生条件やバグのありかも分かりづらいでしょう。 要件に基づく全体の論理や設計にそもそも誤りがある場合もあれば、プログラマ個人の単純なミス (誤記その他) によって起こることもあります。 またいずれのケースでも、人が作業している以上完全には防げないので、品質管理のために全体をチェックする体制も必要ですが、それぞれが完全でも不完全でも問題なく使えるプログラムになることもあればその逆もあります。
機械でもプログラムでも人とのコミュニケーションでも社会システムでも、何かをいくつも積み上げて作り上げるものは、どこかに小さな行き違いやミスがあると、やがてはそれが全体を機能不全にしてしまうほどの大きな原因になったりもします。 どこかに明確な誤りがあればわかりやすいですし改善もしやすいでしょうが、それぞれが定石に基づく正しさや蓋然性・合理性を持つものでも、組み合わせたらそれぞれの定石や正しさや合理性同士がぶつかっておかしなことになったりすることすらあります (経済学の世界で云う合成の誤謬みたいな)。
バグに直面すると 「ちゃんと動くかしっかり事前にチェックしろ」 とイラだったりもしますし、それは仕方がありませんが、ソフトウェアがどんどん高度化・複雑化する中、バグを防ぐのも見つけるのも、そして適切な修正をするのも難しくなっています。 とはいえ社会インフラが誤作動したり、単なる娯楽であるゲームでも 課金 や決済関係で間違いがあったら仕方がないでは済みません。 筆者 自身はプログラミングや開発は趣味の延長やその延長で仕事でもちょっと触った程度ですが、友人知人にプログラマはかなりいるので何となく苦労はわかりますし、日夜神経すり減らして開発している方々には感謝しかありません…。
ゲームの世界から転じて、一般用語にも
当初はプログラム用語やゲーム用語の一つとして使われるようになったバグですが、その後ゲームが広く普及すると同時に、他のゲーム用語とともにバグも日常生活で使う一般用語や俗語として広まっています。
単にミスや間違いがあることをバグと呼ぶのはもちろん、ゲーム画面や キャラ の表示や動きが崩れるさまをバグったと呼ぶことから転じておかしい、変だ、狂ってる、意図しない動きをする、状況が見えずに慌てふためいてパニックになるといった状況を広く若者言葉として 「バグ」 や 「バグってる」 と呼ぶようになっています。 例えばブサイクな人のことを 「顔のパーツがバグってる」 みたいに表現したり、慌てたり混乱したり興奮・感動したようなことを 「財布がなくてバグった」「推し が可愛すぎてバグった」 みたいに表現したりします。
コンピュータの世界でもプログラム以外の場面で使われることも多く、例えば DTP における文字化けとか表示ズレ、位置ズレなども、プログラム上の問題が全くないにもかかわらず、広くバグと呼ぶことも多いでしょう。