Extreme Programming

Перший проект з екстремального програмування було розпочато 6 березня 1996 року. Екстремальне програмування є одним з декількох популярних Agile-процесів. Він вже довів свою успішність у багатьох компаніях різних розмірів та галузей по всьому світу.

Екстремальне програмування (Extreme Programming) - це методологія розробки ПЗ, спрямована на покращення якості та реагування на мінливі вимоги замовника. Як різновид Agile розробки програмного забезпечення, воно пропагує часті релізи в коротких циклах розробки, призначені для підвищення продуктивності та запровадження контрольних точок, в яких можуть бути прийняті нові вимоги замовника.

Інші елементи екстремального програмування включають в себе:

  • програмування в парі або ретельний перегляд коду,
  • модульне тестування всього коду,
  • відмова від програмування функцій до тих пір, поки вони дійсно не будуть потрібні,
  • плоска структура управління,
  • простота і ясність коду,
  • очікування змін у вимогах замовника з плином часу і кращим розумінням проблеми,
  • а також часте спілкування з замовником і між програмістами.

Методологія отримала свою назву від ідеї, що корисні елементи традиційних практик програмної інженерії піднімаються до "екстремальних" рівнів. Наприклад, перегляд коду вважається корисною практикою; доведений до крайності, код може переглядатися безперервно.


Історія екстремального програмування (History of Extreme Programming)

Кент Бек розробив екстремальне програмування під час роботи над проектом Chrysler Comprehensive Compensation System (C3) - системою оплати праці. Бек став керівником проекту C3 у березні 1996 року. Він почав удосконалювати методологію розробки, що використовувалася в проекті, і написав книгу про цю методологію ("Пояснення екстремального програмування", опублікована в жовтні 1999 року).


Введення в екстремальне програмування

Екстремальне програмування (Extreme Programming) є успішним, тому що робить акцент на задоволенні потреб клієнтів. Замість того, щоб надавати все, що ви могли б забажати, на якусь дату в далекому майбутньому, цей процес надає потрібне вам програмне забезпечення, коли воно вам потрібно. Екстремальне програмування дає вашим розробникам можливість впевнено реагувати на мінливі вимоги клієнтів, навіть на пізніх стадіях життєвого циклу.

Extreme Programming (Екстремальне програмування) робить акцент на командній роботі. Менеджери, клієнти та розробники є рівноправними партнерами у спільній команді.

Extreme Programming реалізує просте, але ефективне середовище, що дозволяє командам стати високопродуктивними. Команда самоорганізується навколо проблеми, щоб вирішити її якомога ефективніше.

Extreme Programming (Екстремальне програмування) покращує програмний проект п'ятьма основними способами:

  • комунікація,
  • простота,
  • зворотній зв'язок,
  • повага та
  • сміливість.

Програмісти XP постійно спілкуються зі своїми клієнтами та колегами-програмістами. Вони тримають свій дизайн простим і чистим. Вони отримують зворотній зв'язок, тестуючи своє програмне забезпечення з першого дня.

Вони доставляють систему клієнтам якомога раніше і впроваджують зміни відповідно до їхніх побажань. Кожен невеликий успіх поглиблює їхню повагу до унікального внеску кожного члена команди. Маючи такий фундамент, програмісти XP здатні сміливо реагувати на мінливі вимоги та технології.

Найдивовижніший аспект екстремального програмування - це його прості правила. Екстремальне програмування дуже схоже на головоломку. Є багато маленьких шматочків. Окремо шматки не мають сенсу, але коли їх об'єднати разом, можна побачити повну картину. Правила можуть здатися незручними і, можливо, навіть наївними на перший погляд, але вони базуються на здорових цінностях і принципах.

Правила визначають очікування між членами команди, але самі по собі не є кінцевою метою. Ці правила визначають середовище, яке сприяє командній співпраці та розширенню можливостей, що і є метою. Після досягнення цієї мети продуктивна командна робота буде продовжуватися, навіть якщо правила будуть змінюватися відповідно до конкретних потреб компанії.

Розділ з блок схемою показує, як правила Extreme Programming працюють разом. Клієнтам подобається бути партнерами в процесі створення програмного забезпечення, розробники активно долучаються до роботи незалежно від рівня досвіду, а менеджери зосереджуються на комунікації та взаємовідносинах. Непродуктивні дії відсікаються, щоб зменшити витрати і розчарування всіх учасників процесу.


Правила екстремального програмування (The Rules of Extreme Programming)

Планування в екстремальному програмуванні (Planning in Extreme Programming)

  • Написані історії користувачів (User stories are written).
  • Планування релізів створює графік релізів (Release planning creates the release schedule).
  • Робіть часті невеликі релізи (Make frequent small releases).
  • Проект ділиться на ітерації (The project is divided into iterations).
  • Планування ітерацій починає кожну ітерацію (Iteration planning starts each iteration).

Управління в екстремальному програмуванні (Managing in Extreme Programming)

  • Надайте команді спеціальний відкритий робочий простір (Give the team a dedicated open work space).
  • Встановіть стабільний темп (Set a sustainable pace).
  • Щодня починається нарада у форматі stand up (A stand up meeting starts each day).
  • Вимірюється швидкість проекту (The Project Velocity is measured).
  • Переміщайте людей (Move people around).
  • Виправляйте XP, коли він ламається (Fix XP when it breaks).

Проектування в екстремальному програмуванні (Designing  in Extreme Programming)

  • Простота (Simplicity).
  • Виберіть метафору системи (Choose a system metaphor).
  • Використовуйте CRC-карти для сесій проектування (Use CRC cards for design sessions).
  • Створюйте експрес-рішення, щоб зменшити ризики (Create spike solutions to reduce risk).
  • Не додавайте функціонал завчасно (No functionality is added early).
  • Рефакторинг завжди і всюди, де це можливо (Refactor whenever and wherever possible).

Розробка в екстремальному програмуванні (Coding in Extreme Programming)

  • Клієнт завжди на зв'язку (The customer is always available).
  • Код повинен бути написаний відповідно до узгоджених стандартів (Code must be written to agreed standards).
  • Спочатку напишіть модульний тест (Code the unit test first).
  • Весь виробничий код запрограмований попарно (All production code is pair programmed).
  • Тільки одна пара інтегрує код одночасно (Only one pair integrates code at a time).
  • Інтегруйте часто (Integrate often).
  • Створіть спеціальний комп'ютер для інтеграції (Set up a dedicated integration computer).
  • Використовуйте колективну власність (Use collective ownership).

Тестування в екстремальному програмуванні (Testing in Extreme Programming)

  • Весь код повинен мати модульні тести (All code must have unit tests).
  • Весь код повинен пройти всі модульні тести, перш ніж він буде випущений (All code must pass all unit tests before it  can be released).
  • При виявленні помилки створюються тести (When a bug is found tests are created).
  • Приймальні тести часто запускаються, а результати публікується (Acceptance tests are run often and the score is published).

Цінності екстремального програмування (The Values of Extreme Programming)

Екстремальне програмування (XP) ґрунтується на цінностях. Правила, які ми щойно розглянули, є природним продовженням і наслідком максимізації наших цінностей.

Насправді XP - це не набір правил, а спосіб працювати в гармонії з вашими особистими та корпоративними цінностями. Почніть з цінностей XP, перелічених тут, а потім додайте свої власні, відобразивши їх у змінах, які ви вносите до правил.

Простота в екстремальному програмуванні (Simplicity in Extreme Programming)

Ми будемо робити те, що потрібно і про що просять, але не більше. Це дозволить максимізувати цінність, створену за рахунок інвестицій, зроблених на сьогоднішній день.

Ми робитимемо маленькі прості кроки до нашої мети і пом'якшуватимемо невдачі, коли вони траплятимуться. Ми створимо те, чим пишатимемося, і будемо підтримувати це впродовж тривалого часу за розумні кошти.

Комунікації в екстремальному програмуванні (Communication in Extreme Programming)

Кожен є частиною команди, і ми щодня спілкуємося віч-на-віч. Ми будемо працювати разом над усім, від вимог до коду. Ми створимо найкраще рішення нашої проблеми, яке зможемо разом.

Зворотний зв'язок в екстремальному програмуванні (Feedback in Extreme Programming)

Ми серйозно ставимося до кожної ітерації, надаючи робоче програмне забезпечення. Ми демонструємо наше програмне забезпечення на ранніх етапах, а потім уважно вислуховуємо і вносимо необхідні зміни. Ми будемо говорити про проект і адаптувати наш процес до нього, а не навпаки.

Повага в екстремальному програмуванні (Respect  in Extreme Programming)

Кожен робить свій внесок і відчуває повагу, на яку заслуговує як цінний член команди. Кожен робить свій внесок, навіть якщо це просто ентузіазм. Розробники поважають досвід клієнтів і навпаки. Керівництво поважає наше право брати на себе відповідальність і отримувати повноваження щодо власної роботи.

Сміливість в екстремальному програмуванні (Courage in Extreme Programming)

Ми будемо говорити правду про прогрес та оцінки. Ми не документуємо виправдання невдач, бо плануємо досягти успіху. Ми нічого не боїмося, бо ніхто ніколи не працює наодинці. Ми адаптуємося до змін, коли вони відбуваються.