Upgrade to Pro — share decks privately, control downloads, hide ads and more …

テストコードにはテストの意図を込めよう(2025年版) #retechtalk / Put t...

テストコードにはテストの意図を込めよう(2025年版) #retechtalk / Put the intent of the test 2025

Re:TechTalk #07 テストコードにはテストの意図を込めよう(2025年版)での登壇資料です。

【発表資料中のURL】
◆P2
B-Testing

◆P3
『Agile Testing Condensed Japanese Edition』(Janet Gregory, Lisa Crispin 著、風間 裕也 訳)

『A Practical Guide to Testing in DevOps Japanese Edition』(Katrina Clokie 著、風間 裕也, 河原田 政典 訳)

『The BDD Books - Discovery (Japanese Edition)』(Gáspár Nagy, Seb Rose 著、風間 裕也 訳)

『The BDD Books - Formulation (Japanese Edition)』(Gáspár Nagy, Seb Rose 著、風間 裕也 訳)

◆P5
第7回 テストコードの認知負荷 ~テストの名前、構造、情報量を工夫する~ | gihyo.jp

◆P6
保守しやすく変化に強いソフトウェアを支える柱 自動テストとテスト駆動開発、その全体像 ~Software Design 2022年3月号「そろそろはじめるテスト駆動開発」より | gihyo.jp

◆P64
2002年にラムズフェルド国防長官(当時)が会見時に発した言葉

◆P66
Testing vs. Checking

テスト駆動開発

◆P67
We need to talk about testing

【翻訳記事】BDDの考案者が執筆した記事「テストについて話し合わなくてはならない」を翻訳しました!

◆P73
ISTQBテスト技術者資格制度 Foundation Level シラバス 日本語版 Version 2023V4.0.J02

◆P76
見てわかるテスト駆動開発

◆P77
【翻訳】テスト駆動開発の定義

◆P78
レビュー体系化の経過報告:レビュー体系とレビューアーキテクチャー | JaSST Review’23

◆P79
品質保証活動をアジャイルプロセスに溶け込ませるためのテスト活動の再構築と、それを支えるアジャイル・エンジニアリングの活用 | ソフトウェア品質シンポジウム2024

◆P92
プロジェクトの姿~顧客が本当に必要だったもの

◆P96
WACATE

◆P97
Nihonbashi Test Talk #4

◆P98
RECRUIT | 株式会社10X

[共通]カジュアル面談 / 株式会社10X

Avatar for nihonbuson

nihonbuson

May 14, 2025
Tweet

More Decks by nihonbuson

Other Decks in Technology

Transcript

  1. 自己紹介 • 風間裕也(ブロッコリー) • 株式会社10X 品質管理チーム • 副業:B-Testing(個人事業主)として ◦ 株式会社MonotaRO

    (テストコンサルタント) ◦ グロース・アーキテクチャ&チームス株式会社(共同研究) 他数社でお手伝い • 社外活動 ◦ JaSST Review(ソフトウェアレビューシンポジウム) 実行委員長 ◦ WACATE(テストの合宿型ワークショップ形式勉強会) 実行委員長 ◦ SReEE(ソフトウェアレビューをエンジニアリングっぽく 捉える会)リーダー SNS上の アイコン
  2. 理解容易性や説明容易性も重要なのでは? • 理解容易性(Understandability) ◦ 対象の理解しやすい度合い ◦ 可読性(Readability)に影響を受ける • 説明容易性(説明可能性、Explainability) ◦

    「今やっていることは何か」を説明できる度合い ◦ 読み手のコンテキストにも左右される ◦ 特にAI分野では「eXplainable AI(説明可能なAI)」 として注目されている ◦ 可読性(Readability)に影響を受ける オリジナル の用語
  3. Three Amigosの得意分野 Three Amigosは得意分野となる注目点が異なる • PO…今回のFeatureで実現したいことに注目 • 開発者…今回のFeatureはどのようにすれば     実現できるかに注目 •

    QA…今回のFeatureが「完成した」と   判断するためには   何を確認すれば良いのかに注目 ※あくまでも得意分野であり、  責任分担している訳ではない
  4. 4つの事例 • 本発表では、QAの得意分野である 「何を確認すれば良いのか」に 注目して行った会話を4つ紹介する ◦ 事例1:分かりやすいメソッド名を考える ◦ 事例2:テストの意図をテストメソッド名に反映する ◦

    事例3&4:会話を通じてテストの意図を見つけ出す ※本発表では「テストの意図」と表現していますが、この言葉は、  JSTQB(ISTQB)におけるテスト条件のことを指しています。  詳しくは、ISTQBテスト技術者資格制度 Foundation Level シラバス 日本語版 Version 2018V3.1.J03  を参照してください。
  5. 何を確認したいテスト? これって 47都道府県 全てで テストする? QA 開発者 地方ごとに 送料が 変わるのが

    確認できれば OK! @Test public void _青森県の場合 送料が1000円{ } @Test public void _広島県の場合 送料が510円{ }
  6. 特別な意図があったのは一部分だけだった @Test /*氏名:テスト太郎 、人数:0名、予約番号:印刷する */ public void _テストその1{ @Test /*氏名:テスト太郎

    、人数:1名、予約番号:印刷する */ public void _テストその2{ @Test /*氏名:テスト太郎 、人数:2名、予約番号:印刷しない*/ public void _テストその3{ テストコードを 実装するために 必要になった 入力値
  7. Nestedを用いてテストの意図を整理する @Nested class _予約できる人数は 1名以上4名以下 { @Test public void _人数が0名の場合予約できない{

    @Test public void _人数が1名の場合予約できる{ } @Test public void _予約番号を印刷しない場合予約できる{
  8. お題その3 • 題材は自動販売機 • Cucumber + JUnit • 与えられた要求は下記の3つ ◦

    100円硬貨を入れたら 入金額が100円になってほしい ◦ 100円硬貨を入れた後に50円硬貨を入れたら 入金額が150円になってほしい ◦ 1円硬貨は対応しないでほしい
  9. お題を元に作成した結果(JUnitは割愛) Scenario: 入金額確認 Given 自動販売機がある When 100円を入金 Then 100円が入金されている Scenario:

    入金額確認 Given 自動販売機がある When 100円を入金 And 50円を入金 Then 150円が入金されている Scenario: 入金額確認 Given 自動販売機がある When 1円を入金 Then 0円が入金されている public class VendingMachine { int currentMoney = 0; public void insertCoin(int money) { if (money == 50 || money==100) { currentMoney += money; } } public int getCurrentMoney() { return currentMoney; } }
  10. テストシナリオをさらに改善する Scenario: 入金額確認 Given 自動販売機がある When 100円を入金 Then 100円が入金されている Scenario:

    入金額確認 Given 自動販売機がある When 100円を入金 And 50円を入金 Then 150円が入金されている Scenario: 入金額確認 Given 自動販売機がある When 1円を入金 Then 0円が入金されている
  11. シナリオ名を変更する Scenario: 入金額確認 Given 自動販売機がある When 100円を入金 Then 100円が入金されている Scenario:

    入金額確認 Given 自動販売機がある When 100円を入金 And 50円を入金 Then 150円が入金されている Scenario: 入金額確認 Given 自動販売機がある When 1円を入金 Then 0円が入金されている すべてシナリオ名が 『入金額確認』になってますね。 同じ名前はどうかと思うので 変えたほうが良い気がしてます。 なるほど。 そしたらこんな感じですかね。 (テストシナリオを編集する) QA 開発者
  12. シナリオ名を変更する すべてシナリオ名が 『入金額確認』になってますね。 同じ名前はどうかと思うので 変えたほうが良い気がしてます。 なるほど。 そしたらこんな感じですかね。 (テストシナリオを編集する) Scenario: 1回投入時の入金額確認

    Given 自動販売機がある When 100円を入金 Then 100円が入金されている Scenario: 2回投入時の入金額確認 Given 自動販売機がある When 100円を入金 And 50円を入金 Then 150円が入金されている Scenario: 使用不可の硬貨投入 Given 自動販売機がある When 1円を入金 Then 0円が入金されている QA 開発者
  13. テストの意図を明確にする Scenario: 1回投入時の入金額確認 Given 自動販売機がある When 100円を入金 Then 100円が入金されている Scenario:

    2回投入時の入金額確認 Given 自動販売機がある When 100円を入金 And 50円を入金 Then 150円が入金されている Scenario: 使用不可の硬貨投入 Given 自動販売機がある When 1円を入金 Then 0円が入金されている なるほど。ちなみに、 2つ目のテストの意図って なんですかね? コインを1回だけではなく、 2回投入した時にも ちゃんと動くか確認したい という意図です。 QA 開発者
  14. テストの意図を明確にする Scenario: 1回投入時の入金額確認 Given 自動販売機がある When 100円を入金 Then 100円が入金されている Scenario:

    2回投入時の入金額確認 Given 自動販売機がある When 100円を入金 And 50円を入金 Then 150円が入金されている Scenario: 使用不可の硬貨投入 Given 自動販売機がある When 1円を入金 Then 0円が入金されている なるほどー。 そしたら『2回投入時』と 書いていますが、 3回目はどうなるのでしょうか? 3回目は2回目と同じく、 加算されていく仕組みなので、 ロジック上は大丈夫です。 QA 開発者
  15. テストの意図を明確にする Scenario: 1回投入時の入金額確認 Given 自動販売機がある When 100円を入金 Then 100円が入金されている Scenario:

    2回投入時の入金額確認 Given 自動販売機がある When 100円を入金 And 50円を入金 Then 150円が入金されている Scenario: 使用不可の硬貨投入 Given 自動販売機がある When 1円を入金 Then 0円が入金されている ということは、気にしているのは 2回投入の金額ではなく、 複数回の投入時の加算 なんですね。 あー、確かにそうですね。 (テストシナリオを編集する) QA 開発者
  16. テストの意図を明確にする ということは、気にしているのは 2回投入の金額ではなく、 複数回の投入時の加算 なんですね。 あー、確かにそうですね。 (テストシナリオを編集する) Scenario: 1回投入時の入金額確認 Given

    自動販売機がある When 100円を入金 Then 100円が入金されている Scenario: 複数回投入時の入金加算額確認 Given 自動販売機がある When 100円を入金 And 50円を入金 Then 150円が入金されている Scenario: 使用不可の硬貨投入 Given 自動販売機がある When 1円を入金 Then 0円が入金されている QA 開発者
  17. 数年後、テストの意図が分かるのはどっち? Scenario: 入金額確認 Given 自動販売機がある When 100円を入金 Then 100円が入金されている Scenario:

    入金額確認 Given 自動販売機がある When 100円を入金 And 50円を入金 Then 150円が入金されている Scenario: 入金額確認 Given 自動販売機がある When 1円を入金 Then 0円が入金されている Scenario: 1回投入時の入金額確認 Given 自動販売機がある When 100円を入金 Then 100円が入金されている Scenario: 複数回投入時の入金加算額確認 Given 自動販売機がある When 100円を入金 And 50円を入金 Then 150円が入金されている Scenario: 使用不可の硬貨投入 Given 自動販売機がある When 1円を入金 Then 0円が入金されている
  18. 在庫処理のテストケース @Test public void 手動設定ありのパターン{ ProductStock productStock = new ProductStock(“商品A”);

    productStock.setBaseStock(10); productStock.setReceivedStock(6); productStock.setNsCoefficient(0.5); productStock.setManualOverride(7); assertThat( productStock.calc() , is(7)); }
  19. 会話からテストの意図を理解する @Test public void 手動設定ありのパターン{ ProductStock productStock = new ProductStock(“商品A”);

    productStock.setBaseStock(10); productStock.setReceivedStock(6); productStock.setNsCoefficient(0.5); productStock.setManualOverride(7); assertThat( productStock.calc(), is(7) ); } これって どうして最終的な 期待値が7なんですか? えっとそれは… QA 開発者
  20. 会話からテストの意図を理解する @Test public void 手動設定ありのパターン{ ProductStock productStock = new ProductStock(“商品A”);

    productStock.setBaseStock(10); productStock.setReceivedStock(6); productStock.setNsCoefficient(0.5); productStock.setManualOverride(7); assertThat( productStock.calc() , is(7)); } まず、 商品Aのクラスを 生成して… 開発者
  21. 会話からテストの意図を理解する @Test public void 手動設定ありのパターン{ ProductStock productStock = new ProductStock(“商品A”);

    productStock.setBaseStock(10); productStock.setReceivedStock(6); productStock.setNsCoefficient(0.5); productStock.setManualOverride(7); assertThat( productStock.calc() , is(7)); } 元々の在庫数の10個を setBaseStockで 設定して… 開発者
  22. 会話からテストの意図を理解する @Test public void 手動設定ありのパターン{ ProductStock productStock = new ProductStock(“商品A”);

    productStock.setBaseStock(10); productStock.setReceivedStock(6); productStock.setNsCoefficient(0.5); productStock.setManualOverride(7); assertThat( productStock.calc() , is(7)); } 新たに入庫された6個を setReceivedStockで 設定するので、 合計の在庫は 10+6=16個で… 開発者
  23. 会話からテストの意図を理解する @Test public void 手動設定ありのパターン{ ProductStock productStock = new ProductStock(“商品A”);

    productStock.setBaseStock(10); productStock.setReceivedStock(6); productStock.setNsCoefficient(0.5); productStock.setManualOverride(7); assertThat( productStock.calc() , is(7)); } 得られた在庫数は 実店舗とネットスーパー上 での共用となるので、 全体の在庫の50%を ネットスーパー用に 確保するために、 setNsCoefficientで 設定するので、 16×0.5=8個となって… 開発者
  24. 会話からテストの意図を理解する @Test public void 手動設定ありのパターン{ ProductStock productStock = new ProductStock(“商品A”);

    productStock.setBaseStock(10); productStock.setReceivedStock(6); productStock.setNsCoefficient(0.5); productStock.setManualOverride(7); assertThat( productStock.calc() , is(7)); } 最後に手動で設定する値 “setManualOverride”が あれば、何があっても ネットスーパーの 在庫数として 上書きされるので、 今回の在庫は7個に なります。 開発者
  25. 会話からテストの意図を理解する @Test public void 手動設定ありのパターン{ ProductStock productStock = new ProductStock(“商品A”);

    productStock.setBaseStock(10); productStock.setReceivedStock(6); productStock.setNsCoefficient(0.5); productStock.setManualOverride(7); assertThat( productStock.calc() , is(7)); } なるほどー! ありがとうございます。 QA
  26. 会話からテストの意図を理解する @Test public void 手動設定ありのパターン{ ProductStock productStock = new ProductStock(“商品A”);

    productStock.setBaseStock(10); productStock.setReceivedStock(6); productStock.setNsCoefficient(0.5); productStock.setManualOverride(7); assertThat( productStock.calc() , is(7)); } QA 説明を聞いていると、 「setManualOverrideが あれば、 何があっても ネットスーパーの 在庫数として 上書きされるので」 という部分が 今回のテストの意図の ように聞こえました ああ、確かにそうかも 開発者
  27. テストの意図を記載して説明容易性を上げる @Test public void 手動設定ありのパターン{ ProductStock productStock = new ProductStock(“商品A”);

    productStock.setBaseStock(10); productStock.setReceivedStock(6); productStock.setNsCoefficient(0.5); productStock.setManualOverride(7); assertThat( productStock.calc() , is(7)); } なので、それを そのまま テストメソッド名に しちゃいましょう! QA
  28. テストの意図を記載して説明容易性を上げる @Test public void 手動設定の値があれば必ず 最終的な在庫数として上書き設定する { ProductStock productStock =

    new ProductStock(“商品A”); productStock.setBaseStock(10); productStock.setReceivedStock(6); productStock.setNsCoefficient(0.5); productStock.setManualOverride(7); assertThat( productStock.calc() , is(7)); } なので、それを そのまま テストメソッド名に しちゃいましょう! QA
  29. 利点1.特別な設定値がどれなのか分かる @Test public void 手動設定ありのパターン{ ProductStock productStock = new ProductStock(“商品A”);

    productStock.setBaseStock(10); productStock.setReceivedStock(6); productStock.setNsCoefficient(0.5); productStock.setManualOverride(7); assertThat( productStock.calc() , is(7)); } テストの意図が 書かれていないと、 テストメソッド内 にある、 “10”, “6”, “0.5”, “7” がそれぞれ 特別な意味を 持っている ように見えてしまう
  30. 利点1.特別な設定値がどれなのか分かる テストの意図が 書かれていると、 重要な箇所が分かる その他の値は、 テストするために 設定した 任意の値だと分かる @Test public

    void 手動設定の値があれば必ず 最終的な在庫数として 上書き設定 する{ ProductStock productStock = new ProductStock(“商品A”); productStock.setBaseStock(10); productStock.setReceivedStock(6); productStock.setNsCoefficient(0.5); productStock.setManualOverride(7); assertThat( productStock.calc() , is(7)); }
  31. 利点2.仕様変更時に対応しやすい 例① 例えば、 「手動設定 setManualOverride は考えなくても 良いことになった」 という仕様変更が 出てきたとき… @Test public

    void 手動設定ありのパターン{ ProductStock productStock = new ProductStock(“商品A”); productStock.setBaseStock(10); productStock.setReceivedStock(6); productStock.setNsCoefficient(0.5); productStock.setManualOverride(7); assertThat( productStock.calc() , is(7)); }
  32. 利点2.仕様変更時に対応しやすい 例① プロダクトコードで setManualOverride() の処理を 削除したとする 連動して、 このテストコードは 通らなくなる @Test public

    void 手動設定ありのパターン{ ProductStock productStock = new ProductStock(“商品A”); productStock.setBaseStock(10); productStock.setReceivedStock(6); productStock.setNsCoefficient(0.5); productStock.setManualOverride(7); assertThat( productStock.calc() , is(7)); }
  33. 利点2.仕様変更時に対応しやすい 例① テストの意図が 書かれていないと、 このテストが どんなことを したかったのか 改めて読み込む 必要がある @Test public

    void 手動設定ありのパターン{ ProductStock productStock = new ProductStock(“商品A”); productStock.setBaseStock(10); productStock.setReceivedStock(6); productStock.setNsCoefficient(0.5); productStock.setManualOverride(7); assertThat( productStock.calc() , is(7)); }
  34. 利点2.仕様変更時に対応しやすい 例① テストの意図が 書かれていることで、 今回はテストケース そのものを削除する 対応で良いと 即時に判断できる @Test public void

    手動設定の値があれば必ず 最終的な在庫数として上書き設定する { ProductStock productStock = new ProductStock(“商品A”); productStock.setBaseStock(10); productStock.setReceivedStock(6); productStock.setNsCoefficient(0.5); productStock.setManualOverride(7); assertThat( productStock.calc() , is(7)); }
  35. 利点2.仕様変更時に対応しやすい 例② @Test public void _東北地方の場合送料が1000円{ assertThat(calcShipingCost(“青森県”), is(1000)); } @Test public

    void _中国地方の場合送料が510円{ assertThat(calcShipingCost(“広島県”), is(510)); } ハイレベルテストケース ローレベルテストケース
  36. 利点2.仕様変更時に対応しやすい 例② @Test public void _東北地方の場合送料が1000円{ assertThat(calcShipingCost(“青森県”), is(1000)); } @Test public

    void _中国地方の場合送料が510円{ assertThat(calcShipingCost(“広島県”), is(510)); } ハイレベルテストケース ローレベルテストケース 将来万が一、青森県が統廃合などで 存在しなくなった場合、 東北地方の別の県を選べば良いことが分かる
  37. ラムズフェルド行列 2002年にラムズフェルド国防長官(当時)が会見時に発した言葉が発端 Known knowns (知っていることを分かっている) どのような内容なのか分かっており、 その自覚もある状態。 Known unknowns (知らないことを分かっている)

    どのような内容なのか分かっていないが、 「自分が分かっていない」という状況である ということは把握している状態。 Unknown knowns (知っていることを分かっていない) どのような内容なのか分かっているが、 その状況は把握していない状態。 無意識的な行動など。 Unknown unknowns (知らないことを分かっていない) どのような内容なのか分かっておらず、 「現在分かっていない」という状況も 把握していない状態。
  38. テストコードはKnown knownsを書いている 2002年にラムズフェルド国防長官(当時)が会見時に発した言葉が発端 Known knowns (知っていることを分かっている) どのような内容なのか分かっており、 その自覚もある状態。 Known unknowns

    (知らないことを分かっている) どのような内容なのか分かっていないが、 「自分が分かっていない」という状況である ということは把握している状態。 Unknown knowns (知っていることを分かっていない) どのような内容なのか分かっているが、 その状況は把握していない状態。 無意識的な行動など。 Unknown unknowns (知らないことを分かっていない) どのような内容なのか分かっておらず、 「現在分かっていない」という状況も 把握していない状態。
  39. AIが得意なのもKnown knownsの領域 2002年にラムズフェルド国防長官(当時)が会見時に発した言葉が発端 Known knowns (知っていることを分かっている) どのような内容なのか分かっており、 その自覚もある状態。 Known unknowns

    (知らないことを分かっている) どのような内容なのか分かっていないが、 「自分が分かっていない」という状況である ということは把握している状態。 Unknown knowns (知っていることを分かっていない) どのような内容なのか分かっているが、 その状況は把握していない状態。 無意識的な行動など。 Unknown unknowns (知らないことを分かっていない) どのような内容なのか分かっておらず、 「現在分かっていない」という状況も 把握していない状態。
  40. テストの意図はUnknownを表面化させる Known knowns (知っていることを分かっている) どのような内容なのか分かっており、 その自覚もある状態。 Known unknowns (知らないことを分かっている) どのような内容なのか分かっていないが、

    「自分が分かっていない」という状況である ということは把握している状態。 Unknown knowns (知っていることを分かっていない) どのような内容なのか分かっているが、 その状況は把握していない状態。 無意識的な行動など。 Unknown unknowns (知らないことを分かっていない) どのような内容なのか分かっておらず、 「現在分かっていない」という状況も 把握していない状態。 2002年にラムズフェルド国防長官(当時)が会見時に発した言葉が発端
  41. テストの意図はUnknownを表面化させる Known knowns (知っていることを分かっている) どのような内容なのか分かっており、 その自覚もある状態。 Known unknowns (知らないことを分かっている) どのような内容なのか分かっていないが、

    「自分が分かっていない」という状況である ということは把握している状態。 Unknown knowns (知っていることを分かっていない) どのような内容なのか分かっているが、 その状況は把握していない状態。 無意識的な行動など。 Unknown unknowns (知らないことを分かっていない) どのような内容なのか分かっておらず、 「現在分かっていない」という状況も 把握していない状態。 2002年にラムズフェルド国防長官(当時)が会見時に発した言葉が発端
  42. テストプロセス(JSTQBより) テスト 分析 テスト 設計 テスト 実装 テスト 実行 ISTQBテスト技術者資格制度

    Foundation Level シラバス 日本語版 Version 2023V4.0.J02 を参考に作成 何をテスト するか を決定する テストスクリプト やテスト手順を 作成する テストスイート を実行する どのように テストするか を決定する
  43. テストプロセス テスト 分析 テスト 設計 テスト 実装 テスト 実行 何をテスト

    するか を決定する テストスクリプト やテスト手順を 作成する テストスイート を実行する どのように テストするか を決定する ここを 注力しがち ISTQBテスト技術者資格制度 Foundation Level シラバス 日本語版 Version 2023V4.0.J02 を参考に作成
  44. テストプロセス テスト 分析 テスト 設計 テスト 実装 テスト 実行 何をテスト

    するか を決定する テストスクリプト やテスト手順を 作成する テストスイート を実行する どのように テストするか を決定する ここからテストの 意図を込めましょう ISTQBテスト技術者資格制度 Foundation Level シラバス 日本語版 Version 2023V4.0.J02 を参考に作成
  45. 受け入れ基準作成時に関わることの効果 • 実装担当者が設計・実装を行う時に、 「リファインメントでこんな会話をしたな…」と 思いながら実装する ◦ その部分でのバグの作り込みを防ぐことができる • バグが発生しなければ色々な工数が削減できる ◦

    実装内容を思い出すコスト ◦ 修正をするコスト ◦ もう一度テストするコスト ◦ 影響範囲のある箇所をテストするコスト ◦ バグチケットの操作をするコスト    など
  46. システムを飛び出して要求を考える どうして強制 退会機能を作 ろうと? 受入基準 新たに管理者 による強制退 会機能を作って 欲しい ユーザー本人

    の退会機能の ロジックを流用 する PO 開発コスト は低くでき そう! 開発者 QA 迷惑をかけるユー ザーはサービス利 用できないように 強制退会ユー ザーは会員再 登録できないよ うに! QA PO PO
  47. WACATE 2025 夏 • ソフトウェアテストをテーマにした グループワーク形式の合宿型勉強会 • 今回のテーマはテストプロセス • 日時:6/28(土)10:00

    ~ 6/29(日)17:30 • 参加費:30,000円 ◦ 宿泊費、4食の食事代含む ◦ 35歳以下は27,000円 • 場所:トーセイホテル&セミナー幕張 ◦ JR京葉線 新習志野駅 徒歩約2分 • 申し込みは公式ページから
  48. Nihonbashi Test Talk #4 • 日本橋・馬喰町周辺でテストや品質周りの話をする会 • 日時:5/22(木)19:00〜21:30 • 場所:Autify,

    Inc. イベントスペース ◦ 都営浅草線 「東日本橋」駅 徒歩8分 ◦ JR総武本線 「馬喰町」駅 徒歩9分 • 料金:無料 • 申し込みはconnpassページから
  49. 参考:BRIEFの原則 • Business language(ビジネス言語) • Real data(実際のデータ) • Intention revealing

     (意図を明らかにする) • Essential(必須) • Focused(焦点を絞る) • Brief(簡潔である) 出典:The BDD Books - Formulation