今回はシステムエンジニアになった以上、絶対に避けては通れないテストについてのお話です。
なんとなく感覚としては理解しているんですけど、言語化が上手くできなかったので調べてまとめました。
単体テスト
1つの機能に対して想定した通りに動くよね、と確認するのがこのフェーズになります。
よく「ホワイトボックステスト」と言われるのはここのフェーズでの話になります。簡単に書くと、プログラムベースのテストをするのがここのフェーズ。
コードを網羅するようにテストを行うのが一般的です。
例えばWebアプリだと「ボタンを押した」→「選んだデータだけが画面に表示されました」という動作を確認するのはどちらかというと結合テストフェーズの話になります。
単体テストでは「ボタンを押した」→「選んだデータだけが画面に表示されました」の間で実行される「DBの項目の値がtrueに変わりました」というような画面からは見えない部分を中心に見ることが多いです。
結合テスト
単体テストが終わった機能を複数繋げて実行して動作を確認するテスト。このテストは単体テストとは違ってプログラムベースではなく、やりたいことベースでテストをします。
つまりお客さんから

こんなことがやりたいんだけど……。
と言われて、ソースコードを修正したとします。そして、その修正によってお客さんの求めている処理が本当にできるようになったのかを確認するのが結合テストフェーズになります。
他のシステムとの連携があるシステムであればここで「他のシステムのデータが来たら動くよね」とか「他のシステムにデータ送ってもエラーにならないよね」ということも確認します。
このフェーズになるとプログラミングの能力は必要ありません。ただしエラー推測テストなどを行うためにどういう値を入力したら問題が起こりやすいかという知識は必要になります。
総合テスト
総合テストはシステム開発の中でも最後の工程になります。
ほぼ本番環境に近い環境でインフラまでもを巻き込んだテストになります。どちらかというとインフラの人たちが大変なフェーズ。
もちろん、結合テストのようにお客さんの要望が達成できているかというのも確認観点にはなりますが、総合テストで一番重要になるのが性能だったり保守性だったりいわゆる「非機能要件」と呼ばれる部分のテストです。非機能要件のテストはこの段階ではじめて出てくるのでむちゃくちゃ重要になります。
非機能要件とは「やりたいこと」ではなく「できなきゃシステムとしてまずいよね」という観点の要件になります。例えば「ページは5秒以内で表示できるよね」とか「社員全員同時にアクセスできるよね」とか「サーバーが1台壊れてももう1台でなんとかなるよね」とかそんな感じです。
参考文献
今回は下記の本を読んで自分で解釈して当記事を書いています。実際にはもっと図入りで詳細に書かれているのでこの記事でシステムエンジニアリングに興味を持った方はぜひ手に取ってみてはいかがでしょうか。SE1年目の人にもオススメの一冊です。
- ずっと受けたかったソフトウェアエンジニアリングの新人研修