単体テストと結合テストの違いとは?プログラムは部品?種類や目的までプログラマーが分かりやすくわかりやすく解説
これらのプログラムでバグを出さないために確認するのがテストです。そのテストに単体とか結合とかあるようですが何が違うんでしょうな。何が違うのか、他にどんなテストがあるのかを実際にプログラムのテストを何百回とやった経験があるプログラマでもあるライターのwoinaryと一緒に解説していきます。
ライター/woinary
某社で社内向け業務システムの開発、運用を30年近くやっていたシステム屋さん。テストも数百回経験。現在はフリーランス。ガジェットやゲーム、ラノベが大好きなおっさんです。
プログラムは部品を組み立てる?ソフトウェアのテスト
image by iStockphoto
現代社会では日々、コンピュータのお世話にならない日はないかと思います。ネットができるのも、電車に乗るのもすべてコンピュータが関わっていますよね。そのコンピュータを動かすために必要なのがプログラムです。プログラムにあってはならないのが不具合、つまりバグになります。
このバグがないことを確認するのがテストです。世の中で動いているプログラムのほとんどがテストでバグがないことを確認してします。そのプログラムは他の工業製品と同じように部品があり、それを組み立てたものが今使っているプログラムです。ざっくり言うと部品単体のテストが単体テスト、それらを結合したテストが結合テストになります。ただ、目的ややり方に違いもあるので、詳細について説明していきますね。
単体テスト:バグを出すテスト
仕事やプライベートで使うパソコンやスマホのアプリケーションやゲームから、自動車や家電に組み込まれているコントローラ、あるいは日頃利用するようなサービスまで、すべてのコンピュータのプログラムはソフトウェアの部品を組み立ててつくります。自動車や家電でも部品を使うことで効率がよくなりますが、プログラムでも同じです。
このそれぞれの部品にバグがないことを確認するテストを単体(ユニット)テストと呼びます。最終的にはバグがないことを確認しますが、単体テストの目的はなるべくバグを出すことです。それがなぜかは後で説明しますね。単体テストではありとあらゆるケースを想定してテストします。それでバグをたくさん出した上で、それを直して問題ないことを確認するのが単体テストの目的です。
こちらの記事もおすすめ

より便利なのは?タブレットとパソコンの違いや、失敗しない選び方などを合わせて情報端末マニアがわかりやすく解説
結合テスト:バグを出さないテスト
部品の単位で確認する単体テストに対し、その部品を組み合わせて動作を確認するのが結合(インテグレーション)テストです。ジョイントテストと呼ぶこともあります。
部品そのものの検査は単体テストで確認したので、もう問題ないはずではないか、と思いますよね。しかし、工業製品でも部品と部品を組み合わせてみたら問題が見つかることがあります。プログラムの部品も同様。組み合わせてみると思っていたのと違う動作をすることや、お互いに想定していた内容に食い違いがあってうまく動かないことも。そのようなバグがないことを確認するのが結合テストです。単体テストではなるべく色々なケースを試してバグを出し尽くすことを目的としていましたが、結合テストではバグがないことを確認するのが目的になります。
プログラム開発に不可欠なテスト、その目的は?
image by iStockphoto
プログラムはどのようにつくるのでしょう。ドラマや映画などでコンピュータに向かってプログラム(コード)を書いているシーンを思い浮かべる人も多いかもしれませんね。でも、実際のプログラム開発の現場では、コードを書いている時間は全体の一部です。
その規模や内容にもよりますが、プログラムの開発期間の全体を100%とすると、コードを書いているのは20%程度。残りは設計とテストになります。設計とはコードを書く前に全体の構成やプログラムをどう実現するかを検討する作業です。そして、できあがったプログラムにバグがないかを確認するのがテスト。ケースバイケースですがざっくり言って全体の40%〜50%がテストの時間になります。
こちらの記事もおすすめ

5分で分かる!HTMLとCSSの違いとは?定義や役割・読み込み方も現役エンジニアがわかりやすく解説
プログラムは部品?テストが色々あるわけ
プログラムも他の工業製品と同様に部品を組み立ててつくります。具体的にプログラムの部品が何かと言うと、関数やクラスです。プログラミング言語によって呼び方違いますが、より一般的にはモジュールやコンポーネントと呼びます。プログラムの中でよく使う機能やデータの集まりをまとめたものと考えてください。
よく使うものはまとめておけばいちいち書かなくてよいですよね。そして、そのまとめた部品についてバグがないことを確認しておけば、他のところでもその部品を使うことができます。バグのないことを確認した部品を組み立てて、全体のバグがないようにつくるわけです。ただ、個々の部品にバグがなくても組み合わせたらバグがあることもあります。また部品としてはバグではないが、組み合わせた結果としてはバグということも。そのため、部品毎の単体テストとは別に、組み合わせた後に結合テストが必要なのです。
バグは早いうちに出す?単体と結合の目的の違い
ざっくり説明で単体テストではバグを早めにたくさん出すと説明しました。バグなんて少ない方がよいですよね。しかし、単体テストの時点でその部品のバグがないことを確認しきっておかないといけないのです。
例えば、単体テストが不十分で部品のバグを1件見逃したとします。それが結合テストで見つかったとすると、どこで発生したかの調査が必要です。単体テストで問題がないことを確認しきっていれば組み合わせの時点で発生した問題だと推測できますよね。でも、単体テストが不十分だと部品までさかのぼって調べなければなりません。そして、部品に問題を見つけるとまた単体テストをやり直した上で、結合テストのやり直しです。このようにバグは早いうちに見つけた方が手間が少ないとされています。遅れれば遅れるほどピラミッドのように手間がどんどん増えてしまうのです。
結合も1回だけではない?ITaとITbとは
プログラムの規模が大きくなると、結合テストも1回では済まなくなります。これは会社や開発チームの考え方によって違いますが、2回に分けることも多いです。結合(インテグレーション)テストのことを英字2文字でITと省略するため、ITa、ITbと呼ぶこともあります。
この分け方はプログラムの内容や開発チームの考え方しだいです。例えば、規模の大きなプログラムは部品のかたまりを一つの大きな部品と考えることもあります。その大きな部品単位でテストした上で、全体を組み合わせてさらにテストするわけです。また、規模が大きいといくつかの会社に分けて作成してもらうこともあります。その場合、会社ごとのテストと全体を組み合わせたテストに分けるのです。規模が大きくなると問題が出たときにどこが原因なのか分かりにくくなります。だから、テストも小分けするのです。
単体と結合だけじゃない!テストの種類ややり方
image by iStockphoto
プログラムは部品でできており、部品単体のテストが単体テスト、組み合わせたもののテストが結合テストと説明しました。しかし、プログラムのテストは他にも目的に合わせて多くのものがあります。また、実際にテストはどのようにして、いつ行うのでしょう。続いて、単体、結合以外の主なテストや、テストのやり方について説明していきますね。
\次のページで「1.シナリオで確認?総合テスト」を解説!/






