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