この質問の焦点:一部のソフトウェアは「余分な作業」を実行して、ソフトウェア内の1つまたは複数の内部エラーにもかかわらず「最終的に成功/満足」の結果を得る機会を増やします。結果が成功した場合、これらはすべてユーザーの知らないうちに発生します。
複雑なソフトウェアの定義:
- 存続期間中に10人以上の開発者によって作成(提供)されたコードが含まれており、同じ時間枠で記述されていない
- それぞれに注意事項がある10以上の外部ライブラリに依存
- 典型的なソフトウェアタスク(ユーザーが望む結果を生成するため)には10個以上の入力パラメーターが必要です。それらのほとんどはデフォルト値を持ちますが、ユーザーが制御を必要とする場合は構成可能です。
- 最も重要なことは、実行されるタスクに関連して適切な複雑さを持つソフトウェア、つまり不必要に複雑にならないソフトウェアです。
編集:複雑なものは何ですか?ComplexとComplicatedには大きな違いがあります。をご覧ください。(直接リンク)
この質問内の冗長性/堅牢性の定義:(
コメントに基づいて堅牢性を追加)
- 現在のパラメーターセットを使用したときにソフトウェアタスクが失敗した場合は、別のパラメーターを試してください。
- 明らかに、これらの「異なる」パラメータは異なるコードパスを使用し、結果として異なる(できればより良い)結果をもたらす可能性があるという内部知識が必要です。
- これらの異なるコードパスは、外部ライブラリの観察に基づいて選択される場合があります。
- 最後に、実行される実際のタスクがユーザーの仕様とわずかに異なる場合、ユーザーは不一致の詳細を示すレポートを受け取ります。
- 最後に、10以上の構成可能なパラメーターと同様に、冗長性とレポートも構成可能です。
そのようなソフトウェアの例:
- データベース移行
- ビジネスデータベース
- ソース管理データベースなど
- Word文書とOpenOffice文書、PowerPointおよびOpenOffice Drawなどの間のバッチ変換
- ウェブサイト全体の自動翻訳
- Doxygenなどのソフトウェアパッケージの自動分析。ただし、分析をより信頼性の高いものにする必要がある場合(つまり、単なるドキュメンテーションツールではない)
- パケットが失われる可能性があり、多くの再試行が予想されるネットワーク通信
この質問はもともと、意図的に悪いコードにどのように対処しますか?
しかし、現在はソフトウェアの肥大化の原因の1つに焦点を当てています。この質問は、新機能の追加など、ソフトウェアの膨張のその他の原因には対応していません。
おそらく関連する: