SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

実践! ユニットテスト入門

【実践的ユニットテスト入門】今からでも遅くない! ソフトウェアの最小単位を自動でテストする

実践! ユニットテスト入門 第1回

  • X ポスト
  • このエントリーをはてなブックマークに追加

 「テストを書くと開発に時間がかかる」。こんな話を一度は耳にしたことがあると思います。実際はその逆で、テストを書かないとむしろ開発の工数が増えてしまうのです。本連載では、テストの基本知識はあるが今まで実際のプロダクトでテストを書いたことがない人や、自分が書いたコードのどこをテストしたらいいのかわからない人を対象に、まずはテストを書く→質のいいユニットテストを目指すことを目的として、足がかりとなるようなポイントを解説します。第1回となる本稿では、テストの重要性やTypeScriptを用いたユニットテストの実例を紹介します。

  • X ポスト
  • このエントリーをはてなブックマークに追加

はじめに

  BASE株式会社でシニアエンジニアを務めているプログラミングをするパンダ(@Panda_Program)と申します。本連載はPHPカンファレンス2022での発表「実践!ユニットテスト入門」を再構成して記事としたものです。

対象読者

 本連載の対象読者は、自動テストの必要性をわかっているものの、まだテストコードを書いたことがない開発者の方です。

テストを書くモチベーション

 まずはテストの重要性を簡単に紹介します。ソフトウェア開発において、テストは手動テストと自動テストの2つに分けられます。手動テストは、いわゆる「画面ポチポチ」と言われるような、ブラウザ上でソフトウェアを動かして動作を確認するものです。

 多くの現場では、手動テストで確認することが多くなると、スプレッドシートの一行一行に検証内容を書いて、テストを任された人が上から順に実施することがよくあります。手動テストはこのようなイメージです。

 手動テストが必要な場合もあるため、手動テストは必ずしも悪いものだとは言えません。しかし、仮に1行コードを変更しただけなのに、100件の検証を手動で実施しなければならないとすれば、テストのコストが過剰であると判断できるでしょう。そのような場合に自動テストを採用することを検討します。

 自動テストは、テスト用のソフトウェアが人間の代わりに繰り返し行う動作確認を自動で実行するというものです。例えば、ローカル環境で自分が書いたコードが正しいのかを確認するためにはコマンド一発でテストを実行してスピーディに検証できるほか、CI(継続的インテグレーション)が整備されていればCI上でコミットをプッシュするたびに全てのテストを実行して、自分が開発した箇所のみならず、他の箇所が壊れていないかを確認できます。

 小さいソフトウェアであれば、毎回ブラウザを立ち上げてソフトウェアが壊れていないか手動で確認することはそれほど手間ではないかもしれません。しかしソフトウェアは時間と共に成長していきます。開発期間が長く、複雑な機能を備えたソフトウェアの動作確認を毎回全て手動でテストするのは現実的ではありません。

 自動テストであれば些細な点から既存の処理を組み合わせた複雑な処理まで、コマンド一つでバグがないかを確認できます。自動テストは時間と手間の短縮になります。

 一言で自動テストと言っても内容は多岐に渡ります。本記事では、一番シンプルなユニットテストに焦点を当てて、読者の皆さんを自動テストの世界に誘おうと思います。

ユニットテストから始める

 さて、ユニットテストは自動テストの中でどのように位置づけられるでしょうか。ソフトウェアの自動テストを大まかに分類したものとして、マイク・コーン氏が考案した有名なテストピラミッドというものがあります。

出典: The Practical Test Pyramid
出典: The Practical Test Pyramid

 テストピラミッドによるとユニットテストには3つの特徴があります。

  • ユニットテストは他のテストに比べて最も数が多い
  • ユニットテストの実行速度は他のテストより速い
  • ユニットテストは他のテストに比べてより独立している

 これらはソフトウェアの構成要素の内で最小単位(ユニット)をテストするという性質から導き出される特徴です。

 本記事は入門であるため他のテストには触れず、ユニットテストの解説に徹します。他のテストについてもさらに知りたいという方はJSTQBが翻訳しているISTQBテスト技術者資格制度 Foundation Levelのシラバスをご覧ください。

次のページ
ユニットテストを書いてみよう

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
実践! ユニットテスト入門連載記事一覧
この記事の著者

プログラミングをするパンダ(プログラミングヲスルパンダ)

 https://twitter.com/Panda_Program/ フロントエンドエンジニア。元々サーバーサイドエンジニアだったが、個人開発を機に HTML, CSS, JS に興味を持つ。特に React、Next.js に熱中しフロントエンジニアに転向。TDD、XP、DevOps が好き。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/19854 2024/07/22 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング