テスト工程の種類

プロジェクトを進めていくうえで必ず登場するテストですが
これって会社によって定義がまちまちだったりします。

例えば転職した時に前の会社では
「単体テストといっていたのが、ここではUTと呼んでいる」
とか
「前の会社で結合テストといったら、ここまでの範囲だったのに、この会社では全然違う」
とか
よくある話ですが、最近転職した知り合いに質問されたので、今回はそれをまとめてみます。
転職する予定のない人も参考ぐらいにはなるかなと思います。
ちなみにこの記事はプログラム開発をしたことがある人向けに書いていますので、
開発経験がない人はわかりづらいかもしれません。
もし、もう少し噛み砕いて知りたいという人は問い合わせフォームやtwitterで聞いてください。
(開発未経験者にもわかるように書くとなると、だいぶ記事が冗長になってしまうので・・・)

まず、テストの大まかな流れですが
一般的には
単体テスト→結合テスト→インターフェーステスト
という流れで進むのが一般的だと思います。
※他にも受け入れテストというのがありますが、これは納品のためのテストになるので、ここでは少し省いて、最後に捕捉します。

上記のテストの呼び名が会社によってまちまちなので、まずはテストの単位を以下のように細かくしてみます。

①共通機能のテスト

プログラムの中には、単体で動作するプログラムと、
他のプログラムから部品として呼び出されて、初めて動作する共通のプログラムがあります。
クラスライブラリとか共通関数、ファンクションモジュールなどと呼ばれているものですね。
身近なものに置き換えると、
スマホのカメラとかをイメージしてもらえばいいでしょうか。
それだけでスマホ用カメラとしては完成品ですし、メーカーはそれを商品として
スマホメーカーに出荷しますが
それだけでは何に使えるわけでもなく、
最終的にスマホに組み込まれて、初めて機能する
このように、それ単体で一つの完成品ではあるものの、他のプログラムに組み込まれて初めて機能するようなプログラムのことを言います。
これがおそらく最小のテストの単位になると思います。

②単体のプログラムのテスト

単体で実行して、動作するプログラムです。
先ほどの例で言うと、スマホそのものになります。
単体でスマートフォンという商品ですし、それだけで役割を果たすことができるものになります。

③周辺プログラムとの組み合わせテスト

関連する機能との動作確認をするテストです。
スマホの例で言うと、SDカードはちゃんと認識するか?とか充電機器でちゃんと充電できるか?といったように周辺機器との動作は正常化か?といったテストになります。

スマホ単体では動くけど、充電器とうまくつながらないとか、SDカードを認識しないとかだと不良品になりますよね。
そのようにプログラムも関連する前後のプログラムときちんと整合性の取れた動作をするか?というテストを行います。

④関連システムとの連携テスト

別のシステムと連携する機能の場合、実際に他システムと連携して動作するかをチェックします。
スマホで言うと自宅wi-fiにちゃんと繋がるか?とか会社のwi-fiにちゃんと繋げられるか?という事をテストすることになります。

こういったテストの組み合わせや範囲が会社によって違うことが多いです。
例えば、
①と②を含めて単体テスト
と呼ぶ会社もあれば、
①は単体テスト、②は結合テスト
と呼ぶ会社もあります。

ではテストの呼び名ってどのぐらい種類があるの?というのはこれまたたくさんあるんですが
ざっと数えても以下のような感じです。
単体テスト
結合テスト
内部結合テスト
外部結合テスト
総合テスト
UT(UnitTest)
PT(ProgramTest)
IT( InterfaceTest)
ST(SystemTest)

PTとかITとかに至っては
実はProductTestだったり
実はIntergrationTestだったり
で、これだけでも複数の意味を持ってしまったりします・・・・・

そういう訳で、会社ごとに意味や守備範囲が違ったりしているわけですが
最初に書いた通り、テストを細分化した4パターンのどこまでを、なんと呼称するか
でしかないので、そこの整理がつけば、転職先の会社での使い分けもやりやすくなると思います。

それを大まかに整理すると

共通機能のテスト
単体のプログラムのテスト
周辺プログラムとの組み合わせテスト
関連システムとの連携テスト
単体テスト
UT
PT
結合テスト
内部結合テスト
外部結合テスト
IT
総合テスト
ST

こんなイメージになると思います。
(ちなみに結合テストは内部結合テストと外部結合テストを包含することが多く、
UT≒単体テストと扱われることが多いです。)

単体テストについては①も②もそう呼ぶことが多いですし
①だけを単体テストと取り扱う会社の場合、単体テストと呼ばず
①をUT、②をPT、③IT、④をSTと呼ぶようなケースが多いように思います

ここまででもちょっとわかりにくい場合、
もう少し別の切り口で整理すると、こんなパターンになるでしょうか。

UT→PT→IT→STのパターン

①と②のテストを明確に分けている会社

単体テスト→内部結合テスト→外部結合テスト→総合テストのパターン

③と④を明確に分けている会社→この場合、①と②はどちらも単体テストと呼ばれていることが多い
もしくは
①と②を明確に分けている会社→この場合③が外部結合テスト、④が総合テストとなる場合が多い

単体テスト→結合テスト→総合テストのパターン

状況に応じて使い分けている会社
①と②が同時に発生するケースはあまりないので、①の時は
②を結合テストと呼ぶし、①がないときは③が結合テストという位置づけになる。

という感じでしょうか。
本当に会社の文化によって呼称や範囲が変わるので、定義しづらいですが
上記のような感じであれば、まだ頭の中が整理つくと思います。
なお、UT→結合テスト→ITといったように、日本語と英語のテスト名が混ざった会社はさすがに今まで見たことがありません(;’∀’)

最後に受け入れテストですが
これは発注元がSierから納品された際に機能のテストをするためのテストです。
ですので、テストの内容もタイミングもまちまちになります。
最後の最後に納品される際に行う場合もあるし、単体テストが完了した時点で行うこともあります。
テストの内容も、実際に発注側が実施することもあれば、Sierのテスト結果を確認して合否を判定する会社もありますので、この辺りはあまり気にしなくていいかと思います。
ただし、納品のための作業になるので、受け入れテスト前と後では、そのプログラムの取り扱いは明確に変わりますので、その点だけは気を付けましょう。

コメント

このブログの人気の投稿

Stories 5話:今までの経緯を知らないまま、運用設計をする

社内のコミュニケーションを活性化!グループウェア導入のススメ

ITにどう向き合う?どう向き合ってもらう?