たった2行のコードで顧客の在庫マスターファイルが壊れてしまいました

Table of Contents

たった2行のコードで顧客の在庫マスターファイルが壊れてしまいました

誰、私? 8月はいかがですか?プライベートステイケーションの合間に、The Register誌の「誰、私?」の奥深くから、もう一つの「大失敗物語」を読んでみませんか?

今日の破滅的なコーディングは、私たちが「エド」と呼ぶ読者(これは明らかに彼の名前ではありません)によるもので、私たちを 1970 年代後半のカナダへと連れて行きます。

エドはテクニカルサポート部門で勤務し、顧客からの電話に常に対応していました。彼がサポートしていたシステムはBusiness BASICで書かれ、Data General Novaミニコンピュータ上で動作していました。

Novaは1960年代末に登場し、1970年代に人気を博しましたが、マイクロコンピュータの時代が到来し、競合が台頭するにつれて衰退しました。Data General自体は1990年代末まで存続しましたが、その後EMCに買収されました。

「すべてのコンピューターには音響カプラーが付いていて、リモートで接続してシステムを操作できました」とエドは回想する。

チームは顧客からのあらゆる種類の電話に対応し、通常はフィールドのオーバーフローや予期しないユーザー入力などのプログラミング エラーを修正していました。

問題の日、エドはある顧客から比較的簡単な作業を依頼されました。顧客は年次棚卸しを控えており、全製品の在庫数をゼロにするちょっとした工夫はできないかとエドに尋ねました。

顧客はリストを確認し、目測で実際の金額を入力する。「バーコードやCSVインポートが普及する前の時代でした」とエドは説明した。

頭が爆発する

座り心地はいいですか?それでは始めましょう。ちょっと待ってください。PDP 11/70がオフラインになりました

続きを読む

仕事は簡単だった。エドは顧客のシステムにある在庫マスターファイルを探し出し、在庫数量が格納されているフィールドを見つけた。彼は、あらゆるマスターファイルのファイルダンプを実行するプログラムを持っていた。通常は、レコードを読み取り、内容をダンプし、レコード番号をインクリメントし、EOFに達するまでこれを繰り返すだけだった。

彼がしなければならなかったのは、在庫数をゼロにする行と、レコードをファイルに書き戻す行を数行追加するだけでした。これほど簡単なことがあったでしょうか?

シンプルな2行。

「ほんの数分で終わりました」とエドは、自信に満ち溢れていたことを振り返りながら言った。「その後、クライアントに電話して、作業が完了したことを伝えました。

「私は通話を終了し、それを請求可能としてマークし、一日の業務を続けました。」

1時間後、クライアントは電話に戻りました。

「こんにちは、エド。ボブです。変な問題が発生しています。注文入力担当者が注文を入力すると、すべての商品の説明が『ブリタニービスケット』と表示されてしまうんです。一体何が起こっているのでしょうか?」

「恐怖とともに、自分が何をしたのかが分かりました」とエドは語った。

「2 行を追加するときに、レコード番号増分行の前ではなく後にレコード書き込みステートメントを配置しました。

「それで、プログラムはレコード 1 を読み取り、在庫数をゼロにリセットし、レコード番号を増分して、レコードをレコード番号 2 として書き込みました。おっと。

在庫マスターのすべての記録は、ファイルの最初の記録のコピーになりました。すべての製品の説明と価格は同じでした...ブリタニービスケット[実際にはそうではありませんでした。犯人保護のため、名前と事業内容は変更されています]。

「関連するインデックス ファイルは影響を受けなかったため、注文入力プログラムは動作し続けました。

ビスケット愛好家のボブにとって、残念ながら簡単な解決策はなかった。唯一のバックアップは前夜のものだったので、顧客はその日の朝に行われた作業をすべて失ってしまった。それでも、少なくともエドは顧客のデータをシュレッダーにかけた労力に対して、請求可能なボックスにチェックを入れることを忘れなかった。

その後、エドはより慎重に以前のコード調整をやり直しましたが、今度は正しく実行できました。

「その日から、データベースにデータを書き戻す変更を行うときは、細心の注意を払うようになりました。」

データを破壊しかねないコードを、何の心配もなく平気で書きまくっていませんか?それとも、スカウトのローププロジェクトよりも緊張して「実行」ボタンを押してしまうのでしょうか?Who, Me? ® までメールであなたの体験談をお聞かせください。

Discover More