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

Поделись знанием:
Перейти к: навигация, поиск
Разработка программного обеспечения
Процесс разработки ПО
Шаги процесса

Анализ • Проектирование • Программирование • Документирование • Тестирование

Модели

Итеративная • Спиральная • Каскадная • V-Model • Dual Vee Model

Методологии

Agile (XP, Lean, Scrum, FDD и др.) • Cleanroom • OpenUP • RAD • RUP • MSF • DSDM • TDD

Сопутствующие дисциплины

Конфигурационное управление • Управление проектами • Управление требованиями

Экстрема́льное программи́рование (англ. Extreme Programming, XP) — одна из гибких методологий разработки программного обеспечения. Авторы методологии — Кент Бек, Уорд Каннингем, Мартин Фаулер и другие.

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





Основные приёмы XP

Двенадцать основных приёмов экстремального программирования (по первому изданию книги Extreme programming explained) могут быть объединены в четыре группы:

  • Короткий цикл обратной связи (Fine-scale feedback)
  • Непрерывный, а не пакетный процесс
  • Понимание, разделяемое всеми
    • Простота (Simple design)
    • Метафора системы
    • Коллективное владение кодом (Collective code ownership) или выбранными шаблонами проектирования (Collective patterns ownership)
    • Стандарт кодирования (Coding standard or Coding conventions)
  • Социальная защищённость программиста (Programmer welfare):
    • 40-часовая рабочая неделя (Sustainable pace, Forty-hour week)

Тестирование

XP предполагает написание автоматических тестов (программный код, написанный специально для того, чтобы тестировать логику другого программного кода). Особое внимание уделяется двум разновидностям тестирования:

Разработчик не может быть уверен в правильности написанного им кода до тех пор, пока не сработают абсолютно все тесты модулей разрабатываемой им системы. Тесты модулей (юнит-тесты) позволяют разработчикам убедиться в том, что каждый из них по отдельности работает корректно. Они также помогают другим разработчикам понять, зачем нужен тот или иной фрагмент кода, и как он функционирует — в ходе изучения кода тестов логика работы тестируемого кода становится понятной, так как видно, как он должен использоваться. Тесты модулей также позволяют разработчику без каких-либо опасений выполнять рефакторинг (refactoring).

Функциональные тесты предназначены для тестирования функционирования логики, образуемой взаимодействием нескольких (часто — довольно внушительного размера) частей. Они менее детальны, чем юнит-тесты, но покрывают гораздо больше — то есть, у тестов, которые при своём выполнении затрагивают больший объём кода, шанс обнаружить какое-либо некорректное поведение, очевидно, больше. По этой причине в промышленном программировании написание функциональных тестов нередко имеет больший приоритет, чем написание юнит-тестов.

Для XP более приоритетным является подход, называемый TDD (от англ. test-driven development — разработка через тестирование). В соответствии с этим подходом сначала пишется тест, который изначально не проходит (так как логики, которую он должен проверять, ещё просто не существует), затем реализуется логика, необходимая для того, чтобы тест прошёл. TDD, в некотором смысле, позволяет писать код, более удобный в использовании — потому что при написании теста, когда логики ещё нет, проще всего позаботиться об удобстве будущей системы.

Игра в планирование

Основная цель игры в планирование — быстро сформировать приблизительный план работы и постоянно обновлять его по мере того, как условия задачи становятся всё более чёткими. Артефактами игры в планирование является набор бумажных карточек, на которых записаны пожелания заказчика (customer stories), и приблизительный план работы по выпуску следующих одной или нескольких небольших версий продукта. Критическим фактором, благодаря которому такой стиль планирования оказывается эффективным, является то, что в данном случае заказчик отвечает за принятие бизнес-решений, а команда разработчиков отвечает за принятие технических решений. Если не выполняется это правило, весь процесс распадается на части.

Заказчик всегда рядом

«Заказчик» в XP — это не тот, кто оплачивает счета, а конечный пользователь программного продукта. XP утверждает, что заказчик должен быть всё время на связи и доступен для вопросов.

Парное программирование

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

Непрерывная интеграция

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

Рефакторинг

Рефакторинг (refactoring) — это методика улучшения кода без изменения его функциональности. XP подразумевает, что однажды написанный код в процессе работы над проектом почти наверняка будет неоднократно переделан. Разработчики XP безжалостно переделывают написанный ранее код для того, чтобы улучшить его. Этот процесс называется рефакторингом. Отсутствие тестового покрытия провоцирует отказ от рефакторинга в связи с боязнью поломать систему, что приводит к постепенной деградации кода.

Частые небольшие релизы

Версии (releases) продукта должны поступать в эксплуатацию как можно чаще. Работа над каждой версией должна занимать как можно меньше времени. При этом каждая версия должна быть достаточно осмысленной с точки зрения полезности для бизнеса.

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

Простота проектирования

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

Метафора системы

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

Метафора системы (system metaphor) — это аналог того, что в большинстве методик называется архитектурой. Метафора системы даёт команде представление о том, каким образом система работает в настоящее время, в каких местах добавляются новые компоненты, и какую форму они должны принять.

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

Стандарты кодирования

Все члены команды в ходе работы должны соблюдать требования общих стандартов кодирования. Благодаря этому:

Если в команде не используются единые стандарты кодирования, разработчикам становится сложнее выполнять рефакторинг; при смене партнёров в парах возникает больше затруднений; в общем и целом, продвижение проекта затрудняется. В рамках XP необходимо добиться того, чтобы было сложно понять, кто является автором того или иного участка кода, — вся команда работает унифицированно, как один человек. Команда должна сформировать набор правил, а затем каждый член команды должен следовать этим правилам в процессе кодирования. Перечень правил не должен быть исчерпывающим или слишком объёмным. Задача состоит в том, чтобы сформулировать общие указания, благодаря которым код станет понятным для каждого из членов команды. Стандарт кодирования поначалу должен быть простым, затем он может постепенно усложняться по мере наработки опыта группой разработчиков. Не нужно тратить слишком много времени на предварительную разработку стандарта.

Коллективное владение

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

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

Напишите отзыв о статье "Экстремальное программирование"

Литература

См. также

Ссылки

Отрывок, характеризующий Экстремальное программирование

– Как вам не грех лишать нас вашей прелестной жены?
– Andre, [Андрей,] – сказала его жена, обращаясь к мужу тем же кокетливым тоном, каким она обращалась к посторонним, – какую историю нам рассказал виконт о m lle Жорж и Бонапарте!
Князь Андрей зажмурился и отвернулся. Пьер, со времени входа князя Андрея в гостиную не спускавший с него радостных, дружелюбных глаз, подошел к нему и взял его за руку. Князь Андрей, не оглядываясь, морщил лицо в гримасу, выражавшую досаду на того, кто трогает его за руку, но, увидав улыбающееся лицо Пьера, улыбнулся неожиданно доброй и приятной улыбкой.
– Вот как!… И ты в большом свете! – сказал он Пьеру.
– Я знал, что вы будете, – отвечал Пьер. – Я приеду к вам ужинать, – прибавил он тихо, чтобы не мешать виконту, который продолжал свой рассказ. – Можно?
– Нет, нельзя, – сказал князь Андрей смеясь, пожатием руки давая знать Пьеру, что этого не нужно спрашивать.
Он что то хотел сказать еще, но в это время поднялся князь Василий с дочерью, и два молодых человека встали, чтобы дать им дорогу.
– Вы меня извините, мой милый виконт, – сказал князь Василий французу, ласково притягивая его за рукав вниз к стулу, чтоб он не вставал. – Этот несчастный праздник у посланника лишает меня удовольствия и прерывает вас. Очень мне грустно покидать ваш восхитительный вечер, – сказал он Анне Павловне.
Дочь его, княжна Элен, слегка придерживая складки платья, пошла между стульев, и улыбка сияла еще светлее на ее прекрасном лице. Пьер смотрел почти испуганными, восторженными глазами на эту красавицу, когда она проходила мимо него.
– Очень хороша, – сказал князь Андрей.
– Очень, – сказал Пьер.
Проходя мимо, князь Василий схватил Пьера за руку и обратился к Анне Павловне.
– Образуйте мне этого медведя, – сказал он. – Вот он месяц живет у меня, и в первый раз я его вижу в свете. Ничто так не нужно молодому человеку, как общество умных женщин.


Анна Павловна улыбнулась и обещалась заняться Пьером, который, она знала, приходился родня по отцу князю Василью. Пожилая дама, сидевшая прежде с ma tante, торопливо встала и догнала князя Василья в передней. С лица ее исчезла вся прежняя притворность интереса. Доброе, исплаканное лицо ее выражало только беспокойство и страх.
– Что же вы мне скажете, князь, о моем Борисе? – сказала она, догоняя его в передней. (Она выговаривала имя Борис с особенным ударением на о ). – Я не могу оставаться дольше в Петербурге. Скажите, какие известия я могу привезти моему бедному мальчику?
Несмотря на то, что князь Василий неохотно и почти неучтиво слушал пожилую даму и даже выказывал нетерпение, она ласково и трогательно улыбалась ему и, чтоб он не ушел, взяла его за руку.
– Что вам стоит сказать слово государю, и он прямо будет переведен в гвардию, – просила она.
– Поверьте, что я сделаю всё, что могу, княгиня, – отвечал князь Василий, – но мне трудно просить государя; я бы советовал вам обратиться к Румянцеву, через князя Голицына: это было бы умнее.
Пожилая дама носила имя княгини Друбецкой, одной из лучших фамилий России, но она была бедна, давно вышла из света и утратила прежние связи. Она приехала теперь, чтобы выхлопотать определение в гвардию своему единственному сыну. Только затем, чтоб увидеть князя Василия, она назвалась и приехала на вечер к Анне Павловне, только затем она слушала историю виконта. Она испугалась слов князя Василия; когда то красивое лицо ее выразило озлобление, но это продолжалось только минуту. Она опять улыбнулась и крепче схватила за руку князя Василия.
– Послушайте, князь, – сказала она, – я никогда не просила вас, никогда не буду просить, никогда не напоминала вам о дружбе моего отца к вам. Но теперь, я Богом заклинаю вас, сделайте это для моего сына, и я буду считать вас благодетелем, – торопливо прибавила она. – Нет, вы не сердитесь, а вы обещайте мне. Я просила Голицына, он отказал. Soyez le bon enfant que vous аvez ete, [Будьте добрым малым, как вы были,] – говорила она, стараясь улыбаться, тогда как в ее глазах были слезы.
– Папа, мы опоздаем, – сказала, повернув свою красивую голову на античных плечах, княжна Элен, ожидавшая у двери.
Но влияние в свете есть капитал, который надо беречь, чтоб он не исчез. Князь Василий знал это, и, раз сообразив, что ежели бы он стал просить за всех, кто его просит, то вскоре ему нельзя было бы просить за себя, он редко употреблял свое влияние. В деле княгини Друбецкой он почувствовал, однако, после ее нового призыва, что то вроде укора совести. Она напомнила ему правду: первыми шагами своими в службе он был обязан ее отцу. Кроме того, он видел по ее приемам, что она – одна из тех женщин, особенно матерей, которые, однажды взяв себе что нибудь в голову, не отстанут до тех пор, пока не исполнят их желания, а в противном случае готовы на ежедневные, ежеминутные приставания и даже на сцены. Это последнее соображение поколебало его.
– Chere Анна Михайловна, – сказал он с своею всегдашнею фамильярностью и скукой в голосе, – для меня почти невозможно сделать то, что вы хотите; но чтобы доказать вам, как я люблю вас и чту память покойного отца вашего, я сделаю невозможное: сын ваш будет переведен в гвардию, вот вам моя рука. Довольны вы?
– Милый мой, вы благодетель! Я иного и не ждала от вас; я знала, как вы добры.
Он хотел уйти.
– Постойте, два слова. Une fois passe aux gardes… [Раз он перейдет в гвардию…] – Она замялась: – Вы хороши с Михаилом Иларионовичем Кутузовым, рекомендуйте ему Бориса в адъютанты. Тогда бы я была покойна, и тогда бы уж…
Князь Василий улыбнулся.
– Этого не обещаю. Вы не знаете, как осаждают Кутузова с тех пор, как он назначен главнокомандующим. Он мне сам говорил, что все московские барыни сговорились отдать ему всех своих детей в адъютанты.
– Нет, обещайте, я не пущу вас, милый, благодетель мой…
– Папа! – опять тем же тоном повторила красавица, – мы опоздаем.
– Ну, au revoir, [до свиданья,] прощайте. Видите?
– Так завтра вы доложите государю?
– Непременно, а Кутузову не обещаю.
– Нет, обещайте, обещайте, Basile, [Василий,] – сказала вслед ему Анна Михайловна, с улыбкой молодой кокетки, которая когда то, должно быть, была ей свойственна, а теперь так не шла к ее истощенному лицу.
Она, видимо, забыла свои годы и пускала в ход, по привычке, все старинные женские средства. Но как только он вышел, лицо ее опять приняло то же холодное, притворное выражение, которое было на нем прежде. Она вернулась к кружку, в котором виконт продолжал рассказывать, и опять сделала вид, что слушает, дожидаясь времени уехать, так как дело ее было сделано.
– Но как вы находите всю эту последнюю комедию du sacre de Milan? [миланского помазания?] – сказала Анна Павловна. Et la nouvelle comedie des peuples de Genes et de Lucques, qui viennent presenter leurs voeux a M. Buonaparte assis sur un trone, et exaucant les voeux des nations! Adorable! Non, mais c'est a en devenir folle! On dirait, que le monde entier a perdu la tete. [И вот новая комедия: народы Генуи и Лукки изъявляют свои желания господину Бонапарте. И господин Бонапарте сидит на троне и исполняет желания народов. 0! это восхитительно! Нет, от этого можно с ума сойти. Подумаешь, что весь свет потерял голову.]
Князь Андрей усмехнулся, прямо глядя в лицо Анны Павловны.
– «Dieu me la donne, gare a qui la touche», – сказал он (слова Бонапарте, сказанные при возложении короны). – On dit qu'il a ete tres beau en prononcant ces paroles, [Бог мне дал корону. Беда тому, кто ее тронет. – Говорят, он был очень хорош, произнося эти слова,] – прибавил он и еще раз повторил эти слова по итальянски: «Dio mi la dona, guai a chi la tocca».
– J'espere enfin, – продолжала Анна Павловна, – que ca a ete la goutte d'eau qui fera deborder le verre. Les souverains ne peuvent plus supporter cet homme, qui menace tout. [Надеюсь, что это была, наконец, та капля, которая переполнит стакан. Государи не могут более терпеть этого человека, который угрожает всему.]
– Les souverains? Je ne parle pas de la Russie, – сказал виконт учтиво и безнадежно: – Les souverains, madame! Qu'ont ils fait pour Louis XVII, pour la reine, pour madame Elisabeth? Rien, – продолжал он одушевляясь. – Et croyez moi, ils subissent la punition pour leur trahison de la cause des Bourbons. Les souverains? Ils envoient des ambassadeurs complimenter l'usurpateur. [Государи! Я не говорю о России. Государи! Но что они сделали для Людовика XVII, для королевы, для Елизаветы? Ничего. И, поверьте мне, они несут наказание за свою измену делу Бурбонов. Государи! Они шлют послов приветствовать похитителя престола.]
И он, презрительно вздохнув, опять переменил положение. Князь Ипполит, долго смотревший в лорнет на виконта, вдруг при этих словах повернулся всем телом к маленькой княгине и, попросив у нее иголку, стал показывать ей, рисуя иголкой на столе, герб Конде. Он растолковывал ей этот герб с таким значительным видом, как будто княгиня просила его об этом.
– Baton de gueules, engrele de gueules d'azur – maison Conde, [Фраза, не переводимая буквально, так как состоит из условных геральдических терминов, не вполне точно употребленных. Общий смысл такой : Герб Конде представляет щит с красными и синими узкими зазубренными полосами,] – говорил он.
Княгиня, улыбаясь, слушала.
– Ежели еще год Бонапарте останется на престоле Франции, – продолжал виконт начатый разговор, с видом человека не слушающего других, но в деле, лучше всех ему известном, следящего только за ходом своих мыслей, – то дела пойдут слишком далеко. Интригой, насилием, изгнаниями, казнями общество, я разумею хорошее общество, французское, навсегда будет уничтожено, и тогда…
Он пожал плечами и развел руками. Пьер хотел было сказать что то: разговор интересовал его, но Анна Павловна, караулившая его, перебила.
– Император Александр, – сказала она с грустью, сопутствовавшей всегда ее речам об императорской фамилии, – объявил, что он предоставит самим французам выбрать образ правления. И я думаю, нет сомнения, что вся нация, освободившись от узурпатора, бросится в руки законного короля, – сказала Анна Павловна, стараясь быть любезной с эмигрантом и роялистом.
– Это сомнительно, – сказал князь Андрей. – Monsieur le vicomte [Господин виконт] совершенно справедливо полагает, что дела зашли уже слишком далеко. Я думаю, что трудно будет возвратиться к старому.
– Сколько я слышал, – краснея, опять вмешался в разговор Пьер, – почти всё дворянство перешло уже на сторону Бонапарта.
– Это говорят бонапартисты, – сказал виконт, не глядя на Пьера. – Теперь трудно узнать общественное мнение Франции.
– Bonaparte l'a dit, [Это сказал Бонапарт,] – сказал князь Андрей с усмешкой.
(Видно было, что виконт ему не нравился, и что он, хотя и не смотрел на него, против него обращал свои речи.)
– «Je leur ai montre le chemin de la gloire» – сказал он после недолгого молчания, опять повторяя слова Наполеона: – «ils n'en ont pas voulu; je leur ai ouvert mes antichambres, ils se sont precipites en foule»… Je ne sais pas a quel point il a eu le droit de le dire. [Я показал им путь славы: они не хотели; я открыл им мои передние: они бросились толпой… Не знаю, до какой степени имел он право так говорить.]