コラム

  • 2021.08.06
  • 開発
  • #基礎知識
  • #開発手法

ソフトウェア開発とは 種類や手法、開発の流れやコツについてわかりやすく解説

新規事業展開や既存事業の再編などの一環としてソフトウェア開発案件を予定する企業の多くは、社内でまずITプロジェクト化し、業務に明るい人員を担当者としてアサインして、推進することになるでしょう。なかには「正直どこから手をつけたらいいかわからない」と悩む担当者も少なくはないはずです。誰しもが、システムエンジニアの経験があるというわけではないからです。

このコラムでは、35年ほどにわたり、多くの企業様のソフトウェア開発を支援してきた筆者自身の経験をふまえつつ、システムに苦手意識をおもちの方にもわかりやすく、ソフトウェア開発についてご説明いたします。

ソフトウェア開発とは

みなさんは、どこまでが「ハードウェア」で、どこからが「ソフトウェア」なのかイメージはつくでしょうか?
ハードウェアは形があり目に見えるもの、例えばスマートフォンの端末です。これに対して、ソフトウェアは形がなく目に見えないものです。例えば、OS(オペレーション・システム)のように端末を動かすための制御と、「アプリ」を動かすための基本となる制御にあたるのが「基本ソフトウェア」です。一方、インストールやアンインストールを容易にできるような常用できるアプリは「応用ソフトウェア」といいます。

ハードウェアとソフトウェアの区分け説明図

ソフトウェア開発による成果物までの工程は、開発するものが基本ソフトウェアなのか、それとも応用ソフトウェアなのかによって大きく異なります。基本ソフトウェアにはハードウェアの制御が含まれるのに対して、応用ソフトウェアにはそれが含まれないからです。
さらに、製造系・制御系のソフトウェア開発の場合には、基本ソフトウェアを独自に設計・開発する、「組み込みシステム開発」というケースもある点で両者は異なります。

ソフトウェア開発の種類

ソフトウェア開発の種類は大きく次の3つに分類されます。
なお、【業務フローとソフトウェアを組み合わせて業務処理を行う仕組み全体】は総じて「システム」といわれます。

Webシステム開発

Webシステム開発の特徴は、UI(User Interface:ユーザーインターフェイス)がWebブラウザを利用するソフトウェア開発、といえます。
また、この開発には、Webサーバーなどにシステム本体を集約できることでメンテナンス性が極めて高いというメリットがあります。
Webブラウザを利用するオンラインゲームの場合、PC向けはWebブラウザをUIとするのに対し、スマートフォン向けはアプリのUI上でログイン制御を行ったのちに、コンテンツ自体はWebブラウザのUIをレスポンシブデザイン化して画面に表示するものも多いようです。
このように同じゲームでも、PC向けの方がWebブラウザをUIとするためWebシステム開発に分類されるということになります。
もちろん、ゲーム以外にもこのようにUIに応じて分類されるケースがあります。(例:「国税電子申告・納税システム(e-Tax)」)

アプリケーション開発

スマートフォンのアプリを介するものは「アプリケーション開発」に分類されます。
具体的には、iPhoneであれば「iTunes」や「iMovie」、Androidであれば「Google ドライブ」、Microsoft Office365であれば「Word/Excel/PowerPoint」、「OneDrive」、「Skype」などがアプリケーション開発に分類されます。
Webシステム開発とは違い、更新をアプリケーションに対して定期的に行う必要があるため、起動時に更新データが配信サーバーにあるかどうかをチェックする機能を組み込んでいるアプリケーションが多いのが特徴です。

組み込みシステム開発

テレビ、洗濯機、冷蔵庫、エアコンといった家電製品、自動車、製造ロボットなどさまざまな機器のなかにその動きを制御するために組み込まれているシステムを開発するものが「組み込みシステム開発」に分類されます。

近年では、IoT(Internet of Things)、Industry 4.0といったキーワードをよく耳にするようになりましたが、このキーワードは組み込みシステムにも関連しています。
例えば、外出時にスマートフォンで自宅の暖房の電源を入れるとき、あるいは工場で製造ロボットが組み立て作業を行っているときなど、その動作は組み込みシステムによって動いています。

ソフトウェア開発の主な手法

ソフトウェア開発の代表的な開発手法には「ウォーターフォール型」「アジャイル型」の開発があります。ここではそれぞれに特徴やポイントなどをご紹介します。

ウォーターフォール開発

ウォーターフォール型は「ウォーターフォール=水が落ちてくる」という意味のとおり、上流から中流、下流へと一方向の水の流れのように開発工程を進めていく手法です。
下図のように機能をわけて、決まった期間で上流から下流の工程を進めていくため、工数積算や人員確保もしやすく、品質的にも一定レベルを満たすことができます。要件さえブレがなければ、進行度を簡易に測ることが可能です。

ウォーターフォール開発の説明図

ウォーターフォール型では、工程が企画~設計~実装(コーディング)の場合、チーム全体でまず「企画」を決め、それから「設計」を行い、「設計」がすべて終わったら「実装」に移るというような流れで開発が進みます。

下図の上から下に向けた矢印で示すとおり「時間の流れ」は「作業工程の流れ」をあらわしています。したがって、万が一、途中で手戻りや設計の見直し、さらには企画の見直しが発生した場合、時間=作業は巻き戻しすることができず、作業スケジュールが大きなダメージを受けます。

PM(プロジェクト・マネージャー)にとっては全体進捗を把握しやすく一定の品質も担保しやすいのがメリットのウォーターフォール開発ですが、万が一の手戻りの時を考えると、上流段階からシステム利用者と開発者とのあいだで、要所、要所で認識合わせをしていくことは非常に重要なポイントとなります。

ウォーターフォール開発のポイント説明図

アジャイル開発

アジャイルとは「機敏に」「素早く」という意味があります。アジャイル開発は、小さな機能ごとに上流から下流までの工程を進めていく手法で、ウォーターフォール型ではすべてができあがらないと見えなかった結果も、機能ごとに確認できるという特徴があります。また、一ヶ月程度で企画からテスト検証まで行い、次の機能に取りかかるというようにスピード感のある開発手法です。

アジャイル開発の説明図

アジャイル開発では下図のように、機能ごとに工程をすすめて確認しつつ、並行して次の機能に着手するという企画~設計~実装~テストのサイクルを繰り返していくことで、全体スケジュールを大きく縮めた開発を行うことができます。
品質は都度、チェックが求められますが、PMは全体機能の品質の水準を一定以上にできるよう細かくチェックを行い進めることがアジャイル開発を成功させる秘訣といえます。

アジャイル開発のポイント説明図

ソフトウェア開発の流れ

ソフトウェア開発の全体の流れを把握するためによく用いられるのが「V字モデル」という概念図です。ここではそのモデルを用いてソフトウェア開発の流れを説明します。

V字モデルの説明図

作業プロセスは「ヒヤリングの実施」「要件定義」「設計」「開発」「テスト」の5つに分類されます。それぞれ順をおって説明してきます。

ヒヤリングの実施

ヒアリングでの成果物を説明した表

「要求定義書」はシステム利用者のニーズを可視化した資料として、システム開発で要求する仕様を業務シナリオ上の観点から定義したものです。

例えば、脚本でアクター(配役・登場人物)の設定とシナリオ(目的・目標に関する台本)をしっかりつくり込んでおけば本番の舞台で進行にブレが生じることはないかと思います。

「要求定義書」も同様です。
記述されている内容にそって、システム開発会社は内容を整理したうえで、次の作業プロセスとなる要件定義を組み立てていきます。

要件定義

要件定義での成果物を説明した表

要件定義は、前述の要求定義に記述された要求仕様にそって、実現化するための取り決め(定義)を行います。要件定義の構成は下記のとおりです。

業務要件

システム利用者が要求する業務の在り方と運用をふまえて業務手順や入出力する情報(画面、帳票、ファイル)などを定義したもの

システム要件

機能要件
業務要件を実現するためにシステムに実装する機能を定めたもの
(例)機能、画面、帳票、データ、ユーザーインターフェイス、外部インターフェイスなど

非機能要件
機能要件以外の要件で、規模・性能、信頼性、拡張性、事業継続性、セキュリティ、移行、運用などについて定めたもの
(例)規模、性能、信頼性、権限ロール、情報セキュリティ、ハードウェア構成、ソフトウェア構成、ネットワーク構成、アクセシビリティ(使い勝手、利用しやすさ)など

要件定義した内容は、システム利用者と開発者の間で確認し、双方合意が取れたのち、開発が着手となります。

設計

設計書は「基本設計書」と「詳細設計書」にわかれます。
手順としては、まず「基本設計書」を作成します。次に、「基本設計書」にて確定したことに基づきさらに細かい内容を「詳細設計書」に記述します。

設計での成果物を説明した表

開発

開発での成果物を説明した表
C#.Net(MVS)でUIからAjaxでリクエストを渡して処理を行いブラウザに返す開発例の説明図

簡易でありますが、このような設計があった場合、Controller、Model、Viewの3種のパーツが必要です。これ以外にも共通関数、ライブラリファイル、画面でデザインを制御するCSS、ユーザーアクションに呼応するjQueryで動きを制御、また必要に応じたプラグインの利用、データベースへの接続モデルやエンティティというようにさまざまな動きやセキュリティを考慮したパーツがあり、一定以上の品質を担保する処理になります。

テスト

システム開発でのテスト項目は大きくわけて4つです。

・単体テスト:UT(Unit Test) 開発パーツ単位で行うテストです。
・結合テスト:Ita/Itb(Interface Test a:Inside(内部)/b:External(外部))
・システムテスト:ST(System Testing) 総合テストともいいます。
・受入テスト:UAT(User Acceptance Test) システム利用者が実際にオペレーションしながら最終確認するテストです。

テストでの成果物を説明した表

リリース

受入テスト(UAT)が完了したものがリリースされます。
リリースの前には、念のため次のような事項について最終確認を行うことも有効です。

・ファイル配置や最終設定で抜け漏れがないか?
※UATは本番環境で行うことが望ましい。
・UATで使ったデータ(マスターテーブル、トランザクションテーブルなど)のまま残していないか?
※データベースでリリース前の確認の効率化、リスク回避のため、開発用、検証用、本番用と物理領域をわけておくことが望ましい。
・検証環境はデータを空にしてプログラム自体を残してあるか?
※この先、トラブルが発生したときの対応のために検証環境を残しておくことが望ましい。
・サーバー側の定期バッチのスケジュールは本番環境の予定時間になっているか?
・最終成果物はファイル納品以外に、改変不可(電子保存の三原則、真正性・見読性・保存性)であることのために追記負荷のメディア(DVD-Rなど)で納品できるようになっているか?

運用・保守

リリースが無事に終わると開発自体は完了しますが、実は、ソフトウェア開発の本領発揮ポイントは次の項目、「運用・保守」からだといってもよいでしょう。

このコラムを書いているとき、こんなニュースが飛び込んできました。
「Webブラウザ『Internet Explorer 11』(IE 11)デスクトップアプリケーションのサポートを2022年6月15日に終了することをMicrosoft社が発表」

技術は日々進歩しています。端末の新モデルがお披露目されれば、このように現行でもっとも古いOSが動作保証外となっていくことは常に起こります。
「Webアプリケーション開発」はWebブラウザをUIとしていますので、OSが変わり、Webブラウザの規格も変われば、表示上の動作や整合性を確認する必要性が生まれ、変更によってどのような問題が出るのか、どのくらいの箇所が影響を受けるかといったことを検証する必要があります。
また、Webブラウザで脆弱性が見つかれば、その検証も行わなくてはなりません。いずれにしても、実際にシステムを使っている方が、顧客や取引先という場合はその方々への配慮も欠かせません。
システムを利活用しながら、日々のビジネスを安定的に稼働させるためには、システムの運用・保守計画を立て、実行していくことも必要です。

ソフトウェア開発と工程ごとのコツ

これまでソフトウェア開発の種類や手法、一連の流れについて解説してきました。最後に、ソフトウェア開発のコツや、要件定義、設計、テストの工程のコツについても触れておきます。

ソフトウェア開発のコツ

修正には手戻りが発生して一定の時間と工数がかかりますが、共通で処理できる関数やライブラリを活用することで時間を短縮することができます。
また、メンテナンスしやすいようにソースコード内で変数を変えることをせず、外部ファイル(設定ファイル、configファイル)でフラグを切り替えれば、一斉にメンテナンスモードに切り替わるようなつくりも意識するといいでしょう。
データベースのデータもユーザー個人を特定できる内容を取り扱う場合には、暗号化・複合化処理を必須にするなど、先々の起こりうる懸念点について事前に対策することで将来的なリスクを回避することにもなります。

要件定義のコツ

「要求定義」の要求事項であいまいな点があれば、システム利用者に何度も確認して処理条件の例外や漏れが起きないよう内容を詰めることは大事です。これがブレのない「要件定義」を組み立てるうえで重要です。
これができていないと、設計フェーズに入ったときに定義不足につながりかねません。「要求定義」の段階で例外、懸念、課題などについて出せるものはすべて出し、システム利用者に確認し、最終的に双方での認識が合致することで先々のつくり直し(手戻り)の発生を抑止できます。

設計のコツ

設計を書いているときは、実際にモノをつくっていません。あくまでも要件にそった「できあがり」をイメージして設計書はつくられているにすぎません。
しかし、パイロット版(正式公表予定のモノに先んじて製作されるモノを指します)をつくり、動かして確認することでより現実的な設計を組みあげるということもできます。例えば、データベース定義書やテーブル設計書をつくりつつ、ローカル環境に簡易なデータベースを立ててみるといった具合です。

「Webシステム開発」などは実際に動かせる段階でシステム利用者から要望が出ることも少なくありません。そのため、視覚的に確認できるモック(試作品の模型や見本を指します)をつくり、システム利用者のレビューを受けることで互いの認識ずれがなくなり、よりよい設計書の作成につながります。

テストのコツ

下図はテストプロセスの概念図です。

左側はシステム開発時に必要なテスト項目をあらわし、右側は品質向上のために画面系、機能系、セキュリティ系、そして利用者のユーザービリティ(使い勝手の品質向上)を総合的に品質チェックするテスト種別をあらわしています。

テストプロセスの概念図

右側の品質特性(QC)を左右するのは、テスト種別の粒度、重みづけ、どこまでのケースパターンでテストを実行するか?になります。容易に想定できるパラメータやデータをもちいてテストするだけではテストの網羅性が低くなる可能性もあります。例えば、「Webシステム開発」の場合、限定的検証(アドホック)の観点も含めたテスト計画を立てることも有効です。また、Webサイトは善意のある人だけが訪れるわけではありませんので、「性悪説」に基づいて、インジェクション対策、クロスサイトスクリプト攻撃や繰り返しアタックする攻撃(ブルートフォースアタック)も想定したテストなどを行うとよいでしょう。そのことで検漏かつハイレベルの品質を担保することが可能となります。

まとめ

これまで、ソフトウェア開発とはそもそもどのような種類や手法があり、どのような流れで開発が進んでいくのか、またそれぞれの工程をうまく進めていくためにはどのようなコツが必要かといったことについて解説してきました。

これで概要はつかめたという方に、最後にもう一つだけコツをお伝えしておくと、ソフトウェア開発には、メンバーシップが重要だということです。開発者だけではなくシステム利用者も、一丸となってよりよいものをつくろうと考え、開発していくことが、品質の高いソフトウェアの開発につながります。

経済産業省の公表によれば、2030年には日本のIT人材は45万人不足するといわれています。このコラムをお読みいただいた多くのソフトウェア開発に関わる方が、少しでも内容を理解し、開発を推進する人材になっていただければと思います。

資料ダウンロード/動画視聴

DevOps 講座

アジャイル開発の実態調査

ソフトウェアテスト入門動画

テスト計画入門動画

関連サービス