ソフトウェアの設計書は、DevOpsの時代になっても、ソフトウェア開発ライフサイクル(SDLC)の重要な構成要素として位置付けられることは変わらない。ソフトウェア設計書が重要な理由、作成方法を整理する。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
ソフトウェアの設計仕様書は、DevOpsの時代になっても、ソフトウェア開発ライフサイクル(SDLC)の重要な構成要素として位置付けられることは変わらない。ソフトウェアプロジェクトに着手する前に、開発チームはソフトウェアの設計仕様を考える必要がある。
ソフトウェア設計仕様書(SDD:Software Design Document)は、プロジェクトのロードマップとしての役割を果たし、プロジェクトの達成目標や目標への到達方法をチームが総合的に判断するのに役立つ。
設計仕様書があれば、最初のコード行の作成からプロジェクトの完了までを順調に進めることができる。開発チームがソフトウェア設計仕様書の作成プロセスを最初から最後まで進めるためには、本稿で示す重要な手順、ヒント、テンプレートに従う必要がある。
SDDは、ソフトウェア開発プロジェクトのアーキテクチャ、コンポーネント、インタフェースなどの重要な構成要素を説明する包括的なドキュメントを指す。
SDDは基本的にはソフトウェア開発プロセスを通じて開発者、設計者、関係者を導く青写真だ。システムの機能、データの構造、アルゴリズム、ユーザーインタフェース(UI)の詳細な説明が盛り込まれる。こうした要素を事前に定義することで、チームメンバー全員がプロジェクトの目標と要件を確実に理解できるようにする。
こうした要素を明確にすることは重要で、誤解や設計上の欠陥の可能性が減り、DevOpsライフサイクル全体にわたって一貫性と品質が確保される。
SDDは、関係者と開発者との間の契約としての役割を果たし、想定する結果について全関係者の見解を一致させる。見解が一致していれば、スコープクリープ(意図しないプロジェクトの拡大)のリスクが最小限に抑えられ、プロジェクトが順調に進み、予算内に収まる。さらに、将来の繰り返し、メンテナンス、アップグレードに使用できる参照ポイントとなり、効率的な変更が容易になる。
設計仕様を文書にしておけば、SDDはシステムのアーキテクチャと機能に関する包括的なガイドとしての役割を果たす。SDDがあれば、開発チームへの新しいメンバーの参加が迅速になる。最終的には、時間をかけて質の高いSDDを作成すれば、適切なコラボレーションが生まれ、コードの品質が高まり、ソフトウェアプロジェクトの全体的な成功につながる。
SDDをどのように構成するかは、テクノロジー業界の中でも異なる可能性があるが、構成が変わっても次のようなメリットが得られることは変わらない。
SDDの作成には、チームに参加するさまざまな職務の担当者の専門知識や意見が必要になるため、ある程度の準備が必要だ。チームの関係者はSDDの作成以外の職務も担う。
通常、SDDの作成には次のような関係者が参加する。
さまざまな職務を担う部門横断型のチームを結成したら、SDDの作成を成功に導くためにチームが実行すべき重要な準備手順が幾つかある。
SDD作成の効率を上げるには、SDDでの役割と責務を明確に定義することが重要だ。SDD作成に上級開発者やアーキテクトが参加できるかどうかを検討する。参加できるなら、上級開発者やアーキテクトにテクニカルライティングのサポートを求め、その専門知識が最も役立つセクションに集中できるよう特別に配慮する
SDDの作成は、利害関係者に接触して意見を求め、その要件と期待事項を集めることから始める。この時点で初めて、既存の要件ドキュメント、ユーザーストーリー、関連ドキュメントを集め、レビューする。
システムの環境と、自社内の他のバックエンドシステムなど他のエンティティとの相互作用を説明する図を作成するのも重要な準備手順の一つだ。この図には、パートナーやベンダー(サードパーティーの決済業者など)のシステムと自社システムが相互作用する仕組みも盛り込む必要がある。じっくりと時間をかけて、機能の要件を捉え、システムのさまざまなパーツがどのように相互作用するかを示すユースケースを考える。
自社の業務目標との整合性が確保されるように、プロジェクトの目標とスコープを明確に定義する。この時点で、業務関係者または業務部門から指名された担当者を参加させる。オンラインミーティングを開催するか、可能ならプロジェクトチームを一堂に集め、相互に協力して議論や質疑応答を実施する。
SDDのテンプレートを作成する方法は幾つもある。いずれにせよ、作成者は開発チームや関係者の協力を得て、SDD作成に関する自社標準を確立しなければならない。「IEEE 1016-2009」など、SDDに盛り込む内容を規定する標準もある。ただし、自社のニーズに合わせてカスタマイズしたSDDを使用するチームが多い。
参考までに、ここではSDDを構成する一般的な要素を紹介する。
SDDの序文には、次のような内容を盛り込む。
SDDの序文には、設計書のバージョンとその変更内容を記録するバージョン履歴の表を含めるのが一般的だ。こうした表は過去の遺物のように思えるかもしれないが、コンプライアンス監査人は監査の一環としてこの情報を探す。
SDDの冒頭で、プロジェクトを説明する簡単な概要を5〜10行で記述する。概要には、SDDで使われる用語集やプロジェクト目標の一覧も含める。記述する際には、プロジェクトの簡単な概要を必要とする経営陣など、開発者以外の関係者を念頭に置く。
アプリケーションの現状の設計を含める。運用環境で既に使用しているアプリケーションの設計書が存在しなかったり、かなり古くなったりしている場合は、そのアプリケーションのリバースエンジニアリングを行い、SDDを作り直すことも考える。現状の設計を文書にしておくと、オンプレミスで運用してきたレガシーアプリケーションをクラウドサービスに移行する場合などに役立つことがある。
設計案セクションでは、新しいシステムのアーキテクチャ、機能、コンポーネントを詳しく説明する。
通常、設計案はSDDの中でも最も大きくなるセクションの一つで、ソフトウェアを実装するための設計パターンと設計原則を説明する。システムの構造やデータの流れを視覚的に表現する図やモデルも含める。設計案がプロジェクトの要件を満たし、特定された問題に対処する方法を説明する。最後に、選択するテクノロジーとツールや、それをプロジェクトで使用する妥当性も記述する。
プロジェクトの変更予定を詳しく示す一覧を含める。変更予定を通知する最善の方法は、次の詳細を表形式で示すことだ。
変更の範囲によって、他のシステムコンポーネントや外部システムと、変更の予定との依存関係によって影響を受けるアプリケーションコンポーネントの概要を示す。
SDDのテスト計画セクションには、プロジェクトのテスト計画へのリンクを含める。以前は完全なテスト計画を含めるのが標準だったが、現在はオンラインドキュメントが主流になり、テスト計画へのリンクだけを含める方が容易だ。
このセクションには、監視の詳細計画を含める。例えば、パイロットフェーズでアプリケーションが受け取ったユーザートラフィックを調べ、そのトラフィックに関連する可観測性の指標などを含める。
SDDのデプロイ(展開)計画セクションには、アプリケーションを運用環境にデプロイするための詳しい計画と枠組みを含める。デプロイ計画もSDDで最も大きくなるセクションの一つで、ソフトウェアデプロイに必要な次のようなさまざまな側面を説明する。
SDDのコミュニケーション計画セクションでは、プロジェクト関係者への通知方針の概要を示し、プロジェクトの進捗(しんちょく)状況と重要な決定事項を関係者に、いつ、どのように通知するかを詳しく説明する。関係者全員がスケジュールとシステムダウンタイムを確実に把握できるように、デプロイのスケジュールや通知の仕様を決める。
このセクションでは、進捗レポートの頻度と形式など、全員の足並みをそろえるための報告プロセスについても説明する。さらに、文書化のプロセスを詳しく示し、プロジェクトのライフサイクル全体で作成、保守、共有する文書を強調する。この計画により、コミュニケーションチャネルが明確に定義され、関係者全員がアクセス可能になる。最後に、関係者の懸念を効果的に収集して対処するためのフィードバックメカニズムを用意する。
技術文書を製品の一部として扱うことは極めて重要だ。そのため、SDDには製品に同梱する技術文書に関するセクションを用意する。オンラインヘルプやユーザー支援文書を作成する方針と手順を詳しく説明する。
主にアプリケーションから社外の有料顧客にサービスを提供する場合、アプリケーションを以前のバージョンにロールバックするための計画とオーケストレーションが必要になる。SDDには、プロジェクトのロールバック計画をステップバイステップで示す細かい計画を含める。
SDDのプロジェクトの影響セクションでは、コスト分析、セキュリティ分析、他の業務部門への影響、リスク分析に重点を置いて説明する。
SDDの評価基準セクションには、システムのパフォーマンスと有効性を測定する特定の指標とベンチマークを含め、機能要件と機能以外の要件(使いやすさ、信頼性、スケーラビリティなど)のテスト手順と成功基準を概説する。さらに、設計が関係者のニーズと期待を満たすことを確認するために、ユーザーからフィードバックを集めて分析する方法も指定する。
SDDでは、プロジェクトの作業スケジュールも周知する。SDDをチームコラボレーションツールに公開する場合は、プロジェクト管理アプリケーションのプロジェクトスケジュールにリンクするか、スケジュールをSDDに盛り込む機会を探る。
このセクションでは、SDDの各段階で参考にした第三者のリソースを取り込み、文書にする。ここには、次のような標準的な参考資料を含める。
SDDの作成は、多くの場合、チームの専門知識と才能を結集したチーム作業になる。誰もが執筆業を本業とするわけではない。
SDDの作成では、チームメンバーの専門知識に応じて執筆チームを編成し管理することが重要だ。
SDDの編集は、スケジュールが短く、部門横断型チームが対応するという性質上、きめ細かく行うことが重要だ。SDDを編集するに当たっては、チームメンバーの専門知識に注目する。例えば、元の文書よりも文法上の間違いが増える可能性があるため、アーキテクトやバイスプレジデントに文法の編集を依頼してはいけない。チームメンバーの得意分野に基づき、次のように編集の役割を定める。
SDDは複数の担当者が執筆を担当するため、編集とコメントを追跡することが重要になる。
複雑で読みにくいSDDは、プロジェクト管理上の事故を招く恐れがある。SDDプロジェクトでテクニカルライターを確保できる場合でも、次の重要なヒントに従うようにする。
特に一般的なAI使用ポリシーが自社にない場合は、生成AIを利用して草稿を作成するのはリスクを伴う可能性がある。
SDDに図表を取り入れると、さらに読みやすくなる。SDDでは、次のような図表の利用を検討する。
SDDに関するフィードバックの収集は、1回限りのレビュー作業ではなく、継続的な活動にする必要がある。チームと社内関係者は、SDDの重要なバージョン全てにフィードバックを提供する必要がある。
クラウドネイティブアプリケーションの複雑なSDDを作成するには、時間と専門知識が必要になる。プロジェクトライフサイクルの一環として開発チームがSDDを更新するためのプロセスとゲートを設けることで、チームは時間と専門知識を確保できる。
Copyright © ITmedia, Inc. All Rights Reserved.