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.

ソフトウェア開発のやり方の改善

要件定義・仕様化・実装の継ぎ目をなくす開発手法。
ビジネスロジックを軸に組み立てる。
値の種類(型)に注目してモジュール化する

  • Login to see the comments

ソフトウェア開発のやり方の改善

  1. 1. ソフトウェア開発のやり方の改善 2020年7月30日(木曜日) 有限会社 システム設計 代表 増田 亨 a better way of developing software
  2. 2. CCSR手法 C : Continuous(継続的) C : Concurrent(並行的) SR : Stepwise Refinement (段階的改善) 2020/7/30 2
  3. 3. ソフトウェア開発の現状 膨大な時間とコストをかけて 品質の悪いドキュメントとコードを量産 地図も羅針盤も六分儀も持たず 場あたり的な開発の繰り返し 複雑怪奇 変更がやっかいで危険な ソフトウェア 2020/7/30 3
  4. 4. ソフトウェアの状況 複雑怪奇 変更がやっかいで危険 全体像がわからない 全体が見通せない つながりが見えない つながりが予想外 軸・中心がわからない 大きな固まり 2020/7/30 4
  5. 5. 改善の三つの着眼点 開発者が主体的に ➢ 全体像の認識合わせ ➢ つながりを確かめ整える ➢ 軸を強化し、周辺を広げる コードに責任を持つ ・全体に興味を持つ ・俯瞰図を眺めて、方向と関係を確認する習慣 ・俯瞰図を自分で描いて説明する練習 ・つながりに興味を持つ ・つながりを確認する習慣 ・不要なつながりを取り除く習慣 ・軸を中心に考える習慣 ・広げるまえに軸を強化する習慣 ・広げたら、さらに軸を補強する習慣 この三つに取り組むと、見通しのよい、構造が安定し、変更が楽で安全なソフトウェアを生み出せる CCSR手法は、この改善活動を現場に導入し実践するための手引きとヒント 2020/7/30 5
  6. 6. 改善のアプローチ ① 要件定義・仕様化・実装の継ぎ目をなくす ② ビジネスロジックを軸に組み立てる ③ 値の種類(型)でモジュール化する 2020/7/30 6
  7. 7. ① 要件定義・仕様化・実装の継ぎ目をなくす ふわふわした 要求 複雑怪奇な 実装 質の高い要件定義 しっかり設計された 実装 明確な仕様の記述断片的で あやしげな 変換ゲーム つながりの軸 2020/7/30 7
  8. 8. ① 要件定義・仕様化・実装の継ぎ目をなくす 質の高い要件定義 しっかり設計された 実装 仕様を明確に記述 RDRA 2.0 ・要件の可視化と認識合わせ ・つながりによる整合性 Javaで記述 JIGで可視化 ・RDRAモデルとの直接的なマッピング ・ソフトウェア仕様を型式的に記述 ・IDEで入力補完・リファクタリング・インスペクション 実装パターン フレームワーク ・型の定義をそのままクラスとして実装 ・ビジネスロジックの実装パターン ・ドメインオブジェクトと外部形式のマッピングメカニズム 2020/7/30 8
  9. 9. ② ビジネスロジックを軸に組み立てる 三層+ビジネスロジック プレゼンテーション層 アプリケーション層 データソース層 ビジネスロジック ビジネスルールの オブジェクト表現 ドメインオブジェクトの永続化 記録と参照 計算判断の実行 外部形式と ドメインオブジェクトの マッピング 2020/7/30 9
  10. 10. ② ビジネスロジックを軸に組み立てる アプリケーション ビジネス ロジック 事業活動 ビジネス ルール ビジネスモデル 事業方針 つながりで理解する ビジネスルールの理由を ざっくりと理解する 要件定義の軸として ビジネスルールに 焦点を合わせる ビジネスルールの オブジェクト表現 ビジネスルールで扱う 値の種類(型)に注目して 仕様化と実装を行う 2020/7/30 10
  11. 11. ③ 値の種類(型)でモジュール化する ファクト ロジック リザルト ビジネスで起こったことや 現在の状態を表現する さまざまな値(型) 計算・判断の式 計算・判断の結果を表現する さまざまな値(型) 2020/7/30 11 ビジネスルール表現の3要素
  12. 12. カプセル化 ③ 値の種類(型)でモジュール化する ファクト ロジック リザルト ビジネスで起こったことや 現在の状態を表現する さまざまな値(型) 計算・判断の式 計算・判断の結果を表現する さまざまな値(型) メソッドの返す型メソッドフィールドと引数 ビジネスルールをカプセル化して アプリケーション固有の型を定義 → 変更が楽で安全になる 2020/7/30 12
  13. 13. 2020/7/30 13 CCSR手法の試行・導入・実践
  14. 14. 手法とツール CCSRハンドブック 初伝・中伝・奥伝 パターンカタログ 俯瞰図・詳細図 要件定義ツール Enterprise Architect + RDRA アドイン 仕様記述ツール IntelliJ IDEA + JIG プラグイン 参照実装 ・図書館システム ・ビジネスロジックパターン ・オブジェクトマッピング プロセスの概要 技法の解説 実践のヒント githubで公開中 ビジネスプロセス、 システム機能、 型の設計パターン 入力補完 可視化 リファクタリング インスペクション ブラウザで利用 AppStream 2020/7/30 14
  15. 15. CCSR 導入と実践の支援 正しいものを正しく作る塾 第2シーズン 9月開講 (個人・法人) CCSR ラーニング リモート稽古 (個人) ワークショップ (法人) OJT(実案件) (法人) 稽古相手と稽古の場の提供 (マンツーマン/小人数) 2020/7/30 15
  16. 16. CCSR手法の導入と実践 C : Continuous(継続的) C : Concurrent(並行的) SR : Stepwise Refinement (段階的改善) 2020/7/30 16 ソースコード全体 開発活動全体 個人のスキル チームの振る舞い
  17. 17. CCSR手法 ハンドブックとパターンカタログの紹介 2020/7/30 17
  18. 18. 要件定義・仕様化・実装が 連動した開発活動 ハンドブックは、このプロセスで 開発を進めるための技法や指針 を説明 2020/7/30 18
  19. 19. 事業活動モデルの基本要素 アクタ リソース プロセス ・意思のある行動主体 ・嗜好のある判断主体 ・行動履歴 ・顧客 ・サプライヤ ・従業員 ・物品 ・場所 ・人 ・時間 ・イベント連鎖 ・約束と履行 ・予定と実施 ・現在のリソース ・将来のリソース ・起きたこと ・起きるべきこと 2020/7/30 19
  20. 20. 売買契約の 獲得 調達の予定 提供能力の 維持 ・注文 ・予約 ・販促 ・引合 ・条件提示 ・合意 契約の履行 調達の進捗 ・物品 ・サービス ・仕入 ・生産 ・提供 ・回収 ・受入 ・支払 顧客支援の 活動 6つの主活動 ・相談 ・連絡 ・報告 ・納期回答 ・提供可否 ・利用可否 2020/7/30 20
  21. 21. 管理番号の発番 (registration) 中核機能 アカウント open() close() suspend() isAlive() ・アクタ ・リソース ・プロセス ・値(value)の変化の発生 ・状態(status)の変化の発生 起きたこと or 起きるべきこと イベント発生の 記録 履歴から 状態の導出 ・現在 or 将来の値(value)の導出 ・現在 or 将来の状態(status)の導出 ビジネスロジック (計算・判断) 値/状態を使った ビジネスルール基づく計算・判断通知(notification) 備考(remarks)の記録・参照 パフォーマンス測定 監査ログ 実体化(materialize) 可視化(visualize) ・締め処理 ・請求 ・査定 ・一覧(選択・順序) ・詳細表示 システム機能のモデル 事業活動が異なっても、 これらの要素の組み合わせで実現する 連携(invocation/queueing) 認可 2020/7/30 21認証
  22. 22. ビジネスロジックを表現する値の種類と操作のパターン(型の設計パターン) 金額 数量 単位 換算率 日付 日数 期間 帯域 (band) 時刻 時間数 時間帯 識別番号 ・ビジネスルールを記述するための基本語彙 ・型(もっとも軽量な形式手法)で仕様を記述する(手続き的プログラミングをやらない) ・引数と返す型を明示して、契約による設計を徹底する(防御的プログラミングをやらない) ・すべてイミュータブル(不変)にして挙動を安定させる(テストを減らす) 生成・比較・文字列表記 加減乗除・比較・min/max・文字列表記 加減乗除・比較・min/max・文字列表記 区分 種類 タイプ カテゴリ 分類・一致/不一致・分岐処理 識別名 グループ リスト セット マップ (写像) 集合操作・集約演算・検査 2020/7/30 22
  23. 23. 要件定義と仕様記述の 可視化サンプル 2020/7/30 23
  24. 24. RDRA 要件定義:軸となるビジネスルールの可視化 ユースケース複合図状態遷移(ユースケース付き) 2020/7/30 24
  25. 25. ソースコードから実装の中核を可視化 application/service/* domain/model/* 2020/7/30 25 JIGでソースコードから自動生成
  26. 26. 三層+ビジネスロジックの可視化 プレゼンテーション層 presentation/* アプリケーション層 application/* データソース層 datasource/* ビジネスロジック層 domain/model/* 2020/7/30 26 JIGでソースコードから自動生成

×