「ソフトウェア開発」という言葉を聞くと、ITに詳しくない初学者にとって「少し難しそう」と思う方も多く、私もその一人でした。
しかし、実際の開発プロセスや手順を理解することで各フェーズで何を目的に業務を行っているのか、何をOutPutとして必要とされるのか明確に理解することができます。
この記事では、ソフトウェア開発をこれから行う初学者に向けて、ソフトウェア開発の意味や、開発の流れ、各種設計手法の違いについて解説していきます。
ソフトウェア開発プロセスの概要
ソフトウェア開発とは何か?
そもそもソフトウェアとは、「コンピューター上で動作するプログラム」のこと意味します。 ソフトウェア開発は、そのソフトウェアを設計・開発して世の中にリリース(公開)することです。他にも、アプリケーションやゲームソフト、OS(オペレーディングシステム)の開発なども、このソフトウェア開発に該当します。ハードウェアとは?
このソフトウェアに対し、サーバーやモニター、マウス、キーボードといった機器のことをハードウェアと呼びます。 ソフトウェアは単体ではなく、周辺にあるハードウェアと結びつけることで人間が利用することが可能になります。 そのため、ソフトウェアにとってハードウェアは必要不可欠な存在です。よくそれぞれの違いとして、「目に見えないもの」=ソフトウェア、「目に見えるもの」=ハードウェアという認識で覚えらることもあります。
主要な開発手法について紹介
ウォーターフォールモデル
ウォーターフォールモデルは、各工程を順序通りに完了させ、上流工程から下流へと業務が水のように流れ落ちていくイメージから名づけられました。実際の業務プロセスにおいても、
「要求分析→要件定義→外部設計→内部設計→コーディング→テスト」というようにタスクが完了するごとに次の工程が始まります。
アジャイル開発
アジャイル開発は、開発業務における柔軟性と迅速な対応力を重視したプロセスです。 前述した”ウォータフォールモデル”よりもアジャイル開発では、要求や設計を最初に完全に固定するのではなく、進行しながら変更を受け入れる柔軟性を持っています。開発工程を短い期間で複数に分け、優先順位を決めて開発を進めていきます。
スクラム開発
スクラム開発は、アジャイル開発の手法の1つで、チームワークより重要しした開発手法です。 アジャイル開発と比べて、チームの働き方やコミュニケーションを改善することを行います。開発期間を短い「スプリント」と呼ばれる単位に区切り、それぞれのスプリントで価値のある機能を開発することを目指します。
スプリン計画会議を開き、目標を定め、ディリースクラムと呼ばれる定例会議で進捗や問題点を共有し進めていきます。
プロトタイプ型開発
プロトタイプ型とは、開発中に試作品を作成し、ユーザーのフィードバックを取り入れながら進める開発手法です。これは、ウオーターフォール型開発のデメリットを解消するために生まれました。小規模なプロジェクトや開発と試作を繰り返すプロジェクトに適した手法です。
最大のメリットは、手戻りが少なくなることで、試作とユーザーの承認を早い段階から交互に行うことで、テストや運用の段階での問題も減らすことができます。
しかし、大規模なプロジェクトでは、試作の回数が増えたり、コストや手間が膨大になるなどデメリットも存在するため、プロジェクト規模にあった手法の選択が重要です。
スパイラル型開発
スパイラル型とは、設計・開発・テストを繰り返しながらプロセスの見直しと改善を行う開発手法です。この手法は、ウォーターフォール型とアジャイル型のメリットを組み合わせた、より良い開発プロセスだと言えます。特に、品質の要求が高いプロジェクトの開発に最適で、最大のメリットは仕様変更や機能追加に柔軟に対応できる点です。たとえ手戻りが生じても、その影響を最小限に抑えることができます。
しかし、開発初期段階でシステムの全体像を把握しにくいため、プロジェクトの管理には十分な注意が必要です。
システム開発ライフサイクル(SDLC)
システム開発ライフサイクル(SDLC)とは?
SDLC(Software DeveLopment Life Cycle)は、ソフトウェアアプリケーションを作成し、リリースするために必要なタスクを簡潔にまとめたものです。これにより、無駄を省き効率を向上させることが可能です。 システムが企画されて実際にリリースされ運用されるまでのすべての工程を表現しています。 具体的に、以下で解説していきます。各フェーズについて詳しく解説します
システム開発ライフサイクルは、7つの過程で説明できます。 以下をそれぞれ、詳しく解説します。1.企画・要求定義
目的やビジネスへの貢献などを計画し、そしてシステムに対する明確な「要求」を定めるプロセスです。要求の明確はとても重要な作業であり、プロジェクトが進行する中で要求が明確でなければ、頻繁な修正が発生してしまいます。 予定外の修正に、開発スピードが低下し、開発費用が増えてしまう可能性もあります。2.要件定義
「企画・要求定義」で決定した内容を踏まえて、実際に実装する機能やそれに伴う仕様などを定めていきます。3.設計
操作性やUI/UXの設計などの「外部設計」、システムの機能や動作などの「内部設計」を行います。4.プログラミング
設計した内容を、実際にプログラミング言語を使って実現させる工程です。5.テスト
作ったシステムを、テストを行い必要する機能が満足されているか確認します。 このテストには、「単体テスト」、「結合テスト」、「システムテスト」、「運用テスト」と4段階あります。6.展開・リリース
いよいよ、システムを公開します。7.保守運用・メンテナンス
公開したシステムに関して、実際に使用する中で発生したバグやトラブルなどへの対応や、定期的なアップデートなどを行います。 この工程は、サービスが続く限り行っていきます。まとめ
ソフトウェア開発における各種開発プロセスの違いとシステム開発ライフサイクル(SDLC)の過程について解説しました。 各種開発手法には、それぞれメリット・デメリットがありプロジェクトの目的や規模にあった手法を選択することがとても重要です。また、システム開発ライフサイクル(SDLC)を理解した上で、業務を行うことで各フェーズで何が必要とされるのか明確に理解し業務を行えるようになります。