SlideShare a Scribd company logo
Submit Search
Upload
Login
Signup
ソフトウェア設計のすすめ
Report
Yoshimura Soichiro
Follow
Software Engineer at 株式会社ドワンゴ
Oct. 27, 2014
•
0 likes
•
39,564 views
1
of
51
ソフトウェア設計のすすめ
Oct. 27, 2014
•
0 likes
•
39,564 views
Download Now
Download to read offline
Report
Technology
社内LTでソフトウェア設計のすゝめを比較的新しいエンジニア向けにしたので、その資料を公開します。
Yoshimura Soichiro
Follow
Software Engineer at 株式会社ドワンゴ
Recommended
Webアプリを並行開発する際のマイグレーション戦略
Takayuki Shimizukawa
4.6K views
•
49 slides
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
64.8K views
•
119 slides
組織にテストを書く文化を根付かせる戦略と戦術
Takuto Wada
76.4K views
•
33 slides
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
健人 井関
79.1K views
•
28 slides
テストコードの DRY と DAMP
Yusuke Kagata
1.5K views
•
11 slides
UXデザインワークショップ資料 by ATOMOS DESIGN
Akihiko Kodama
8.5K views
•
21 slides
More Related Content
What's hot
Oss貢献超入門
Michihito Shigemura
28.9K views
•
145 slides
OAuth 2.0 Web Messaging Response Mode - OpenID Summit Tokyo 2015
Toru Yamaguchi
4.7K views
•
35 slides
トランクベース開発を活用して爆速に開発した話
Tier_IV
1.1K views
•
20 slides
ソフトウェア開発工程とテスト入門
tadaaki hayashi
17.2K views
•
41 slides
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
159.5K views
•
16 slides
tf,tf2完全理解
Koji Terada
199K views
•
49 slides
What's hot
(20)
Oss貢献超入門
Michihito Shigemura
•
28.9K views
OAuth 2.0 Web Messaging Response Mode - OpenID Summit Tokyo 2015
Toru Yamaguchi
•
4.7K views
トランクベース開発を活用して爆速に開発した話
Tier_IV
•
1.1K views
ソフトウェア開発工程とテスト入門
tadaaki hayashi
•
17.2K views
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
•
159.5K views
tf,tf2完全理解
Koji Terada
•
199K views
今どきのアーキテクチャ設計戦略 - QCon Tokyo 2016
Yusuke Suzuki
•
23.7K views
オブジェクト指向できていますか?
Moriharu Ohzu
•
236.7K views
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
•
29K views
ドメイン駆動設計 失敗したことと成功したこと
BIGLOBE Inc.
•
23.3K views
良いコードとは
Nobuyuki Matsui
•
52.7K views
こわくない Git
Kota Saito
•
878.1K views
Python入門 : 4日間コース社内トレーニング
Yuichi Ito
•
344.5K views
良い?悪い?コードコメントの書き方
Shigenori Sagawa
•
42.6K views
IT系エンジニアのためのプレゼンテーション入門
Masahito Zembutsu
•
289.3K views
リンク機構を有するロボットをGazeboで動かす
tomohiro kuwano
•
2.9K views
テスト用ライブラリ power-assert
Takuto Wada
•
12.6K views
ChatGPTを使った要件定義のRDRA的考察.pdf
Zenji Kanzaki
•
704 views
REST API のコツ
pospome
•
52.2K views
つたわるスライド
Kazuyoshi Goto
•
1.9K views
Similar to ソフトウェア設計のすすめ
サービス開発における工程
Hidetoshi Mori
1.4K views
•
24 slides
It業界の優良企業の見つけ方 20140502 黒田
Yusuke Kuroda
1.4K views
•
95 slides
レガシーシステム再生のアンチパターン
Kent Ishizawa
2.3K views
•
12 slides
Ms retail update ra 20191030
Microsoft Azure Japan
946 views
•
70 slides
ReactでCMSを作ったときにハマったこと
kazuki matsumura
6.2K views
•
31 slides
1)空気を読む家』のこれまでの取り組み
aitc_jp
21 views
•
28 slides
Similar to ソフトウェア設計のすすめ
(20)
サービス開発における工程
Hidetoshi Mori
•
1.4K views
It業界の優良企業の見つけ方 20140502 黒田
Yusuke Kuroda
•
1.4K views
レガシーシステム再生のアンチパターン
Kent Ishizawa
•
2.3K views
Ms retail update ra 20191030
Microsoft Azure Japan
•
946 views
ReactでCMSを作ったときにハマったこと
kazuki matsumura
•
6.2K views
1)空気を読む家』のこれまでの取り組み
aitc_jp
•
21 views
PCCC21:株式会社日立製作所 「研究開発力向上のための研究DXソリューション」
PC Cluster Consortium
•
359 views
Mizukiryu refactering-20110821
Mizuki Yamanaka
•
572 views
鹿駆動
Shinichi Kozake
•
800 views
リクルートにおけるPaaS活用事例
Recruit Technologies
•
3.4K views
Techlion vol8 yusuke #techlion
Yusuke Yamamoto
•
624 views
13_B_5 Who is a architect?
Atsushi Fukui
•
1.2K views
20121124 学生セミナー「基礎からわかる! IT業界とプログラミング」
Takashi Uemura
•
9.3K views
レスポンシブ対応 をサポートするプラグイン
Kawaji Masaki
•
837 views
基調講演「データのグループウェア化」
Cybozucommunity
•
1.6K views
[ESM_CM セミナー]小さく作って大いに役立つスマートフォンアプリ(CYCLONE)公開用
masashi takehara
•
1.2K views
第11回SIA例会プレゼン資料
Tae Yoshida
•
1.1K views
モバイルビジネスの動向
Hidetoshi Mori
•
613 views
20140829 山形でJAWS-UGをやって困った2つのこと
Seiji Akatsuka
•
768 views
Final present
Loc Huynh
•
165 views
More from Yoshimura Soichiro
FirebaseでN高生証明botを作ってみた
Yoshimura Soichiro
2.6K views
•
23 slides
N高等学校でやってるプログラミング
Yoshimura Soichiro
2.8K views
•
16 slides
失敗の話
Yoshimura Soichiro
7K views
•
23 slides
並行処理初心者のためのAkka入門
Yoshimura Soichiro
49.9K views
•
68 slides
Obsのプラグイン作ってみた
Yoshimura Soichiro
18.9K views
•
25 slides
Developers Summit 2014 「Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスクラム開発の勘所」
Yoshimura Soichiro
117.2K views
•
79 slides
More from Yoshimura Soichiro
(9)
FirebaseでN高生証明botを作ってみた
Yoshimura Soichiro
•
2.6K views
N高等学校でやってるプログラミング
Yoshimura Soichiro
•
2.8K views
失敗の話
Yoshimura Soichiro
•
7K views
並行処理初心者のためのAkka入門
Yoshimura Soichiro
•
49.9K views
Obsのプラグイン作ってみた
Yoshimura Soichiro
•
18.9K views
Developers Summit 2014 「Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスクラム開発の勘所」
Yoshimura Soichiro
•
117.2K views
チームの目標への柔軟な対応
Yoshimura Soichiro
•
3.3K views
20121126 Solr@ニコニコ生放送
Yoshimura Soichiro
•
2.5K views
私とインクス
Yoshimura Soichiro
•
3.6K views
Recently uploaded
GraphQLはどんな時に使うか
Yutaka Tachibana
6 views
•
37 slides
遠隔お酌IoTLT2309.pptx
Yoshiaki Ito
57 views
•
12 slides
IGDA Japan SIG Audio #20-1 室内・野外でのマイク収録と整音.pdf
IGDA Japan SIG-Audio
97 views
•
31 slides
gtk4_gem_usage.pdf
ssuser0ef4681
11 views
•
6 slides
20230921_IoTLT_vol103_kitazaki_v1.pdf
Ayachika Kitazaki
81 views
•
16 slides
テスト自動化.pdf
ssuserf8ea02
16 views
•
26 slides
Recently uploaded
(8)
GraphQLはどんな時に使うか
Yutaka Tachibana
•
6 views
遠隔お酌IoTLT2309.pptx
Yoshiaki Ito
•
57 views
IGDA Japan SIG Audio #20-1 室内・野外でのマイク収録と整音.pdf
IGDA Japan SIG-Audio
•
97 views
gtk4_gem_usage.pdf
ssuser0ef4681
•
11 views
20230921_IoTLT_vol103_kitazaki_v1.pdf
Ayachika Kitazaki
•
81 views
テスト自動化.pdf
ssuserf8ea02
•
16 views
松下研究室紹介_関西大学高槻キャンパスオープンキャンパス
Matsushita Laboratory
•
26 views
CCoE実践者コミュニティ#1_CCoEが進めるセキュリティカイゼンの旅.pptx
Tomoaki Tada
•
25 views
ソフトウェア設計のすすめ
1.
ソフトウェア設計のすゝめ 株式会社ドワンゴ 吉村総一郎
(@sifue)
2.
ソフトウェア設計を なぜするのか?
3.
そもそも設計って 必要なの?
4.
プロトタイピングしながら作って いくなら必要ないんじゃないの?
5.
そうじゃない場合もある
6.
例えばどんな時か 複雑な要件を扱わなくてはならない時 考慮の抜け漏れのしやい複雑な業務用件
無停止メンテナンスなどの運用 耐障害性 拡張性 多くのシステムと連携
7.
複雑な要件を持つシステムは、 建築物で言えば高層ビルのようなもの 膨大な建築法
電気 ガス 空調 間取りの使い勝手 (トイレの数?)
8.
複雑な要件の考慮が抜けている場合には 大きなコストを払うことになることもある
9.
犬小屋をプロトタイピングで作って それを拡張、改修し続ければ高層ビルになるか?
10.
ならない 当初犬小屋で良かったものが要求の変更で 高層ビルが求められる悲劇がそこにはあるが...
11.
できるのはハウルの動く城
12.
致命的な問題にぶち当たれば作り直しが必要 ある日突然考慮漏れの要件にぶち当たってシステム停止に陥ることも
13.
ただ逆に要件の衝突が起こらないような シンプルな要件のプロダクトなら プロトタイピングを利用した
インクリメントな開発はかなり有効
14.
とはいえ複雑そうなものは 設計を考えよう
15.
でも突然ソフトウェア設計しろと言わ れても何をするかよくわからない…
16.
そんな方におすすめの第一歩
17.
図を書いてみよう
18.
図といっても 書き方がわからない…
19.
そんなあなたに おすすめの記法
20.
UML
21.
UMLとは 統一モデリング言語 (Unified
Modeling Language)という、1997年 に選定された世界的に利用 できるソフトウェアのため の設計図の書き方 現在は、UML 2.4.1が最新 であり、13種類の図の書き 方を利用することができる
22.
UMLがない場合の図は どんな感じか?
23.
家計簿アプリの設計の例 変動費 月次集計サービス
支出 固定費 実は同じものを表しているのに、記法が違うために四角がど ういう意味で、丸がどういう意味でとか、緑の線があれで、 青い線があれとかを毎回説明しなくてはいけない
24.
つらい 設計レビューをする前に全員が図の記法を理解する ところから始まる。設計レビューに途中からやって
きた人が図の記法がわからない...。新たにjoinした メンバーも資料を見て意味がわからない。
25.
UMLはそういう問題を 解決してくれます!
26.
どんな図があるのか?よく使うだろう5つを紹介 ユースケース図: 要件の構造を表現
コンポーネント図: システム構成を表現 パッケージ図: パッケージの構成を表現 クラス図: クラスの関連を表現 アクティビティ図: フローチャートのようなもの
27.
家計簿アプリの設計 ユースケース図
28.
家計簿アプリの設計 コンポーネント図
29.
家計簿アプリの設計 パッケージ図
30.
家計簿アプリの設計 クラス図
31.
家計簿アプリの設計 アクティビティ図
32.
こんなふうに記述できます
33.
図はわかってけど 何で書けば良いの?
34.
おすすめのUMLモデリングツール Gliffy Astah
Community PlantUML
35.
Gliffy Confluenceのプラグイン 結構きれい
図が大きくなると重い 制約が緩めでUML以外の記 法もできる クラス図の例
36.
Astah Community MacとWinで動くJava製のデ
スクトップアプリ ページに添付すると Confluenceで図を表示もで きる UMLに違反してる図は書き にくいクラス図の例
37.
PlantUML テキストベースでUML書け る(<|--
が継承とか) 最近流行ってる Confluenceでも記述可能 GUIのサポートないので UMLの仕様を知っている 必要があるクラス図の例
38.
以上紹介したツールを使ってソフ トウェアの設計や設計レビューを やっていきましょう!
39.
おすすめ本 UMLの本というより総合的なソフトウェア開発の本
40.
設計のやり方はわかったけ ど、具体的に何するの?
41.
設計の目的って何?
42.
設計とは、 要求に対して、狙った要件を設定で きるようにすること。正解はない。
43.
よく出てくる設計ノウハウ システム構成をレイヤー化する/しない モジュール化する/しない
モジュールをレイヤー化する/しない SOLID原則を守る/守らない
44.
システム構成をレイヤー化する/しない 多層アーキテクチャ レイヤごとは疎結合にする
右は3層+LBの例 レイヤ毎に再起動更新できる レイヤごとで台数を増やし負荷をコ ントロールできる レイヤが増えると管理コストは増え る
45.
モジュール化する/しない 汎用サブモジュールをくくり出 せ、重複が減って保守コストが
下がる モジュールごとで人を割り当て るので更新衝突が少なくなる モジュール化することで開発コ ストは増える
46.
モジュールをレイヤー化する/しない DDDのレイヤー化アーキテク チャの例
ビジネスロジック(domain層) がapplication層やui層のフ レームワークのVerUP等の変更 をうけない 依存関係の強制を守るために依 存関係の逆転則とかを使わなく てはいけないなど高コスト
47.
SOLID原則を守る/守らない 以下は、コストと再利用性のトレードオフとなる 単一責務の原則:
いろいろやるクラスを作らない オープンクローズドの原則: 状態の変更からは守り、クラス の自体の拡張を提供する リスコフの置換原則: 継承は意味として親と子の交換可能で あるようなクラス設計にする 依存関係逆転の原則: インターフェースを使ってレイヤ間の 依存関係を一方向にする インターフェースの分離の原則: 内部実装を隠ぺいする
48.
依存関係逆転の原則の例 インターフェースを作ってそれを依存先で実装する
49.
適切な設計の目的を果たすための 色々なパターンがあるのでぜひ探してみてください マーチン・ファウラーのリファクタリング
GoFのデザインパターン PoEAA エリック・エヴァンスのドメイン駆動設計 Lean architecture Microservices
50.
要件漏れ/衝突が起こらないよう、開発者 の狙い通りに開発していけるようしっかり レビューしながら考えていきましょう!
51.
以上 ご清聴ありがとうございました