SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Developers Summit 2024 セッションレポート

ソフトウェアテストは「段階」ではなく「活動」である──ブロッコリー氏が問う、プロダクトに求められる品質とは何か

【16-C-7】テストの完了をゴールにしない!~仮説検証を繰り返し、開発・QA・ユーザーが交流しながら開発することで見えてくる理想の姿~

  • X ポスト
  • このエントリーをはてなブックマークに追加

 DevOpsの重要性が認識されている昨今、シフトレフト・シフトライトのテストアプローチへの注目度が高まっている。株式会社10X・品質管理部のブロッコリー氏は「本来、テストは開発のすべてのプロセスにおいて行われるべきもの。一般的な『テストの完了』がエンジニアのゴールではない」とその奥深さを語る。プロダクトの品質を高め、ユーザーに利益をもたらすためのテストはどうあるべきか? 10Xでの実践例について、同氏が講演を行った。

  • X ポスト
  • このエントリーをはてなブックマークに追加

常に行う「アクティビティ」としてのテスト

 講演の始めに、ブロッコリー氏は「機能開発はしたものの、本当にユーザーの課題解決につながっているのか不安になったことはありませんか」と聴衆に問いかけた。

 プロダクトを開発するにあたり、エンジニアはつい、こなしたタスクやリリースの多さというアウトプット量を意識してしまいがちだ。しかし、本当に重要なのはユーザーの課題解決や行動変容、すなわちアウトカムである。冒頭の質問はこのようなズレから発されたものだが、覚えがあるオーディエンスが多いのか、会場では多くの手が挙がった。

株式会社10X 品質管理部 風間 裕也氏
株式会社10X 品質管理部 風間 裕也氏

 会場の反応を確認したブロッコリー氏は、講演を通した主張として、「エンジニアは、一般的な『テストの完了』をゴールに置くべきではない」と説く。一般にテストはコードをマージしてビルドする際に行うものという認識を持たれることが多いが、アウトカムを重視した立ち回りをするのであれば、コード実装前(シフトレフト)やリリース後(シフトライト)のテストも重視すべきだと言うのだ。「テストはもはやフェーズではなく、常に行っていくアクティビティ(活動)」。そんなブロッコリー氏の考えを表したのが、以下に示す「継続的テストモデル」だ。

あらゆる場面でテストが可能なDevOps
あらゆる場面でテストが可能なDevOps

 本日のテーマを確認したところで、話は実践例に移る。ブロッコリー氏は10Xにおけるシフトライト・レフトの具体的な活動を紹介する前に、コンテクストを合わせるため同社の事業を簡単に紹介した。10XではStailerという小売・流通事業者向けのECプラットフォームを開発しており、ユーザー向けのアプリだけでなく、注文後にスタッフがピッキングやパッキングを行って配達するまで、一連の業務管理を担う店舗アプリ開発も行っている。

 今回の講演では、このアプリにおけるピッキング・パッキングに着目する。たとえばネットスーパーにおいては、ユーザーAから牛乳2本・ユーザーBから3本という注文が入った場合でも、すぐに個数を確定させることはない。ときにはユーザーが考えを変え、注文をキャンセルする可能性もあるためだ。

 そのため裏側のシステムには、オーダー後の変更締め切り時間が設けられている。これを過ぎると発注内容が確定し、店舗スタッフが5本の牛乳を実際の店舗内の陳列からピックアップ(ピッキング)する流れだ。あとはこれらをバックヤードに持ち込み、バーコードを読み込んだ後、注文ごとに商品を梱包(パッキング)して配達することになる。このオペレーションについて、どのようなテストが可能だろうか。

 まずシフトレフトについては、TDD(テスト駆動開発)よりもさらに前段階である、プランやブランチの段階でもテスト活動が可能だという。これは受け入れ基準(タスクチケットの完了基準)を作成する際の活動であり、とくにスクラムにおけるリファインメントの部分で行うものだ。なお10Xの場合、リファインメントは開発者だけでなく、POのようなビジネス関係者とQAの3者で協調しながら進める3amigosという考え方を用いる場合がある。

 先ほどのオペレーションについては、もともと「hogehogeメソッドが注文の締め切り時間の前に呼ばれているので対応する」という受け入れ基準が定義されていた。それに対してQAであるブロッコリー氏は、リファインメントの場で「コードの内容は分かった。でも、これはアプリの振る舞いでいうと、どの画面をどう操作したときに発生するんだろう」と疑念を投げかけた。

設計段階から3者でディスカッションすることで見えるものがある
設計段階から3者でディスカッションすることで見えるものがある

 そうして調査を進めると、「注文確定前の段階にもかかわらずピッキングを終わらせてパッキングまで進んだ場合、完了ボタンを押すとエラーになり、前画面に戻る」というものだとわかった。また「完了ボタンを押さずとも、その画面で15秒放置した場合もエラーを返す」という振る舞いを行うことも判明した。

 ブロッコリー氏は「このように書くと、何をもってこのタスクが『完了』になるのかがはっきりする。特に15秒放置するケースは、最初の『hogehogeメソッドの〜』という記述だけではよく分からなかったかもしれない」と振り返る。また余談として、「今回のように早い段階で行うべきことをはっきりしていると、そもそもバグが作られずに済むため追加コストが不要になる」と、副産物も示した。

次のページ
リリース後のテストだからこそ事前の計画が重要

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Developers Summit 2024 セッションレポート連載記事一覧

もっと読む

この記事の著者

中島 佑馬(ナカシマ ユウマ)

 立命館大学卒業後、日刊工業新聞社にて経済記者として勤務。その後テクニカルライターを経て、2021年にフリーランスライターとして独立。Webメディアを中心に活動しており、広くビジネス領域での取材記事やニュース記事、SEO記事の作成などを行う。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山出 高士(ヤマデ タカシ)

雑誌や広告写真で活動。東京書籍刊「くらべるシリーズ」でも写真を担当。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

CodeZine編集部(コードジンヘンシュウブ)

CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/19774 2024/11/28 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング