ソフトウェア開発の基本

皆さんこんにちは!㈱スクラムソフトウェアの製造業DX担当.Aです。今回は月2回の当社で実施している「製造業DX勉強会」で触れた「製造業におけるDX」についてお伝えしたいと思います。

目次

そもそもソフトウェア開発って何?

ソフトウェア開発とは、コンピュータプログラムやアプリケーションを構築するために行われる<ユーザー要件の定義、設計、作成、テスト、実装>といった作業工程を指すことが多いです。また、似たような用語にこれを、システム開発、アプリケーション開発、プログラミングという用語と比較して解説します。

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

厳密には、システム開発の一部としてソフトウェア開発があるとされています。例えば、システム開発にはソフトウェア開発の他にも、ハードウェア開発、ネットワーク構築なども含まれます。

また、僕のこれまでの経験からの個人的な感想としては、IT分野で「システム開発」と「ソフトウェア開発」についてはほぼ同義語として扱って差し支えないと感じています。

「ソフトウェア開発」と「アプリケーション開発」の違い:

厳密には、ソフトウェア開発の一部として、アプリケーション開発があるとされています。アプリケーションは英語で「application」で意味としては「申込み」とか「使用」といった意味を指します。このようなことから分かるようにあプリーケーションはコンピュータプログラムの中でも「エンドユーザーが直接触って操作するもの」を指すことが一般的です。一方、ソフトウェアは人が直接触って操作するプログラムを指すと同時に、人が操作しないプログラムについても指すことが多いです。例えばエンドユーザーが直接操作しない、クラウド上のデータベースプログラムや、PCの中で自動でウイルスを監視し続けているサービスプログラムなども含みます。

「ソフトウェア開発」と「プログラミング」の違い:

厳密には、ソフトウェア開発のための工程の一部分としてプログラミングがあります。ソフトウェア開発のための工程は大きく、<ユーザーの要件定義、設計、プログラミング、テスト、実装、保守>といった流れで進められるため、ここからもソフトウェア開発の位置作業としてプログラミングがあるということが分かると思います。特に開発規模が大きくなればなるほど、ソフトウェア開発の中に占めるプログラミングの作業割合は相対的に小さくなるため、プログラミング作業はソフトウェア開発の中の一部分に過ぎないことが強調されます。

ただし、最近の小規模アプリ開発については、要件定義や設計や保守といった作業を踏まずにスピーディーにアプリを公開する場合もありますね。そのような小規模アプリ開発においては、ソフトウェア開発≒プログラミングといった場合も十分ありえます。例えば、小規模開発を得意としているフリーランスエンジニアの作業の大部分はプログラミング作業の場合が多々あります。以上より、開発規模の違いにより、ソフトウェア開発とプログラミングの違いが異なると言えるでしょう。

ソフトウェアの種類

続いて、ソフトウェアはどのようなものがあるのか、その種類について見ていきましょう。

システムソフトウェア:

システムソフトウェアは、コンピュータシステムの基本的な機能を担っているソフトウェアを指します。例えば、WindowsやMacOSなどの「オペレーティングシステム(OS)」、PCとプリンターやスピーカーなどのデバイスとを繋ぐための「デバイスドライバ」、アンチウイルスソフトやシステムモニタリングツールなどの「ユーティリティソフトウェア」などです。

開発には高度な技術が必要であり、一般的には大手ITメーカーや大手IT系ベンダーやそれらの開発を専門としているソフトウェア企業が担っています。

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

アプリケーションソフトウェアは、特定のユーザーの利便性、効率性などのニーズを満たすために設計されたソフトウェアを指します。例えば、WordやExcelなどのOffice製品、スマホアプリ、IllustratorやPhotoshopなどのデザインツールなど様々です。

高機能なソフトウェアから簡易的なアプリまで様々あり、大手ITメーカーから、フリーランスのエンジニアまで、開発の担い手は様々です。

ミドルウェア:

ミドルウェアは、異なるアプリケーションやデータベース間の通信とデータの交換を担うソフトウェアです。例えばApacheやNginxといったWEBサーバー、PostgreSQLやOracleといったデータベースがこれにあたります。

これには、メッセージングサービス、API管理ツール、アプリケーションサーバなどが含まれます。

組み込みソフトウェア:

組み込みソフトウェアは、特定のハードウェアデバイスやシステム内に組み込まれたソフトウェアです。例えば、組込みソフトウェアによって、電子レンジなどの家電を、ユーザーはボタンで操作することが可能となります。現在、電子操作可能な家電製品をはじめ、自動車の制御システム、産業用ロボットなど様々な分野で使われています。

特徴としては、パソコン上のハードウェアやメモリと異なり、組込みソフトウェアはスペース的にも記憶容量的にも処理能力的にも様々な制約のある家電やロボットなどに組み込まれた基盤の上で、安定的に稼動しなければならないということが挙げられます。そのため、非常に高度な開発技術を必要としています。一般的には大手ITメーカーや大手IT系ベンダーやそれらの開発を専門としているソフトウェア企業が担っています。

WEBソフトウェア(WEBシステム、WEBアプリ):

WEBソフトウェアは、一般的にはWEBシステムとかWEBアプリと言われ、インターネットを介してアクセスし使用するソフトウェアを指します。また、クラウドサービスやWEBサービスなどもこれにあたります。

ソフトウェア開発の手法

ソフトウェアの開発にあたってはメンバーが場当たり的作業をしては到底完成までに辿り着けません。特に規模が大きいソフトウェアについてはメンバー同士が足並みを揃えて、開発を進める必要があります。このようにメンバー同士を統率し、効率よく開発工程を進めるためにプロジェクトを進めるために、ソフトウェア開発においてはいくつかの手法が存在します。これらの手法について解説して見ましょう。

ウォーターフォール開発:

ウォーターフォールモデルは、ソフトウェア開発のための古典的な開発手法で、1970年にウィンストン・W・ロイス(Winston W. Royce)が、論文「Managing the Development of Large Software Systems」で初めて提唱したとされています。

特徴としては、ソフトウェア開発プロジェクトは<要件定義、設計、実装、テスト、実装、保守>という流れに沿って、順次進めていくことです。また、以降で説明される開発手法の基となっている手法です。そのこともあり、他の手法から欠点ばかりを強調されてしまう手法ですが、今でも十分に活用できる基礎的な手法です。

アジャイル開発:

アジャイル開発はウォーターフォール開発の欠点を補う形で、2001年に発表されたとされています。当時、17人のソフトウェア開発者が集まり、「Agile Manifesto(アジャイル宣言)」を作成したことによります。ここではウォーターフォールモデルに代表される可逆性のない一方通行のソフトウェア開発工程に対するアンチテーゼとして行われ、より軽量で柔軟、迅速な開発手法の必要性を提唱されました。

アジャイル開発のポイントは以下の通りです。

  1. 反復的なプロセス:
    • ウォーターフォールモデルは可逆性のない一方通行的な一連のプロジェクト進行を想定しているのに対して、アジャイル開発は反復的でなアプローチを採用します。ソフトウェア開発は短いサイクル(スプリント)で行われ、各サイクルの終わりには、都度成果物をレビューします。
  2. 柔軟性と適応性:
    • ウォーターフォールモデルは基本的に要件定義や設計段階で実装するための機能を決定してしまうのに対して、アジャイル開発は変更に非常に柔軟で、プロジェクトの進行中に要件や優先順位が変わることを容易に受け入れます。
  3. 顧客との連携:
    • ウォーターフォールモデルは顧客の要望をプロジェクトの初期段階である要件定義時に決定することを想定しているのに対して、アジャイル開発では顧客からのフィードバックを積極的に取り入れ、開発プロセス全体を通じて顧客との緊密な協力関係を維持します。

プロトタイプ開発:

プロトタイプ開発手法は、ソフトウェア開発工程において、初期段階で実際にユーザーが触って動かせる「プロトタイプ(試作品)」を作成し、プロジェクトを進めていく手法です。この手法の主な目的は、開発初期にエンドユーザーとの意見や想定のギャップをうめ、システム要件とデザインについて齟齬を解消させることにあります。

プロトタイプ開発手法の大まかな流れとしては、初期段階でのプロトタイプ作成→ユーザーからのフィードバックと試作の反復→開発側とユーザーとの要件認識の合意のもとでの開発→開発完了というような感じです。試作品をプロジェクトのはじめの段階で作ることで、ユーザーの要件に沿った開発を進めることができ、リスク低減につながります。

スパイラル開発:

スパイラル開発は、ソフトウェア開発において、リスク管理に重点を置くアプローチとして提唱されました。この開発手法は、1988年にバリー・ボーム(Barry Boehm)によって、彼の論文「A Spiral Model of Software Development and Enhancement」で提唱されます。スパイラルモデルは、プロトタイプ開発の反復的な工程管理にさらにリスク管理を組み合わせた手法と言えます。

スパイラル開発では、ソフトウェア開発のプロセスを「らせん(スパイラル)」のように進める手法です。この開発手法の特徴は、プロジェクトの初期段階でシステム全体の細かい仕様を決定しないことです。代わりに、システムを構成する小さな部分(サブシステムや機能)ごとに焦点を当てて開発を進めます。

僕自身の経験から簡単に説明すると、「ウォーターフォール開発の流れに沿って、初期段階からプロトタイプを作りつつ、適宜プロトタイプをユーザーと確認しながら進める手法」と言えます。

ソフトウェア開発における当社のポイント

特に当社では、アジャイル開発によるプロジェクト運営を得意としています。お客様との定期的なレビューを行うことで、当初の仕様に縛られた開発を行うのではなく、柔軟に仕様変更を行いながら、「現場で実際に使ってもらえるソフトウェア」の開発を心がけています。

特に定期的なレビューを行うことは非常に重要だと考えています。と言うのも、システム仕様はどうしても、当初決めてしまったものから、変更があったり追加があったりするものですから。もし、この場合にシステム変更を受け付けないとなれば、それこそ、「使えないソフトウェア」を作ってしまうことになりかねません。

開発側からすれば、確かにシステム変更は、工数の増大などの難しい課題をはらんでいます。ただし、この点については、お客様との定期的なミーティングを行うことでリスクは極力減らせると考えています。

アジャイル開発にはこのようなメリットも含まれています。

また、当社でも無料のIT相談もお受けし、開発のご依頼も全国にてお受けしております。お気軽に、ご相談ください。

この記事を書いた人

㈱スクラムソフトウェアの製造業DX担当。エンジニアとしてから製造業のシステム開発をメインに幅広く業務に従事。C言語、C++言語を使った組み込み開発やPHPやJavascriptを使ったWEB周りの開発が得意。社内の事例を他のエンジニアからヒアリングし、社外向けにシステム開発と製造業DXや工場管理についての情報発信を実施中

目次