2013年12月22日日曜日

テスト方法論の位置づけ

先回の投稿に続きWACATE2013冬の話。
ブログの都合上実際のプログラムとは違う順番で書くことにする。

2日目最後のクロージングセッションでSQuBOKをはじめとした知識体系が紹介された。自宅にもSQuBOKの本はあったがしばらく読んでおらず、取り上げられるということで直前に少しだけ読んでいた。もっとも、本はあくまでもガイドであるということが強調されていた。本当に詳しく知りたいなら参考文献にあたる必要がある、ということだ。

確かに、膨大な知識体系を全て吸収して使える状態になっていればよいのだが、実際にそんなことができる人はほとんどいない。各人の職務や関心に応じて一定のレベルまで知識を持っておき、その先が必要になったら文献にあたる、という使い方を想定しているようだ。もっとも、手法があることを知っていてもベースとなる考え方がないと必要なときに吸収できないし、適切なときに文献を参照する、ステークホルダーに相談する、といった行動をとれるようにするためにもある程度のスキルが必要なのだろう。

私が業務の中でテストに関係して一番問題だと思うのは計画段階でテストすべきことをもれなく抽出することである。最初の段階で間違ってしまったら、その後でどれだけ(技法などを使って)詳細を詰めても十分にテストできないことになってしまう。不覚ながら知らなかったが、テストの研究も優れたエンジニアの思考方法を抽出する、という方向に向かっている、という話も聞いた(文脈を無視してはいけないのかもしれないが)。

発想が問われる問題なので、方程式を解くようなやり方は通用しない。そもそも創造性が問われる状況に対してどのようなアプローチが可能なのか、という問題は以前から疑問に思っていたことである。如何に考えられた話であっても、話を聞いて疑問がすべて解消する、というようなことは期待できないが、学んだこと、考えたことを書いてみたい。

テストの観点をめぐる2つのセッション


テストすべき観点を抽出する、ということに関係する話としては、1日目の「リスクベースドテストを活用しよう」と2日目の「探してみようテスト条件」があった。前者については講演者によって資料が公開されているので、興味を持たれた方はこちらを参照していただきたい。

「リスクベースドテストを活用しよう」 は講義と演習の形式で行われたが、「事象の原因(ハザード)」「事象」「危害」の区別のあたりから少し食傷気味。例題としてネットゲームの話が出てきた が、筆者自身は全くやらないのでアウェーな感じ。席が一緒だった方の一人はゲーム会社に勤めているとのことで、知識としては全く太刀打ちできないが想像力を働かせて考える。

演習では重大度と発生確率の検討、 危害のリストアップ、それから危害シナリオの検討、リスク管理表の作成を行ったが、意図としては重大度と発生確率の検討、 危害のリストアップは危害シナリオより前に、独立して行う、ということだったようだ。確かに考えた危害シナリオに引っ張られてそれ以外のリスクが出てこない、といった可能性もありそうだが、筆者の場合シナリオの方が先に思い浮かんでしまった。

「探してみようテスト条件」ではラルフチャートを使ったテスト条件の洗い出しが講義と演習で扱われた。ラルフチャートはソフトウェアテストではHAYST法で使われる。条件の洗い出しが目的であればマインドマップやブレインストーミングなど他にも方法はいろいろあるが、個人的には好きなやり方である。もっとも、演習で手を動かしてみると渡された仕様書に書いてある内容から洗い出すことはできるが、それ以外のことになかなか頭が回らない。
個人ワークの後で各人が書いたものを持ち寄ってグループワークを行ったが、自分が気づかなかった条件を書いていたりして、まだまだ甘いなと思った。それと同時に、複数人で見ることによって一人だけでは抜け落ちてしまう部分をカバーするというチームとしての使い方を身をもって体験した。(もっとも、チームとして使うことを前面に出すなら、よりインタラクティブに進めることもできただろうし、今回のワークの中ではおまけくらいに考えたほうがよい。)

各方法論の関係性

ラルフチャートの使い方として、「ノイズ」や「アクティブノイズ」を条件として考慮する、という話もあり、その中にはシステムのクラッキングやネットワークの切断なども含まれる。突き詰めれば、あえてリスクベースなる概念を使わなくてもリスク低減を図ることはできてしまうのではないか?一方、リスクベースの「リスク」の概念を拡大していけば、仕様ベースのテストとの境界もかなりあいまいになるのではないか?といった疑問も出てきた。論理的にはそうなのだと思うが、人による違いはあるにせよ、問題によってアイデアが出やすいツールがあるので、道具箱に沢山道具を持っておき、必要なときに使えるようにする、ということでよいのだと思う。

ソフトウェアテストの方法論については、例えばこちらにあるように、日本だけを考えても方法論が乱立している、という印象である。(大御所の先生方に対して)それが悪い、と言いたいわけでは全くなく、むしろ、各自の経験や思考方法の違いに応じて、それぞれ自らが納得でき、かつ他の人にも使える方法論を考えている、ということなのだと思う。
アジャイル開発におけるテストの話も少し出ていたのでアジャイルテストの本(これとか)を見直してみたが、 計画段階から詳細な技法レベルまで、「抜け漏れのないテストを行う方法」についてはほとんど記述がなく(!)、その一方でチームとしての協力の仕方や(自動化関係だけでなくアナログなものを含む)ツールの使い方などはストーリーを含めて豊富な記述がある(少なくとも筆者にはそう思える)。

アジャイル開発ではスキルもモチベーションも高いエンジニアが開発に参加するから、詳細な技術は必要になったら学ぶ、ということでテスト条件の抽出などは対象外としているのだろうか。あるいはクリティカルなシステムにアジャイル開発が適用されることは少ない、ということも影響しているかもしれない。

逆にテスト方法論を考える側は重いフレームワークを作っているように感じる。実際には一人でフレームワークに従って進める、というものではなくチームとして品質を保証していることは認識されているが、一人で完結させる前提のときと複数人で互いを補う場合とでは立ち位置は微妙に変わるのではないかと思う。

ソフトウェア開発が扱う仕事の幅は広い。それを単一の方法論でカバーしようとなると、どこかで現実に合わない部分ができるか、実務に使えない抽象的なものになるか、あるいは異なる前提に基づくものの寄せ集めになる可能性が高い。その意味で、クロージングセッションでも紹介されたSEMATのように、異なるプラクティスを組み合わせるという進め方は有効なのだろう。その際にはプロジェクトや個人、チーム、組織の状況に合ったものを採用する必要がある。それも「○○のときは××」といった機械的なものではなく、メンバー間やステークホルダーとの関係も考慮したものになるだろう。

個人と書いたのは、少し話がそれるが、以前あるイベントに参加したときに、どうしてもマインドマップが使えない、と話している方がいたことを思い出したからだ。その方ができることとしては、 無理やりにでもマインドマップを習得する、あるいはマインドマップを使わなくても豊かな発想ができる方法を身につけるなどである。どうするのがよいかは脳というハードウェアの構造次第である。それほど極端ではないにせよ、人による向き、不向きはあるので、外部の状況だけで一概にこのやり方がよいとはいえない。

以上、WACATEで学んだこと、考えたことを独断と偏見に基づいて書き連ねてみたが(一応今回の投稿で終わりのつもり)、ある程度はつながったかなと思う。Scienceの言葉で表現しようとすると一部しかできなさそう(むしろArtに近そう)だが、本当に奥が深い世界である。改めて関係者の皆さんに感謝するとともに、日々の業務で使えるようにしていきたい。

2013年12月16日月曜日

QAの論理、アジャイルの論理

一昨日、昨日とテストエンジニアのためのワークショップWACATE2013冬に参加してきた。
諸々の事情から参加は3年ぶりで久しぶりの再会という方も多く、 楽しかった、疲れたとともに懐かしかった。参加者、セッションの担当者・講演者、スタッフの皆さんありがとうございました。
学んだこと、考えたことを忘れないうちにブログを投稿することにする。

なお、今から書く内容はワークショップのセッションや分科会での話し合いなどから個人として考えたことであり、WACATEの全体像や雰囲気を再現するものではなく、時系列的に並べたものでもない。
また、投稿内容に含まれる誤りや意味不明な点はすべて筆者個人の責任である。

夜の分科会でのこと

夜の分科会(私はその一つに参加)の際に、ある参加者がQA(品質保証)として自社のソフトウェア(プロダクト・プロセス)に統一した基準を作り、守ってもらうことで品質を向上させたいと話していた。それについて別の参加者が結局は人に依存ものであり、基準を作ったとしても最低限のものでしかないと話していた。後者の方とはその後でも話す機会があり、(私が曲解したところもあるかもしれないが)大体の考え方を理解できたかと思っている。

私自身は以前テスト、品質保証を担当していて、プロセス改善などを行っていたこともあり、またアジャイル開発(本当のagilerの方から見ればfakeだとは思うが)に取り組んだこともあり、双方の利点や前提条件をある程度理解できる立場にあると思っている。

QAの論理としては、かなり大雑把にまとめると、開発チームは顧客や経営陣などからプレッシャーにさらされていて、開発者だけに任せていると期待に(少なくとも表面上は)応えるために品質をおろそかにする傾向がある、だから第三者が品質を守らせなければならない、ということになる。

一方、アジャイルなどを実践する開発者にとっては、プロジェクトによって正しいやり方は異なる、プロジェクト固有の事情を知らない第三者が口を出してもデメリットの方が大きい、さらには標準を守らせるという発想では守らせること自体が目的と化し、本来の目的が見失われるといったところだろうか。もちろんアジャイル開発でも「テスター」という役割は存在するが、開発チームの一部としての位置づけである。

私としては、特に人間にかかわる理論や思考については、一般化されたものであれば、ソフト開発に限らず、完全に間違っていて学ぶところが何もない、といった考え方はほとんどなく、 問題なのはどのような前提に基づいていてどの範囲で適用できるか、またどれだけ意味内容を持っているかだと思っている。どこまで成功するかはともかく、この観点から検討する。

コインの両面としての現実主義、理想主義

QAの論理は基本的には現実主義に立ったものだと思う。開発者が自らを律することは不可能、もしくは非常に困難だから、第三者の力を借りるしかないということなのだから。こうした考え方は三権分立や社外取締役の設置などソフトウェア開発以外の世界でもみられるものであり、ある種の知恵に基づくものである。ただ、上にあげたようなQAの論理(少なくとも洗練されていないもの)はその裏に素朴な理想主義も含んでいるように思える。

まず、QAに対する抑制と均衡が働いていない。QA自体がセクショナリズムに陥って自らの存在意義を示すために(と意識はしないかもしれないが)必要以上に開発に介入する、という可能性が考慮されていない。 また基準や標準の浸透が必ず品質の改善に結びつくというのも楽観的に過ぎる。(開発効率を示す指標としてコード行数が測定されているから、無駄にコードを書く、といった冗談を話すこともある。)

一方のアジャイルモデルは開発者(チーム)が自律的に品質を高めていけると考える点では理想主義的であるが、QAのような第三者がプロジェクトに貢献する能力や可能性については懐疑的であり。また、遠い昔に他人によって決められた重いプロセスや基準を現在の開発者(およびQA)が自らのものとして受け止めてその精神を守り、発展させていく可能性については悲観的である。


協力とモニタリング

以上に書いたことから、少なくともQAが自らが決めた基準を杓子定規に適用して開発チームを批判する、というのは正しくないものの、状況次第という面はあるが(アジャイル開発における「顧客」とは別に)品質を守るための第三者が必要な場面は多いと思う。その場合、QA(またはそれに似た立場の人)としては、開発者とどのように協力するかが課題となる。

プロジェクトについての十分な知識を持ち、かつ品質を守るために必要な意見を述べ、チームを動かす、というのが理想的な姿ではあるが、以下の理由から通常はあまり現実的ではないと思う。
  • チームメンバーであってもプロジェクトや開発の詳細をすべて知っているわけではない。特にパートタイムでプロジェクトにかかわる場合、知識が不足することは避けられない。
  • プロジェクトや開発内容にあまりに精通してしまうと、第三者として考えられなくなる。
もしこれができるなら開発者としても自ら規律をもって品質を高めることができる、 よってQAは不要、ということになるだろう。
より現実的なのは、開発者とQAが異なる情報を持ってコミュニケーションを行い、望ましい解決策を探ることだが、コミュニケーションに多少のコストがかかるとしても、画一的な基準の押し付けとなれ合いという両極端を避けるには必要なことなのだと思う。ただ、コミュニケーションの中身についてここで一般的に述べることはできない。個人間の関係によるところも大きいだろう。

小結

ここまで品質保証体制の背後にある前提を抽出しながらそれぞれのメリット、デメリットを考えたが、各種の前提が成り立つかは人次第である。(ただし、同じ人でも何らかのきっかけで変わることはあるかもしれない。)

開発や品質保証の体制をどうするかはプロジェクトの性質に依存するのはもちろんだが、メンバーにも依存するものであり、正しい方法は一つには決まらない。個人も組織も良い面と悪い面は表裏一体のことが多く、良い面だけを伸ばして悪い面は現れないようにするというのは(追求には値するが)簡単ではない。

WACATE1日目のBPPセッションとセッション2では相手のタイプによって接し方を変えることの必要性が説明された。BPPセッションでは「炎上駆動改善」なる方法が紹介され、意識が高くない人も改善に巻き込むための方法が解説された。これもメンバーの動き方についての仮定に基づいた方法論である。自分自身も理由をつけて改善を先延ばしにすることがあるので注意しなければならないと思ったが、意識が高い/高くない、というだけでなく、あることに意識が向いている人、別のことに意識が向いている人、…という面もあると思っている。付け加えるとすれば、相手だけでなく自分についても自分に合ったやり方、合わないやり方があると思う。

他のセッションについても(これもセッションの内容からは離れることになりそう)書きたかったが、時間がかかりそうなので後で別に投稿することにしたい。