Программирование arrow Теория программирования arrow Экстремальное программирование – не методология…

Экстремальное программирование – не методология…

Если посмотреть на экстремальное программирование с практической точки зрения сквозь призму отечественной высшей школы, то можно смело его охарактеризовать не как методологию, а как систематизированный подход к разработке программного обеспечения. Тем не менее, как бы этот феномен не назывался, важен конечный результат. В данной статье будет рассмотрена практическая применимость экстремального программирования, и чем оно полезно для разработчиков. Разработчиков и, конечно же, менеджеров всегда интересовали вопросы повышения эффективности работы и минимизации затратной части. Многие находили решения посредством собственного опыта, методом проб и ошибок. Но справедливости ради сказать, решения о которых можно услышать или прочитать в новостных группах, во многом схожи. Так, например, многие опытные менеджеры стараются спрашивать разработчиков, сколько времени займёт та или иная задача, вместо назначения его принудительно. Своё обещание более приятно выполнять, чем чьи-либо указки. В экстремальном программировании это более развито. По словам Кента Бека, основателя экстремального программирования, основная суть подхода заключается в разделении полномочий исполнителя и заказчика. Не смотря на лаконичность, в этих словах заложен высокий смысл. Ведь принятие ответственного решения должно быть возложено на понимающего человека: бизнес решение правильнее может принять заказчик, а, соответственно, техническое разработчик. Такое распределение ролей не обязательно понимать в буквальном смысле, и может быть отнесено к различным уровням отношений. Например, в классическом коллективе разработчиков, заказчиком может быть менеджер, в то время как для компании, внутри которой есть свой отдел разработки программного обеспечения, роль заказчика предельно ясна.

Вот мы и подошли к вопросам применимости и применения экстремального программирования на практике. Что же является идеальной моделью работы экстремального программирования? Идеальную модель можно охарактеризовать двумя составляющими: условиями работы и отношениями между членами коллектива. Идеальные условия работы могут быть выражены подразделением разработчиков в рамках фирмы, занимающейся каким-либо бизнесом. Компании для более успешного продвижения бизнеса требуется программный продукт, при этом, некоторая функциональность его должна быть готова к использованию уже в следующем месяце. Менеджерам компании не понятно в деталях как и что будущая программа будет делать, тем не менее, определённое направление ясно и с приоритетами более-менее всё понятно. В этой схеме менеджеры компании являются заказчиками. Разработчики же хорошо знают своё дело, уверены в себе и готовы помочь заказчику.

Что же касается идеальных отношений между членами коллектива, то они должны быть максимально открытыми и честными. Каждый вопрос, будь то со стороны разработчика или заказчика, не должен остаться без квалифицированного ответа. При этом, между всеми задействованными лицами должно царить максимальное доверие и понимание. Заказчик обязан доступно излагать свои желания по поводу каждой функциональности программы, и что для него более важно. Разработчик обязан внимательно слушать и оценивать ориентировочную трудоёмкость каждой функциональности, с тем, чтобы заказчик смог выбрать, что должно быть реализовано в первую очередь, а что ему вовсе не нужно за такие деньги. Разработчики не должны подстраивать существующий бизнес под программу, а, наоборот, руководствоваться его потребностями. Так, если возникает какая-либо неоднозначность в понимании задачи, разработчик с тетрадкой и ручкой в руках спешит к заказчику, чтобы услышать его мнение. Заказчик, в свою очередь, при изменении бизнеса или при лучшем понимании своих интересов относительно программы, просто обязан проинформировать об этом группу разработчиков, чтобы те своевременно смогли внести изменения в программу или подкорректировать план работ. Разработчики приветствуют изменения, так как только они способны максимально приблизить продукт к реальным потребностям заказчика на момент выпуска. Разработчики должны избавить заказчика от ошибок в программе, и предоставлять ему всегда проверенную и работоспособную систему.

К сожалению, эта идеальная модель, как и любая другая, является упрощением реальной ситуации, и очень редко в чистом виде встречается на практике. По-этому в экстремальное программирование включены дополнительные методики, компенсирующие расхождения модели и реальности.

Начнём с доверия. Людям свойственно ошибаться, это касается как разработчиков (недопонимания, ошибки в программе), так и заказчиков (неясность потребностей). Если заказчик со своими неясными требованиями, как слишком распространённый вариант, заложен в саму модель, то решение предотвращения ошибок нельзя обеспечить лишь социальными средствами. В экстремальном программировании применяются два круга автоматизированного тестирования. На первом уровне стоит модульное тестирование, для проверки работоспособности самого кода, а на втором приёмочное, для проверки работоспособности законченной функциональности с точки зрения заказчика. Эти методики развиты в более прогрессивные путём перестановки классической последовательности: теперь сначала идёт тест, а потом код. Это позволяет лучше понять задачу и предоставить дополнительную мотивацию создания тестов. Тесты являются хорошо сформулированным вопросом к программисту о том, что должно быть сделано и каковы критерии работоспособности. А как всем известно, правильно сформулированный вопрос может быть расценен как большая часть ответа.

Для улучшения понимания потребностей заказчиком, новые версии строятся часто, и у него есть возможность попробовать, что удобно, а что нет. Эта методика получила название быстрые релизы.

Далеко не всё в проекте определяют профессиональные навыки разработчиков. Очень большое значение имеет постоянный обмен информацией между членами коллектива. Это и вопросы к заказчику, и просьба о помощи у человека, который ранее разбирался с интересующей проблемой, и, конечно же, постоянная передача опыта и знаний между разработчиками. Всё это можно достичь интенсивным документооборотом, а можно открытым и честным общением. Экстремальное программирование выбирает второй путь, как наиболее простой и эффективный.

Как правило, следование канонам любой методологии и выполнение её предписаний в обычных условиях длиться очень недолго. Лень и игнорирование методик приводит к скатыванию проекта на низшую ступень развития. Это ни может не отразится на качестве, скорости и успешности разработки. В экстремальном программировании есть ключик к такой проблеме – парное программирование. Два человека, работая совместно, значительно трепетнее относятся к использованию методик и выполнению требований стандартов кодирования. Эта методика способна стимулировать общение и позволить сосредоточиться на конкретных задачах двум умам одновременно.

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

Здесь перечислена далеко не вся мощь экстремального программирования, а затронуты лишь наиболее наболевшие вопросы.

Таким образом, хоть экстремальное программирование, по мнению многих критиков, и не методология, а набор методик, оно позволяет вести разработку программных продуктов быстро, вовремя вносить изменения и поддерживать должный уровень качества. Последнее не требует, в большинстве случаев, ненужных затрат на отделы тестирования и оценки качества. Тестирование включено в саму разработку, более того, разработка тестов предшествует разработке кода.

 
« Предыдущая статья


  • Теория программирования, Безопасность в сервис-ориентированных архитектурах (SOA)
    Предоставляя свободно связанные сервисы, сервис-ориентированная архитектура позволяет гибко реагировать на постоянно меняющиеся деловые процессы. При этом необходимо уделить внимание не только функциональным аспектам, но и созданию гибкой инфраструктуры безопасности, поскольку изменения деловых процессов оказывают на нее серьезное влияние. К примеру, привлечение новых деловых партнеров или включение конфиденциальных сведений в важные корпоративные процессы требует адекватного стандартизованного ...
  • Теория программирования, Многоядерное программирование: использование преимуществ многоядерных систем
    В этой статье я глубже опишу мир многопоточности, а также опишу некоторые способы снижения сложности при разработке многопоточных приложений....
  • Теория программирования, Справочник по технологии COM
    Справочник по интерфейсам, структурам и функциям, используемым в технологии COM. Рассматриваются функции компиляции типа и работы с библиотеками, функции API, работающие с вариантами, получение информации об ошибке, функции API обработки ошибок, обзор диспетчерских функций API, регистрация активного объекта с помощью функций API, функции преобразования даты и времени, функции преобразования BSTR и векторов, функции преобразования чисел из строкового представления в цифровое, функции API, работаю...
  • Теория программирования, Собственные вектора и значения матриц
    Как выясняется, некоторые специалисты до сих пор интересуются такой проблемой линейной алгебры, как вычисление собственных значений и собственных векторов матриц. Эта проблема возникает во многих областях математики, механики, инженерного дела и геологии. На сайте представлен несколько переработанный перевод 11-ой главы книги Numerical Recipes in C, 2nd edition, Cambridge University Press, reprinted 1999....
  • Теория программирования, Ориентация на сервисы и её роль в Стратегии распределенных систем
    Сервисная ориентация - средство для формирования распределенных систем. Наиболее абстрактно, сервисная ориентация рассматривает всё - от основных приложений, от принтера, до клерка из дока отгрузки, до компании ночной доставки - как поставщика услуг. Поставщики услуг предоставляют возможности через интерфейсы. SOA отображает эти возможности и интерфейсы так, что они могут гармонично сочетаться в процессы. Сервисная модель "рекурсивна"(fractal): вновь сформиро...
  • Теория программирования, Регулярные выражения
    Регулярные выражения – это один из способов поиска подстрок (соответствий) в строках. Осуществляется это с помощью просмотра строки в поисках некоторого шаблона. Общеизвестным примером могут быть символы «*» и «?», используемые в командной строке DOS. Первый из них заменяет ноль или более произвольных символов, второй же – один произвольный символ. Так, использование шаблона поиска типа "text?.*" найдет файлы textf.txt, text1.asp и другие анало...
  • Теория программирования, Некоторые аспекты построения агентных систем
    Одной из важных задач, стоящих перед разработчиками программного обеспечения, является автоматизация процесса обращения информации. Как это показал Глушко, в свое время компьютер помог преодолеть человечеству информационный кризис, связанный с возрастающими объемами информации. Однако объемы хранимой и обрабатываемой информации продолжают расти, в связи с чем ставится вопрос о том, чтобы передать некоторые функции обработки этой информации интеллектуальным системам. При этом подобные системы дол...
  • Теория программирования, Теория фреймов
    Теория фреймов - это  парадигма для представления знаний с целью использования этих знаний компьютером . Впервые была представлена Минским как  попытка построить фреймовую сеть , или парадигму с целью достижения большего эффекта понимания  . С одной стороны Минский пытался сконструировать базу данных , содержащую энциклопедические знания  , но с другой стороны , он хотел создать наиболее описывающую базу , содержащую информацию в структурированной и упорядоченной форме . Эта ...