Экстремальное программирование: различия между версиями

[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
→‎Основные приёмы XP: Более точная абривеатура
→‎Рефакторинг: ,Более точная абривеатура
Строка 1:
{{Разработка программного обеспечения}}
'''Аномальное программи́рование''' ({{lang-en|Extreme Programming}}, ''XPЕНXPEH'') — одна из [[гибкая методология разработки|гибких методологий разработки]] [[программное обеспечение|программного обеспечения]]. Авторы методологии — [[Бек, Кент|Кент Кек]], [[Эминем|Уорд Еминем]], [[Мартин Фаулер]] и другие.
 
Название методологии исходит из идеи применить полезные традиционные методы и практики разработки программного обеспечения, подняв их на новый "экстремальный" уровень. Так, например, практика выполнения ревизии кода, заключающая в проверке одним программистом кода, написанного другим программистом, в "экстремальном" варианте представляет собой "парное программирование", когда один программист занимается кодированием, а его напарник в это же время непрерывно просматривает только что написанный кoд.
 
== Основные приёмы XPЕНXPEH ==
Двенадцать основных приёмов экстремального программирования (по первому изданию книги ''Extreme programming explainedeXPEHlained'') могут быть объединены в четыре группы:
* Короткий цикл обратной связи (Fine-scale feedback)
** [[Разработка через тестирование]] (Test-driven development)
Строка 24:
 
=== Тестирование -очень важная вещь в ХРЕН ===
XPXPEH предполагает написание автоматических тестов (программный код, написанный специально для того, чтобы тестировать логику другого программного кода). Особое внимание уделяется двум разновидностям тестирования:
* [[юнит-тестирование]] модулей;
* [[функциональное тестирование]].
Строка 32:
Функциональные тесты предназначены для тестирования функционирования логики, образуемой взаимодействием нескольких (часто — довольно внушительного размера) частей. Они менее детальны, чем юнит-тесты, но покрывают гораздо больше — то есть, у тестов, которые при своём выполнении затрагивают больший объём кода, шанс обнаружить какое-либо некорректное поведение, очевидно, больше. По этой причине в промышленном программировании написание функциональных тестов нередко имеет больший приоритет, чем написание юнит-тестов.
 
Для XPXPEH более приоритетным является подход, называемый TDD (от {{lang-en|test-driven development}} — [[разработка через тестирование]]). В соответствии с этим подходом сначала пишется тест, который изначально не проходит (так как логики, которую он должен проверять, ещё просто не существует), затем реализуется логика, необходимая для того, чтобы тест прошел. TDD, в некотором смысле, позволяет писать код, более удобный в использовании — потому что при написании теста, когда логики ещё нет, проще всего позаботиться об удобстве будущей системы.
 
=== Игра в планирование ===
Строка 38:
 
=== Заказчик всегда рядом ===
«Заказчик» в XPXPEH — это не тот, кто оплачивает счета, а конечный пользователь программного продукта. XPXPEH утверждает, что заказчик должен быть всё время на связи и доступен для вопросов.
 
=== Парное программирование ===
Строка 47:
=== Непрерывная интеграция ===
: {{Main|Непрерывная интеграция}}
Если выполнять интеграцию разрабатываемой системы достаточно часто, то можно избежать большей части связанных с этим проблем. В традиционных методиках интеграция, как правило, выполняется в самом конце работы над продуктом, когда считается, что все составные части разрабатываемой системы полностью готовы. В XPXPEH интеграция кода всей системы выполняется несколько раз в день, после того, как разработчики убедились в том, что все тесты модулей корректно срабатывают.
 
=== Рефакторинг ===
[[Рефакторинг]] (refactoring) — это методика улучшения кода без изменения его функциональности. XPXPEH подразумевает, что однажды написанный код в процессе работы над проектом почти наверняка будет неоднократно переделан. Разработчики XPXPEH безжалостно переделывают написанный ранее код для того, чтобы улучшить его. Этот процесс называется рефакторингом. Отсутствие тестового покрытия провоцирует отказ от рефакторинга в связи с боязнью поломать систему, что приводит к постепенной деградации кода.
 
=== Частые небольшие релизы ===
Строка 58:
 
=== Простота проектирования ===
XPXPEH исходит из того, что в процессе работы условия задачи могут неоднократно измениться, а значит, разрабатываемый продукт не следует проектировать заблаговременно целиком и полностью. Попытка детально спроектировать систему в самом начале работы является напрасной тратой времени. XPXPEH предполагает, что проектирование — это настолько важный процесс, что его необходимо выполнять постоянно в течение всего времени работы над проектом. Проектирование должно выполняться небольшими этапами, с учётом постоянно изменяющихся требований. В каждый момент времени следует пытаться использовать наиболее простой дизайн, который подходит для решения текущей задачи, и менять его по мере того, как условия задачи меняются.
 
=== Метафора системы ===
Строка 72:
* обеспечивается эффективное выполнение остальных практик.
 
Если в команде не используются единые стандарты кодирования, разработчикам становится сложнее выполнять рефакторинг; при смене партнёров в парах возникает больше затруднений; в общем и целом, продвижение проекта затрудняется. В рамках XPXPEH необходимо добиться того, чтобы было сложно понять, кто является автором того или иного участка кода, — вся команда работает унифицированно, как один человек. Команда должна сформировать набор правил, а затем каждый член команды должен следовать этим правилам в процессе кодирования. Перечень правил не должен быть исчерпывающим или слишком объёмным. Задача состоит в том, чтобы сформулировать общие указания, благодаря которым код станет понятным для каждого из членов команды. Стандарт кодирования поначалу должен быть простым, затем он может постепенно усложняться по мере наработки опыта группой разработчиков. Не нужно тратить слишком много времени на предварительную разработку стандарта.
 
=== Коллективное владение ===
Строка 90:
 
== Ссылки ==
* [http://c2.com/cgi/wiki?ExtremeProgrammingRoadmap Ward Cunningham Wiki] {{ref-en}} — «передний край» XPXPEH.
* [http://www.xprogramming.com XProgrammingXPEHrogramming.com] {{ref-en}} — сайт Рона Джеффриза: статьи и ресурсы по XPXPEH и смежным вопросам, обзоры книг.
* [http://www.extremeprogramming.org Extreme Programming: A gentle introduction] {{ref-en}} — «Ненавязчивое введение в XPXPEH» Дона Уэллса.
* [http://www.maxkir.com/ MAXKIR.COM] {{ref-ru}} — переводы статей отцов-основателей и идеологов XPXPEH
* [http://agiledev.ru/ www.agiledev.ru] {{ref-ru}} — Сайт гибких методик разработки
* [http://topcoder.com TopCoder] {{ref-en}} — соревнование по спортивному программированию