Технологии разработки программных систем

Готов поспорить, многим знакома такая ситуация. Срок сдачи проекта через неделю, ведущие программисты ожесточенно спорят о чем-то с архитекторами, тестировщики скучают в ожидании дела (или не скучают за очередной MMORPG), а рядовые программисты в спешке дописывают недостающие функции, понимая, что они все равно не отвечают требованиям, или докручивают никому ненужные фичи. Ну а заказчики, как водится, в нетерпении обрывают телефон. Не правда ли, знакомая картина?

В наше время разработка программного обеспечения - дело не из легких. Теперь разработчик уже не может просто сгенерировать с помощью Microsoft Visual Basic исполняемый файл и скопировать его на дискету вместе с базой данных Microsoft Office Access, как тому, к сожалению, учат в некоторых ВУЗах. Современное приложение масштаба предприятия состоит из множества программных слоев и сервисов. Создание программной системы требует гораздо больших усилий, а сам продукт должен отвечать более высоким стандартам. Следует учитывать, что благодаря Web все больше потенциальных заказчиков читают прессу и веблоги. И пусть они не настолько технически подкованы, как разработчики, но они точно знают, чего хотят, и, что еще важнее, знают, чего не хотят.

Программные системы среднего предприятия, не говоря уже о крупных, состоит из значительно большего числа самостоятельных компонентов, чем это было лет десять назад. Развитие Web и коммуникаций, использование веб-архитектуры, веб-служб и других технологий позволяет сделать системы более гибкими, расширяемыми и совместимыми, да и просто улучшить их потребительские качества. Все это замечательно с точки зрения архитекторов программного обеспечения, начальников IT-отделов, заинтересованных в его успешной продаже, а также его пользователей и заказчиков. Но у каждой медали есть и обратная сторона - усложнение процесса разработки программных продуктов и систем. Все эти хваленые сервисы, слои, версии и интерфейсы прикладного программирования для команды любой численности означают только одно: бесконечные сложности с состыковкой компонентов программной системы и обеспечением их эффективного взаимодействия.