ソフトウェアにまつわるエラー

ソフトウェアに関するエラーの種類をググってみたが、あまり見つからない。

参考までに、私の認識を示したいと思う。手前のものほど原始的であり、一般には検出しやすい。

 

・シンタックスエラー コンパイラが静的に検出できる。
   if 文のない else は誤り。
   代入または呼び出しでない式は文ではない。

コンパイルエラー コンパイラ(とリンカ)が静的に検出できる。
   未定義メソッドの呼び出し。
   同じシンボルの重複した定義。

シンタックスエラーとコンパイルエラーのないプログラムは実行可能である。

 

・セマンティクスエラー エンジニアが静的に検出できる。
   UIボタンのハンドラ内で長時間処理するのはエラー。
   シングルトンのメソッド呼び出しを排他しないのはエラー。

・ランタイムエラー 基本ソフトウェアが動的に検出できる。
   NullPointerException
   セキュリティ関連の違反。

・実装エラー エンジニアかテスターが動的に検出できる。論理エラーとも言われることもある。
   境界値において計算結果が正しくない。

セマンティクスエラー、ランタイムエラー、実装エラーのないソフトウェアは「正しい」と言える。

 

・仕様エラー ユーザが検出できる。
   自分の組織では「姓」「名」の他に「ミドルネーム」が必要だった。

・オペレーションエラー システム内の整合性で検知できることもある。
   ダイアログで「NO」を選んだが、正しくは「YES」を選ぶべきだった。

仕様エラーやオペレーションエラーの少ないシステムは「優れている」と言える。

 

・ヒューマンエラー 外部環境との整合性でしか検知できない。
   「高橋」というヒトのデータを間違って「高端」と入力した。

ヒューマンエラーを誘発しにくいプロセスは「洗練されている」と言える。

 

 

なお、世の中には「セマンティクスエラー」に関する定義が散在している。たとえば、「NULLポインタを参照するようなエラーは構文エラーではないのでセマンティクスエラーだ」というもの。しかしそれは単にランタイムエラーを人間が推論した結果に過ぎない。私が納得する定義は容易に見つからなかったので、次のエントリあたりでさらに詳説したいとおもう。