IT人材を保有しない企業のほとんどは、システム開発を外部の会社に別注しています。しかし、システム開発の工程について詳しく理解している担当者は以外に少ないのではないでしょうか?
システム開発工程について理解できていれば、プロジェクトをスムーズに推進する上で、各工程において担当者がどのようの関わる必要があるのか、自ずと見えてきます。
システムは開発会社だけで構築するものではなく、ユーザ企業(クライアント)も参加して同一プロジェクトの体制を作ることが、より良いシステムを構築するための必要条件になります。
クライアント企業の担当者は、システム開発の種類や工程について十分に理解しておくことが成功の秘訣と言えます。
本記事では、一般的なシステム開発手法と開発工程についてご紹介し、システムの開発や構築のプロジェクトをスムーズに進めるために必要なポイントについてご案内します。
システム開発手法
まずはシステム開発の手法からご紹介します。
大まかに分けると、システム開発手法には「ウォーターフォール開発」と「アジャイル開発」の2種類があります。
ウォーターフォール開発は古い手法、アジャイル開発は現在主流の手法というのが一般的な認識です。
ウォーターフォール開発とは
ウォーターフォール開発は、上流工程から下流工程まで一連の流れでシステム開発を行うための手法です。滝の水が上から下に流れる姿にちなんでいます。開発に必要な要素を取り出し、1~100まで手順通り開発工程を進めるという手法です。
主な特徴は進捗管理が容易であることと、各工程において成果物が設けられていることです。ウォーターフォール開発は計画通りに開発を進めることが基本なので、プロジェクトが現在どの段階にあるか一目でわかります。進捗に応じてリソースを割り振り直すことができるというメリットもあります。
各工程において成果物が設けられている理由は、ウォーターフォール開発が「後戻りできない開発手法」だからです。
1~100まで手順通りに進めていくので、後工程で問題が発生すると前工程まで戻り同じ作業を繰り返し行わなければなりません。そのため、各工程に成果物を設けて、品質を確保してから次工程へと進むという方式がとられます。
比較的スピードを優先するシステム開発が多い現代では、ウォーターフォール開発の数自体は減ってきていますが、大規模で長い期間を要する開発案件などでは、この開発手法が現代でも最適な手法として広く採用されています。
アジャイル開発とは
アジャイルには「俊敏な」という意味があり、文字通りスピーディな開発工程を持つことで生産性を高めるための開発手法です。「イテレーション」と呼ばれる短い開発期間を設けて、その中で要件ごとの開発を行っていきます。
システム開発の最初から最後までを1~100まで手順通りに行うのがウォーターフォール開発ならば、アジャイル開発は細かい開発サイクルをいくつも重ねて最終的な成果物を完成させていきます。
変化に富んだサービス仕様であったり、完成形がそもそもなく、段階的にエンハンスを続けるプロジェクトには絶大な効果があります。
その反面進捗が管理しづらいという傾向があるため、場合によっては総合的な開発期間が延びてしまう危険性があります。
≪スクラム開発≫
スクラム開発とはコミュニケーションを主体としてアジャイル開発の一種です。高頻度にミーティングや進捗会議を行い、チーム全体で情報を共有することで問題の早期発見と生産性の向上、ならびにシステム品質の向上を目指します。
ただしスクラム開発を取入れるためには開発環境に前提条件が必要になることが多く、プロジェクトの推進には考慮が必要です。
≪DevOps≫
DevOpsとは開発チームと運用チームが協力体制を取り、スピーディかつ信頼性の高いシステム開発を目指すための手法です。
2009年に米メディア企業のオライリーが主催した「Velocity 2009」というカンファレンスにて、Flickrのエンジニアが紹介した「10+ Deploys Per Day: Dev and Ops Cooperation at Flickr(1日に10回のデプロイ:Flickrにて開発とオペレーションの協力)というセッションから端を発して浸透しました。
システム開発工程
続いてシステム開発工程を細かく分割して解説していきます。あくまで基本工程なので、システム会社によってさらに細分化された工程を持つケースもあります。①システム企画
クライアントからシステム開発依頼があった段階で企画を作成します。システムの主な概要、開発期間、開発費用などを記載したものです。
この時点では契約に至っていないので、システム要件を掘り下げると開発期間や開発費用が変動する可能性があります。あくまで目安として捉えましょう。
②要件定義
契約を締結するとこれから構築するシステムの要件を定義していきます。この要件定義で担当者が心がけるべきことは、要件を余すことなく引き出すことです。
システムに関係するエンドユーザーを巻き込んで必要な機能などを定義するため、システム会社からのヒアリングには協力的な姿勢を見せましょう。
③概要設計
要件定義が完了するとシステムと大まかな概要設計に移ります。
ここではシステムのUI(ユーザーインターフェース)や具体的な機能、入出力する帳票などを設計していきます。
④詳細設計
クライアントが持つビジネス課題を解決するために機能要件を詳細まで設計していきます。
ここでの決定事項を具体的なプログラムに落とし込んでいくため、要件変更がある際はこの時点ですべて顕在化すると開発がスムーズに進むでしょう。
⑤プログラム設計
各プログラムに関して一つ一つの構成や処理手順などを細かく設定していき、プログラムを記述するための骨子を設計します。
⑥プログラムコーディング
プログラムを記述することをコーディングといいます。コーディングでは100%の完成度を目指すのではなく、70%~80%の完成度で単体テストを行い早急に問題を検出して、微調整を加えていくことでシステムの信頼性を確保できます。
⑦単体テスト
プログラム単体のテストです。
多くの場合はプログラムのコーディングが完了した時点でテストを行いその動作を検証します。問題があれば修正を加えていきます。
⑧結合テスト
機能としてひとまとまりのプログラムを連携してテストします。
各機能がビジネス課題に決に結びついているかを確認することが大切です。
⑨システムテスト
各機能の結合テストが完了するとシステム全体としてのテストに移行します。
機能と機能の連携が正しく行われているかの確認をして問題があれば修正します。
⑩運用テスト
実際にエンドユーザーにシステムを使ってもらいその検証データをもとに行う最終テストです。
この段階で問題をすべてクリアしていればシステムリリースに移行します。
⑪リリース
運用テストをクリアすれば晴れてシステムリリースです。
ただし、リリース後に問題が発生する可能性もあるため要注意です。
⑫運用保守
システムリリース後はシステムの運用保守を行い、安定した稼働を目指します。
問題が発生すればシステム会社が対応し修正を加えていきます。
以上が細かいシステム開発工程です。
まとめ
クライアント側の担当者がシステム開発の担当者とプロジェクトを進める中で、この開発工程を把握していることはとても重要で、プロジェクトの成否にも大きく関わってきます。
システム会社に開発を丸投げするのではなく、現在の進捗状況や開発工程のフェーズを把握しつつメンバーとして一緒になってプロジェクトを推進していくという姿勢を持ちながら、最適なシステムが構築されることを目指すべきではないでしょうか。
そのためにも、システム開発を行う上でどういったプロセスがあり、目的に合わせてどの開発方法を採用すると良いかを吟味することが非常に大切です。
システム開発会社の選定の際にも、どういった手法を得意としているか?と言った点も判断基準の1つにするとプロジェクト体制が組みやすくなります。
是非、システム開発案件を成功させるために、こういった開発工程や種類についてもご確認ください。