本連載は、テストコードをこれから書こうと考えているJavaScript技術者を対象に、テストコードの意義から、テスト駆動開発、JavaScriptでのテストコードの書き方、継続的インテグレーションなどテスト全般にわたって解説します。また、原理原則だけでなくWhyから説明し、チームメンバーを巻き込みながら開発現場に活かせる考え方を総合的に解説します。
はじめに
第1回目の本稿は、実際にテストコードを書く前に、基本的な考え方である「なぜテストコードを書くのか?」を解説します。
対象読者
- JavaScriptの基本をある程度理解している方
- テストコードをこれから書こうと考えている方
頻繁な変化への対応
まずは、開発現場で多く行われている基本的な考え方を振り返り、テストコードがなぜ必要なのかを考えて行きたいと思います。
これまでのテストの考え方
まずは、一般的なウォータフォールモデルを例に考えてみましょう。通常ウォータフォールモデルでは、設計→実装→テストという順番で、作ったものを最後にテストします。最後にテストを行うというのは、言い換えると「品質を最後に担保する」と言えます。
また、最後にテストする場合は、通常テスト仕様書などを作成した上で必要なテストパターンを洗い出し、手動でテストを実施します。
変化への対応が求められている
スタートアップのような新しいサービス開発だけでなく、一般的なSIや受託開発も含め、変化への対応が求められるようになってきました。それは、ソフトウェア自身が複雑化している上に、どのようなサービスやシステムが良いのかという意味で、答えが出にくくなってきたという背景があります。
答えがない状態でプロダクトを作るためには、まず作ってみて、素早くリリースを行い、使ってみたユーザの反応や印象をフィードバックし、それを元に答えに近づいていく必要があります。そのような形で行うためには、多くのユーザの反応を素早くプロダクトに反映するために、頻繁な仕様変更やリリースを行います。つまり、仕様変更を行う前提で開発を行う必要がある、ということです。
そうなると、これまでの「品質を最後に担保する」考え方で開発を行うとどうなるでしょうか。ソースコードの変更があるたびに、変更した部分だけでなく、「既存の影響範囲」も含めてテストを行う必要があります。しかもそれを手動で行うとなると、影響範囲を調査し、テスト仕様書を修正し、広く手動でテストを行うという多大に時間がかかる作業を行う必要があります。
この状態で、変更したソースコードを品質が高い状態で頻繁にリリースができる、と自身を持って断言できるでしょうか。
「変化に強いコード」とは?
では、そのような「変更に強いコード」とはどのようなコードでしょうか。そこでテストコードの登場です。例えばあるプロダクトコードにはテストコードが存在し、常にテストが正常終了している状態だと仮定します。そのコードを変更する必要があった場合、どうなるでしょうか。
テストコードが正常終了している、つまり各メソッドは想定通りに動いていると言えます。そこで、その仕様を追加したりテストコード変更し、プロダクトコードを変更し、テストを通す。テストが成功していれば「変更したコードだけでなく、変更していないコードも想定通りに動いている」と言えます。そこには、影響範囲の調査も影響範囲の手動テストも行いません。安心してコードの変更ができます。つまり「変更に強いコード」とは「変更した部分以外は品質を担保できているコード」であり、エンジニアが安心感を持って修正ができるコードである、ということです。
「品質を最後に担保する」から「品質を作りこむ」へ
テストコードがある状態というのは、プロダクトコードが存在する時点で品質が担保できていると言えます。そのような状態を作るためには、コーディングを行いながら「品質を作りこむ」ことが重要です。プロダクトコードを作りながら品質のことを想定し、その品質を常に確認できるようにテストコードを書いていきます。
以前の考え方のように、まずはコーディングをしてあとでテストを行って品質を担保しようという考え方とは異なります。つまり、テストコードを書くということは、書くだけでなく、考え方の転換が必要なのです。それが、「品質を最後に担保する」から「品質を作りこむ」への考え方の変化、ということなのです。
- 修正履歴
-
- 2013/07/19 00:15 文章一部を変更
この記事は参考になりましたか?
- JavaScriptでテストを書こう!連載記事一覧
- この記事の著者
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト 安西剛(ヤスニシ ツヨシ)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
