システム開発は、一連の作業の流れによって進められます。本稿では、システム開発の各工程における作業内容の詳細と工程管理方法について説明します。システム開発工程の考え方は、どのような開発手法を選択するかにより異なります。手法としては、従来型開発手法であるウォーターフォール型開発と、新しい手法であるアジャイル型開発に大別できます。
ウォーターフォール型のシステム開発の工程
金融システム、鉄道や航空会社の運賃・座席予約システムなどに代表されるように、現代社会は、多くのコンピュータ・システムにより動かされています。
これらは10〜20年以上稼働しているシステムであり、多くは、ウォーターフォール型で開発されたものです
ウォーターフォール型開発とは
ウォーターフォールとは、水が上から下へ流れることを言います。川などの水の流れは、上流から下流への一方向であり逆流することはありません。このように、上流の工程から下流の工程へ、一方向にシステム開発を進めていくのが、ウォーターフォール型開発です。
ウォーターフォール型開発の工程
ウォーターフォール型開発は、以下の工程を順に行います。
- 要件定義
- 設計
- プログラミング
- テスト
- リリース・運用
それぞれの工程で行う作業内容を詳しく見ていきます。
(1) 要件定義
現状の業務の調査・分析から、システムに必要な機能・性能・要求事項を決める工程です。この工程で、プロジェクト全体の計画も作成されます。この段階で、システム仕様に漏れがないようにすることは重要です。
(2) 設計
設計工程は、外部設計と内部設計の2段階に分けられます。外部設計は、ユーザー・インタフェースを設計します。この工程では、ユーザーにとっての使いやすさを最重視します。
外部設計の後、システムの内部設計を行います。この工程では、データベースの構造やプログラムの処理の流れ、プログラム間のデータ受け渡しの方法など、プログラミングに必要な詳細設計書を作成します。ここでは、開発者にとっての正確さ・明瞭さを重要視します。
(3) プログラミング
この工程では、開発者が詳細設計書に従って、プログラミング言語でプログラム・コードを書いていきます。言語には多くの種類がありますが、開発するシステムによって、言語を選択することが一般的です。以下に代表的なプログラミング言語を挙げます。
・C:最も汎用的で、OSや組み込みシステムから、大規模なシステム開発まで使われます。 機械語に近く処理速度が要求されるシステムに適しています。
・Java:Googleのシステムなどの大規模システムから、Webアプリケーションやゲームまで汎用性が高い言語です。開発ツールなども充実し使いやすい言語です。
・Python:AI開発・機械学習・ビッグデータ分析などに使われ、構文がシンプルで分かりやすいことから、最近最も人気がある言語です。
(4)テスト
テスト工程も上流から下流へ、単体テスト・結合テスト・総合テストに分かれます。
単体テストは、プログラム単体での動作確認を行います。結合テストでは、関連するプログラムを連動させ、データのやり取りが正常にできるか確認します。総合テストは、システム全体が正常に動作するかを最終的に確認します。テスト工程は不具合を発見し、リリース前に修正する重要な工程です。
(5)リリース・運用
総合テストが完了したら、システムをリリースし、実環境での運用フェーズに入ります。
リリース後も、テストで修正しきれなかった不具合が発生することがしばしばあります。不具合が発生すれば、開発者は迅速に修正を行わなければいけません。
ウォーターフォール型開発における工程管理
工程管理とは、工程の進捗状況やリソースの配分状況を監視し、計画通りプロジェクトを進めることをいいます。ウォーターフォール型開発では、リリース時期から逆算して上記工程の実行計画を立てます。この計画に基づいて作成されるのが、工程管理表です。
工程管理表を作成し、プロジェクトの進捗を管理するのは、プロジェクトマネージャーの役割です。工程管理表の精度が高いほど、プロジェクト遅延のリスクは減少します。精度の高いものを作成するには、工程内の作業内容を機能単位で細かく分けることが重要です。
作成にはスキルが必要ですが、工程管理の専用ソフトウェアを導入することにより一定以上の精度で工程管理を行うことができます。
実際に工程管理表の通りプロジェクトを進捗させていくためには、PDCAを回していくことが必要です。障害やリソース不足など、さまざまな問題がプロジェクトを遅延させます。問題が発生したとき、現象を正確に把握して原因を突き止め、迅速に解決策を講じなければいけません。
アジャイル型のシステム開発の工程
従来のウォーターフォール型開発に対して、21世紀に生まれ急速に普及してきた新しいシステム開発手法が、アジャイル型開発です。
アジャイルとは
アジャイルとは敏捷とか素早い、という意味です。アジャイル型開発は、変化が激しいビジネス環境に対応できるような機敏な開発手法です。
アジャイル型開発では、最初におおまかな要求事項のみを決め、小さな機能ユニットごとに実際に動くソフトウェアを短期間で開発します。そのソフトウェアの動作をテスト・検証し、その結果を反映して改善する、というサイクルを繰り返すことで、柔軟で持続的なシステムを開発することができます。
アジャイル型開発の工程
アジャイル型開発の一つのサイクル中には、計画・設計・実装(プログラミング)・テストの工程が含まれます。
それぞれの工程内で行われる作業内容は、ウォーターフォールと共通していますが、異なるのは1サイクルが完了した後、次のサイクルが始まる、という点です。そしてサイクルごとにリリースが繰り返されることになります。
アジャイル型開発における工程管理
それではアジャイル型開発では、リリースまでのスケジュールが全く見えないのかといえば、そうではありません。アジャイル型開発では、システムの機能の中で優先順位を設定します。また、各サイクルの中でも、実装すべき機能に優先度を設けます。これをバックログといいます。
アジャイル型開発では、プロジェクトマネージャーはバックログを元にプロジェクト全体のスケジュールを把握し、進捗を管理します。バックログは、必要に応じて組み替えられ、開発チームメンバー全員がそれを共有します。
システム開発における工程管理の重要性
ウォーターフォール型とアジャイル型では、工程の捉え方やスケジュール管理方法が異なります。しかしいずれの場合も、プロジェクトマネージャーがプロジェクト全体を把握し、リリースに遅れが生じないよう進捗を管理することは重要です。それは、ユーザーにとってのシステムの価値を損なわないことに繋がるからです。
プロジェクトマネージャーは、開発チーム内でPDCAを回し、メンバー全員で情報を共有し、課題克服にチーム一丸となって取り組む姿勢を常に示すことを心がけましょう。
また、システム開発を外注する場合も、工程管理がしっかりしている経験豊富な会社を選ぶことが重要です。システム開発の外注先選びでお困りの方は、弊社までお気軽にご相談ください。
当社がこれまで支援してきた開発事例の共有、企画・コンサルティング、要件定義や実際の開発支援まで包括的にサポートさせていただくことが可能です。
システム開発を失敗しないために、弊社が相見積もりの取得までをサポートさせていただくことも可能です。むやみな営業電話などは決して行いませんので、まずは無料のご相談をお待ちしております。