Екстремно програмиране срещу SCRUM | XP срещу SCRUM
Има редица различни методологии за разработка на софтуер, използвани в софтуерната индустрия през годините, като метод на разработка на водопад, V-модел, RUP и няколко други линейни, итеративни и комбинирани линейно-итеративни методи. Гъвкавият модел (или по-правилно, група от методологии) е по-нов модел за разработка на софтуер, въведен от манифеста на Agile за справяне с недостатъците, открити в тези традиционни методологии за разработка на софтуер.
Гъвкавите методи се основават на итеративно развитие и използват обратната връзка от потребителите като основен контролен механизъм. Agile може да се нарече ориентиран към хората подход в сравнение с традиционните методи. Agile моделът доставя работеща версия на продукта много рано, като разделя системата на много малки и управляеми подчасти, така че клиентът да може да осъзнае някои от предимствата рано. Времето за цикъл на тестване на Agile е относително кратко в сравнение с традиционните методи, тъй като тестването се извършва успоредно с разработката. Поради всички тези предимства, Agile методите са предпочитани пред традиционните методологии в момента. Scrum и Extreme програмирането са два от най-популярните варианти на Agile методите.
Какво е SCRUM?
Както бе споменато по-горе, SCRUM е инкрементален и итеративен процес за управление на проекти, който принадлежи към семейството на Agile методите. SCRUM се основава на даване на висок приоритет на участието на клиента в началото на цикъла на разработка. Препоръчва се включване на тестване от клиента рано и възможно най-често. Тестването се извършва във всяка точка, когато стане достъпна стабилна версия. Основата на SCRUM се основава на започване на тестване от началото на проекта и продължаване до края на проекта.
Ключовата стойност на SCRUM е „качеството е отговорност на екипа“, което подчертава, че качеството на софтуера е отговорност на целия екип (а не само на екипа за тестване). Друг важен аспект на SCRUM е разбиването на софтуера на по-малки управляеми части и доставянето им на клиента много бързо. Предоставянето на работещ продукт е от изключителна важност. След това екипът продължава да подобрява софтуера и да доставя непрекъснато на всяка важна стъпка. Това се постига чрез много кратки цикли на освобождаване (наречени спринтове) и получаване на обратна връзка за подобрение в края на всеки цикъл.
SCRUM определя няколко ключови роли за безпроблемната работа на екипа за разработка. Те са собственикът на продукта (който представлява клиента и поддържа изоставането на продукта), Scrum master (който действа като организатор и координатор на екипа, като провежда срещи на scrum, поддържа спринт изоставане и изгаря диаграми) и други членове на екипа. Един екип може да се състои от традиционни роли, но най-вече те са самоуправляващи се екипи. Основните артефакти на Scrum са неизпълнени задачи/издаване на продукти (списък с желания), натрупвания на Sprint/натрупани дефекти (задачи във всяка итерация), диаграми за изгаряне (оставаща работа спрямо дата). Основните церемонии на SCRUM са среща за изоставане на продукта, среща за спринт и среща за ретроспекция.
Какво е екстремно програмиране?
Extreme Programming (съкратено XP) е методология за разработка на софтуер, която принадлежи към Agile модела. Екстремното програмиране извършва фази на много малки непрекъснати стъпки (в сравнение с традиционните методи). Първото преминаване, което отнема само ден или седмица, е умишлено непълно. За да се осигурят конкретни цели за разработване на софтуера, в началото се пишат автоматизирани тестове. След това разработчиците правят кодирането. Фокусът е върху програмирането по двойки. След като всички тестове преминат, кодирането се счита за завършено. Следващата фаза е проектиране и архитектура, която се занимава с преработване на кода от същия набор от програмисти. В края на тази фаза незавършен (но функционален) продукт се представя на заинтересованите страни. Веднага след това започва следващата фаза (която се фокусира върху следващия набор от най-важни функции).
Каква е разликата между Extreme Programming и SCRUM?
Extreme Programming и SCRUM разбираемо са много сходни и съгласувани методологии. Има обаче фини, но важни разлики между тези два метода. SCRUM спринтовете продължават 2-4 седмици, докато типичните XP итерации са по-кратки (последните 1-2 седмици). Обикновено екипите на SCRUM не позволяват промени в спринтовете, но екипите на XP са малко по-гъвкави за промени в рамките на итерации. Например, след планирането на спринта, наборът от елементи от този спринт остава непроменен, но функция, която не е започнала да работи, може по всяко време да бъде заменена с друга функция в XP. Друга разлика между XP и SCRUM е, че редът на функциите, разработени в XP, е строго приоритизиран от клиента, докато екипът на SCRUM решава реда на елементите (след като изоставането на продукта бъде приоритизирано от собственика на продукта на SCRUM).
За разлика от XP, SCRUM не налага никакви инженерни практики. Например, XP се ръководи от практики като разработка, управлявана от тестове (TDD), програмиране по двойки, рефакторинг и т.н. Някои обаче смятат, че налагането на набор от практики върху самоорганизиращите се екипи може да има отрицателно въздействие и това може да се счита недостатък на XP. Друг недостатък на Extreme програмирането е, че неопитни екипи може да са склонни да преработват без никакви автоматизирани тестове или TDD (или просто хакване). Ето защо някои предполагат, че SCRUM е по-добър за гледане (тъй като носи големи подобрения просто чрез фокусирани времеви итерации), а XP е подходящ за малко зрели екипи, които са открили стойността на гореспоменатите практики (вместо да ги използват, защото са били помолени за да го направите).