システム開発・アプリ開発・HP制作のご相談はこちら お問い合わせ
株式会社リレイス
アプリ開発

ソフトウェア開発とは?システム開発との違い・手法や流れを解説

ソフトウェア開発とは?システム開発との違い・手法や流れを解説

ソフトウェア開発とは、開発会社がクライアントの要望をもとにふさわしいソフトウェアを企画・提案し、開発と運用・保守をおこなうことを意味しています。

ソフトウェア開発には開発手法やソフトウェア開発の種類、そしてソフトウェア開発の際の流れに様々な種類と、手順や今後の課題があるので、本記事ではそれらについて解説していきます。

ソフトウェアを開発したいが、開発を依頼する前に最低限の知識は身につけたいと考えている方はぜひご覧ください

ソフトウェア開発とシステム開発の違い

よく混同されやすいソフトウェア開発とシステム開発の違いですが、ものすごく簡単に言うと、ソフトウェア開発は「システムの上で動くアプリケーションの開発」のことであり、システム開発は「仕組みそのものの開発」と言うことができます。

ソフトウェアとは、たとえばMicrosoftの商品であるWordやExcelといったもののことであり、その中身についての開発をおこなうことがソフトウェア開発の仕事内容となります。

一方でシステムとは、銀行やコンビニに置いてあるATMの仕組みそのものだったり、自動販売機やスーパーのレジの仕組みについての開発をおこなうことなどが、システム開発の仕事内容となります。

補足しておくと、広義の意味では、ソフトウェア開発はシステム開発のひとつとして捉えられる場合もあります。

これはソフトウェアそのものにも、システムがあるからだと言えます。

ソフトウェア開発の手法

ソフトウェア開発には、以下のふたつの種類があります。

アジャイル開発

アジャイル(agile)」とは、直訳すると「素早い、すばしっこい」といった意味合いを持っています。

そしてアジャイル開発とは、計画から設計、実装、テストといった開発工程の手順において、機能単位を小さくわけて進めていく開発手法であり、現在もっともスタンダードなソフトウェア開発手法のひとつとなっています。

アジャイルという言葉の意味合いの通り、ひとつのアプリケーションの機能単位を小さく分け、優先順位が高い機能の物から素早く開発をおこなっていきます。

それぞれの機能を集積させてひとつの大きなソフトウェアを作ることが、アジャイル開発の最大の特徴となっています。

ソフトウェア開発を進めていく途中で仕様変更をする場合もありますが、アジャイル開発は唐突な仕様の変更にも対応しやすいのが強みとなっています。

また、優先順位の高い物から開発することによって素早くソフトウェアをリリースすることができ、その後優先順位度の低い機能単位のものを追加していく、といった方法も可能となっています。

ウォーターフォール開発

一方でウォーターフォール開発は完全なトップダウン式の開発手法であり、計画から設計、実装、テストの開発工程を、 機能を小分けせずに全体を通して進めていく開発手法となっています。

ウォーターフォール開発は開発者全体のスケジュールを立てやすく、プロジェクトに関わる全員が現状を俯瞰して見やすいことがメリットとなります。

計画が完了した時点でどのくらいの予算が掛かるのかも把握しやすく、必要な人員の数とその確保や工数も見積もれるため、上手くいけば非常にスムーズに開発をおこなうことができます。

一方でウォーターフォール開発は一度次のフェーズにプロジェクトが進行してしまうと、欠陥があって後戻りした場合、非常に多くの工程を無駄にすることになってしまうという特徴も備えています。

プロジェクトの前段階で欠陥があることが許されない手法であるため、上流工程から非常に慎重に物事を進めていく必要があり、いくつかの問題を抱えている間は決して次のフェーズへと移行していくことはできません。

ソフトウェア開発の種類

ソフトウェア開発には、以下のような3つの種類があります。

Webシステムソフトウェア

Webシステムソフトウェアとは、Webブラウザ上で動くソフトウェアのことを指しています。

Webブラウザ上で動くため、PCやスマートフォンといったユーザーの端末の性能やOSに依存することなく、まったく同じ様に動作させることができるのが、最大の特徴となっています。

Webシステムは、その特徴からマルチプラットフォームでの開発において、工程数を大きく減らしたり人件費などのコスト削減を見込むことができますが、webでの開発に強いエンジニアが必要となります。

アプリケーションソフトウェア

アプリケーションソフトウェアとは、Webシステムソフトウェアとは反対に、スマートフォンのアプリのようにインストールすることで利用できるソフトウェアのことを指しています。

インストールをおこなう必要があることからマルチプラットフォーム開発の場合は多種類の端末やOSを意識して開発をおこなう必要があるため、その分の手間がかかることとなります。

また多くの場合、アプリケーションソフトウェアはひとつの機能と用途に特化したソフトウェアとなるので、ソフトウェアごとに開発の費用や手間は非常に異なるものとなっています。

組み込みシステム

組み込みシステムとは、先述したシステム開発の例のように、銀行のATMやスーパーのレジシステム、また家電やスマートフォンのような機械のシステムのことを指しています。

ソフトウェアと違い機械の根幹に組まれるシステムの機能そのものなので、エンジニアにはそのハードウェアについて造詣の深い知識も求められます。

ソフトウェア開発の流れ

ソフトウェア開発の流れは、以下のようなものとなっています。

営業

まず初めに、営業の担当者がクライアントに対し営業をおこないます。

営業はクライアントとのヒアリングをおこない、クライアントの提案をもとにどのような企画、改善点があるのかを考え提案します。

他の業者との比較や違いを説明し、どのようなシステムがクライアントにとって求められているのかを明確にしていきます。

クライアントとのヒアリング

営業とクライアントとの話し合いがおこなわれた後、プロジェクトの責任者や各エンジニアも交えた、より具体的なヒアリングをおこないます。

顧客が抱えている漠然とした要望をもとに質問をおこない、具体的になぜそのようなソフトウェアを必要としているのか、どう成果を得たいのかを明確にします。

その後、クラアントの要望を噛み砕いてどのような機能を持ったソフトウェアが求められているのか、明確なイメージを持てるようにしていきます。

企画・提案

ヒアリングで得られたクライアントの具体的な要望をもとに、どのようなソフトウェアを作るのか企画し、提案をおこなっていきます。

提案の際にはソフトウェアの特徴だけでなく、開発期間と開発費用、開発効果についても言及し、費用対効果としてどのようなものが得られるのかについても企画書に盛り込みます。

契約

ソフトウェア開発の体制を整え、提案による見積もりが通った後に両者の合意が得られた場合、契約をして開発の本格的なスタートとなります。

契約した後は、スケジュールや人員配置、課題点やリスクといったプロジェクト全体を俯瞰することのできる計画書を作成します。

要件定義

要件定義では、ソフトウェアを実際に作成する際に必要な機能の仕様や、品質をより具体的にするための要件提議書を作成していきます。

ソフトウェア開発、特にウォーターフォール開発において計画のフェーズであるこの要件定義はもっとも上流な工程であり、プロジェクトの成否を分ける非常に重要な要素であるため、慎重に事を期す必要があります。

要件定義における要件定義書では、業務プロセスを把握し問題点や課題点を浮き彫りにした上で、ソフトウェアの設計書を作成します。

その後、クライアントと開発側、それぞれに必要な業務タスクを明確にし、顧客のニーズを予算の範囲内で考え、実現可能な解決策を盛り込み作成していきます。

設計

設計のフェーズでは作成された要件定義書をもとに、より具体的で明確な仕様を書いていきます。

具体的には、ソフトウェアの設計からテスト方法、運用時の注意事項といったマニュアル面や、開発時やテスト時、保守・運用のメンテナンスなどの具体的な事柄について書いていきます。

設計には基本設計詳細設計のふたつがあり、基本設計では操作画面や操作方法といったユーザーが目に見え触れることのできるインターフェース部分についての仕様が書かれ、詳細設計では基本設計から導き出されたソフトウェアの内部面、具体的な開発工程が書かれます。

開発

開発では仕様書をもとに、システムエンジニアたちが実際にソフトウェアを形にしていきます。

ソフトウェアの開発そのもの以外にも、データベースやほかの連携するシステムの開発などもおこなう場合があります。

テスト

開発と並行する形で、作成したソフトウェアが仕様書のとおり正常に動いているのかを検証するため、テストをおこないます。

テストでは作成したプログラムを単体を検証する単体テストのほか、いくつかのプログラムを組み合わせた際にも正常に動くかを検証する結合テスト、すべてのプログラムを組み合わせた状態でおこなうシステムテスト、実際にクライアントが使った際にその要望に答えられているかを検証する運用テスト4種類があります。

納品

運用テストの後顧客が了承した場合、無事納品となります。

クライアントがソフトウェア全体を把握できるようにするための設計書とソースコード、運用する際のマニュアルなども合わせて提出します。

運用・保守

ソフトウェア納品後にも開発側のやることは続き、その後はソフトウェアに異常があったりメンテナンスの必要があったときなどに、運用・保守という形で関わることとなります。

アプリケーション開発においては、多くの場合納品後も思わぬバグやトラブルが起こることとなるので、特に納品直後の期間はその対応のために人員を確保しておく必要があります。

ソフトウェア開発に携わる職業

営業

営業担当者はクライアントがどのようなソフトウェアを作成して欲しいと思っているのかをヒアリングし、エンジニアとプログラマーに引き継ぐほか、完成したソフトウェアを売るために走り回るパッケージ営業もおこないます。

営業といっても、クライアントに説明をおこなうために、相応の専門知識とそれを説明するためのコミュニケーションスキルが必要となります。

システムエンジニア

開発側は大きく分けてシステムエンジニアプログラマーに別れますが、システムエンジニアはヒアリングをもとに要件定義、設計をおこなう上流工程の担当をします。

システムエンジニアはアプリケーション開発のプロジェクト全体において非常に重要な役割を担っていて、アプリケーションの品質やプロジェクトの成否に関わる非常に重要な役割となっています。

プログラマー

プログラマーは、システムエンジニアが作成した仕様書や設計書をもとに実際のプログラムを作成する、下流工程を担う存在となります。

仕様書どおりに動く様、プログラミングとテストをおこなうのがプログラマーの主な仕事ですが、場合によってはシステムエンジニアがプログラミングもおこなうことも多数あります。

またプログラマーが様々な都合で設計書や仕様書を作成することもあるので、両者の間にある線引きは曖昧であるともいえます。

ソフトウェア開発の課題

IT人材不足

独立行政法人であるIPAが発行している「IT人材白書2021」によると、今後日本では非常に多くのエンジニアが不足すると、多くの企業が考えていることが書かれています。

実際2030年には、79万人ものエンジニアが不足するだろうと捉えられていて、今後ますます増えていくであろうエンジニアの需要を考えると、非常に深刻な状況であると考えられます。

エンジニアの業界はその業務内容と人材不足から労働時間が長くなってしまうという特性を持っているだけでなく、多数のプログラミング言語を習得する必要があり、時代の変化とともに常に新しいスキルを身につけていく必要があります。

またソフトウェア開発においては、営業から上流・下流工程と、非常に多くの人が関わることとなり、育成の難しさから大企業でも十分なIT人材の確保は難しいのが現状です。

そのため、多くの場合自社開発だけでは間に合わず、ソフトウェア専門の開発会社に業務委託するケースが見受けられます。

同様にソフトウェア専門の開発会社にとってもIT人材の確保は難しく、業務委託よりも自社の案件の方がどうしても優先されやすい以上、業務委託を受けられる体制を整えにくいといった問題を抱えています。

全体の工数・進捗管理

先述した様に、ソフトウェア開発には多くのエンジニアやプログラマーたちが関わっているため、現在誰が何をやっていてどのような進捗状況なのかを把握することが非常に難しくなっています。

また、エンジニアやプログラマーの仕事は客先への派遣のほか、自社内でおこなわれることもあり、納期やコスト面の都合で開発会社がまた別の開発会社に委託することもあります。

そのため、収支を含めたプロジェクト全体の動きの流れが予測しにくいという問題も抱えています。

ソフトウェア開発を外注する場合の注意点

ここまで見てきた様に、現在の日本は深刻なエンジニア不足であるため、納期やコスト面で課題のある場合は、開発を外部委託するメリットは大いにあります。

しかし外注先は玉石混合となるので、必ず開発会社の実績面を確認するようにし、契約の際には複数の開発会社との相見積もりを取るようにしましょう。

まとめ

ソフトウェア開発の開発手法とソフトウェア開発の種類、またソフトウェア開発の際の流れや今後の課題について見ていきました。

今後の日本においてますます深刻なエンジニア不足になる以上、優秀なエンジニアの人材の確保と、外部委託をおこなうことのできる開発会社について一考してみることは非常に重要となります。

数年後を見据えて現在から準備をしてみることは、あなたの企業にとって大きな価値があるかもしれません。