この記事は、Techouse Advent Calendar 2024 20日目です。
昨日は imayayoh さんによる AWS X-Ray と Amazon CloudWatch RUM を用いたパフォーマンス監視のベストプラクティス でした。
こんにちは、株式会社Techouse バックエンドエンジニアの @nodematerial です。
本記事では、私が弊社で主催したイベント「テスト技法勉強会 2024」を紹介します。
テスト技法勉強会 とは?
ソフトウェア開発に必要な、基礎的なテスト技法の習得を目的とした勉強会です。 解説だけでなく演習にも重きを置き、業務にもすぐ生かせるような実践的内容を取り扱っています。
今年度開催した「テスト技法勉強会 2024」では、弊社に所属する学生エンジニア22名が、ガッツリ1日かけてテスト技法を習得しました。
解説パート
以下3つの章立てに沿って、解説を行いました。
1. 品質に関する、開発チームの歴史
第一に、弊社のとある開発チームの歴史を、品質的な側面から説明しました。
2022年頃この開発チームは、開発速度を最優先とした体制の帰結として、技術的負債に苦しむ状態に陥っていました。エンジニアの工数が障害対応に吸われ、強みとしていた開発速度が失われることで、お客様の要求を満たせなくなることが度々生じていました。
2023年、弊社の技術開発責任者(@nappa)が開発チームを分析し、改善計画の第一歩として「開発者の品質知識とテスト技術の獲得」に取り組むことを決定しました。
開発チーム分析
なぜ最初に取り組むべき改善として、「品質知識とテスト技術の獲得」が選ばれたのでしょうか? その理由は、開発チームの課題を整理した結果、「品質知識とテスト技術の欠如」が根底に存在することが明らかとなったからです。
上記「品質問題の分析図」は、開発チームの課題を、グラフ構造を用いて整理したものです。 この分析により、個々の課題間にある因果関係を、視覚的に把握することができるようになりました。
[例1]
漏れのないテストを実装するために必要なスキルがない
→ 仕様をもれなく記述することができない
→ 正しいドキュメントを作成・維持できない
[例2]
自動テストの経験, 知識がない
→ 自動テストが不具合を検出できない
→ 統合テストの段階で多くのバグが見つかる
このとき開発チームは、知識や技術不足がもたらす深刻な弊害を、初めて深く理解することになりました。
最初の「テスト技法勉強会」
では、品質知識とテスト技術を獲得するためには、どのような取り組みが必要になるのでしょうか? 知識だけでなく、実践的なテスト技法を習得するためには、実際に手を動かして学ぶ機会が重要になります。
このような観点から、同じ問題を複数人で解く演習形式の「テスト技法勉強会」が開催されることになりました。開発チームのメンバーが二日間かけてテスト技法を学び、手を動かしてテストケースを作成しました。
その後も「品質知識とテスト技術の獲得」だけにとどまらず、自動テストのカバレッジ計測など、ソフトウェア品質につながる取り組みが実施され、開発チームの品質意識は徐々に高まっていきました。
2. 品質に関する、開発チームの現状
第二に、今の開発チーム状況について説明しました。
弊社Techouse は現在、多くの学生エンジニアに参画していただいてます。若い開発者のパワーはチームに大きな推進力をもたらし、より素晴らしく「Techouse らしい」プロダクトの実現に貢献しています。
しかしその一方で、 開発経験の浅いメンバーの多さには、常に向き合い続ける必要があります。個々のメンバーの開発経験が少ないからといって、プロダクト品質の低下が許されるわけではありません。
熟練した開発者が少ないという特性上、私たちは品質向上をより意識的に行う必要があります。 特に、開発経験の少ない学生エンジニアがテスト技法を身につけることは、最も優先度の高い取り組みでした。
(参加者対して)「だから君たちには、もっと強くなってもらいたい!──」
...というように、チームの歴史や勉強会開催の経緯を、参加者に対してそのまま説明しました。
- 開発チームはこの数年で大きく改善した
- それでも自信を持って「品質が優れている」といえるまでには、まだ途方もない道のりがある
という事実を深く理解してもらうには、この一見遠回りした説明は欠かせなかったと思います。 実際「テスト技法勉強会 2024」には、この話で題材としたチーム所属のメンバーも参加しており、彼は現在、より品質を意識した開発を行えているようです。
3. ソフトウェアテストの概念解説
解説パートの最後で、ソフトウェアテストに関わる諸概念を説明しました。
具体的には、以下の題材を扱いました。
[ソフトウェアテストの7原則]
ISTQB ソフトウェアテスト技術者資格制度のシラバス(日本語翻訳版)に掲載されている、 ソフトウェアテストに関する7つの原則について紹介しました。
特に原則6「テストは状況次第」は、どの開発チームでも意識する必要がある原則です。 例として、弊社のある開発チームの現状と、現状に合わせた取り組みを説明しました。
チームの現状について
- 現状、QAE の人手が特に不足している
- リリース時期を約束している開発アイテムが複数存在する
品質に対する取り組み
- 設計精度の向上
- 検証段階で仕様漏れが見つからないよう、 ドキュメント, 概念図の作成を徹底し設計精度を高める
- 開発者による品質向上の取り組みを重要視する
- 自動テストを充実させる、開発環境でのスモークテストを必須とする
- プロダクトのコア機能が正常に利用できることを CIで保証する
[カバレッジ]
C0, C1, C2 カバレッジの概要と、計測することの重要さを説明しました。 題材として、弊社の技術部に在籍していたメンバーによる Kaigi on Rails 2023 の登壇動画「コードカバレッジ計測ツールを導入したらテストを書くのが楽しくなった話」を利用しました。この動画は、Rails におけるカバレッジ計測の説明として、とても分かりやすい題材です。
演習パート
本勉強会のメインテーマであるテスト技法演習を行いました。
ソフトウェアテスト技法練習帳 (通称: 緑本)を題材に、3つのテーマを扱いました。
1. 同値分割法と境界値分析
製品の仕様を元に同値分割を行い、その結果を元にテストケースを生成するという、基礎的なテスト技法の習得を目指しました。
7つの設問に取り組むことで、以下の観点を身につけることができます。
- 連続値を関心とするテストシナリオにおいて、同値分割の実施後、境界値のテストケースと代表値のテストケースを配置する
- そのテストシナリオが何を関心としているか注意して、同値分割を行う
- 内部ロジックが明らかな場合と、明らかでない場合でチェックすべきテストケースは変わり得る(ホワイトボックス, ブラックボックスなテスト)
2. デシジョンテーブル
デシジョンテーブルを活用し、ロジックを網羅する最小限のテストケースを作成する演習を行いました。これは、開発者が単体テストを作成する際に重要なスキルであるため、重点的に取り上げました。
3. 状態遷移テスト
2つの設問を通じて、状態遷移図および、スイッチカバレッジを意識したテストケース作成手法の習得を目指しました。
「テスト技法勉強会 2024」では新たな取り組みとして、Confluence whiteboards を利用した状態遷移図の作成を行いました。ボード上で参加者同士の交流も活発に行われ、良い取り組みになったと感じています。
「テスト勉強会 2024」の開催後
参加者からのフィードバック
ありがたいことに、参加者からは概ね好意的なフィードバックをいただきました。
特に「演習が多く、実際に手を動かすことで理解が深まった」という意見が多く寄せられ、演習の重要性を再認識できました。
一方で、「もう少し発展的な内容を取り扱ってほしかった」という声もいくつか寄せられました。このような意見は「参加者のスキル差を考慮した設計が必要」という改善点を気づかせてくれます。
このような改善点を踏まえ、次回以降の「テスト技法勉強会」がより充実したものになるよう、改善を図っていきたいと考えています。
事業部からのフィードバック
「テスト勉強会 2024」の取り組みは実際、どのような形で事業に還元されたのでしょうか? 開催から3ヶ月ほどたって、以下のようなフィードバックが得られました。
事業部A
「統合テスト段階での品質指標の計測はまだ行えていないが、単体テストの網羅性が向上していることは確認できている。今後、少しずつ目に見える成果が出てくることを期待している。」
事業部B 「インターン生(=学生エンジニア)が作成した Pull Request をレビューしています。 以前はテストの重要性を意識できていないと感じていましたが、勉強会を経て着実にテストの書き方が上手くなっています。 実際、自動テストの書き方でインターン生を褒めることも多くなりました。」
終わりに
「テスト技法勉強会 2024」は当初の目的通り、参加者が基礎的なテスト技法を習得する良い機会となりました。来年以降も「テスト技法勉強会」を継続し、より多くのエンジニアが品質向上に関心を持てるよう、取り組んでいきたいと考えています。
(いつか、社外にも開放できるような形で開催できるといいな、とも思っています。)
明日のTechouse Advent Calendar 2024は Niranabe さんによる ドキュメントでなくコードで語れ ~RuboCopのカスタムルールで規約を記述する~ です。
Techouseでは、社会課題の解決に一緒に取り組むエンジニアを募集しております。 ご応募お待ちしております。