コンピュータに命令を出すための情報システムであるソフトウェアは、今や私たちの生活に欠かせない存在です。多くの人がパソコンやスマートフォンを日常的に利用していますが、これらは基本ソフトウェアであるOSを活用して動作します。私たちの日常生活を陰ながら便利で快適なものにしてくれるソフトウェアですが、どのように開発されているかご存じでしょうか。
この記事では、そもそもソフトウェアの開発とは何かをはじめ、その手法や開発の流れ、成功のポイントなどをご紹介していきます。
ソフトウェア開発とは
ソフトウェアとはコンピュータ上で動作するプログラムを意味します。ExcelやWordなど、世界中で多くの人が利用するソフトウェアは数多く存在します。このソフトウェアを作成・設計・リリースする一連の活動がソフトウェア開発です。
ソフトウェア開発とシステム開発の違い
システム開発は業務の仕組みを改善するシステムの開発のことを指します。例えば、コンビニのPOSレジのシステムの開発などがそれにあたります。
一方、ソフトウェア開発はプログラム・ソフトウェアの開発のことで、パッケージソフト(OfficWord、Excelなど)の開発がそれに該当します。
システム開発という範囲の中にソフトウェア開発は含まれています。(システム開発>ソフトウェア開発)
ソフトウェア開発のおもな種類
ソフトウェア開発は、Webシステム開発・アプリケーション開発・組込システム開発の3つに大きく分類されます。この章では、それぞれの特徴をご紹介します。
Webシステム
Webシステム開発は、UI(ユーザーインターフェース)がWebブラウザを利用するソフトウェア開発を意味します。この開発のメリットとしては、Webサーバーなどにシステム本体を集約することによって、極めて高いメンテナンス性を実現できる点が挙げられます。
アプリケーション
アプリケーション開発とは、スマートフォンのアプリを介するものの開発を意味します。例えば、Microsoft Office365であればWord・Excel・PowerPoint、iPhoneであればiTunes、AndroidであればGoogleドライブなどがあります。
アプリケーション開発は、Webシステム開発とは異なり、アプリケーションの更新を定期的に行わなければなりません。アプリ起動時に更新データが配信サーバー上にあるかを表示する機能を搭載しているアプリケーションが多いのが特徴です。
組み込みシステム
組込システム開発とは、テレビ・エアコン・冷蔵庫・洗濯機などの家電製品、製造ロボット・自動車などさまざまな機器の内部に、その動きを制御するために組み込まれているシステムを開発することを意味します。
最近では、IoTやIndustry 4.0といった言葉が広まり、しばしば耳にする機会も増えましたが、これらのキーワードは組込システムにも関連しています。例えば、外出先でスマートフォンを使って自宅のエアコンの電源を入れるとき、あるいは工場で製造ロボットが製品の組立作業を行っているときなど、これらの動作は組込システムによって動かされているのです。
ソフトウェア開発のおもな手法
ソフトウェアの開発プロセスは複数の種類に分類されます。これまでに長く用いられてきた手法もあれば、最近になって新しく登場し、急速に普及しているものもあります。
この章では、ソフトウェア開発に用いられている開発手法をご紹介します。
ウォーターフォール
ウォーターフォールとは、各工程を滝(Waterfall)が上流から下流へ流れるように、確実に順番通りに完了させていく開発プロセスの形です。
ソフトウェア開発は、要件定義・外部設計・内部設計・コーディング・単体テスト・結合テスト・運用テスト・リリースという順序で開発が進みます。ウォーターフォール型開発では、最初の要件定義や設計が絶対的な位置付けで、開発が進んでから前の工程に戻ったり、変更したりすることは基本的にありません。
ウォーターフォール型開発のメリットとしては、スケジュールの管理のしやすさが挙げられます。事前にシステムの目的や要件定義を明確にできれば、工程ごとの工数を正確に見積もれるので、開発期限や予算が優先される案件にも適しています。ただし、開発の工程の途中で問題が発見されると、先に進めないというデメリットがあります。わずかに前の段階に戻ってやり直すことになると、予算や納期に重大な影響を及ぼしてしまう可能性があるからです。
プロトタイプ
プロトタイプ型開発では、開発を進めながら試作機であるプロトタイプを作成し、ユーザーに確認をとりながら工程を進めていきます。これは基本的には前工程に戻れないウォーターフォール型開発のデメリットを克服する開発方法で、ユーザーにプロトタイプの使用感を試してもらうことにより、テストや運用の段階で手戻りが発生しにくくなるメリットがあります。
一方で、大規模プロジェクトのように、プロトタイプの開発に大きな労力やコストを必要とする案件には不向きであるというデメリットもあります。
アジャイル
アジャイル開発は、開発工程を機能単位の小さいサイクルに分割して繰り返していく開発プロセスです。クライアントやユーザーと意思疎通を行いながら、開発中のシステムに要望を反映させていくので、品質を高めやすいといった利点があります。その一方で、要望があった変更要件が完了しなければ、スケジュールの長期化やコスト超過が起こりやすくなるデメリットもあります。
アジャイル開発について以下で詳しく解説しております。こちらも合わせてご確認ください。
アジャイル開発とは?特徴やウォーターフォールとの違いなど徹底解説
アジャイル開発とウォーターフォール開発の違いとは?失敗しない開発手法を決定するために、それぞれの特徴やメリットについて理解しよう
スパイラル
スパイラル型開発は開発するシステムをいくつかの機能ごとに分割し、それぞれの機能ごとにユーザーからの反応を受けながら、見直しと改善を繰り返して開発を進めていく手法です。この開発プロセスは、ウォーターフォール型とアジャイル型のメリットを両方兼ね備えていると言えます。
開発中に機能の追加や仕様の変更があってもすぐに対応可能で、手戻りの規模も小さくできるというメリットがあります。その一方で、開発の初期段階では、システムの全体像の把握が難しく、プロジェクトの管理が困難になるというデメリットもあります。
イテレーション
「反復・繰り返し」という意味を持つイテレーションは、アジャイル開発で用いられる関連用語のひとつで、ソフトウェア開発の単位を示します。設計・開発・テスト・改善といったサイクルを短期間で繰り返すため、開発中の問題の早期発見や改善がしやすい特徴があります。通常1つのイテレーションサイクルは、1週間~4週間ほどです。
ただし、開発の途中で変更点が増えすぎると、スケジュールや予算に影響を及ぼす点はデメリットです。
ソフトウェア開発の流れ
ソフトウェア開発はどのような流れで行われるのでしょうか。この章では、その詳細をご紹介します。
ヒアリング
まずは、クライアントおよびユーザーへのヒアリングを行います。
ユーザーが困っていることや、クライアントがボトルネックに感じていることなど、サービス内容から運用に関わる部分まで問題点を洗いだします。このヒアリングは非常に重要で、このステップの粒度によってその後の開発は大きく変わります。生じている課題以外にも、予算や運用の開始時期などのヒアリングも行い、具体的な企画に反映させていきましょう。
そして、システムの企画・提案の段階では、ユーザーのヒアリングで得た情報を整理して、どのようにユーザーの困りごとを解決していくかを検討します。検討段階では、システムの開発方法・開発費用・開発期間・費用対効果などを考えて企画を立案します。企画が一度完成したら、吟味と推敲を重ね、納得のいくまで強度を高めましょう。
要件定義
企画・提案が通り、契約が成立して受注が決まると、次にすべきことは要件定義です。要件定義は企画・提案の内容をもとに、ソフトウェアに実装すべき機能や必要な性能をどのようにするか明確にしていく業務を意味します。この要件定義は、この後に続く設計、開発、テストの工程に大きな影響を及ぼすため、要件定義が案件の成功を決めるといっても過言ではありません。
要件定義では、「要件定義書」と呼ばれる書類に検討すべき事項を落とし込んでいきます。検討事項には「現在の業務フロー・システム設計書」「顧客と開発における関係」「解決策」を盛り込む必要があります。現在の業務フロー・システム設計書の確認を行う理由は、既存のシステムの現状を把握するためです。このステップによって、クライアント側と開発側の役割分担が明らかになり、相互に必要な業務を区別できます。
また、要件定義では解決策の検討もセットで必要です。ユーザー・クライアント・開発側のニーズが合致する落としどころを定め、ソフトウェアにどう実装するかを考えていきます。そのため、クライアントや社内の他部門・ユーザーとの連携が大切になります。
なお、要点定義の検討事項で曖昧な点がある場合は、何度も確認を取り、処理条件の漏れが起きないよう内容を詰めていくことが大切です。
関連記事:
「要件定義」と「基本設計」の違いとは?基本の流れとポイントを解説
設計
設計では要件定義書を踏まえて、ソフトウェア開発の全体像と仕様を検討します。
この段階では入出力をはじめ、処理・テスト・運用の方法、今後の開発・テストやソフトウェア納品後の保守・メンテナンスに関わる事柄を検討する必要があります。
設計の方法としては、主に外部設計と内部設計があります。外部設計は、システムを外から見た場合に、どのように動かすことができるかを決めるものです。外部設計では要件定義書やヒアリングした内容を整理して仕様を設計します。クライアントのこの過程では、基本設計書の作成も必要です。
一方、内部設計は、外部設計で決めた動きを実現する方法を決定します。外部設計で作成した基本設計書を元にシステムやソフトウェアの内部構造を設計していくフェーズで、具体的にはシステムの機能やデータベースの設計、プログラム作成などの作業工程を決定します。
ソフトウェア開発において、実際に動かせる段階になるとユーザーから要望が出ることは少なくありません。そのため、視覚的に確認できる試作品の模型や見本をつくり、ユーザーのレビューを受けることで認識のズレがなくなり、より良い基本設計書の作成に繋がるのです。
開発
開発の段階では、設計書と仕様書に基づいてプログラムを実際に記述していきます。ソフトウェア開発においては、JavaやCといった言語が主流でしたが、開発手法によって現在では様々な開発言語が利用されています。
テスト
テストでは、作成したソフトウェアやシステムが基本設計書や仕様書通りに作動するかを検証します。ここで正常に動かなかった場合は、ソースコードにバグが発生している可能性があります。その際には再度デバッグを行い、バグを除去しましょう。この作業を何度か繰り返していくことで、プログラムが正常に作動するようになります。なお大規模なソフトウェア開発となると、検証するソースコードは膨大になるため、デバッグにも長時間を要します。
そして、このステップをクリアすると運用テストの段階に入ります。運用テストではユーザーが実際に扱うデータを元にして、システムが正常に作動するかを確認します。
納品
運用テストをクリアした後、クライアントへソフトウェアを納品します。
納品後はシステムの運用が始まり、システムの設計書・プログラム・運用マニュアルなども同時に納品されます。
運用保守
ソフトウェア開発は納品が済めば終わりではなく、納品後もシステム障害・メンテナンス・システムの機能追加などに対応します。なお、システムに追加機能が必要になった場合は、これまでに説明をしてきたソフトウェア開発と同様の手順を踏まなければなりません。
参考記事:
システム運用保守とは?仕事内容、役立つ資格を詳しく解説
ソフトウェア開発を成功させるために
ソフトウェア開発を成功させるには、プロジェクトマネジメントが重要です。プロジェクトマネージャーによる適切な計画と制御を行って実施されれば、スケジュールの確保や品質の担保、コストの抑制、外注の適切な管理などもクリアしていけるでしょう。
これらのプロジェクトマネジメントを組織を挙げて確実に実践していくには、プロジェクトマネジメントを含む組織プロセス改善のプロセスモデルが参考になります。自分たちのプロジェクトマネジメントの方法に内在するプロセスの問題点を発見し、見直し、実践し、組織に定着させていくのが、有効的な方法です。
まとめ
今回はソフトウェア開発の手法や開発の流れなどをご紹介しました。ソフトウェア開発を成功させるには、上述したようにプロジェクトマネジメントが不可欠です。プロジェクト管理にあたって重要なポイントをまとめた資料を用意しているので、お悩みの方はぜひ以下の資料をご覧ください。
- キーワード: