За последние несколько лет гибкие подходы и алгоритмы разработки программного обеспечения заслужили пристальное внимание специалистов. Гибкие методы в программировании используют итеративные и поэтапные подходы для удовлетворения меняющихся требований клиентов. Одним из хорошо известных методов такого подхода является экстремальное программирование (XP — Extreme Programming), основанное на наборах ценностей, включающих простоту при написании кода, высокую коммуникативность, наличие обратной связи в процессе программирования, модульность и определённую смелость в решениях, которую допускает стратегия разработчика. Экстремальные практики, различия не только в составе, но и взаимодействии между значениями, а также обратной связью в данном методе, сделали всю архитектуру системы более сложной и требующей постоянных улучшений.
Основная цель многих разработчиков — улучшить методы программирования с помощью гибкого моделирования. Интерпретирующий исследовательский подход используется для разработки гибких моделей трёх, наиболее критикуемых, факторов в практике экстремального программирования (облегчённые требования, парное программирование и локальный клиент). Варианты использования собираются из практики разработки требований на основе сценариев с анализом заинтересованных сторон для удовлетворения упрощённых требований. Проблемы парного программирования решаются с помощью личностных характеристик развития, моделей распределённого парного программирования (DPP — Distributed Pair Programming) и совместного состязательного парного программирования (CAP — Collaborative Adversarial Pair). Суррогатные клиенты и модели с несколькими клиентами — это две альтернативы, предлагаемые для решения проблем клиентов на месте.
Подходы к разработке программного обеспечения постоянно значительно совершенствуются. Это означает, что методики написания различного ПО расширяются и становятся все более сложными, поскольку эти процессы объединяются с различными разнообразными областями. Методологии процессов — это структуры, которые используются для упорядочивания, планирования и контроля процессов, связанных с разработкой. Традиционные методы разработки приложений являются тяжеловесными и основанными на планировании, поскольку они состоят из последовательного ряда шагов, которые необходимо спланировать и подробно задокументировать перед внедрением. Каскадная модель, V-образная модель и Рациональный Унифицированный Процесс (RUP — Rational Unified Process) являются наиболее популярными традиционными методологиями разработки программного обеспечения.
Большинство традиционных методов программирования очень трудно изменить. В результате новые подходы к разработке развились в гибкие методологии, отвечающие меняющимся требованиям рынка. Само понятие «гибкость методов» определяется по их способности быстро реагировать на меняющиеся требования. Следовательно, дело не просто в размере процесса или скорости работы, а речь идёт о гибкости самого процесса или методов работы, которые являются альтернативой традиционным методам с их тяжеловесными процессами. Гибкие методологии включают в себя внесение изменений в процесс разработки программного обеспечения, чтобы сделать его более быстрым, гибким, лёгким и производительным.
В конце 1990-х годов несколько методик разработки программного обеспечения привлекли внимание общественности, и каждый из них представлял собой комбинацию старых идей, новых идей и преобразованных старых идей. Общим для всех этих методов было то, что все они делали акцент на личном взаимодействии, а не на итерациях и не на самом процессе в разработке кода. Сегодня в программировании используется множество гибких методологий. Некоторые из наиболее популярных из них:
— это непосредственно экстремальное программирование (XP);
— уникальная организация подхода с короткими итерациями Scrum;
— объединяющая итеративная методология разработки на основе функций (FDD — Feature Driven Development);
— семейство Crystal (CMF — Crystal Methodologies Family);
— и адаптивная разработка (ASD — Adaptive Software Development).
Из этого списка, на сегодняшний день, именно XP и Scrum являются наиболее часто используемыми гибкими подходами. Одним из хорошо известных методик является экстремальное программирование (сокращённо называемое в среде разработчиков XP). Процесс XP характеризуется коротким жизненным циклом, поэтапным планированием, непрерывной обратной связью и опорой на коммуникацию и эволюционный дизайн. Основная часть состоит из простого набора практик, включающего планирование, небольшие релизы, метафоричность, простоту дизайна и архитектуры, разработку через тестирование (TDD — test driven development), рефакторинг кода, парное программирование, коллективный доступ, непрерывную интеграцию, взаимодействие с клиентами и стандарты кодирования. Этот интересный состав является одной из главных причин, которые делают метод экстремального программирования успешным.
Первыми, XP как систему разработали Бек и Джеффрис (Beck and Jeffries). Различия в составе и взаимодействии между ценностями/ практиками и их обратной связью сделали программную систему более сложной, а также требуют больше знаний для понимания каждой распространённой практики этого метода. Известно, что система представляет собой облегчённую методологию гибкой разработки программного обеспечения с некоторыми экстремальными методами, которые легковесны по своей природе, но очень сложны, а иногда и нереалистичны для реализации. Большая часть литературы и документации была написана авторами «Манифеста гибкости» и посвящена продвижению и коммерциализации гибких методов и услуг, которые они предоставляют для достижения целей. Планирование каждой определённой разработки осуществляется с помощью системной метафоры, полученной из архитектурных данных, и требований спецификаций из пользовательского техзадания. План выпуска помогает исполнить каждую итерацию, которая, в свою очередь, создаёт основную архитектуру. Небольшие составные части полной версии выпускаются после приёмочных тестов, утверждаемых заказчиком.
Гибкое моделирование — это хаотичная, основанная на практике, методология эффективного моделирования и документирования программных систем. Она не определяет в линейной последовательности, как построить модель, но повествует о том, как сделать процесс эффективным. Другими словами, это не предписывающий процесс, а несколько хаотичный, потому что сочетает хаос простых методов моделирования и смешивает его с порядком, присущим артефактам программного моделирования. Преимущество гибкого моделирования заключается в том, что можно выбрать лучшие функции из различных существующих программных процессов и смоделировать их таким образом, чтобы создать свой собственный процесс в соответствии с потребностями заказчика. Этот подход не зависит от других процессов, таких как экстремальное или функциональное программирование, но играет важную роль в улучшении этих процессов.