定義するにあたって、検討漏れを防ぎ(網羅性の確保)、情報を整理するために、要件レベルを3階層に分ける。Lv1:会社レベル=会社(組織や部門)、関連機関などを単位にした業務の記載する。Lv2:部署レベル=部署(部門・部署)を単位にした業務の記載する。Lv3:人レベル=部署内の人を単位にした作業内容を記載する。上記の要件レベルの3階層を前提として、成果物の作成要領を記す。Lv1の粒度で対象業務を洗い出す。システム化に関係なく業務を洗い出す。1つの業務に対して以下の各項目を記載する。Lv2→業務Lv3への分割・詳細化を行う。・担当者の役割と作業内容を明確にする。発生するケースを考慮する。各要件を文書に落とし込む過程で、ディスカッションポイントを明示した検討用資料を作成する。・検討課題を明示する。・解決案を複数用意する。・解決案の意図や背景を記載する。・最終的にディスカッション結果を追記する。業務Lv3に設定された業務に対してシステム化の要素を洗い出す。オンライン/バッチ該当業務を、オンライン処理するかバッチ処理するかを定義する。行うために必要な主な入力データと出力データを定義する。・インタフェース一覧/エンティティ一覧と整合性を取る。・承認フローにおける状態を記載する。業務フロー(概念)業務一覧と整合性を取ってフローを記載する。業務フローは無駄な分岐や処理がなく、前後の繋がりが把握出来るものにする。・業務Lv1の粒度(業務名、会社レベル)の業務の流れを記載する。・業務Lv2の粒度(部門レベル)の業務の流れを記載する。・業務Lv3の粒度(担当者単位)の作業の流れを記載する。業務一覧を元に、システムが実装する機能のフローを明確にする。・システム化対象業務に関するシステムの振る舞いを定義する。・業務要件の内容を反映させる。・システムと利用者とのやりとりを記載する。(ユースケース等)・システムが担当する処理を記載する。等)・処理の流れが把握できるように順序立てて記載する。基本設計工程で行う”機能の分割”や”ロジック設計”に繋がる。1機能で処理する情報の件数を意識する・業務要件ごとにユーザへのヒアリングを実施し、該当機能での対象件数を確認。(ファイル取り込み)など業務効率化を意識して検討する。インタフェース一覧(概要)インタフェースデータを列挙する。Lv1、Lv2の単位で発生するインタフェースデータを記載する。Lv1:外部機関、会社外とやりとりするデータLv2:他部署、他システムとやりとりするデータ・インタフェースの基本要素を記載する。(自システムから見た送信/受信を明確にする)・インタフェースデータの連携方法を記載する。:業務の実施タイミングや作業制約(時間制約)に間に合っている。・送信:相手先システムの時間制約を満たしている。・文字コード1システムに対して連携方法を纏めた方がメンテナンス負荷や障害発生リスクの軽減に繋がる。通信上のセキュリティ(データ暗号化)の方針は、通信方式の確認時に一緒に確認する。・1回でやりとりするデータ件数(の目安)を把握する。通信量や処理負荷への目安になる情報になる。システム方式設計にも影響する。・データの漏れや順序の追い抜きが発生しないように考慮する。・リカバリ手順が簡易でかつ安全な方法になるように考慮する。ER図でデータ設計を表現し、データとその関係性から業務が成り立つか確認する。・必要なデータを登場させて、粒度を同じにする。・エンティティ間の関係(線)を定義する。・線が定義されないものでも存在意義が分かるように情報を付記する。・他のエンティティに依存している/しないを表現し、矛盾や漏れが無いようにする。業務で取り扱うデータ(データのまとまり)を洗い出す。Lv1、Lv2作業で発生したデータ(エンティティ)を記載する。インタフェースのデータも反映する。列挙したエンティティの種類(トランザクション、マスタ)を定義する。役割について、実際の部署・役職で確認する。要否や可否について確認する。業務全体における当該システムの役割を図示する。・業務全体における当該システムの機能と範囲(境界)を明確にする。・関連システムや利用者を記載する。・関連システム、利用者のロケーション(社内、社外)を記載する。・要件定義の業務一覧・業務フロー、インタフェース一覧の内容を反映する。・関連システム(上流・下流)とのデータの流れを記載する。システムを構成する要素(コンポーネント、サーバ)を記載する。アプリケーション構成を意識した視点”と“インフラ構成を意識した視点”で、それぞれ構成図を作成する。・構成要素を明確にする。・アプリケーションコンポーネント配置、サーバ構成について次のことを考慮する。高い機能を集中させず、なるべく分散させる。・要素を一つに統合する場合、運用(稼働時間、停止)に問題がないよう考慮する。・仮想化の検討サーバ、ハードウェアリソース、ネットワーク、アプリケーション、クライアントの各箇所で仮想化を検討する。システム内のデータと機能の流れを視覚的にわかりやす記載する。Lv3′′/”主な入力情報”/”主な出力情報”、『エンティティ一覧』、『ER図』などを参照して作成する。・要件定義の内容をデータと機能の観点で結びつけて図示する。・システムで実現する範囲の機能とデータを全て表現する。業務要件があいまいでデータフローを作成できない場合は、業務一覧に立ち戻って業務ユーザーとコミュニケーションを取り、不明点を解消させてからデータフローに追記または更新する。・アプリケーション構成アプリケーションで必要な機能を論理的な役割(階層)に分割する。開発する単位を明確化する。・業務要件から機能を論理的な役割に分割する。・分割することで実装範囲(設計対象)を整理する。3層アーキテクチャの例を記す。レイヤーの実装方針、レイヤー間インタフェース実装方針と受け渡しのインタフェースが決定することでアプリケーションとしての処理フロー(抽象化版)が明らかにする。・レイヤーの分割を決めたら、各レイヤーの実装方針を検討する。レイヤー間の受け渡し方法(インタフェース)を取り決める。レイヤー間インタフェースの検討ポイントを記す。・実行形態の分類オンライン処理、バッチ処理が担う範囲を定義する。トランザクション(データ更新)管理システムで取り扱うデータの整合性が保てるように、トランザクションデータ更新のルールを決める。おいてもデータ不整合を保つ仕組みを検討する。業務におけるデータ状態遷移からUMLシーケンス図を用いるなどをして設計する。トランザクションのスコープの例を記す。ロジック層の入口~出口まで。失敗時は元に戻すことで整合性を保つ。1バッチ1トランザクションとする。単純リランを可能にするため。一定の処理件数で分割する。再実行時間を短縮するため。同一データソースに対して同時更新が発生する場合にデータ整合性を保つための仕組みを設計する。ロックの単位を決定する。性能要件に対して、当該アプリケーションアーキテクチャでの実現方法を設計する。・性能劣化を起こす場所と要の因洗い出し性能劣化を起こす可能性がある箇所とその要因を洗い出す。システム化要件と前述で考えたレイヤーに対して次の視点で洗い出す。・実現方法(対応策、また性能劣化時の処置方法を設計する)対応策を例示する。水平分散:同じ処理を行うサーバを複数用意する。垂直分散:処理内容により処理するサーバを振り分ける。メッセージキュー等を利用して非同期で処理を行う。システム運用中にリソース追加が出来る仕組みにする。可溶性に対して当該アプリケーションアーキテクチャでの実現方法を設計する。・可用性を高める必要がある箇所の洗い出しシステム化要件と前述で考えたレイヤーから、可用性が必要な業務を特定する。それに関連する機能を洗い出す。・実現方法(対応策と、復旧方法(発生前状態への戻し)を設計する。(Active-Active構成、Active-Standby構成)どのレイヤー(ハードウェア/ミドルウェアも含む)で冗長化を実現させるか。・状態引継ぎ:縮退発生時にどこまで事前状態を引き継ぐ必要があるか。)・例外の取り扱いシステム不具合や業務エラーが発生した際の処理を設計する。・例外の分類と取り扱い不具合が発生するケースを洗い出し、その際に実施中の処理の扱いを検討する。例外発生の検知から処理終了までを設計する。アクセス権の制御(認可)、利用者本人の特定(認証)について設計する。・ロール管理システムユーザーに割り当てる機能・アクセスできる情報の利用範囲を定義する。その情報の管理方法を設計する。・ロールの管理方法(ユーザ画面でメンテナンスする等)・セッション管理ステートレスなサーバ通信の処理の中で共有する情報(セッション)の管理方法を設計する。セッションIDの入手による乗っ取りや成りすましを排除する。作成~破棄のタイミング)アプリケーション/セッション/リクエスト・暗号化データ項目から通信、媒体に対して暗号化すべき対象を洗い出す。暗号化・複合化の仕組みを設計する。・仕組み採用する暗号化方式、強度を設計する。・ログ出力対象とログの用途の洗い出しアプリケーションが出力するログの用途を明確にする。あわせて、出力するアプリケーションレイヤーを検討する。ユーザインタフェースからリクエストとレスポンス情報。・サービスレイヤーが出力する。・ロジックログ:業務ロジックの実行ログ、ターンアラウンドタイム。・サービスレイヤー+ロジックレイヤーが出力する。・データアクセスレイヤーが出力する。各レイヤーで起こったエラーを集約したもの。・通常時:監視向け・障害時:障害箇所の切り分け・サービスレイヤーが出力する。・ログレベル、フォーマット出力するログレベルとフォーマットを決定する。・ログレベルログの重要度で分類する。レベルで出力要否を設定出来るようにする。・FATAL(致命的エラー)・ERROR(エラー)・WARN(警告)・INFO(情報)・DEBUG(デバッグ情報)・TRACE(トレース情報)・フォーマット解析に必要な情報を特定する。どのようなフォーマットで出力するか決定する。・出力先、出力タイミングの決定ログの出力先と出力するアプリケーションレイヤー、出力方法を決定する。アプリケーションのファイルに出力する。OSやミドルウェアのログに一緒に出力する。監視ツールへ送信する。SNMP、メッセージキューを利用する。ログを出力するアプリケーションレイヤーと出力するタイミングを決定する。APIやライブラリの使用方法を決定する。業務処理と非同期で出力する仕組みを検討・決定する。ログの新規作成やローテーションの仕組みなどのログ運用方法を決定する。・メッセージの管理メッセージの利用方法(ログ出力や画面出力)と管理方法を決定する。・ログ・画面への出力方法ログや画面へ出力する際の実現方法(インタフェース)を決定する。・メッセージの管理方針メッセージとして管理する項目やメンテナンス方法を決定する。