Текст из очень хорошей книги Басса, Клементса, Кацмана "Архитектура программного обеспечения на практике", подтверждающий собственный опыт и то, что на нашем форуме не раз говорилось.
Цитата:
Попытки внедрить повторное использование в программной инженерии предпринимаются уже много лет, и успех этого предприятия пока что под вопросом - ожидания почти всегда оказываются радужнее реальных результатов. Причина неудач отчасти кроется в том, что до последнего времени технология повторного использования распространялась под лозунгом "сконструируй, и всё будет!". Любая библиотека многократного применения состоит из элементов предыдущих проектов; от разработчиков, прежде чем переходить к кодированию новых элементов, требуется ознакомиться с её содержанием. У этой схемы действий слишком много недостатков. Если библиотека невелика, разработчик, однажды не обнаружив нужного элемента, потеряет всякое желание продолжать поиски. Если же она слишком обширна, провести поиск будет труднее. Если искомые элементы невелики, их проще переписать, чем найти в библиотеке и модифицировать. Если они крупные, подробно разобраться в их назначении очень сложно, а вероятность того, что они в точности подойдут для нового приложения, крайне невелика. Происхождение элементов, хранящихся в библиотеках повторного использования, как правило, в лучшем случае неочевидно. Разработчик, таким образом, не может быть полностью уверен в назначении и надёжности элемента, а кроме того, он не знает условий, в которых проводилось его тестирование. В то же време точное соответствие между атрибутами качества, требуемыми в новом приложении, с одной стороны, и реализуемыми элементами библиотеки - с другой, практически никогда не встречается.
В большинстве случаев оказывается, что элементы библиотеки написаны для архитектурной модели, которой разработчик новой системы не пользуется. Даже если вам удастся найти нужный элемент, реализующий нужные атрибуты качества, совершенно не факт, что вам подойдёт тип этого архитектурного элемента (например, искали объект, а нашли процесс) и его протокол взаимодействия, что он не будет противоречить принятым для нового приложения политикам обработки ошибок или восстановления после отказа, и т.д.
Линейки программных продуктов устанавливают жёсткий контекст повторного использования: архитектура определена, функциональность задана, атрибуты качества известны. В библиотеку повторного использования (согласно терминологии линеек продуктов, она называется фондом базовых средств) попадают только те элементы, которые сконструированы в расчёте на многократное применение в рамках данной линейки. Таким образом, повтороное использование становится стратегическим, запланированным, утрачивает случайный характер.