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
GASUnit
単純なassertとログ出力するexports
AssertGAS
より豊富なassertメソッド群
こんなのもあった的
この記事が気に入ったらサポートをしてみませんか?