【図解】ソフトウェア開発の流れ
ソフトウェア開発の業務とは?
ソフトウェア開発とはソフトウェアを制作し、顧客にサービスを提供する一連のプロセスをいいます。ユーザーのニーズを把握する、マーケティング分析を行う、プログラムを組み合わせてソフトウェアを制作するといったステップもこれに含まれます。ソフトウェア開発で作られる製品は、以下の3つに分類できます。
- システムソフトウェア コンピューターを動かすために必要なソフトウェア。WindowsやLinuxなどのオペレーティングシステム(OS)、ファイルやデータの保存処理など。
- アプリケーションソフトウェア ユーザーの利用目的に応じた機能を持つソフトウェア。ゲームソフトやMicrosoft Officeなど。
- 組込みシステム 家電製品や機械等に組み込まれているソフトウェア。デジタル家電、AEDなどの医療機器の内部に組み込まれたシステムなど。
ソフトウェア開発の流れ
次にソフトウェア開発の具体的な流れを説明します。ソフトウェア開発は基本8プロセスあり、様々なステークホルダーが各プロセスで役割を担い(図1)、図2のような体制で開発プロジェクトを推進していきます。次章から各プロセスごとの業務内容についてみていきましょう。
<図1:ソフトウェア開発のフロー>
<図2:開発プロジェクトの体制図例>
1. 営業
まず営業担当者が、新規顧客や継続取引顧客の現行業務における改善点を見つけ出し、どのような解決策があるのか、またどのようなシステムを開発すれば業務運用にプラスになるのかという点を模索することから始まります。顧客と話をしながら仮説を構築し、システム導入について顧客が前向きな姿勢になってもらえるよう商談を行います。
2. ヒアリング・提案
次にプロジェクトマネージャーやシステムエンジニアも交えて顧客へのヒアリングを行うフェーズです。企業経営における中長期計画と現状を照らし合わせ、顧客が抱える課題を聞いていきます。 その後、ヒアリングをもとに顧客に課題解決策の提案を行います。顧客の経営方針に寄り添い、導入目的や得たい成果、適用範囲を明確にしながら、システムの内容、開発費用、開発期間、費用対効果、他社比較などについて検討し提案書に盛り込みましょう。また同時に開発側のプロジェクト体制を整え、提案します。提案後、詳細な見積もりを提示し、顧客の承認を得たら契約・受注となります。 契約後はプロジェクト管理手法「PMBOK」(Project Management Body of Knowledge)などを参考にしながら、スケジュールや各種管理方法(進捗・品質・コミュニケーション・課題/リスクなど)を記述したプロジェクト計画を作成します。
3. 要件定義
要件定義は、システム化する業務や必要な性能などを明確化し仕様を確定させるフェーズです。要件定義ではこの後に続く全ての工程において影響を及ぼすため、プロジェクト成功の可否を左右するフェーズと言えます。要件定義では「要件定義書」を作成し、下記3点を検討し記載します。
- 現行業務プロセスの把握 現行の業務プロセスを把握して技術上の問題点や課題を整理し、システム設計書を作成します。
- 顧客側と開発側の役割分担の明確化 顧客側と開発側の役割分担および相互に必要な業務タスクについて明らかにします。
- 新業務プロセス(解決策)の作成 顧客ニーズの実現施策を考え、新業務プロセス・設計に落とし込みます。予算や実現性の観点から今回の解決策に盛り込む・盛り込まなかった仕様も明確にします。
4. 設計
設計では要件定義書に基づいて、ソフトウェア開発のアウトラインや仕様を検討します。設計時に考慮すべき要素として、例えば下記の検討事項が挙げられます。
- 入出力(画面やデータベース等)
- 処理方法
- テスト方法
- 運用方法
- セキュリティ確保の方法
- 今後の開発
- テスト
- 納品後の保守メンテナンス
また設計の方法には「基本設計(外部設計)」と「詳細設計(内部設計)」があります。
- 基本設計 ソフトウェアやシステムを外から見た場合、どのように動かせるかを決めます。要件定義書をもとに操作画面や操作方法などユーザー向けの仕様を設計します。
- 詳細設計 基本設計をもとにシステムやソフトウェアの内部構造の設計を決めます。システム機能やデータベース設計、プログラムが作られるまでの具体的な開発工程について仕様書に落とし込みます。
5. 開発
仕様書や設計書に基づき、コンピューターが処理可能な言語でプログラムの記述を行います。必要に応じてパラメータ設定、データベースや他システムとのインターフェース開発も平行して行います。
6. テスト
テストでは、システムやソフトウェアが設計書・仕様書通りに動くかどうかを検証します。テストには次の4種類があります。
- 単体テスト 作成したプログラムを一つずつ単体でテストし正常に動作するかを検証します。個々のモジュール(部品)の機能や性能、運用性なども確認します。
- 結合テスト(統合テスト) 単体テストで確認した複数のモジュールを連結させ、不具合なく正常に動作するかを検証します。小さな結合から大きな結合まで、いくつかの段階に分けて実行します。
- システムテスト(総合テスト) 全てのプログラムとハードウェアを合わせてシステム全体のテストを行います。通常のバッチ処理、月次・年次処理など全てのサブシステムで想定される処理を一通り実施します。
- 運用テスト(ユーザーテスト) 顧客側が完成したシステムの納品を受け付けるか否か、その妥当性を判定するためのテストです。実際に扱うデータを顧客が使用しながら、システムの機能・性能などが目的や使用意図に合致しているか確認を行います。
7. 納品
顧客がシステム開発完了と承認した後、顧客へと納品されます。システムの実運用を開始するとともに、システムの設計書やプログラム、運用マニュアルを顧客に受け渡します。また一連の操作説明を開発側が行う場合もあります。 また、特にSaaS(Software as a Service)と呼ばれるパッケージ型のソフトウェアを販売する場合では、このタイミングから「カスタマーサクセス」といった名称の顧客フォロー担当者が関わることもあります。この担当者は、クライアントがスムーズに製品を使いこなせるようにサポートを行うことが主な目的です。
8. 保守
納品後には、システム障害やメンテナンスの対応をします。安定稼働するまでの一定期間は、システムの不具合などにも積極的な対応が必要となります。また運用開始後に制度改正や顧客から要望があった場合は、システムの追加開発に対応します。営業担当が再度対応し、提案等を行っていきます。 上述したものは一例であり、導入プロセスやスケジュールは企業やソフトウェアにより異なります。導入前と開発段階、導入後の運用を想定して念入りに計画しましょう。
ソフトウェア開発業特有の課題
ソフトウェア開発は上記のようにプロセスが多く、プロジェクトによっては長期間・大規模開発となる場合もあります。この章では、ソフトウェア開発業界で抱えがちな課題を見ていきます。
課題1:IT人材の確保
ソフトウェア開発業界は需要が伸び勢いがあるものの、それを支えるIT人材が不足しています。「IT人材白書2020」によると、IT人材が大幅に不足していると感じている企業は年々増えています(*1)。言語の種類やトレンドの移り変わりが激しく人材の育成に時間がかかるほか、他業種と比べ、労働時間が長いこと(*2)も、人材確保が難しい理由となっています。 ソフトウェア開発では、要件定義からテストまで多くの人員が必要となります。大手ソフトウェア開発会社でも、自社だけでは要員調達が困難なため、他社へ業務委託する場合が多く見られます。また、ソフトウェア開発会社の自社向けのシステム開発プロジェクトは、社外向けの顧客業務が優先されてしまうため、社内の人員をアサインすることが難しい場合もあるでしょう。
課題2:適切な工数・プロジェクト管理の難しさ
ソフトウェア開発は、多くのエンジニアやプログラマーがチーム体制で開発し、複数のプロジェクトが同時進行します。そのため「誰がどの案件で」「どの作業を行っているか」といった工数管理が煩雑になりがちです。
さらに要件定義以降のフェーズでは、必ずしも客先常駐である必要ではなく、持ち帰り開発やコストダウンを目的としたニアショアやオフショアとの分業も組み込まれる場合もあり、
プロジェクト単位の収支の把握に苦労することもあるでしょう。
ソフトウェア開発業向けのクラウドERP ZAC
ここまでソフトウェア開発業務、ソフトウェア開発の流れ、ソフトウェア開発業特有の課題について解説してきました。いわゆるオーダーメイドの業務が多く、社内外の複数人が関わるソフトウェア開発業において、適切な工数管理やプロジェクト管理は非常に重要です。これらの課題をそのままにしておくことは、「社内のリソース管理が上手くできず、決まったエンジニアに負荷が集中してしまう」「利益率の低いプロジェクトを複数抱えてしまい、いつも忙しいのになぜか利益が上がらない」といった、更なる問題を抱えることもあるでしょう。
そのような状況に陥らないためにも、ソフトウェア開発という業務に適した工数管理やプロジェクト管理を行いましょう。システムを自社構築するという手段もありますが、上述のように人材・リソースの確保が困難な場合もあります。その場合、他社のシステムを導入するのも一つの手段と言えるでしょう。 本ブログを運営する株式会社オロが提供するクラウドERP「ZAC」は、ソフトウェア開発業の業務効率化を支援するシステムです。
リアルタイムなプロジェクト管理、プロジェクト別や工程別の工数管理に強みを持ち、ソフトウェア開発特有の課題解決を支援します。
- 売上に複数の原価を紐づけることで、プロジェクト別の正確な収支を把握できる
- 工数と勤怠の一致により、入力・集計を効率化
- プロジェクト実行予算と実際原価の差異分析が可能
- ソフトウェア開発業における様々な業務形態に対応
上記のようなソフトウェア開発業の商慣行、プロジェクト管理の効率化する多数機能を搭載しており、豊富な導入実績があります。 詳細はZAC製品サイトをご覧ください。