#スマートフォン
#ソフトウエア設計
#ハードウエア設計
#家電製品
#電子回路設計
#電気設計
ソフトウェアがどのように作られているかご存じですか?実は機械や建築物を作る場合と同様に、ソフトウェアを開発する場合にも設計が必要なのです。本記事では、ソフトウェア設計の基礎知識と手順(工程)について説明します。
簡単に言うと、「ソフトウェア」とはハードウェアに内蔵されたプログラムのことです。
私たちの身の回りにはPCやスマートフォン、家電製品、自動車などさまざまなコンピュータ内蔵機器(ハードウェア)があります。これらはハードウェア単体だけでは動作することができず、機能するためにはソフトウェアが必要です。
ソフトウェアはコンピュータに理解できる「プログラミング言語」という特殊な言語を使って記述(コーディング)されます。この作業を「プログラミング」と言い、プログラマーによって行われます。
プログラムはコンピュータのハードウェアに命令を与え、さまざまな機能を提供します。プログラムは通常、設計書をもとに記述されます。設計書なしでもソフトウェアを開発することは不可能ではありませんが、開発したプログラマーが退職したりしていなくなってしまうとソフトウェアの内容がブラックボックス化してしまいます。
するとソフトウェアにバグ(誤り)が発生したり、バージョンアップが必要になったりしても、中身がわからないためソフトウェアを更新することが困難になります。
そのため、企業の基幹システムのように信頼性を求められるソフトウェアは、担当者が代わっても誰でも継続してメンテナンスができるように、しっかりとした設計書が必要なのです。
ソフトウェア開発は基本的に、以下の4つの工程(手順)からなっています。
1. 要件定義
2. 設計
3. 製造
4. テスト
一般に1~2を上流工程、3~4を下流工程と言います。また、このような開発手順は「ウォーターフォール型開発」と呼ばれています。
これ以外にも「アジャイルソフトウェア開発」など、さまざまな開発手法が存在しますが、いずれもこのウォーターフォール型を基本としています。
大規模なソフトウェア開発の場合、上流工程は主にSE(システムエンジニア)によって行われます。
上流工程では、要件定義の文書や設計書が作成されるのと同時に、それに則ってテストの仕様も決められます。テストはソフトウェアが要求通りに作られているかを確認する非常に大事な作業であり、要件定義、設計の各段階でそれぞれの内容を確認するテストが作成されます。これらのテストをクリアして、はじめてソフトウェアが完成したとみなされます。大規模なソフトウェアテストでは、一般にテスターという専門家が担当します。
次に、ソフトウェア開発の上流工程では何が行われるのか、具体的に説明していきます。
ソフトウェアを開発するにあたり、最初に行うのはクライアントへのヒアリングです。この段階で「どのようなソフトウェアを求めているのか」「必要な機能は何か」といった内容の聞き取りを行い、開発するソフトウェアの全体像を明らかにします。
ヒアリングしたら、要件内容として文書にまとめます。これを「要件定義」と言います。ヒアリングの段階ではどうしても曖昧だったり、矛盾していたり、漏れていたりする内容があります。しかし、そのままではソフトウェアを開発することはできません。そこで、この段階ではソフトウェアに対する要求を細部まで漏れなく論理的に、かつ整合性のあるように文書化します。
作成した文書はレビューを行い、クライアントの要求と合致していることを確認します。問題がなければ、いよいよ設計に移ります。
ソフトウェアの設計は、「基本設計(概要設計)」から「詳細設計」へと2段階に分けられます。基本設計では、要件定義をもとにして、ソフトウェアの操作方法や、操作の結果どのような処理が実行されるかなど、ユーザーや外部システムに対して具体的にどのような機能を提供するかを設計します。
例えばAV機器を制御するソフトウェアの場合、「起動時にコントローラのタッチパネルにどのようなメッセージを表示し、ユーザーがどの部分にタッチしたかでどのような処理に移行するのか」といったことがここでしっかりと決められます。
詳細設計では、基本設計をどのようにして実現するかを設計します。そのために、プログラムの基本構造の設計とプログラムによって利用されるデータ構造の定義を行います。
プログラムの基本構造の設計とは、プログラムの処理内容・流れ(フロー)を明確化する作業のことです。ここまでくると、プログラマーは詳細設計をもとにコーディングができるようになります。
詳細設計の手法はさまざまですが、代表的な手法として「UML」(Unified Modeling Language:統一モデリング言語)と呼ばれるツールを利用する方法があります。UMLを用いるとソフトウェアの処理のフローや構造を誰でも理解できる形で可視化できます。さらに、プログラミング言語の多くはUMLと相性がよく、設計から容易にプログラムに変換出来るような仕組みになっているため、ソフトウェアのメンテナンスが容易になります。
その上、大規模なソフトウェア開発で大勢のプログラマーがコーディング作業を分担するような場合でも、設計がしっかりしていれば、個々のプログラマーの技量にばらつきがあっても、完成するソフトウェアは一定の品質を保つことができます。
ソフトウェアにはデータの管理も必要で、そのために「データベース」と呼ばれるシステムが利用されます。データベースはデータの記録や検索などに使われます。
設計者は要件定義から必要なデータ構造を定義し、データベースの設計を行います。データは表形式で管理され、表の各カラム(列)にどんなデータを記録するかを定義します。例えば、社員名簿を作る場合、名前の入るカラムは文字列型、年齢が入るカラムは整数型…といった具合です。
プログラムがUMLというツールを用いて設計されたのと同様に、データベースもER図やテーブル定義書などを用いて設計が行われます。
設計が終われば要求定義の場合と同様にレビューを行い、それが終わってはじめて製造工程に移行します。この段階でプログラマーが設計書をもとにコーディングを行います。
最後にテストで設計通りにソフトウェアが動作するかを確認します。その結果、プログラムのバグが発見されれば修正していきます。場合によっては要求定義や設計そのものに誤りが発見されることもあります。その場合は作業を遡り、再びテストをやり直します。
これら一連の工程を終えればいよいよソフトウェアは完成となり、実際に運用が開始されます。
運用が始まってから想定外のバグが見つかったり、機能の追加が必要になったりしてプログラムの修正が必要になることもあります。その場合、必要に応じて部分的に要件定義や設計、さらにはテストを作り直し、それをもとに製造とテストをやり直して、ソフトウェアをアップデートしていきます。
ソフトウェア開発は以上のような工程で進められます。プログラマーがどんなに優秀でも、設計がうまくいかないと良いソフトウェアを開発することはできません。つまり、設計はソフトウェアの品質を左右するとても大切な業務なのです。
執筆者プロフィール
亀田健司(ITコンサルタント)
大手メーカー退職後、独立し、現在はAIやIoT、更にはDXを企業導入する際のコンサルティングや研修業務などを行う。IT技術者の教育にも力を入れており、DXを推進する人材を育成するための著作や専門書の執筆なども行っている。