今回は、「結合テストは死んだのか?」というテーマになります。
エッセイですね。
X にて、以下のリクエストをいただきましたので、書いてみます。
https://x.com/akiyama924/status/1863367270346711237
Web系の結合テストとは何か
これは、あるSaaS製品を持つ開発チームで運用している、現行のWモデルです。
単体テスト、結合テスト(インテグレーションテスト)、
システムインテグレーションテスト、などの括りとはちょっと違っています。
通常のWモデルであれば、いろいろな呼び方はあれど、
これらのテストレベルは一般的ですが、
Web系は、OSやブラウザなど、プラットフォームが、他でテストされていて、
基本的に動作が担保されたものを使います。
ですので、この部分のテストはしないのが通常です。
(ブラウザのコンパチビリティテストはもちろんありますが。)
このため、OSI参照モデルで言うところの、アプリケーション層のテストに
集中できるという特性があります。
また、ブランチをマージする、という概念で、ローカル環境(エンジニアのPC)で
行うテストが単体テストと言えますが、単体テストと言えどもフィーチャーなので、
テストの範囲が組み込み系で行う単体テストのイメージよりは広くなります。
また、ここで行うローカルのテストは、結局製品全体が開発したコードとマージされた
ブランチで行うので、同時に結合テストと同様の環境でテストすることになります。
こうした事情で考えると、確かに、結合テストと呼べるものは、少なくとも、
Web製品開発では主流とは言えないと思っています。普段のテストに
包括されているイメージです。
それでは、結合テストは死んだのか?
もしWeb製品の開発現場で結合テストをやっているところがあるとしたら、
相当な大規模のウォーターフォール開発だったり、古くからある企業などのように
思えますが、有名なショッピングサイトを持つ会社の開発においては、結合テスト、
かつ、システムインテグレーションテストを行った例がありました。
例えば、決済部分とサービス部分が、組織的にも分かれたチームで
開発された場合です。
ここでも、明確に結合テスト、という位置づけではなく、テスト、という括りでした。
実際に行っていたのは、結合テストが含まれたシステムインテグレーションテスト
でしたが、「結合テスト」という認識でのコミュニケーションはしておらず、
結合テストの概念は、Web製品開発において、一般的な項目、というわけでは
なさそうです。
まとめ
ただし、結合テストで何をテストするかは、知っておくとテストセットを構成するのに
有利で、この辺の認識があいまいな状態でテストセットを組むのと、
知っていて作る場合とでは、テストの目的や性能、構成の抜け漏れなどに
差が出てくると考えています。
ですので、個人的な見解としては、「知識として知っておくべき」と思っています。
用語解説
テストレベル(JSTQB)
具体的にインスタンス化したテストプロセス。
https://glossary.istqb.org/ja_JP/term/test-level
OSI参照モデル
コンピューターネットワークのプロトコルについて、7つの層に分類したもの。
https://ja.wikipedia.org/wiki/OSI%E5%8F%82%E7%85%A7%E3%83%A2%E3%83%87%E3%83%AB