ソフトウェアのバグとソフトウェアの破損
カンタス航空72便に関するウィキペディアの記事を調査しているときに、「潜在的なトリガータイプ」セクションに次のように書かれていることがわかりました(私の強調)。
ソフトウェアのバグ、ソフトウェアの破損、ハードウェアの障害、電磁干渉、宇宙線によって生成される二次的な高エネルギー粒子など、多くの潜在的なトリガータイプが調査されました。
「バグ」と「破損」の間に独特で究極の違いがあるのだろうか(もしそうなら、違いは何ですか)、それともこれは単なる記事の文言であり、他には何もないのでしょうか?
回答
ソフトウェアの破損は、ソフトウェアの整合性とは逆です。データがソフトウェアコードであることを除けば、データの破損と同じです。
それは影響を与える可能性があります:
- メモリに保存されているソフトウェアバイナリ:ソフトウェア命令のバイナリコードは、たとえば物理的な干渉(「離着陸時に電子デバイスの電源を切ってください」)、ハードウェアの欠陥(メモリチップ)、悪意のあるアクティビティ(たとえば、ロウハンマーの脆弱性)のために変更されます)、またはソフトウェアのバグ(つまり、バッファオーバーフローの結果として)。
- メモリにロードされる前のソフトウェアバイナリ、つまりファイルシステムに保存されている実行可能ファイル(SSDメモリ、ハードディスクなど)、またはネットワーク経由で転送される(リモートファイルサーバーからロードされるなど)。
- 実行可能ファイルが生成される前のソフトウェアソースコード:ソースコードは他のデータと同様のデータであり、他のデータと同じ状況で破損する可能性があります。典型的な例は、ソフトウェア会社のソースコードリポジトリがハッキングされた場合です(偶発的なケースは一般的にコンパイルを妨げ、影響は非常に限られています)
「ソフトウェアの破損」は、ソフトウェア自体の破損ではなく、ソフトウェアによって引き起こされた破損を意味するために曖昧に使用される場合があることに注意してください。
適切なバックアップから復元することで、破損を修正できます。破損とは、一部のビットが意図したものから何らかの形で変更されたことを意味します。
さらに開発を行い、再デプロイすることで、バグ*を修正できます。ここで、ビットはそれらが意図されていたものです。彼らは私たちが彼らに必要なことをしません。
*もちろん、これはバグがソースコードの欠陥を意味し、リレー接点間に詰まった蛾ではないことを前提としています。
バグとは、ソフトウェアが、プログラマーが望んでいたことではなく、プログラマーが指示したとおりに実行することです。
破損とは、おそらくハードウェア障害、またはソフトウェア開発に直接関係のないその他の問題が原因で、ソフトウェアがプログラマーに指示された以外のことを行う場合です。
おそらく、「ソフトウェアの破損」が意味するのは、ストレージメディアの障害などによる、実行可能ファイルの内容への意図しない変更です。
「バグ」とは、バイナリがソフトウェアベンダーまたは開発者によって提供されたオリジナルと同じであることを意味しますが、プログラミングエラーが発生したため、意図したとおりに動作しません。
私はプログラムを書き、それはコンパイルされ、あなたに送られ、あなたはそれをあなたのコンピュータにインストールします。しかし、途中でいくつかのビットが変更されました。それはソフトウェアの破損です。
バグとは、ソフトウェア開発者が犯した間違いです。
破損は開発者による間違いではありません。それは、配信後(または配信中に)何かがプログラムを変更したときです。ストレージの障害やネットワーク送信エラーなどの偶発的/良性の何かでさえもです。
2003年以降、ソフトウェアの破損という用語は、2つのソフトウェアモジュール間の望ましくない結合にも関連付けられています。DDDは、2つのソフトウェアシステム(またはDDD用語では「制限されたコンテキスト」)間の破損防止レイヤー(ACL)の作成を規定しています。システムAがシステムBと対話する必要があり、BのAPIが異なる設計標準、データ構造、および形式を使用している場合、ACLは、BのAPIの要素がAのコンポーネントを拡散および「破損」するのを防ぐ可能性があります。
この「破損」という用語の使用は、カンタス航空の72便の記事では明らかに意図されていませんでしたが、一般的な用語を明確にするのに役立ちます。またはそう私は願っています。