Download - 20151018 study-設計を学ぶための最初の一冊はなにがいいのだろうか
![Page 1: 20151018 study-設計を学ぶための最初の一冊はなにがいいのだろうか](https://reader036.vdocuments.site/reader036/viewer/2022082800/58adc5bd1a28ab56468b5d85/html5/thumbnails/1.jpg)
設計を学ぶための最初の一冊は
なにがいいのだろうか黒澤慎太郎10/18/2015
![Page 2: 20151018 study-設計を学ぶための最初の一冊はなにがいいのだろうか](https://reader036.vdocuments.site/reader036/viewer/2022082800/58adc5bd1a28ab56468b5d85/html5/thumbnails/2.jpg)
設計とは
• 設計(せっけい、design)は、必要とする機能を具現化し検討した結果を建築物や工業製品、情報システム等を造るために仕様(設計図書)や設計図・設計書等を作る作業である。(Wikipediaより引用)
![Page 3: 20151018 study-設計を学ぶための最初の一冊はなにがいいのだろうか](https://reader036.vdocuments.site/reader036/viewer/2022082800/58adc5bd1a28ab56468b5d85/html5/thumbnails/3.jpg)
ソフトウェア設計とは
• ソフトウェアアーキテクチャ(Software
Architecture)は、ソフトウェアコンポーネント、それらの外部特性、またそれらの相互関係から構成される。(Wikipediaより引用)
![Page 4: 20151018 study-設計を学ぶための最初の一冊はなにがいいのだろうか](https://reader036.vdocuments.site/reader036/viewer/2022082800/58adc5bd1a28ab56468b5d85/html5/thumbnails/4.jpg)
私が議論したい"設計"とは
• ソフトウェアに秩序をもたらすもの
• 原則に順ずる。つまり、目的を持ってコード、クラスなどを配置する
• 正解がない。完成がない。常に変更され続ける
• ここでは、オブジェクト指向の設計に限定する
![Page 5: 20151018 study-設計を学ぶための最初の一冊はなにがいいのだろうか](https://reader036.vdocuments.site/reader036/viewer/2022082800/58adc5bd1a28ab56468b5d85/html5/thumbnails/5.jpg)
設計について議論したいと思ったのはなぜか
• 私の職場では設計があまりにも軽視されている
• 「ソフトウェアは目的を達成するために、正しく動けばいい」ではなく、「正しく動くのは当然で、ソフトウェアをいかに長生きさせるかが大事」だと思っているから。
• 振る舞いが変更されること前提だから"ソフト"ウェアなのであって、その対策をするのは当然のこと
![Page 6: 20151018 study-設計を学ぶための最初の一冊はなにがいいのだろうか](https://reader036.vdocuments.site/reader036/viewer/2022082800/58adc5bd1a28ab56468b5d85/html5/thumbnails/6.jpg)
設計が軽視されている例
• バグが発生し、提供したソフトウェアに問題がおきた。
• バグが発生した原因の報告を弊社では次のようにする。
• 「ある一つの仕様変更の際、資産をすべてgrepして修正
しなかったことがバグ発生の原因」(仕様変更とは、数値が変わる、条件式の変更など)
• 「ある一つの仕様変更」のために、「いくつかの資産を修正しなければならない」ことが原因なのではなかろうか。なんだ修正漏れって。
![Page 7: 20151018 study-設計を学ぶための最初の一冊はなにがいいのだろうか](https://reader036.vdocuments.site/reader036/viewer/2022082800/58adc5bd1a28ab56468b5d85/html5/thumbnails/7.jpg)
設計が軽視されている例
• コピーアンドペースト文化
• 似たようなロジックを躊躇なく量産
• そもそも重複したロジックを量産
• 設計を評価する文化がない
• etc...
![Page 8: 20151018 study-設計を学ぶための最初の一冊はなにがいいのだろうか](https://reader036.vdocuments.site/reader036/viewer/2022082800/58adc5bd1a28ab56468b5d85/html5/thumbnails/8.jpg)
設計によりソフトウェアが秩序を保っていればの例
• 一つの仕様変更による修正箇所は一つのモジュールに限られる(オープン・クローズドの原則)
• 単体テストが可能(依存性逆転の原則等)
• 定時に帰れる
• etc...
![Page 9: 20151018 study-設計を学ぶための最初の一冊はなにがいいのだろうか](https://reader036.vdocuments.site/reader036/viewer/2022082800/58adc5bd1a28ab56468b5d85/html5/thumbnails/9.jpg)
設計を学ぶための最初の一冊目はなにが適切だろうか
• まずはパターンを学ぶのが良いと思う
• 「設計」という単語の意味する範囲が広すぎる
• 設計対象が広い範囲を扱う設計は、どうしても抽象化という概念が必須となる。
• そのため、最初はより具体的な設計を学ぶのが良い
![Page 10: 20151018 study-設計を学ぶための最初の一冊はなにがいいのだろうか](https://reader036.vdocuments.site/reader036/viewer/2022082800/58adc5bd1a28ab56468b5d85/html5/thumbnails/10.jpg)
設計のレベル
• 小さい範囲
• クラス設計
• クラスの関係についての設計
• 範囲がほどほど
• コンポーネント設計
• コンポーネントの関係についての設計
• 全体に及ぶ
• ソフトウェアアーキテクチャ設計
![Page 11: 20151018 study-設計を学ぶための最初の一冊はなにがいいのだろうか](https://reader036.vdocuments.site/reader036/viewer/2022082800/58adc5bd1a28ab56468b5d85/html5/thumbnails/11.jpg)
クラス設計
• クラスに、どのようなデータと振る舞いを持たせるか
• 具体的には、フィールド変数、メソッドをどう作っていくか設計する
![Page 12: 20151018 study-設計を学ぶための最初の一冊はなにがいいのだろうか](https://reader036.vdocuments.site/reader036/viewer/2022082800/58adc5bd1a28ab56468b5d85/html5/thumbnails/12.jpg)
クラス設計を学ぶための最初の一冊
• 「実装パターン」by Kent Beck
![Page 13: 20151018 study-設計を学ぶための最初の一冊はなにがいいのだろうか](https://reader036.vdocuments.site/reader036/viewer/2022082800/58adc5bd1a28ab56468b5d85/html5/thumbnails/13.jpg)
クラス設計を学ぶ上での障害
• 実際の開発では、そもそも「クラスとして扱うためのオブジェクト」へたどり着けないかもしれない
• つまり、小さい範囲の設計を活かすためには、広い範囲の設計が必須となってしまう
![Page 14: 20151018 study-設計を学ぶための最初の一冊はなにがいいのだろうか](https://reader036.vdocuments.site/reader036/viewer/2022082800/58adc5bd1a28ab56468b5d85/html5/thumbnails/14.jpg)
設計を学ぶ上での障害
• モデリングの技術が必要になる
• 抽象的な存在を対象とするため、敷居が高い
![Page 15: 20151018 study-設計を学ぶための最初の一冊はなにがいいのだろうか](https://reader036.vdocuments.site/reader036/viewer/2022082800/58adc5bd1a28ab56468b5d85/html5/thumbnails/15.jpg)
結論
• 設計は、規模に関わらず大事な技術
• まずは、小さいクラスの設計から学ぶのが良い
• 大きい範囲の設計も、あとで学ぶ必要がある
• Kent Beckは神
![Page 16: 20151018 study-設計を学ぶための最初の一冊はなにがいいのだろうか](https://reader036.vdocuments.site/reader036/viewer/2022082800/58adc5bd1a28ab56468b5d85/html5/thumbnails/16.jpg)
完
• ご静聴ありがとうございました