ソフトウェア設計書に書くソフトウェア設計にお悩みですか?
私は6年間C・C++言語でのLinuxアプリケーション開発に携わってきました。
その中で特に使用頻度が高かったおすすめのソフトウェア設計7選を紹介します。
目次
ソフトウェア外部設計
要求仕様に基づいて作成する外部設計としては、下記の2点が重要です。
- シーケンス図
- 状態遷移図
①シーケンス図
各プロセス・モジュール間の処理内容・処理順序を明確にできます。
一つのイベントに対するシステム全体の処理内容がわかりやすく表現されます。
たとえば、「イベントを処理する時間がかかりすぎる」という不具合が発生した際、どのプロセス・モジュールの処理に時間がかかっているかを調査しやすくなったり、障害調査報告書としてまとめやすいです。
②状態遷移図
状態遷移図のポイントは3点です。
- 仕様に対する実装漏れを防ぐ
- 仕様の矛盾点が洗い出せる
- システム全体の動きが直感的にわかる
状態遷移図は、要求仕様に対する実装漏れを防ぐために有効です。
状態の数が多くなればなるほど、システムの動きが複雑になり、頭の中だけでは整理しきれなくなります。
そういった場合は、状態ごと(起動処理中、通常運用中、異常発生中など)の各プロセス・モジュールの処理内容を図示化することで、システム全体の状態遷移処理の概要が把握できます。
また、「細かい仕様は決めないから、ソフトウェアが作りやすいように動作してくれたらいいよ」みたいな要求仕様もあります。
その場合は「ソフトウェア仕様」としてソフトウェア動作を決め、要求仕様とソフトウェア仕様の整合性を保った状態にする必要があります。
状態遷移図では、要求仕様とソフトウェア仕様の両方の定義に基づくソフトウェア動作を一つの図にまとめることができるので、お客様や他メンバーと情報共有がしやすくなるメリットがあります。
ソフトウェア内部(詳細)設計
外部設計に基づいて作成する内部(詳細)設計としては、下記の5点が重要です。
- アクティビティ図
- 状態遷移表
- クラス図
- デザインパターン
- DFD(データフローダイアグラム)
③アクティビティ図
各プロセス・モジュール間の処理内容・処理順序を明確にできます。
前述のシーケンス図と設計する目的は似ていますが、アクティビティ図の方が粒度が細かくなります。
アクティビティ図では、処理内容をフローチャート図のように記載できるため、ソースコードに落とし込めるレベルまで処理内容を細かく記載できます。
④状態遷移表
状態遷移表は、要求仕様に対する実装漏れを防ぐために有効です。
前述の状態遷移図と設計する目的は同じですが、状態遷移表の方が粒度が細かくなります。
具体的にソースコードに落としこまるレベルまで状態ごとの処理内容を定義できることがベストです。
⑤クラス図
各クラスでデータのカプセル化をし、保守性を高めるために用います。
静的クラスなどを除き、基本的にはクラスごとで処理(メンバ関数)とデータ(メンバ変数)をセットにしておくべきです。
外部のクラスから自身のクラスのメンバ変数を操作できないようにすることでコピペコードを減らすことができ、保守性が向上するためです。
⑥デザインパターン
流用性を高めるために用います。
たとえば、Templateパターンでインターフェースクラスをライブラリ化することにより、様々な案件のシステムで使い回すことが可能となります。
その他、Observerパターン、Singletonパターン、Stateパターンなどが流用性の担保に有用です。
それ以外のパターンは、使用頻度はあまり高くありません。
⑦DFD(データフローダイアグラム)
各プロセス・モジュール間のデータの流れ、およびデータの実体を整理できます。
基本的には、データの流れはシンプルであればあるほど良いです。
一つのプロセス・モジュールが管理するデータを多くのプロセス・モジュールに関連させないようにするためにDFDを使います。
紹介したソフトウェア設計について
私は、6年間ほど、東証一部上場企業メーカーのエンジニアと家電製品やインフラに関するソフトウェア開発(C/C++)をしていました。
その時は、保守性と流用性が担保されるソフトウェア設計をしていました。
上記の設計手法を駆使して設計資料を作成すれば、設計レビューも円滑に進みました。
他にも、MVVM・MVC・コンポーネント図・コミュニケーション図・タイミング図などが使われることがありますが、出現頻度はそれほど高くありません。
それよりも、今回紹介した設計手法は、開発言語に関わらずエンジニアの共通言語となっているので、マスターしておくことが必須です。
どのソフトウェア設計を特に重視すべきか
まずは自分が理解しやすいソフトウェア設計で設計していくべきです。
自分がソフトウェア設計を明瞭に理解できないと、相手に伝えることは不可能だからです。
その後、いろいろな設計手法でソフトウェア設計をしてみて、自分なりの設計スタイルを確立していくのがベストです。
まとめ
今回はおすすめのソフトウェア設計について紹介しました。
ソフトウェア設計をしても、プログラミングをする段階で設計の見直しが入ることがかなり多いです。
まずはざっくりとしたソフトウェア設計(シーケンス図、状態遷移図)からマスターするのが良いでしょう。