Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

ああ、素晴らしきTDD ~アプリとエンジニアの心に安寧を~

7,429 views

Published on

Droidkaigi2019にて登壇した資料です

Published in: Engineering
  • Hi there! I just wanted to share a list of sites that helped me a lot during my studies: .................................................................................................................................... www.EssayWrite.best - Write an essay .................................................................................................................................... www.LitReview.xyz - Summary of books .................................................................................................................................... www.Coursework.best - Online coursework .................................................................................................................................... www.Dissertations.me - proquest dissertations .................................................................................................................................... www.ReMovie.club - Movies reviews .................................................................................................................................... www.WebSlides.vip - Best powerpoint presentations .................................................................................................................................... www.WritePaper.info - Write a research paper .................................................................................................................................... www.EddyHelp.com - Homework help online .................................................................................................................................... www.MyResumeHelp.net - Professional resume writing service .................................................................................................................................. www.HelpWriting.net - Help with writing any papers ......................................................................................................................................... Save so as not to lose
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

ああ、素晴らしきTDD ~アプリとエンジニアの心に安寧を~

  1. 1. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. ああ、素晴らしきTDD ~アプリとエンジニアの心に安寧を~
  2. 2. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved.Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. 目次 ● 自己紹介 ● TDD ○ TDDとは ○ 実演 ○ なぜTDD? ● Android TDD Q&A ● まとめ
  3. 3. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. 自己紹介 飯島彩輝 twitter:@saekisaekisaek blog:エンジニアの便利手帳/3jigen.net ヤフー株式会社 ヤフオク!Androidエンジニア
  4. 4. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved.
  5. 5. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. リーンソフトウェア開発 × XP (エクストリームプログラミング) LEAN XP
  6. 6. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. 質問
  7. 7. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. やりたい -> やろう 興味はある -> やりたい やってる -> 復習
  8. 8. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved.Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. TDDとは
  9. 9. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. テスト駆動開発 1 TDDとは
  10. 10. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. ユニットテスト駆動開発 1 TDDとは
  11. 11. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. テスト駆動開発 1 TDDとは
  12. 12. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. fun getHello():String{ return "Hello" }
  13. 13. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. @Test fun getHello_Helloを返す() { val result = getHello() assertEquals("Hello", result) }
  14. 14. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved.
  15. 15. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved.
  16. 16. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved.
  17. 17. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. テスト=動作の保証 1 TDDとは
  18. 18. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. TDD 1 TDDとは
  19. 19. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. TDD || テストを先に書く 1 TDDとは
  20. 20. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. 三つのルールを守って 三つのフェーズを繰り返す 1 TDDとは
  21. 21. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. 三つのルールを守って 三つのフェーズを繰り返す 1 TDDとは
  22. 22. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. 1 三つのフェーズ
  23. 23. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. 失敗するテストを書く Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. 1 三つのフェーズ
  24. 24. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. テストを通すコードを書く Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. 1 三つのフェーズ
  25. 25. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. リファクタリングする Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. 1 三つのフェーズ
  26. 26. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. 1 三つのフェーズ
  27. 27. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. 三つのルールを守って 三つのフェーズを繰り返す 1 TDDとは
  28. 28. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. 失敗したテストを通すためにしか プロダクトコードを書いてはいけない。 1 三つのルール
  29. 29. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. 一つ以上の失敗があるとき、 テストコードを書いてはいけない。 コンパイルエラーも失敗の一つである。 1 三つのルール
  30. 30. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. 失敗するテストを通す以上の プロダクトコードを書いてはいけない。 1 三つのルール
  31. 31. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. ● 失敗したテストを通すためにしかコードを 書いてはいけない。 ● 一つ以上の失敗があるとき、テストコード を書いてはいけない。 ● 失敗するテストを通す以上のコードを書いて はいけない。 1 三つのルール
  32. 32. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. 実演 じゃんけんを実装する (Rock, paper, scissors) 1 TDDとは
  33. 33. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. 1pと2pの”手”を渡すと どちらが勝ったかを返すメソッド start()を持つJankenクラス 1 実演 class Janken { fun start(p1: String, p2: String): String {
  34. 34. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. 三つのメリット 1 TDDとは
  35. 35. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. テストの漏れが発生しない 1 三つのメリット
  36. 36. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. 良い設計になる 1 三つのメリット
  37. 37. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. 常に綺麗なコードになる 1 三つのメリット
  38. 38. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. ● 失敗したテストを通すためにしかコードを 書いてはいけない。 ● 一つ以上の失敗があるとき、テストコード を書いてはいけない。 ● 失敗するテストを通す以上のコードを書いて はいけない。 1 三つのルール
  39. 39. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. 1 三つのフェーズ
  40. 40. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. ● テストの漏れが発生しない ● 良い設計になる ● 常に綺麗なコードになる 1 三つのメリット
  41. 41. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. 水飲みます テストとプロダクトを細かく行き来するので、 工数を見積もる場合も 「実装」としてひとまとめで考えるよ <
  42. 42. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved.Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. なぜTDD?
  43. 43. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. GO FAST FOREVER 2 なぜTDD?
  44. 44. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. GO FAST FOREVER CLEAN CODE 2 なぜTDD?
  45. 45. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. CLEAN CODE REFACTOR 2 なぜTDD?
  46. 46. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. if (isHoge() == false) { } else { val isFoo = result[0]["fuga"] if (isFoo == false) { } else { var foo_name = getFooName(result[0]["foo_name"], 0, pos); if (trim(foo_name) > 4) { createBar(foo_name) } else { var fuga = "" if (fuga != "") { fuga += "fuga"; } else { foo_name += ""; } } return foo_name } }
  47. 47. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. 壊さずにできるか不安 2 なぜTDD?
  48. 48. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. REFACTOR CONFIDENCE 2 なぜTDD?
  49. 49. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. CONFIDENCE TEST !! 2 なぜTDD?
  50. 50. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. GO FAST FOREVER CLEAN CODE REFACTOR CONFIDENCE TEST
  51. 51. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. GO FAST FOREVER CLEAN CODE REFACTOR CONFIDENCE TEST
  52. 52. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. GO FAST FOREVER CLEAN CODE REFACTOR CONFIDENCE TEST
  53. 53. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. GO FAST FOREVER CLEAN CODE REFACTOR CONFIDENCE TEST TDD
  54. 54. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. GO FAST FOREVER CLEAN CODE REFACTOR CONFIDENCE TEST TDD
  55. 55. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. TDD || 良いアプリ 2 なぜTDD?
  56. 56. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. TDD || 安心感が特にすごい 2 なぜTDD?
  57. 57. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. 水飲みます 逆にもうTDDじゃないと 不安でしょうがないよ <
  58. 58. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. Android TDD Q&A Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved.
  59. 59. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. Q. androidTestとtestがあるけど TDDではどっちをかくの? Android TDD
  60. 60. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. A. testの方 Android TDD
  61. 61. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. androidTest || インストルメントテスト Android TDD
  62. 62. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. test || ローカルユニットテスト Android TDD
  63. 63. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. TDDのredは ローカルユニットテスト Android TDD
  64. 64. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. Q. androidTestは使わない? Android TDD
  65. 65. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. A. 使います Android TDD
  66. 66. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. 大事なところだけ Android TDD
  67. 67. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. HappyPath Android TDD
  68. 68. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. ユーザーにとって 最高の状態が 表示されているか
  69. 69. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. ユーザーにとって 最高の状態が 表示されているか
  70. 70. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. 時間と安心のトレードオフ Android TDD
  71. 71. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. Q. Unitテストの粒度って どれくらい? Android TDD
  72. 72. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. A. public関数のふるまいごと Android TDD
  73. 73. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. @Test fun start_グー対チョキなら1pが勝つ() { // something }
  74. 74. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. @Test fun start_グー対チョキかパー対グーなら1pが勝つ() { // something }
  75. 75. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. @Test fun start_グー対チョキなら1pが勝つ() { // something } @Test fun start_パー対グーなら1pが勝つ() { // something }
  76. 76. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. Unit || public関数のふるまい Android TDD
  77. 77. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. 水飲みます テストで使う、Mock・Spyなどはまとめてテ ストダブルと呼ぶよ。テストダブルには ・Mock ・Spy ・Stub ・Fake ・Dummy があるよ <
  78. 78. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. Q. Unitテスト書くのが すごく大変なんだけど? Android TDD
  79. 79. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. A. 確かに Android TDD
  80. 80. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. A. 作りを見直してみるといいかも Android TDD
  81. 81. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. UIとロジックが分離しているか Android TDD
  82. 82. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. viewModel.imageLiveData.observe(this, Observer<String> { if (it.isEmpty()) { // 空ならデフォルトのurlをセット setImage(DEFAULT_IMAGE_URL) } else { setImage(it) } }) HogeFragment.kt
  83. 83. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. viewModel.imageLiveData.observe(this, Observer<String> { if (it.isEmpty()) { // 空ならデフォルトのurlをセット setImage(DEFAULT_IMAGE_URL) } else { setImage(it) } }) HogeFragment.kt
  84. 84. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. viewModel.imageLiveData.observe(this, Observer<String> { setImage(it) }) HogeFragment.kt
  85. 85. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. val url = getUrlFromApi() if (url.isEmpty()) { // 空ならデフォルトのurlをセット url = DEFAULT_IMAGE_URL } _imageLiveData.value = url HogeViewModel.kt
  86. 86. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. 依存を注入しているか Android TDD
  87. 87. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. class HogeViewModel( fooRepository: FooRepository, baaService: BaaService ) : ViewModel() { } HogeViewModel.kt
  88. 88. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. val subject = HogeMenuViewModel( fooRepositoryMock, baaServiceMock) HogeViewModelTest.kt
  89. 89. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. View以外が Androidに依存しすぎてないか Android TDD
  90. 90. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. 1.ロジックとUIの分離 2.依存を注入する 3.Androidへの依存 Android TDD
  91. 91. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. Q. LiveDataが絡んできたら? Android TDD
  92. 92. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. @get:Rule var taskExecutorRule = InstantTaskExecutorRule()
  93. 93. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. @Mock lateinit var helloObserverMock: Observer<String>
  94. 94. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. @Test fun getHello_helloを通知する() { // arrange subjectViewModel.hogeLiveData.observeForever(helloObservableMock) // act subjectViewModel.getHello() // assert verify(hogeObservableMock).onChanged("hello") }
  95. 95. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. Q. RxJavaが絡んできたら? Android TDD
  96. 96. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. @Before fun setUp() { RxAndroidPlugins.setMainThreadSchedulerHandler { Schedulers.trampoline() } RxJavaPlugins.setIoSchedulerHandler { Schedulers.trampoline() } }
  97. 97. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. @After fun tearDown() { RxAndroidPlugins.reset() RxJavaPlugins.reset() }
  98. 98. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. Q&A終わり Android TDD
  99. 99. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. ググりながら 一緒に頑張りましょう!! Android TDD
  100. 100. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. まとめ Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved.
  101. 101. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. 安心感と清潔さが魅力 まとめ
  102. 102. Copyright(C) 2019 Yahoo Japan Corporation.All Rights Reserved. 終わり < ありがとうございました!

×