nobu blog

プログラミングやゲームの話など。

*



テスタブルJavascript読書感想 テスト視点も含めた保守性の高いコードの書き方に関して語られた本

      2020/11/11

概要

少し間が空きましたが、引き続き大量に積まれた技術書の消化を進めています。

今回紹介するのはオライリージャパンから発売されているテスタブルJavascript。書影

 

スポンサーリンク

こちらも前回紹介したメンテナブルJavascriptと同時期の2013年に発売された本で、進化の早いJavascirpt界隈では少し古いですが、参考になる点はあったので紹介していこうと思います。

メンテナブルJavascriptは下記で紹介しています。

メンテナブルJavascript読書感想 ちょっと古いがJSに限らず一般論的なコードの書き方を学べる本

 

 

書籍概要

どんな本?

最重要テーマは「テストに適したコードの作成と保守」。本書は複数のアプローチで、テストに適したコードに迫ります。まず複雑さについて考察し、続いて複雑さや結合を軽減できるようなアーキテクチャを検討します。これを基盤として、機能レベルとアプリケーションレベルでのテストについての解説に進みます。カバレッジやデバッグについて十分な知識を得て、最後に自動化に関する解説で本書は締めくくられます。最後まで読めば、テストに適したJavaScriptの本質と実践について漏れのない理解を得られるでしょう。著者がYahoo!やGoogleで培ったテストや品質管理についてのノウハウをJavaScriptに適用したWeb開発者必携の一冊。

オライリーHP

  • Mark Ethan Trostler 著、牧野 聡 訳
  • 2013年09月 発行
  • 304ページ
  • 定価3,300円

個人的な感想

メンテナブルJavascirptと同様に、ECMAScript5時代に書かれたものなので、現在のJSではかなり一般的になってきた文法や機能には言及がありません。

ただし、こちらはNode.jsに関しての言及もあるのが大きな違いでしょうか。

メンテナブルJavascriptと比較すると、よりツールの細かい使用方法などにも言及されている本となっています。

ですが、それらツールやフレームワーク類は既に死屍累々といった感じで、完全に今は見かけないものが多数なのでそこは読み飛ばしが推奨です。

テスタブルなコードを書くための考え方など、汎用的な思想や考え方などに関しても多く書かれているので、その部分だけを読むだけでも参考になると思います。

 

スポンサーリンク

各部概要

第1章 テストに適したJavaScript

最初の章という事で、本書のテーマとなっているテスタブルなコードとは?を問いかける内容となっています。

JSに限らずプログラム開発において話題となる、

  • なぜテストを容易にするのか?
  • なぜ保守性の高いコードにするのか?

といった汎用的なテーマに関して説明が書かれています。

多くの本や記事で書かれている事と大差は無いため、多くの人にとっては復習的な内容になりますが、改めて読み直して確認することには役立ちそうです。

 

スポンサーリンク

第2章 複雑さ

コードの複雑さを減らして、いかに保守性の高いコードにすべきか記載されている章です。

具体的なJavascriptコードとテストコードをリファクタリングしながら、説明を行っていくのでわかりやすいです。

関数分割やカプセル化、Linter、循環複雑度、結合度など、他の言語でもよく見かける話題が書かれています。

ファクトリやファサード、DIといったデザインパターンの話も少し出てきます。

 

コードのLintToolとしてJSLintが出てきますが、今はESLintがデファクトスタンダードなのでちょっと歴史を感じますね。

(私もJS歴はそこまで長く無いので、ESLintしか知りませんでした。)

他にも使われているフレームワークがYUIといった既に使われていないライブラリだったりします。

 

第3章 イベントベースのアーキテクチャ

モジュール間の結合を減らす方法としてイベントハブによる実装例をサンプルコードを使いながら説明しています。

モジュール間の関係をメンバーとして保持するのではなく、イベントハブといった共通のメッセージ基盤を経由した呼び出しとコールバックによる処理でモジュール間の結合を減らすといった方法が説明されています。

このようなメッセージハブによる通信方法は、デバッグが大変だったり、関係性を追うのにIDEの恩恵を得られなくて大変だったりと良い点と悪い点があって個人的には使いどころが難しいと感じています。

 

スポンサーリンク

第4章 ユニットテスト

これまでの章では簡易的に説明されていたユニットテストに関してしっかりと説明する章。

使われているフレームワークがYUITestと、これまた既に使われていないものなので具体的なコードは参考にならないかもしれません。

ただし、良いテストとは?といったコードに依存しない考え方なども書かれていてその点は参考になります。

 

第5章 カバレッジ

コードカバレッジに関して書かれた章です。

ここで使用されているカバレッジ計測用のツールも、残念ながら既に使用されていないレガシーなものが多くてちょっと参考にはならないと思います。

ですが、コードカバレッジにおける考え方などは現在も通じる話ですので参考になると思います。

具体的には、下記のような点が書かれています。

  • 高いカバレッジはテストが十分といった指標にはならないが、低いカバレッジは問題であるとわかる
  • 特定の行を通ったからといってコードがテストされたとはならない
  • カバレッジの結果は期待されるべき振る舞いをテストした結果の副産物であるべき
  • その上で80%程度を目標とするのを推奨している

良くカバレッジの数値ばかりを見る人がいますが、コードカバレッジはあくまで副産物であるといった考えには個人的に賛成です。

 

スポンサーリンク

第6章 結合テスト、パフォーマンステスト、負荷テスト

これまではコードを中心としたユニットテストを中心に話が進んできましたが、その後に実施すべき結合テストなどの話に関して記載されています。

ツールとしてはレガシーなものもありますが、SeleniumやApache bench(ab)など現在も現役なものも見受けれます。

定番のJMeterに関しては何も言及がないのが気になるところです。

基本的に各ツールの使用方法を簡単に説明しているだけですので、とっかかりだけでも知るといった用途にはなりそうです。

 

第7章 デバッグ

ブラウザでのデバッグ方法や、Node.js、モバイルアプリでのデバッグ方法に関して書かれています。

ブラウザ含め、全てのバージョンが古いものなのでここはちょっとパスしても良いレベルですね。

 

第8章 自動化

テストを自動化するためのCD/CIのお話。

前半は、何を自動化するのか?いつ自動化するのか?といった汎用的な話題は今読んでも参考になります。

後半はJenkinsを使って、自動化を行う手順や方法が書かれていますが、ツールがレガシーすぎてちょっと参考にはならないです。

 

スポンサーリンク

まとめ

オライリージャパンから発売されたテスタブルJavascriptの紹介をしました。

こちらもメンテナブルJavascriptと同様に、死屍累々のツールやフレームワーク群を見て、JS界隈の移り変わりの速さに驚かされる一冊になっています。

テスタビリティの高く品質の良いコードを書くための考え方など時代に左右されない一般的な理論も多く書かれているので、そういった部分だけを抜き出して学ぶのには良い本だと思います。

 

 - Javascript, 技術書, 読書感想