ウォーターフォール開発、アジャイル開発、リーンソフトウェア開発など、システムを開発する方法は様々です。
一方で、どの開発手法をとったとしても必ず必要になるのがテストです。
なぜなら、どのような開発であっても一度で完璧に要件を満たし、エラーも起こらないという状況を作るのは非常に困難であるからです。
特に、規模が大きければ大きいほど開発時には予測ができなかったエラーが発生するリスクは高まるため、これらを検知するためのテストが必須となります。
システム開発におけるテストは、単体テスト、結合テスト、システムテスト(総合テスト)、受入テストの大きく分けて4つです。
今回は、単体テストと結合テストの違いを中心に4つのテストを比較し解説します。
目次
システム開発では品質向上に向けテストが実施される
システム開発では、エラーの検知やシステムの品質の向上のため、様々な切り口、タイミングでテストが実施されます。
システム開発におけてテストが実施されるタイミング
システム開発においてテストが実施されるタイミングは、開発手法によって異なります。
上流から下流まで緻密に設計され遡及することが想定されていないウォーターフォール開発では、要件定義、基本設計、詳細設計、実装という順番で開発が完了した後にテストを行います。
それぞれの工程を遡るような形で詳細設計をチェックする単体テスト、基本設計や詳細設計の動作をチェックする結合テストやシステムテスト、要件定義をチェックする受入テストという順番でテストが実施されていきます。
一方、短い期間で開発とテストを繰り返し、アウトプットをすり合わせながら最終の完成形に近づけていくアジャイル開発では、イテレーションと呼ばれる短い開発期間の単位で適宜テストが実施されます。
テストを実施する理由
システム開発において、テストが実施される理由は大きく2つです。
一つ目は、エラーがなく動作するかどうかをチェックすることです。
単体テスト、結合テスト、システムテストなど様々な粒度でテストを行うことで、予期せぬエラー、不具合がないかを調査します。
もう一つは、そのシステムを作成した目的を十分に満たしているかをチェックするためです。
いくらエラーなくスムーズに動作するシステムが作れたとしても、そのシステムを作った目的を達成できなければなんの意味もありません。
システムテストと受入テストの段階で、主にこうしたユーザビリティのチェックや要件の確認が行われます。
単体テストと各テストの違いについて
単体テストと各テストの違いは、具体的には以下の通りです。
特徴 | |
---|---|
単体テスト | 機能ごとの動作検証 |
結合テスト | 複数の機能を連動させて動かした際の動作検証 |
システム(総合)テスト | システム全体での動産検証やユーザビリティのチェック |
受入テスト | システムの要件定義を満たしているかの最終チェック |
そもそも単体テストとは?
システムは複数の機能が複合的に作用して成り立っていますが、その中の最小単位に近い機能、構成要素が正しく動作しているかどうかを検証するのが単体テストです。
「ユニットテスト」「コンポーネントテスト」と呼ばれることもあります。
いきなり複数の機能が絡むテストを行うと、エラーが発生したときに原因が特定しづらいですが、最小単位やそれに近い機能に焦点を置いてテストをすることで、容易に修正できるとともに、その後のテストで問題が起こった際に原因の特定がしやすくなります。
単体テストと結合テストの違い
単体テストがシステムの最小単位に近い機能や構成要素の動作をそれぞれチェックするのに対し、結合テストは単体テストを経た構成要素を結合し、サブシステムとしてまとまった単位で動作のチェックを行うことを指します。
自社のシステムの機能を結合させてチェックする内部結合テストの他、外部のシステムと結合させた上での動作をチェックする外部結合テストが行われることもあります。
単体テストとシステム(総合)テストの違い
システムテストは、結合テストで動作検証したサブシステムをさらに全て結合し、システム全体が想定通りに動作するかをチェックすることを指します。
テストの順番としては単体テスト、結合テスト、システムテストの順番で行われ、単体テストがシステムの最小単位のテストであるのに対し、システムテストはシステムの最大単位のテストであるという違いがあります。
システムテストは単体テストや結合テストに求められるような動作検証に加え、システムが本来の要件を満たしているかといった要件定義との整合性の部分も合わせてチェックします。
また、単体テストや結合テストは実装を担当したエンジニアがテストを行うことも多いですが、システムを包括的にチェックする必要があるシステムテストにおいては、選任のテスターが担当することがほとんどです。
単体テストと受入テストの違い
受入テストは、システムテスト同様、システムが要件定義を満たしているかどうかをチェックする工程ですが、システムの開発側ではなく発注側が行うという点で異なります。
あくまでシステムのエンドユーザーが行うテストであるため、システムテストのように細かい仕様部分まで検証されることは少なく、実際に操作した際のユーザビリティなどが主にチェックされます。
各テストを実施する際の注意点
続いて、各テストを実施する際の注意点を紹介します。
単体テスト
単体テストを実施する際の注意点は、大きく分けて2つあります。
一つ目が、テストの品質はテスターのスキルに依存する部分が大きいということです。
有効なテストを実施するためには、不具合が起こりやすい条件や設定をテスターが行い、様々な切り口で不具合が起きないか確認することが重要になります。
しかし、テスターのスキルが不十分だと十分に不具合が起きるケースが想定できず、結果的にテストを行なったにも関わらず後工程で該当箇所に不具合が生じる可能性が生まれてしまいます。
二つ目が、品質と時間のバランスを考慮する必要があるということです。
単体テストを細かく実施することでその後の不具合を防ぎやすいというメリットは大きいものの、大きいシステムになればなるほど最小単位に切り分けて全てテストを実施するというのは非常に時間と工数がかかります。
このため、システムの納期や各機能の重要性など全体のバランスを考慮して単体テストにかける時間や労力を決定することが重要です。
結合テスト
結合テストは、複数の機能、モジュールを様々なパターンで組み合わせて動作を確認することになるため、単体テストよりもさらに時間や労力がかかります。
このため、単体テスト以上に優先度づけを行い適切なテスト工程を設ける必要があります。
システム(総合)テスト
システムテストにおいては、結合テストと比べてより複雑になるだけでなく、動作性以外にチェックすべき観点も増えてきます。
一般的にはシステムテストは以下の7つのテストで構成されることが多いため、システムテスト実施の際には以下の観点が漏れていないかを注意すると良いでしょう。
- 機能テスト
- 性能テスト
- 負荷テスト
- 負荷テスト
- ロングランテスト
- セキュリティテスト
- ユーザビリティテスト
- 回帰テスト
受入テスト
受入テストは、あくまで最終的なユーザビリティや要件を満たしているかどうかを確認する、という位置付けのテストです。
このため、受入テストでは基本的にエラーが見つからないようになっている状態が理想的です。
受入テストがあるからといってシステムテストを怠るようなことがあってはいけません。
テストが実施される手順
テストを実施する際には、まず要件定義書などをもとにテスト計画を立案します。
この際、全ての工程を緻密に行うのか、時間や優先度の兼ね合いから単体テストや結合テストを一部簡略化するのか、などテスト全体の優先順位づけも行います。
テスト計画ができた後には、具体的なテストの仕様設計、テスト環境の構築を行い、テストを開始します。
テストは、エラーが起きた時に原因の特定を容易にするため、一般的に小さい単位から行います。
つまり、手順としては単体テスト、結合テスト、システムテスト、受入テストの順番で行われることになります。
パッケージ開発なら最小限のテストでサイトの立ち上げが可能
ここまで、ソフトウェアやシステム開発におけるテストの種類を紹介してきました。
システムが大規模になればなるほど、単体テストや結合テストで確認が必要な項目も多くなります。
このため、十分な人的リソースがないと、テストが十分にできなかったり、見落としが増えたりするリスクがあります。
そこで、人的リソースがない中でサイトやシステムの開発を行いたい企業・個人におすすめなのがパッケージ開発です。
パッケージ開発の場合、すでに開発されている機能を組み合わせて開発を行うことができるため、最小限の工数で開発が可能というメリットがあります。
まとめ
システム開発においては、単体テスト、結合テスト、システムテスト、受入テストと複数のテストを行いながら不備のない開発を実現しています。
しかし、こうしたテストのリソースを確保できない場合には、より工数がかからない開発方法として、パッケージ開発を行うのも一つの手です。
マッチングクラウドではマッチングサイトをパッケージ開発することができ、データ分析のサポートなども行なっています。
ご興味のある方はぜひ一度お問い合わせください。