アジャイルとテスト / Agile and Testing

Add1036688abcb2e3dbff7c3090f7e35?s=47 imtnd
December 15, 2019

アジャイルとテスト / Agile and Testing

Add1036688abcb2e3dbff7c3090f7e35?s=128

imtnd

December 15, 2019
Tweet

Transcript

  1. ΞδϟΠϧͱςετ 8"$"5&8JOUFS

  2. ࣗݾ঺հ • ֯ా ढ़ • ιϑτ΢ΣΞ։ൃऀ • ίϛϡχςΟ׆ಈ • 8"$"5&࣮ߦҕһ

    • /B*5& ௕࡚*5ٕज़ऀձ ӡӦҕһ
  3. ͜ͷηογϣϯʹ͍ͭͯ •ΞδϟΠϧͷ֓೦ͷઆ໌ •ΞδϟΠϧ։ൃͷதͰςετʹؔΘΔࣄͷҰ෦Λ ঺հ • ςετ΁ͷߟ͑ํ • ςετͷ΍Γํ

  4. ໨࣍ •ΞδϟΠϧʹ͍ͭͯ •ΞδϟΠϧͷςετʹ͍ͭͯ •ϫʔΫ

  5. ΞδϟΠϧͱςετ

  6. ੈͷதͷྲྀΕ •ੈͷதͷมԽ͕ૣ͍ • ιϑτ΢ΣΞٕज़ͷมԽ • ιϑτ΢ΣΞ΁ͷχʔζ •χʔζΛͦ΋ͦ΋׬ᘳʹ֬ఆ͢Δͷ͕೉͍͠ • ιϑτ΢ΣΞͷࣾձ΁ͷ޿͕Γ •

    ιϑτ΢ΣΞར༻ऀͷ֦େ
  7. 仕様変更や、要求の変更があまりない外部要因に左右されず、 新しい技術も使⽤していないような不確実性があまりないシステム 外部要因に⼤きく影響を受け、 新しい技術やなどを使⽤する不確実性が⾼いシステム ↑ アジャイル向きなシステム

  8. https://agilemanifesto.org/iso/ja/manifesto.html

  9. None
  10. → まだソフトウェアを完璧に開発できる⽅法論は⾒つかっていない

  11. → ⽅法論は⾒つかっていないけれど、⽅向性は⾒えてきた

  12. None
  13. → 対話してどうしていくのがベストかを話し合おう

  14. → 完璧なドキュメントを作るよりも動くものを早く作ろう

  15. → 関係者みんなで協⼒して良いものを作ろう

  16. → 想定外の変化はあるし、変化へ対応できるようにしていこう

  17. → 左側も価値があること。だけど、右側をより重視する。

  18. ソフトウェア開発をより良くするため考え⽅の提案

  19. None
  20. 顧客満⾜を最優先し、 価値のあるソフトウェアを早く継続的に提供します。 → ソフトウェアを使う⼈を優先に考える。 価値を⽣むソフトウェアを早く提供するようにする。 また、ソフトウェアを継続的に改善していく。

  21. 要求の変更はたとえ開発の後期であっても歓迎します。 変化を味⽅につけることによって、 お客様の競争⼒を引き上げます。 → 競争⼒を上げるような仕様変更は歓迎する。 ソフトウェアの価値を第⼀に考える。

  22. 動くソフトウェアを、2-3週間から2-3ヶ⽉という できるだけ短い時間間隔でリリースします。 → 半年、1年という⻑期開発ではなく、 短いサイクルでソフトウェアを提供する。

  23. ビジネス側の⼈と開発者は、プロジェクトを通して ⽇々⼀緒に働かなければなりません。 → ビジネスを達成するためにみんなで協⼒して ソフトウェアを開発していく。

  24. 意欲に満ちた⼈々を集めてプロジェクトを構成します。 環境と⽀援を与え仕事が無事終わるまで彼らを信頼します。 → 意欲のある⼈達を集めてチームを構成する。 開発者を信頼する。

  25. 情報を伝えるもっとも効率的で効果的な⽅法は フェイス・トゥ・フェイスで話をすることです。 → 対⾯でのコミュニケーションを⼤切にする。

  26. 動くソフトウェアこそが進捗の最も重要な尺度です。 → 動作するソフトウェアを確認することで 開発の進捗を判断する

  27. アジャイル・プロセスは持続可能な開発を促進します。 ⼀定のペースを 継続的に維持できるようにしなければなりません。 → ⼀定のペースで開発していく。 詰め込んだり、だらだらした開発はしない。

  28. 技術的卓越性と優れた設計に対する 不断の注意が機敏さを⾼めます。 → 技術的に優れた設計をしていくことで、 変更強いソフトウェアを開発する。

  29. シンプルさ(ムダなく作れる量を最⼤限にすること) が本質です。 → ムダを排除し、価値あるソフトウェアを より多く作れるようにする。

  30. 最良のアーキテクチャ・要求・設計は、 ⾃⼰組織的なチームから⽣み出されます。 → チームは⾃⼰組織的なチームを⽬指す (⾃⼰組織的=⾃律的でリーダーに依存しない)

  31. チームがもっと効率を⾼めることができるかを 定期的に振り返り、 それに基づいて⾃分たちのやり⽅を最適に調整します。 → 振り返りにより、効率を更に上げて最適を⽬指す。

  32. 要求分析 設計 テスト 実装 ウォータフォールモデル アジャイル的開発モデル リリース リリース リリース リリース

    半年、1年以上でリリース ⼯程はほぼ同時で⾛り 短期間でリリース 要求分析 設計 実装 テスト
  33. https://www.industriallogic.com/blog/evolutionary-design/

  34. アジャイル宣⾔ アジャイル プロセスモデル アジャイル プラクティス 原則 (ルール) 技術 価値 ・・・

    より良いソフトウェアの開発⽅法論を⽬指しているのがアジャイル宣⾔ アジャイル宣⾔がより良くしようとしている分野は多岐に渡る
  35. アジャイル プロセスモデル アジャイル プラクティス 原則 (ルール) 技術 価値 ・・・ アジャイル

    プロセスモデルよらず、適応可能なものもある
  36. ΞδϟΠϧํ๏࿦ •91 F9UFBN 1SPHSBNJOH •εΫϥϜ •'%% ػೳۦಈܗ։ൃʣ •ΫϦελϧ •Ϧʔϯιϑτ΢ΣΞ •Χϯόϯ

    •ϞμϯΞδϟΠϧ
  37. 91 F9SFBN 1SPHSBNJOH •ϓϩάϥϛϯάٕ๏ɺ໌֬ͳίϛϡχέʔγϣϯɺ νʔϜϫʔΫͳͲΛ޼Έʹར༻ͯ͠ɺΑΓྑ͘ι ϑτ΢ΣΞΛ։ൃ͢Δ։ൃελΠϧ •ᐆດͰٸ଎ʹมԽ͢Δཁ݅ʹ޲͖߹͏தখن໛ͷ ιϑτ΢ΣΞ։ൃνʔϜͷͨΊͷܰྔڃͷํ๏࿦

  38. Ձ஋ •ίϛϡχέʔγϣϯ •γϯϓϦγςΟ •ϑΟʔυόοΫ •༐ؾ •ϦεϖΫτ

  39. ݪଇ •ਓؒੑ •ܦࡁੑ •૬ޓརӹ •ࣗݾ૬ࣅੑ •վળ •ଟ༷ੑ •;Γ͔͑Γ •ྲྀΕ •ػձ

    •৑௕ੑ •ࣦഊ •඼࣭ •ϕΠϏʔεςοϓ •੹೚ͷҾ͖ड͚
  40. ओཁͳϓϥΫςΟε •શһಉ੮ •νʔϜશମ •৘ใຬࡌͷ ϫʔΫεϖʔε •͍͖͍͖ͱͨ͠࢓ࣄ •ϖΞϓϩάϥϛϯά •ετʔϦʔ • ि࣍αΠΫϧ

    • ࢛൒ظαΠΫϧ • ΏͱΓ • ̍̌෼Ϗϧυ • ܧଓత ΠϯςάϨʔγϣϯ • ςετϑΝʔετ ϓϩάϥϛϯά • ΠϯΫϦϝϯλϧͳઃܭ
  41. εΫϥϜͱ͸ •ෳࡶͰมԽͷܹ͍͠໰୊ʹରԠ͢ΔͨΊͷϓϩ δΣΫτͷਐΊํͷϑϨʔϜϫʔΫ •ՄೳͳݶΓՁ ஋ͷߴ͍ϓϩμΫτΛੜ࢈త͔ͭ ૑଄తʹಧ͚Δ͜ͱΛ໨తͱ͍ͯ͠Δ

  42. εΫϥϜͷཧ࿦ •ಁաੑ •ݕࠪ •దԠ

  43. ಁաੑ •ࢀՃऀશһ͕ڞ௨ೝࣝΛ࣋ͭ͜ͱ ྫɿ wϓϩηεͷ༻ޠΛࢀՃऀશһͰڞ༗͍ͯ͠Δɻ w࡞ۀͷʮ׬੒ʯͷఆٛΛڞ༗͍ͯ͠Δɻ

  44. ݕࠪ •࡞੒෺΍εϓϦϯτΰʔϧͷਐḿΛසൟʹݕࠪ͠ɺ ޷·͘͠ͳ͍มԽΛݕ஌͢Δ •ݕࠪΛසൟʹߦ͍࡞ۀΛ๦͛ͳ͍Α͏ʹ͢Δ

  45. దԠ •ϓϩμΫτΛड͚ೖΕΒΕͳ͍ͱݕࠪ୲౰ऀ͕൑அ ͨ͠৔߹͸ɺϓϩηε΍ͦͷߏ੒ཁૉΛௐ੔͢Δ •ௐ੔͸Ͱ͖Δ͚ͩૣ͘ߦ͏

  46. εΫϥϜνʔϜ •ϓϩμΫτΦʔφʔ •։ൃνʔϜ •εΫϥϜϚελʔ

  47. εΫϥϜΠϕϯτ •εϓϦϯτϓϥϯχϯά •σΠϦʔεΫϥϜ •εϓϦϯτϨϏϡʔ •εϓϦϯτϨτϩεϖΫςΟϒ

  48. プロダクトバックログ スプリントバックログ スプリントプランニング 開発 スプリントレビュー デイリースクラム スプリントレトロスペクティブ

  49. ΞδϟΠϧͱςετ

  50. ΞδϟΠϧ։ൃͰͷςετҐஔ෇͚ •ΞδϟΠϧͰͷςετʹ͸ϑΟʔυόοΫΛಘΔ ͱ͍͏໨త͕͋Δ • ࣗ෼ୡ͕࡞͍ͬͯΔ΋ͷͷํ޲ੑ͸͍͋ͬͯΔ͔ • ࡞ͬͨ΋ͷ͸ҙਤ௨Γಈ࡞͢Δ͔ • ૝ఆ֎ͷ͜ͱ͸ى͖ͳ͍͔ •ಈ͘ιϑτ΢ΣΞͱ࣮ͯ͠ࡍʹݟͯϑΟʔυόο

    Ϋ͕ಘΒΕΔ
  51. ঺հ͢Δ͜ͱ •සൟͳίϛϡχέʔγϣϯ •ख໭ΓΛݮΒͨ͢Ίͷෳ਺ਓಉ࣌࡞ۀ •ςετϑΝʔετΞϓϩʔν •ࣗಈͱखಈͰͷςετͷ۠෼͚ •ܧଓతΠϯςάϨʔγϣϯ •ΠςϨʔγϣϯͱςετܭը

  52. ঺հ͢Δ͜ͱ •සൟͳίϛϡχέʔγϣϯ •ख໭ΓΛݮΒͨ͢Ίͷෳ਺ਓಉ࣌࡞ۀ •ςετϑΝʔετΞϓϩʔν •ࣗಈͱखಈͰͷςετͷ۠෼͚ •ܧଓతΠϯςάϨʔγϣϯ •ΠςϨʔγϣϯͱςετܭը

  53. සൟͳίϛϡχέʔγϣϯ •ੵۃతͳൃݴ • ΠςϨʔγϣϯΛ௨ͯ͠ͷεςʔΫϗϧμʔ΍νʔ Ϝϝϯόͱੵۃతʹର࿩ • ࢓༷ʹର͢Δ඼࣭؍఺Ͱͷҙݟ • ෆे෼ͳςετϕʔεʹରԠ͢ΔͨΊͷೝࣝ߹Θͤ •

    վળͷఏҊ • ٙ໰఺΍ݒ೦఺͸ૣΊʹฉ͘ • ΠςϨʔγϣϯظؒʹґΔ͕୹࣌ؒͰ΋ϩε͕େ͖͍
  54. ঺հ͢Δ͜ͱ •සൟͳίϛϡχέʔγϣϯ •ख໭ΓΛݮΒͨ͢Ίͷෳ਺ਓಉ࣌࡞ۀ •ςετϑΝʔετΞϓϩʔν •ࣗಈͱखಈͰͷςετͷ۠෼͚ •ܧଓతΠϯςάϨʔγϣϯ •ΠςϨʔγϣϯͱςετܭը

  55. ϖΞϓϩάϥϛϯά https://ja.wikipedia.org/wiki/ペアプログラミング Driver Navigator

  56. Ϟϒϓϩάϥϛϯά https://ja.wikipedia.org/wiki/Mob_programming Navigator Driver

  57. ख໭ΓΛݮΒͨ͢Ίͷෳ਺ਓಉ࣌࡞ۀ 作業 レビュー 作業 レビュー 時間 フィードバックが遅れると ⼿戻りが多くなりムダな作業が 多くなる

  58. ෳ਺ਓಉ࣌࡞ۀͰͷςετ • /BWJHBUPSͰ։ൃऀ΁ͷಉ࣌ฒߦϨϏϡʔ • ςετ؍఺ • ඼࣭؍఺ • ͦͷଞɺΑΓྑ͍ΞΠσΞ •

    ෳ਺ਓಉ࣌Ͱͷςετ࡞ۀ • ςετܭը • ςετઃܭɺςετ෼ੳ • ϋΠϨϕϧςετέʔεΛϕʔεͱͨ͠ςετ࣮ߦ • ୳ࡧతςετ
  59. ঺հ͢Δ͜ͱ •සൟͳίϛϡχέʔγϣϯ •ख໭ΓΛݮΒͨ͢Ίͷෳ਺ਓಉ࣌࡞ۀ •ςετϑΝʔετΞϓϩʔν •ࣗಈͱखಈͰͷςετͷ۠෼͚ •ܧଓతΠϯςάϨʔγϣϯ •ΠςϨʔγϣϯͱςετܭը

  60. ςετϑΝʔετΞϓϩʔν •ϓϩάϥϜΛ։ൃ͢ΔલʹςετઃܭΛߦ͏ • 5%%ʢςετۦಈ։ൃʣ • #%%ʢৼΔ෣͍ۦಈ։ൃʣ • ड͚ೖΕςετۦಈ։ൃ • ϢʔβετʔϦʔ

    •࡞ۀͷୡ੒͢Δ΂͖໨ඪͷ໌֬Խ • είʔϓ • ࡞ۀΰʔϧ
  61. ड͚ೖΕج४ͷ໌֬Խ •୹͍ΠςϨʔγϣϯͰͷΰʔϧΛ໌֬Խ͢Δ • ࣮૷͢΂͖ػೳͷ֬ೝ • ݱΠςϨʔγϣϯͰ͸࣮૷͠ͳ͍ػೳͷ֬ೝ • ୡ੒͢Δ΂͖ඇػೳཁ݅ •͜ΕΒ͸͢΂ͯςετέʔεͱඥ෇͘͜ͱʹͳΔ

  62. ඇςετϑΝʔετΞϓϩʔνͱ ςετϑΝʔετΞϓϩʔν 開発 テスト設計 テスト実⾏ テスト設計 開発 テスト実⾏ テストが通るように開発を⾏う 時間

    テスト設計で開発していた内容の 間違いに気が付くことがある
  63. ୹͍αΠΫϧͰͷ ςετϑΝʔετΞϓϩʔν テスト設計 開発 テスト実⾏ 時間 テスト実⾏で失敗すると原因の特定を⾏わなれないけない 対象となる範囲が広いと時間がかかる

  64. https://en.wikipedia.org/wiki/Extreme_programming

  65. http://www.agilemodeling.com/essays/costOfChange.htm

  66. ঺հ͢Δ͜ͱ •සൟͳίϛϡχέʔγϣϯ •ख໭ΓΛݮΒͨ͢Ίͷෳ਺ਓಉ࣌࡞ۀ •ςετϑΝʔετΞϓϩʔν •ࣗಈͱखಈͰͷςετͷ۠෼͚ •ܧଓతΠϯςάϨʔγϣϯ •ΠςϨʔγϣϯͱςετܭը

  67. ࣗಈςετ •ΞδϟΠϧͰ܁Γฦ͠ૣ͘ϦϦʔε͢Δʹ͸ࣗಈ ςετ͕ඞཁʹͳΔ •ςετΛੵΈॏͶΔͱ͍͏ߟ͑ํ • ςετ΋੡඼ͷίʔυͱಉ͡Α͏ʹੵΈॏͶ͍ͯ͘ • ඼࣭ͷѱ͍ςετΛੵΈॏͶͳ͍

  68. ࣗಈςετͷׂ߹ TestPyramid https://martinfowler.com/bliki/TestPyramid.html

  69. https://lisacrispin.com/2011/11/08/using-the-agile-testing-quadrants/

  70. ୳ࡧతςετ テスト設計 テスト実⾏ 学習 フィードバック

  71. ୳ࡧతςετ •஌ࣝΛ࣋ͬͨςελʔ͕ߦ͏ख๏ • ςετͷٕज़஌ࣝ • ϓϩμΫτͷ஌ࣝ •ςετνϟʔλΛ༻ҙͯ͠ςετઃܭɺςετ࣮ ߦΛಉ࣌ʹߦ͏ •ηογϣϯϕʔεͳ୳ࡧతςετͰ͸͖ͬͪΓ࣌ ؒΛܾΊΔ

    •ΞυϗοΫςετʹͳΒ͍ͳ͍Α͏ʹ஫ҙ͢Δ
  72. ঺հ͢Δ͜ͱ •සൟͳίϛϡχέʔγϣϯ •ख໭ΓΛݮΒͨ͢Ίͷෳ਺ਓಉ࣌࡞ۀ •ςετϑΝʔετΞϓϩʔν •ࣗಈͱखಈͰͷςετͷ۠෼͚ •ܧଓతΠϯςάϨʔγϣϯ •ΠςϨʔγϣϯͱςετܭը

  73. ܧଓతΠϯςάϨʔγϣϯ ・静的解析 ・コンパイル ・テスト実⾏ ・デプロイ ・レポートの表⽰ コードリポジトリ ソースコードの コミット 結果の通知

  74. ܧଓతΠϯςάϨʔγϣϯͰͷ ϑΟʔυόοΫ •ܧଓతΠϯςάϨʔγϣϯͰ͸ɺఆظతʹ੩తղ ੳɺϏϧυɺࣗಈςετͳͲ͕࣮ߦ͞ΕΔ •඼࣭͕ѱ͘ͳͬͨ͜ͱΛ։ൃऀʹૉૣ͘ϑΟʔυ όοΫ͢Δ͜ͱ͕େ੾ • ੩తղੳͷߴϨϕϧΞϥʔτͷ૿Ճ • ࣗಈςετͷࣦഊ

    •ܯࠂΛड৴ͯ͠ɺܯࠂΛ์ஔ͠ͳ͍͜ͱ͕େ੾
  75. ׂΕ૭ཧ࿦ 「建物の窓が壊れているのを放置すると、誰も注意を払っていないという象徴になり、 やがて他の窓もまもなく全て壊される」という考え⽅ https://ja.wikipedia.org/wiki/割れ窓理論 継続的インテグレーションの静的解析やテスト実⾏失敗のアラートを無視し続けると その状況は蔓延していく

  76. ঺հ͢Δ͜ͱ •සൟͳίϛϡχέʔγϣϯ •ख໭ΓΛݮΒͨ͢Ίͷෳ਺ਓಉ࣌࡞ۀ •ςετϑΝʔετΞϓϩʔν •ࣗಈͱखಈͰͷςετͷ۠෼͚ •ܧଓతΠϯςάϨʔγϣϯ •ΠςϨʔγϣϯͱςετܭը

  77. スプリント ΠςϨʔγϣϯͱςετܭը スプリントゼロ スプリント スプリント (リリーススプリント)

  78. εϓϦϯτθϩ •࡞੒͢ΔγεςϜΛཧղ͢Δ •ϓϩμΫτͷϦϦʔεܭըΛ֬ೝͯ͠શମͷςε τܭըΛߟ͑Δ •ϢʔβετʔϦʔͷଥ౰ੑΛ֬ೝ͢Δ •࢖༻͢Δπʔϧ΍؀ڥΛ४උ͢Δ •ϦεΫ෼ੳΛߦ͏

  79. εϓϦϯτ಺ •εϓϦϯτ಺Ͱ࡞੒͠Α͏ͱ͍ͯ͠Δ΋ͷͷ ςελϏϦςΟΛߟ͑Δ •εϓϦϯτ಺ͰͷςετܭըΛߦ͏ •εϓϦϯτ಺ͰͷϦεΫ෼ੳΛ࣮ࢪ͢Δ •ςετ؍఺ɺ඼࣭؍఺Ͱͷҙݟग़͠Λߦ͏

  80. εϓϦϯτΛ௨ͯ͠ͷςετ •શମΛ௨ͯ͠ͷςετܭըΛৗʹݟ௚͢ •:"(/*Ͱ࣮ݱ͞Ε͍ͯͳ͍΋ͷΛ͍࣮ͭݱ͢Δ ͔ߟ͑Δ ˞:"(/*:PVBJObU HPOOB OFFEJU ඇػೳཁ݅ͳͲ͸ޙճ͠ʹͳΓ͕͕ͪͩɺͲͷ͘ Β͍ͷ࣌ظͷεϓϦϯτͰղܾ͢΂͖ͳͷ͔Λ໌ ֬ʹ͢Δ

    •ϦϦʔεલ·Ͱʹ΍Δ΂͖͜ͱΛݕ౼͢Δ ผ్ɺϦϦʔεεϓϦϯτΛઃ͚Δ͔ݕ౼͢Δ
  81. ϫʔΫ

  82. લఏ •ΞδϟΠϧʹ͸ܾ·ͬͨϓϩηε͸͋Γ·ͤΜɻ •ࣗ෼ͨͪͰࣗ෼ୡʹ͋ͬͨϓϩηεΛݟ͚ͭͯߦ ͘͜ͱ͕େ੾

  83. ৼΓฦΓϫʔΫ •ΞδϟΠϧએݴͱɺͷݪଇΛݩʹࣗ෼ͷۀ຿ ͷ΍ΓํΛݟ௚ͯ͠ΈΑ͏ •ͲΜͳখ͞ͳࣄͰ΋͍͍ͷͰɺվળ఺Λݟ͚ͭΑ ͏ • ݸਓϫʔΫ ෼ • άϧʔϓڞ༗

    ෼
  84. /&95

  85. %FW0QT https://ja.wikipedia.org/wiki/DevOps

  86. ϚΠΫϩαʔϏεΞʔΩςΫνϟ https://microservices.io/

  87. ࢀߟจݙ • 'PVOEBUJPO-FWFM&YUFOTJPOγϥόε ΞδϟΠϧς ετ୲౰ऀ IUUQKTURCKQEM+452#4ZMMBCVT'PVOEBUJPO "HJMF&YU@7FSTJPO+QEG • ΞδϟΠϧιϑτ΢ΣΞ։ൃએݴ IUUQTBHJMFNBOJGFTUPPSHJTPKBNBOJGFTUPIUNM

    • ΤΫετϦʔϜϓϩάϥϛϯά ΦʔϜࣾ • εΫϥϜΨΠυ IUUQTXXXTDSVNHVJEFTPSHEPDTTDSVNHVJEF W4DSVN(VJEF+BQBOFTFQEG