テスコンに一人で優勝してみた

冒頭から煽るようなタイトルとなってしまいすみません。
タイトルの通り、テスト設計コンテスト2023 OPENクラス(以降、テスコン)に、ソロで出場し、優勝という結果をいただきました。
過去12回の開催のうち、初出場にして一人で優勝したのは初めてのようです。
これは誤りで、既に一人チームで優勝されているチームがあるとのことです。

このエントリーでは、審査裏イベントでも少し話した、何故テスコンに一人で出場しようと思ったのか?実際出てどうだったのか?について書いていきたいと思います。
一人でも多くの方にテスコンに興味を持っていただき、(独りでも)出場をする人が増えたら、今後のソフトウェアテスト業界の発展に繋がると考えているからです。

審査について

審査員の方が述べられていたように、今回は、決勝のプレゼンテーションで順位が入れ替わる可能性が充分にあり得るくらい接戦だったようです。
会場で成果物を拝見させていただいても、ドキュメントの出来栄えはどのチームも素晴らしく、どのチームが優勝してもおかしくないと感じていました。
それと同時に、私は優勝なんて無理だろうとタカを括っていたので、結果を聞いた時は、何もコメント準備してなくて、あたふたしました。

出場されたチームの皆さん、本当長い期間取り組まれた成果物の作成や準備、大変お疲れ様でした。
また、実行委員の皆様におかれましては、テストベースのご提供と、ハイブリッド開催の運営の両面で大変お世話になりました。ありがとうございました。

何故一人で出場しようと思ったのか

WACATEなどに出たことはなく、コミュニティにお友達がいない、つまりボッチだからです。
また、転職直後で会社の人を誘う勇気がなかったのもあります。

って別にボッチ自慢をしたいわけじゃないんです。

出場のモチベーションは、3つありました。

1つ目は、前回のテスコンの審査委員の湯本さんの講評です。

note.com

誤解を招く可能性もあるため引用はしませんが、 ソフトウェアテストに対して強い想いを持っているからこその、厳しいコメントだと受け止めました。

ソフトウェア開発においては、昨今のOSSの普及などにより、他人の書いたコードを見ることのできる機会は確実に増えました。
一方で、ソフトウェアテストにおいて、現場以外で、他人の作ったテスト設計を見ることのできる機会は少ないように感じます。
テスコンは、その機会を提供してくださる貴重な場でもあると考えています。

テスコンを聴講される方はさまざまな目的を持って参加されていると思いますが、
一つの目的例として、現場や自分自身のテスト設計をより良くするためのヒントを得るために参加されているものと考えています。
私自身も聴講者として参加していた時は、そのような目的意識を持って参加していました。

だからこそ、エンドユーザも含むステークホルダの要求や、システムのアーキテクチャをしっかり捉えるテスト設計を示したかった、それが1つ目のモチベーションでした。

2つ目、OPENクラスの新しいテストベースが興味深い内容だったからです。

感染症対策のため入場者の制限を行う動物園の入場管理システムが対象でしたが、
開発の体制、スコープ、マイルストン、制約事項などが定められており、
実際のプロジェクトに近い状況でテスト設計ができるということにとてもワクワクしました。

3つ目、エントリー前に、やまずんさん(@55_ymzn)、ぐんちゃさん(@gun_chari)とお話する機会をいただけたことです。

テスコンに関しては先輩のお二人とお話できたことが最後の一押しになりました。
自分よりも若い方が、色々なことに果敢にチャレンジしている一方で、自分はこれまで勝手に壁を作ってチャレンジを恐れていた、
そんな壁を少しでも壊したいと思い、エントリーを決めました。

ソロでよかったこと・大変だったこと

複数人で参加する難しさ、ソロで参加する難しさ、それぞれあると思います。

ブレスト・議論・意思決定

複数人で参加する場合、複数人でのブレスト・議論ができるというメリットがあります。
それはソロではできません。そして、自分が選択した方針が本当に良いのだろうかと悩んだ時に助言してくれる人はいません。

ただし、複数人で参加されたチームのメンバーの方とのアフタートークで、自分が納得できない方針で進んでしまったというお話も伺い、そこが複数人参加の大変なことだと改めて感じました。
プライベートがある中で、同期的なコミュニケーションを取るための調整も相当な労力ですよね。
全て一人で完結・意思決定できることはソロの最大のメリットだと感じました。

成果物の作成

複数人で分担して作業を進める場合、予め方針やテンプレート、どこまで情報を書くかなど事前に決めておかないと、成果物間の一貫性が崩れてしまいます。
進め方一つとっても、テスト要求分析、テストアーキテクチャ設計、詳細設計、実装のように工程毎に分担をするのか、
工程内で分担して作業を進めるのかも悩ましい問題です。
また、本業を抱える中で、プライベートの時間とどう折り合いをつけていくのかも、切実な課題です。 チームで参加してると、途中で離脱してしまうメンバー、期限までに成果物が出てこない状況が発生してしまうという話もよく聞きます。

ソロでは、そういった悩みを抱えることなく、一貫性を取りやすい、短時間でも作業に取り組めるのはメリットだと思います。
一方で、今回のテストベースのような大規模なテスト開発を一人で行なっていくのは、結構大変でした。
仕事の忙しさにかまけて、サボっていた時間もありつつも、去年のプライベートの時間はほとんどテスコンに費やしたように感じます。

私は片方の見方しかできないので、どちらが大変かはお伝えできないですが、 チームでコミュニケーションをとりながら、一つの成果物を作り上げた他チームの方はすごいと思いますし、リスペクトしています。

おわりに

この記事によってテスコンに興味を持ってくれる人が増えたら嬉しいです。

私が成果物を作るときに考慮したことや、技術選定の理由、作成した成果物の詳細な説明はさすがにプレゼンの15分では語りきれなかったので、またどこかで書いたり、発信できるとよいなと思っています。

最後まで読んでいただきありがとうございました。

ソフトウェアテストはQA(品質保証)の手段の一つでしかないと言われるけれど、QAってなぁに?

QA(品質保証)とテストの違いについて述べたコンテンツはたくさんありますが、自分自身の言葉で整理することを目的に記事にしたためました。
なお、QAに関する具体的なアプローチについては触れないため、そういった情報を求めている方は、そっとタブを閉じるか、ブラウザバックしていただければと思います。

また、本稿で述べる違いは、「QAエンジニアとテストエンジニアの違い」ではありません。

二つの品質

西堀栄三郎先生の「品質管理心得帖」では、「二つの品質」というものが提案されています。
この書籍は、40年以上前に出版され現在は絶版となっていますが、紹介されているマネジメントの考え方は現代にも活かすことができる素晴らしい書籍です。

入手困難な状況ではありますが、国会図書館のデジタルコレクションで読むこともできます。

そのときに、私は二つの品質を提案しました。
その一つは、『狙いの品質』であり、もう一つは、『出来映えの品質』であります。
この二つは明確に区別すべきであると考えました。
『狙いの品質』これは、正直申しまして会社のトップサイドにおける責任でして、
「どういう電算機を作るとか、どういう製品をこしらえるか」ということは、
会社のポリシーで、極端に言いますと、批判の限りではないわけです。
例えば、非常に高級な自動車を作るということに対して、「そんな高級車を作ってもだめですよ」といくら言ってみても仕方がない。
あるいは、フォルクスワーゲンのような廉価の車を作る。
これもポリシーなんですから、極端に言うと、批判の限りではないのです。

西堀栄三郎 著. 品質管理心得帖

西堀先生は、品質というものを「狙いの品質」と「出来映えの品質」という二つに区別しています。
この二つの品質は、品質保証を理解する上でとても重要な概念であるように感じたため引用しました。

なお、飯塚悦功先生の「現代品質管理総論」の中でも類似する概念が登場します。
飯塚先生は、品質の二つの側面として「設計品質」と「適合品質」があると述べています。

設計とは,要求を満たす手段の指定である.

(中略)

設計品質とは,多様な顧客の要求をどの程度満たす設計になっているかどうか,その程度のことをいう.
一方,適合品質とは,実際の製品・サービスがどのくらい設計の指定通りにできているか,その程度である.
もちろん,重要なのは設計品質である.

飯塚悦功 著. 現代品質管理総論

なぜ絶版になっている40年前の「品質管理心得帖」を読んだのかという点については、以降で述べます。
余談ですので、忙しい方は、次の章まで読み飛ばしてください。

私は、品質保証という深遠なる言葉を少しでも理解するために、飯塚悦功先生の「現代品質管理総論」を読んでいました。
そして、品質管理の原点でもある製造業の品質管理について知りたくなりました。
そこで、かの有名な「トヨタ生産方式」について調べていることをポストしたところ、
しんすく(@snsk)さんからのポストでおすすめいただいたというのが経緯です。

あちこち脱線して一つの本を読み終えるまで時間がかかるのは私の悪い癖です。

テスト

ソフトウェアテストの目的は、主に実装されたソフトウェアを評価することです。

巷でよく「テストだけしていても品質は良くならない」と言われます。
そして、「テストはQA(品質保証)の一つの手段でしかない」とも言われます。

先の二つの品質で例えるなら、テストは「出来映えの品質」を測ることが主な目的であるから、テストだけでは品質は良くならないと言われるのかもしれません。

QA(品質保証)

品質保証の定義について説明をはじめると、ISO 9000の定義はとか、⚪︎⚪︎先生はこう述べているとか、ソフトウェア品質知識体系ガイドを読んだ方が早いんじゃないかということになりかねません。
したがって、本稿ではそういった教科書的な定義は追い求めず、先の「二つの品質」というものでQAの活動について考えてみたいと思います。

私が考える品質保証の定義は次の通りです。

品質保証とは「狙いの品質」を識別し、識別した「狙いの品質」と「出来映えの品質」とのギャップを埋めるためのあらゆる活動である

「狙いの品質」、つまり経営層が考える品質がぼんやりした状態では、テストをしても「出来映えの品質」は評価できません。
よって、まずは『「狙いの品質」を識別する』活動をします。
そして、テストしてわかった「出来映えの品質」について、「狙いの品質」がどの程度満たされているのかを評価します。

よく聞く話として、「テストで欠陥を指摘したのに、修正してもらえない」という事象があります。
これは、指摘した人が考える「狙いの品質」と、修正するか判断する人が考える「狙いの品質」にギャップがあるが故に起きることではないでしょうか。
高級寿司と回転寿司に異なる価値を見出せるのと同様に、システムにおいても使う人、環境などの条件に応じて「狙いの品質」は変わるはずです。
そこでまずは、「狙いの品質」について、関係者と認識を合わせる必要があるのです。

そして、「狙いの品質」の目線が合った状態で、はじめてテスト等を通じて「出来映えの品質」が評価できます。
評価した結果、「狙いの品質」と「出来映えの品質」にギャップがあるならば、それを埋めるための改善活動を行います。
これが私なりのQA(品質保証)の活動の解釈です。

もしテスト設計コンテストに複数人で出るなら考えること

テスト設計コンテスト2023 OPENクラスにソロで出場した筆者が、
次回もし複数人のチームで出るならどんなことを考慮するかを妄想する記事です。

はじめに

バグ出しのコンテストではなく、テスト設計成果物の良さを競うコンテストであるため、
成果物のドキュメントを作る時間に非常に多くの時間を費やすことになります。

私は前回ソロで出場したので、数多くの手戻り工数を重ねながら、なんとか成果物の提出にこぎつけました。
一方で、チームで出場した場合に手戻りが発生すると…。想像に難くない結果になるでしょう。
そこで、過去の苦い経験も踏まえて、最初からやっておけばよかったと思うことをマネジメントの要素を中心に書いていきます。

前提

異なる会社に所属していて、尚且つ、テスト設計のやり方も異なるメンバーで、OPENクラスに出場することを仮定します。
U-30クラスは出場したことがないのでわからないですが、もしかしたら参考になるかもしれません。

メンバーが一同に集まる場までにやること

チュートリアル各種(https://www.aster.or.jp/testcontest/tutorial.html)を読みましょう。
特に、『テスト設計コンテスト ’23 テスト設計チュートリアル テスコン編』については、コンテストの出場有無によらず、テスト設計に大切なことが詰まっています。
私は、まさに穴が開くほど読みました。

もし、成果物のイメージが全く湧かない場合は、出場特典として提供される過去の成果物を見てみましょう。

メンバーが一同に集まる場で決めること

コンセプトを話し合う

あくまで、強い想いを持って「このコンセプトで進めたい」という意見を持っている人がいる場合のみです。
その人の想いを受け止めて心中する覚悟で突き進むのか、敢えて別のコンセプトを選ぶのか、納得するまで話し合います。
一度コンセプトを決めて成果物作成に着手してからやり直すのは、相当の時間がかかります。
もちろん、そのやり直す工数も含めて楽しめるのならば、スクラップ&ビルドするのも良いかもしれません。

と、ここまで書いておきながら、私はエントリー直後にコンセプトが全く浮かんでいませんでした。
何となくぼんやりと、「テスト対象や要求をしっかり捉えたテスト設計をしたい」「生成AIなんかすごいし使ってみたい」と考えていた程度です。

コンセプトが思い浮かばない場合は、実際の業務における課題を想像してみても良さそうです。
例えば、テスト計画から実装まで一連のプロセスを経験してみたい、テスト設計成果物のレビューでもらったコメントを反映させた成果物を作りたいなどです。

ここで決めるコンセプトは、手法などの手段に寄りすぎない方が良いと思います。
例えば、VSTePを使おうとか、ゆもつよメソッドを使おうとか、HAYST法を使おうとか、それらは全て手段です。
それらの手法を使う理由は何だっけ?ということを見失わないようディスカッションしたいです。
なぜ?を深掘りしていくことで、自分たちが本来やりたかったこと、解決したいことが見えてくるような気がします。

すると、既存の手法で満足できないところが見えてくるはずです。万能な手段は存在しないからです。

これは私見ですが、U-30とOPENクラスで大きく異なるのは、 「既存の手法でも良いからとりあえずやってみる」のか「既存の手法の問題を解決する方法を生み出す」のかという点であると考えています。

OPENクラスは

自社の最先端の技術開発のオープンイノベーションの場である

テスト設計チュートリアル テスコン編資料(講義編) https://aster.or.jp/testcontest/doc/2023_tescon_V1.0.0.pdf

ということなのです。

コミュニケーションの計画を立てる

  • チャットなどの"非同期なコミュニケーション"について
    • どんなツールを使うか
    • 悩みごと以外に、隔日、週次、隔週など定期的に進捗報告をするか
  • 会議などの"同期的なコミュニケーション"について
    • どんなツールを使うか
    • どれくらいの頻度で開催するか
    • 非同期なコミュニケーションでメンバーとやりとりできない場合のバックアップ策

同じ会社で仕事をしている場合は、共通のツールがあったり、メンバーのコミュニケーションのスタンスを把握できている場合もありますが、
他の会社でやり方も、考え方も異なるメンバーとコミュニケーションをとるのは大変です。
「最低でも週次で連絡が欲しいのに○○さんから連絡来ないな」といった悩みを少なくするためにも、非同期のコミュニケーションルールを確認しておくと良さそうです。
また、"業務ではない"という特性上、やむを得ずコミュニケーションが取れなくなってしまう場合もあると思います。
その場合に備えて、(継続意思の確認も含め)複数の手段を準備しておく必要があるかもしれません。

作成する成果物とテスト設計プロセスについて決める

1回では決められないと思いますが、次のような視点で考えます。

成果物作成に使用するツールを決める

法人チームとして参加する場合は、ツールライセンスはある程度融通が聞きそうですが、
そうでない場合は、ツールの制約が出てくると思います。
特に、個人で支障なく利用できるツールでも、チームで共有したり、エクスポートしたりすることを考慮すると、不満が出てくる場合があります。
当然ではありますが、作った後に共有・提出することを考慮したツール選定が必要になります。

成果物にも、文章ベースで記述するもの、お絵描きをするものなど、チームの方針によって必要なツールが異なってくるので、作成したい成果物に応じてツールを選定していきましょう。

成果物の分担方針を決める

審査基準の中に「工程間一貫性点」というものがあります。
説明会でも繰り返し紹介されているため、耳にタコができているかもしれませんが、
どんなに良いテスト要求分析が行えたとしても、その分析結果がアーキテクチャ設計や、詳細設計に生かされていなければ、高得点を狙うことができません。

と、偉そうに言っておきながら、私はソロの経験しかありません。そのため、想像で書きます。

  • テスト要求分析

人数が多いことでメリットを出せる工程であるように感じるので、私なら全員でやりたいと思います。
なぜなら、テストベースを読んでいる時に気になるポイントは人それぞれ違うので、それらの集合知(=多面的に抽出されたテスト要求)が強みになると考えているからです。

この工程はどう分割するか悩みます。
全員で各工程を一つずつこなしていくのか、アーキテクチャの全体像を作ってから、担当を切り出して詳細設計〜実装と進めていくのか、
ぼんやりとアーキテクチャを作ってから、アーキテクチャの仕上げをAさん、詳細設計をBさんと進めていくのか、自分の中にも答えはありません。

スケジュールを決める

どんなに良いメソッドを思いついても、成果物に落とし込まれていなかったら評価されません。
業務ではないので、マイルストーンを決めて取り組むのはかなりの苦行かもしれませんが、
自らやると決めて参加したコンテストです。可能な限り短いタイムボックスに区切って、進捗を確認していけると良さそうです。

おわりに

ふとこのブログネタが頭をよぎり、勢いで書いてしまいました。
私はどちらかというと消化不良で終わってしまった側なので、
「やりきった」と言えるチームが1チームでも増えたら嬉しいです。