論文メモ Simple Testing Can Prevent Most Critical Failures

October 29, 2020

5つの分散システムのバグのうち198件を無作為に抽出、調査したところ、エラーハンドリングに対する単純なテストが有効であることが分かった。 198件のうちの48件は、論文でcatastrophic failuresと形容された、多くのユーザに影響を与える障害が占めた。 調査対象は、Cassandra, HBase, HDFS, Hadoop MapReduce, Redisの5つである。 catastrophic failuresの35%の原因は、エラーハンドラがログの出力だけしかしていない、過剰に上位の例外クラスが宣言されたcatch構文で例外を処理していること、例外にFIXME, TODOコメントがある、の3パターンに分類された。 Javaのバイトコードから以上の3パターンを検出するツールを実装し、9種類の分散システムに適用したことで、121件の未知のバグを特定することができた。

論文では、バグの調査で発見したことを12に分け、それぞれに考察が加えられている。 特に強調されているのは、上の3パターンのほかに、catastrophic failuresの92%が致命的でないエラーの不適切な処理に由来すること、58%はエラーハンドリングに単純なテストを書くだけで検出できたことがある。 さらに、non-catastrophicを含めたバグ全体でみると、74%は決定的な入力パターンで再現することができ、そのほとんどの再現は3つ以下のノードで十分だった。 77%のバグは単体テストで再現することができた。