IT業界やエンジニアと聞くと、PCに向かってプログラミングをしているイメージを一番に持たれることが多いと思います。
一方で、プログラミングという作業は、システム開発におけるほんの一部の工程にしかすぎないのです。
プログラミングを行うまでに多くの工程を踏み、さらにプログラミングを終えた後も、それで終わりというわけではありません。
ここでは、システム開発の全体的な流れを理解することで、プログラムを書く以外にもあらゆる工程があることを学んでいきましょう。
家作りの流れと似ている?
解説に入る前に、システム開発と家作りの流れはよく似ているため、まずは家作りに例えて大まかな流れを理解しましょう。
家を建てる場合、まずは家主の希望を聞きながら、住宅の外観や間取りなどのイメージを固めていきます。その後、イメージを具体的にして図面を引く作業に入るでしょう。
その図面に沿って、建材などを使い家を建てていきます。そして、完成したら家主に引き渡され、定期的に修繕や改築などを行うこともあります。
システム開発でも同様に、「企画」「要件定義」「設計」「開発」「テスト・検証」「運用保守」という流れで進んでいくのです。では、それぞれの工程において、具体的に何をしているのかを見ていきましょう。
システム開発の流れ
企画
企画段階では、実際の開発をスタートする前準備として、プロジェクトの目的と目標を明確に定義することからはじまります。
具体的には、開発者と発注者(顧客)間で、業務上における課題や問題を解決するための最適な方法を検討していきます。また、プロジェクト全体のスケジュールや人員体制図の作成、システムの機能内容などの概要を共有し、関係者内で最終的な目的やゴールの認識合わせを行います。
システム開発の初期段階で認識を合わせておくことは、後続の工程において手戻りを減らすために重要な工程となります。
要件定義
要件定義は、システム開発のプロセスにおいて、顧客や関係者がシステムに対して望む機能や性能を明確に決定し、文書化する工程となります。
要件定義が明確でないと、開発段階でどんな機能を盛り込むべきかが曖昧になってしまうため、認識を合わせながら慎重に作成する必要があります。要件定義が適切に行われることで、以降のシステム開発工程を効率的に進めることができ、高品質でユーザーのニーズを実現するシステムが完成します。
また、これらを文書化し、すべての機能要件が記載されたものを「要件定義書」といいます。要件定義書はプロジェクトの初期段階で作成されるものですが、その後の開発における変更や運用中の改修があれば随時更新され、システムの基となる資料といえます。
設計
設計段階は、コンピューターやネットワークの構成とともに、表示画面や入出力データの定義、処理方法などの詳細を決めていく工程となります。
設計では、大きく分けて「基本設計」と「詳細設計」があります。会社やチームにより様々ですが、これらは「外部設計」「内部設計」と呼ばれることもあり、基本的には同じもとの捉えられます。
基本設計の段階では、要件定義で決定した機能や性能などを基にしてシステムの基本となる設計を行います。
具体的には、ユーザーが操作する画面や操作方法、入出力データなど、ユーザーから見えるインターフェース部分の仕様を決定したり設計するのが基本設計にあたります。また、これらをまとめ文書化したものが「基本設計書」や「外部設計書」と呼ばれています。
基本設計が、ユーザーに向けた仕様の設計である一方で、詳細設計は、ユーザーからは見えない部分のシステム内部の設計のことを指します。
具体的には、システム内部の動作や処理方法、データの登録や更新を定義するDB関連についてなど、プログラムでどう実現するかを決めていく工程です。また、これらをまとめ文書化したものが「詳細設計書」や「内部設計書」と呼ばれています。
開発
基本設計と詳細設計を経て、いよいよ開発の工程に進んでいきます。要件定義と設計で決定した仕様に沿って、SEやプログラマーがコーディングを行いプログラムを作成します。
ユーザーから見える部分に関しては、HTMLやJavascriptなどを使い、Webページの作成やポップアップウィンドウの表示などの機能を実装していきます。一方で、ユーザーが触れないシステムの裏側については、Python、Python、Java、PHP、Ruby、C++などのプログラミング言語で開発を行っていきます。
また、コーディングだけでなく、サーバーやネットワーク、データベースなどのインフラ部分の構築も行われます。
開発作業では、設計書通りにプログラムを実装するだけでなく、処理速度やリリース後の運用のしやすさなども考慮しながら、より品質の高いものを実現することが求められます。
テスト・検証
プログラムの実装が終わると、次に設計通りにプログラムが作成され動くかテストをする工程に入ります。
テストでは、大きく分けて「単体テスト」「結合テスト」「システムテスト」の3つに分けられます。
単体テストとは、作成されたプログラムが設計通りに動くことや要件定義で定めた基準を満たしているかどうかを、プログラム単体で確認する作業です。
単体テストで問題がなくとも、複数のプログラム部品を組み合わせてみて、初めて発生する不具合などもあります。そのため、結合テストにて、単体テストで動作確認したプログラム同士が正しく連携するかを確認していきます。
プログラム単体で確認を行う単体テストや、プログラム同士を連携させて確認する結合テストを終えると、ついに最終段階となるシステムテストの工程に進みます。
実際にユーザーが使用する流れや手順を想定して、運用時と同じ環境であらゆる観点からテストを行うことで、単体・結合テストでも見つからなかったバグや不具合が生じることがあります。ここまでのテストを終えて、ついにシステムのリリースとなります。
運用保守
システムがリリースされれば、それで終わりというわけではありません。リリース後も、システムの運用・保守の工程が続いていきます。
システムが日常的に使用されるようになると、開発段階では予測できなかった不具合やユーザーからの質問や変更要求などが発生するでしょう。
また、長期間にわたりシステムが使用されていく中で、サーバー・データベースのメンテナンスや、セキュリティソフトのアップデートなどが必要になることもあります。
そのため、システムリリース以降は、運用・保守チームが、システムの安定性や性能を維持・向上させるための作業を行っていきます。不具合などのトラブルが発生すれば、まずは運用保守チームが対応し、必要に応じて開発チームで改修作業が発生する場合もあります。
運用・保守の工程は、システムを利用している限り続いていくものといえるでしょう。
まとめ
システム開発における「企画」「要件定義」「設計」「開発」「テスト・検証」「運用保守」の工程について、具体的に解説してきました。
未経験からIT業界を目指している人の中には、「システムが開発されるまでに、こんなにも多くの工程を踏んでいるとは知らなかった!」という人も多いのではないでしょうか。
プログラミングやコーディングのスキルは開発において必須のものといえますが、テストや運用保守の工程ではそこまで専門性が求められず、比較的未経験者でもはじめやすい業務となります。
さまざまな観点から、IT業界やエンジニアには、プログラムを組むこと以外にも多くの業務があることを知っていきましょう。