アンチパターンってなに?

2009年5月11日(月)
細川 努

Blob(人喰いアメーバ)

 Blobとは、スティーブ・マックィーンが初主演したSF映画に出てくる、宇宙から来た人喰いアメーバのことです。

 現在では、JavaやC#など、オブジェクト指向言語を用いて開発することが一般的になってきました。しかしながら、ソフトウエア開発の現場では、従来の手続き型の設計で、オブジェクト指向言語のプログラミングを行っていることが多く見られます。具体的には、処理手続きはコントロールクラス等に集中して記述され、その他のクラスはデータアクセス等の簡単な役割しか担当させないのです。

 このように、特定のクラスのみが肥大化していくことを、“Blob”(人喰いアメーバ)アンチパターンと呼びます。

 以下のような症状があれば、Blobアンチパターンにかかっている可能性があります。
・単一のクラスに大量の属性やメソッドが集中している
・単一のクラスにお互いに関係のない属性やメソッドが混在している
・単一のコントロールクラスに単純なデータオブジェクトが結びついている

 このような設計は、特定のクラスに属性やメソッドが集中して、クラスの肥大化と複雑化を生じることになります。その結果、複雑すぎてテストケースが膨大になる、保守性が低下する(どこに手を入れたらいいかわからない、どう影響するかわからない)、再利用性が低くなるなど、悪影響が生じるのです。

 解決策としては、以下のようなステップで、特定のオブジェクトに集中した属性とメソッドの分担を見直すことが推奨されています。
・要求仕様に基づいて、属性とメソッドを関連するもの同士で分類し、グループ化する
・分類した属性、メソッドを、新たなクラスに移すことを検討する
・クラス間の結びつきを見直す
・本来固有でないメソッド(汎用ユーティリティー的な性格のメソッド)などを別のクラス(ユーティリティークラス)に移す

 実際に、JavaによるWebシステム開発では、こうした特定のコントロールクラスが大きくなり、その周囲にデータアクセス用のクラスが数多く作成される設計が多く見かけられます。

 こうした設計は、RDBなどへのデータアクセスを自分でコーディングしなければいけなかった時代からずっと続いており、特定のコントロールクラスを見れば処理内容がわかる(コードの俯瞰(ふかん)性)といったメリットもあるのですが、上述したように、テストがしにくい、保守性が低いなどの問題が生じているのも事実です。

Cut-and-Pasteプログラミング

 Cut-and-Pasteプログラミングとは、その名の通り、既存のプログラムコードを切り張りして安易な流用を繰り返すことです。すでに存在するプログラムコードを使いまわすことは、表面的には生産性の向上につながりますが、同じようなコード内容があちこちに発生するので、さまざまな問題を引き起こします。

 以下のような症状があれば、Cut-and-Pasteプログラミングアンチパターンにかかっている可能性があります。
・バグフィックスをいくら行っても、同じようなバグがあちこちで発生する
・全体的な生産性が向上しないにも関わらず、プログラムコードの行数が増加する
・コードの品質検証に手間がかかる

 Cut-and-Pasteプログラミングアンチパターンがまん延すると、プログラマーは安易なCut-and-Pasteを繰り返し、ドキュメントは軽視され、システムのコード数が急増する一方で、ソフトウエアのメンテナンス費用の増加、毎回同じような欠陥の発生といった問題が発生します。

 こうした問題を解決するためには、将来の機能拡張のことを考慮したソフトウエアを設計しておく必要があります。

 例えば、GoFのデザインパターンの背景には、Open-Closed Principle(OCP)という設計ポリシーがあります。これは、「モジュールは拡張に対して開いて(Open)おり、修正に対して閉じて(Closed)いなければならない」というもので、共通するふるまいの部分をうまくカプセル化し、拡張部分を追加していけるような設計を行うものです。

 また、Cut-and-Pasteによってあちらこちらに重複したコードが存在する場合は、地道なリファクタリングによって整理を行う必要が生じます。

株式会社アーキテクタス
(株)アーキテクタス 代表取締役 技術士(情報工学)大手シンクタンクで金融系システム構築等を経験。現在、総務省CIO補佐官として、総務省内のシステム構築への助言等を担当している。要求開発アライアンス理事 日本Javaユーザー会(JJUG)監事

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています