システム開発では、開発したシステム・Webシステムを納品する前に製品テストを行います。顧客(発注者)が求めている要素を全て満たしているのか、エラー(バグ)になった場合の動作など、1つずつ慎重に確認する必要があります。
開発のフェーズにより、いくつかのテストが存在しますが、今回はテストの中でも最初に行われる「単体テスト」について解説します。
ここでは、単体テストを行う目的やメリット・デメリットなど基礎を徹底解説すると共に、テストを効率的に行うための自動化についても触れていきます。
関連記事:【開発前チェックリスト付】ソフトウエア・アプリ開発におけるMVP開発ガイドブック
単体テストとは「コンポーネントテスト」「ユニットテスト」とも呼ばれ、システム開発・Webシステム開発の最初に実施されるテストです。プログラムを個々の機能に分割し、それぞれの動作検証を行います。
Webシステムでは、さまざまなプログラムが集まって形づくられています。個々のモジュール(プログラムの部品)が機能してはじめてシステムとして成立するのです。
パソコンに例えるなら、キーボードや画面、カメラなどの各パーツにあたります。それぞれのパーツやサイズ・形状が設計と異なれば、組み立てることができない、あるいは組み立てても使用できないパソコンになるでしょう。
個々の機能を単体でテストして確実に機能する状態にすることは、開発工程の手戻りをなくすことにつながります。
システム開発・Webシステムのテストは、単体テストのほかにも開発フェーズによりいくつか行われます。
単体テストの次に行われるもので、複数のプログラムを結合した状態で正しく動作するかを確認しましょう。結合テストについての詳しい内容はこちらの記事をご覧ください。
関連記事:※結合テストの記事
全体を通してのテスト。単体テスト→結合テストをクリアした後に行います。顧客がどのように使用するか本番環境を想定し、あらゆるパターンでのテストを行います。
個々のプログラムのテストは行わないため、単体テストの段階でプログラムの不具合を修正しておく必要があります。
関連記事:システムテスト(総合テスト)とは?目的や流れ注意点も解説
完成したシステムが顧客の要件を満たしているか、業務利用可能な状態かを顧客(発注側)が総合的に検証するテスト。総合的なテストという意味では、システムテストと同じですが、顧客(発注者)がテストを行うため、ユーザーテストとも呼ばれています。
プログラムを一部変更した場合に、システム内で他の部分に影響が出ていないかを確認するためのテスト。
システム開発では、プログラムや個々のシステムが複雑に絡み合っているケースが多く、1つの不具合を修正したら隠れていた別の不具合が見つかったり、これまで正常に動いていたものが機能しなくなったりということがあります。
システムにおいて想定外の不具合が発生するのはよくあること。何らかの修正や変更を加えた際には必ず回帰テストを行います。
システム・Webシステム開発では、作り上げた製品が問題なく動作することの確認のためにテストを実施します。
テスト工程の最初のフェーズとなる単体テストは、多くの不具合を食い止めることのできる唯一の作業工程といっても過言ではありません。正常に動作することはもちろん、不具合をあぶり出すことが最大の目的です。
単体テストで不具合を全て取り除くことができれば、その後の工程のテストで不具合が発生することは、基本的にはないはずです。
そのため、単体テストで全てのパターンテストを網羅的に行う必要があります。
単体テストは「ユニットテスト」の通り、モジュールやメソッドなど1つ1つの小さな単位ごとに行うテストのこと。システムでいえば1つの機能、Webであれば1つの画面で実施される動作のテストが目的です。
しかし、実際にはシステム開発で作るプログラムは、複数で画面や機能が存在しているケースが多いもの。動作の連携については単体テストでは実施せず、結合テストで実施します。
単体テストの観点は主に3つ。
・「条件網羅テスト」
・「境界値テスト」
・「異常値テスト」
一般的には条件分岐を網羅する観点でのテストが多くなります。条件分岐を網羅すれば品質をある程度確保できることが理由です。
テスト工程は、項目も多いため効率がとても重要です。コスト・納期・品質などの観点から効率的に共有できるよう一覧表を作成するなどの対応が必要です。
単体テストは、どこに焦点を当てるかという観点から大きく2つに分類されます。
ホワイトボックステスト | ブラックボックステスト |
・開発者視点:システム設計者の意図に準じて作成される ・システムの動作を網羅的に検証するテスト ・定義されていない数値や文字入力の出力結果等、あらゆるケースを想定して実施されるもの | ・ユーザー視点:所定の入力情報に対し、正しく出力されるかを重視 ・システムが仕様どおり稼働するかの確認テスト ・全体を網羅してのテストに比べ、工数削減が可能 |
ご覧の通り、それぞれの視点の違いからテストの内容も異なります。違いを理解して使い分けることが重要です。
テストパターンや意味、結果や原因について記録するために「仕様書」を作成します。
単体テストは通常、仕様書に従って行います。
仕様書を作成することで、網羅性が確認でき、抜けもれ防止につながります。手順を記載することで再現性も。テスト項目が明確になれば自ずとゴールもはっきりするでしょう。
単体テストについて基本を押さえたところで、メリット・デメリットについて確認してみましょう。
単体テストのメリットは大きく3つ。
モジュール単位でのテストなので原因を特定しやすく、修正も容易です。早い段階で問題に気づいて対応できるので、結合テスト移行のフェーズでのテストの安定性が向上します。
単体テストのデメリットは下記の点が挙げられます。
仕様書やテストケースの作成で工数がかかり、単体テスト中にバグが見つかると、その調査・改修が必要となります。また、開発者が単体テストを実施することが多く、開発工数に時間がかかるというデメリットがあります。
単体テストをスムーズに行う上で発注者が注意しておきたいポイントについてご紹介します。
なぜシステムが必要なのか、システムを導入することで何を実現したいのか、ゴールを明確にしておく必要があります。発注者が明確にできないと開発者側も求められていることがよくわからず、プロジェクトを正しい方向に導けません。
単体テストは完了が明確ではありません。テスト項目をどの程度作成し、実施したら不具合がなくなるのかを定義するのは至難の業。どこまでやるかはテスト設計者次第です。
単純にテスト項目を増やせば、バグの発見率は上がりますが、その分時間もかかります。
そのため、テスト設計をしっかり行い、ゴールを明確にしてから取り掛かることが重要なのです。
知識が全くない状態では開発者との話が円滑に進みません。ある程度の基礎知識を身につけておきましょう。
単体テストでは、結果を一覧表に記入して記録を残してもらうことも重要です。
記録を残していないと、そもそもテストを実施したのかどうかすら判断できません。どのようなテストをいつ行って、どのような結果になったのか。記録を残してもらっていれば、お互いの確認作業もスムーズに行えます。
技術的な面で社内に適切な人材が確保できない場合は、コンサルタントや顧問など外部のリソースを活用することも効果的です。
システム開発・WEB開発の手法にはいくつかのモデルがあります。開発モデルによりメリット・デメリットがあり、近年のトレンドはアジャイル開発です。
アジャイル開発については、こちらの記事に詳しく記載しておりますのでご覧ください。
関連記事:新規事業開発を成功に導く2つの手法リーン開発・アジャイル開発とは?
開発手法によりテストの内容も異なるため、開発現場で何が主流なのか、前述した技術面の知識習得とともにある程度把握しておくことが大切です。
DeFactoryでは、経験豊富なエンジニアと事業開発経験者で、事業設計から開発まで一気通貫で行っているため、技術に詳しくなく不安な方・はじめての方でも安心してお任せいただけます。
事業開発や立ち上げを検討しているご担当者様がいらっしゃいましたら、問い合わせページから資料請求や無料相談などお気軽にご連絡くださいませ。
これまで説明してきた単体テストやその他テストは、ウォーターフォール型開発における一般的な例です。ウォーターフォール型とは従来からの開発手法で、開発の各工程を順に進めていく方法です。
しかし、スピードが求められる現在の開発現場では、順に開発を進めていく手法が当てはまらないケースもあります。設計・開発・テスト・リリースを繰り返しながら完成形を目指すアジャイル型開発がそれにあたります。
小さな開発を繰り返すサイクルの中に「テスト」が含まれているように、アジャイル型開発もテスト工程が存在します。
小さな機能単位ごとに短期間で行うため、ウォーターフォール開発のように緻密なテストは実施されません。開発プロセスの早い段階で不具合を見つけて修正していきます。
アジャイル開発には「テスト駆動開発(TDD)」と呼ばれる手法があり、最初にテストコードを書き、それを基にテストを通過できるよう実装するもの。開発の早い段階からテストを繰り返すため、バグの検知や修正が比較的早いのです。
このようなアジャイル開発におけるテスト工程は、ツールを活用した「自動化」が注目されています。
関連記事:【初心者向け】アジャイル開発の3つのプロセス手法とは?
単体テストは、システム開発・Web開発の品質向上やプロジェクトのスムーズな進捗に必要不可欠です。
しかし、テスト実行者が手動で同じ作業を繰り返し行うのは、非効率でストレスにもなります。できるだけ効率よく行うためにはどのようにすればいいのでしょうか。
単体テスト実施の効率化には次のような方法があります。
単体テストの実施方法を標準化すれば、担当者によって偏りが生じるなどの属人化を防ぐことにつながります。また、同じタイプのシステム開発やバージョンアップなら過去のテストケースを再利用することで工数削減が可能です。これらを自動化できるツールの活用は更に効率アップにつながります。
単体テストの自動化により下記のような利点が挙げられます。
自動化ツールには無料と有料のものがありますが、有料ツールの方が対応できるテスト環境が多く、機能も優れているものが多いです。
テストの自動化は、自動化のスクリプトを作成してUNITテストなどと一緒に自動実行を行います。よく知られているのはJava用の「JUnit」ですが、ここでは自動化を検討しやすい無料のツールを3つご紹介します。
Jenkins:継続的な自動テストの実行に適している
主にWebアプリケーションを対象としています。スケジューラー機能により定期的なテスト実行の命令も可能。
Selenium:初心者でも利用できる自動化ツール
ブラウザ上で動作するWebアプリケーションのテストを自動化するツール。テスト中の不具合の手順や環境を再現するためのキャプチャ・リプレイ機能があるのも嬉しいところ。
Apache Jmeter:負荷テストを行うツール
Webサーバーなどに対してのパフォーマンス測定や、高負荷状態の負荷テストが可能。パフォーマンスの負荷テストだけでなく、HTTPレスポンスの妥当性も判断できるので、機能テストの実行も。テスト結果をグラフ表示、あるいはメールで通知する機能も備えています。
単体テストは全てのテストケースを実行する必要があるため、バッチ等で自動化できれば多くのテスト項目を漏れなく実行でき、高い効果を期待できます。
ご紹介した自動化ツールなどを活用して作業効率を上げていきましょう。
関連記事:ソフトウェア開発の流れとは?ソフトウェア開発の手法も解説
システム開発では段階に応じてテストを行います。今回は最初に実施する単体テストについて解説しました。
単体テストをもれなく確実に実施し不具合解消することで、以降のフェーズでの結合テスト・システムテストなどでの手戻りを減らせます。
単体テストの基礎的な知識をしっかり理解し、コスト・スケジュール共にスムーズな開発が行えるようにしていきましょう。
DeFactoryでは、アイディア着想、ユーザーヒアリング、テストマーケティング、アジャイル・MVP開発と、プロダクト開発における立ち上げ支援を全力サポートいたします。
また、経験豊富なエンジニアと事業開発経験者で、開発だけでなく事業設計から「一気通貫」した伴走を行います。
事業開発や立ち上げを検討しているご担当者様がいらっしゃいましたら、問い合わせページから資料請求や無料相談などお気軽にご連絡くださいませ。
【DeFactoryの3つの特徴】
・最短14営業日程度で納品
・事業構築力、スピード、高品質を実現する体制
・キャンペーンにより事業構想フォローを無料実施