Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ロバストネス分析を用いた設計と工数見積もり / rakus-meetup-20210217

819557f756dadd4b0b7a9329f6873e52?s=47 Hikaru Sakata
February 17, 2021
630

ロバストネス分析を用いた設計と工数見積もり / rakus-meetup-20210217

819557f756dadd4b0b7a9329f6873e52?s=128

Hikaru Sakata

February 17, 2021
Tweet

Transcript

  1. #RAKUSMeetup ©2020 RAKUS Co., Ltd. ©2020 RAKUS Co., Ltd. ロバストネス分析を用いた設計と工数見積もり

    坂田光
  2. #RAKUSMeetup ©2020 RAKUS Co., Ltd. 自己紹介 • 坂田 光 •

    2013年4月 中小SIer入社 • 電子マネーサービスのWebアプリケーション開発現場に7年 • 2020年7月 ラクス入社 • 楽楽精算開発チーム • 開発チーム内のサブリーダとして、機能開発に従事
  3. #RAKUSMeetup ©2020 RAKUS Co., Ltd. 楽楽精算について • 経費・交通費・出張費・旅費・交際費など、すべての経費精算フローを、 社内の誰もが「楽」できるようになるクラウド型の経費精算システムです。 •

    2009年リリース • 7,000社が導入!国内導入社数No.1の経費精算システム
  4. #RAKUSMeetup ©2020 RAKUS Co., Ltd. 楽楽精算について • 開発チームの体制 • 3~4名の小規模チーム×3

    • 各チームで並行して機能開発を実施 • ウォーターフォール
  5. #RAKUSMeetup ©2020 RAKUS Co., Ltd. なぜロバストネス分析なのか • 工数見積もりを一部ベテランの経験則で行っていた • ベテランに任せきりにするのではなく、誰でも定量的に見積もりを行えるよ

    うな仕組みが欲しい • そこで、影響範囲を定量的に洗い出すことのできるロバストネス分析を取り 入れてみたのが始まり
  6. #RAKUSMeetup ©2020 RAKUS Co., Ltd. ロバストネス分析とは • ユースケースを設計に落とし込むための作業 • ユースケースを三つの要素で視覚的に表現する(ロバストネス図)

    • ロバスト=堅牢、頑強の意 • ユースケースが十分に堅牢であることを検証する • この図をインプットとして、さらに詳細な分析(詳細設計やクラス図の作成 等)を行う
  7. #RAKUSMeetup ©2020 RAKUS Co., Ltd. ロバストネス分析とは • ロバストネス図を構成する三つの要素 • バウンダリ

    • システムと外部とのインタフェース • 主に画面 • エンティティ • システム内で保持するデータ • 主にデータベース • コントロール • システムが実行する処理 • 主にアクション バウンダリ コントロール エンティティ
  8. #RAKUSMeetup ©2020 RAKUS Co., Ltd. ロバストネス分析とは • ロバストネス図を構成する三つの要素 • バウンダリ⇔コントロール、コントロール⇔エンティティ間の接続しかできない

    バウンダリ コントロール エンティティ
  9. #RAKUSMeetup ©2020 RAKUS Co., Ltd. ロバストネス分析とは • 例えば以下のようなユースケースの場合 • ログイン画面でログインを実行

    • サーバ側でユーザ情報テーブルから情報を取得し、ログイン処理を実行 • TOP画面に遷移 ログイン画面 ログイン処理 ユーザ情報テーブル TOP画面
  10. #RAKUSMeetup ©2020 RAKUS Co., Ltd. ロバストネス分析の効果 • システム構成を簡単な三つの要素で表現可能 • 三つの要素で単純化されているので、理解しやすい

    • 画面⇔アクション⇔DBの関係性が一目でわかるところが特に◦
  11. #RAKUSMeetup ©2020 RAKUS Co., Ltd. ロバストネス分析の効果 • 関係する要素を網羅的に図示することで、影響範囲の抜け漏れを防ぐ • ユースケースを書きだした段階では気づかなかった影響箇所も気づきやすい

  12. #RAKUSMeetup ©2020 RAKUS Co., Ltd. 分析結果から工数を定量的に見積もる • 楽楽精算開発チームでは、ロバストネス分析の結果を実装からテストまでの工 数見積もりに活用している •

    作成したロバストネス図に含まれる要素の数を種類ごとに数え上げ、あらかじ め定義しておいた係数をかけて、各工程の工数を算出する • 見積もり用のエクセルテンプレートがあるので、そこに数字を入れるだけで 算出されるようになっている
  13. #RAKUSMeetup ©2020 RAKUS Co., Ltd. 分析結果から工数を定量的に見積もる • 例えば、以下のようなロバストネス図を作成した場合 ログイン画面 ログイン処理

    ユーザ情報テーブル TOP画面 ユーザ情報更新画面 ユーザ情報更新画面表示 ユーザ情報更新処理 更新完了画面
  14. #RAKUSMeetup ©2020 RAKUS Co., Ltd. 分析結果から工数を定量的に見積もる • まず三つの要素それぞれを数え上げる ログイン画面 ログイン処理

    ユーザ情報テーブル TOP画面 ユーザ情報更新画面 ユーザ情報更新画面表示 ユーザ情報更新処理 更新完了画面 バウンダリ コントロール エンティティ 4 3 1
  15. #RAKUSMeetup ©2020 RAKUS Co., Ltd. 分析結果から工数を定量的に見積もる • 数え上げた要素数をテンプレートに入力する バウンダリ コントロール

    エンティティ 4 3 1 すると・・・ 実装 テストコード作成 コードレビュー 2 1 1 (人日) ↑のように工程ごとの工数が算出される
  16. #RAKUSMeetup ©2020 RAKUS Co., Ltd. 分析結果から工数を定量的に見積もる • 元々用意された計算式に則って算出されるので、改修内容によっては工数が過 少になったり過大になったりする場合もある •

    要素数は少ないが、個々の改修難易度が高い • 要素数は多いが、いくつかの共通処理の改修だけで全ての画面に横展開できる • etc… • そのような場合は、改修難易度や横展開可否などの定性的要因に応じた係数を かけることで、算出される工数を調節可能
  17. #RAKUSMeetup ©2020 RAKUS Co., Ltd. 分析結果から工数を定量的に見積もる • 例えば改修機能の難易度が高く、算出された工数よりも多くかかりそうな場合 バウンダリ コントロール

    エンティティ 難易度 4 3 1 高 すると・・・ 実装 テストコード作成 コードレビュー 4 2 2 (人日) ↑あらかじめ定められた係数をかけて、工 数が上方修正される ←難易度を指定
  18. #RAKUSMeetup ©2020 RAKUS Co., Ltd. 分析結果から工数を定量的に見積もる • その他、以下のような要素でも調節可能 • 改修内容(追加、変更、削除)

    • 工程ごとに重みをつける
  19. #RAKUSMeetup ©2020 RAKUS Co., Ltd. 取り組みの実績 見積もり工数 実績工数 相対誤差 (実績-見積もり)/見積もり

    61 53 -0.13 88 102 0.16 42 46 0.10 57 55 -0.04 135 197 0.46 42 62 0.48 • 一部振れ幅の大きい場合も見られるが、概ね±0.2程度の誤差 (過去一年間の主要な機能開発)
  20. #RAKUSMeetup ©2020 RAKUS Co., Ltd. 取り組みの課題 • 難易度や横展開といった定性的要素で補正をかけていく必要があり、この辺り は経験則になる •

    ある程度ベテランの意見が必要になる場合もある • ものによっては補正をかけても明らかに実情とかけ離れた数字が出てくる場合 もある • 改修対象の画面が多い割に、修正自体はサーバサイドの共通処理一か所で済 んでしまう場合等 • このあたりは実情も踏まえて、計算方法や補正の方法を改善していきたい
  21. #RAKUSMeetup ©2020 RAKUS Co., Ltd. 取り組みの効果 • ある程度の課題はあるものの、ロバストネス図を適切に作成できてさえいれば、 誰でも一定の精度で工数見積もりが可能 •

    一定の計算式を元に算出されているので、数字に信頼感があり、チーム内で の合意形成も早い • 「ここの数字の根拠は?」、「ここ盛り過ぎじゃない?」といったやり取り がほとんどなくて済む • 影響範囲が視覚的に把握しやすい • 文章で羅列するよりもわかりやすく、抜け漏れが起こりにくい
  22. #RAKUSMeetup ©2020 RAKUS Co., Ltd. ご清聴ありがとうございました