« 2005年8月16日

2005年8月18日の投稿

2005年8月21日 »

blog2 前回は、EoT(Ease of Testing: テスト容易性)によってよいオブジェクト指向設計を再定義したい、という表明をした。今回は、二本目のナイフを抜きたい。キーワードは、EoC(*1)(Ease of Changing)、変更容易性だ。

この記事では、

   EoCの高い設計が、よいオブジェクト指向設計である。

と主張したい。設計品質の中で、「変更容易性(EoC)」を最上位と見る。

ここ10年のオブジェクト指向の最大の失敗は、「再利用性」をその最大の価値、として説明しようとしてきたこと。そして分かったことは、再利用がその努力コストに見合う効果がでることは極めて稀であること、また、テクノロジではなくソーシャルな活動が再利用に効くこと、さらに、コードの再利用ではなく、ナレッジの再利用(例えばパターン)の方が、まだ可能性があるということ(少なくとも2005年のコンテクストでは)。

再利用性ではなく「変更容易性」に注目すべきだ。Kent Beck "Embrace Change"であり、Bertrand Meyer "Build Software for Change" である。変更容易性を高くしてソフトウェアを作れば、再利用性よりもコスト削減できる可能性が出てくる。

EoCを中心に考えて、オブジェクト指向とは何か、を導き出そう。オブジェクトを切り出すときに、「責務」とか「凝集度」と従来言われている「概念の輪郭と中心を決めるもの」を「変更要因」と呼びかえる。外部の変更要因をカプセル化してクラスとするのだ。1つの変更要因が、1つのクラスに閉じられるように。変更を伝播させてはならない。

また、アーキテクチャは、変更の頻度、または、変更の安定度にしたがってクラス群の大域構造を決める活動だといえる。変更周波数を分析し、その順にパッケージを並べる。こうして、変更周波数の高い方が低いほうに依存するようにする。MVCBCEというアーキテクチャルな分割は、これに意味を付与したものだが、EoC的に考えると、この本質は変更要因の(時間ドメインでの)周波数だ。

大きな外部の変更は大きな内部変更で、小さな外部の変更は小さな内部変更で済ませられること(小さな外部の変更が、大きな内部の変更にならないこと=Meyerのアーキテクチャ連続性)。この技術がオブジェクト指向設計であり、そのためには、ソフトウェアの外部の問題構造とソフトウェア内部の解構造がダイレクトマッピングされている必要がある。すなわち、外部の言葉で内部が設計されており、外部の変更要因が、うまく内部の対応部分で吸収できる必要がある。

まとめよう。EoCにしたがってソフトウェア設計を捕らえると、

  • ソフトウェア外部の変更可能性を分析して、ソフトウェアの大域構造を決める
  • ソフトウェア外部の個々の変更要因をクラスとして取り出す(そのために、)
  • ソフトウェア外部の問題領域の言葉で内部のモデルを構築する

となる。

[1] EoC Ease of Changing、変更容易性。Modifiability に替わる平鍋の造語

(言い忘れましたが、この日記の写真は、品川のある「蕎麦屋」の通路にある、造形です。 人口竹、玉砂利、行灯、だけで、これだけの造形ができるのですが、実はこれは「作りつけられていない、アドホックに作られた構造」なんです。飽きたり、通路が狭いと感じられたりした時は、簡単にまとめて変更することもできます。ぜんぶ取っ払ってしまうことだってできる。大域構造にくくりつけられていないので、大域構造の寿命より短いライフサイクルで変更できます。 この造形は、美しいし、built for change なんです。)

» 続きを読む

平鍋

blogno1良い設計とはなにか、と問われて、凝集度と結合度に関する議論を思いつく人も多いだろう。しかし、この定義によりもっと具体性がある設計方針として、テストを考える。テストの視点によってオブジェクト指向を再定義したい。キーワードは、Eon(Ease of Testing)、テスト容易性だ。

ぼくは、

   EoT(*1)の高い設計が、よいオブジェクト指向設計である。

と主張する。設計品質の中で「テスト容易性(EoT)」を最上位と見るのだ。オブジェクト指向のさまざまな機構、用語、考え方は、すべて EoT のため、と捕らえられる。例えば、

  • 継承という言語機構は、Mockを作るためのもの

  • 実装ではなくインターフェイスに対してプログラミングするのは、テストしやすくするため
  • よいモジュール分割とは、テストしやすいモジュール分割である
  • 循環依存性を排除するのは EoT のため
  • DI(Dependency Injection)は、EoTのためのツール

ちょっと本末転倒に感じられるかもしれない。しかし、他の業界ではテスト容易性をもっと重視している例が多い。例えば、コンピュータのハードウェアは「テストが可能な設計」になっていることが普通だ。テスト用のジャンパーは設計に折り込み済みだし、メモリにはパターンの記録とチェックができる機能がある。

写真は、テレビ局が流す、朝の「テストパターン」。これは、テストが織り込まれたシステムデザインの例だ。テレビプログラムは、最初からテレビの受像機をテストする、という機能を折り込み済みなのである。テストが、最終的な顧客価値の検証になるのだから、テストができない設計など、意味がないのではないか。

他にも、ソフトウェア以外でテストを「折り込み済み」の設計を見つけたらぜひ教えて欲しい。

[1] EoT Ease of Testing、テスト容易性。Testability に替わる平鍋の造語

(参考) アジャイル開発の奥義

http://www.amazon.co.jp/exec/obidos/ASIN/4797323361/xpjp-22

平鍋

« 2005年8月16日

2005年8月18日の投稿

2005年8月21日 »

» このブログのTOP

» オルタナティブ・ブログTOP



プロフィール

平鍋 健児

平鍋 健児

株式会社チェンジビジョン代表取締役社長、永和システムマネジメント副社長。
オブジェクト指向開発、UMLの勘所、アジャイルな開発手法の未来、マインドマップのソフトウェア開発での利用方法、プロジェクトファシリテーション(見える化)を語ります。現在、マインドマップとUMLの融合エディタ、astah*(アスター、旧JUDE)を開発中。

詳しいプロフィール

Special

- PR -
最近のトラックバック
カレンダー
2013年4月
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30        
hiranabe
Special オルタナトーク

仕事が嫌になった時、どう立ち直ったのですか?

カテゴリー
エンタープライズ・ピックアップ

news094.gif 顧客に“ワォ!”という体験を提供――ザッポスに学ぶ企業文化の確立
単に商品を届けるだけでなく、サービスを通じて“ワォ!”という驚きの体験を届けることを目指している。ザッポスのWebサイトには、顧客からの感謝と賞賛があふれており、きわめて高い顧客満足を実現している。(12/17)

news094.gif ちょっとした対話が成長を助ける――上司と部下が話すとき互いに学び合う
上司や先輩の背中を見て、仕事を学べ――。このように言う人がいるが、実際どのようにして学べばいいのだろうか。よく分からない人に、3つの事例を紹介しよう。(12/11)

news094.gif 悩んだときの、自己啓発書の触れ方
「自己啓発書は説教臭いから嫌い」という人もいるだろう。でも読めば元気になる本もあるので、一方的に否定するのはもったいない。今回は、悩んだときの自己啓発書の読み方を紹介しよう。(12/5)

news094.gif 考えるべきは得意なものは何かではなく、お客さまが高く評価するものは何か
自社製品と競合製品を比べた場合、自社製品が選ばれるのは価格や機能が主ではない。いかに顧客の価値を向上させることができるかが重要なポイントになる。(11/21)

news094.gif なんて素敵にフェイスブック
夏から秋にかけて行った「誠 ビジネスショートショート大賞」。吉岡編集長賞を受賞した作品が、山口陽平(応募時ペンネーム:修治)さんの「なんて素敵にフェイスブック」です。平安時代、塀に文章を書くことで交流していた貴族。「塀(へい)に嘯(うそぶ)く」ところから、それを「フェイスブック」と呼んだとか。(11/16)

news094.gif 部下を叱る2つのポイント
叱るのは難しい。上司だって人間だ、言いづらいことを言うのには勇気がいるもの。役割だと割り切り、叱ってはみたものの、部下がむっとしたら自分も嫌な気分になる。そんな時に気をつけたいポイントが2つある。(11/14)

news094.gif 第6回 幸せの創造こそ、ビジネスの使命
会社は何のために存在するのでしょうか。私の考えはシンプルです。人間のすべての営みは、幸せになるためのものです――。2012年11月発売予定の斉藤徹氏の新著「BE ソーシャル!」から、「はじめに」および、第1章「そして世界は透明になった」を6回に分けてお送りする。(11/8)

オルタナティブ・ブログは、専門スタッフにより、企画・構成されています。入力頂いた内容は、アイティメディアの他、オルタナティブ・ブログ、及び本記事執筆会社に提供されます。


サイトマップ | 利用規約 | プライバシーポリシー | 広告案内 | お問い合わせ