テスターのプロフェッショナリズムについて(後編)
今回のnoteは、先日の技術書典で参加してたcrab inkの202Acceptedに寄稿したものの転載です。なのでnoteで無料なのもなんなので試しに有料にしてみます。
今回は、書いてくれと言われないと完成まで持っていけなかった書きかけの文章をこの場をいただくことで、なんとかすることができました!それに寄稿特典で、前回の分も含めてもらいました!ありがとうございました!
2021/8/22追記)この記事公開して2年経ったし、この内容の講演もなんどかさせてもらったので、もういいかなって思うので全文公開します。(講演依頼受ければやります!)
はじめに
前回のnoteにて、「プロとは、あるレベルの安定した供給ができる人を指すのだと思っています」と書きました。
また、そのために必要なこととして、「知識、経験」「テクニックや道具を使うスキル」「やり遂げるマインドセット」があり、さらに良い仕事をするために「バランス感覚」と「対象への愛情」が必要だと書きました。これをソフトウェアテストという仕事に当てはめてみるのが後編の主旨です。
ちょっと補足:今日Twitterで流れてきて読んだ、これだけ守ればみやすくなるデザインの基礎には、「センスとは知識と経験値」と書いてあり、あー、なるほどね、って思いました。
今回の内容は、ほとんど私自身の経験からくる独断になっています。
テストのスキル
TPINEXTの「テスト担当者のプロ意識」から再度引用します。そこでは、テストのスキルは「テストマネジメントスキルとテストエンジニアリングスキルに大別できる.」と定義しています。そして「テストマネジメントのスキルの多くは、標準的なプロジェクトマネジメントスキルだが、テストマネジメントとプロジェクトマネジメントを区別するものは、二つある」と書いています。それは以下の二つです。
1、テスト対象を本番リリースした後のリスクに関して考える能力
2、開発の都合にテスト活動を合わせる能力
また、テストエンジニアリングのスキルは、以下の二つだと書いてます。
1、テスト設計技法を適用できる能力
2、テストツール(環境構築や管理ツールなども含める)を活用する能力
テストエンジニアリングに関しては、TPINEXTで書かれていることの他に、帰納的な思考方法ができる能力を加えるのが良いと思います。
ちょっと補足:バイザーのソフトウエアテスト技法の1章の最後の「テストの目的を絶対的な正当性証明から、現実的な品質保証、すなわち、帰納法から演繹法へ変更する必要がある」という文章は私たちの間では最も有名な誤訳です(ただ、元の英文が今入手できないので、辰巳さんに教えてもらおうかな)。 帰納的、演繹的思考については、英語のDeductiveとInductiveの意味を調べるのがわかりやすいと思います。
これらのスキルがあってこそテストのプロだということなんだと思います。
4月21日追記:辰巳さんがバイザーの原文を教えてくれましたのでここに貼り付けておきます。ありがとうございました!
バイザーの原本と言ってるのは、ソフトウェアテスト技法という本のことです。1990年に出た古典ではありますが、テストのプロを目指すのであれば、絶対読むべき本です。同値分割や境界値分析、デシジョンテーブルや状態遷移テストのような技法についても当然そうですが、カバレッジの考え方、欠陥をどう分類するかとか、テストレベル、殺虫剤のパラドクス、デバッグとテストの違い、構造テストと機能テストの違いとか、JSTQBのFL試験に出てくるようなソフトウェアテストの基礎的な考え方のベースの多くはこの本にあると言っても過言ではないでしょう。
プロとしての能力があるかではなく、プロ意識を持つこと
TPINEXTという本を翻訳する際に、プロフェッショナリズムを私は「プロ意識」と訳しました。テストのプロであるということは、テストの技術を使って提供するものの対価でお金をもらうと言うことだと思います。プロとしての自覚、もしくはプロになるための姿勢がプロ意識です。今の時点の自分の能力がどれほどプロとしてのレベルにあるか?よりも、プロとして必要なことを自分で決めたら、必要なことがどれだけ身についているかを自覚し、足りなければ学ぶ、実践するといったことを繰り返していくことこそが重要だと思います。多分、そういう意識がないと能力が陳腐化してしまうのではないかと思うからです。
必要なことその1: 知識、経験
私は、これらを過去からの学びだと考えています。先人のひとたちが研究、実践してきて積み重ねてきたものを理解すると知識になり、自分で理解したことを実践して自分の中に積み重ねたものが経験になるんだと思います。過去から学ばないと車輪の再発明を一生懸命することになってしまいます。成功したことも失敗したことも全て知識にも経験にもなるし、それらを実践して自分の中に積み重ねていくことで未来に役立てることができます。
知識や経験は、自分の中に積み重ねたものから応用ができるように、分類して体系的に蓄積していくことが大事だと思います。そんな時に便利なのがテストプロセス、テストレベル、テストタイプといった基礎となる概念の理解です。ソフトウェアテストといっても、例えば自動車に搭載されたソフトウェアのテストと、財務会計ソフトウェアのテストなど、領域によって似て非なるところが多々あります。現場でやったテストのもろもろの成功例そのままでは、いろいろな領域のテストに応用できません。なので自分の経験を生かすために学んだ知識を整理しなおすのです。
テストに関することで知識や経験を積み重ねる例を示すとすれば、「どのようなテストをするとどのような欠陥や故障が出るか?」と言うことがあると思います。例えば、ソースコードに初期化処理が漏れている欠陥があると、何回か計算を実行していると計算結果がズレてくるといった故障を引き起こすかもしれません。そして、この故障が、利用者にとってのビジネス上の機会損失につながるかもしれません。こういう欠陥や故障に関する知識や経験を積み重ねていくと、「このアプリケーションは、こんな処理をさせるとマズイことが起きるのではないか?」といったことが推定できるようになるのだと思います。テスト技術者は、欠陥や故障に関する知識が他の技術者より豊富であることが大事です。
「何をどこまでテストするか?」を決めることも、テスト技術者、テストマネージャー共に知識や経験の積み重ねが必要になるところです。プロジェクトとしてのテストのゴールの設定、テストレベル毎の範囲決め、テスト条件の識別、パラメーターや値の洗い出しや組み合わせまでの各粒度で「何をどこまで」があり、それぞれで自分が持っている知識や経験を応用して、直面している状況に対して適用していかないといけないです。
まずは、少なくとも一つは詳しい領域や分野を持ち、知識や経験を自分の中に積み重ねていくのが良いと思います。そして上手く応用させて使いまわし続けていけるようにすることこそがプロ意識なのだと思います。
必要なことその2:テクニックや道具を使うスキル
これらは、いわゆる「具体的にどうやるか?」、つまり「How」だと思います。私は2016年のJaSST九州での講演で、エンジニアリングの三要素として「プロセス」と「人」と「道具」があると説明し、それらの関係として、「プロセス」を上手くやりとげるために「道具」を発見、発明し、「人」が道具を習得することが必要であるという話をしました。複数の人たちで仕事がうまくできるように作業順序やアウトプットを定義(これがプロセス)しても、プロセスを効率よくやり遂げるためには、道具がないと逆にプロセスが足かせになってしまうことが多くあります。例えば、テスト設計というプロセスがあり、そこでは、デシションテーブルや状態遷移テストといった技法を使ってテストケースを使ってテストケースを作ることができるっていう話があります。これらを実践で使う際には、モデルを書けばパラメーターの組み合わせが自動で表になって出てきて、テストケースとして使えるようになるツールを活用すると非常に作業が早くなります。
さらにもっと細かい話で例えてみます。例えば、テストデータを作成する時に、1件のデータをつくるなら仕様書を見ながら人手で作れるものでも、100万件の同じようなデータをつくるならどうしますか?このようなときに、テキストエディタのマクロを使ってデータを作る方法を知っていれば、一瞬で作ることができますが、マクロの作り方をしらないとそう簡単にはできなくなります。
テストの自動化が必要だという話はわかっていても、Seleniumで本当にスクリプトを作るときは、エディタの環境をどうやって準備するか?、オブジェクトのXpathをどうやって取得するのか?、アサーションはどういう仕組みで行うのか?、安定したテスト実行環境をどう運営するのか?といったことが必要になります。
更に、もっと今時っぽく言えば、バグが出た時にGithubやSlackを使ったコミュニケーションをするとか、AWSを使ったテスト環境の構築など、新しい道具を使いこなすとエンジニアリングもマネジメントも効率がまったく異なります。
列挙に暇がありませんが、常にどんなことでも知っているっていうのは難しいと思います。私も知らないことだらけです。前述したように、少なくとも一つは得意で詳しい分野を持つのがまずは重要だと思いますので、そこに関しては技術や道具に関しても詳しくなった方が良いと思います。
必要なことその3:やり遂げるマインドセット
「知識や経験」「テクニックや道具を使うスキル」は基礎体力のようなものであるのに対して、やり遂げるマインドセットは、プロとしてお金をもらってその対価を供給するためのプロ意識だと思います。やり遂げる際には、メンタル面の力も試されます。
仕事を行う上で、何もかもが思い通りに行くことはありません。なので、自分たちの身の丈で出来ることをゴールとして設定してやり遂げます。テストに特化して言うと、前述したTPINEXTで書かれているテストマネジメント特有の二つのスキルがゴールの設定にも大きく影響します。テスト対象のリスクと開発の状況で、設定したゴールは動的に変化するからです。変化するからゴールの設定をしなくてよいのではなく、変化に対してコントロールを可能にできるようにゴールの変動要因を可視化すると行った対処を行うべきです。
やり遂げるためには、設定したゴールまでにどれだけの仕事があるかを把握し、「この仕事をこの時期までに終わらせるためにはこのタイミングでここまでやっておかないと大変なことになる」と判断すれば、土日に休日出勤してでもやっておかなければならないことはやるといった、決めたことを実現できるための最大限の努力をすべきです。その代わり、順調になれば、その分休むと言ったメリハリは忘れてはいけません。これは後で書く「バランス感覚」にも通じるかもしれません。
設定したゴールを実現できるかわりに、設定した範囲を超えるものは、超えていると周りに宣言し、時間を伸ばせば良いのか、人を増やせばできるものなのか、優先順位を決めて範囲を狭めればできるのか、といった代案を出すことも必要です。「できない」のではなく、本当に必要なものは何かを考えて、「どうやったら何ができ、どこまでは達成できる」ということを発想するのが必要で、それには訓練が必要です。また、この発想を周りに説明して理解を得ていかないといけません。これがメンタル面の力です。他の人が自分と同じ考えをもっていないこともあり、思い通りにならないことも多々あります。意思を強く持って、他の人の意見に流されないための技術や道具、例えば論理的に説明する技術などを身につける必要もあると思いますが、本当に大事なのは、テストに関する「知識や経験」「テクニックや道具を使うスキル」といった基礎を固めておくことであり、それらが自分自身の意見を支えるのだと思います。
さらにあると良いことその1:バランス感覚
少し前述しましたが、これは、やり遂げるマインドセットを守るために必要だと考えています。
プロ意識が強くなると、「自分の基準では、ここまではやらないとプロの仕事だとは言えない」と思うようになると思います。それは非常に良いことだし、大事だと思います。しかし、似たような仕事だとしても、1万円で受ける仕事と100万円で受ける仕事は違います。両者の「何を持ってやり遂げた」というのが違ってもよいのです。そうしないと、100万円を出してくれた人に失礼です。「プロとは、あるレベルの安定した供給ができる人を指す」と冒頭に書ききましたが、一発屋ではなく「安定して供給」するためには、バランス感覚がないと疲弊してしまい体が持たず、破綻してしまいます。
ビジネスとして仕事をするためには、高い金額で提供できるものが何かを明確にして、提供するものに高い値付けをしてもらえる人に対してその金額に見合った仕事をする、という心意気が重要だと考えます。
ただし、単なるその瞬間に得られるお金だけの話で片付けてもいけないと思っています。その仕事の意義を見いだすことが大事です。お金だけの問題ではなく、技術的な学びに投資するために必要であれば、いくらもらうかではなくなることもあります。その投資によってつけた技術力で、効率的に短期間で高い効果が出る仕事ができるようになるはずです。
また、仲間の技術力を上げる、技術者の人脈を作るといったことで、いつか一緒に大きな仕事ができるために投資する(つまり、想定とは金額が合わなくても将来のためにやる)というような判断基準も必要だということです。
このような、自分への投資をすると言う考えも必要で、そのためにも安請け合いの仕事だけで疲弊してはいけないとも言えそうです。
さらにあると良いこと2:対象への愛情
これは人により異なるかもしれません。愛情がなくてもプロ意識は持てるだろうし、プロとして活躍できると思います。ただ、テスト対象がどう使われていくかとか、なぜこれが必要なのかといったことを理解していくことはとても重要だと思います。
物事になんでも時間をかければ良いとは思いませんが、テスト対象のことを理解するためには、単なるテストの準備とは違うことをしていくことも必要です。そこを惜しまないのがプロ意識なのかもしれません。
ある程度の時間をかけて、テスト対象への理解が深まると、愛情が湧いてくると思います。そういう気持ちがテスト対象に持てるようになると、やる気を高める起爆剤になるはずで、いざというときに頑張れるパワーの源になるのではないかと思っています。そして、テストする際にも単なる仕様との合致はちゃんとやるとして、それだけでなく、テスト対象をテストした時の動作が、(たとえ仕様とあっていても)本当に利用者にとってよいことなのかを「自分が使って良いと思えるか?」という感覚で考えられるようになると思います。そういうテストができる人は強いと思います。
まとめ
プロ意識として必要な「知識、経験」「テクニックや道具を使うスキル」「やり遂げるマインドセット」そして、さらに良い仕事をするために「バランス感覚」と「対象への愛情」について、テストを例に説明していきました。
最後に、言いたいことを一言でまとめると、うわべだけの薄っぺらなものでない、中身が詰まった技術者として仕事できるようにして、それに見合った対価を得るような気持ちで仕事できるのがプロ意識です。「知識、経験」「テクニックや道具を使うスキル」が薄っぺらいものにしないための技術的基盤です。「やり遂げるマインドセット」は、プロとして人からお金をもらうためのエチケットです。「バランス感覚」がプロとして安定して供給し続けることであり、「対象への愛情」が、精神論的ですが、いざという時に頑張れる、やる気の源になるのかと思います。
--------------
最後まで読んでくれてありがとうございます!本記事がよかったよー!という方は是非ポチッとしてくださいね!
ここから先は
¥ 100
サポートありがとうございます。これをカテにこれからも頑張ります。