見出し画像

Readable Code 輪読会 #nonproken

#ノンプロ研 にいたときの読書会の記録です。

  • 先にまとめをすると…

    • 疎結合は正義。

      • コードを分割してテストしやすく

      • 密結合だとテストもしにくい

    • テストに優しい開発をしろ

      • 上の項目と被る意味も。

      • テストしやすいコードを書こうね(つまり疎結合)

    • やりすぎには気を付けろ

      • テストを優先するあまり本体のコードが読みにくくなってはいけない

      • テストを優先するあまり開発の速度が落ちてはいけない

  • 14-7の内容

    • 今までの項の総まとめみたいな内容

    • 冒頭のコードのどこがいけなかったかをまとめる

    • 内容としては…

      • 名前をちゃんとつけよう

        • 🙅‍♂️ Test1
          何のテストかよくわからない

        • 🙆‍♂️ Test_SortAndFilterDocs_NegativeValue
          SortAndFilterDocsメソッドに、負の数の値を渡した時のテスト ということがわかる

      • エラーメッセージを具体的に

        • 🙅‍♂️ assert(output == expected_output)
          AsssertionError → 「エラーが出た」ことしかわからない

        • 🙆‍♂️ BOOST_REQUIRE_EQUAL(output, expected_output)
          expected: xxx, actual: xxx → エラーメッセージが具体的になる

      • 疎結合

        • 🙅‍♂️ ひとつの関数にいろいろなテストケースを書く

        • 🙆‍♂️ テストケースごとに関数を分ける

      • テストに直接関係ない実装は隠蔽する

        • 🙅‍♂️ テスト関数内でオブジェクトに直接変更を加える
          URLなどは見える必要がない

        • 🙆‍♂️ テスト用のヘルパーメソッドをつくる
          ヘルパーメソッドで内容を隠蔽する

      • 不必要なデータを持たせない

        • 負の値とか

        • 0の値とか

        • 極端に大きい値

  • 14-8の内容

    • テストに優しい開発をしようね

    • テストに優しい開発とは?

      • 疎結合(これにつきる)

    • テストに優しいとどんないいことがあるか?

      • テストが書きやすい

      • そしてテストがそのままコードのドキュメントになる
        なんかDDDとかそんなんばっかじゃないか…?

    • 補足:TDDについて

      • TDDとは?

        • Test Driven Development
          テスト駆動開発

        • テストを最初に書いて開発する方法

        • ただ、微妙にグラデーションがある

        • どんな時にテストを先に書くか?

          • やりたいことが明らかにテスト書いたほうが楽なら、テストを先に書く

          • まずは実装の方が書きやすいなら、テストを後で書く

          • リファクタリングするときは、テストを先に書く
            書いてからリファクタする。

  • 14-9の内容

    • やりすぎに注意する

    • テストが大事とは言っても、テストのために本番のコードが犠牲になってはダメ。

      • 本番の読みやすさについて

        • 🙅‍♂️ テストのために本番のコードが読みにくくなる

        • 🙆‍♂️ テストのために本番のコードが読みにくくなる

      • 開発速度について

        • 🙅‍♂️ テストのために本番の開発のスピードが落ちる

        • 🙆‍♂️ テストを書くことで開発の効率があがる

      • カバレッジ

        • 🙅‍♂️ 100%テストを全部しないと気が済まなくなってしまい、開発が遅くなる

        • 🙆‍♂️ 90%をコードでテストして、残りは随時テストする

  • 14-10:まとめ

    • テストのトップレベルは簡潔に

    • エラーメッセージをわかりやすく
      🙅‍♂️ AssertionError  🙆‍♂️ Error -> function myFunc; expected: 3, actual: 1

      • テストには単純な入力値を
        🙅‍♂️ -99998.7  🙆‍♂️ -1

    • テスト関数も、何をテストしているかわかりやすく
      🙅‍♂️ Test1 🙆‍♂️ Test_関数名_状況

    • テストの修正や追加をしやすくなっているのが最も大事。

  • GASUnitとAssertGAS

この記事が気に入ったらサポートをしてみませんか?