uncategorized

知っておきたい開発におけるテストのこと:「最後にテストすればいい」では遅い理由

Programmer

複雑なシステム開発

現在のシステム開発は一昔前のそれよりどんどん複雑になっています。複雑と言っても「難しく」なっているという訳ではありません。従来に比べて使う技術が多くなって来ているのです。

WEBシステム一つを開発するにも、サーバOS、データベース、開発言語、ライブラリ、フロントエンドの開発言語、端末の開発言語やミドルウェア、etc.。これらを組み合わせるのが必須になっています。また、これらの開発環境はバージョンアップが激しく、開発期間中にその対応をすることも珍しくありません。最近ではスマートフォンのOSのバージョンや端末の画面サイズへの対応も出て来て、複雑さは増すばかりです。

テストフェーズは遅い

一般的な開発プロセスではテストフェーズはプロジェクトの後半で実施されます。テストフェーズで開発されたモジュール、端末などの実行環境が「結合」されテストされるのです。モジュール間の結合はインターフェース設計を確認すれば問題なく動作する「はず」です。しかし、そう簡単にはいかない。

テストでは多くの障害が発見されることになりますが、一つの機能が幾つものモジュールやライブラリ、端末が連携しているシステムでは障害の原因がどこにあるかは直ぐには分かりません。時には設計レベルで手戻りが発生する可能性もあるのです。そして、大抵の場合、この結合テストで大きな修正が発生します。

テストを後でやるワケ

テストは何故開発プロセスの後半で行うのでしょうか?その理由の一つにコストの問題があるのではないかと思います。テスト環境を構築し、維持するのはコストがかかります。例えばスマホアプリを開発する場合、テスト端末やサーバをテスト用に準備するには月で10万単位の費用が必要になります。規模が大きくなると100万単位になるかもしれません。テストを後でまとめてやるのは、テスト環境を維持する期間を短くするためだろうと思います。

テスト環境は開発環境

しかし、テスト環境は今や開発環境の一部なのです。今のシステム開発は幾つもの環境や機能を開発しながら結合して試し、次の機能開発を進めるという必要があります。開発したものを直ぐに結合してテストするのです。それによって障害が発生した場合に、何に問題があるのか直ぐに分かります。後で障害が発生してしらみつぶしに調べるという必要がないのです。

そのためには開発環境に最初からテスト環境を組み込んでおく必要があります。継続的デリバリーといった手法がありますが、その目的は開発プロジェクト上のリスクを軽減するためなのです。もちろん、開発環境の規模が大きくなるためコストがかかりますが、そのコストを出してもあまりあるメリットが得られるでしょう。

いつやるの?今でしょ!

テストはいつやるの?

今でしょ!

開発の途中だからというのは理由になりません。途中だからテストをやる意味があるのです。開発が殆ど終わってからテストをやっても意味がありません。開発を始めた最初の日からテストをやるのです。

SEKAI LAB TIMES(セカイラボタイムス)は、アプリ・Webサービス開発を世界中のエンジニアチームに依頼・発注できるグローバルソーシングプラットフォーム「セカイラボ」が運営しているブログメディアです。


KENTARO FURUKAWA / Project Manager
業務システムからスマホアプリ開発まで多様なシステム開発現場でプロジェクトマネージャをつとめる。ICタグシステム開発のベンチャーや物流会社の経営企画などで、事業開発や事業改善を主導。現在はフリーのプロ・プロジェクトマネージャとして活躍。