\r\n\r\n

史上最悪のプログラミングミス10選

コーディングの歴史は、大惨事を引き起こしたこともあります。悪いコードが大混乱を引き起こした例もある。ここでは、史上最悪のプログラミングの失敗を10個紹介します...。

コードは、ほとんどどこにでもあるものです。現代のコンピュータの登場は1940年代である。プログラミングは、その豊かな歴史の中で、人々のコミュニケーションを豊かにし、多くの産業の発展に貢献してきました。宇宙旅行から通信、医療に至るまで、あらゆるものがコードによって革命的に変化し、影響を受けてきました。

さらに、プログラミングは人生の貴重な教訓を与えてくれるものでもあります。しかし、その歴史的な過去において、コーディングは大混乱を引き起こしたこともあります。悪いコードが大きく災害を引き起こした例もあります。ここでは、史上最悪のプログラミングの失敗を10個紹介します。

1 ミレニアムバグ

2000年問題とは、Y2Kやミレニアムバグとも呼ばれ、コンピュータに混乱をもたらすと予想されるコーディング上の問題です。1990年代には、ほとんどのコンピュータープログラムが4桁の年号を省略して表示していた。つまり、1990年は90と読み、1991年は91と書く、といった具合だ。4桁の年号を2桁に短縮することで、貴重なメモリを節約することができたのだ。しかし、コンピュータは2000年を単純に00年と認識することはできなかった。さらに問題を深刻にしているのは、2000年がうるう年であることだ。一部のソフトウェアアプリケーションでは、余分な日数を考慮していません。

多くの人が、Y2Kによって世界中のコンピューターや電子機器が機能不全に陥ることを恐れています。私が初めて買ったDVDプレーヤーには、「Y2K対応」のラベルが光っていたのを覚えています。2000年はソフトウェア的にはかなり無難な年でしたが、コンピュータやアプリケーションの業界全体のアップデートに約3000億円が必要でした。コンピューターは壊れませんでした。いつもと変わらない生活が続いていた。しかし、多くの資金と労力を必要とするため、Slateのレポートによると、無駄になってしまう可能性があります。

なぜこれが最悪のプログラミングミスの一つなのか:2000年のパニックは、最大で3000億ドルという非常に大きな犠牲を払った。さらに、この潜在的な問題に対処するために、リソースを再配分しました。

2 ハートブラッドワーム

HeartbleedバグはOpenSSLライブラリに出現し、危険なセキュリティ脆弱性である。TLS(Transport Layer Security)プロトコルは、OpenSSL暗号ライブラリを使用しています。TLSで広く使われているため、Heartbleedはすぐに広まりました。このバグにより、インターネット上の誰でも、影響を受けたOpenSSLの反復実行中のマシン上のメモリを読み取ることができるようになります。システムメモリは最大64kbまで読み込み可能です。Heartbleedバグは2014年に一般公開されましたが、導入されたのは2012年です。

TLSハートビート拡張のバウンダリーチェックの欠落による、不正な入力検証。Heartbleedという名称は、ハートビート拡張のバグであることから生じた。2014年のThe Registerの記事では、最も人気のあるTLSを採用したサイトの1.5%がHeartbleedバグの脆弱性を抱えたままであると報告されています。ただし、OpenSSL 以外の TLS 実装は影響を受けません。その結果、Windows版のTLSとMozillaのWebセキュリティサービスは、Heartbleedバグの影響を受けません。パッチにより、ようやくOpenSSLバージョン1.0.1gで問題が修正されました。Heartbleedバグは、バッファオーバーリードを防ぐためのバウンダリチェックを追加することで、正常にパッチが適用されました。

なぜこれが最も深刻なプログラミングエラーの一つなのか:Heartbleedバグは、セキュリティ上の大きな脅威となる。攻撃開始とパッチ適用の間に時間がかかるため、影響を受けたシステムは何年にもわたって攻撃に対して脆弱なままとなります。コンピュータの脆弱性に問題がある場合はいつでも、データセキュリティ上の大きなリスクを生じさせる可能性があります。

III.誇張されすぎたWorld of Warcraftのウイルス

World of Warcraftは、別の種類のコンピュータウイルスに感染したことがあります。2005年、デジタル疫病がゲームサーバーの一部に侵入しました。何千人ものキャラクターが血液ウイルスの犠牲となった。Wowの開発元であるBlizzardは、血の神Hakaを紹介しました。かなりの数の敵が、キャラクターに腐敗した血液を感染させた。血液感染は当初、ハカの体の近くにいるプレイヤーを苦しめるように設計されていたが、プレイヤー間の移動は王国の外で発生した。これは、ゲーム内のペットが発生させる血液ウイルスを不用意に拡散させることを意味します。また、ノンプレイヤーキャラクター(NPC)がキャリアになります。

アクモンドが最初の感染サーバーとなる。低レベルのキャラクターは即死する。強力なキャラクターも長くは続かない。コーディングの不具合により、NPCやペットを介してウイルスが蔓延していたが、このウイルスはハカ王国以外に流出する予定はなかった。何千人ものプレイヤーが死んだが、World of Warcraftは永久に死ぬことはなかった。Blizzardは、サーバーのロールリスタートによって血液ウイルスを修正しました。しかし、プレイヤーの死体がWorld of Warcraftに散乱するまではいかなかった。

なぜこれが史上最悪のプログラミングミスのひとつなのか:さて、「World of Warcraft」にはデータセキュリティの問題や生命を脅かすシナリオはないかもしれませんが、ゲーマーはそのエンターテインメントを真剣に楽しむでしょう。Blizzardは何時間もかけてサーバーをリセットしました。興味深いことに、ゲーム中のプレイヤーの行動は、現実世界で起こりうる伝染病の蔓延、パニック、文明の崩壊を模倣しています。Wowをプレイしたことがない?この完全なビギナーズガイドで始めましょう。

4 セラック-25

多くのプログラミング・エラーがエクスプロイトやゲーマーの死につながる一方で、悪いコードが実際に死につながることもある。「Therac-25」災害は、放射線治療器「Therac-25」で発生した。カナダ原子力公社が製造した「セラック25」は、偶発的な放射線の過剰摂取により、少なくとも6人の患者を死亡させた。調査の結果、ソフトウェアの不備やシステム開発の不備が放射線の過剰被曝につながったことが判明しました。これらは主に、ソフトウェアの自動テストの実施が困難であったことに起因しています。

Therac-25放射線過負荷は、テストが容易なコードを作成するために警告することができます。殺戮マシンというとSFのように聞こえるかもしれないが、「セラック25」事件がそれを証明している。しかし、これらの問題を引き起こしたのは、実はコーディングのヒューマンエラーだったのです。ナンシー・レビソンなどの専門家は、経験の浅いコーダーがバグだらけのソフトを作っていることを発見した。また、プログラマーは1人しかおらず、Therac-6とTherac-20のコードをベースにしたソフトを作成しました。

最悪のプログラミングエラーの1つである理由:誰かが命を落とすとき、プログラミングエラーは間違いなく最悪のコードの1つである。

5 エンシェントセーラーフライト1

NASAはかなりの技術を駆使しており、New Horizonsの探査機にはPlayStationのCPUが使われています。 NVIDIAのソリューションアーキテクチャ&エンジニアリング担当副社長のMarc Hamiltonは、NASAのNVIDIAハードウェアの使用について定期的にブログで紹介しています。金星探査機「マリナー1号」を搭載したロケットが打ち上げられた。どんなに微少に打ち上げても、ロケットは意図した飛行経路から外れてしまうのだ。"マリナー1号は離陸後まもなく破壊された。

ちょっとしたプログラマーのミスで、「マリナー1号」のエラーが発生したのです。報告はさまざまだが、ハイフンが抜けていたとの指摘もある。NASAのアーカイブ文書によると、"マリナー1号飛行後審査委員会は、データ編集プログラムのコード化されたコンピュータ命令からハイフンが省略されたために、誤った誘導信号が宇宙船に送信されたと判断した。"とのことです。有名な作家アーサー・C・クラーク(2001年宇宙の旅)は、マリナー1号の事故を "歴史上最も高価なハイフン "と呼んだ。

なぜこれが最悪のプログラミングミスになるのか:「マリナー1号」のミスは簡単に回避できたはずだ。公共サービス発表:開発者の皆様へ、ソフトウェアのテストをお願いします。

6at&tネットワークダウン

今、私の声が聞こえますか?1990年1月15日、AT&Tのネットワークの50%以上がクラッシュし、7500万件の電話が9時間にわたって不通になった。最初の報告ではハッカーに原因があるとされたが、真犯人はもっと悪い、標準的なソフトウェアのアップデートであった。今度、Windows 10のアップデートについて文句を言うときは、このことを心に留めておいてください。1行のコードのバグにより、AT&Tのネットワークが数時間ダウンしたのです。1つのスイッチは自動的にリセットされるが、2つ目のスイッチで別のメッセージが送られてくるというバグがあった。ドミノ現象が起こり、ネットワークはエラーを繰り返し続けたのです。結局、AT&Tはネットワークの負荷を減らすことで解決策を講じた。その後、スイッチは自動的にリセットされます。

何度もテストを繰り返したが、ある一文でネットワークがダウンしてしまった。このプログラムはCで書かれている。if節のbreak文はまだswitch節の中にネストされている。1990年のAT&Tのブラックアウトは簡単な問題のように思われた。たくさんの不在着信、あるいは今日のようにたくさんのテキストメッセージ、Instagram、Twitter、Snapchatの通知を見逃す。しかし、コミュニケーションの不足は、金銭的に大きな影響を及ぼしています。アメリカン航空のような企業は、経済的な損失を被った。停電のため、アメリカン航空への問い合わせが3分の2に減った。1990年のオーバーホールは、テストが重要であることを示す良い例である。また、アメリカ電話電信会社(AT&T)の停電は、テクノロジーと経済の本質的なつながりを思い起こさせるものです。

なぜこれが最悪のプログラムミスのひとつなのか:AT&Tのネットワークがクラッシュしただけでなく、数時間のダウンタイムが金融危機を引き起こしたのです。

7 デイ・オブ・ザ・リビングデッド:セント・メリーズ・チャリティー・ホスピタル

2003年には、ソフトウェアの不具合で8,500人が誤って「死亡」した。ミシガン州グランドラピッズのセント・メリーズ・マーシー・メディカル・センターは、患者管理ソフトウェア・システムの不具合により、多くの患者が死亡したと誤って報告した。Therac-25の死者数に比べれば、このひどいコード災害は、実際に死者が出なかったので、かなり無害なものであった。しかし、自分の死について読むのは不安なものだ--特に自分が生きている間は。

虚偽の死亡報告は、患者に限ったことではありません。この手紙は、保険会社や社会保険事務所に送られます。社会保障と保険事業者は、対象となる患者がメディケアの適用を受けることを保証しているので、これはかなりの問題を提起している。St. Mary's Mercyの従業員は、患者さん、代理店**、保険会社にこの誤りを伝えました。結局、このプログラムミスはあまり注目を集めることはなかった。このコーディングミスが修正されたかどうかは不明である。しかし、それ以上の誤死は報告されていない。セント・メリーズ・マーシー病院は、患者管理ソフトを切り替えただけです。

なぜこれが最悪のプログラミングミスの1つなのか:実際に誰も死ななかったのは幸いだが、健康保険の継続適用を確実にするためのダメージコントロールはめちゃくちゃだ。

8 受刑者:早期釈放

ミシガン州では、2003年から2005年にかけてデータ処理の不具合が発生しました。この間、ミシガン州ではコンピュータ・プログラムの欠陥により、23人の囚人が早期釈放された。幸運な受刑者たちは、39日から161日の刑期で利益を得ました。予期せぬ投獄の終了は問題だが、これらが薬物や**罪などの小さな違反であることは幸いである。

ソフトウェアは、多くの場合、プロセスを自動化するために設計されています。肉体労働を減らすことで、私たちの生活は理論的には楽になります。しかし、ミシガン州の囚人が早期出所したケースは、改めてソフトウェアテストの価値を証明している。特に今回は、小さなプログラムミスが大きな違いになってしまいました。もし、釈放された囚人がもっと重大な犯罪に巻き込まれていたらと想像してみるといい。

なぜこれが最悪のプログラムミスなのかというと、この出来事はもっと悪くなる可能性があったのに、囚人を早く解放してしまったことがひどいのです。

9 ハートフォード・スタジアム陥落

1978年のハートフォード・コロシアムの崩壊は、9000万ドルの被害が出たと言われているが、もっとひどいことになっていたかもしれない。ハートフォード・コロシアムは、ファンが退場した数時間後に倒壊した。鉄格子の屋根は、湿った雪の重さに耐えられない。単純なプログラムミスでビルが倒壊した。ハートフォード・コロシアムの設計に使われたCADソフトのコーダーは、複数の変数を考慮することに失敗していた。その代わりに、ソフトウェアのプログラマーは、スチール製の屋根の支柱が純粋な圧縮にのみ直面すると仮定しました。

エンジニアは多くの課題を抱えています。ソフトウェアを使うことで、彼らの仕事はより簡単になるはずです。しかし、いくつかの変数を考慮しないと、大きな困難に直面することになります。地雷のミスは修正すればいいのですが、CADソフトは現実の構造物に直接影響を与えます。

なぜこれが最悪のプログラミングミスの1つなのか:まあ、少なくとも死者は出なかった。しかし、推定9000万ドルの経済的損失は莫大である。

10 私は99の問題を抱えており、Pentiumはそのうちの1つです。

一般に、インテル製プロセッサーはAMD製プロセッサーより性能が高い。しかし、AMDは優れた価格性能比を提供した。486DXとPentiumのCPUは、FPU(浮動小数点演算ユニット)を採用していた。このFPUは数学コプロセッサである。前世代のIntel CPUは、数学の処理に整数を用いていた。FPUを内蔵することで、次世代Pentiumチップは数値計算を大幅に高速化することが期待されている。

PentiumのFPUはSTRアルゴリズムをベース4で使用しています。入力が正しくないと、計算が少しおかしくなります。しかし、小さな変化でも大きな問題になることは、ハートフォードの崩壊やセラック25で実証されている。1000分の5ほどのエントリーが除外され、Pentiumの持つ長大な割り算の能力が失われてしまった。インテルの関係者は、スクリプトのエラーが原因でエントリーを見つけることができなかったと主張しています。いずれにせよ、Pentiumの演算はコードが悪いことが原因だった。

なぜこれが最も深刻なプログラミングエラーの一つなのか:いくつかの重要な数値は大したことがないように思えるかもしれませんが、エンジニアリングや医療の精密さの場合には不可欠なものです。

Bad code:プログラミングエラーが発生する

プログラミングのエラーは昔からあり、様々な分野でコードの利用が拡大する中、この傾向はすぐにはなくなりそうにありません。

プログラムエラーの例はたくさんあります。World of Warcraftのバグのように、かなり無害なものもあります。その他の死は、現実のもの(Therac-25)か、想像上のもの(St.)これらの有名な例から、コードを書くことを止めないでください。正しいWebプログラミング言語の選び方については、こちらのガイドをご覧ください。

あなたは、悪いコードの歴史的な例を覚えていますか? あなたが選んだプログラミングの誤りを、以下のコメント欄に残してください。

画像引用元:Shutterstock.comサイト経由nouskrabsとMcIek

あなたが興味を持っているかもしれない記事

匿名者
匿名者

0 件の投稿

作家リスト

  1. admin 0 投稿
  2. 匿名者 0 投稿

おすすめ