Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Ooc 2020

1,460 views

Published on

関心の分離とは

Published in: Engineering
  • Be the first to comment

Ooc 2020

  1. 1. 関心の分離とは マルチパラダイムから考える関心の捉え方 1
  2. 2. • ㈱バリューソース 代表取締役 • 神崎 善司 • Facebook page:要件定義の散歩道 https://www.facebook.com/youkennotsubo?ref=hl • twitter:@zenzengood • モデリング好き • 表記法を考えるのが好き • 要件定義手法「RDRA」を定義 • 仕事 • 要件定義支援 • 既存システム可視化支援 • モデリング支援 • モデリング・要件定義セミナー 2
  3. 3. 3
  4. 4. 今日のスコープ 4 仕様 仕組 オブジェクト指向 関数型 対象の捉え方 (表現) テクニック • クラス • インターフェース • 多態性 • ~~ • 高階関数 • 代数データ型 • パターンマッチ • ~~ 関心事 マルチパラダイム
  5. 5. 5
  6. 6. ん~~ 整理できない! 6
  7. 7. 対象の理解 7 売る 買う 混沌
  8. 8. なぜ整理できないのか? 加工食品【定価】 を扱う 豆腐 販売 仕入 時価ではないので商品ご とに仕入値、売価が決まる 商品単位の仕入値、 売価が管理される 仕入 生鮮食料品を 売りたい 時価なので仕入 れ値が重要 販売 大根 販売の中に仕入れ の機能が含まれる 大根を半分に して売りたい 販売 仕入 値段が変わるが同じ大根 としても管理したい 売価が変わるから商 品コードを分ける? 半分の 大根 8
  9. 9. 混沌からの脱出 9
  10. 10. 修正が簡単な順に並べる と? • 「取引先」のラベルを「得意先」に変えたい • 商品種別に「生鮮食料品」を追加したい • 商品種別を「商品分類」と「商品種別」に分け たい 取引先 商品種別 XXXXX XXXXX XXXXX XXXXX 10
  11. 11. 何に着目しました? • 「取引先」のラベルを「得意先」に変えたい • 商品種別に「生鮮食料品」を追加したい • 商品種別を「商品分類」と「商品種別」に分けたい 取引先 商品種別 XXXXX XXXXX XXXXX XXXXX 影響範囲が広いのはどれか その変更は局所化しているか 11
  12. 12. 仮説 12 問題の 局所化 新規開発要求 • 「取引先」のラベルを「得意先」に変えたい • 商品種別に「生鮮食料品」を追加したい • 商品種別を「商品分類」と「商品種別」に分けたい 関心事 関心事と要求への対応が問題の局所化につながる 変更要求
  13. 13. 関心事は仕様と仕組みに分けて考える 13 機能要求 非機能要求 機能 コンセプト 手段 プロセス 処理対象 非機能要求 の達成水準 コンセプトが手 段を選択する 仕組みとしての関心事仕様としての関心事 手段手段手段 ※要求から全ての関心事が出てくるわけではない
  14. 14. 仕様として の関心事 14 機能要求 非機能要求 機能 コンセ プト 手段 プロセス 処理対象 仕様として の関心事
  15. 15. 対象の捉え方 15 どう捉えました?
  16. 16. オブジェクト指向の視点 16 どんぶり
  17. 17. 関数型の視点 17 180度回転さ せたどんぶり 90度回転さ せたどんぶり 中身が入った どんぶり どんぶり どんぶり どんぶり 重ねられた どんぶり 変換 入力 出力 a -> ba -> b -> c
  18. 18. 対象の捉え方 18 どんぶりどんぶり どんぶり 重ねられた どんぶり 変換 機能要求 機能 プロセス 処理対象 問題領域 プロセス的視点 構造的視点
  19. 19. 19 「どんぶり」は自明だね でも実際には「どんぶり」みたいな はっきりした対象は見えていない
  20. 20. どう分ける •どう分けた? •どうまとめた? •何に着目した? 20
  21. 21. 物置に収納する場合は、どう分ける • 要求:より多く収納する • 小さくする • 重ねる • 折りたたむ • 安定する置き方 • 要求:出し入れしやすい収納 関心事 21
  22. 22. 店頭で売るとして、どう分ける 何を何処で売るか • 顧客の興味 • 見つけやすさ • ~ 関心事 22
  23. 23. 対象が同じでも目的によって 関心が変わる 対象の捉え方 23環境に着目し「関心事」に気を配る
  24. 24. 関心事が変更起点になる • 変更の起点となるもの • 入出力 • 画面・帳票 • 項目追加変更 • 操作方法 レイアウトが変わった • 画面・帳票が追加された • 外部システムとの連携 • 項目追加変更 • タイミングの変更 • ビジネスルール • バリエーション • 条件 • 情報構造 • 状態 • 変更起点の分析は企業の特徴を分析 することにつながる B-24 システム 境界 ビジネスルール 条件 バリエーション 軸 軸 変更起点 関心事
  25. 25. 関心事の局所化に向けて • One Fact in One Place • DOAで語られていた言葉 • 一仕様(ルール)を一箇所へ 25 問題の局所化 関心事 関心事の分析 ビジネス ルール 入出力 変更起点 一仕様を一箇所へ
  26. 26. 仕様としての関心事を掘り起こす 着目する視点 状態(手順)のルール 情報構造のルール 計算式 基準 規約 分析視 点 作業の順番など、順序や進行に条件がある場合にこの 方式で分析する 仕事は状態の変化でアクションを起こす 情報に構造があり、情報間のつながりに多重度 があるときにこの方式で分析する 独立した計算式や条件の場合は一覧形式 で整理する 登場人 物 会社、人、組織、外部のシステムな どで識別しているものを洗い出す 人、組織間でやりとりに着目する 登場人物間にやりとりが発生するときワークフローが 発生する 登場人物の数だけ仕事があり、仕事の を連携するために状態が必要になる 例: 部門間のワークフロー 承認ワークフロー 登場人物には個々に特性があり構造化できる 例:顧客:一般・会員 ~ 登場人物の関係性で決まるもの 外部のシステムが規約として決めている もの 商品 / サービ ス 商品の種類や特性に着目する サービスの前準備でワークフローが必要なものがある 例: インターネットの接続工事 サービスのローテーションルール ものやサービスで扱う情報を構造化する 例: 伝票の構造 サービスと附帯物の関係 もの、サービスに関わる計算 もの、サービスのバリエーションからく る計算の差異 利益率など もの、サービスのバリエーションからく る処理の差異 お金 / 支払 入金 決済方法などお金に関わる特性に着 目する 例:残管理:消し込み 商品(サービス)の販売から入金までの流れ 1回払いと継続払いの手続きの違い もの、サービスとお金の対応つけ 複雑な決済方法の構造化 金額計算 値引き率 自動継続 時間 時間、時期、期間、日付によって特 殊性がでるものを分析する 期間にまつわるルール 例:期限が1週間... 時期による振る舞いの違い 例:季節キャンペーン 定周期のイベント 例:日時 週次 月次 期間や時期にまつわる関係の変化を構造化する 時間にまつわる計算式 例: 実稼働時間の計算方法 時間あたりの単価 場所 場所によって条件が変わるものや特 殊性が発生するものを分析する 国内取引と海外取引の手続きの違い 地域特性による手順の相違 例: 海外取引における乙仲の存在 海外品の返品の省略 場所による構造の違い 例: 通過、時間の違い 国内と海外取引の伝票の違い 場所による計算式の違い 例: 場所による仕様の違い 場所による税率の違い 温暖地と寒冷地仕様の条件 環境 /制約 法律や業界の自主規制などの制約に 着目し分析する 会計基準 例:顧客の検収を持って売上げ計上する 情報間の多重度が制約になる 制約のルールが複雑な場合に構造化して分析す る 単独で存在するルール 税率 26 機能要求 機能 プロセス 処理対象 プロセス 処理対象 決まり事 問 題 領 域 の 要 素
  27. 27. ビジネスの軸となる視点 直目する視点 状態(手順)のルール 情報構造のルール 計算式 基準 規約 分析視 点 作業の順番など、順序や進行に条件がある場合にこの 方式で分析する 仕事は状態の変化でアクションを起こす 情報に構造があり、情報間のつながりに多重度が あるときにこの方式で分析する 独立した計算式や条件の場合は一覧形式 で整理する 登場人 物 会社、人、組織、外部のシステムな どで識別しているものを洗い出す 人、組織間でやりとりに着目する 登場人物間にやりとりが発生するときワークフローが 発生する 登場人物の数だけ仕事があり、仕事の を連携するために状態が必要になる 例: 部門間のワークフロー 承認ワークフロー 登場人物には個々に特性があり構造化できる 例:顧客:一般・会員 ~ 登場人物の関係性で決まるもの 外部のシステムが規約として決めている もの 商品/ サービ ス 商品の種類や特性に着目する サービスの前準備でワークフローが必要なものがある 例: インターネットの接続工事 サービスのローテーションルール ものやサービスで扱う情報を構造化する 例: 伝票の構造 サービスと附帯物の関係 もの、サービスに関わる計算 もの、サービスのバリエーションからく る計算の差異 利益率など もの、サービスのバリエーションからく る処理の差異 お金/ 支払/ 入金 決済方法などお金に関わる特性に着 目する 例:残管理:消し込み 商品(サービス)の販売から入金までの流れ 1回払いと継続払いの手続きの違い もの、サービスとお金の対応つけ 複雑な決済方法の構造化 金額計算 値引き率 自動継続 時間 時間、時期、期間、日付によって特 殊性がでるものを分析する 期間にまつわるルール 例:期限が1週間... 時期による振る舞いの違い 例:季節キャンペーン 定周期のイベント 例:日時 週次 月次 期間や時期にまつわる関係の変化を構造化する 時間にまつわる計算式 例: 実稼働時間の計算方法 時間あたりの単価 場所 場所によって条件が変わるものや特 殊性が発生するものを分析する 国内取引と海外取引の手続きの違い 地域特性による手順の相違 例: 海外取引における乙仲の存在 海外品の返品の省略 場所による構造の違い 例: 通過、時間の違い 国内と海外取引の伝票の違い 場所による計算式の違い 例: 場所による仕様の違い 場所による税率の違い 温暖地と寒冷地仕様の条件 環境 /制約 法律や業界の自主規制などの制約に 着目し分析する 会計基準 例:顧客の検収を持って売上げ計上する 情報間の多重度が制約になる 制約のルールが複雑な場合に構造化して分析する 単独で存在するルール 税率 27
  28. 28. 仕組みとして の関心事 28 機能要求 非機能要求 機能 コンセプ ト 手段 プロセス 処理対象 仕組みとしての 関心事
  29. 29. 「仕組み」に着目してみる Lib Lib Lib フレームワーク・DIコ ンテナが制御を握る アーキテク チャ構築 (a,b) :c 非機能要求 29 仕様
  30. 30. ビジネス系のプログラム • 変換 変換 変換 • 仕様が様々な変換に紛れ込む • トランザクションスクリプトは この構造に素直に従ったもの Lib Lib Lib (a,b) :c (e,f) (g,h) (i,j) 変換 変換 変換 DB 30
  31. 31. 仕様と仕組みの分離 31 レイヤード アーキテクチャ オニオン アーキテクチャ システム アーキテクチャ 非機能要求 関心事 (a,b) :c (a,b) :c (a,b) :c (a,b) :c (a,b) :c (a,b) :c (a,b) :c (a,b) :c Lib Lib Lib Lib Lib Lib 機能要求 アプリケーション アーキテクチャ プロセス 処理対象 関心事 手段 コンセプト
  32. 32. メモリ利用 パフォーマン スを上げる 分散化 スケーラビリ ティを確保する 不変性が必要 開発生産性 を上げる 経験の範囲で出 来るようにする 状態が変わるものを分散化するとコンフリクト スループット を上げる 並行性を高める 処理のInとOutの 独立性を高める オープンな仕 様に準拠する 状態が変 わる 保守性を 上げる システムアーキテ クチャの明確化 処理の独立 性を高める ・キャッシュの利用 ・ドメインオブジェクトをメモリに置く 品質を上げる 新しい技 術の採用 データの独立 性を高める アプリケーションアー キテクチャの明確化 テストに時間と 工数をかける コストを 下げる 柔軟性を 高める サブシステ ム分割 開発期間を 短くする 開発工数 を減らす 問題の局所化 学習量を 減らす アプリケーションの領域 代替手段が増える 非同期化 技術の高度化 要求の高度化 変更容易 性を生む 変更容易 性を生む 分散と集中のバ ランスをとる 再利用性の向上 最適化された独 自処理と形式 可用性 を上げる 動的な配置 アーキテク チャの統一 開発を簡易にす る 考慮する 反映する 経験則を 活かす 非機能要求コンフリ クト非機能要求から関心事は生まれる 32 仕組みの (アーキテクチャ) 関心事 仕組みの (アーキテクチャ) 関心事
  33. 33. メモリ利用 パフォーマン スを上げる 分散化 スケーラビリ ティを確保する 不変性が必要 開発生産性 を上げる 経験の範囲で出 来るようにする 状態が変わるものを分散化するとコンフリクト スループット を上げる 並行性を高める 処理のInとOutの 独立性を高める オープンな仕 様に準拠する 状態が変 わる 保守性を 上げる システムアーキテ クチャの明確化 処理の独立 性を高める ・キャッシュの利用 ・ドメインオブジェクトをメモリに置く 品質を上げる 新しい技 術の採用 データの独立 性を高める アプリケーションアー キテクチャの明確化 テストに時間と 工数をかける コストを 下げる 柔軟性を 高める サブシステ ム分割 開発期間を 短くする 開発工数 を減らす 問題の局所化 学習量を 減らす アプリケーションの領域 代替手段が増える 非同期化 技術の高度化 要求の高度化 変更容易 性を生む 変更容易 性を生む 分散と集中のバ ランスをとる 再利用性の向上 最適化された独 自処理と形式 可用性 を上げる 動的な配置 アーキテク チャの統一 開発を簡易にす る 考慮する 反映する 経験則を 活かす 非機能要求コンフリ クト非機能要求の関心事 手段(フレームワーク、ライブラリ)選択のための関心事 33
  34. 34. メモリ利用 パフォーマン スを上げる 分散化 スケーラビリ ティを確保する 不変性が必要 開発生産性 を上げる 経験の範囲で出 来るようにする 状態が変わるものを分散化するとコンフリクト スループット を上げる 並行性を高める 処理のInとOutの 独立性を高める オープンな仕 様に準拠する 状態が変 わる 保守性を 上げる システムアーキテ クチャの明確化 処理の独立 性を高める ・キャッシュの利用 ・ドメインオブジェクトをメモリに置く 品質を上げる 新しい技 術の採用 データの独立 性を高める アプリケーションアー キテクチャの明確化 テストに時間と 工数をかける コストを 下げる 柔軟性を 高める サブシステ ム分割 開発期間を 短くする 開発工数 を減らす 問題の局所化 学習量を 減らす アプリケーションの領域 代替手段が増える 非同期化 技術の高度化 要求の高度化 変更容易 性を生む 変更容易 性を生む 分散と集中のバ ランスをとる 再利用性の向上 最適化された独 自処理と形式 可用性 を上げる 動的な配置 アーキテク チャの統一 開発を簡易にす る 考慮する 反映する 経験則を 活かす 非機能要求コンフリ クト 34
  35. 35. 開発生産性を上げる 35 鶴を早く折れる人は誰? 鶴を折ったこ とがない人 鶴を1回だけ 折った人 鶴を何回も折った ことがある人
  36. 36. 開発生産性を上げる 36 違うものを同じように扱う オブジェクト指向のアプローチ 関数型のアプローチ A B 構造的視点 で抽象化 文脈としての変換 X変換 プロセス視点 で抽象化 文脈としての変換 Y変換 コンテキスト X変換 Y変換 共通処理 共通処理の洗い 出しではない 共通的な文脈 を洗い出す A->b->C
  37. 37. 収納という文脈において抽象化を考える 37 ジョウロ 椅子 どんぶり 重ねられ るもの 収納物 重ねる どんぶりを重ね た高さを求める 重ねる 椅子を重ねた 高さを求める 重ねられた 重ねられた うまくいった うまくいった 重ねる うまくいかない 構造的に違うもの を同じように扱え るようにする 異なるプロセスを同じよ うに扱えるようにする • 小さくする • 重ねる • 組み合わせる • 安定する置き方 関心事 オブジェクト指向のアプローチ 関数型のアプローチ 段ボール 重ねる 段ボール に入れる 段ボール の高さ 重ねられた うまくいった
  38. 38. • システム全体 38
  39. 39. システム全体をどう見るか? システム システム化対象全体の構 造を捉えるのはオブジェク ト指向が有利なのでは… :C 変換 変換プロセスの普遍的な構造には 関数型のアプローチが有効では… (プロセスのコンテキストの探索) ドメイン構造 :C (a,b) :C (a,b) :C (a,b) (a,b) 変換 39
  40. 40. システム全体をどう見るか:例えば • Excelの定義をPowerPoint上のモデルに変換するツール • オブジェクト指向 オブジェクトモデル:PowerPoint Excel • 関数型 表形式からモデルへの変換 40 オブジェクトモデル Application WorkBook WorkSheet Cells Cell Range ExcelをListに変換 Object構造を PowerPointに変換 ListをObject構造に 変換 行を比較する 列を繰り返す 定義に従い 構造を生成 する ステート 要素 ステート 要素 オブジェクトモデル Application Presentaion SlideSlideMaster Shape 業務 BUC Act UC 画面 情報 イベント 構造的視点 構造的視点 変換プロセス的視点
  41. 41. 関心の分離 ビジネスルール 変更 起点 オブジェクト指向 普遍的構造を導き出す視点 問題を局所化したい 41 関心 関心 問題の対象 仕様としての側面 仕組みとしての側面 問題の対象 機能要求 非機能要求 機能 コンセ プト 手段 プロセス 処理対象 プロセス 処理対象 関数型 変換プロセスの視点 関心の洗 い出し 関心の洗 い出し 問題の局所化 アーキテクチャ 手段の選択 コンセプト 手段 手段

×