ソフトウェアの品質を学びまくる2.0

旧ブログからゆっくり移行中です。http://blog.livedoor.jp/prjmng/

TABOK粗読による自動化の座学 - カテゴリー11「エラー処理」

 カテゴリー11のテーマは「エラー処理」。
 カテゴリー7でくどいほど言われましたが、テストが途中でコケることは、多くの品質属性においてダメとされます。バグを見つけて直しておくのが、カテゴリー10。それでも想定外の動きが現れたときに、自動テストを立ち直らせるために必要となるエラー処理が、カテゴリー11です。
 一般に、「error handling」と「exception handling」は同じ意味で使われることもありますが、TABOKでは区別しているそうです。
 また、カテゴリー10では「error」を「欠陥」に近い意味で使っていましたが、「error handling」が対象とするのは、スクリプトやテスト対象プログラムの欠陥だけでなく、「予想外のタイミングで現れるWindows updateのお知らせ!」といったものも含みます。
 TABOKではこのエラー処理を、4つの要素に分けています。
  1. 復旧のトリガー
  2. エラーからの復旧
  3. エラーの記録
  4. スクリプトの復旧
 エラーの復旧とはスクリプトの中でエラーから復旧することで、スクリプトの復旧とはテスト全体の流れがコケないように復旧することを指すようです。

エラー処理のタイプ

 TABOKでは、エラー処理の実装方法を、以下の3つに分けています(意訳)。
  • 段階型(step implementation)
  • コンポーネント型(component implementation)
  • 同時実行型(run implementation)

段階型

 エラーの起こりそうな場所にアタリがついているときの実装方法。エラーが起こる場所がわかってるなら直せよ・・・と思うかも知れませんが、ここでの「error」は「予期せぬできごと」。TABOKでは、ログインしようと思ったら、誰かがパスワードを変えていたためにログインエラーが出る、という例を挙げています。

コンポーネント型

 ここでいうcomponentとは、カテゴリー4で説明のあった機能分解(functional decomposition)のcomponent。コンポーネントごとに、問題なく動作しているかのチェックを入れることで、それを結合して作るスクリプト全体を強くするという発想です。

同時実行型

 スクリプトの外からその実行状態をチェックし、しかるべきときにエラー処理を行うもの。エラー処理の大半は、この方法で行うとしています。チェックはそのまま、スクリプトの実行性能の劣化につながりますが、それを回避する方法についても説明されています。

エラー処理の開発

 ではこれらのエラー処理を、どのように実装していくかは、以下の4つのステップになります。
  1. 起こりうるエラーの見立て
  2. エラー検出機構の定義
  3. エラーログの作成
  4. エラー処理ルーチンの作成

起こりうるエラーの見立て

 スクリプトを止めるエラーの種別を知っておきましょう。TABOKでは、「いきなりクラッシュ」「ポップアップ」「オブジェクト空振り」「検証ミス」の4つに分けて、それぞれの特徴を解説しています。

エラー検出機構の定義

 エラー検出機構とは、エラー発生の識別・エラータイプの特定・エラー処理ルーチンへの引渡し。これは例外処理の考え方と同じです。

エラーログの作成

 これはカテゴリー14のテーマですので、別途。

エラー処理ルーチンの作成

 エラー処理を、具体的にどのように記述するかについて、いくつかの表現の例を解説しています。特に、エラーと判定された際に、どのようにエラー処理ルーチンに飛ばすかですね。

 さあ、いよいよ次回で最後ですかね。