機能の肥大化とは、製品における新機能の過剰な継続的な拡張または追加を指します[ 1 ] 。特にコンピュータソフトウェア、ビデオゲーム(パワークリープと混同してはいけません)、および消費者向けおよび業務用電子機器において顕著です。これらの追加機能は製品の基本機能を超えており、シンプルな設計ではなく、ソフトウェアの肥大化や過剰な複雑化につながる可能性があります。
「機能拡張」の定義はエンドユーザーによって異なり、あるユーザーがそう認識するものが、他のユーザーにとっては実用的な機能とみなされる場合もある。[ 2 ]機能拡張は、コストとスケジュールの超過の最も一般的な原因と考えられている。[ 3 ]そのため、製品やプロジェクトを危険にさらし、場合によっては中止に追い込むこともある。
機能追加は、売上や流通量を増やすために、消費者にとってより便利で魅力的な製品を提供したいという欲求から生じる可能性があります。製品が設計通りの機能をすべて果たすようになると、メーカーは一部のユーザーが不要と考える機能を追加したり(効率性を犠牲にして)、元のバージョンを使い続けたり(改善が見られないという欠点を生む)することがあります。
機能の肥大化は、たとえ日和見的な理由であっても、同じ製品内で複数の異なる視点やユースケースを実装する委員会の妥協の結果として発生することもあります。 [ 4 ]各アプローチをサポートするために機能が追加されるにつれて、複数のパラダイム間の相互変換機能によって、全体の機能がさらに複雑になる可能性があります。
機能の肥大化を抑制するには、許容される機能に厳格な制限を設ける、複数のバリエーションを用意する、余分な機能を削除するなど、いくつかの方法があります。
後々の機能拡張は、機能とデータアクセスの論理的な分離など、強力なソフトウェアの基本原則に基づいて初期設計を行うことで回避できます。たとえば、より多くの機能とより詳細な情報を必要とするパワーユーザーがオプションでアクセスできるサブメニューを使用するなどです。厳格な変更管理と、変更をプロジェクトの後の納品フェーズに延期することで、積極的に制御できます。 [ 5 ]
新機能の追加が絶えず増加し、利用可能なリソースを超える可能性があるため、製品の最小限のコアとなる「基本」バージョンを別途維持することで、小規模な運用環境でも確実に動作させることができます。「80/20ルール」を用いると、より基本的な製品バリエーションは大多数(例えば約80%)のユーザーのニーズを満たすことができ、高度な機能を求める20%のユーザーが要求する複雑な機能(または追加費用)に悩まされることがなくなります。追加機能はオプションとして利用可能であり、希望するユーザーが利用できるようになりますが、基本バージョンには実装されていません。
機能肥大化を抑制するもう一つの方法は、製品の複数のバリエーションを用意することです。例えば、Microsoft Windowsのエディションのように、より基本的なバリエーションでは機能を制限したり削減したりします。ソフトウェアのユーザーインターフェースでは、表示モードや操作モード(例えば、基本モードやエキスパートモード)を使用でき、ユーザーは自分のニーズに合わせて選択できます。
多くのグラフィカルユーザーインターフェースとコマンドラインインターフェースの両方において、ユーザーは手動でより詳細な情報を表示するように設定できます。後者の場合、多くのコマンドラインプログラムでは、オプションを手動で追加することで-v、--verboseより詳細な情報が表示されます。これは、基本的な操作しか行わないユーザーにはあまり関係ないかもしれませんが、上級ユーザーやデバッグ、トラブルシューティングの目的には役立ちます。
機能肥大化へのもう一つの解決策は、モジュール化です。より多くの機能を必要とするパワーユーザーは、ソフトウェアモジュール、プラグイン、アドオン(アドインとも呼ばれる)、カスタムテーマをダウンロードすることで、必要な機能を後付けし、個々のニーズに合わせることができます。
ある時点で、特定の機能群を維持するコストが法外なものになる可能性があり、その場合は機能の削減(プルーニング)が用いられることがあります。新製品バージョンでは、不要な機能を省略したり、移行期間を設けて古い機能を段階的に廃止し、最終的にシステムから削除したりすることも可能です。製品に複数のバリエーションがある場合は、一部のバリエーションが段階的に廃止されることもあります。代表的な例として、 2015年3月に発売されたSamsung Galaxy S6が挙げられます。この機種では、ソフトウェアやメニュー機能、そして一部のハードウェア機能が大幅に削減されました。より高機能なバリエーションは発売されていません。
時として、制御不能な機能拡張によって、当初の意図の範囲を超える製品が生まれてしまうことがあります。これはスコープクリープと呼ばれます。機能拡張の一般的な結果として、製品の遅延や中止が生じ、当初の想定よりもコストが高くなる場合があります。
多くの場合、機能が十分に揃ったソフトウェアプロジェクト、あるいは機能追加が適度に進んだプロジェクトは、多くのイテレーションを経て存続し、繁栄することさえありますが、新しいテクノロジーの導入に加えてコードベース全体を書き直すという決定が下されると、後継リリースは大幅に遅れる可能性があります。たとえば、マイクロソフトのWindows Vistaは、 Windows XPと、コードネーム「Blackcomb」 (Windows 7としてリリース)と呼ばれる後継バージョンの間のマイナーリリースとして計画されていましたが、Blackcombからますます多くの機能(その多くは最終的にキャンセルされました)を取り入れるにつれて、Vistaは5年の開発期間を要するメジャーリリースとなりました。
同様の運命をたどったのが、当初はNetscape 5となるはずだったNetscape 6である。1998 年に Netscape Communications が Netscape Navigator ブラウザと Communicator インターネット スイート (どちらもコードネームは Mozilla) をオープンソース化する決定を下したが、すぐに基盤となるコードが難しすぎることが明らかになり、Mozilla の完全な書き直しが必要となり、Mozilla アプリケーション フレームワークの作成につながった。これにより大幅な遅延が発生し、Netscape 5 はスキップされ、同社は AOL に買収された。2000 年にリリースされた Netscape 6.00 はアルファ レベルのコードとして広く批判され、インターネット スイートの再構築の決定から 3 年後の 2001 年に Netscape 6.1 でプロジェクトは安定期を迎えた。その頃には、Microsoft の Internet Explorer ブラウザの使用シェアは Netscape をはるかに凌駕しており、Netscape の使用シェアは一桁台にまで減少していた。
安定性を獲得し、必要な新機能もいくつか実装された後も、AOLがNetscapeを構築した基盤であるオープンソースのMozilla Application Suite (当時は単にMozillaと呼ばれていた)は「肥大化している」と見なされていた。そのわずか1年後、Mozillaの開発者グループはブラウザコンポーネントを分離することを決定し、それが最終的にFirefoxとなった。
Double Fine AdventuresのKickstarterプロジェクト「 Broken Age」も、機能追加によってプロジェクトが遅延した例の一つです。当初は2012年10月にリリース予定でしたが、ゲームの前半は2014年1月にリリースされ、後半は2015年4月下旬にリリースされました。完成には2回の資金調達が必要でした。[ 6 ]
機能の肥大化と短い納期が組み合わさると、しばしば「場当たり的な解決策」に陥ります。望ましい変更は、既存のプロジェクト基盤の再設計を正当化するほど大きいかもしれませんが、納期のプレッシャーにより、開発者は急いで、洗練されていない製品をリリースせざるを得なくなります。開発者がこの状況を嫌悪していることを強調するために、「feeping creaturism」というスプーナリズムが作られました[ 7 ] 。スコープが肥大化した製品を「暗闇の中をうろつく、ハックの歪んだ生き物」[ 8 ]と擬人化し、今後さらに肥大化が進む前兆としています[9]。(「Feeping」は「beeping」の同義語です。)[ 10 ]
{{citation}}: CS1メンテナンス: パブリッシャーの場所 (リンク)