システム開発のアプローチ

お疲れ様ですバスクリンです。

今日はアジャイル開発とデザインパターンについて少し書いてみようと思います。

コトノホッタン

GCでは社員の数名と関連会社さんの方で集まって読書会をしています。今読んでいる書籍は「オブジェクト指向のこころ」というデザインパターンを紹介しつつ「良い設計とは?」という問題について書いている書籍になります。

この読書会の中で参加者から次のような疑問があがりました。

「デザインパターンとアジャイルは共存できるのか?」

いい疑問した。このように読書会を通じて、技術者同士の意見交換なども行っています。読書会は自由参加で社員であれば誰でも参加可能です。書籍を持っていない方でも体験で飛び入り参加もありだと思っているので、興味のある方はぜひ参加してみてください(‘ω’)ノ

 

Design patterns

デザインパターンは過去の実績をもとに先人がよくある問題とその解決策をパターン化したものです。GoFがまとめたデザインパターンがよくパターンの代表として紹介されますが、デザインパターンはこの23個だけではありません。

問題があり、その解決策が定型化できるのであれば、それはデザインパターンです。世の中には様々なシステムが乱立していますが、問題領域というものは今も昔もあまり変わっていません。問題領域に対するアプローチ方法の考え方がデザインパターンなのです。

 

agile software development

一方、アジャイル開発は開発手法の1つで、従来のウォータフォール型の開発手法に対し、軽量かつ変化に柔軟な開発手法として定着しつつあります。開発手法には様々なものがあり、テスト駆動開発、プロトタイピング手法、スパイラル開発手法などあります。

それぞれメリット・デメリットがありますが、目的は一つで「システムを作る」ことです。

 

二つの関連性は?

では、本題に戻ってアジャイルとデザインパターンの関係について考えてみます。

アジャイルの大きな特徴としては先にも述べた「変化に柔軟である」ということです。イテレートの期間も数週間と極めて短いアジャイルで、この変化に柔軟に対応するには様々な工夫が必要です。

変化にもさまざまな変化がありますが、そのトリガーとなるものはメンバーやエンドユーザからの「要求・要望」です。要求や要望には様々なものがあり、

  • 見た目や操作性を重視した仕様変更
  • 設計段階のミス
  • 煮詰まっていなかった仕様が固まる
  • 新しい機能の追加

など多岐にわたります。この変化に対応するには1つのキーワードが見えてきます。それは「依存性」です。

画面などのUIとビジネスロジックが密に依存していたら、ちょっとした変更も影響範囲を調べて修正していくことになります。逆にそれぞれの機能やクラス、レイヤーが疎結合になっていれば影響範囲を最小限に抑え、変化にも迅速に対応可能です。

GoFのデザインパターンは大きく分けて「生成」「振る舞い」「構造」の3つに分類可能されます。この振る舞いと生成は、クラスやレイヤーを疎結合にするための解決案として考えられたものが多く存在します。

 

変化に素早く柔軟な対応するためのアプローチ

アジャイルな開発を実現するためには、部品間の結合度を疎にして、流動的要素から互いを分離する必要があり、その凝集度を下げるための手法の一つとしてデザインパターンを利用することができます。

適切な粒度の小さな部品を組み合わせることにより、テスト工数が大幅に短縮でき、品質の高いシステムを短期間で作成することができます。大規模なシステムでもそれは応用可能で、それを実現するための一つとしてデザインパターンの考え方が使えるのです。

アジャイルもデザインパターンも「高品質なシステムを効率よく構築するため」に考えられたものなので、基本的な思想は同じです。

 

まとめ的なアレ

私は美しく短いコードが好きです。十分に吟味され設計された美しいコードは品質も高く、少ない工数で作成することができ、柔軟な仕様変更にも十分耐えれることは様々な場面で経験してきました。一般的な開発者と優れたエンジニアの生産性・品質の差は数十倍の差があるとよく言われますが、それはおそらく真実です。

アジャイルでやってみたけど失敗したという話をよく目にしますが、それは中核となるメンバーが上記のことを理解できていないために失敗したと思われます。

また、デザインパターンを勉強しても、いまいちピンとこない方や、使うメリットが理解できない人はパターンの生まれた背景を考えてみるのが理解する近道です。Webや書籍で紹介されているデザインパターンのサンプルは、あくまで理解を助けるための小さなサンプルでしかありません。それをどう解釈し、活かしていくかはエンジニアやアーキテクチャのお仕事になります。

優れたエンジニアになるために必要なものはスキルでも経験でもありません。常に「品質」と「生産性」について考えながらシステム開発をすることで着実に成長していきます。考えるのはタダなのでいつもの仕事をこなしながら、ちょっと考えてみてみるのも良いと思います。

About the author

バスクリン

GCの中で好き放題に技術的なメルマガを書いている人。プログラム歴は今年で27年目に突入。普段はシステム技術者として設計やらプログラムを自由に書いてます。好きな言語はC++、C#。

Add Comment

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

最近の投稿

アーカイブ

カテゴリー

タグクラウド

コーポレートサイト