【虎の巻】システム開発をスムーズに進めるには?トラブルを防ぐための開発工程毎のポイント
ITを活用したビジネスモデルの変革を目指したDXというキーワードが注目を集めています。また、新型コロナを背景に非接触ビジネスが求めらるようになりました。これらを背景に、システム開発はその重要性を高めてきています。
システム開発は、本来の意味はIT技術を使うか使わないかを問わず、仕組みを構築することです。しかし、現在では一般に情報システムを開発することを意味していますので、今回のブログではその慣習にのっとって情報システム開発をシステム開発と定義して話していきます。
システム開発は、ビジネスの効率化、時間とコストの節約、データの迅速かつ正確な処理の支援など、ビジネスに多くのメリットをもたらします。ビッグデータという言葉が一般的になってきた今日、そういったデータを扱う情報システムの開発がビジネスの要といわれ、多くの企業でIT戦略が重要視されるようになってきました。
システム開発のニーズが増す中、システム開発の工程に関する知識は、高品質の製品を低コストで短時間で作成するために不可欠です。システム開発工程理解することで、システム開発をよりスムーズに進め、よりニーズにマッチしたシステムを開発するためにはどんなタイミングで、どんなコミュニケーションをとればいいのかが理解できます。
今回の記事では、システム開発工程そのものを解説するのみでなく、高品質で効率的な生産プロセスを実現するために必要なことを解説していきます。
システム開発と開発工程
システム開発とは、業務を効率化、最適化するためにIT技術を駆使して、コンピューターのシステム、仕組みを構築することです。もう少し抽象的にいうと、さまざまなソフトウェアを作り上げて、ユーザーのニーズ、アイデアを実現することです。
開発工程とは、システム開発で実施するプロセスの集まりのことです。例えば、料理を作る時に材料の準備、手順に沿った調理、料理の盛り付けといった手順があるのと同じようにシステム開発にも手順があります。一般的に、システム開発は以下の流れで進むと整理されています。
・要件定義(要求定義)
・基本設計
・詳細設計
・開発
・検証
- 単体テスト
- 結合テスト
- 総合テスト
- 受入テスト
・リリース
・運用・保守
開発工程で実施することと各工程での注意点
システム開発の開発工程の流れに沿って、各工程で実施すること、知っておくべきことをご紹介します。
要件定義(要求定義)- Requirement Definition
要件定義は、委託側のニーズをヒアリングし、開発するシステムの範囲を明確にする工程です。システム開発の目的、業務要件、機能要件、セキュリティ面や操作性などの非機能要件、対応ブラウザやOSなどの仕様を決定します。そして、それらの項目を要件定義書というかたちで書面に落とします。
この工程で重要なことは、システム開発の目的を明確にすることです。実現したい内容を可能な限り具体的に考えておくことで、システムの範囲を委託側と受託側で明確に合意することができます。実際に完成したシステムが想定していたシステムと違うことで問題となることがあります。システム開発の目的や実現したい内容を具体的に考えておき、要件定義書に実現したいことが抜け漏れなく記載されているかを確認することでこうした問題を防ぐことができます。
基本設計 – Basic Design
要件定義で決まった内容をもとに画面とその動き、帳票などのユーザーインターフェースを設計する工程です。画面一覧、画面設計、帳票設計、データベース設計、サーバー設計、外部とのインターフェース設計などを機能単位で設計し、基本設計書に記載します。
この工程で重要なことは、システム開発の目的に立ち返って、ターゲットユーザーにどのように操作して欲しいかを考えることです。システムの利用者が使いやすくて見やすいと感じるシステムがどのようなシステム化を考えながら、画面のレイアウト、操作方法、帳票類の書式、データベースの構造などを決めていくことが開発したシステムがユーザーに受け入れられるようにするためには非常に重要になります。
詳細設計 – Detail Design
基本設計は機能単位であるのに対し、詳細設計はより細かいプログラム単位で処理の細かい仕様を決定する工程です。各プログラムの機能設計、データフロー図、ファイル設計などが記載される詳細設計書を作成します。
この工程で意識するべきことは、定例ミーティング等を通じて定期的に開発会社とコミュニケーションをとるようにすることです。詳細設計はプログラミングのみに必要なものと考えて、内容を確認しないユーザーもいますが、詳細設計は処理を規定する大事な工程です。開発会社によってはユーザー側に確認や相談をしないまま進めてしまうケースもあります。その場合、実際に使った時に考えてもみなかった挙動を示すリスクもありますので内容を確認するか、必要に応じて開発会社に説明を依頼することをおすすめします。
開発 – Coding
詳細設計をもとにプログラム言語を用いて画面やバッチなどの機能をプログラミングして、システムを実際につくっていく工程です。この工程では、「コーディング規約」に従ってプログラムのソースコード作成していきます。
この工程で気を付けるべきこととしては、開発会社と進捗状況を定期的に確認する機会を設けることです。委託側にとって開発の進捗状況が見えにくい工程のため、納期に対してどのような状況かを明確に把握していくことが重要となります。定期的なミーティングの他、Backlog等のプロジェクトの進捗をトラッキングできるツールを用いて進捗を可視化する方法もおすすめです。
また、稼働後のアップデートやメンテナンスを考慮して、コーディング規約に沿ってプログラムを作成することで保守性を担保することも重要です。コーディング規約は、ソースコードを書く際の共通の決まりごとをまとめたドキュメントです。コーディング規約を定めてそれに沿ってプログラムを作成すれば、誰でもプログラムを理解しやすくなりますので保守性を確保することができます。コーディングのルールは生産性の向上にも関わる重要なトピックですので、ぜひ以前投稿した【必読】生産性と品質を上げるクリーンコードとその浸透のさせ方もあわせてご覧ください。
検証 – Testing
検証工程は単体テスト、結合テスト、総合テスト、受入テストの4つの小さい工程に分かれます。
(1) 単体テスト
コーディング後、詳細設計書やソースコードから、プログラム単体のテストケースを作成し、テストケースに沿ってプログラムの動作を確認します。
(2)結合テスト
単体テストが終わった複数のプログラム(モジュール)を組み合わせた状態で、設計通りに動作することを確認します。
(3) 総合テスト
要件定義で作成した業務フローをもとにテストの流れ(テストシナリオ)を作成し、機能要件と非機能要件を満たしているかを確認します。総合テストが終わると、システム開発会社から委託側にシステムが引き渡されます。
(4) 受入テスト
実際の業務の流れに沿って利用し、要求通りに動作するかを検証します。検証後、テスト結果とテスト報告書を作成します。
検証工程で特に実施すべきことはバグ(不具合)の管理の徹底です。それぞれのテストでは合格基準が設定されるため、小さなバグはスルーされることもあります。しかし、システムは複数の機能を繋げることで開発されるため、一つの小さなバグがシステム全体に大きな影響を与える可能性もあります。そのため、この工程では管理台帳をつくり、見つけた不具合については管理台帳へ確実に記載し、記載した不具合はクローズするまでフォローしていくことが重要となります。
リリース – Release
本番環境で使えるように設定する工程です。
この工程では、特に古いシステムを使っていて、旧システムから開発したシステムに切り替える作業(移行 - マイグレーション)が必要になる場合には注意する必要があります。移行時には想像もつかないトラブルが起きることもあります。そのため、失敗した場合のリスクを考慮し、一斉に移行するのではなく、段階的に移行することでリスクをおさえる方法がおすすめです。段階的な移行を進めるにあたり、手順書を作成しておくとスムーズに進めることができます。また、手順書を作成する際、業務に支障が出るほどのトラブルが起きた場合、元のシステムに至急戻す必要が出ることもあるため、その手順も確認しておきましょう。
NTQは移行を旧システムを作り替えて移行するプロジェクトも数多く行っています。マイグレーション × オフショア開発のページにて、簡単に過去の経験をまとめていますので是非ご覧ください。
運用・保守 – Maintenance
不具合があった場合の修正、新規・追加機能の開発を行うため、システムを監視する運用・保守の工程に進みます。システムが稼働していることを確認する作業を運用、不具合が起きた時に対応する作業を保守と呼びます。
運用では、システムのログのチェック、サーバの起動・停止等、日々の管理を行います。システムが担う業務が滞りなく行われるようにすることが目的です。
保守では、システムの不具合修正、予測、調整等、システムが問題なく動くように根本的な問題解決に努めます。システムに異変があった際には手を加えることで運用同様にシステムが担う業務が滞りなく行われるようにします。
この工程では、運用では不具合にすぐに気付くようにチェックリストを作成しておくこと、保守では異変があった際の対処法を決めて手順書の形式でまとめておくことが重要です。
まとめ
システム開発の工程と各工程で注意するべきポイントについて説明してきました。システム開発を成功させるには、システム開発の手順を理解し、今の工程にあわせた注意点に目を光らせながら開発会社とコミュニケーションを図っていくことが重要となります。
開発を成功させるという点では開発チームの組成の仕方も重要になります。開発を委託する際のチームの考え方については、TEMって何?アウトソーシング先進国のアメリカ発の新しい考え方!という記事にて最先端の考え方を解説しております。
また、今回はシステム開発一般の注意点を記載いたしました。オフショア開発に焦点を充てた類似の記事では、【実体験】オフショア開発を活用される際の注意点という記事がございます。オフショア開発の流れと注意点というダウンロード資料も用意しておりますので、是非ご参考にしていただきたく思います。
その他にもシステム開発のお悩みがあれば、無料でご相談いただけますので、お問い合わせよりお気軽にご連絡ください。