テストを良くしたいけど作業を増やしたくないとか言うクソ野郎には、とりあえず同値分割を教えとけ!!
ソフトウェアテストの小ネタ Advent Calendar 18日目です。
17日目は、kz_suzukiさんが書きました。
テスト設計する時に自分がよくハマってる事が載っていましたので、今後の参考にしてみたいと思います。
はじめに
最近、弊社で所属しているグループでテスト勉強会をやっていますので内容について書きつつ、タイトルのことを書きたいと思います。
ちなみに、弊社におけるテストの実情はこんな感じです。
- いわゆる組み込みソフトウェアの開発
- 主な開発範囲は、装置を制御するソフトと、操作するためのGUI、などなど
- 自分たちで開発、テストしている
- テストケースの再利用はない(きっぱり
- ソフトウェアのテストに関する知識は、基本情報処理技術者試験に出てくるレベルでは知っているが、JSTQB FLに出る内容は知らない(と思う)
(ちょいちょい実機テストで出る)前フェーズで見つかりそうな不具合や、客先不具合の対応工数をどうにかしたいと、今更ながら上役が思ったんでしょうねー(遠い目
自分は、今年序盤でTOCfEの社内勉強会をやって「仕事をする上での共通の知識の必要性」を実感していました。 同じようにテストの社内勉強会もやるべきと感じていたので、そう考えてくれたのはちょうどよかったです。*1
社内のテスト勉強会について
社内で行っているテスト勉強会について書いてみます。
勉強会ですでにやった内容・これから教える内容
- 同値分割、境界値分析
- デシジョンテーブル
- ペアワイズ法・直交表
これからの予定*2
- 状態遷移テスト、ユースケーステスト
- テスト観点、テストコンテナのワーク
勉強会の目標・方針
目標は「テストに対する共通の知識」を身につけることです。 これによって、各自のテストを見直すとともに、テスト方法をお互いにレビューできるようにしたいと考えています。
最終的には「我々のチームで納得できるテストをするには?を一緒に考えられること」を目標にしています。
勉強会の方針は、こんな感じにしました。
- 教えることの要点を絞る
「ソフトウェアテストでは、たくさんすることがあるんだよ」と思わせるような内容にしていません。*3
グループメンバーが今不足していることの認識、メンバーができる範囲で考えられる程度に留めています。
一度業務に適用してみて、うまくいかないなら原因を考える、足りないものが見つかったのなら新しい道具を出す、くらいで良いと思っています。
- ただし、てめーの脳みそで考えさせる・意見を出させる
勉強会の後は自分たちの業務に適用するのですから、最終的には自分たちで答えを出した方がよいです。
なので、ワーク中心でやって、分からないことがあれば納得するまで話し合うようにしています。
答えがないということは強調していますが、個別化されないように注意した方がいいですね(個別化されると議論しない可能性があるため)
- 完璧な資料は用意しない
一番の理由は、ソフトウェアテストを適切に教えられるほど理解していないから(笑)
かと言って、ちゃんとした資料を作るほど、時間をかけても意味がない。*4
ちゃんとした内容を知りたいなら外部で偉い人・エロい人の話を聞けばいいと思うし、自分も間違いに気づいたらアップデートしていけばよいので、まずはチームメンバーのテスト知識の成熟度に合わせた資料にしています*5 *6
タイトルの話
勉強会自体は一通り実施する予定ですが、現時点では「同値分割(+境界値分析)だけでも十分効果があるだろう」というのが個人的な感想です。*7
同値クラスによる分類
開発者の設計の時点で、同値クラスで分類していた方がよいと考えています。
例えば、同じドメインの開発者同士(制御開発メンバー同士、GUI開発メンバー同士)ですら、詳細設計レビューで欠陥を見逃す場合があります。
「レビュー観点が少ない」ことが一つの原因として考えられますので、「同値クラスを分類する・名前をつける」ことができれば、そこから議論が始まるのではないか、と考えています。
無効値の意味
特に、無効値については明確にした方がよいと考えています。
例えば、I/Fを提供する側の設計では、
- 0~255までは有効値
- それ以外は無効値
と仕様にしたとしても、「無効」の意味によっては呼び出してしまう可能性があります。
- I/F提供側「そもそも、ありえない入力(入力されることは想定していない)」
- I/F利用側「提供側で入力の有効値判定があって、エラー(例外)で返ってくるはず(むしろ返って来てほしい)」
という考えの違いが、不具合を生み出しているかもしれないですね。
無効同値という単語が出たら、どんな意味か確認してみるとよいと思います。
実際、社内勉強会ではどんなワークにしたのか?
- 社内勉強会では、開発しているソフトを使って、同値分割や境界値分析のワーク課題にしています。
- ワークの課題の問題は、担当しているドメインによっていくらでも解釈可能な感じの曖昧さにしています笑。
- 答えをどのように導いたか話してもらい、そこから議論するようにしています。
結果的に、担当ドメインが変わると同値クラスが変わりましたが、同じ担当ドメインでも同値クラスに違いがありました^^;;
意図通り、メンバーには設計書作成とレビューの問題に気づいてもらえたかと思います。
おわりに
こんなことなら、JaSST'18 Kyushu行けばよかった^^;;