20151018 study-設計を学ぶための最初の一冊はなにがいいのだろうか

16
設計を学ぶための 最初の一冊は なにがいいのだろうか 黒澤 慎太郎 10/18/2015

Upload: bonjin6770-kurosawa

Post on 22-Jan-2018

530 views

Category:

Engineering


0 download

TRANSCRIPT

Page 1: 20151018 study-設計を学ぶための最初の一冊はなにがいいのだろうか

設計を学ぶための最初の一冊は

なにがいいのだろうか黒澤慎太郎10/18/2015

Page 2: 20151018 study-設計を学ぶための最初の一冊はなにがいいのだろうか

設計とは

• 設計(せっけい、design)は、必要とする機能を具現化し検討した結果を建築物や工業製品、情報システム等を造るために仕様(設計図書)や設計図・設計書等を作る作業である。(Wikipediaより引用)

Page 3: 20151018 study-設計を学ぶための最初の一冊はなにがいいのだろうか

ソフトウェア設計とは

• ソフトウェアアーキテクチャ(Software

Architecture)は、ソフトウェアコンポーネント、それらの外部特性、またそれらの相互関係から構成される。(Wikipediaより引用)

Page 4: 20151018 study-設計を学ぶための最初の一冊はなにがいいのだろうか

私が議論したい"設計"とは

• ソフトウェアに秩序をもたらすもの

• 原則に順ずる。つまり、目的を持ってコード、クラスなどを配置する

• 正解がない。完成がない。常に変更され続ける

• ここでは、オブジェクト指向の設計に限定する

Page 5: 20151018 study-設計を学ぶための最初の一冊はなにがいいのだろうか

設計について議論したいと思ったのはなぜか

• 私の職場では設計があまりにも軽視されている

• 「ソフトウェアは目的を達成するために、正しく動けばいい」ではなく、「正しく動くのは当然で、ソフトウェアをいかに長生きさせるかが大事」だと思っているから。

• 振る舞いが変更されること前提だから"ソフト"ウェアなのであって、その対策をするのは当然のこと

Page 6: 20151018 study-設計を学ぶための最初の一冊はなにがいいのだろうか

設計が軽視されている例

• バグが発生し、提供したソフトウェアに問題がおきた。

• バグが発生した原因の報告を弊社では次のようにする。

• 「ある一つの仕様変更の際、資産をすべてgrepして修正

しなかったことがバグ発生の原因」(仕様変更とは、数値が変わる、条件式の変更など)

• 「ある一つの仕様変更」のために、「いくつかの資産を修正しなければならない」ことが原因なのではなかろうか。なんだ修正漏れって。

Page 7: 20151018 study-設計を学ぶための最初の一冊はなにがいいのだろうか

設計が軽視されている例

• コピーアンドペースト文化

• 似たようなロジックを躊躇なく量産

• そもそも重複したロジックを量産

• 設計を評価する文化がない

• etc...

Page 8: 20151018 study-設計を学ぶための最初の一冊はなにがいいのだろうか

設計によりソフトウェアが秩序を保っていればの例

• 一つの仕様変更による修正箇所は一つのモジュールに限られる(オープン・クローズドの原則)

• 単体テストが可能(依存性逆転の原則等)

• 定時に帰れる

• etc...

Page 9: 20151018 study-設計を学ぶための最初の一冊はなにがいいのだろうか

設計を学ぶための最初の一冊目はなにが適切だろうか

• まずはパターンを学ぶのが良いと思う

• 「設計」という単語の意味する範囲が広すぎる

• 設計対象が広い範囲を扱う設計は、どうしても抽象化という概念が必須となる。

• そのため、最初はより具体的な設計を学ぶのが良い

Page 10: 20151018 study-設計を学ぶための最初の一冊はなにがいいのだろうか

設計のレベル

• 小さい範囲

• クラス設計

• クラスの関係についての設計

• 範囲がほどほど

• コンポーネント設計

• コンポーネントの関係についての設計

• 全体に及ぶ

• ソフトウェアアーキテクチャ設計

Page 11: 20151018 study-設計を学ぶための最初の一冊はなにがいいのだろうか

クラス設計

• クラスに、どのようなデータと振る舞いを持たせるか

• 具体的には、フィールド変数、メソッドをどう作っていくか設計する

Page 12: 20151018 study-設計を学ぶための最初の一冊はなにがいいのだろうか

クラス設計を学ぶための最初の一冊

• 「実装パターン」by Kent Beck

Page 13: 20151018 study-設計を学ぶための最初の一冊はなにがいいのだろうか

クラス設計を学ぶ上での障害

• 実際の開発では、そもそも「クラスとして扱うためのオブジェクト」へたどり着けないかもしれない

• つまり、小さい範囲の設計を活かすためには、広い範囲の設計が必須となってしまう

Page 14: 20151018 study-設計を学ぶための最初の一冊はなにがいいのだろうか

設計を学ぶ上での障害

• モデリングの技術が必要になる

• 抽象的な存在を対象とするため、敷居が高い

Page 15: 20151018 study-設計を学ぶための最初の一冊はなにがいいのだろうか

結論

• 設計は、規模に関わらず大事な技術

• まずは、小さいクラスの設計から学ぶのが良い

• 大きい範囲の設計も、あとで学ぶ必要がある

• Kent Beckは神

Page 16: 20151018 study-設計を学ぶための最初の一冊はなにがいいのだろうか

• ご静聴ありがとうございました