今回は、 第5回の「営業」の回 に続き、再び「幕間」として、技術とは少し異なる、しかしQAエンジニアにとっては避けて通れないテーマについてお話しします。 そのテーマとは、「品質」です。 QAエンジニアと名乗る以上、「品質」という言葉は常に私たちの隣にあります。 私はこの言葉をなんとなく分かった気で使っていました。 そして、(今となっては幸いなことに)あるタイミングで、この言葉を明確に言語化する必要に迫られました。 その過程で出会ったのが、TQMという品質マネジメントに関わる包括的な方法論です。 私自身、TQMの専門家と呼べるほど成熟しているわけではありません。しかし、この考え方に触れたことが、私が「品質」をどう捉え、それをどう自分のキャリアの土台とするかに、決定的な影響を与えました。 今回は、このTQMという概念を通じて、私がどのように「品質」という言葉に向き合ってきたかをお話しします。 記事一覧:技術を土台にして自分なりのQAエンジニアを組み立てる -あるQAの場合 【第1回】専門性をつなげて、あなたらしいQAエンジニアの像をつくる 【第2回】テストを設計する専門性 【第3回】テストマネジメントはテストマネージャーだけの技術ではない 【第4回】テストプロセス改善:思考の補助線としての専門技術 【第5回】幕間:異業種経験を土台にする 【第6回】テスト自動化:「設計原則」を知り、当たり前の技術にする 【第7回】スクラムマスターの専門性を持ったQAエンジニアとして 【第8回】幕間:「品質」という言葉に向き合う “品質”という言葉を使うことの畏れ多さ 「品質」という言葉は開発現場でよく使われます。 一方で、「品質はなんもわからん」と口にするベテランのエンジニアや品質保証の専門家も多く見受けられます。 QAエンジニアとして「品質」という言葉を意識し始めた頃、私自身はこう思っていました。 「“品質”という言葉を軽々しく使ってしまうことは失礼に当たるし、本質を理解していないことになる」 今振り返ると、自分の虚栄心からそう思い込んでいたのかもしれません。 今でも「品質」という言葉を使う時には、多くの人が思い悩みながらも言語化を避けてきた恐ろしさ、そして先人達への畏れ多さを感じずにはいられません。 それでも、あえてその「魂」の部分に向き合い、自分なりに腹落ちさせるプロセスを経たことは、私のQAエンジニアとしてのスタンスを大きく変えるきっかけとなりました。 QAエンジニアという職能の捉え直し 現在の日本のソフトウェア開発現場において、『QAエンジニア』といえば、『テストをする人』や『テストの専門性を持っている人』を指しているのが実情です。私自身もその一人です。 しかし、TQMにおける「品質保証」という視点から捉え直すと、QAエンジニアの職能はもっと大きな範囲に広がるのではないか、と考えられるようになりました。 「顧客との間で明示的に約束しようがしまいが,徹底的に満足させてやろうとすること」 『 マネジメントシステムに魂を入れる 』p.54 TQMでの「品質保証」について学んだのはこの書籍ではないですが、私がこういった捉え方と出会ったとき、私はこの上なく自由さを感じました。私のQAとしての活動に、文字通り魂が宿ったと感じました。 そして、この目的を達成するためには、いわゆる「テスト」という活動だけでは不十分だと私は考えています。 私がSqriptsなどのプロフィールで、単なる「QAエンジニア」ではなく、あえて 「 テストに専門性を持つQAエンジニア 」 と書いているのには、実はそうした背景があります。 私はあくまで、「テストの専門性」を土台(強み)として持っているQAエンジニアに過ぎないと考えています。そう考えれば、世の中にはもっと多様な土台を持つQAエンジニアがいて良いはずだと思うのです。 プロダクトマネジメントに専門性を持つQAエンジニア SREに専門性を持つQAエンジニア カスタマーサクセスやマーケティングに専門性を持つQAエンジニア どのようなバックグラウンドであれ、「品質」という目的のためにその専門性を発揮するのであれば、それは胸を張って「QAエンジニア」と名乗ってよいのではないか。 TQMの思想に触れる中で、私はそう確信するようになりました。 品質保証を広義に捉えることの危うさ 「品質保証」をこういった広義に捉えることはある種の危うさをはらんでいます。 それは「品質保証の責務を押し付けられた」あるいは「QAが品質保証を放棄した」と捉えられることです。 現実との差分として、そういった捉え方をするのは自然なことだと思います。 だからこそ私は今まで語ってきたさまざまな専門性と接続して、建設的に、そして納得感を持ってチームに実装していく必要があると感じています。 専門性の組み合わせ 「品質」という概念を深掘りしたことによって、他の専門性との結びつきもより強固になりました。 スクラムマスター(アジャイル)との組み合わせ 「品質」という言葉の本質を捉えようとすると、「アジャイル」という概念がより鮮明に理解できるようになりました。 例えば「アジャイルソフトウェア開発宣言」で語られている価値観は、驚くほどTQMの思想と合致しています。 品質を単なる「仕様通りであるか(品質特性)」だけで理解するのではなく、「顧客にとっての価値」や「提供側としての在り方」という本質的なところから考えることなどです。 スクラムやアジャイルの実践は、単なるフレームワークの導入ではなく、「本質的な価値提供のために、我々はどう行動すべきか」という問いをより強固なものとします。品質への深い理解は、アジャイルなチームビルディングを行う上での強力な土台になると考えるのです。 テストマネジメントと品質マネジメント かつての私は、「テストマネジメント」と「品質マネジメント」をほぼ同一のものとして捉えていました。しかし今は、これらを明確に区別して考えています。 品質マネジメントという全体の中に、テストマネジメントが位置づけられる。 この視点を持つと、テストの役割がより柔軟に見えてきます。 品質を作り込むために、テストはどうあるべきか。 そう考えると、典型的には「シフトレフト」の必要性にまず気付けると思います。 あるいは、「シフトライト」や「運用でカバーする」という判断、さらには「オブザーバビリティ」を高めることや、マーケティングの視点からのフィードバックが必要になるかもしれません。 「テスト」という枠組みを超えて、様々なステークホルダーと「品質」を共通言語に会話ができるようになる。これが、品質マネジメントの視点を持つ最大のメリットだと感じています。 実務において、「品質」を脇に置くことも考える 正直なところ、実務の現場において、「品質とは何か?」といった哲学的な議論を頻繁に持ち出すべきではないと私は考えています。 定義論争は時に不毛なものになりえます。 特にQAエンジニアの実務において、個人の胸の内に留めておくということもチームを健全に前に進めるためには必要になるでしょう。 私自身、哲学的な議論が大好きです。 一方で 「私たちはどういった世界を実現したいのか」、 「そのために、お客様やステークホルダーにどういう状態になってほしいのか」、 そういったことを建設的に議論するほうが、プロジェクト、あるいは世界は前に進むことも多いでしょう。 大切なことは「顧客満足のために在りたいスタンスを取り続けられること」だと思っています。 そしてその議論の中で使われる言葉は、必ずしも「品質」という言葉でなくても構わないと思っています。 「品質」という言葉を使ってしまうと、今まで「品質」という言葉をつかってこなかったチームにとってマウントを取られた気分になりえます。 実際に私は「QAエンジニアとして品質について理解している」そういった気持ちでいたことがあります。 そんな時に、別の言葉で表現したり、脇に置いて前向きに対話していくことで、私は「いきいきとした」チームになっていく姿をたくさん見てきました。 そして、それこそが品質を扱う私の働き方の醍醐味だと思うようになったのです。 それでも品質を言語化すること 最後まで読んでいただきありがとうございます。 本稿を読まれた皆様は、「QAエンジニア」を名乗っている、あるいは目指しているのではないでしょうか。 皆さんのアイデンティティの核である「品質」、あるいは「品質保証」について、一度じっくりと考え、自分なりの言葉で向き合ってみてはいかがでしょうか。 ここであえて、私なりに品質について一言で表しましょう。「誰かがハッピーになること」です。 「品質」。 畏れ多い言葉です。 しかし、そこから逃げずに自分なりの答えを持てた時、それは「自分はなぜここにいるのか」「自分の専門性はどこで活かせるのか」という、QAエンジニアとしての揺るぎない土台になると、私は信じています。 参考文献 書籍『マネジメントシステムに魂を入れる』 /飯塚悦功(著)、公益財団法人日本適合性認定協会(編集)日科技連出版社、2023年 やまずん、QAとしての自分の考えを表明するためのポジションペーパー https://55ymzn.com/me/positioning_paper_of_qa/ 【連載】技術を土台にして自分なりのQAエンジニアを組み立てる -あるQAの場合 【第1回】専門性をつなげて、あなたらしいQAエンジニアの像をつくる 【第2回】テストを設計する専門性 【第3回】テストマネジメントはテストマネージャーだけの技術ではない 【第4回】テストプロセス改善:思考の補助線としての専門技術 【第5回】幕間:異業種経験を土台にする 【第6回】テスト自動化:「設計原則」を知り、当たり前の技術にする 【第7回】スクラムマスターの専門性を持ったQAエンジニアとして 【第8回】幕間:「品質」という言葉に向き合う The post 【第8回】幕間:「品質」という言葉に向き合う first appeared on Sqripts .
QAエンジニアの採用・選考 どう採るどう通る?連載の第4回です。 前回の記事 では、求職者の立場から職務経歴書や面接で「採用したい」と思わせるアピール方法について解説しました。第2回・第3回は求職者側の視点での話でしたが、今回からは募集側が意識すべき、QAエンジニアの採用を成功させるためのポイントをお伝えしていきます。 QAエンジニアの募集を出しているけれどなかなか応募が来ない 応募はあるけれど、求めている人材とマッチしない といった悩みを持つ企業やエンジニア採用担当の方のお話を伺うことがあります。 市場におけるQAエンジニアの母数は開発者等に比べて少ないですし、かつ 第1回 でも触れたように、ハイレベルな人材が求められがちなので、結果として採用に苦労している企業が多い状況です。 本記事では、そのような状況の中で求めるQAエンジニアを採用するために必要な「QAに対する理解」を中心に説明します。 記事一覧:QAエンジニアの採用・選考[どう採る どう通る] 【第1回】QAテストエンジニア採用における募集側・求職者側のニーズと課題 [全文公開中] 【第2回】求職者側の課題1:求められているQA像を把握する 【第3回】求職者側の課題2:適切なアピールで「欲しい」と思わせる 【第4回】募集側の課題1:QAエンジニアの業務や考え方を理解し、敬意を伝える よくある「もったいない」パターン 私は過去に事業会社でQAエンジニアの採用を担当し、書類選考や面接を行ってきました。また、個人活動としてQA採用に悩む企業の方から相談を受けることも多くあります。その中で、「この書き方ではなかなか応募が来なさそうだな・・・」と感じる、もったいない募集のパターンがいくつかありました。 たとえば以下のようなものです。 業務内容が「テスト業務をお任せします」だけで具体性がない 必須要件が「品質評価業務の経験*年」などふわっとしている プロセス改善や品質向上への取り組みに言及がない 「単純作業」「コツコツ作業できる人向け」などの表現が使われている 開発との協調や上流工程への関与について触れられていない 給与が開発職に比べて極端に低く設定されている テスト、評価、検証などの用語が混在している 類似のものや相互に関連するものも含まれますが、これらに共通しているのは QA業務や品質への理解が浅い ということです。 理解が浅いままだと、QAエンジニアからは「この会社はQAのことをわかっていないな」や「リスペクトが無いな」などと判断されてしまいます。理解やリスペクトのない状況に敢えて飛び込んでいくエンジニアは、あまり多くはないでしょう。(飛び抜けて待遇が良い、などであれば別かもしれませんが・・・) QAについて理解すべきこと では、QAを理解するとは具体的にどういうことでしょうか。大まかに3つのポイントがあります。 QAエンジニアの業務の幅広さ まず押さえておきたいのは、QAエンジニアの業務はテスト実行だけではない、という点です。 テストを実行するのはもちろん、テスト設計や、組織・チームにおけるテストや品質保証の方針を策定することや、テスト・QAプロセス改善、テスト自動化の推進、開発者へのテスト技術の移転、不具合分析等を通じた品質の可視化や改善アクションなどなど、QAエンジニアが担う可能性のある業務は多岐にわたります。QAエンジニアはその中で得意領域を持って開発組織に貢献したり、できること・領域自体を広げるための努力をしたりしています。 QAエンジニアは「開発の後工程でテストをする人」ではありません。 第2回 で触れた”自走できる人”というキーワードも、こうした幅広い業務を自律的にこなせる人材を指しています。プロダクトのQA活動を一貫して担い、必要であれば仕事を自分で作っていく。そのような役割を期待している企業が多いですし、多くのやる気のあるQAエンジニアはそのような期待に応えようとしているはずです。 にもかかわらず「QAってテストする人でしょ?」という理解で募集をしてしまっていては、QAエンジニア側とのギャップが大きく、採用はうまく進まないと思います。 品質文化とQAの位置づけ 続いて理解しておきたいのは、品質文化とQAの位置づけです。 QAエンジニアが重視しているものの一つに、「品質は全員で作るもの」という考え方が組織に根付いているかどうかがあります。品質はQAエンジニアだけが考えるものではなく、開発チーム全体で作り込むものだという理解が前提にあるのです。 そのため、既にQAチームが存在する場合は開発とQAが対立していない環境、一緒に良いプロダクトを作る仲間として協働している環境を求めたいところです。いわゆる「上流から関われる」「開発チームとの距離が近いor開発チームの中で働いている」といった、開発プロセスに何か意見を反映できる、品質向上のための活動が尊重されるような環境かどうかを気にする人が多いでしょう。 1人目QAを募集する場合は既存のQAチームが無い状態なので、「品質文化がありますよ」「ウチは上流から関わっていますよ」といったアピールはできません。が、QAチームの体制が整った暁にはそういった協働状態を目指したいと思っているんだ、という一つの理想像として提示すると良いと思います。 QAにとってのスタンダードな考え方を理解する もう一つ理解しておきたいのは、QA業界におけるスタンダードな考え方です。 たとえばシフトレフトやシフトレフトテストという考え方があります。開発プロセスの早い段階から品質を考えたりテスト活動を行うというアプローチで、以前はちょっとした流行り、最近よく聞くようになった言葉、といった位置づけだったように思います。しかし、今ではスタンダードな考え方として浸透しているのではないでしょうか。スタンダードとして浸透している、ということはつまり QAエンジニアの多くはその考え方を知っている・聞いたことがある状態であり (個別の賛否はあるものの)概ね皆が賛同している、取り入れたほうがいいと思っている ということです。 テスト自動化などもそうですし、上で述べたような「QAエンジニアの業務・やれることは幅広い」や「品質はQAだけでなく皆で作るものである」なども、スタンダードな考え方と言っていいでしょう。 これらのスタンダードな考え方を知っておくことは、募集文面を書くうえでも重要です。私自身、QAの求人票を見たときに、「この会社はQA界隈の考え方などを理解しているかな」と無意識に見ています。募集側が求職者の職務経歴書を見たときに「github(正しい表記はGitHub)」のような細かいミスが多かったり、自社の事業について的はずれな理解をしていては「大丈夫か?」と思ってしまいますよね。求職者から募集側を見たときにも同じです。 逆に言えば、こうしたスタンダードな考え方が反映された募集文面は、それだけで「QAのことをわかっている会社だな」という印象を与えることができます。 理解を深めるための具体的アクション ここまで、QAについて何を理解すればいいのかを整理してきました。しかし「理解しましょう!」だけでは実際に何をすればいいのかわかりません。ここからは、理解を深めるための具体的なアクションについて説明します。これらのアクションは主に1人目のQAを採用する際の活動が中心ですが、もちろん2人目以降の組織拡大フェーズにおいても適用できる方法だと考えています。 他社求人を参考に、自社のニーズを言語化する まず取り組みやすいのが、他社の求人を参考にすることです。ビズリーチやFindyなどのメジャーな媒体でQAエンジニアの求人を検索すると、さまざまな企業の募集文面を確認できます。 ここで重要なのは、他社の求人を「真似る」のが目的ではないということです。他社の求人を見ることで、QAエンジニアに期待したいことや、開発プロセスをどうしていきたいのかを適切に言語化することが本来の目的です。他社の求人はそのための「ヒント」として活用するものだと考えてください。 具体的には、業務内容の書き方や使われている表現、必須要件と歓迎要件の内容とバランスなどを参考にしながら、「自社の場合はどうか?」と置き換えて考えましょう。もちろん、他社が必須や歓迎としている要素すべてが自社に必要とは限りません。プロダクトがtoBなのかtoCなのか、モバイルアプリなのか基幹システムなのか、などプロダクトやドメインの性質によって要件は変わってきます。 似た業種や規模の会社の求人を参考にし、不要な要素は除きつつ、「考えていなかったけど、確かにこういう要素もほしいな」などの気づきがあれば取り入れる。このプロセスを通じて、「QAに何を期待しているのか」「開発プロセスをどうしたいのか」が少しずつ言語化されていきます。 実際に私がお話した、QA採用に成功した企業の方も、まずは他社の求人を研究することから始めたとおっしゃっていました。そのプロセスを通じて自社のニーズが明確になり、それが募集文面に反映されたとのことです。 QAコミュニティに触れる JaSSTやQA系のミートアップイベントなど、QAエンジニアが集まるイベントやコミュニティに参加してみることもおすすめです。QAエンジニアが何を話しているか、どんなトピックに関心を持っているかを直接知ることができます。 ただし注意点として、採用目的を前面に出した参加は避けましょう。私がお話した、QA採用に取り組んでいる方の中にも、「宣伝目的でコミュニティに参加すると、かえってQAエンジニアの間で心象を悪くしてしまうのでは」と懸念されている方がいました。これは非常にまっとうな考え方だと思います。 コミュニティへの参加はあくまでも「QA界隈の文化や考え方を学びに行く」ことや「自分たちの開発や品質保証のプロセスをよくするヒントを得にいく」ことをメインとして、結果としてつながりができたら嬉しい、というスタンスを大切にしましょう。こうした姿勢で参加することで、QAエンジニアとの自然な交流が生まれ、場合によってはカジュアル面談などにつながることもあるかもしれません。 一般にカジュアル面談では、自社に興味を持ってくれているエンジニアに対して自社のビジネスや課題感、採用にあたって期待することなどを話すと思います。しかし、採用がなかなかうまくいっていない、どうやっていけばいいかわからない、という場合は 現役のQAという立場で募集内容に対するフィードバックをくれませんか? と素直にお伝えして、そのような意図のカジュアル面談を申し込むのも一つの手です。 自社がリーチしたい層に響く内容になっているかどうか、応募したくなるかどうか、現役のQAエンジニアの生の声を聞くことが最も確実な確認方法だと考えています。 なお、最近は複数社が合同でミートアップ形式のイベントを開催するケースも増えています。こうした場を活用して認知を広げることも一つの手ですが、そちらについては次回詳しく触れます。 社内におけるQAへの理解と、QA側の思いとのギャップを埋める QAコミュニティに触れて学んだことと、社内での理解との間には、ギャップがある場合があります。たとえば、本記事中でも説明したような、QAは品質向上に関わる幅広い業務をスコープとして考えているけれども、開発者は「テストする人でしょ?」と思っている、などです。 このようなギャップを放置したまま採用を進めると、うまくいかないことが多いです。採用が難航するだけでなく、仮に採用できたとしても早期離職につながるリスクがあります。 そのため、採用活動と並行して社内における QAや品質に対する理解 を得ることも大切にしてください。開発チームリーダーやプロダクトマネージャー、CTO・VPoEなど、とくに組織の文化を醸成したり広く情報を発信できる立場にある方から、「QAエンジニアという存在に対するイメージ」や「QAエンジニアに期待すること」を広めていただくのが理想です。こうした土台が整っていると、入社したQAエンジニアが力を発揮しやすい環境が生まれます。 もちろん、開発者やマネージャーなど他のロールの方に「QAエンジニアと同等の知識を身に着けてから採用活動をしてください」ということではありません。(それが実現できるならば、QAエンジニアの必要性があまりなくなってしまいますね。) そうではなく、誤った理解を減らし、今後入社したQAエンジニアの話に耳を傾けられる姿勢を皆がもっている状態を目指しましょう、ということです。特別扱いは必要ありませんが、QAエンジニアを品質の専門家として尊重することが大切です。これが、本記事の冒頭でも用いた「リスペクト」にあたります。 副業QAに入ってもらう 最後は、現役のQAエンジニアに業務委託として入ってもらう、いわゆる「副業QA」の活用です。副業QAに文化づくりや募集文面づくりなど、採用の土台を整える活動を担ってもらうというもので、社内の品質に関する現状把握や開発プロセスの分析、募集文面の作成・レビュー、社内への品質文化の醸成、採用面接のサポートなどを依頼することが考えられます。 このアプローチが有効な理由はいくつかあります。まず、QAの専門家の視点が社内に入ることで、募集文面が「QAに刺さる」内容になります。面接での見極めもより適切になるでしょう。また、副業QAと一緒に仕事をする中で、社内のメンバーが「QAとは何か」を実際に体験できます。これが品質文化の醸成にもつながります。そして、いきなり正社員を採用するよりもリスクが低く、まず試してみることができるという点も魅力です。 とくに初めてQAエンジニアを採用しようとしている企業にとっては、こうした形でQAの専門家と関わりを持つことが、その後の正社員採用をスムーズにする近道になるのではないかと考えています。2人目以降の採用を行うにあたっても、もし既存のQAメンバーが若手中心であれば、ベテランの副業QAに入ってもらうことで刺激や学びになる部分もあります。QA採用のためには「いまいるメンバーの、同僚としての魅力」が求められる場合もあるため、その点の強化にもつながります。 副業可能なQAエンジニアとの接点としては、前述のカジュアル面談から副業の話に発展させるなどの方法があります。ほかにも、YOUTRUSTなどのサイトでは転職希望のほか副業希望の度合いもエンジニア側が設定できるので、副業を希望しているエンジニアを探すことも可能です。 まとめ 本記事では、QAエンジニアの募集でなかなか応募が来なかったり、求めている人材とマッチしなかったりする原因として、「QAへの理解不足」があることをお伝えしました。 募集文面の表現を工夫する前に、まずQAエンジニアの業務の幅広さ、品質文化とQAの位置づけ、QA業界のスタンダードな考え方を理解することが大切です。そのうえで、他社求人を参考にした自社ニーズの言語化、QAコミュニティへの参加、社内での対話、副業QAの活用といったアクションを通じて、理解を深めていきましょう。 学ぶプロセスは、単に募集文面をよくするためだけではありません。QAについて学び、社内で対話を重ねること自体が、組織の品質意識を高めることにつながります。QA採用の成功は、こうした地道な積み重ねから始まるのではないかと考えています。 次回は募集側の課題2として、QAエンジニアの中での認知を獲得するための手法についてご紹介します。 【連載】QAエンジニアの採用・選考[どう採る どう通る] 【第1回】QAテストエンジニア採用における募集側・求職者側のニーズと課題 [全文公開中] 【第2回】求職者側の課題1:求められているQA像を把握する 【第3回】求職者側の課題2:適切なアピールで「欲しい」と思わせる 【第4回】募集側の課題1:QAエンジニアの業務や考え方を理解し、敬意を伝える The post 【第4回】募集側の課題1:QAエンジニアの業務や考え方を理解し、敬意を伝える first appeared on Sqripts .
こんにちは、QAコンサルタントのツルリンです。 2025年11月15日(土)に実施されました、第16回 中級ソフトウェア品質技術者 資格試験に合格することができましたので、受験体験記として、試験の概要、受験に向けた私の取り組みをご紹介します。 これから中級ソフトウェア品質技術者 資格試験(以降、JCSQE中級試験)を受験する方のお役に立てれば幸いです。 これまでの経緯 2024年6月8日(土)実施の第32回 初級ソフトウェア品質技術者 資格試験に合格しました。その際、 受験体験記 を執筆しました。JCSQEやSQuBOK Guideに関する情報、受験準備・勉強方法などをまとめていますので、ご参照ください。 今回の受験は、上位資格であるJCSQE中級試験へのチャレンジになります。 関連記事 初級ソフトウェア品質技術者 資格試験(JCSQE)の受験体験記 はじめまして、QAコンサルタントのツルリンです。2024年6月8日(土)に実施されました、第32回 初級ソフトウェア品質技術者 資格試験に合格することができましたので、合格体験記として、JCSQEに関する情報と受験に向けた私の取り組みをご紹介します。これから初級ソフ... 続きを読む Sqripts JCSQE中級試験の概要( 試験要綱 ) 出題範囲:中級ソフトウェア品質技術者資格試験 シラバスVer.3.0に準拠 ※主参考書籍『ソフトウェア品質知識体系ガイド ‐SQuBOK Guide‐第3版』 試験時間:120分 出題形式:選択式25問、記述式3種類の出題形式からあわせて17問出題 記述式の出題形式は以下の通り。 穴埋め問題:文章中の用語の穴埋め 説明問題 :用語についての定義や活用方法の説明 解説問題 :あるテーマについて、その理由や留意点などの考察を記述 合格ライン:70%程度(選択式、記述式ともに) 合格率:10%前後 中級ソフトウェア品質技術者が遵守すべき倫理規定が定められており、事前に倫理規定の確認が求められています。使命、法の遵守、品位の保持、社会への貢献などについて記載されています。 JCSQE中級試験 シラバスVer.3.0の項目は、SQuBOK Guide 第3版の目次と一致しています。要求される知識レベルは、選択式は知識レベル2(知識を説明できる)〜レベル3(概念と使い方がわかる)、記述式は知識レベル3〜レベル4(詳しく理解し応用できる)となっています。 JCSQE中級試験では、初級試験に比べて、より高度な理解、実務での応用力が試され、合格するためには、記述式問題への対応力が要求されます。 受験申込み 試験料 20,900円(税込)※2025年11月時点 最初に、受験地域を選んで申込みを行います。その後、受験可否の連絡があり、期限までに受験料を振り込んで、初めて受験登録完了となります。 受験地域は、宇都宮、東京、名古屋、大阪、福岡、那覇になります。 受験準備・勉強方法 参考書籍と学習リソース JCSQEサイトの 学習方法 を参考に以下を使って勉強しました。 ソフトウェア品質知識体系ガイド - SQuBOK Guide - 第3版 初級ソフトウェア品質技術者資格試験(JCSQE)問題と解説【第3版】 ソフトウェア品質保証 入門-高品質を実現する考え方とマネジメントの要点 ※副参考書籍 過去の記述式問題の解説 JCSQE中級試験 記述式問題(第2回〜第15回)の一部が解説付きで公開されています。 JCSQE初級試験では、試験対策アプリ(テス友)が大変役に立ちましたが、JCSQE中級試験に対応した試験対策アプリなどは特にないようでした。 勉強方法と時間配分 【3か月前】 受験申込み後、主参考書籍のSQuBOK Guide 第3版と副参考書籍のソフトウェア品質保証 入門-高品質を実現する考え方とマネジメントの要点(フリマサイトで購入)を一通り、流し読みしました。(約4時間) 公開されているJCSQE中級試験 記述式問題の解説(第2回〜第15回)を全て確認しました。各年度に出題された問題の一部について、解答用紙のスタイル、問題、解答例、解説が記載されています。(約14時間) 初級ソフトウェア品質技術者資格試験(JCSQE)問題と解説【第3版】を1回解きました。(約2時間) 【1か月前】 JCSQE中級試験 記述式問題の解説の直近5年分(第11回~第15回)の再確認を行いました。(約3時間) 初級ソフトウェア品質技術者資格試験(JCSQE)問題と解説【第3版】の再確認を行いました。(約2時間) 【試験直前の1週間前~直前】 JCSQE中級試験 記述式問題の解説の直近5年分(第11回〜第15回)の再々確認を行いました。また、JCSQE初級試験受験の際に、作成していたメモ(間違った問題を復習のために整理したもの)を再確認しました。(約5時間) 【受験当日】 上記のメモを試験会場に持参し、試験開始直前まで確認しました。 試験対策・意識したポイント 選択式問題は、JCSQE初級試験の復習、記述式問題については、過去問題の確認を行ったレベルでしたので、トータルの勉強時間は、約30時間でした。 試験3か月前に、参考書籍を一通り確認した結果、以下のような方針で勉強を進めることに決めました。 選択式問題への対策: マークシート形式の試験で、概念や用語に対する知識の確認になるため、JCSQE初級試験と同様の勉強で対応可能と判断し、JCSQE初級試験 問題と解説【第3版】の復習(再確認)を行うことにしました。 記述式問題への対策: 過去の出題と解説の確認とその理解が中心になります。解答の視点や実際の解答内容は、ほぼ私自身と同じ考え方でしたので、ある程度納得できましたが、過去の記述式問題の公開範囲は、一部に留まるため、明確な出題傾向を見い出すことは難しいと感じました。 ここで、記述式問題の過去の出題と解説には、「中級ソフトウェア品質技術者資格試験の記述式問題の採点においては、唯一の正解との適合をみるのではなく、受験者の意図を読み取って採点しています」との記載があります。この記載から、出題者の意図を汲み取り、自分自身の考えをまとめて、分かり易く伝える力を試される試験と捉え、以下の対応とすることに決めました。 穴埋め問題 選択式問題と同じ対策(JCSQE初級試験 問題と解説【第3版】の再確認) 説明問題 JCSQE中級試験 記述式問題の解説の直近5年分の再確認 解説問題 同上 論述式試験における鉄則の適用 解答の観点: 解答の観点や形式が指定されている場合は、必ず、指定に沿って解答する。 出題者が何を期待しているか、どのような解答を求めているかを考えて解答する。 問題文に解答のヒントや視点が示されているので、それを読み取って解答する。 記述の仕方: 分からない問題でも、空欄にせず、部分点を貰えるように必ず解答する。 指定文字数での解答は、少なくなり過ぎないように9割程度の文字数を目標にする。 解答は、「~であること」「~であるため」などのように表現を統一する。 採点して貰い易いように、できる限り丁寧な、読みやすい字で書く。 受験当日の流れ・受験後の感想 試験会場、流れ、注意事項 試験は、大阪会場で受験しました。受験者は約40名で、若手からベテランまで幅広く、いらっしゃいました。 開始10分前から試験終了までは退室できず、退室すると失格となります。 試験問題は持ち帰ることはできません。 中級ソフトウェア品質技術者倫理規定への同意書にサインを行う必要があります。 試験終了後、配布された受験票控えに印刷されたQRコードからアンケートに回答します。(所属企業に関する情報や合格した場合、氏名掲載を希望するかなど) 実際の試験での難易度と感想 試験時間120分で、選択式25問、記述式17問(小問を含めると22問)でした。 記述式問題の解答を終えたのが、終了5分前でしたので、見直す時間はありませんでした。 選択式問題は、それほど難しい問題はなく、8割程度は正解できたという感触でしたが、記述式問題については、何とか一通り解答したというレベルであまり自信はありませんでした。 特に解説問題は、実際の業務で日常的に考えていないと的確な解答をするのは難しい内容と感じました。答えはどこかを見れば載っているという類いのものではないので、改めて、ソフトウェア品質向上に対する見識や経験、日頃の取り組み姿勢が問われる試験であると思いました。 合格発表・結果の確認方法 試験日: 2025年11月15日(土)13:30~15:30 合格発表:2026年1月22日(木)10:00頃 受験地域別に合格者受験番号がWebサイトに掲載されます。 氏名掲載希望者は、氏名が掲載されます。 第16回結果)126名中、14名合格(合格率11.1%) 認定証到着:2026年1月27日(火) 試験結果のお知らせと資格認定証が送付されてきました。 試験結果のお知らせには、採点結果が記載されていました。選択式84点、記述式82点でした。 採点結果からすると、私個人としての試験対策は正しかったのだと思われます。特に記述式問題に対しては、「論述式試験における鉄則」の適用が有効だったと思われます。 記述式の採点は、選択式の合格者(68点以上)のみ行っているとのことです。 まとめ 今回の私の受験の取り組みをまとめると以下のようになります。 選択式問題は、JCSQE初級試験の復習を行う。 記述式問題は、過去(直近5年分)の記述式問題の解説を確認する。 記述式問題は、論述式試験における鉄則を適用して、解答する。 参考情報(他の合格者の勉強法) JCSQE中級試験は、QAコンサルティングを担当する私の所属部門の重点取得資格となっており、今回、私の他に3名が合格しました。勉強法、アドバイス事項をお聞きしましたので、参考情報としてお伝えします。 Aさん: 怪しい、うろ覚えの略語や用語があったらすぐに調べる 業務で作成する文章は、主語を略さず40文字前後で書ききる 漢字の用語は、時々実際に書いてみる なお、記述式に備えて、当日はマークシートも記述もしやすい「大人の鉛筆」2本と良く消えるMONO消しゴムを2個、持っていきました。日頃、字を書くことが少ない方は文房具にも気を配った方が良いと思われます。 Bさん: SQuBOK を何度も読み込み、各品質技術や知識を使いこなせるように理解する ただ、なかなか頭に残らないため、2の手段へ JCSQE 中級シラバスのPDFをExcel形式に変換して自分だけの用語集を作成し、試験直前まで苦手なところを読み返す SQuBOK (Amazon Kindle)からのコピペだけでなく、使用イメージや具体的なことが分からない場合はWebで検索して用語集へリンクを入れたり、その資料をPDFにして保存したりして見返した。 短時間で問題に答える訓練をする テス友 JCSQE初級の問題を短時間で答えられるように訓練 初級ソフトウェア品質技術者資格試験(JCSQE)問題と解説【第3版】 一通り問題を解き、解説を読破 SQuBOK そのものの記述よりも、この解説の方が役に立ったことがたくさんある JCSQE 中級の過去問の公開されている分を一通り解いて解説と出題意図を読みこんだ ただ、これは時間がなくなって一部飛ばしているところもあった Cさん: SQuBOKはKindleで持っていましたが、書籍版を購入し直してPDF化しました また、シラバスと公開されている過去問を全てChatgptに入れて、30日計画の学習プランを立ててもらい、基本的にはSQuBOKの章ごとに穴埋め、説明、解説の3種類の演習問題を作ってもらい演習を解いていました 意味が曖昧な用語や理解が曖昧なところは復習し、時には語呂合わせも作ってもらいながら覚えたりもしました 今後、JCSQE中級試験を受験される方の参考になれば、幸いです。 最後までお読みいただき、ありがとうございました。 The post 中級ソフトウェア品質技術者 資格試験(JCSQE中級試験)の受験体験記 first appeared on Sqripts .
QAエンジニアの採用・選考 どう採るどう通る?連載の第3回です。 前回の記事 では、求職者の立場から「どのようなQAエンジニアが求められているのか」を把握する重要性について解説しました。募集背景を理解し、「自走できる人」などの抽象的なキーワードの裏にある具体的な期待値を読み取ることが大切、という内容でした。 では、企業が求めるQA像を理解できたとして、それをどう伝えれば採用担当者や書類選考を行うエンジニアに「この人を採用したい」と思わせることができるのでしょうか。 第1回 で述べたように、私が採用担当として書類選考や面接を行っていると、「落とす理由は無いけれど、通すための理由にも欠ける」という判断になる方が一定数いました。おそらくスキルや経験があるのに、適切にアピールされていない。これが、もったいなさを感じるポイントでした。 本記事では、職務経歴書を中心に「この人を採用したい」と思わせるアピール方法について解説します。 記事一覧:QAエンジニアの採用・選考[どう採る どう通る] 【第1回】QAテストエンジニア採用における募集側・求職者側のニーズと課題 [全文公開中] 【第2回】求職者側の課題1:求められているQA像を把握する 【第3回】求職者側の課題2:適切なアピールで「欲しい」と思わせる よくある「もったいない」パターン まずは、実際に書類選考や職務経歴書のレビューを通じて、よく見かける「もったいない」パターンについてです。 職務経歴を羅列しているだけ 一番よく見かけるのは、やったことを時系列で並べているだけの職務経歴書です。 たとえば、「20XX年〜20XX年:〇〇プロジェクトでテスト実行を担当」「20XX年〜20XX年:△△システムのテストリーダーを担当」といった形で、プロジェクト名と役割を淡々と列挙しているケースです。 もちろんこれらの情報自体は悪くありません。しかし、採用担当者が知りたいのは「この人が何をできるのか」「どう貢献してくれるのか」という点です。単純な経歴の羅列だけでは、企業側のニーズとの接点が見えませんし、書類選考担当者は経歴からその方のスキルなどを想像する必要があり、それなりの「認知負荷」がかかります。それも仕事のうち、と言ってしまえばそうなのですが、応募側が少しでも書類選考通過の確率を上げようと思うならば、読み手がたまたま疲れていたとしてもスッと伝わるような書類を作ったほうが安全です。 仮に集中して読んでもらえたとしても、単純な経歴の羅列で終わっていると「経験はあるようだけど、ウチで何ができるのかがわからない」という印象になってしまいます。これでは、選考を通す理由として弱いんですね。 企業側のニーズとアピールポイントがズレている 上で述べた内容と関連しますが、募集要項に書かれている課題・やりたいことと、自分のアピール内容がズレているケースもよく見受けられます。 典型的な例として、プロセス改善や仕組み化を求めている企業に対して、「納期に遅れることなくテストを消化できました」「メンバー〇名を抱えてテスト進捗管理を行いました」とアピールしている場合などです。(このパターンは本当に多いです。) もちろんウソを書いたり必要以上に盛ったりせず、正直に書いてくださっているのはわかります。しかし、企業が求めているのが品質保証体制の構築や仕組み化であるにもかかわらず、「テスト業務を着実にこなせます」というアピールでは、「業務をこなすだけの人」に見えてしまいます。 重要なのは、相手の求めるものを理解し、自分の経験を適切に翻訳することです。たとえば進捗管理の経験があるなら、企業が仕組み化を求めているのであれば、「効率化のための仕組み作り」という文脈で語る必要があるでしょう。前回の記事でお伝えした、求められるQAエンジニア像を理解するというのは、ニーズに対して適切なアピールをする土台になる部分です。 「貢献」の視点が欠けている もう一つよく見かけるのは、「こんな経験があります」「こんなスキルを持っています」と書いて終わっているパターンです。 これは、私が職務経歴書レビューをしている際には必ずお伝えしているのですが、できることや経験で止まっているとやはり物足りないんですよね。採用側が知りたいのは「雇うとどんなメリットがあるのか」という点です。つまり、「貢献」の視点が必要になります。応募先の課題に対して、自分がどう解決できるのか。これを明確に示さなければ、採用担当者は「この人を通す理由」を見つけられません。 正しいアピールの構造:「課題→貢献→根拠」のロジック ここまで、よくある「もったいない」パターンについて解説してきました。では、どうすれば採用担当者に「この人を採用したい」と思わせることができるのでしょうか。 アピールの基本構造 前回の記事で、求職者側が職務経歴書や面接で伝えるべきポイントについて構造化した図を示しました。改めてこの図を見てみましょう。 多くの人は下段(経歴・スキル)だけを書いて終わっています。先ほど述べた「職務経歴を羅列しているだけ」というパターンですね。 しかし、重要なのは中段(雇う側のメリット・貢献)を起点に構成することです。企業の課題を理解し、「私を雇うとこう変わります」と明確に示す。そして、その根拠として職務経歴や成果を提示する。このロジックで組み立てることが大切です。 なぜこの順序が重要なのか なぜこの「課題→貢献→根拠」という順序が重要なのでしょうか。それは、採用担当者の視点で考えるとわかります。 採用担当者は、候補者を次のステップに進める際、「なぜこの人を通過させるのか」を説明できなければいけません。これは社内でより上位の選考官に共有するためという側面もありますし、「迷ったら不合格」が採用のセオリーとも言われています。 つまり、採用担当者は「この人を通す理由」を探しています。正直、直感で「良さそう!」と思ってから、あとからその理屈を探すというパターンもあると思います。 だからこそ、採用担当者の中で「この人を採用したら、こんな動きをしてもらって、結果こう良くなりそう」という明確なイメージが持てると、内定にかなり近づきます。経歴・スキルはあくまでもその根拠であって、過去の成果を転職した先でも再現できるだろうと思ってもらう材料です。 自分の経験を「翻訳」する ここまでの内容を踏まえて求職者側ができるのは、見せ方や表現を工夫することです。転職活動中にスキルが急に伸びるということはあまりないので、自分の持っているものをどう表現すれば興味を持ってもらえるか、を考えます。 たとえば、テストチームにおいてメンバーの進捗管理をしながらプロジェクトを進めた経験があるとします。ある程度の規模のテストエンジニアを率いてテストを行うようなチーム・会社に応募しているのであれば、「*人規模のリーダーを行いました」といった切り口で表現すると合うでしょう。 一方で、「ウチは開発者もテストをするし、QAの方にはもっと全体の仕組み化とかプロセス改善とかをお願いしたいんだよね」と思っている会社に対して「*人を率いてテストのプロジェクトを回しました!」と言っても、刺さらないわけです。そうではなく、「ジュニアなメンバーもいる中で、仕組み化して業務品質を担保した」や「要件や仕様の段階からPdM・開発者との定例に参加しテスタビリティに関するフィードバックをしつつテストプロセスを進めていました」等の表現をしたほうがマッチします。 このように、自分の経験を応募先のニーズに合わせて「翻訳」することが、効果的なアピールにつながります。 自己PRへの「貢献の視点」の盛り込み方 先に「貢献の視点が大事」とお伝えしました。具体的には、どのような書き方で貢献の視点を表現すればよいのでしょうか。 たとえば、「誰とでもスムーズに仕事ができるコミュニケーション能力があります」といった内容を自己PRに書く人がけっこういらっしゃいます。しかし、コミュニケーション能力があるのはある意味当然・当たり前で、そこで止まっていると自己PRにはなりません。コミュニケーション能力自体が計測ができないものですし、「コミュニケーション能力が高いと、それがウチでどう活きるの?」と採用側は思うわけです。 もしも「バイト先の全国接客コンテストで優勝しました」等の、採用担当者が聞いてもすごさがわかるような具体的なエピソードがあれば、コミュニケーション能力が高いというアピールが成立しますし、面接のネタにもなるでしょう。しかし、多くの人はそうではないはず。そうなると、やはり「コミュニケーション能力があります」のようなふわっとした表現は、自己PRとは言い難いです。 では、どう書けばいいのでしょうか。 たとえば「QAやテストの教育・研修をたくさん経験してのべ○○○人に教えてきたので、自分なりのノウハウがたまっています。もし入社したら、新たに社内向けのコンテンツを書き起こして、研修を開いて組織内に展開できます」などは、自分を雇うことで会社が得られるメリットが表現されています。もちろん、それを嬉しいと感じるかどうかは会社やそのときの状況次第なので、そこは募集要項などからできるだけ正確に読み取る必要がありますが、すくなくとも貢献の視点は含まれています。 あるいは、一人目QA募集のような求人であれば、以下のようなアピールも効果的です。 「登壇やブログ執筆などで社外に向けたアピールができます。だから自分を採用すると、二人目以降の採用にも貢献でき、QA組織体制の構築が可能です」 このように、自分のスキルや経験を「企業にとってのメリット」に変換して示すことが、効果的な自己PRにつながります。応募先の課題を理解し、その課題に対して自分がどう貢献できるのかを具体的に書く。これが自己PRで意識すべき最も重要なポイントです。 まとめ 本記事では、職務経歴書を中心に、採用担当者に「この人を採用したい」と思わせるアピール方法について解説しました。 よくある「もったいない」パターンとして、経歴の羅列だけになっている、応募先のニーズとアピールポイントがズレている、「貢献」の視点が欠けている、という3点を挙げました。 正しいアピールの構造は、「課題→貢献→根拠」のロジックです。企業の課題を理解し、自分がどう貢献できるかを明確に示し、その根拠として職務経歴や成果を提示する。この流れを意識することで、書類選考を通る可能性は確実に高まると考えています。 次回は募集側の課題として、企業がどのように「求めるQA像」を表現するかについて解説していきます。 【連載】QAエンジニアの採用・選考[どう採る どう通る] 【第1回】QAテストエンジニア採用における募集側・求職者側のニーズと課題 [全文公開中] 【第2回】求職者側の課題1:求められているQA像を把握する 【第3回】求職者側の課題2:適切なアピールで「欲しい」と思わせる The post 【第3回】求職者側の課題2:適切なアピールで「欲しい」と思わせる first appeared on Sqripts .
技術を土台にして自分なりのQAエンジニアを目指す本連載の第7話のテーマは 「スクラムマスター」の専門性 です。 これまでの連載では、テスト設計、テストマネジメント、テスト自動化といった、テストエンジニアの職能に直結するいわゆる「王道」の技術についてお話ししてきました。 しかし今回は、少し視点を変えて、チーミングの領域、特に私が学び・実践してきたスクラムについて深掘りしたいと思います。 皆さんは、アジャイルやスクラムに対してどのようなイメージをお持ちでしょうか? 私がスクラムという概念に初めて触れたのは、市谷聡啓さんの著書『チーム・ジャーニー』がきっかけでした。本の中では、バラバラだったチームが対話を重ね、困難を乗り越えていく姿が描かれています。 ■ チーム・ジャーニー 市谷 聡啓 著/翔泳社 「アジャイルとは、チームを輝かせる手法なんだ」「あらゆる問題が起こりながらも、チームで向き合う現場で働きたい」。 ひと昔前には「キラキラQA」という言葉が使われたこともありました。私自身、そうなりたいと強く願ったことを覚えています。 しかし、実際に現場でスクラムをやってみると、現実もまた簡単ではありませんでした。 本を読んでトラブルを追体験することと、現場の当事者としてトラブルの泥を被ること。その間には、大きな差があったからです。 そして、「QA」あるいは「テスト」という専門性をその環境で発揮するためには、「スクラム」というフレームワークやその背景にある「アジャイル」を謙虚に学び続ける姿勢が必要だと考えました。 記事一覧:技術を土台にして自分なりのQAエンジニアを組み立てる -あるQAの場合 【第1回】専門性をつなげて、あなたらしいQAエンジニアの像をつくる 【第2回】テストを設計する専門性 【第3回】テストマネジメントはテストマネージャーだけの技術ではない 【第4回】テストプロセス改善:思考の補助線としての専門技術 【第5回】幕間:異業種経験を土台にする 【第6回】テスト自動化:「設計原則」を知り、当たり前の技術にする 【第7回】スクラムマスターの専門性を持ったQAエンジニアとして スクラムマスターの専門性 本来、スクラムマスターは「チームの成果」に責任を持つ重大な役割です。 私はQAエンジニアであり、スクラムマスターそのものではありません。しかし、彼らが持つ「チームを支援し、障害を取り除く」という視点やスキルは、私たちQAにとっても学ぶべき重要な「ふるまい」だと考えています。 本記事ではスクラムマスターのふるまい、あるいは専門性を以下のように捉えます。 アジャイルソフトウェア開発が実現したい”状態”を理解し、その実現のためにチームの一員としての具体的な支援が可能であること もちろん、実際のスクラムマスターの責務は、障害物の排除やチームの集中支援など多岐にわたり、本記事の内容だけでは収まりきりません。ここで語る専門性だけで「スクラムマスターになれる」わけではないことは、あらかじめお伝えしておきます。 アジャイルにおける「テストを分業する」ということ “QAエンジニア”が存在し、かつそのチームが”アジャイル”を標榜しているとき、「プログラマーが作る人」「QAはテストする人」という明確な境界線が引かれてしまうケースは少なくありません。もしかしたらプログラマーだけが「開発者」と呼ばれているかもしれません。 しかし、アジャイルの価値観において、この分業は時に過度であり、「毒」にさえなり得ると考えます。 「それは私の仕事ではない」「仕様は誰かが決めているはず」。 こういった考えが蔓延すると、アジャイルチームであるはずが、いつの間にか「プロセスやツール」を「個人との対話」よりも優先するようになってしまいます。 QAがアジャイルを形骸化させる こういった現象が起こる背景には、導入の動機が関係しているのではないでしょうか。 つまり、「顧客満足」や「自己組織化」といったアジャイルの価値観への共感ではなく、「”ウォーターフォール”が嫌だから」という消極的な選択の結果であるケースです。(そして、多くの場合、”ウォーターフォール”への理解すら十分でないことも多いでしょう) スクラムは、シンプルかつ軽量で、無料で公開されている、気軽に適用できるフレームワークです。 スクラムを適用したその結果、例外なく多くの問題に直面すると思います。しかし、それはチームが真剣に向き合っているからこそ起きる、避けては通れない壁なのだと思います。 問題に直面したとき、そこから学習し、適応しようとする姿勢を失ってしまうと、いわゆる“なんちゃってスクラム”に陥ってしまいます。(私はこの言葉があまり好きではありませんが、状況をよく表していると思います) 集中力を欠いたデイリースクラムや、心理的安全性を履き違えたレトロスペクティブ。 これらは典型的なアンチパターンですが、見方を変えれば、スクラムを実践しようとした結果として表出した課題であり、ある程度の成熟度があるからこそ見える問題だとも言えます。 恐ろしいのは、形骸化したアジャイルチームに加えてQAエンジニアという専門職がいることで、「品質はQAの仕事だよね」という分業が加速し、“開発者“の品質への責任感が薄れてしまうことです。 そのようなチームでは、誰もが品質を気にかけたいと願っているのに、構造的に「誰も品質に責任を持てない」。そんなもどかしい状況に陥ることが少なくありません。 これに対して私はどうしようもない停滞を感じてしまう時があります。 「動くソフトウェア」を共通言語に、開発プロセスを再構築する 構造的に品質に責任を持てない、そんな停滞した空気の中で、現状を変えるきっかけを作れるのが、私たちQAエンジニアだと考えています。 なぜなら、私たちには「動くソフトウェア」という共通言語があるからです。 「QAエンジニアはテストを考えて、バグを見つけることに責任を持つ」という考えはアジャイルにとって悪い方向に作用しうると考えます。テスト技術の真価は、バグを見つけることだけではありません。プロダクトの現状をありのままに映し出す「透明性」を確保することにあります。 むしろ、「動くソフトウェア」から得られた事実を根拠に、スクラムのフレームワークを利用して、チームの動き方にフィードバックを返し、適応のきっかけを作ることこそが重要です。 ここで、テストをしていて、仕様や価値に対する理解の齟齬を起因とするバグを起票するケースを考えてみます。 私は、起票だけで終わりにしてしまうのは、とてももったいないと感じます。 「テスト実行の段階でこのような問題が出るのは、バックログリファインメントやスプリントプランニングに何か問題があるのではないでしょうか? 次回のスプリントでは、実装前に具体例を使って認識合わせする時間を設けませんか?」 借りてきたベストプラクティスをそのまま当てはめるのではなく、目の前の「動くソフトウェア」という事実を通して、チームで向き合う。これはスクラムチームにとって、最も健全な活動だと私は考えます。 テストから得られたフィードバック(透明性)を起点にして、形骸化していたスクラムイベント(リファインメントやふりかえり)を通じ、本来の意味(検査と適応)を吹き込んでいく。 これこそが、スクラムマスターという役職を持たずとも発揮できる、QAエンジニアならではの貢献ではないかと思っています。 専門性の組み合わせ では、具体的に過去に取り上げた専門性とスクラムの専門性をどう組み合わせられるのか。2つの事例を紹介します。 1. テスト設計 先述した「『動くソフトウェア』を共通言語に、プロセスを再構築する」アプローチは、アジャイルにおけるテストエンジニアの典型的な貢献の一つです。これはSpecification by Example、実例マッピング、ATDDなどのプラクティスとして活用されています。 特に、仕様検討段階においてテストの経験知からフィードバックを行うことは、典型的な「シフトレフト」の実践と言えます。 たまに「テスト観点リストがあるからテスターは不要」という主張を目にしますが、それにはあまり賛同できません。 テストエンジニアの真骨頂は、一見関係のない「ソフトウェアの特性」と「テストの観点」を結びつけ、そこから重要なリスクや欠陥の可能性を見出す洞察力にこそあると考えるからです。 自分では気づかないかもしれませんが、ぜひスクラムイベント等でご自身の懸念や疑問を声に出し、対話してみてください。きっとそれはチームにとって気づきとなります。 2. テストプロセス改善 「テストプロセス改善」はアジャイルとミスマッチだ、と感じる方は少なくありません。 私も既存のテストプロセス改善モデルを単純適用することはかえってアジャイルの価値観を損なうと考えています。 一方で、「既存の知識体系の枠組みから状況に合わせてテーラリングする」という技術はアジャイルでも有効です。アジャイルチームでは「経験主義」が重視されるあまり、既存の有用なテスト技法などが、「今の私たちには重すぎる」と敬遠されてしまうことがあります。 そんな時、既存のテストプラクティスを、チームの文脈に合わせて「対話可能(議論のテーブルに乗せられる)」な状態に翻訳して提示すること。これもまた、テストの専門性を持つ人間がチームに提供できる価値の一つです。 ここで「アジャイルソフトウェア開発宣言」をご紹介させてください。 アジャイルソフトウェア開発宣言 アジャイルソフトウェア開発宣言でも、「プロセスやツールよりも個人の対話を」と述べられています。 「対話」そのものはチーム全員の責務です。 しかし、健全な対話を行うために、プロセスやツールの価値をプロとして「対話可能な状態」に整えておくこと。これこそが、テストエンジニアが果たすべき責務だと考えています。 おわりに 今回の記事では、スクラムマスターの専門性をQAエンジニアが取り入れることについてお話ししました。 記事の中で触れた「テスト設計」や「テストプロセス改善」との組み合わせ、そしてQAがチーム開発に関与していく姿勢をさらに学びたい方はぜひ「アジャイルテスティング」という分野に触れてみてはいかがでしょう。 品質・テストの観点からアジャイルについて論じた本は様々あります。 しかし、初学者の方が学ぶ際には、あえて「テスト」を標榜していない書籍から学習することをおすすめします。 その方が、QAエンジニアとしての関心と、アジャイルの関心がどこで重なるのか、自分自身で「気づき」を得やすいからです。 冒頭で述べた通り、私は「アジャイルとはチームを輝かせる手法だ」と強い憧れを抱きました。 実は、その憧れを今も捨ててはいません。しかし、今と昔とでは違う部分があります。 それは「チームの一員として問題に向き合い、チームをいきいきとさせる」ことを、はっきりと、自分ごととして捉えたことです。 私はかつて、「キラキラQA」という言葉に憧れたことがあります。しかし今、こう捉え直しています。 「開発(チーム)をキラキラさせる触媒になることができるQAエンジニア」だと。 【連載】技術を土台にして自分なりのQAエンジニアを組み立てる -あるQAの場合 【第1回】専門性をつなげて、あなたらしいQAエンジニアの像をつくる 【第2回】テストを設計する専門性 【第3回】テストマネジメントはテストマネージャーだけの技術ではない 【第4回】テストプロセス改善:思考の補助線としての専門技術 【第5回】幕間:異業種経験を土台にする 【第6回】テスト自動化:「設計原則」を知り、当たり前の技術にする 【第7回】スクラムマスターの専門性を持ったQAエンジニアとして The post 【第7回】スクラムマスターの専門性を持ったQAエンジニアとして first appeared on Sqripts .
「深夜に食べるラーメンは、体に悪い」 そんなことは、誰だって知っています。太るし、血圧は上がるし、翌朝の胃もたれも酷い。健康診断の結果を見てからやっと「次こそは……」と思うことでしょう。 でも、仕事が遅くに終わった帰り道、煌々と光る看板を見ると、つい足が向いてしまう。……美味しい。実はこれ、ソフトウェア開発における「シフトレフト」や「技術的負債の返済」が進まないことと大体同じような心理的状況だったりします。 連載第4回となる今回は、さらに踏み込んだ、シニアやスタッフ、プリンシパルといったICキャリアのQAへ進みたいQAエンジニアの皆様に向けてお話ししたいと思います。QAエンジニアとして品質について深く向き合ってきたあなたは、テストだけではなく様々な領域において幅広く活躍してきたステージだと思います。 「テストを前倒し(シフトレフト)した方が、後でバグを直すよりコストが低い」 「今、負債を返却しておかないと、将来の開発速度が落ちる」 論理的には100%正しい。誰もが同意する正論です。でも、目の前のリリース期限や、山積みのタスクを前にすると、私たちはつい美味しい方に手を伸ばしてしまうもので、それは決して間違いではありません。この「わかっちゃいるけど、できない」というジレンマを突破するために必要なのは、論理的な正論ではなく、実は 「情緒的な関わり」 である場合があるのです。 私も現在の会社ではチームリーダーとしてメンバーをマネジメントをしながら、スタッフエンジニアの仕事もしています。それまでのキャリアではいろんな品質改善の取り組みにチャレンジしてきましたが、上手くいかなかったことが8割で、上手くいった2割でなんとか成果を出してきたような気がします。打率はもっと低いかもしれません。今日はそんな経験の中で私自身や周囲から学んできた話をしたいと思います。 記事一覧:AI時代だからこそ「あなたにお願いしたい」と頼まれるQAエンジニアになろう 【第1回】QAエンジニアの「心技体」 (連載初回 全文公開中!) 【第2回】見えない相手への「思いやり」とは何か?——エントリーキャリアが在宅勤務で信頼を築くための合理的な配慮とは 【第3回】AI時代に問い直すドキュメンテーション —「主張」から「伝達」へ 【第4回】深夜のラーメンがやめられない僕たちは、いかにして「シフトレフト」を実現すべきか なぜ「正論」だけでは現場は動かないのか 私たちはプロとして、機能的な会話を得意としています。 「この設計だと、後にテストがしにくいです」 「不具合修正コストを考えれば、今自動化すべきです」 これらは事実に基づいた正しい指摘です。しかし、人は論理だけでは動きません。特に、疲弊しているチームや、プレッシャーのかかっている現場において、正論は時にただ追い込むだけになってしまうリスクがあります。 雨が降っている時に「傘を持っていけ」と言われるのは正しいアドバイスですが、すでに雨に濡れて凍えている時に欲しいのは、傘よりも先に「雨に濡れて寒かったね」という共感ではないでしょうか。そして、傘を持ち出した後にかけるべきは濡れなかったことへの事実ではなく「雨の音って何だか落ち着くね」という言葉だったりするのです。 「情緒的な関わり」という「心技体の心」の本質 私が考える「情緒的な関わり」とは、情報や事実の伝達(何が起きたか、どう解決するか)を目的とせず、 「その時どう感じたか」「心がどう動いたか」という感情や感覚を共有し合うこと です。もっと噛み砕いて言うと、 「正解や解決策を出さなくてもいい、心の交流」 です。人を動かすためには、前回私がお話した、「伝達スキル」とは正反対のスキルが必要になってくるのです。 「機能的」と「情緒的」の違い 論理的・機能的な会話との違いを対比させると、よりイメージしやすいかと思います。 特徴 機能的な会話・関わり (Functional) 情緒的な会話・関わり (Emotional) 目的 情報伝達、問題解決、タスクの完遂 共感、安心感、親密さ 焦点 「事実」や「結果」 「感情」や「プロセス」 反応 分析、アドバイス、評価 肯定、受容、相槌 例 「雨だから傘を持って行って」 「雨の音って、なんだか落ち着くね」 情緒的な関わりの正体(3つの要素) 具体的には、以下のような要素が含まれているとき、人は「情緒的な繋がり」を感じます。 共鳴 相手の言葉に対して「わかるよ」「私もそう感じる」と、チューニングを合わせる行為です。論理的な正しさよりも、「あなたがそう感じているという事実」を大切にします。 自己開示と弱さの共有 自分の完璧ではない部分、迷い、不安、あるいは喜びを素直に見せることです。そうすることで、相手も「ここでは素の自分でいいんだ」という安心感(心理的安全性)を抱きます。 「無駄」の共有 生産性や効率とは無縁の、とりとめのない話をすることです。「気遣いが嬉しかった」「なんとなく寂しかった」といった、生きていく上で必須ではないけれど、その人の「人間味」そのものである部分を分かち合う時間です。 なぜ情緒が必要なのか 人は論理だけで生きているわけではないため、機能的な関わりだけでは 「孤独」 が埋まらないからです。 シフトレフトが進まない背景には、多くの場合「不安」や「孤独」が隠れています。 「新しい手法を試して、スケジュールが遅れたらどうしよう」「品質を上げたいのは山々だけど、誰もこの苦労を分かってくれない」。 こうした感情を無視して論理だけで殴っても、ただ単に防御本能が働くだけです。「自分の感情が、そのままの形で他者に受け入れられた」という体験は、自分の存在そのものを肯定された感覚に繋がります。情緒的な関わりは孤立を防ぎ、関係に「深み」と「色彩」を与える役割を持っています。そのためには、まずはあなたが鎧を脱ぎ、目の前の人間と関係性を作ること。それが、変化への第一歩です。 ICキャリアのQAに求められる「真のスキル」 ここからが本題ですが、この 「情緒的な関わり」を使いこなすことは、シニアやスタッフ、プリンシパルといった上位職のQAエンジニアにとって、絶対に欠かせない必須スキル だと断言します。むしろ、キャリアの階段を上がれば上がるほど、これは『あったら良いもの』ではなく、 『成果を出すための必須スキル』 になっていくと思います。 なぜなら、キャリアが上がるほど、QAの仕事は「テストを回すこと」から「組織や文化を動かすこと」へとシフトしていくからです。 ① 影響力の行使(信頼残高を使う) 高度な改善(シフトレフトの定着やプロセスの改革など)は、時に痛みを伴います。その痛みをチームに受け入れてもらうには、 普段からの「情緒的な関わり積み重ね」による信頼残高 が不可欠です。「この人は自分たちの苦労を分かってくれている」「普段から私のことを気にかけてくれている」という安心感があるからこそ、厳しい提案やフィードバックも「自分たちのために言ってくれている」と受け止められます。 ② 心理的安全性の設計 技術的に鋭い指摘ができるシニアほど、周囲を萎縮させるリスクを持っています。 マネージャーの場合: メンバーが「失敗や弱音を吐いても大丈夫だ」と感じられる空気を作るのは、マネージャーの情緒的な受容力にかかっています。 シニア・プリンシパルの場合: 意識的に「弱さの共有」や「とりとめのない雑談」を差し込み、情緒的な繋がりを作っておかなければ、ただの「怖い人」「面倒な人」になり、現場の本当の悩み(=品質リスク)は、あなたの耳に届かなくなります。 ③ 人と人の摩擦を解く(EQ:心の知能指数) プロジェクトが停滞する原因の多くは、純粋な技術的難問ではなく、部署間のメンツやステークホルダーの不安といった「感情のもつれ」です。ロジックを振り回すのではなく、相手の感情を読み取り、配慮し、情緒的に関わる。このEQ(心の知能指数)の高さこそが、複雑な問題を解決する武器になります。 ④ 孤独なリーダーシップを支える 上位職になればなるほど、答えのない決断を迫られる「孤独」な場面が増えます。その時、周囲と情緒的な関わりを持っているリーダーは、メンバーから情緒的なサポートを受け取ることができ、それが折れない心の支えになります。私の人生においては、正直ほとんどがこのメンバーからの情緒的なサポートで支えられてきました。もしかすると、実はこれが全てかもしれません。 品質に完璧な答えは出せない。だから、共に歩むスキルが必要。 正直に言って、シフトレフトや改善の推進のやり方について私自身もまだ明確な答えを持っているわけではありません。私だって、今夜もまた、「体に悪い」と知りながらラーメンを食べてしまうことでしょう。 でも、いちQAエンジニアとして、チームのみんなとは一緒に歩んでいきたいと思っています。 その中で、「情緒的な関わり」を「甘え」や「無駄」と切り捨てるリーダーは、個人の能力で突破できる範囲で頭打ちになります。それだけは人間が働く限りは変わらない事実ではないでしょうか。 「健康にならなきゃダメだよ」と指を差すのではなく、「ラーメンって美味しいよね」と隣に座る。そんな情緒的な関わりを積み重ねた先に、ようやく「じゃあ、明日は少しだけ健康的なものにしようか」という、小さな、でも確かな変化が生まれるのだと信じています。 「論理で正解を出すが、情緒で人を動かす」 そんな素敵な大人を目指して、今日も一歩ずつ進んでいきましょう。 【連載】AI時代だからこそ「あなたにお願いしたい」と言われるQAエンジニアになろう 【第1回】QAエンジニアの「心技体」 (連載初回 全文公開中!) 【第2回】見えない相手への「思いやり」とは何か?——エントリーキャリアが在宅勤務で信頼を築くための合理的な配慮とは 【第3回】AI時代に問い直すドキュメンテーション —「主張」から「伝達」へ 【第4回】深夜のラーメンがやめられない僕たちは、いかにして「シフトレフト」を実現すべきか The post 【第4回】深夜のラーメンがやめられない僕たちは、いかにして「シフトレフト」を実現すべきか first appeared on Sqripts .
QAエンジニアの採用・選考 どう採るどう通る?連載の第2回です。 第1回 では、QA・テストエンジニア採用市場において私が見聞きしてきたミスマッチ等について、そして本連載の全体的な内容についてご説明しました。 今回からは2回に分けて、とくに求職者側が気をつけるべき点について書いていきます。 本記事のタイトルにもあるように、求職者の立場からはまず「どのようなQAエンジニアが求められているのか」を把握する必要があります。私自身、事業会社でQA組織を立ち上げるために募集をかけて、応募してくださった方の書類選考や面接などを行っていました。また他社でQAエンジニアを募集している方から募集文面のアドバイスを求められる機会などもあり、世の中の開発組織がどのようなQAエンジニアを欲しているのか、の感覚を持っているつもりです。本記事ではこのあたりを中心にご説明します。 求められているQA像を把握する、とは QAエンジニアに限らず、採用ではお互いをよく知ることが大切です。「そんなのは当たり前だよ」と思うかもしれません。しかし実際に書類選考などを行っていると、その当たり前が意外とそうではないことに気が付きます。 募集側から見たときに「募集要項ちゃんと見てくれたのかな?」「これってウチじゃないよね」と感じる書類が届くことも少なくありません。 もちろんこれには色々な事情があると思うのですが、求職者側にとっても募集側にとってもメリットがあまりありません。 ミスマッチを避けて、自分が興味を持っている企業から、自分を正しく理解してもらう。そして、選考を先に進めてもらう。そのために求職者側ができるのは、相手が求めているQA像をできるだけ正しく把握することです。 まずは企業がQAを募集している背景について知ろう 企業が出している採用ページや各種媒体の説明文には、募集の背景・求める人材像・必須要件などが書かれています。まず、募集の背景=なぜQAエンジニアを採用しようとしているのか、を押さえることが必須です。 「開発を続けてきてサービスが軌道に乗って、いよいよ一人目のQAを採用して品質にも力を入れていきたいんです」という場合もあります。また「QA組織はあるけれど、ビジネスがどんどん拡大していて開発チームやプロダクトの数に対してQAの数が追いついていないんです」というケースもあるでしょう。 企業側が抱える課題や実現したいことがあって、そのためにQAの力が必要となっている。だからQAエンジニアを採用したい。このように考えているわけです。なので、求職者側は募集背景として課題や実現したいことを把握したうえで、「私であればそれに貢献できますよ」とアピールする必要があります。 上の図は、求職者側が職務経歴書や面接で伝えるべきポイントについて構造化したものです。 先に述べた内容は図中の一番上、募集要項やカジュアル面談を通じて、課題ややりたいことを把握しましょうという部分です。 この図は次回に説明する「採用したいと思わせるには」という内容にも関連します。 背景をもとに、求められているQA像を把握する 募集の背景がわかったら、続いて募集側がどのようなQAエンジニアを求めているのかを把握しましょう。といっても、背景と求められているQA像というのはバラバラなものではなく、当然セットです。 先に挙げた例のうち、「開発を続けてきてサービスが軌道に乗って、いよいよ一人目のQAを採用して品質にも力を入れていきたいんです」パターンについて考えてみましょう。 一人目のQAの採用ということで、例えば以下のようなQA像を求めていると考えられます。 QA組織を立ち上げた経験がある 採用、評価、マネジメントができる QA組織のミッションや、開発組織の品質目標を定められる 社外向けの発信を通じてプレゼンスを向上させられる 開発者等に対して品質・テストに関する知識や技術移転を行える すべて挙げるとキリがないのでこのくらいにしておきますが、求める人材像として想像できる条件はいくつもあります。 これらの中には、募集要件の中に明示的に書かれていることもあれば、書かれていない場合もあります。書かれていない場合、条件が厳しすぎると応募が来ないので意図的に外すという選択をしているかもしれませんし、QA業務に対する解像度がまだそれほど高くないがゆえに思いついていないのかもしれません。 いずれの場合も、まずは募集要項に書かれている内容から求めるQA像を読みとること。それに加えて、書かれていないけれども募集背景から考えるとこういった要素も必要そう、という事項についても書き出せるとよいでしょう。それをカジュアル面談等で事前に確認しておくと、意図的に除いているのか思いついていなかったのかがわかりますし、場合によっては「『このひとはデキる!』」と思ってもらえるかもしれません。 世の中の会社がQAに求める要素 募集の背景や求めるQA像を把握するやり方について、イメージを持っていただけたと思います。 ここからは、実際に世の中の各社がどのようなQAを求めているのか、その全体感についてお話していきます。 同じQAを募集しているといっても、各社ビジネスの内容や規模など状況が異なるので、求めるQAには当然違いがあります。 とはいえ、とくに最近多いWebサービス関連の事業会社でQAを探していますというケースでは、求めるQA像には共通する内容があると考えています。 代表的な要素は”自走できる人” 募集要項などで頻繁に目にするのは”自走できる人”という条件ではないでしょうか。自律的に動ける人、主体的に動ける人、などもよく見かけます。よく見かけるものの、抽象的な表現ですよね。この”自走できる人”というキーワードを深堀りすることが、内定につながるひとつのポイントだと私は考えています。 QAを募集する側の考えている”自走できる”とは、具体的にはどのような要素を指しているのでしょうか。 たとえば、私が事業会社でQAエンジニアを募集している際に”自走”の意味合いとして考えていたのは、特定のプロダクトのQA業務をお任せできるレベル、です。社内で複数のプロダクトが存在する会社さんも多いと思いますが、プロダクトの数に対してQAエンジニアの数が足りていない、というケースもよく見かけます。そこで、QAエンジニアを採用して今着手できていないプロダクトもしくは開発チームに対してQA活動を行おうという意図があるわけですね。 特定のプロダクトのQA業務をお任せできる、というのも色々なパターンはあります。すでに担当がいるプロダクトのQAを引き継ぐ場合や、新規に立ち上げるプロダクトの担当を任せたい、という場合もあるでしょう。 いずれの場合も、社内にある知見・既存のプロセスだけではなく、QAエンジニア本人の経験やナレッジをうまく融合させて、そのプロダクトにおけるQAのやり方・あり方を作っていくことが求められます。これが、「自走」として求められる1つの要素だと考えています。 この要求を満たすためには、単純に「言われたことができます!」では足りません。開発者やプロダクトオーナーなど他の職種と常にコミュニケーションを取りながら、自分の仕事を自分で探したり、作ったりして進んでいくスキルが必要となります。 組織構造や体制も把握する必要がある 自走できること、が大事であるという点は納得していただけたのではないかなと思います。 加えて、実際に応募するにあたっては、応募先の事情に応じてどのような”自走”が求められているのかを考える必要があります。 代表的なものとして、募集側が想定しているQA組織の構成が挙げられます。たとえば、正社員のQAエンジニア数名と、他社からテストのプロに来てもらってプロジェクトのテスト業務を回そう、という想定をしているとします。このような会社に応募する場合は、実際にテスト会社のプロとしてリーダーをやっていた経験や、外部の専門家を率いて現場のプロジェクトを回していた経験が求められるでしょう。逆に、正社員のみでQA活動を行う状態を想定している会社の場合は、外部の専門家を率いた経験の優先度は低くなるでしょう。それよりも、プレイングマネージャーのような形で、仕組み化や効率化をしながらも自分自身も手を動かせる人、を求めているはずです。 応募先の求める人物像を把握したうえで、実際の職務経歴書や面接でどのようにアピールするかに関しては、次回詳しく解説します。 ニーズを正しく捉えてアピールにつなげよう 本記事では、募集背景やQA像の理解、そして代表的な「求められるQA像」である”自走できる人”について解説しました。 募集背景を理解し、「自走」という抽象的なキーワードの裏にある具体的な期待値を把握することが、応募において重要な第一歩です。そして、応募先の組織構造や想定している体制によって求められるスキルセットも変わってくることを認識しておきましょう。 次回では、これらの理解を踏まえて、職務経歴書や面接でどのようにアピールすれば採用担当者に「この人を採用したい」と思わせることができるのか、具体的な考え方とテクニックについて解説します。 関連記事 【第1回】QAテストエンジニア採用における募集側・求職者側のニーズと課題 今回から新連載をスタートします。本連載では、QAエンジニアやテストエンジニアの中途採用において生じているミスマッチを解消し、求職者・募集側双方の「解像度」を高めるための具体的なニーズ、課題、対策について解説します。私は仕事・プライベート両面で(自分... 続きを読む Sqripts The post 【第2回】求職者側の課題1:求められているQA像を把握する first appeared on Sqripts .
こんにちは!みなさん、テストしてますか? 第2回の前編 では、E2Eテストの基幹部分とも言える 要素探索 の技術の変遷について扱い、 中編 では 実装 の技術の変遷について扱いました。 後編では、どのようにブラウザを介してWebアプリケーションを自動操作するのか、つまり 自動操作技術 について触れたいと思います。また、UIを自動操作して実施するテストという点から、E2Eテストには良くも悪くも様々な目的が期待されてしまっていましたが、これらはWebアプリケーション開発技術の変遷と共に徐々に変わってきました。こうした E2Eテストの目的 についても触れたいと思います。 記事一覧:モダンなE2Eテストの考え方をマスターしよう 【第1回・前編】まずはやってみよう – Playwrightを使ったハンズオン(事前準備編) 【第1回・後編】まずはやってみよう – Playwrightを使ったハンズオン(テスト自動化編) 【第2回・前編】E2Eテストの歴史 -要素探索技術の変遷- 【第2回・中編】E2Eテストの歴史 -様々な実装技術- 【第2回・後編】E2Eテストの歴史 -自動操作技術と目的の変遷 自動操作技術の変遷 さて、この連載では一貫してPlaywrightを使っています。PlaywrightはいわゆるE2Eテストフレームワークですが、大きく分けると「Webブラウザを自動操作するコンポーネント」と「自動テストを記述するコンポーネント」で成り立っています。 このうち、「自動操作」のほうには様々な変遷がありました。あまりに古いものは自分も良く知らない部分が多いので、おおむね2016年以降の主要なマイルストーンについて記載します。 Selenium 3 と Webdriver CDP(Chrome DevTools Protocol)とヘッドレスChromeを用いた自動テストの流行 開発者体験を重視したツールの流行 Selenium 3 と Webdriver Seleniumは、2025年現在で利用できるものの中では、もっとも歴史の長いブラウザ自動操作ライブラリです。複数のブラウザを統一されたAPIで自動操作できる、というのが強みで、たくさんのテストケースをたくさんのブラウザインスタンス上で実行するためのインフラも用意しています。 クロスブラウザの複雑性をライブラリ側で吸収するというアイディアと、ブラウザとSelenium Serverの中継ぎをするWebDriver部分は仕様を公開して各ブラウザベンダーに実装を任せるという思想そのものは良かったのですが、自動テストインフラの複雑さを招くことにもつながり、インフラの構築やメンテナンス、テスト実行時のトラブルシューティングなどの別の辛さを招いてしまうことも多かったです。 加えて、Selenium WebDriverの(少なくとも当時の)設計思想は「UI上で実際にユーザーが可能なインタラクションを模倣する」というものだったため、テストのためのモック/スタブを作りにくかったり、ネットワークスロットリングなどで特殊な環境を再現した上でのテストが難しいという弱点もありました。 また、仕組み上全てがHTTPベースのコミュニケーションになってしまう点もパフォーマンス上問題になるケースが多く、特にページロードや要素の表示待ちなどが非常に長くなるケースがありました。当時E2Eテストに「不安定」「遅い」という印象を持っていた人たちは、おそらくこれらに苦しめられたいたことでしょう。 一方で、色々と問題はありつつも、自動テストのための大統一APIを作るというビッグピクチャーに向けて今もなお前進し続けているプロジェクトであることは疑いの余地はなく、自動テストエンジニアとして生きるならぜひ動向を追い続けたいプロジェクトの一つです。 ちなみに、HTTPベースの単方向通信しか出来なかったのを改善するために、新しくWebDriver BiDiという仕様が策定されています。こちらについては後述します。 CDP(Chrome DevTools Protocol)とヘッドレスChromeを用いた自動テストの流行 ChromeがHeadlessモードをサポートしたことと、CDP(Chrome DevTools Protocol)をテストに使うことでSeleniumの弱点をカバーできると考えて、CDPをベースにしたハイレベルAPIを実装したのがPuppeteerです。当初はCDPを使っていたのですが、現在は後述するWebDriver BiDiを用いています。 Seleniumがあくまでユーザーに出来る操作のみにフォーカスしていたのに対し(参考: Selenium使いのためのPuppeteer解説|Qiita )、PuppeteerはCDPを用いるためネットワーク速度のスロットリングやスタブなど様々な開発者向け機能に対応しており、テストしやすさを改善していました。 一方で、Seleniumユーザーたちの多くがJavaやPythonなどでテストコードを書いていたのに対して、PuppeteerはJavaScriptのみの対応でした。これは普段UIを扱うフロントエンドエンジニアたちには自然だった一方で、JavaScriptの非同期APIに慣れ親しむ前の自動テストエンジニアたちにとってはかなり悩みのタネで、筆者も「自動テストスクリプトが順番通りに動いてくれない……おれはただテストを自動化したいだけなのに……」と毎日悪戦苦闘していたのを覚えています。 ちなみに、パフォーマンスの点について公平のために補足しておくと、Chrome/Chromiumブラウザの自動操作を担うWebDriver実装であるChromeDriverもまたCDPベースで実装されています。ですが、やはりWebDriver自体の通信がHTTP通信であることによるオーバーヘッド自体が大きかったため、速度の面でPuppeteerの方が有利でした。 また、SeleniumとPuppeteerの大きな違いとして、Selenium Gridのような大規模テストインフラを構築する機能の有無がありました。これは大量の実機テスト実行環境を束ねる目的では重要なのですが、CI/CD環境の中でChromiumをインストールしてテストを回すようなケースではそもそも不要なものでもありました。 開発者体験を重視したツールの流行 Cypress さて、Puppeteerの登場で、あくまで筆者の肌感ではあるものの、自動テスト界隈の人気は二分された印象がありました。 テストコードが書けるたくさんのテストエンジニアを中心にたくさんの自動テストを実行したい→Selenium 開発者が日常の開発サイクルの中でガンガンE2Eテストを回していきたい→Puppeteer そうすると、開発者はどうしても 開発者体験 の良さに目が行ってしまいます。例えば、ドキュメントが豊富であるとか、コードが書きやすいとか、デバッグ用のツールキットが充実しているとか、普段の開発エコシステムの中に組み込みやすいとか、そういった具合です。 そんな中で登場したのがCypressです。Cypressははフロントエンドの開発体験をウリにしたツールで、当時の開発者たちが慣れ親しんでいたjQueryのメソッドチェーンを踏襲した書きやすいAPI、フロントエンドエコシステムとの親和性、デバッグ体験の良さなど、良いところがたくさんありました。 一方で、仕組み上複数タブ・ウィンドウの切り替えが出来ないことや、クロスドメインiframeがテストできないことなどは、テスト対象のウェブサイトによっては致命的でした。ちなみに、Cypressのドキュメントは本当に徹底していて、これらのトレードオフまでつまびらかに解説されています。 Cypress docs: https://docs.cypress.io/app/references/trade-offs こうした課題はありつつも、上述した開発者体験の良さ、ならびにこうしたトレードオフまで充分に解説されたドキュメントなどは非常に開発者フレンドリーで、多くの開発者たちに親しまれていました(余談ですが、筆者はあるオンラインカンファレンスでCypressの中の人が「ドキュメントが充実しているのもCypressのいいところで、困ったことがあったらCommand+Kで一発で検索できる」と誇らしげに語っているのを見て、とても良いことだなと感心した覚えがあります)。 Playwright さて、Cypressのメジャーリリースとほぼ同時期に、本連載でも使っている Playwright がα版として産声を挙げました。自動操作の方法としてはPuppeteerが使っているCDPというものになるのですが、この方法は名前の通りChromium系のブラウザ(Chrome、Chromium、Edge)でしか使えないので、FireFoxやSafariはテスト用にビルドしたものを使っています。 個人的には非常にバランスの取れた、良い意味でいいとこ取りのツールだと捉えています。開発者体験の観点からCypressと人気を二分していましたが、その後Cypressと似た機能を取り入れることでより強力なツールになりました。 余談: Selenium4・Webdriver-BiDi 冒頭で紹介したSeleniumですが、何となくオワコンのように見えてしまいがちですが、きちんとメンテナンスされ続けており、2022年には待望の新メジャーバージョンが登場しました。本記事のPuppeteerの項目で「PuppeteerはCDPを直接触れるのでテストが楽」というようなことを書きましたが、Selenium4は待望の cdp エンドポイントが実装され、ブラウザによりますがCDPによる豊富なデバッグ機能にアクセスできるようになりました。 また、Seleniumの根幹となるWebdriver規格も進化しており、新たにWebdriver-BiDiというものが提案されています。BiDiはBiDirectional、つまり双方向の略です。SeleniumがHTTPベースの単方向通信のみのツールだったのを、Webdriver-BiDiはWebsocketベースの双方向通信のものに変えています。これにより、ページの表示待ちなどのパフォーマンスが改善しました。 Puppeteerの話の中で触れたとおり、現在PuppeteerはCDPベースからWebdriver-BiDiベースに変わっています。これがより進んでいくと、クロスブラウザテストのやりやすさはより高くなっていくはずです。 目的/役割の変遷 さて、この「E2Eテストの歴史」は、主にE2E自動テストで使われる技術の変化にスポットを当てることで、「本/記事によって書いてあることが全然違う」という状態を解きほぐすことを目的にしていました。締めくくりとして、これらの技術が何に対して使われるのかの変遷についても理解しておきましょう。 手続き的UIの時代: UIテスト = E2Eテスト JavaScriptによるインタラクティブな表現が可能になった直後のWebアプリケーションは、UIの変化をDOMツリーの操作によって行っていました。例えば、以下のサンプルは簡単なToDoアプリの実装です。ページ全体を読み込み直すことなく、ToDoアイテムの追加/削除のタイミングでデータをバックエンドサーバーに送信しています。 <div id="todoApp"> <input type="text" id="todoInput" placeholder="新しいタスク"> <button onclick="addTodo()">追加</button> <ul id="todos"></ul> </div> <script> function addTodo() { const text = $('#todoInput').val(); if (text) { // バックエンドにPOST送信 $.post('/api/todos', {text: text}, function(todo) { // 成功時にDOMに要素を追加 $('#todos').append(`<li data-id="${todo.id}">${todo.text} <button onclick="deleteTodo(${todo.id})">削除</button></li>`); $('#todoInput').val(''); }); } } function deleteTodo(id) { // バックエンドにDELETE送信 $.ajax({ url: `/api/todos/${id}`, method: 'DELETE', success: function() { // 成功時にDOM要素を削除 $(`li[data-id="${id}"]`).remove(); } }); } </script> DOMツリーを直接編集するということは、状態を再現させるためにはそこまでの手続きを再現させなければいけないということでもありました。再現させるためにはバックエンドも(データベースなども含め)完全なものを準備する必要があるため、必然的にUIテスト=E2Eテストという構図が生まれていました。 宣言的UIの時代: UIテストとE2Eテストの分離 一方、Reactに代表される宣言的UIフレームワークは、「状態を引数として受け取り、UIを返却する」関数としてUIを定義しています。同じToDoアプリをReactで書くと以下のようになります。 function TodoApp() { const [todos, setTodos] = useState([]); const [inputText, setInputText] = useState(''); const addTodo = async () => { if (inputText) { const response = await fetch('/api/todos', { method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify({text: inputText}) }); const newTodo = await response.json(); setTodos([...todos, newTodo]); setInputText(''); } }; const deleteTodo = async (id) => { await fetch(`/api/todos/${id}`, {method: 'DELETE'}); setTodos(todos.filter(todo => todo.id !== id)); }; return ( <div> <input value={inputText} onChange={e => setInputText(e.target.value)} placeholder="新しいタスク" /> <button onClick={addTodo}>追加</button> <ul> {todos.map(todo => ( <li key={todo.id}> {todo.text} <button onClick={() => deleteTodo(todo.id)}>削除</button> </li> ))} </ul> </div> ); } これにより、状態を再現させるための手続きを踏まなくても、特定の状態をテストできるようになります。 また、特徴的なのがUIをいくつかのコンポーネントのまとまりとして構成しており、各コンポーネントを分けてテストすることも可能である点です。子コンポーネントたちも親と同様に状態を受け取る関数として定義されているので、コンポーネントごとに状態を変えられるようになりました。 同時に、WebフロントエンドのビルドはバックエンドのWebアプリケーションフレームワークと別のフレームワークが担当することも増え、フロントエンドUIのみを分離してテストする傾向が増えてきました。その結果、純粋にUIの挙動だけをテストしたい場合はUIコンポーネントテストで済ませ、バックエンドとの統合における不具合の検知やCUJ(クリティカルユーザージャーニー: もっとも重要なユーザー導線)をE2Eテストで守る、という考え方が広まってきました。 まとめ この後編では、自動操作技術の変遷と、E2Eテストの目的の変遷について、流れを追う形でまとめてみました。 第2回はこれで終わりです。続く第3回では、E2Eテストが他のテストレベルとどう違うのか、どのような目的で行われるのか、どのように使い分けるべきなのか、などについて深堀りしていきたいと思います。 【連載】モダンなE2Eテストの考え方をマスターしよう 【第1回・前編】まずはやってみよう – Playwrightを使ったハンズオン(事前準備編) 【第1回・後編】まずはやってみよう – Playwrightを使ったハンズオン(テスト自動化編) 【第2回・前編】E2Eテストの歴史 -要素探索技術の変遷- 【第2回・中編】E2Eテストの歴史 -様々な実装技術- 【第2回・後編】E2Eテストの歴史 -自動操作技術と目的の変遷 The post 【第2回・後編】E2Eテストの歴史 – 自動操作技術と目的の変遷 first appeared on Sqripts .
前回 はエントリーキャリアの方に向けて、在宅勤務における「他人を思いやる力」を具体的な行動レベルで深掘りしました。 連載第3回となる今回は、対象を少し広げ、中堅(ミドルキャリア)のQAエンジニアの皆様に向けてお話ししたいと思います。テーマは、実務とエンジニアの「心(マインドセット)」を照らし合わせた、 「コミュニケーションに重点を置いたドキュメンテーション」 についてです。 記事一覧:AI時代だからこそ「あなたにお願いしたい」と頼まれるQAエンジニアになろう 【第1回】QAエンジニアの「心技体」 (連載初回 全文公開中!) 【第2回】見えない相手への「思いやり」とは何か?——エントリーキャリアが在宅勤務で信頼を築くための合理的な配慮とは 【第3回】AI時代に問い直すドキュメンテーション —「主張」から「伝達」へ AIにお任せしてコミュニケーションを放棄していませんか? 本題に入る前に、少し今の時代背景を振り返ってみましょう。 ChatGPTをはじめとするLLM(大規模言語モデル)の登場により、私たちの文章作成のあり方は劇的に変わりました。仕様書のたたき台、コードのドキュメント、日々のメールまで、AIは驚くほど流暢なテキストを瞬時に生成してくれます。 その一方で、AIが生成した文章に対して「AIっぽいな…」「なんだか人間味がないな」と感じた経験はないでしょうか? ここ最近では、「AIが出力しがちな語彙」というトピックが結構目に入るようになってきました。私自身も日頃から生成AIを活用していますので、「おっ、この言い回しは自分がいつも見ている回答にも使われがちだな」と思うことは多々あります。他人に向けた文章として引用する場合は、わざわざAIの回答から仰々しすぎるような記載を削除することもあります。 しかし、「AIっぽさ」の正体は単なる語彙力や表現力の問題とは限りません。もっと根本的な 「コミュニケーション」 にあると思います。AIを使いこなす時代だからこそ、エンジニアとして、一人の人間として、私たちが本当に磨くべきスキルについて考えてみませんか。 AIの文章が見抜かれる本当の理由 結論から言うと、AIが生成した文章に人間味が感じられない根本的な原因は、「誰に、何を伝え、どう行動してほしいか」という意図や目的が込められていないからです。 これは、プロンプトエンジニアリングのテクニック以前の、もっと本質的なことです。どんなに優れた技術や事実も、それを伝える「目的と意図」がなければ、相手には届きません。目的のない文章は、単なる事実の羅列、つまり一方的な「主張」で終わってしまうのです。 「主張」と「伝達」の決定的な違い コミュニケーションにおける「主張」と「伝達」の違いを、日常の「地図アプリ」の例えで考えてみましょう。 AIが書きがちな「主張」 「この地図アプリは、高解像度の地図データと高精度ルーティングエンジンを搭載しており、オフラインでも動作します」 これは単なるスペックの提示であり、事実の「主張」です。 人間が設計すべき「伝達」 「この地図アプリがあれば、初めての街への出張でも乗り換えに迷わず、約束の5分前に余裕をもって到着できます」 こちらは、「初めての街に向かうビジネスパーソン」というターゲットに、「迷わず到着し、時間に余裕が生まれる」という未来(メリット)を届けることで、インストールや有料プランへの登録といった行動を促す、明確な目的と意図を持った「伝達」になっています。 これはマーケティングの世界で言われる 「ドリルと穴」 の話と同じです。「顧客が求めているのは『4分の1インチのドリル』ではなく、それによって開けられる『4分の1インチの穴』である」という、手段(ドリル)よりも目的または価値(穴)の重要性を説く有名な格言です。 この差は、エンジニアの日常業務にも当てはまります。仕様書やドキュメントは、単なる機能の「主張」に終わっているかもしれません。読み手(他のエンジニアや企画職)が「何をすべきか」を明確に理解できる「伝達」になっているでしょうか。 QAエンジニアのドキュメンテーションでは伝達力も大事な要素 QAエンジニアが作成するドキュメント群においても同じことが言えます。これらは単なる「事実の列挙」ではありません。プロジェクトを健全な方向に導くための「意思決定支援のためのツール」であるべきです。ここで求められるのが、事実を並べるだけの「主張」を超えた、相手を動かすための「伝達力」です。 なぜQAにとって伝達力が重要なのか、3パターンの成果物からその本質を深掘りします。 1. テスト計画・QA戦略: 品質の「定義」を共有し、目線を合わせる テスト計画書やQA戦略を策定する際、単に「どの機能を、いつまでに、どうテストするか」というスケジュールや手法を羅列するだけでは不十分です。 大切なのは、 「今回私たちが守るべき品質とは何か?」という目的を言語化し、関係者に伝達させること です。 主張: 「全機能を網羅的にテストし、重大なバグがないことを確認します」 伝達: 「今回のリリースでは新機能のUX向上に注力するため、決済導線の安定性を最優先事項として定義し、そのためのエッジケース検証を重点的に実施します」 このように、守るべき価値を言語化することで、PdMや開発者と「品質に対する納得感」を共有でき、品質においてプロジェクト全体が一貫した方向性を持てるようになります。 2. テスト分析・設計:専門家としての「根拠」が信頼を作る 「なぜそのテストが必要なのか」という根拠が伝わるドキュメントは、QAエンジニアとしての専門性を示す重要な成果物になります。 「仕様書に書いてあるから」という受動的な理由ではなく、 「このリスクを排除するために、この観点でのテストが必要である」という意図 を分析結果に込めることが重要です。 設計意図が伝達されているドキュメントは、開発者にとって「この人がここまで考えてくれているなら、このテストをパスすれば安心だ」という信頼感にもつながります。この積み重ねが、QAチームの組織内におけるプレゼンス(存在感)を高めていくのです。 QAエンジニアの成果物には、コードのように「動作する・しない」という明確な成立条件がありません。だからこそ、あなたにしか考えられない「根拠や意図」こそが、成果物の価値や あなたの専門性 を決定づけるのです。 3. 不具合起票:チームを「修正」へと突き動かす 不具合報告(バグチケット)こそ、最も伝達力が試される場所です。単に「期待値と異なる挙動」を報告するだけでは、それは単なる事実の「主張」に過ぎません。 優れたQAエンジニアは、 「この事象によって、誰が、どのように困るのか(ビジネス・ユーザーへのインパクト)」 を明確に伝えます。 単なる事実: 「ボタンの反応が3秒遅れます」 伝達力のある報告: 「初回利用ユーザーがこの遅延に直面した場合、アプリがフリーズしたと誤認し、離脱率が上昇するリスクがあります」 特に修正可否の判断が難しい境界線上の不具合において、あなたの伝達力が試されます。エンジニアやPdMに対し、重篤度(Severity)や優先度(Priority)を意思決定するための「温度感」を専門家としての立場から正しく伝え、チーム全体を「これは直すべきだ」という合意形成へ導くこと。これこそが、プロダクトの品質を左右するQAの真の価値です。 誰の目から見ても明らかな不具合だけでなく、 「あなたしか気づいていない、潜在的なリスクや使い勝手の欠陥」 を見つけたとき。それを単なる主張で終わらせず、価値ある改善へと変えられるかどうかは、あなたの「伝達力」にかかっているのです。 AI時代に、私たちが本当に磨くべきスキル AIは、文章の「下書き」や「壁打ち相手」として非常に強力なツールです。しかし、AIが生成したテキストを鵜呑みにして、そのまま利用することは、「私は読み手のことを何も考えていません」と公言しているに等しい行為です。それは思考の放棄であり、コミュニケーションの放棄に他ならなくなってしまいます。 私たちの仕事は、コードやテストを書くだけで終わりません。プルリクエストのコメント、設計思想を伝えるドキュメント、チームメンバーとのチャット。そのすべてが、目的を持ったコミュニケーションです。私自身もQAエンジニアで、私のチームでもAIを用いたテスト設計が進んでいます。そこでも全く同じことが言えると思っています。 AIが私たちの知的労働の一部を代替してくれる時代だからこそ、私たち人間が磨くべきなのは、AIには(まだ)できない、この 「コミュニケーションを設計する力」 ではないでしょうか。 技術がどれだけ進化しても、その中心には常に「人」がいます。AIという相棒は強力です。この強力な相棒を手に入れた今だからこそ、コミュニケーションの基本に立ち返り、思考する価値を、再認識すべきなのかもしれません。 【連載】AI時代だからこそ「あなたにお願いしたい」と言われるQAエンジニアになろう 【第1回】QAエンジニアの「心技体」 (連載初回 全文公開中!) 【第2回】見えない相手への「思いやり」とは何か?——エントリーキャリアが在宅勤務で信頼を築くための合理的な配慮とは 【第3回】AI時代に問い直すドキュメンテーション —「主張」から「伝達」へ The post 【第3回】AI時代に問い直すドキュメンテーション —「主張」から「伝達」へ first appeared on Sqripts .
技術を土台にして自分なりのQAエンジニアを目指す本連載、第6回のテーマは「テスト自動化」です。 前回の記事 をご覧いただいた方はご存じだと思いますが、私は文系大学出身で、キャリアのスタートは営業職でした。 実務で、商用のプロダクトコードを書いた経験は、今もありません。 もっと言えば、かつての私は「Pythonの環境構築」をするためだけに、1カ月以上も躊躇して手が動かなくなるような人間でした。当時の上司から「Python興味あるんだったらなんで入れないの?」「やらないってことは興味ないってことじゃん」と言われた記憶があります。 私が上司だったらそんなことは言わないですが、そう思う気持ちはすごくわかります。 当時は本当に何もわからずに、「Anaconda」がいいのか、「仮想環境」がいいのか、公式からインストールできるPythonがいいのか。 そもそもPCにPythonを入れてしまって、壊してしまうかどうかも不安でした。 そんな私が、どのようにしてテスト自動化という領域に自信を持ち、それをQAエンジニアとしての土台に変えていったのか。 今回は、ツールを動かすことの先にある「設計原則」への理解と、そこから得られた視点についてお話しします。 記事一覧:技術を土台にして自分なりのQAエンジニアを組み立てる -あるQAの場合 【第1回】専門性をつなげて、あなたらしいQAエンジニアの像をつくる 【第2回】テストを設計する専門性 【第3回】テストマネジメントはテストマネージャーだけの技術ではない 【第4回】テストプロセス改善:思考の補助線としての専門技術 【第5回】幕間:異業種経験を土台にする 【第6回】テスト自動化:「設計原則」を知り、当たり前の技術にする 本稿におけるテスト自動化 本題に入る前に、この記事で扱う「テスト自動化」について定義しておきます。 一般的にテスト自動化といえば、「ツールを使ってテスト実行を自動化すること」と捉えられがちです。 しかし、AIによるコーディングが当たり前になった現代において、私はより広い意味を定義したいと思います。 「テストという活動を構造化し、実行可能な『ソフトウェアシステム』として設計・構築・運用する技術」 テストにおいて、単にスクリプトを書くことと、システムとして構築することは似て非なるものです。 前者は時に手順の翻訳となってしまいますが、後者にはアーキテクチャが必要で、保守性への配慮も必要であり、なにより 「テストそのものへの深い理解」 が必要です。 かつてはテスト自動化スクリプトを書くだけでも立派な「テスト自動化エンジニア」でした。 しかし、2026年1月現在、AIはスクリプトを書くことはできますが、プロジェクトのコンテキストに適した「テストシステム」の青写真を人間の補助なしに、プロジェクトに最適化された形で描くことはできません。 この 「テストシステムを設計する技術」 こそが、本稿で伝えたいテスト自動化の本質です。 ツールを通して「普遍的な課題」を学ぶ 私がテスト自動化を学び始めた当初、関心は「どうやって動かすか」というHowにありました。 当初は書いたコードがすぐ壊れる辛さや、朝になったら自動テストが動いてない悲しみを味わっていたことを覚えています。そこから、Page Object ModelやCIの学習を深め、Playwrightなどのモダンなツールの設計思想に触れるにつれて、視点が変わっていきました。 自動化ツールやデザインパターンは、単なる便利な機能の寄せ集めではありません。 それらは、 テスト活動が抱える「普遍的な課題」への解決方法 そのものでした。 例えば、WebのE2Eテストでは「待機処理」が頻繁に課題になります。 これは、テスト実行環境やネットワークの「不確実性」といかに向き合うかという、Webの自動テストにおける難しいテーマです。 また、UI変更のたびにテスト修正に追われた経験や、Flakyなテストへの対応は、まさに「保守性」の課題そのものでした。 優れたツールには、こうした課題に対する一貫した問題意識や思想が込められています。 「なぜ、この機能があるのか?」「なぜ、この設計なのか?」 その背景にある思想を理解することは、単にツールの使い方を覚えるだけでなく、テストそのものに対する解像度を一気に高めてくれます。 自動化技術を学ぶことは、コーディングスキルを磨くだけでなく、こうしたテストの構造的な課題を深く理解するプロセスでもあります。 これはE2Eテストツールを通じて、自分ごととなる課題と、それをソフトウェアで解決するということをリアルに感じた瞬間でした。 「設計原則」が技術的な自信をくれた プロダクトコードを書いたことのない私が、技術的な議論に加われるようになった最大の要因は、「設計原則」を知ったことです。 自動テストを書いていくうちに、「動けばいい」だけのコードに限界を感じ、気がつきました。自動テストのコードもまた、ソフトウェアだということです。 そこにはソフトウェア設計の原理原則が適用されます。特に重要だったのが「関心の分離」や「単一責任の原則」といった概念です。 テストコードの良し悪しを言語化できる これらの原則を意識するようになったことで、私はコードを「なんとなく動く」ではなく「構造」や「意味」で捉えられるようになりました。 例えば、表面的な理解しかしていない私では、生成AIや他者が書いたテストコードに対し、「動いているからOK」としか言えなかったと思います。 しかし今は、違和感を自分自身で言語化し、「テストの保守性」や「意図」という観点からレビューができるようになりました。 「このアサーションはこのテストで本当に確認したい内容でしょうか?」 「このコードは分離して共通化することが可能ではないでしょうか?」 「ツールが目指す方向性に合っているか」「良い構造か、将来の変更に耐えうるか」を判断するための視点は、ツールの思想や、設計原則を学ぶことで養えます。 この視点を持てたことが、私の技術的な自信の源泉となりました。 自動化を「当たり前の選択肢」にする 設計原則を知り、技術的な見通しが立つようになると、テスト自動化に対する心理的なハードルが消え去りました。 そして、テスト自動化は特別な領域ではなく、「当たり前の選択肢」の一つになっていることに気がつきました。 「選択できる」という強み 今の私は、簡単なスクリプトであれば構成を考えてサッと自分で書くことができます。(今では生成AIを使いますが) あるいは、複雑なテストであっても、その構造を読み解き、保守のリスクを見積もることができます。 重要なのは「全てを自動化すること」ではありません。 「ここは手動でやるべきか、自動化すべきか」という問いに対し、技術的な裏付けを持った上で自信を持って検討できる状態にあることです。 自動化もできるし、手動もできる。「今回はこちらがベターな選択だ」と根拠を持って説明できること。 これが、QAエンジニアとしての幅を広げていると考えています。 専門性の組み合わせ 最後に、この技術が他の専門性とどう結びつくか触れておきます。 テスト設計との組み合わせ 自動化の構造(アーキテクチャ)を理解することで、テスト設計の質が変わります。 まず私が強く感じているのは、 自動テストを書くことによってテストケースの性質を理解できるようになったことです。 自動化しやすいテストケースは、往々にして「前提条件が明確」で「責務が単一」な、人間にとっても分かりやすいテストケースです。 「関心の分離」という思考の補助線は、自動・手動を問わず、堅牢なテスト設計を行うための強力な武器になります。 テストマネジメント テストマネジメントにおいては、ROIの判断や戦略的に自動化を取り入れるかどうかの判断が、より精緻になると考えています。自動化コードの「保守コスト」や「技術的負債」のリスクを実体験に基づいて理解しているため、過度な期待も悲観もせず、 プロジェクトの状況に合わせて適切なタイミングで自動化という選択肢を選べるようになりました。 おわりに かつての私のように、「文系だし」「環境構築すら怖い」と尻込みしている方も多いかもしれません。 私にとって、テスト自動化を学ぶことは、ある意味で「プログラマーになること」と同義でした。 しかし、そのハードルは、想像していたよりもずっと低いものでした。 そしてそのハードルを飛び越えることによって、プログラマーとして「プロ」であることの困難さと、その凄みを目の当たりにしました。 勇気を出してその一歩を踏み出してみれば、そこにはシステムが動く仕組みや、先人たちが築き上げたソフトウェア設計や原則が、複雑な現実を生き抜くための「道しるべ」となってくれるはずです。 テスト自動化を学ぶことは、その「道しるべ」を発見する最高のきっかけになるはずです。 その小さな一歩が、あなたのQAエンジニアとしての強固な土台となると考えています。 【連載】技術を土台にして自分なりのQAエンジニアを組み立てる -あるQAの場合 【第1回】専門性をつなげて、あなたらしいQAエンジニアの像をつくる 【第2回】テストを設計する専門性 【第3回】テストマネジメントはテストマネージャーだけの技術ではない 【第4回】テストプロセス改善:思考の補助線としての専門技術 【第5回】幕間:異業種経験を土台にする 【第6回】テスト自動化:「設計原則」を知り、当たり前の技術にする The post 【第6回】テスト自動化:「設計原則」を知り、当たり前の技術にする first appeared on Sqripts .
こんにちは。システムエンジニアのバッサーノです。 私はここ1年ほどモバイルデバイスに関連したソフトウェアの開発業務に携わっています。 特に近年はテスト自動化への注目が高まっており、モバイルデバイスについてもテスト自動化の導入が進んでいます。 今回はモバイルテストの自動化をする上で最もオーソドックスなツールであるAppium(アピウム又はアッピウム)について、概要や使い方に触れていきたいと思います。 この記事がモバイルアプリのテスト自動化に興味がある方、導入を検討している方や勉強中の方の参考になれば幸いです。 1. Appiumとは? 1.1. Appiumの概要 まずAppiumとは何か、形式的なところで言うと Appium は、iOS・Android向けのネイティブアプリ、ハイブリッドアプリ、Webアプリのテストを自動化するためのオープンソースツールです。 構造としては以下の図のようになっており、Appium Serverがテストスクリプトの命令を解析してAndroid/iOSデバイスを操作するコマンドへと変換し、デバイス上で指定した操作を実行してくれます。 またAppiumという名前からもわかるように、Webのテスト自動化で標準的に使用されているSeleniumベースの記法となっているため、すでにSeleniumを使用している方は同じような形式でAppiumのテストスクリプトを作成することができます。 1.2. Appiumの主な特徴 1.2.1. クロスプラットフォーム対応 iOS と Android の両方に対応し、同じテストコードで異なるプラットフォームをテストできます 1.2.2. 多言語サポート WebDriver Protocol に基づいているため、以下の言語でテストコードを記述できます Java Python JavaScript (Node.js) Ruby C# PHP 1.2.3. オープンソース Appiumはオープンソースで開発が進められているため、無償で利用することができます 1.3. Appiumを利用するメリット Appiumを使うことで以下の点を改善することができます。 自動化によってリグレッションテストのたびに同じ操作を繰り返す必要がなくなる iOSとAndroidで別々のツールを使い分ける必要がない CI/CDパイプラインにテストを組み込むことができる 2. Appiumを動かしてみる では実際にAppiumを使ってどのように自動テストができるのか、Appiumを実際にインストールして動かしてみましょう。 2.1. 事前準備 前項でも述べているようにAppiumはオープンソースであるため、無償でインストールして利用することができます。ここではサンプルとして以下の環境でAppiumを使用してAndroidのテストを実行してみます。 OS バージョン macOS 14.6.1 ツール バージョン 確認コマンド Node.js v20.19.1 node -v npm 11.6.2 npm -v JDK Java 8 java -version 2.2. Appium のインストール この記事の執筆時点(2025年11月)ではAppiumの最新バージョンは3.1.1であるため、今回はこのバージョンをインストールして使ってみます。使用するAppiumのバージョンによっては事前条件の各種ツールの必要バージョンも変化します。 # Appium本体のインストール npm install -g appium # インストールの確認 appium -v 出力例 : 3.1.1 2.3. UiAutomator2ドライバのインストール Appiumでは、プラットフォームごとのドライバを個別にインストールする必要があります。 # Android用UiAutomator2ドライバのインストール appium driver install uiautomator2 # インストール済みドライバの確認 appium driver list --installed 出力例 : ✔ Listing installed drivers - uiautomator2@6.3.0 [installed (npm)] なお、すでにAppium2系をインストール済みの場合は、ドライバのバージョンの競合などによりエラーが発生する場合があります。その場合はドライバの更新や再インストールなどを試してみてください。 2.4. Android Studioのインストール 今回はAndroid Studioのエミュレータを使用してテストを実行します。Android Studioをインストールされていない場合は公式サイトからインストールが可能です。 Android Studio公式サイト: https://developer.android.com/studio 2.5. 環境変数の設定確認 Androidツールを使用するためには環境変数が設定されている必要があります。以下のコマンドを実行し、JAVA_HOMEとANDROID_HOMEに正しいパスが表示され、PATHにそれらのパスが含まれていれば問題ありません。 # 環境変数の確認 echo $JAVA_HOME echo $ANDROID_HOME echo $PATH 未設定の場合は、以下を ~/.zshrc または ~/.bash_profile に追加します: # Java export JAVA_HOME=$(/usr/libexec/java_home -v 8) # Android SDK export ANDROID_HOME=$HOME/Library/Android/sdk export PATH=$ANDROID_HOME/platform-tools:$PATH export PATH=$ANDROID_HOME/cmdline-tools/latest/bin:$PATH export PATH=$ANDROID_HOME/emulator:$PATH # 設定を反映 source ~/.zshrc # または source ~/.bash_profile 2.6. Appium Doctorで環境チェック Appium Doctor を使って、環境が正しくセットアップされているか確認します。 # Appium Doctorのインストール npm install -g appium-doctor # Android環境のチェック appium-doctor --android 出力例 : info AppiumDoctor Appium Doctor v.1.16.2 info AppiumDoctor ### Diagnostic for necessary dependencies starting ### … info AppiumDoctor ### Diagnostic for optional dependencies starting ### … 「 ### Diagnostic for necessary dependencies starting ### 」のすべての項目に ✓ が表示されればOKです。 2.7. Androidエミュレータの準備 今回はAndroidエミュレータを使用してテストを行います。 Android Studioを起動 Tools > Device Manager を開く Add a new device… > Create Virtual Device をクリック デバイス(例: Pixel 5)を選択して Next システムイメージ(例: API 33 (Android 13))を選択して Next (未ダウンロードの場合はダウンロードアイコンからダウンロードが可能) エミュレータ名を設定(例: Pixel_5_API_33 )して Finish Device Managerメニューにある「 ︎」を押してエミュレータを起動する Android Studio上でエミュレータの画面が表示されればOKです。 また、以下のコマンドでデバイスの接続状態が確認できます。「emulator-5554」という文字列がこのデバイスを指定するためのシリアルIDとなっており、実機の場合もここがデバイス固有の値になります。 # 接続されているデバイスを確認 adb devices 出力例 : List of devices attached emulator-5554 device Status が device と表示されていればOKです。 2.8. Python環境のセットアップ Appiumは複数の言語のスクリプトに対応していますが、今回はその中でもPythonを使用してサンプルのスクリプトを作成します。 以下で必要なライブラリのインストールを行います。 # Appium Pythonクライアントのインストール pip install Appium-Python-Client # Seleniumライブラリ(依存関係) pip install selenium # pytest(テストフレームワーク) pip install pytest 2.9. テストスクリプトの作成 それでは、実際に実行するテストスクリプトを見ていきましょう。ここでは、以下のようなテストを作成しています。 Androidの標準の設定アプリを起動する 画面要素を探して標準出力する スクリーンショットを取得する 流れとしてはまず端末の指定するためのシリアルIDやテスト対象のアプリの指定などの各種情報をcapabilitiesに設定して、この後立ち上げるAppium ServerにHTTP通信してセッションを作成します。 そして、そのセッションを使用してテスト内の各命令を送信し、デバイスを操作してテストを実行します。 ファイル名 : test_android_settings.py from appium import webdriver from appium.options.android import UiAutomator2Options from appium.webdriver.common.appiumby import AppiumBy import time def test_android_settings(): # Desired Capabilitiesの設定 options = UiAutomator2Options() options.platform_name = 'Android' options.automation_name = 'UiAutomator2' options.device_name = 'emulator-5554' # adb devicesで確認したデバイス名 # 設定アプリを起動(アプリのインストール不要) options.app_package = 'com.android.settings' options.app_activity = '.Settings' # セッション開始までのタイムアウト設定 options.new_command_timeout = 300 # Appium Serverに接続 driver = webdriver.Remote('http://localhost:4723', options=options) try: print("✓ 設定アプリが起動しました") # アプリが起動するまで少し待機 time.sleep(2) # 現在のアクティビティを取得 current_activity = driver.current_activity print(f"✓ 現在のアクティビティ: {current_activity}") # 画面上の要素を検索(検索ボックスを探す) search_elements = driver.find_elements(AppiumBy.CLASS_NAME, 'android.widget.TextView') print(f"✓ 画面上に {len(search_elements)} 個のTextView要素が見つかりました") # 最初のいくつかの要素のテキストを表示 print("\n--- 画面上の要素 ---") for i, element in enumerate(search_elements[:5]): text = element.text if text: print(f"{i+1}. {text}") # スクリーンショットを保存 driver.save_screenshot('settings_app.png') print("✓ スクリーンショットを保存しました: settings_app.png") print("\n✓ テスト成功!") except Exception as e: print(f"✗ エラーが発生しました: {e}") driver.save_screenshot('error_screenshot.png') finally: # セッションを終了 driver.quit() print("✓ セッションを終了しました") if __name__ == '__main__': test_android_settings() 2.10. Appium Serverの起動 ここまででテストを実行する準備が整いました。早速テストを実行してみましょう。 手順としてはまずAppium Serverを先に起動します。 # デフォルトポート(4723)で起動 appium # または、ログレベルを指定して起動 appium --log-level info 起動成功時の出力例 : [Appium] Welcome to Appium v3.1.1 [Appium] The autodetected Appium home path: /Users/testkit/.appium [Appium] Attempting to load driver xcuitest... [Appium] Attempting to load driver uiautomator2... [Appium] Requiring driver at /Users/testkit/.appium/node_modules/appium-uiautomator2-driver/build/index.js [Appium] Requiring driver at /Users/testkit/.appium/node_modules/appium-xcuitest-driver/build/index.js [Appium] AndroidUiautomator2Driver has been successfully loaded in 1.403s [Appium] XCUITestDriver has been successfully loaded in 3.417s [Appium] Appium REST http interface listener started on http://0.0.0.0:4723 [Appium] You can provide the following URLs in your client code to connect to this server: http://127.0.0.1:4723/ (only accessible from the same host) http://192.168.3.13:4723/ http://192.168.64.1:4723/ http://172.32.1.15:4723/ http://172.32.1.34:4723/ http://172.32.1.26:4723/ [Appium] Available drivers: [Appium] - xcuitest@10.8.0 (automationName 'XCUITest') [Appium] - uiautomator2@6.3.0 (automationName 'UiAutomator2') [Appium] No plugins have been installed. Use the "appium plugin" command to install the one(s) you want to use. 注意 : Appium Serverは起動したままにしておきます(テストスクリプトは別のターミナルウィンドウで実行してください)。 2.11. スクリプトの実行 # スクリプトを実行 python test_android_settings.py 実行成功時の出力例 : ✓ 設定アプリが起動しました ✓ 現在のアクティビティ: .Settings ✓ 画面上に 42 個のTextView要素が見つかりました --- 画面上の要素 --- 1. Settings 2. Network & internet 3. Connected devices 4. Apps 5. Notifications ✓ スクリーンショットを保存しました: settings_app.png ✓ テスト成功! ✓ セッションを終了しました 出力されたスクリーンショット(settings_app.png) このようにAppiumを使用することでモバイル端末上でアプリを起動し自動テストを実行することができます。実行時にAndroid Studioのエミュレータの画面をみてみると、実際に端末の設定画面が起動されるところも確認できると思います。 また、今回はAndroid Studioのエミュレータを使用しましたが、実機をADB接続することでエミュレータと同様に実機上でアプリをテストすることも可能です。 3. まとめ 本記事では、モバイルテストの標準的な自動化ツールとして、Appiumの概要を説明し、インストールから実際のテストコード実行までを解説しました。 Appiumは環境構築でのコマンドラインの操作やテストスクリプトの作成など、普段あまり触れない方にとってはとっつきにくい部分もあるかもしれません。実際に現在では様々なテスト自動化のGUIツールが存在し、コードレスに自動テストを作成することもできます。しかしAppiumは原始的な分、より柔軟なテストが作成できますし、自動テストの原理や流れを理解しやすいという点でも勉強して損はないと思います。 次回は、実機でのAppiumのテスト実行の手順や、より複雑なテストを作成するのに便利なツールの紹介をしていきます。 The post Appiumモバイルテスト自動化入門(1) 〜環境構築と初めてのテスト〜 first appeared on Sqripts .
前回 、エンジニアの成長における「心技体」の中でも、土台となる「心(マインドセット)」の重要性についてお話ししました。早速、具体的な話に入っていきます。まずはちょっとしたことから「思いやり」を始めていきましょう。 関連記事 【第1回】QAエンジニアの「心技体」 1人のエンジニアとして成長し続けるために、私たちは何を意識するべきでしょうか。特定の知識を極めることでしょうか。最新の技術トレンドを追いかけることでしょうか。それらも言うまでもなくとても重要なことですが、もう1つ普遍的な要素があるかもしれません。武... 続きを読む Sqripts 本記事は、まずはQAエンジニアとしての社会人キャリアを歩み始めたばかりの方々(エントリーキャリア)を主な対象としています。今回は「心(マインドセット)」の一つである 「他人を思いやる力」 について、具体的な行動レベルまで深掘りしていきます。 コロナ禍を経て在宅勤務が当たり前の働き方のひとつになった今、 「見えない相手をどう思いやるか」 というスキルは、チームで成果を出すための重要なスキルとなったと考えています。 そして、ビジネスにおける「思いやり」とは、単なる優しさや気遣いではありません。それは、 チーム全体の生産性を最大化するための、合理的な配慮 です。このスキルは、お互いの姿が見えない在宅勤務という環境で、その真価が問われると思います。 私自身、エントリーキャリアの時には何度もこれから話すようなことで怒られてきました。私は全く完璧な人間ではないのです。たった1人のQAとして会社に所属をし、1人で周り全ての信頼を積み重ねなければいけないこともありました。その中でこれからお話しするようなことをしなかったばかりに失敗をして周囲の信頼を落としてしまうこともありました。 これからお話しすることは当たり前のように聞こえますが、誰でも最初からできることでは決してないのです。それでは、見ていきましょう。 在宅で他者と働く……ための、前提と作法 在宅勤務では、あなたが仕事をしている姿を誰も直接見ることはできません。これは、 あなたが報告をしない限り、周囲は「仕事が進んでいるのか」「どこかで困っていないか」を把握できず、不安や憶測を生む原因となります。 ここで「いちいち進捗を報告しないといけないのか?」という疑問を持つ方がいるかもしれません。その答えは明確に「はい」です。なぜなら、他者と協力して働くとは、 自身の状況を適切に共有し、チームの透明性を保つこと だからです。 ただし、「報告」と「むやみな割り込み」は紙一重です。特にテキストコミュニケーションは、口頭での会話と異なり、相手に文脈の理解や論理構造の読解を強いてしまいます。また、レスポンスする際にも書き手の論理構造や客観的な分かりやすさを考えるコストや時間が必要になります。そのため、安易な割り込みは相手に考える時間を使わせてしまい、結果的に相手の時間を大きく奪ってしまうのです。 「むやみな割り込みをしない」ことは、相手の時間を不必要に奪わないためにも、非常に大切な「思いやり」です。そのためには、メッセージを送る前に、背景や根拠、判断に必要な材料をあらかじめ整理し、要点を簡潔にまとめておくことが重要です。あるいは、すぐに返事が必要ない用件であれば、相手が都合の良い時に確認できるチケットのコメントに残すなど、「バーチャルな肩たたき」の作法を意識しましょう。 「この連絡内容や連絡のやり方は、相手の時間を奪うだけの価値があるものか?」と自問自答することが、信頼関係の第一歩です。 在宅勤務で大切なのは「ステータスで仕事を進めること」 前述の「報告」を実践する上で最も大切なのが、 ステータスの更新を意識すること です。 ステータスを細かく区切ってこまめに更新するほど、あなたの状況は明確になり、周囲も「ちゃんと仕事が進んでいる」と安心して自身の業務に集中できます。 これが、在宅勤務において自律やセルフマネジメントが必要であるとされる理由ではないでしょうか。 「いつでもいい」の正しい意味 この「ステータス管理」を実践する上で、特に注意すべきなのが「いつでもいい」と言われたタスクの扱いです。これは決して「放置していい」という意味ではありません。依頼が発生した時点で、相手はあなたの成果を待つ状態に入っています。あなたが完了を遅らせるほど、相手はその時間を奪われ、後続タスクがある場合はチーム全体の進捗が滞ります。 例えば、あなたに以下の4つのタスクがあるとします。 5分で終わるタスク(いつでもいい) 1時間で終わるタスク(いつでもいい) 1日かかるタスク 1週間かかるタスク もし、あなたがDの完了後にAを報告したら、依頼者はどう思うでしょうか。 「5分で終わるなら、もっと早く対応してくれれば、自分の次の仕事が進んだのに…」 と感じるのが自然です。 「いつでもいい」ものほど早く終わらせようとする意識は、こうした些細な待ち時間をなくし、あなたの信頼を積み重ねる大事な行動になります。また、優先度の低いタスクがいつまでも滞留(スタック)するのを防ぐ効果もあります。 ただ、優先度が低いタスクであることには変わりありません。そこで有効なのが、 「このタスクは、自分だけで完結するのか、それとも他者を巻き込むのか」 を自問自答することです。自分だけで完結する作業であれば他の優先タスクとの兼ね合いで調整しても良いですが、他者を待たせるタスクだけは、積極的に片付けていくようにしましょう。 ミーティングの予定をカレンダーに入れるというちょっとしたことでも、MTGに招待される側はその日の予定を確認し整理をして、明日の始業に向けて準備をするというタスクを後ろ倒しにさせてしまいます。 ステータスの更新が信頼を作る 複数のタスクがすべて「Doing」のままだと、周囲は何が進んでいて、どこで詰まっているのか判断できません。そこで重要になるのが、ステータスを「やっているか否か」ではなく 「どの程度完成しているか」 で区切る意識です。 「叩き台が完成したので、方向性が合っているか確認お願いします」といった途中経過の共有は、問題を早期に解決し、周囲に安心感と信頼をもたらします。手が止まった時点で「ここまでは自分で考えました。でもここから迷っています」と伝えるのは、あなたの誠実さを示し、問題を早期に解決するための極めて有効な手段です。 遅れるほど成果物に「質」が求められる こまめな報告を怠ったりちょっとしたことを後回しにすると、もう一つ厄介な問題があります。それは、 成果物の提出が遅れるほど、アウトプットに対する期待値が上がってしまう という点です。時間をかけた分、「しっかり作り込まれているはずだ」と思われるのは当然のこと。 もし2日かけて提出した成果が、実は15分で終わるような内容だったり、他者の成果の流用だったりした場合、「時間を無駄にしたのではないか」という不信感に繋がりかねません。こまめな進捗共有や困っていることの相談は、こうした過度な期待値の上昇を防ぐためにも不可欠なのです。 相手の時間を尊重するコミュニケーション技術 これまでの話は、主に「報告」という受け身のコミュニケーションでした。ここからは、依頼や質問といった、より能動的なコミュニケーションにおける「思いやり」の技術について解説します。 1. 根拠のある依頼 タスクの期限延長や仕様変更など、相手に行動や承認を求める際には、必ず 客観的な根拠 が必要です。「私が困っているから助けてください」という主観的な訴えは、相手に判断材料を与えず、一方的な要求の押し付けになりかねません。客観的なデータや事実に基づいて依頼することは、相手が迅速かつ合理的に判断するための手助けとなり、結果的に相手の時間を尊重する「思いやり」となるのです。 2. 相手の時間を奪わない質問の仕方 エントリーキャリアの方が最も悩むのが「質問」でしょう。良い質問の基本は、「よくない質問=相手の時間を奪う行為」という意識を持つことです。 自己解決の過程を示す: 「〇〇を達成するために、AとBの方法を試しましたが、Cというエラーが出てしまいます」のように、自分がどこまで調査・試行したかという具体を伝えます。 期待する結果と現状の差分を明確にする: 「本来は〇〇となるはずが、現状は△△になっています」と、ゴールと現在地という抽象を示します。 質問を具体的にする: 「動きません」ではなく、「この部分のエラーメッセージの意味が分からず、解決のヒントをいただけますか?」と、何に困っているのかをピンポイントで伝えます。 3. 一度のやり取りで完結できる文章を意識する 在宅勤務は、相手がすぐに返信できない「非同期」が基本です。一度のメッセージで完結させる文章術は、相手の集中力を奪わず、無駄なやり取りを減らす「思いやり」です。 結論ファースト: 「〇〇について相談です」と最初に目的を明確にします。 背景と経緯の提供: 相手が「これって何の話だっけ?」とならないよう、関連するチケットのURLや過去のやり取りへのリンクを必ず添えます。 選択肢と自分の意見の提示: 「どうしたらいいですか?」と丸投げするのではなく、「A案とB案があり、私は〇〇という理由でA案が良いと考えますが、ご意見いただけますか?」と書きます。 まとめ 在宅勤務で他者と円滑に働くための基本は、以下の行動に集約されます。 ステータスを軸に仕事を進め、更新を早める 周囲を巻き込む「いつでもいい」は、相手を待たせすぎないことが前提と心得る ステータスを「完成度」で細かく区切り、途中経過を共有する 依頼や質問は、相手が判断しやすいように「根拠」と「試行錯誤の過程」を添える 文章は、一度のやり取りで完結するように情報を整理して書く これらはすべて、相手の時間を尊重し、チームの透明性を高め、不必要な不安や手戻りをなくすための 「合理的な配慮」 です。こうした一つひとつの配慮がチームに心理的安全性を育み、あなたの「信頼」を築き上げます。 The post 【第2回】見えない相手への「思いやり」とは何か?——エントリーキャリアが在宅勤務で信頼を築くための合理的な配慮とは first appeared on Sqripts .
今回から新連載をスタートします。本連載では、QAエンジニアやテストエンジニアの中途採用において生じているミスマッチを解消し、 求職者・募集側双方の「解像度」を高める ための具体的なニーズ、課題、対策について解説します。 私は仕事・プライベート両面で(自分自身の転職を含め)、QA・テストエンジニアの採用に関連して色々な活動をしてきました。そのなかでわかったのは、募集する側も、求職者側も、それぞれに困っているということです。 採用したいという会社・仕事を探しているという個人がいずれもたくさんいるのであれば、多くの人・会社がハッピーになれるような気がします。しかし実際には、両者のマッチングはそううまくいっていないようです。中にはうまくいっているように見える会社さんもありますが、全体の割合で考えると決して多くはないでしょう。 このような、募集側・求職者側が双方困っている状態に対して、個人として微力ではありますが、なにかしらお役に立てれば・・・と思って今回の連載を書こうと決めました。 連載の全体像については本記事後半で触れることとし、まずはQA・テストエンジニアの採用で感じることからお話していきます。 求職者側・募集側になって、そして両者を支援してみて見えたこと 私は過去の所属企業においてQAエンジニア/テストエンジニア/テスト自動化エンジニアの採用に関わっており、募集内容の作成や書類選考・面接などを行ってきました。本職の人事の方には及びませんが、エンジニアとしては採用活動に関与したほうかなと思っています。 また、個人活動として「QAのことならなんでも話せるカジュアル面談」の窓口を設けて、本記事執筆時点で丸2年ほど色々な方とお話する機会をいただきました。この活動でさまざまなお悩みに対して相談に乗っていたりもしたのですが、そのなかのトピックとして「転職活動がうまくいかない」等採用に関するものもありました。実際に職務経歴書についてレビューしたり、気になる会社さんのカジュアル面談にお繋ぎしたり、といったことも行っています。 この実体験から、いくつか重要な点が見えてきました。 スキル・経験値部分でのミスマッチがある 転職サイトなどの募集を見ると、QAエンジニアの募集は昔と比べてかなり数が多いように見えます。募集がたくさんあるということは、良い条件で容易に転職が可能・・・と思いますよね。 しかし、そこで求められているのはQAのリーダーができる人など、いわゆるハイクラス人材、スペシャルな人である場合が多いです。 背景にはさまざまな要因が考えられますが、全体の傾向としては「とにかく人が欲しい」という企業は少なくなっており、「優秀な人だけが欲しい」「ベテラン相当の即戦力が欲しい」というのが本音のようです。 では求職者側はどうでしょうか。身の回りのQAコミュニティでの人の移動などを見ていると、企業側が欲している 優秀な人は、リファラル等で転職していく 傾向があるようです。一方、若手だけれども伸びしろがある人や、強い意欲があるけれども現職でなかなかスキルアップの機会に恵まれないため転職を考えている人、も世の中にはたくさんいます。しかし、経験年数や経験した業務の内容などが企業の求める「ハイクラス」の要件に満たず、なかなか転職活動がうまくいかない状況が見られます。 まとめると、 企業側:ハイクラス人材が欲しいがリファラルなどで転職する場合も多く、採用市場にはでてきづらい、母数が少ない 求職者側:やる気とポテンシャルをもつ層が、ハイクラス相当の実績や経歴を得る機会を求めている という、若干のミスマッチが起きているというのが現状ではないか、と私は見ています。 アピール不足による機会損失 採用市場におけるミスマッチがあるとして、企業側も「ハイクラスでなければ絶対にダメ」というところばかりではありません。ポテンシャルに期待しての採用や、*年後にはこのくらいに成長してくれそうだから、といったように未来を見通した採用をしている会社ももちろんあります。 ここで求職者側が、自身のポテンシャルや今後の成長についての見通しを適切にアピールできれば、双方にとって良い形でマッチングすると思うのですが・・・募集する側の立場から見て非常に「もったいない」と感じる場面も多々あります。 採用面接や書類選考を担当し、担当のステップで合格判断をして次のステップに進んでもらう場合は、「なぜこの候補者を通過させるのか」を説明できなければいけません。これは社内でより上位の選考官に共有するためという側面もありますし、「迷ったら不合格」が採用のセオリーとも言われています。 つまり、合格にするには合格にするなりの理由が必要なんですね。 落とす理由は無いけれど、通すための理由にも欠ける。 そういった判断になる方が一定数いる、というのが私の実感です。おそらくスキルや経験があるのに、適切にアピールされていない。これが、もったいなさを感じるポイントでした。 募集側も訴求に困っている 求職者側だけでなく、募集側もアピールに困っているという話をよく聞きます。 どのような場所・インフラで募集をかけるとQAエンジニアにリーチできるのかがわからない どのような文面・内容で募集すれば応募してもらえるかがわからない、本職のQAに「刺さる」募集がだせていない が、個人的にいただくご相談トップ2です。「QAの方ってどこにいるんですか!?」は本当に鉄板の質問ですね。現職QAからすると「そこらにいっぱいいますよ」なのですが、募集側にとってはそこに適切にリーチできていないという問題があるようです。 とくに一人目のQAエンジニアを採用する場合はこれらの問題は切実です。QAエンジニアが社内にいれば募集文面のレビューや面接担当など任せられますが、一人目を募集している状態ではそれはかないません。QAエンジニアに対する知見やコネクションが無い状態でQAエンジニアを募集・採用しなければならないというのは、ハードルが高いです。 本連載の概要 QA・テストエンジニアの採用に関して、私が体験した・見聞きした情報をもとに現状をお話してきました。 本連載では、先に述べたような課題をクリアして、募集側・求職者側のチャンスが増えるためにはどうすればいいのかについてそれぞれの立場について解説していきます。前半である第2回・第3回は求職者側について、第4回・第5回は募集側についての内容となります。 第2回では、まずどのようなQAエンジニアが求められているのか、募集する側の声や実際に私が事業会社でQAエンジニアを募集していた際に「このような人を求めていた」という内容について説明します。全ての会社が同じような人材を求めている、というわけではありませんが、大まかな傾向とともに、パターンの一つとして参考にしていただければと思います。 第3回では、職務経歴書や面接でどうやって相手に「採用したい」と思わせるのか、考え方について解説します。これまでQAエンジニア個人に対して行ってきた職務経歴書のレビューの中で、よくコメントするポイントについてまとめます。書類・面接で落ちてしまう場合は単純にスキルが足りていないというケースもありますが、相手に合わせた見せ方・アピールができていないことが原因となっている場合もあります。こういった問題への対策を説明します。 第4回では、募集する企業側がどのように「求めるQA像」を表現するか、について解説します。とくに一人目QAを募集する場合、何を書けば訴求できるのか、逆に何を書くと避けられてしまうのかの勘所が無くて困ることも多いと思われます。QAが居ないから採用したいけど、QAが居ないから知見・勘所がない。このようなデッドロック状態の解消に役立てていただきたいです。 そして最後の第5回では、QAエンジニアに対する認知獲得について触れていきます。いくら募集が魅力的でも、実際にエンジニアから知られていないことには応募が集まりません。もちろん、「これをやればQAエンジニアの中での認知が獲得できます」というような銀の弾丸はありません。しかしやれることをコツコツやらなければ、いつまでも認知はされません。このあたりの、手の打ち方のバリエーションをご紹介できればと思っています。 最後のおことわり:採用・転職することがすべてではありません 連載の初回記事の最後で水を差すようなことを書いてしまいますが、なにもQAを採用することがすべて、転職をすることがすべて、ではありません。 冒頭で書いたように、採用したい、転職したいという思いを持った方同士がうまくマッチして双方が幸せになればそれは嬉しいことです。しかし、QAを採用すれば万事うまくいくわけでもなければ、個人が転職をすれば万事うまくいくわけでもありません。これらは言わずもがな、ですね。 しかしそれでもこのような記事を書くのは、QAを採用するための努力やQAとして採用されるための努力を適切に行うことが、企業・個人双方がQAに関する解像度を高めたり、自分たちのやろうとしていることを深堀りするよい機会になると考えているためです。 ひとことで言うと、さまざまなことを考え、言語化する強制力が働くというメリットがあります。 募集側であれば、自分たちが品質という視点でどのような困りごとがあって、QAエンジニアに何を求めたいのか。あるいは自分たちが何をわかっていて何をわかっていないのか。 こうしたポイントを言語化する必要に迫られますし、言語化できていないと結果的にふわっとした募集になり、誰も応募してこない・・・という結果になります。これは求職者にとっても同様です。 繰り返しになりますが、本連載を通じて絶対にQAを採用したり転職したりしろ!というつもりはありません。ただ、実際に募集・応募するかどうかは別として、考えるきっかけ・材料にしていただけるといいかと思います。 The post 【第1回】QAテストエンジニア採用における募集側・求職者側のニーズと課題 first appeared on Sqripts .
これまでの連載では、「テスト設計」、「テストマネジメント」、「テストプロセス改善」といった、QAエンジニアとしての専門技術についてお話ししてきました。 今回は「幕間」として、技術とは少し異なるテーマを語ります。 連載の第1話で 、「多様な専門性を積み上げて、自分だけのQAエンジニア像を作っていく」というアプローチを紹介しました。 そう言っている私のキャリアのスタートは、実はエンジニアではありませんでした。 文系大学を卒業し、新卒で「営業職」に就いたのです。 いわゆる異業種転職であり、「回り道だね」と言われることもあります。 その気持ちも理解できます。 しかし、私自身はこの営業経験もまた、今のQAエンジニアとしての活動に息づいており、「土台」 になっていると感じています。 今回は、この「土台」がどのようにQAの専門性と繋がって いるのか、私の経験をお話しします。 営業の本質とは何か? 「営業」と聞くと、コミュニケーション能力、交渉力、スピード、あるいは体力といったスキルや特性を思い浮かべるかもしれません。 もちろん、それらは重要です。 しかし、私が学んだ営業の本質は、それらを使う「目的」にあります。 営業の本質とは、突き詰めれば「発注書をもらってくること」だと私は捉えています。先に挙げたスキルは、すべてそのための「手段」に過ぎません。 この考えは、「目的のために必要な手段を正しく使う」という、私のエンジニアリングの指針に通じると考えています。 営業として「発注書」という明確なゴール(目的)のために、あらゆる手段(コミュニケーションや交渉)を最適化しようともがいた経験が今でも生きています。 現在のQAエンジニアとして「品質保証活動の目的は何か?」「この改善のゴールはどこか?」を常に問い、その達成のために最適な技術(手段)を選択するという、専門性の基盤になっているのです。 「納品後」の緊張感と説明責任 私は建設業の営業だったのですが、キャリアの土台として最も強烈に記憶に残っているのが、「施主検査」という体験です。これは、納品物(工事結果)をお客様(施主)が最終確認する場です。 私は営業であり、現場の作業を直接管理しないことが多かったです。 しかし、営業として施主検査に同行し、「正しく工事が行われたこと」「問題が正しく解決されたこと」を顧客に説明する「説明責任」がありました。 現場には、お客様、職人、そして営業の私といった関係者が集まります。 その中で、お客様が鋭い視点で確認していくのです。 「この配線はこれでいいの?」 「これの使い方はどうするの?」 どんな質問が飛んでくるかわからない。顧客の厳しい目線に晒される、あの独特の「スリル」と、緊張感を、私は肌で感じていました。 この経験は、現在のQAエンジニアとしての私に、二つの強さを与えてくれました。 社内ステークホルダーへの報告に、心理的負担がないこと チーム内のレビューや、マネージャーへの報告などで、私は心理的なプレッシャーをほとんど感じません。 なぜなら、本当の「厳しい目線」は、身銭を切って発注してくれた顧客の目線であることを知っているからです。 社内の指摘は、その「本当の検査」を通過するための、仲間からのフィードバックに過ぎないというマインドセットに繋がりました。 「どう伝えるか」を目的志向で考えられること 第3回の「テストマネジメント」で、QAは「意思決定を促すことが重要」であり、「組織全体での『合意形成』や『意思決定』の側面もある」と記述しました。 施主検査での説明責任は、まさにこれです。 ただ事実を並べるのではなく、「この問題は、このように解決済みです」と、相手が「OK」という意思決定ができるように情報を構成し、伝える必要があります。 顧客という最も厳しい相手に説明責任を果たそうとした経験が、「何を伝えるか」と同時に、「どう伝えれば、相手がより良い意思決定ができるか」を考える思考の土台となっています。 信頼を構築する「誠実さ」 “営業”というと、フィクションの影響か、数字のために軽薄な行動をとるイメージがあるかもしれません。 しかし、私が「発注書」をいただき続けるプロセスで痛感したのは、「信頼関係」の重要性であり、それを構築するための「誠実さ」でした。 特に私は20代前半と若かったため、知識や経験ではベテランにかないません。また、お客様からもそういった期待はされていません。 そんな私がお客様に信頼感を得るために唯一できたことが、「誠実さ」でした。 目の前のお客様が抱える問題に対し、真摯に考える。 時には、自社のサービスではなく別の方法を勧めるなど、会社にとって短期的な利益が最大にならない提案であっても、お客様にとっての最適解を「誠実」に答える。 こうした姿勢は、短期的な売上には繋がらないかもしれませんが、「あの若い営業は、うちのことを本気で考えてくれる」という長期的な信頼関係に繋がります。 結果として、継続的に相談を受けられるようになり、顧客との関係が強固になることを学びました。 この「誠実さ」は、QAエンジニア、特にテスターとしての振る舞いに直結しています。 テスターの仕事は、しばしば「悪い報告」(バグ報告やリスクの指摘)をすることとも言えます。 しかし、その際に「自分はテスター(役割)だから」とあぐらをかき、事実だけをドライに突きつけていては、本当の信頼は得られません。 大切なのは、例えば1on1などを通じて「個人として認識してもらい」、信頼関係を築くことです。 第4回の「テストプロセス改善」でも、現場の聞き取りや「徹底的な言語化」が重要だと述べましたが、その土台にも「信頼」が不可欠です。 悪い報告であっても、「誠実さ」という強みをもって、「あなたの仕事を否定したいのではなく、一緒にプロダクトを良くしたい」という姿勢で伝える。そうすることで、それは単なる「ダメ出し」ではなく、「プロダクトを共により良くするための建設的な情報」としてチームに受け取ってもらえるのです。 「顧客目線」の生々しさを知る 営業として新規の飛び込み営業をしていた時、「異物を見る」ような冷たい目線を浴びることも日常でした。 飛び込み営業では、受付で「いいですいらないです」と冷たくあしらわれることがほとんどです。「大変だね」と憐れみを持って親身に話を聞いてくれる人もいます。 QAエンジニアが語る「顧客目線」は、時として「この製品のファン」というポジティブな側面で語られがちだと考えます。 しかし、営業現場で体験した「顧客」とは、もっと多様で、生々しいものでした。 「品質は誰かにとっての価値」という言葉がありますが、私はこの「誰か」の多様性、特に「ファンではない人々」、あるいは「製品に全く興味がない人々」のリアルな視線を、この時に学びました。 この経験は、単に「ユーザー」と一括りにするのではなく、「この機能に全く期待していない人」や「競合製品と比較している人」といった、多様なステークホルダーの生々しい視点を想像する解像度が、営業経験によって格段に上がったと感じています。 QAエンジニアとして、営業の「土台」を活かすために 私にとって営業経験は、開発における「視野の広さ」 とも取れるような視点を形成する重要な土台となっています。 我々は開発チームの中にいると、時に「営業が変な要求を聞いてきた」と、一方的に批判してしまうことがあります。 しかし、こう想像してはいかがでしょうか。 「私たちが作った製品をお客様に届けるために、営業担当はどのような努力をしているのか? 」 私が体験したような「生々しい顧客」と、日々対峙しているのは彼らです。 我々は「ユーザーにとって価値がある」だけでなく、「売れることが可能な製品」を作れているでしょうか? もし、この記事を読んで「土台」の重要性に共感してくれたなら、ぜひ彼らの「リアルな声」に、パートナーとして耳を傾けてみていただきたいです。 可能であれば、ぜひ「商談に同席させてもらう」ことをお勧めします。 開発側からの歩み寄りを歓迎している営業担当は、皆さんが思うよりずっと多いと思っています。 そこで得られる「生々しい」顧客の視点や、営業担当が目的を果たすために、どれほどの「誠実さ」と「説明責任」を果たそうとしているかをぜひ体感してみてほしいです。 それこそが、あなたの専門性を強固にし、プロダクトを「売れる製品」へと導く、確かな「土台」となります。 一見、関係ないように見える経験も、必ずどこかで緩やかに繋がっています。 皆さんのキャリアを形作る「土台」は、どのような経験でできているでしょうか。 The post 【第5回】幕間:異業種経験を土台にする first appeared on Sqripts .
1人のエンジニアとして成長し続けるために、私たちは何を意識するべきでしょうか。特定の知識を極めることでしょうか。最新の技術トレンドを追いかけることでしょうか。 それらも言うまでもなくとても重要なことですが、もう1つ普遍的な要素があるかもしれません。 武道やスポーツの世界で一流を目指す者が重んじる「心技体」という言葉があります。この「心技体」とは、心と技術と身体能力……この三つの要素がバランス良く揃って、初めて真の実力が発揮されると言われます。 このような三位一体的な依存関係という考え方は、ソフトウェア開発者に限らず、QA、SRE、インフラ、セキュリティなど、 ITに携わるエンジニア の成長にも当てはめることができると考えています。 本連載では、この「心技体」をエンジニアの成長に必要不可欠な要素を表すモデルとして当てはめ、特にその土台となる 「心」 、すなわちコミュニケーションやヒューマンスキルに焦点を当てて掘り下げていきます。 今回はその序章として、まずエンジニアにおける「心技体」の全体像を概観します。 「心」としてのマインドセット:エンジニアとしての在り方 本連載で最も深く掘り下げていく 「心」 。ここで言う「心」とは、曖昧な精神論ということではありません。では何かというと、それはエンジニアとしての「在り方」や「考え方」を指す 「マインドセット」 です。そして最も重要なのは、このマインドセットが 才能に依存するものではなく、意識をして訓練することによって後天的に習得・向上できる「スキル」である という点です。 このマインドセットのスキルには、主に以下の力が含まれると考えます。 本質的な「正しさ」を考え抜く力 例えば、与えられたタスクをこなすことは、スタートラインに過ぎません。なぜこのテストアーキテクチャなのか?このテスト計画で目指したい品質を本当に保証できるのか?目指したい品質とは何か?ビジネス価値や将来の拡張性まで見据え、プロジェクトにとっての「本当の正しさ」を誰よりも深く考え抜き、意思決定する力です。 目的のために、貪欲に学ぶ力 優れたエンジニアは、コンフォートゾーンに留まらない傾向にあります。目の前の課題を解決するため、あるいは自らが見つけ出した「正しさ」を証明するために、必要とあらば開発、品質保証、インフラ、さらにはビジネス領域まで、あらゆることを貪欲に学び続ける傾向にあると考えています。 考え抜いたことを「伝える力」 どれほど優れたテスト設計やテスト戦略も、「どうしてこの戦略になったのか」という意図や背景が他者に伝わらなければ価値は半減します。客観的に妥当な設計書、意図の明確なテストケース、ユーザーへのリスクが伝わる不具合報告など、考え抜いた結論を他者が理解し、活用したり 意思決定できるという伝える力 です。 他人を思いやる力 信じられないかもしれませんが、エンジニアの成長において「他人を思いやる力」こそが、最終的に最も大きな差を生むスキルだと考えています。なぜならば、ほとんどの人は誰かと働き、誰かからお金をもらっているからです。特にソフトウェア開発は、個人の能力以上にチームでの共同作業が成果を左右します。そして、そのチームを構成するのは、 必ずしも合理的ではない「人間」 です。相手の立場や感情を想像し、敬意をもって接する力は、 チームの生産性と品質に大きく関係する のです。納得できない人もいるかもしれませんが、 人は感情で動き、立場によって主観的な正義が変わり、時にはそれは客観的に見ると自己中心的にさえなります。 この変えようのない事実を前提として受け入れること。そして、相手の主観や感情を理解しようと努めること。これは、単なる「優しさ」や「気遣い」といった精神論ではありません。それは、多様な人間で構成されるチームで成果を最大化するための、最も重要なビジネススキルであると考えています。論理や正論を振りかざすだけでは人は動きません。時には「自分がどう見られているか」を意識し、相手の心を動かさないと乗り越えられない逆境や、プロジェクトの成功があります。 これらの力は、まさにエンジニアに求められるコミュニケーション能力やヒューマンスキルの核と言えるのではないでしょうか。次回以降の連載では、この 「心」 をどう体現するのか、詳しく掘り下げていきます。 「技」としての技術:想いを現実に変える力 「技術」は、文字通り 「技」 です。目的を達成するための具体的な手段や方法を指します。 「心」で描いた「ユーザーの体験を良くしたい」「品質を底上げしたい」といった想いを、設計書、テスト計画、コードといった具体的な「かたち」にするのが技術です。また、テスト自動化やIaCのように、技術は人間の能力を拡張し、限界を超える助けとなります。技術は、私たちの内面と現実世界を繋ぐ、強力な架け橋です。 「体」としての知識:引き出しの多さ そして「知識」は、エンジニアとしての 「体」 そのものです。問題解決のための「引き出しの多さ」や「手札の数」と言い換えることができます。 開発手法、テスト技法、クラウドアーキテクチャ、セキュリティ…。この「体」である知識の量が、エンジニアとしての基礎体力を決定します。 日進月歩のIT業界において、新しい知識をインプットし、体を大きくし続ける努力を怠れば、それは現状維持ではなく「相対的な退化」を意味します。 三位一体の依存関係:なぜ「心・技・体」は一つでも欠けてはならないのか これまで見てきたように、「マインドセット(心)」「技術(技)」「知識(体)」は、それぞれが独立して存在するものではありません。これらは密接に依存し合っており、三位一体となって初めて真価を発揮します。 豊富な 知識(体) がなければ、最適な 技術(技) を選択できません。 優れた 技術(技) がなければ、蓄えた 知識(体) は宝の持ち腐れです。 そして、確固たる マインドセット(心) がなければ、 知識(体) と 技術(技) を正しい方向へ導くことができません。 豊富な知識(体)という土台の上に、それを具現化する技術(技)を磨き、そして、それらをどこへ向かわせるべきかを指し示すマインドセット(心)を鍛える。この心技体をバランスよくレベルアップさせることが、エンジニアを本質的な成長へと導くと考えています。 エンジニアとしてのキャリアが進むにつれて、求められる役割は「一対一」の単なるタスクの遂行から、「一対多」という価値の創出や仕組みの創造へとシフトしていきます。特にシニアやスタッフといった立場になると、後進の育成や、自身の知識・経験を組織全体に還元することが重要な責務となります。 この時、決定的に重要になるのが「心」、すなわち他者への配慮や敬意といったマインドセットです。どれだけ優れた知識や経験を持っていても、その土台となる人間的な信頼がなければ、組織を正しい方向へ導くことはできません。あなたの提言は「正論」として響くだけで、チームメンバーが心から耳を傾け、協力してくれることはないでしょう。 例えば、QAエンジニアが目指す「品質文化の醸成」という目標は、この典型です。ルールやツールを導入するだけでは文化は根付きません。チームメンバー一人ひとりの共感と自発的な協力を引き出す「心」の力があって初めて、組織全体の品質意識を高めることができると私は考えています。 余談: 大いなる力には大いなる責任が伴う 時に、私が働いているQA組織のみんなに願うのは、ただ技術力が高いだけでなく、本当に「レベルの高いQAエンジニア」になってもらいたいということです。そして、そのために欠かせないと思っているのが、 「大いなる力には、大いなる責任が伴う」 ということを理解するということです。この 「大いなる力」 には、技術や知識だけではなくマインドセットも含まれています。 これは、私が敬愛してやまない映画『スパイダーマン』に出てくる、あまりにも有名な言葉です(特にサム・ライミ版が好きです)。物語の主人公であるピーターは、ある日突然すごいパワーを手に入れますが、最初はそれを自分のためだけに使っていました。その姿を見てベンおじさんはこう言います。 『スパイダーマン』 ピーター、お前の年頃でどう変わるかによって一生をどんな人間として生きていくのかが決まるんだ。どう変わるのかは慎重に考えろ。そのトンプソンという生徒は殴られて当然かもしれないが、お前の方が強いからといって、殴る権利があるわけじゃない。忘れるんじゃない。大いなる力には大いなる責任が伴う。 『アメイジング・スパイダーマン』 聞くんだピーター。お前は父親によく似ている。本当に似てる。それはいいことだ。だが、お前の父親は信念を持って生きていた。彼はこう信じていた。人のためになる行いができるのなら、それをやるのが道徳的な義務だとな。その信念はどこに行った。選ぶことはできない。それは責任だ。 そして、その力を正しく使わなかった(強盗を見逃した)せいで、一番大切な人を失ってしまいます。 「自分には救う力があったのに、何もしなかった…」 取り返しのつかない後悔を通じて、彼は力の意味と、それを使うことの「責任」を痛感し、人々を守るヒーローになることを決意します。 この物語、実は私たちビジネスパーソンの成長にも、すごく大切なことを教えてくれると思いませんか? 私たちの世界でいう「力」とは、これまで積み重ねてきた知識や経験、問題を解決できるスキルのこと。そして「責任」とは、その力をちゃんと使って、チームや組織を助ける役割のことです。 あなたの知識や経験があれば解決できる問題が目の前にある時、あるいはチームが困っている時。「これは自分の仕事じゃないから」と見て見ぬふりをしてしまうのは、あの時スパイダーマンが強盗を見逃したのと同じことかもしれません。その小さな見過ごしが、後でプロジェクトの遅延やトラブルといった、もっと大きな問題につながってしまうかもしれません。 キャリアを重ねて影響力という「力」が大きくなるほど、この「責任」も自然と大きくなっていきます。時には、自分のこと(私)よりも、チームのこと(公)を優先しなきゃいけない、時にはしんどい決断も必要になるでしょう。リーダーや経営者が、時に孤独に見えるのは、きっとこの重圧とずっと戦っているからなんだと思います。 そのため、勉強してスキルを磨くっていうのは、ただ賢くなることではないと考えています。 いざという時に、その力を使う「覚悟」を持つこと でもあるのです。そこにはヒューマンスキルも強く求められていると考えていて、せっかくの強い力が正しく使えなかったり、かえって誰かを傷つけてしまうことはもったいないと考えているのです。上層部がかえって多くの誰かを傷つけた結果、多くの人が退職し、壊れてしまった組織も見たことがあります。 私は、自分の組織に来てくれた人たちには、この「力と責任」をちゃんと理解して、チームに良い影響を与えられる人になってほしい。そして、その責任をしっかり果たせるような環境を作ってあげたい。心からそう思っています。 おわりに:次回からの連載に向けて 本日は、エンジニアの成長における「心技体」の重要性についてお話ししました。 心(マインドセット) :何を、なぜ、どうするのかを深く問う探求心 技(技術) :想いを形にする実践力 体(知識) :可能性を広げる学びの土台 この三つのバランスを意識することが、真に価値を生み出すエンジニアであり続けるための鍵となります。 そして、本連載ではこの中でも全ての土台となる 「心」 、すなわちエンジニアとしてのマインドセットやコミュニケーション、ヒューマンスキルに焦点を当てていきます。 次回は早速、「心」の重要な要素である 「他人を思いやる力」 について、ビジネスにおける合理的な配慮という観点から深掘りします。どうぞご期待ください。 The post 【第1回】QAエンジニアの「心技体」 first appeared on Sqripts .
今回は、「テストプロセス改善」を取り上げます。 これまでの連載で、「テスト設計」や「テストマネジメント」といった専門性について触れてきました。これらはQAエンジニアとしての価値を発揮するための重要な技術です。 しかし、これらの技術を個人として高めるだけでなく、チームや組織全体として成果を出すためには、テスト活動を全体的に把握し、批判的に見直し、より良くしていくための具体的な提案と行動が不可欠です。 この不可欠な行動を実現するものこそ、「テストプロセス改善」という技術なのです。 この記事では、テストプロセス改善を、体系づけられたアプローチで合理的にテストに関する課題を解決する専門技術として捉えます。この技術を私自身がどのように学び、それがQAエンジニアとしての基盤となったかをお話しします。 記事一覧:技術を土台にして自分なりのQAエンジニアを組み立てる -あるQAの場合 【第1回】専門性をつなげて、あなたらしいQAエンジニアの像をつくる 【第2回】テストを設計する専門性 【第3回】テストマネジメントはテストマネージャーだけの技術ではない 【第4回】テストプロセス改善:思考の補助線としての専門技術 テストプロセス改善という技術 テストプロセス改善とは、大きく2つのフェーズに分かれる、と考えます。 目の前のテストについて評価したり、時には現場から聞き取りを行う そのコンテキストで最も効果的な改善を提案し、実行に移す 実際にはキックオフや効果測定など、より細かいプロセスがありますが、これらは概ね上記に大別できると考えます。 これらについて体系的な手順やプラクティスを提供するのが、テストプロセス改善技術です。 テストプロセス改善技術については、ASTERが「テストプロセス改善技術 入門ガイド」という冊子を無料で公開しているので、ぜひご覧になっていただきたいです。 ■ テストプロセス改善技術研究会(Test Process Study group) /ASTER 「テストプロセス改善」に対するよくある誤解 「テストプロセス改善」という言葉を使うと、実際に伝えたい内容とはまた違った解釈をされる場合があります。 1. テストプロセス 「テストプロセス」と聞くと、JSTQBのテストプロセスのような、テスト計画からテスト完了までのプロセスのことを考えるかもしれません。それはテスト活動をある側面から見れば間違いではありません。しかし、多くのテストプロセス改善技術では、様々なアクティビティが相互に影響し合う、生態系のような複雑なシステムとして捉えられると、私は解釈しています。 2. 改善 「改善」と聞くと、ふりかえりやPDCAサイクルといった日々の小さな工夫や試行錯誤を思い浮かべるかもしれません。こういった理解も間違いではないですが、テストプロセス改善モデルによっては、これらの改善サイクルが健全に回っているかどうかも評価項目として捉えることがあります。 テストプロセス改善技術は、より構造的・体系的なアプローチを指します。 体系的なテストプロセスモデルがあり、さまざまな現場の状況に合わせて、どの順番で、どのような施策を打てば最も効果的かの仮説を立て、実行していくのです。 モデルは「思考停止」ではなく、思考の補助線 テストプロセス改善技術には、先人たちが作り上げた様々なモデル(TPI NextやTMMiなど:テスト成熟度を測り、改善のロードマップを提供するモデル)が存在します。これらを使うことに対して、「モデルに従うのは思考停止だ」であったり、「現場ときちんと向き合っていないコンサル的な考えだ」と批判的な意見を聞くことがあります。 しかし、私は全く逆の考えを持っています。 これらの技術を正しく扱うには、むしろ深い知識と洞察、そして徹底した言語化と説明能力が求められます。 モデルで扱っている一つ一つのアクティビティについて、「なぜこれが必要なのか」という理論や背景、目の前で起こっている現実や聞き取った内容を深く総合し、その上で「このコンテキストではどう適用すべきか」を自分の言葉で説明できなければなりません。 そういった洞察がない単なるチェックリストを埋める作業は思考停止とも言えるかもしれませんが、これらはモデルが意図しているところではないと考えています。 モデルは、複雑なテスト活動を構造的に理解するための 「思考の補助線」 と言えるでしょう。それを使いこなすことで初めて、現状分析の解像度が大幅に上がり、そのコンテキストに合った的確な提案ができるようになります。 体験談:言語化がもたらした、揺るぎない自信 学びのきっかけ 私がテストプロセス改善技術を学んだことは偶然でした。私が第三者検証会社に在籍していたとき、テストプロセス改善技術の育成メンバーとして、当時の上長から推薦されました。 私にしては珍しく、自発的に参加したものではなかったのです。 当初は、正直言って「嫌だな」と思っていました。当時持っていたテストプロセス改善技術のイメージは、レガシーで、現場では使えない、重厚長大なモデルだという先入観を持っていました。当時の自分にアドバイスするなら、その先入観は全くの間違いだと話すでしょう。 実際に私にとって、テストプロセス改善技術を学んだことは、QAエンジニアとしての大きな転機となりました。 得られた気づき テストプロセス改善技術を学ぶ過程で、私は様々な現場の聞き取りを行いました。 そこでは、テストプロセス改善技術の中で扱う一つ一つのアクティビティに対して、徹底的な言語化が求められました。そして、その言語化を土台として、現場の言葉を使いながら説明し、理解し、解釈する必要がありました。 それまでは漠然と「こうした方が良い」と感じていたことと、「テストはコンテキスト次第」という原則に、構造的な理解と明確な言葉を与えることができるようになったのです。 ある時点から私にとって現場が全く変わって見えたことがとても印象に残っています。 例えば今までテスト設計の問題だと思っていたものが、テスト計画やコミュニケーションの問題だと気付けるようになったのです。 混沌で圧倒されるだけの現場を論理的に解釈し、建設的に改善が可能だと確信できるようになったのです。 自信につながる テストプロセス改善技術を学んだのはコンサルタントとしてです。その経験から、私はどのような役割であっても、自信を持ってテストプロセスの改善を主導できるようになりました。 やがて、どんな現場であっても、現場の状況を把握し、課題を特定し、モデルを参考にしながら具体的な改善策を提示できる自信を深めるようになりました。 私はたびたび「プロのテスター」と名乗ることがありますが、 Sqriptsのプロフィール で「ソフトウェアテストに専門性を持つ」と表現できるほど、自分自身の確固たる基盤となっています。 専門性の組み合わせ テストプロセス改善技術は、個人の自信だけでなく、他の専門技術と結びつくことで、より大きな価値を生み出します。 テストマネジメントとの組み合わせ テストマネジメントとテストプロセス改善は、極めて親和性の高い技術です。テストマネジメントを行う過程で「なぜ改善が必要なのか(Why)」という目的を定義することがあります。これに対し、テストプロセス改善は 「どのように改善するのか(How)」 という具体的な道筋を示します。 この二つが結びつくことで、単なる場当たり的な対応ではなく、論理的で建設的な改善活動を推進することができます。 テストマネジメントで特定された問題(アウトカムに近いビジネス的な側面であることが望ましい)に対し、テストプロセス改善のモデルを使って体系的にアプローチすることで、一般的なベストプラクティスを取り入れつつ、確実に成果を上げることが可能になるのです。 おわりに:今日からできるテストプロセス改善 この記事では、テストプロセス改善がQAエンジニアとしてのキャリアを支えうるような、再現性と応用性の高い専門技術であることをお伝えしました。 テストプロセス改善技術をいきなり習得するのは難しいと思います。 そこで、あなた自身のテスト活動を振り返り、 なぜこの活動をやっているのだろうか?そして、その活動はどのような『言葉』で体系的に表現できるだろうか? と言語化することから始めてみてください。 その小さな問いの積み重ねが、あなた自身の成長だけでなく、チームや組織全体のテスト活動を次のレベルへと引き上げる、強固な土台を築くことができるはずです。 【連載】技術を土台にして自分なりのQAエンジニアを組み立てる -あるQAの場合 【第1回】専門性をつなげて、あなたらしいQAエンジニアの像をつくる 【第2回】テストを設計する専門性 【第3回】テストマネジメントはテストマネージャーだけの技術ではない 【第4回】テストプロセス改善:思考の補助線としての専門技術 The post 【第4回】テストプロセス改善:思考の補助線としての専門技術 first appeared on Sqripts .
こんにちは。Sqripts編集部のハチワレです。 かつてはフロントエンドやUI開発に携わり、テクニカルサポートも経験しましたが、現在の私の主戦場はマーケティング。技術と非技術の狭間に佇み、両方の世界を行き来する日々を過ごしております。 前回は「 Generative AI Leader(生成AIリーダー)認定資格試験を受けてみた 」と題し、Google Cloudの認定資格にチャレンジした体験をお伝えしました。 今回はその学びを活かし、技術的なバックグラウンドに関わらず、ビジネスパーソン全般に役立つ生成AIの基礎知識と実践的な活用方法をお届けします。 関連記事 Generative AI Leader(生成AIリーダー)認定資格試験を受けてみた|知識ゼロから始めた学習方法と試験対策 こんにちは。Sqripts編集部のハチワレと申します。かつてはフロントエンドやUI開発に携わり、テクニカルサポートも経験しましたが、現在の私の主戦場はマーケティング。「非エンジニア」を称しています。今回は、非エンジニアの私がGoogle Cloudの認定資格、Generati... 続きを読む Sqripts はじめに 昨今、生成AIは私たちの暮らしに急速に溶け込んできました。 今日の夕食のレシピを考えて 週末の旅行プランを立てて 渋滞を避ける最適なルートは? など、日常のちょっとした場面で気軽に活用できるのが魅力です。ふとした遊び心で使ってみると、その応答の豊かさに驚かされることも少なくありません。しかし、遊びや生活での活用と、ビジネスでの活用は少し異なります。特に業務で効果的に使いこなすには、単なる「お遊び」を超えた基礎知識と実践的な視点が求められます。 プログラミングスキルの有無にかかわらず、「AIを業務に効果的に取り入れたい」、「チームのAI活用を推進したい」という方に、明日から使える知識をお伝えできればと思います。 生成AI時代に必要な基礎リテラシー 対話型AIとのコミュニケーションという新しいスキル 現代の生成AIの最大の特長は、普通の会話のように対話できることです。技術的な詳細を理解していなくても、効果的なコミュニケーションができれば誰でも活用できるのが魅力です。 例えるなら、専門知識を持つアシスタントと会話するようなものです。その道に詳しければ会話が深まりますが、基本的なやり取りには高度な専門知識は必ずしも必要ありません。 大切なのは「何を、どのように伝えるか」という対話の作法。これは実は多くの方が日々の暮らしの中で自然と磨いているものでもあります。 AIとの対話は、ある意味「言葉のキャッチボール」です。投げ方次第で返ってくる球の質も変わります。丁寧に、意図を明確に伝えることで、AIからも価値ある返答が得られます。 なぜ今、技術者も非技術者もAIリテラシーを持つとよいのか Generative AI Leader資格の学習を通じて強く感じたのは、AIツールは「技術を作る人」も「技術を使う人」も、立場を問わず恩恵を受けられるということです。 技術者にとっては開発効率の向上や創造的な問題解決のツールとして、非技術者にとっては専門知識のギャップを埋めてこれまで届かなかった領域へ手を伸ばしたり、業務を効率化したりと、新たな可能性を開くツールとして機能します。 最近興味深く感じていることのひとつは、技術者と非技術者が協働する際の「共通言語」としてのAIです。お互いの専門性を尊重しながら、AIを介して効果的なコミュニケーションを図ることができます。かつては疎通にストレスを感じていた両者の会話が、AIという翻訳者を得て、よりスムーズに、豊かになる可能性を秘めています。 共通言語としての使用の実例 先日、開発部門の担当者から、私の理解が及ばない質問を投げかけられました。自分の守備範囲と異なりましたが間違った回答をするわけにもいかず、Geminiに聞いてみることにしました。 ■プロンプト例 私はマーケティング担当者で●●のWebサイトの管理をしています。 現在△△のプロジェクトが進行中で、作業は現在▲▲のフェーズにあります。 ▲▲を進めるにあたり開発担当者から以下のような質問が来ました。 この中で「******」という記述の部分について、質問の意図がわからず回答に困っています。 どのように回答するのが適切ですか? [ここに開発部門からの質問をコピペ] するとGeminiは内容を的確に判断し、フェーズの作業の理解と「******」の質問の意図、回答例について教えてくれました。Geminiの回答を読んであらためて開発者からの質問を見ると、確かに内容に誤りはないなと思えたので、その回答をアレンジして返信しました。結果、問題なく作業を進行することができました。 生成AIの限界を理解することの重要性 生成AIの活用において大切なことの1つに、「その可能性と限界の両方を理解すること」が挙げられます。生成AIは「魔法の杖」ではなく「便利だけど特性のある道具」として捉えることが重要です。 特に注意すべきは、 ハルシネーション(事実と異なる情報を自信を持って提示すること)の可能性 最新情報へのアクセス制限(トレーニングデータによる) コンテキスト理解の限界(長い会話や複雑な状況の把握には限界がある場合がある) こうした限界を理解した上で活用することで、より効果的に生成AIを業務に取り入れられます。 また、それぞれの限界を「できるだけ回避する技術」もあります。ですが、まずはその技術についてよりも「そういう技術もある」という知識を持ち、必要になった時に深掘りする姿勢が大切です。 社外秘情報を扱う際の注意 生成AIという便利な道具を手にした私たちですが、ことビジネスにおいては慎重に取り扱うべき情報があることも忘れてはなりません。特に企業活動の中では、 社外秘情報 という守るべき大切な情報の数々があります。 AIに教えてはいけないこと 生成AIは基本的に「会話の内容を学習する」仕組みになっています(学習しない設定にもできますが、一般論として語ります)。これはつまり、私たちが入力した情報は、サービス提供元のサーバーに送信され、場合によっては将来のモデル改善のために使われる可能性があるということです。 特に注意が必要なのは、 顧客等の個人情報(氏名、連絡先、購入履歴など) 未発表の製品情報や研究開発データ 社内の財務情報や人事情報 取引先との契約内容 アクセス認証情報(ID・パスワード・秘密鍵など) こうした情報をそのままAIに入力してしまうと、知らず知らずのうちに情報漏洩の原因となりかねません。AIに尋ねる前に、一呼吸おいて「この情報は外部に出しても問題ないだろうか」と自問する習慣をつけましょう。 情報を匿名化・一般化する工夫 それでも業務上、機密性の高い文書や情報について生成AIの力を借りたいこともあるでしょう。そんな時は、情報を「匿名化」したり「一般化」したりする工夫が役立ちます。 【具体例 】 【NG例】 山田太郎様(43歳)からクレームがありました。先日購入いただいたXYZ製品について、起動しないとのことです。購入日は2024年10月15日、シリアルナンバーはABC-12345です。適切な対応方法を教えてください。 【OK例】 あるお客様から製品不具合のクレームがありました。先日購入いただいた当社製品について、起動しないとのことです。適切な初期対応と調査手順を教えてください。 具体的な固有名詞や識別情報を削除しても、多くの場合は有益なアドバイスを得ることができます。必要な情報だけを入力するようにしましょう。 企業におけるAI利用ガイドラインの重要性 組織全体で生成AIを活用する際には、明確なガイドラインを設けることが大切です。 ガイドラインに含めるとよい項目 利用可能なAIサービスの指定 入力してよい情報と禁止情報の明確化 生成AIの出力結果の取り扱い方針 緊急時の対応手順 定期的な教育・研修の実施 こうしたガイドラインがあることで、社員一人ひとりが安心してAIの恩恵を受けられる土壌が育まれます。 セキュリティを考慮したサービス選択 すべての生成AIサービスが同じセキュリティレベルで提供されているわけではありません。企業の機密情報を扱う可能性がある場合は、特に以下のポイントに注目してサービスを選びましょう。 エンタープライズ向けプランの有無 データの保持・削除ポリシー プロンプトとレスポンスの暗号化 オンプレミス/プライベートクラウド対応 SOC2やISO27001などの認証取得状況 例えば、Google CloudのVertexAIやMicrosoftのAzure OpenAIなどは、企業向けのセキュリティ機能を備えています。個人利用の無料サービスと企業利用のエンタープライズサービスは、使い分けることが賢明です。 生成AIは力強い味方ですが、大切な情報を守るのはあくまで私たち自身です。便利さと安全性のバランスを取りながら、賢く活用していきたいものです。 プロンプトの力:言葉の選び方が結果を変える 同じAIでも全く異なる結果が得られる不思議 生成AIを使う中で、指示の出し方を少し変えただけでまったく異なる結果が得られるという経験をされた方も多いのではないでしょうか。 たとえば、 マーケティング計画書のテンプレートを作って と頼むのと、 20代向けSaaSプロダクトのマーケティング計画書で、特にSNS活用に重点を置いたテンプレートを作成して。競合分析セクションも含めて と頼むのとでは、得られる結果の質が天と地ほど違います。 ぜひ普段使っている生成AIで上記のプロンプトを入力してその結果を見てみてください! プロンプト例と改善例(ビフォー・アフター) 【改善前】 システム仕様書を書いて 【改善後】 次の条件でシステム仕様書のテンプレートを作成してください。 ・対象システム:社内向け在庫管理アプリ ・主な機能:在庫登録・検索・レポート出力 ・利用者:倉庫スタッフと管理者 ・開発環境:React+Node.js ・セキュリティ要件:ロール別アクセス制御必須 特に技術仕様と画面仕様のセクションを詳細に 改善前では汎用的な内容しか得られませんが、改善後ではより具体的で実用的なテンプレートが得られます。この差がプロンプトの力です。 誰でも使える基本的なプロンプトテクニック4つ 5W1Hを意識する Who(誰が)、What(何を)、When(いつ)、Where(どこで)、Why(なぜ)、How(どのように)を明確にします。 役割を与える (ロールプロンプティング) 「あなたはセキュリティ専門家として…」「経験10年のプロダクトマネージャーの視点で…」といったように、AIに特定の専門家の役割を与えると、その視点からの回答が得られます。 出力形式を指定する 「表形式で」「箇条書きで」「600字以内で要約して」など、出力の形式を指定することで、より使いやすい結果が得られます。目的に合った形式を考えるのも、プロンプトの腕の見せどころです。 出力の例をいくつか提示 する(Few-shotプロンプティング) 出力に特定の文脈・型を指定したい場合は出力例をいくつか提示することで、型に合った回答を得ることができます。ただし、型に適合するあまりに「一般化能力」が損なわれる恐れがあります。 これらのテクニックは技術的なバックグラウンドに関わらず、どなたでも実践できるものです。プロンプトの質がAIとの対話の質を決めるといっても過言ではありません。 組織の中での効果的な生成AI活用法 組織の中で生成AIを活かす道は一つではありません。それぞれの立場で、それぞれの視点から、AIを取り入れることで、組織全体に新たな可能性の芽が育まれていきます。さまざまな立場から見たAI活用の姿をご紹介します。 マネジメント視点:チーム全体の生産性向上への活用 マネジメント層にとって、生成AIは組織全体の生産性を向上させるツールとなります。 例えば、 チーム間コミュニケーションの効率化(議事録作成・要約、アクションアイテムの抽出) リソース配分の最適化(複数のシナリオシミュレーション) 意思決定のサポート(データに基づく客観的視点の提供) 実際の活用例としては、 週次レビューの議事録をAIで要約し、次週のアクションアイテムを自動抽出する ⇒フォローアップの漏れが大幅に減少する などの事例があります。 開発者視点:コーディングと設計プロセスの強化 エンジニアにとっての生成AIは、単なるコード生成ツール以上の存在です。 コードレビューの効率化(潜在的な問題点の指摘) ドキュメント生成(コメントからの自動ドキュメント作成) アイデア出しと設計支援(異なるアプローチの提案) テストケース生成(エッジケースの検討) 昨今注目されているのは「講師としてのAI」という使い方です。新しい技術やライブラリについて、AIに説明させたり、サンプルコードを生成させたりすることで、学習効率が大幅に向上します。 ▼ こちらの記事 では、AIがテストエンジニアの日常をどう変えるのか?AIの活用方法について解説しています。ぜひ参考にしてください。 関連記事 テスト自動化の新たな地平:AIはテストエンジニアの日常をどう変えるのか?最新トレンドとツールの実態... テストエンジニアのユッキーです。普段は自動化担当部署で、お客様のテスト自動化導入をご支援したり、社内の自動化技術の研究開発に携わっています。皆さんの周りでも、「AI」という言葉を聞かない日はないのではないでしょうか。ある調査では、2024年のソフトウェ... 続きを読む Sqripts 業務担当者視点:日常タスクの効率化と創造性の拡張 日々の業務を担当する方々にとって、生成AIは次のような場面で力を発揮します。 文書作成の効率化(レポート、企画書、メールの下書き) 情報整理と要約(大量の資料からの重要ポイント抽出) アイデア出しとブレインストーミング 多角的視点の獲得(異なる立場からの意見や観点の提示) 私自身、マーケティング企画資料の作成時間が半分以下に短縮された経験があります。ただし、AIの出力はあくまで「叩き台」であり、内容の正確性や適切性は人間がチェックする必要があります。 【関連用語】 HITL:Human-in-the-Loop (人間参加型) AIによる自動化された作業や生成プロセスに、 人間が意図的に介入する 仕組みやアプローチ。 人間は、AIの出した判断や結果を最終的に チェック・承認 したり、誤りを 訂正 ・学習データとして フィードバック することで、AIの精度と信頼性を継続的に高める「不可欠な監督者・共同作業者」の役割を果たします。 「AIの得意なところ」(大量処理・高速生成)と 「人間の得意なところ」(判断力・倫理観・細かな調整)を組み合わせ、最も質の高い結果を出すことを目的とします。 ユースケース別・最適なAIモデル選び Google系サービス(Gemini Enterprise、Notebook LM、VertexAI)の特長と使い分け Google Cloudの生成AI製品群は、それぞれ得意分野が異なります。 Gemini Enterprise (旧Agentspace) : 複数のタスクを連携させた複雑な業務に最適です。例えば「データを読み解き、傾向を把握した上で提案資料を作る」といった一連の流れを自動化できます。APIや外部システムとの連携もできるため、業務プロセス全体を効率化したい場合に適しています。 Notebook LM : データ分析と文書作成を組み合わせたい場合に威力を発揮します。数値データから洞察を得て、それをわかりやすいレポートにまとめる作業が得意です。データドリブンな意思決定を支える強い味方となります。 VertexAI : より高度なカスタマイズやチューニングが必要な場合に適しています。企業特有の専門用語や業界知識を学習させたモデルを構築できます。技術チームと業務チームの連携によって大きな効果を発揮できるプラットフォームです。 Claude、ChatGPTなど他社サービスとの比較 Claude : 文章の論理性や一貫性に優れており、長文の作成・要約・分析が得意です。レポートや提案書など、論理的な文書作成のサポートに適しています。また、倫理的配慮が強いのも特徴です。 ChatGPT : 最も汎用的で使いやすいのが特徴です。特にGPT-4は創造的な発想や多角的な視点の提供に優れています。アイデア出しやブレインストーミングのサポートに最適です。プラグイン機能で拡張性も高いです。 重要なのは「どれが一番優れているか」ではなく「どのケースにどのツールが最適か」を判断できるリテラシーです。それぞれの特性を理解し、場面に応じた選択ができることが、生成AIリテラシーのひとつの形であるように思います。 ▼ こちらの記事 ではTeamsとCopilotを使った議事録作成を紹介しています。ぜひ参考にしてください。 関連記事 生成AIによる議事録作成ABC -TeamsとCopilotを使って- こんにちは。クオリティマネージャーの”黒山羊さん”です。前回は生成AI作成の議事録を補完する議事メモの取り方について書かせてもらいました。これまで私は生成AIでの議事録作成を試したことがなく、生成AIを使った議事録作成はお客様が行ったり、チームメンバーが... 続きを読む Sqripts 明日から実践できる生成AI活用の第一歩 既存業務フローの中で無理なく始めるポイント 生成AIの活用を始める際のコツは、いきなり大きく変えようとせず、既存の業務フローの「ちょっとした隙間」から取り入れることです。 例えば、会議の議事録作成、週次レポートのドラフト作り、企画のブレインストーミング、参考資料の要約など、「失敗しても大きな影響がない」作業から始めるのがおすすめです。成功体験を積み重ねてから、より重要なタスクに応用していきましょう。 また、組織全体に一気に導入するのではなく、まずは小さなチームや個人レベルで効果を実感してから、徐々に広げていくアプローチも効果的です。 小さな成功体験を積み重ねる方法 私自身の経験では、以下のステップで進めると成功しやすいです。 Geminiを常に開いておく(業務での普段使いの生成AIならなんでもよいです) 1日数分の「AI実験タイム」を設ける 毎日少しだけ、業務の一部をAIに任せる時間を作りましょう。 (出力に感動して活用したくなるフェーズです) 成功と失敗を記録する どんなプロンプトが効果的だったか、何が上手くいかなかったかをメモしておく。 (実験フェーズです) 同僚と知見を共有する 「これ、AIを使ったらすごく楽になったよ」と具体的な成功事例を伝える。 (人に言いたくなるフェーズです) 「AIでやること」「人間がやること」を明確にする AIに全て任せるのではなく、人間の判断が必要な部分を意識する。 (リテラシーの必要性を痛感するフェーズです) 業務にAIを組み込む 出力に納得できたら「 この業務は生成AIに 」を決めて次回以降は必ずAIを使用する。 (生成AIを 頼れるメンバー として認めるフェーズです) 試してみたい具体的なプロンプト例3つ 会議の効率化プロンプト 来週の進捗会議(参加者:マネージャー、開発担当、デザイナー、マーケティング担当)のためのアジェンダを作成してください。 目的は、現在の進捗確認と課題の洗い出しです。特に議論すべき重要な点と、各トピックの目安時間も含めてください。全体で45分に収めたいです。 2. リスク分析プロンプト : 新規Webサービス立ち上げプロジェクト(予算300万円、期間3ヶ月、チーム5名)において考えられるリスクを分析してください。 技術面、スケジュール面、予算面、人員面の各観点から考えられるリスクと、その対策案を優先度順にまとめてください。 3. 技術資料の理解促進プロンプト : 以下のAPIドキュメント概要を、プログラミング初心者でも理解できるように噛み砕いて説明してください。 特に、基本的な使用方法と具体的な実装例を示してください。 [APIドキュメント概要を貼り付け] まとめ:技術と非技術の架け橋としての生成AI 「使う視点」と「作る視点」の協働がもたらす可能性 生成AIの真価は「技術そのもの」と「その活用法」の両論にあります。 技術者は「どうやって作るか」に注力し、非技術者は「どう使うか」に知恵を絞る。そして両者が協働することで、AI活用の可能性は最大限に広がります。 特に期待されるのは、技術者と非技術者の間のコミュニケーションギャップを埋める役割です。AIが共通言語となることで、お互いの専門性を尊重しながら協働できるようになります。 最後に、生成AIリテラシーの基本は「道具としてのAI」という視点です。”金槌”を使う大工さんが金槌の内部構造を詳しく知らなくても素晴らしい家を建てられるように、AIの内部構造を詳しく知らなくても、それを使いこなして素晴らしい成果を生み出すことはできます。 同時に、より良い金槌を作るために金属工学の知識が役立つように、AIの仕組みについての理解が深まれば、その活用法もより洗練されていきます。 技術者も非技術者も、それぞれの強みを活かしながら、生成AIという道具を使いこなしていくことで、私たちの働き方はより創造的で、より価値の高いものになるはずです。 最後までお読みいただき、ありがとうございました。 ▼関連記事「Generative AI Leader(生成AIリーダー)認定資格試験を受けてみた|知識ゼロから始めた学習方法と試験対策」はこちらです。 関連記事 Generative AI Leader(生成AIリーダー)認定資格試験を受けてみた|知識ゼロから始めた学習方法と試験対策 こんにちは。Sqripts編集部のハチワレと申します。かつてはフロントエンドやUI開発に携わり、テクニカルサポートも経験しましたが、現在の私の主戦場はマーケティング。「非エンジニア」を称しています。今回は、非エンジニアの私がGoogle Cloudの認定資格、Generati... 続きを読む Sqripts The post 生成AIの基礎リテラシーと明日から業務で使える活用術 first appeared on Sqripts .
こんにちは!みなさん、テストしてますか? 第2回の前編 では、E2Eテストの基幹部分とも言える 要素探索 の技術の変遷について扱いました。中編では、前編の内容も踏まえつつ、様々な実装技術について説明していきたいと思います。 記事一覧:モダンなE2Eテストの考え方をマスターしよう 【第1回・前編】まずはやってみよう – Playwrightを使ったハンズオン(事前準備編) 【第1回・後編】まずはやってみよう – Playwrightを使ったハンズオン(テスト自動化編) 【第2回・前編】E2Eテストの歴史 -要素探索技術の変遷- 【第2回・中編】E2Eテストの歴史 -様々な実装技術- 実装技術の変遷 ここで言う実装技術とは、例えば第1回でテストコードを作成するのに使った Playwright Codegen のようなものを指します。単にテストコードを書くだけでなく、機械的にテストコードを生成する技術だったり、テストコードの可読性を上げるための書き方を考えたりなど、様々な試行錯誤が現在進行系で行われています。この記事では、筆者が知るいくつかの代表的な手法を取り上げたいと思います。 レコードアンドリプレイ レコードアンドリプレイは、テスト対象のアプリケーションへの操作を「記録し、再生する」手法です。キャプチャアンドリプレイ、レコードアンドプレイバックなどとも呼びます。普段GUIを操作するのと全く同じ感覚で自動テストを実装できるので、非常にとっつきやすく、コーディングの知識がまるで無い人にとっても扱える他、ツールそのものへの学習も最小限に出来るのが特徴です。 原理としては、テスト対象のアプリケーションに記録用のコードを埋め込み、クリックや文字入力、スクロールなどのイベントを逐一記録していく、といったものです。 上記のように、誰でも簡単に使える反面、細かく記録しすぎてしまうことによるテストの不安定さや、生成されるテストコードの質が悪くメンテナンス性が著しく悪い、などの課題がありました。 特に、生成されるコードの質のところでは、当時使われていたページ表現の記法がCSSセレクターやXPathなどの内部構造であったこともあり、記録されたコードを後で読み返すと何をやっているのか良くわからない、ということもしばしばでした。 レコードアンドリプレイを採用するツールは多数ありますが、有名なのは Selenium IDE でしょう。その他 Ghost Inspector なども存在します。 Selenium IDE Ghost Inspector レコードアンドリプレイはなぜダメだったのか 先述の通り、レコードアンドリプレイツールはたびたび批判の憂き目に合っています。書籍『システムテスト自動化標準ガイド』 ※1 では、一章まるごと使ってこの手法への批判を記載しており、当時いかにこの手法によって苦しむ人が多かったのかが垣間見えます。 ※1『 システムテスト自動化 標準ガイド 』(Mark Fewster、Dorothy Graham 著/テスト自動化研究会 訳/翔泳社) レコードアンドリプレイの欠点として良く挙げられるのは以下のような点です。 記録されるロケーターの可読性が低かったり、ちょっとしたページの構造の変化に弱かったりする スクロールなど不要なステップの記録が多く、実行の不安定さにつながる テストコードが構造化されておらず、再利用性が低い ですが、みなさんは第1回ですでにレコードアンドリプレイを経験して、(簡単な例ではあるものの)素早くテスト自動化ができることを実感していますね。また、(1) については第2回の前編でセマンティクスベースの要素探索により、可読性が高くページの構造の変化に強いロケーターを作れることを知っています。 (2) についても、第1回で使った Playwright Codegen ではスクロールなどのステップは記録されておらず、余計なステップの記録はさほど発生しないことが分かったかと思います。 (3) については、それぞれのツールごとに考え方が異なりますが、後に記載するPage Object Model(POM)形式での構造化が一般的に使われており、サポートしているツールも多いです。 というわけで、過去にレコードアンドリプレイが使い物にならなかったのはコンセプトが悪かったからではなく、技術的に追いついていない部分が多かっただけというのが筆者の結論です。実際、Playwrightのようなツールにもビルトインされていますし、最近流行りのAIツールでもレコードアンドリプレイ形式を採用しているものは多いです(AIが操作した内容をレコードアンドリプレイで記録する、なんてツールもあります)。 キーワード駆動テスト さて、レコードアンドリプレイでは操作を記録することでテストを作りましたが、キーワード駆動テストではキーワードと操作対象、データを組み合わせてテストを書きます。例えば、次のようなイメージです。 キーワード ロケーター データ ページを開く – http://example.com 文字を入力する textbox#email john.example.com 文字を入力する textbox#password password クリックする span#button – 少しでもプログラミングをかじったことがある方なら、なんとなくこの記法がプログラミングと自然言語の合いの子のように見えるかもしれません。 このように、ある特定の分野(ドメイン)の課題を解決するために使われる、人間にとって読みやすく機械にとっても処理しやすい言語を DSL(Domain Specific Language) と呼びます。つまり、キーワード駆動テストはE2Eテスト用のDSLです。 読みやすい一方、出来ることがDSLとして定義されたもののみに絞られてしまうことが難点です。また、場合によっては操作対象のロケーターを読みやすくするためにたくさんのエイリアスを設定しなければならず、テストのための実装が必要以上に増えてしまい、テストを書き始めるまでの労力が比較的大きいです。 キーワード駆動テストを採用するツールの代表例として、 Robot Framework というものがあります。また、JavaScriptの文法の中でキーワード駆動のDSLのようなものを実現した珍しいツールで CodeceptJS というものもありますので一緒に紹介しておきます。 Robot Framework CodeceptJS ページオブジェクトモデル ページオブジェクトモデル(以下POM)は、一つのページに関連する要素と操作をひとまとめにしたものです。例えば、ログインページのページオブジェクトモデルは次のようになります。 // loginPage.js class LoginPage { /** * @param {import('@playwright/test').Page} page */ constructor(page) { this.page = page; this.emailInput = page.locator('#email'); this.passwordInput = page.locator('#password'); this.loginButton = page.locator('#login-form button.submit'); } async goto() { await this.page.goto('https://example.com/login'); } async fillEmail(email) { await this.emailInput.fill(email); } async fillPassword(password) { await this.passwordInput.fill(password); } async submit() { await this.loginButton.click(); } async login(email, password) { await this.fillEmail(email); await this.fillPassword(password); await this.submit(); } } module.exports = { LoginPage }; すると、テストコード側からは LoginPage という名前で、ページ内で使われる様々な要素と、ログインなどページ内で利用するアクションを定義できます。 // example.spec.js const { test, expect } = require('@playwright/test'); const { LoginPage } = require('./loginPage'); test('ユーザーがログインできる', async ({ page }) => { const loginPage = new LoginPage(page); await loginPage.goto(); await loginPage.login('john@example.com', 'securePassword!'); // たとえばログイン成功後に表示されるテキストを確認 await expect(page.locator('text=ようこそ')).toBeVisible(); }); 利点としては、キーワード駆動テストと同様にページ内のロケーター記述を隠蔽できる点と、「ログイン」などの一連の操作をひとまとめにしたショートハンドを作成してテストコードの記述を省力化できる点にあります。また、特定のページに対する操作であることが一目で分かるため、コードの可読性向上にもつながります。加えて、ページの構成が変わった場合などにも、POMだけを直せば良いので、メンテナンス性が向上します。 反面、キーワード駆動テストと同様、POMそのもののメンテナンスが煩雑になりがちです。POMはページ内の要素とアクションを抽象化したものです。言い換えると、POMを定義することは、アプリケーションのUIそのものの実装と、そのページの見た目と操作方法を定義するテスト用の実装の2つを作る必要があります。これは典型的なダブルメンテで、面倒に思う場合も多いでしょう。 BDD(振る舞い駆動テスト) BDD(振る舞い駆動テスト)は、その名の通りアプリケーションの「振る舞い」に着目した実装方法です。代表的なツールは Cucumber です。 Cucumber BDDでは、アプリケーションの振る舞いを自然言語に近い形で記述した Feature と、実際にテスト対象を自動操作するための Step Definition ファイルに分けて記述します。 Feature Feature: ユーザーログイン機能 ユーザーとして システムにログインしたい なぜなら、個人の情報やサービスにアクセスするため Background: Given ログインページが表示されている Scenario: 正しい認証情報でのログイン成功 When 有効なメールアドレス "user@example.com" を入力する And 正しいパスワード "password123" を入力する And "ログイン" ボタンをクリックする Then ダッシュボードページにリダイレクトされる And "ようこそ、user@example.com さん" というメッセージが表示される Step Definition Given('ログインページが表示されている', async function() { await driver.get('http://localhost:3000/login'); // ページタイトルを確認してログインページであることを検証 const title = await driver.getTitle(); expect(title).to.include('ログイン'); }); When('有効なメールアドレス {string} を入力する', async function(email) { const emailField = await driver.findElement(By.id('email')); await emailField.sendKeys(email); }); When('正しいパスワード {string} を入力する', async function(password) { const passwordField = await driver.findElement(By.id('password')); await passwordField.sendKeys(password); }); When('ログインボタンをクリックする', async function(buttonText) { await driver.findElement(By.id('login-button')); await loginButton.click(); }); // 検証系ステップ - 成功パターン Then('ダッシュボードページにリダイレクトされる', async function() { const currentUrl = await driver.getCurrentUrl(); expect(currentUrl).to.include('/dashboard'); }); Then('{string} というメッセージが表示される', async function(expectedMessage) { const actualMessage = await welcomeMessage.getText(); expect(actualMessage).to.equal(expectedMessage); }); 技術的には、BDDはアプリケーションの振る舞いを表した Feature ドキュメントと、テスト対象を自動操作する Step Definition コードとを組み合わせたものです。ですが、実際にはBDDを単なる技術として扱ってしまうと冗長な部分が多く、開発のオーバーヘッドになりかねません。 BDDはキーワード駆動テストのようにDSLでテストコードを記述する手法ではなく、要求仕様から開発をスタートし、要求仕様を表現するテストを中心に開発を駆動するためのプラクティスです。テストコードとは別に Feature を独立した自然言語のドキュメントとして切り出すのは、開発者だけでなく様々なステークホルダーと一緒に要求仕様を詰め、誤解を最小限にしたうえで開発を進めるためです。 また、BDDは必ずしもE2Eテストだけのものではなく、単体テストなどでもよく用いられます。ただし、コードレベル(単体テスト)の振る舞いとユーザーレベル(E2Eテスト)の振る舞いとでは異なる部分が多いため、ユーザーレベルのBDDを特にATDD(受け入れテスト駆動開発)と呼ぶ場合もあります。 実装手法の移り変わりと再評価 ここに挙げた自動テスト実装手法は、必ずしもどれが正しいとか、どれが最新だとかというものではありませんが、他の周辺技術の影響などを受けて多少の流行り廃りがあります。 例えば、最初に挙げた「レコードアンドリプレイ」という実装方法は、節の中でも記載していた通り、ある時代には非常に使うユーザーが多かったのですが、その後メンテナンス性の低さなどから批判を受け、キーワード駆動型の記述に乗り換えました。 一方で、ここ数年よく使われている、AIを利用した自動テストツールの多くはレコードアンドリプレイを採用しているケースが多いです。これは、レコードアンドリプレイは直感的で使いやすいという理由だけでなく、記録した要素やユーザー操作から様々な情報を得て自動テストに活かせるという、コンピューターによるコード生成ならではの利点があります。 そのため、「書籍で紹介されていたから」「ベストプラクティスらしいから」という理由で安易に実装方法を選んでしまうのでは危険です。チームの成熟度や手法の特性などを考慮しながら技術選定を進めると良いでしょう。一番のおすすめは、とにかく全部一度触ってみてから、一番しっくりくるものを使ってみることです。 まとめ この中編では、様々な実装技術について扱いました。後編では、より根幹となる 自動操作 の技術と、E2Eテストの 目的 の変遷について解説したいと思います。 【連載】モダンなE2Eテストの考え方をマスターしよう 【第1回・前編】まずはやってみよう – Playwrightを使ったハンズオン(事前準備編) 【第1回・後編】まずはやってみよう – Playwrightを使ったハンズオン(テスト自動化編) 【第2回・前編】E2Eテストの歴史 -要素探索技術の変遷- 【第2回・中編】E2Eテストの歴史 -様々な実装技術- The post 【第2回・中編】E2Eテストの歴史 -様々な実装技術- first appeared on Sqripts .
こんにちは!みなさん、テストしてますか? 第1回では、まずはとにかくやってみようということで、VSCode拡張を使いながら簡単なE2Eテスト自動化にトライしてみました。初歩の初歩とはいえ、自動化がどんなものなのか、ざっくりイメージはついたのではないでしょうか。 記事一覧:モダンなE2Eテストの考え方をマスターしよう 【第1回・前編】まずはやってみよう – Playwrightを使ったハンズオン(事前準備編) 【第1回・後編】まずはやってみよう – Playwrightを使ったハンズオン(テスト自動化編) 【第2回-前編】E2Eテストの歴史 -要素探索技術の変遷- 第2回では、前・中・後編に分けて、E2Eテストを取り巻くパラダイム(考え方)や、使われるツールがどのように変わってきたのかについて書いていきます。この前編では、E2Eテストの重要な要素技術である「要素探索」の変遷について深堀っていきたいと思います。 なお、筆者自身は2017年ごろから自動テストに関わってきた身ですので、実は歴史を語るにはちょっと経験不足かもしれません。コメントがありましたらSNSなどでご連絡頂けますと助かります! そもそもE2Eテストとは E2Eテストとは「完全に統合済みのシステムを、ユーザーインターフェース(特にGUI)から操作する」テストのことを指します。 完全に統合済みというのは、システムを構成する様々なコンポーネントが全てビルドされた状態のことを指します。この特徴から、システムテストと呼ばれることもあります。 ユーザーインターフェースからというのは、ユーザーが実際にシステムを利用する際のインターフェースを用いるということを指します。この観点から、受け入れテストと呼ばれることもあります。 E2Eテストの目的 E2Eテストの主な目的は、実際に提供されるシステム上で(あるいは、非常に近い構成の上で)ユーザーがビジネスケースを達成できるかどうかを検証することです。 例えば、ECサイトであれば、以下のようなビジネスケースが考えられるでしょう。 ログイン〜購入まで 商品を返品できる 発送前の商品はキャンセルできる これらのビジネスケースを、実際のシステムに近い構成でテストするのがE2Eテストです。これにより、単体テスト・結合テストのような小さい単位のテストでは見つけづらいコンポーネント間の齟齬や、各機能レベルでは問題なく動作するがビジネスケースは達成できない、といった問題を解決できます。 例えば、上記のECサイトの例なら、ログイン、カートに追加、購入といった機能レベルでは問題なく実装されているものの、住所の新規登録が出来ないので購入に進めない、といった問題を見つけることができます(さすがに、素朴すぎるケースではありますが、一例ということで)。 また、最近はWeb・モバイル問わず、クライアントとサーバーが相互に通信し合う構成のアプリが多いです。Webフロントエンドとバックエンドをそれぞれ個別に作って、実際の構成では様々なエラーが出ることもあるでしょう。こうした問題を見つけることもE2Eテストには期待されています。 要素探索技術の変遷 さて、E2Eテストとはどういうものか?についておさらいできたところで、ここからはE2Eテストの重要な技術である 要素探索 技術の変遷について見ていきましょう。 第1回のテストコードの中でも、要素探索は繰り返し出てきます。例えば、サンプルToDoアプリのテキストボックスをクリックするためのコードは、こんな感じで書かれていました。 TodoMVCのテキストボックス await page.getByRole('textbox', { name: 'What needs to be done?' }).click(); このうち、 getByRole('textbox', { name: 'What needs to be done?' }) という部分が要素探索に当たります。 実は、この getByRole を用いた探索方法はここ数年で出てきた比較的新しい手法です。そのため、ちょっと古めの本などを読むと全然違うことが書いてあったりします。 getByRole はなぜ利用を推奨されているのか、他の方法とどう違うのかを理解するために、どんな変遷を辿ってきたのかについてこの記事でおさらいしておきましょう。 内部構造を用いた要素探索 例えば、テスト対象がWebアプリケーションのログインフォームだとします。 <form method="post" action="/login"> <label for="email"> メールアドレス </label> <input id="email" /> <label for="password"> パスワード </label> <input id="password" /> <span id="button" class="login-btn">送信</span> </form> メールアドレス入力欄、パスワード入力欄、ログインボタンがあります。 これらのUI要素に、文字入力やクリックなどのアクションを行うためには、まずこれらの要素をHTML内(正確にはDOMツリー内)から探さなければいけません。ロケーターとは、この探索を行うために使う一意のキーのことを指します。 先ほどのHTMLに対してテストコードを書く場合、 CSSセレクター や XPath などのものを使ってそれぞれの要素を取得することができます。例えば、 CSSセレクター を使ってメールアドレスを取得するためのコードは以下のようなものになります。 #email という書き方で、 id が email のもの、という意味になります。 await page.locator("#email") ところで、この id とは何のために使われるものでしょう?ウェブ開発者向けの技術ドキュメントサイトであるMDNによると、 id は以下のような目的で使われるものと書いてあります。 ID 属性の目的は、リンク(フラグメント識別子を使用)、スクリプト、またはスタイル設定(CSS を使用)の際に、単一の要素を識別することです。 https://developer.mozilla.org/ja/docs/Web/HTML/Reference/Global_attributes/id#%E8%A7%A3%E8%AA%AC つまり、 id 属性はページ内で使われるJavaScriptやCSSのために使われるもので、これらの都合で変更される可能性があるわけです。 より具体的に言うと、上記のログインフォームは id の値を元にバックエンドサーバーにデータを送ります。そのため、バックエンドサーバーの仕様が変わった場合、フォームも変わる可能性があります。一例として、バックエンドサーバーが受け取る変数名が email から mailaddress に変わった場合、ログインフォームは以下のように変わります。 <form method="post" action="/login"> - <label for="email"> メールアドレス </label> - <input id="email" /> + <label for="mailaddress"> メールアドレス </label> + <input id="mailaddress" /> <label for="password"> パスワード </label> <input id="password" /> <span id="button" class="login-btn">送信</span> </form> もちろん、これに対応して、テストコードも変えなければいけません。 - const inputEmail = getElementById("email") + const inputEmail = getElementById("email") ですが、E2Eテストの本来の目的と照らし合わせると、このように内部構造の変化の影響をテストコードが受けるのはおかしいはずです。E2Eテストの目的は ユーザーがビジネスケースを達成できるかどうか のはずなのに、目的が変わらないのにテストコードを直さないといけなくなってしまいます。これでは本末転倒です。 テスト用のIDを用いた要素探索 そこで、内部構造の代わりに、テスト用に一意のIDを振ろうという考え方が現れました。例えば、 data-testid という属性を定義し、それをテスト用に使うことができます。 <form method="post" action="/login"> <label for="email"> メールアドレス </label> <input id="email" data-testid="email" /> <label for="password"> パスワード </label> <input id="password" data-testid="password" /> <span id="button" class="login-btn" data-testid="submit">送信</span> </form> この場合、テストコードは次のように書けます。 await page.locator('[data=testid="email"]') // 属性名が data-testid の場合は、 // Playwrightのショートハンドで次のようにも書ける await page.getByTestId('email') data- から始まる属性は データ属性 と呼ばれており、どんな属性も自由に定義でき、原則としてアプリケーションの振る舞いに影響を与えません。そのため、テスト用のIDを振るという用途にはぴったりです。 便利な半面、結局データ属性を個別に定義しないといけなくなってしまい、手間が増えることに変わりはありません。また、データ属性はユニークである保証が無いため、ページ内に同じデータ属性が複数存在する場合に、テストが不安定になる場合があります。例えば、一つのページに新規登録フォームとログインフォームがある場合、 data-test="email" が2つあると、ログインフォームのテストをしているつもりが実は新規登録フォームに入力していた、なんてことも考えられます。 セマンティクスを用いた要素探索 ところで、 id や class のような内部属性にしろ、 data-test のようなテスト用の属性にしろ、突き詰めると ユーザーにとっては何の関係もない値 です。ユーザーは「メールアドレス」と書いてあるフォームに文字を入力するのであって、 id や data-test に email と書いてあるフォームに文字を入力するわけではないからです。そのため、E2Eテストの大原則である「ユーザーがビジネスケースを達成できることの検証」という目的と照らし合わせると、とても不自然なことをしています。 この点をカバーするため、2025年現在では要素の セマンティクス(意味) を用いた要素探索手法が広く用いられています。アクセシビリティ支援技術の中には、例えばスクリーンリーダーのような「ページに表示されている情報を様々な方法でユーザーに伝える」ための技術があります。GUIのような視覚的に理解できるインターフェースを、ページの構造やUIコンポーネントの役割、表示されているテキストなどを用いて様々な形でユーザーに伝えます。 こうした支援技術が用いるデータは、ユーザーの目線からページを見た際の 意味 を機械的に表現したものが多いです。Webページでセマンティクスを表現する方法はいろいろありますが、一例として ボタン を表す方法をいくつか挙げましょう。 <input type="button" name="OK" /> <button>OK</button> <span role="button" aria-label="OK">OK</button> これらはすべてスクリーンリーダー上では OK というラベルを持った ボタン として振る舞います(※厳密には、3つ目の例はTabキーによるフォーカスが当たらない、Enterキーによる押下ができないなど、いくつか制約があります)。 仮に、これらの要素を 内部属性 を用いて探索する場合、それぞれ別の書き方をする必要があります。 await page.locator('input[type="button"][name="OK"]'); await page.locator('button:has-text("OK")'); await page.locator('span[role="button"][aria-label="OK"]'); ですが、 セマンティクス を用いる場合、一つの書き方で三つすべての要素にマッチします。 await page.getByRole('button', { name: 'OK' }); セマンティクスを手がかりに要素を探索することで、よりE2Eテストらしい、ユーザー目線のテストを書けるようになります。また、UIのセマンティクスを整備することによって、スクリーンリーダーなどのアクセシビリティ支援技術がUIを理解しやすくなる効果もあります。 まとめ 前編ではE2Eテストそのものの説明と、GUIを扱うという性質上重要になってくる要素探索についての解説を行いました。 次回、中編では、自動テストそのものの実装技術について触れたいと思います。 【連載】モダンなE2Eテストの考え方をマスターしよう 【第1回・前編】まずはやってみよう – Playwrightを使ったハンズオン(事前準備編) 【第1回・後編】まずはやってみよう – Playwrightを使ったハンズオン(テスト自動化編) 【第2回-前編】E2Eテストの歴史 -要素探索技術の変遷- The post 【第2回-前編】E2Eテストの歴史 -要素探索技術の変遷- first appeared on Sqripts .
こんにちは。クオリティマネージャーの”黒山羊さん”です。 前回 は生成AI作成の議事録を補完する 議事メモ の取り方について書かせてもらいました。 これまで私は生成AIでの議事録作成を試したことがなく、生成AIを使った議事録作成はお客様が行ったり、チームメンバーが行ったりしていました。 チームメンバーの作成した議事録が、お客様作成のものと比べて綺麗にまとまっていたので、何か秘訣があるかと聞いたら、ちょっとしたコツを教えてもらいました。 それを聞いて自分でも生成AIを使ってみたところ、思った以上に簡単に議事録作成が出来ました。 このブログは私と同じように生成AIを使っている人が周りにチラホラ出てきて、自分も使ってみようかな。でも、初めてだとちょっと踏ん切りがつかないな。 そういう人に向けて書きました。 使用する生成AIと環境 まず、私が使用した生成AIと会議ツールをお伝えします。 生成AI :Copilot 会議ツール :Teams 業務PCがWindowsであれば、どちらも簡単に使用することが出来るものです。 他に生成AIはChatGPTが有名ですが、今回のような議事録作成はCopilotの方をお勧めします。 以下の表はCopilotに聞いた、ChatGPTとCopilotの比較です。 項目 ChatGPT(OpenAI) Copilot(Microsoft) 創作・文章生成 小説、ブログ、SNS投稿などの自然な文章が得意 ビジネス文書や要約は得意だが、創作性はやや控えめ 会話の自然さ 長時間の対話や雑談がスムーズ 実務寄りで、やや堅めの応答が多い プログラミング支援 多言語対応でコード生成・デバッグが得意 コード生成も可能だが、Office連携が主軸 カスタマイズ性 ユーザーの好みに合わせて育てやすい Microsoft製品との統合が前提で柔軟性は限定的 対応分野の広さ 教育、創作、趣味、雑談など幅広い ビジネス・業務効率化に特化 CopilotはOffice連携が得意であり、カスタマイズなどする必要なく作成した議事録を直接Word形式で出力することが出来ます。 ChatGPTでもアドインやプラグインを入れることでWord等と連携することも可能ですが、今回のように議事録作成しWord形式で保存するならCopilotの方が向いていると思います。 生成AIを使用した議事録の作り方(基本編) 1. Teamsで会議を実施し、文字起こしを行う Teamsで会議が始まったら、メニューの「その他」をクリックし、「レコーディングと文字起こし」→「レコーディングを開始」を選択する。 (会議設定時にレコーディングを自動的に開始することも可能です) 2. 会議が終了したらトランスクリプト(文字起こし)をダウンロードする 会議が終了したらTeamsのメニューから「チャット」を選び、先程まで行っていた会議チャットを選択。 コンテンツとして「トランスクリプト」が表示されているので、それをクリック。 出てきた画面より、「ダウンロード」を選択し、「.docx 形式でダウンロード」をクリックすれば、自分のローカルにダウンロードされます。 3. Copilotにトランスクリプトを渡し議事録を作成する Copilotを立ち上げ、先程のトランスクリプトをドラッグアンドドロップ。 アップロードされるのを待って、「議事録を作って」と打ち込む。 すると、要約された議事録が表示される。 4. 出力された議事録を確認し、適宜修正する 人の名前やサービス名、会社名などの固有名詞は間違っていることが多々あります。 そんな場合は「〇〇を△△にして」とお願いすれば、文言を直した議事録にしてくれます。 例:「苦労ヤギを黒山羊にして」 複数個所の修正が必要な場合は「、」でつなげれば1回で修正してくれます。 例:「苦労ヤギを黒山羊、ホワイトゴートをWhiteGoatにして」 5. 生成された議事録をWord形式で出力する 4. で生成された内容でよければ、「Wordで出力して」と打ち込めば、Wordファイルが表示されるので、それをダウンロードする。 以上で、Teamsの文字起こしから議事録がWordファイルで作成されました。 生成AIを使用した議事録の作り方(応用編) 基本編で議事録は出来ましたが、欲しい形式とは異なる場合もあると思います。 その場合はCopilotにお願いする内容を具体的にすると、より欲しいものに近づけることが出来ます。 例:「宿題事項と要点をまとめて議事録を作って」 「要点を箇条書きにして議事録を作って」 などです。 また、結論や決定事項をまとめたい場合も、お願いするとAIがまとめてくれます。 例:「決定事項をまとめて」 他にも特定の発言者の意見を振り返りたいならその旨お願いすれば、改めてトランスクリプトから発言を抽出してくれます。 例:「黒山羊さんの手紙に関する意見についてピックアップして」 なお、白熱した会議でトランスクリプトが大きくなった際、何度試しても読み込みエラーになることがあります。(体感2時間超の会議でエラーになります) トランスクリプトを分割して、議事録作成を行うなどの工夫が必要です。 例:分割したトランスクリプトをまとめて読み込ませ、「2つのファイルをまとめて、議事録を作って」 ※分割したトランスクリプトを1つずつ読み込ませて議事録作成し、後でつなげることも可能 生成AIは何度でも修正してくれるので納得いくまで出力内容を見直してみましょう その他、作成手順で詰まったところ 上記の作成手順で、Copilotに聞く以前に詰まったところがあった為、備忘のため記述します。 ◆Teams会議が終わったのに「トランスクリプト」が表示されない 会議終了前にレコーディングを止めず、会議に誰かが残ったままだと、トランスクリプトが表示されません。 その場合は会議から全員出るまでしばらく待って見てください。 ◆「トランスクリプト」は表示されたがダウンロード出来ない (権限割り当てをしていない場合)「トランスクリプト」のダウンロードが可能なのは、会議の主催者のみです。 ダウンロードできない場合は主催者に取得をお願いしてください。 おわりに やってみると思った以上に簡単に議事録作成することが出来ました。 具体的な指示が必要だったり、文言の微調整は必要だったりしますが、それでも自分で議事録をまとめていた頃とは比較にならない労力で議事録作成出来ることに感激です。 また、自分で生成AIを使用して議事録を作るようになってからは、 会議の発言もより5W1Hを意識したり、具体的な意見を心掛けるようになりました。 よかったら皆さんも生成AIを使って、仕事を楽にしていきましょう!! 参考書籍 この一冊で全部わかる ChatGPT & Copilotの教科書 The post 生成AIによる議事録作成ABC -TeamsとCopilotを使って- first appeared on Sqripts .