∑考=人

そして今日も考える。

システム開発におけるテストの意味って何だ

私たちのシステム開発は、いわゆるウォーターフォールモデル(通称Vモデル)と呼ばれる開発手法に基いて進められている。これは、要件定義、基本設計、詳細設計、プログラミング、単体テスト結合テストシステムテストといった工程を順番に進めていき、最終的にシステムをリリースするものだ。

 

各工程ごとにやることが決まっており、各工程ごとにやることが違う。最初にお客さんの要件を明確にし、設計をして、設計を詳細かして、プログラミングしてシステムを作る。ここまでが品質の作り込む部分である。そして、単体テスト以降で、作りこんだ品質を担保していく(間違っている部分があれば改修する)という思想の上に成り立っている。

 

そして、上流工程と下流工程は下図のように対応づけられている。左から順に工程を進めていき、その流れがV字になっていることがVモデルと呼ばれる所以である。詳細設計が正しく実装されていることを単体テストで確認し、基本設計が正しく実装されていることを結合テストで確認するのである。

 

f:id:n1dalap:20150805235511j:plain

 

具体的には、設計を設計書というドキュメントに落とし込み、それをインプットとして、試験項目表を作成する。そして、試験項目表をもとにテストを実施することによって対応関係にある設計の品質を担保するのである。

 

これが何を意味するのかというと、設計でミスを犯していたり、設計すべきところを漏らしていた場合には、テストでそれをカバーすることはできないということである。一般的にもテスト工程で品質を上げることはできないと言われている。

 

もし仮に設計時点での問題が多いのであれば、試験を念入りにするのではなく、設計から見直すなりするべきではないだろうか。テスト工程が、設計工程の品質を担保するためのものであるなら、そもそも設計段階で十分な設計がされていないのであれば、試験などやっている場合ではないのではないだろうか。

 

単純に試験項目を作成して、試験を消化していくだけの試験が本当に優先度の高い仕事になるのだろうか。