Работил съм в много фирми през годините. На много различни типове проекти от приложения на Windows до популярни уебсайтове, базирани на услуги. Всеки бизнес имаше различен процес за актуализиране на нов код и въвеждане на функции в техните производствени среди. Някои процеси бяха по-лесни за активиране на кода, отколкото други. Едно общо нещо за всички процеси е, че е налице механизъм за връщане назад. Позволява ви да „отмените“ всички промени, които може да са причинили проблеми в производствената среда. Подобно на нормалния процес на връщане назад, превключването на функции добавя още един слой към процесите на внедряване на код.

Внедряването на процес на връщане назад е чудесен начин да гарантирате, че винаги можете да възстановите работата на вашия софтуер, продукт или услуга с минимални усилия. По мое мнение, този процес като подход „всичко или нищо“. Ако пускате функция или коригирате една по една. Този механизъм за освобождаване работи добре.

Някои проекти, по които съм работил, внедриха много нови функции в производствения софтуер чрез групиране на новата функционалност или корекции в едно издание. Въпреки това, ако имате няколко нови функции, вие сте се опитвали да стигнете до клиентите възможно най-скоро и една от функциите е имала проблем. Ще трябва да отмените и всички други нови функции. Независимо от това дали другите функции работят според очакванията.

Един или два от предприятията, с които работих, или имаха механизъм за превключване на функции, или ние успяхме да вградим такъв в нашия процес на доставка на софтуер. Ще обясня какво е „Превключване на функции“ (известно още като превключване на функции или маркиране на функции) в следващия раздел.

Какво е превключване на функции

И така, какво е превключване на функции, превключване или маркиране. Е, на най-високо ниво. Превключването на функции е начин за управление на код, който ви позволява да поставите нови подобрения в продукт, но те могат да бъдат включени или изключени, както и когато искате да бъдат използвани.

„Какво имаш предвид“, чувам те да питаш. Ще се опитам да го обясня с пример. Имам уебсайт, в който влизам. След като вляза, виждам главната страница, която показва 4 графики. Тези графики описват ключова информация, свързана с моя бизнес. Зареждането на всяка графика отнема повече от няколко секунди, за да се покаже информацията. Стилът на графиките е като нещо от 80-те години.

Лесно като натискане на ключ за осветление

Платих на дизайнер и разработчик да подобрят тези графики. Това е напълно нов начин за показване на ключова информация. Следователно това има потенциал да разбие началната страница на моя уебсайт.

За да преодолея това, използвам система за превключване на функции, за да създам 4 превключвателя на функции. Моля разработчика да внедри кода, за да може да провери дали е активиран превключвател на функции за определена графика. Ако е така, покажете новата версия. В противен случай искам уебсайтът ми да показва по-старата версия на графиката, за която знаем, че работи. По-долу е даден примерен код, показващ как бих искал да се показват графиките.

if (featureSwitch.IsEnabled("GraphOne")) then displayTheNewGraphOne() else displayTheOldGraphOne() end if

По подразбиране всички превключватели на функциите са изключени. Пускам актуализация на моя уебсайт с 4 части код, подобен на примера по-горе. Влизам в уебсайта и началната страница изглежда идентична със старата версия на моя уебсайт. Използвайки моята система за превключване, активирам превключвателя „GraphOne“. Връщайки се към моя уебсайт, опреснявам началната страница. „Здравейте“, новата графика се появява в горната лява част на моя екран, заменяйки старата графика в процеса.

Сега мога да повторя този процес за другите 3 графики. Уверете се, че всяка графика работи според очакванията, преди да преминете към следващата графика.

Предимства на превключването на функции

Има много предимства от използването на превключване на функции. Ще прегледам това, което според мен са основните причини за използването на система за превключване на функции.

Безопасно внедряване на код само веднъж

Знам от моя опит с производствени издания. Колко стресиращи могат да бъдат. Особено ако трябва да пуснете код извън работно време, след като вече сте работили цял ден.

Може да отнеме време за внедряване на версия в производство в зависимост от размера на функциите, които съдържа. Не си струва да мислите за необходимостта от връщане назад и повторно разполагане на предишна версия на кода и компонентите. Както внедряването, така и повторното внедряване отнема време и може потенциално да изведе вашия продукт или услуга офлайн. Какво се случва, ако връщането назад не успее? За това не се мисли.

Ако нещо се обърка, трябва да свалите производствената си система отново, за да я възстановите до предишното работно състояние. Използването на превключване на функции намалява риска или нещо да се обърка. След като сте пуснали кода в производство и сте потвърдили, че всичко работи както предишната версия. Няма да е необходимо да преразпределяте никакъв код. След това трябва да активирате превключвател на функции и да видите дали това работи. Ами сега, нещо се е повредило или функцията зад превключвателя не работи според очакванията. За да коригирате проблема, трябва само да деактивирате превключвателя отново и предишното поведение се възстановява.

Няма повече прекъсвания и няма нужда от връщане назад. невероятно

Премахва подхода „всичко или нищо“.

Докоснах това в примера в предишния раздел. Ако трябваше да актуализирам 4 графики в страница на моя уебсайт. Мога да разположа кода за всичките 4 графики и да ги включа, както ми трябва.

Използвайки примера. Открих, че първите две графики работят перфектно, както са проектирани. Вторите две графики обаче не показват правилно информацията. Да кажем, че има грешка в третата и четвъртата графика. И двете графики показват информация само за последните седем дни. Кога всъщност графиките са проектирани да показват ключова информация от последните 30 дни. Изключвам последните два превключвателя на функции и по-старите графики отново се показват, показвайки правилната информация.

Успях да изкарам две от четирите функции в издание. Ако не бях използвал превключване на функции, тогава трябваше да върна и четирите функции. Това означава, че щяхме да имаме неуспешно издание и допълнителен престой на продукта. Аргх

Прави тестването и откриването на грешки по-лесно

Отново, използвайки моя пример. Без да използвам превключване на функции, ще трябва да тествам дали и четирите нови графики работят както бих искал. Това означава, че може да бъде прибързан процес, гарантиращ, че всичко работи. Твърде добре знам, че бързането може да доведе до грешки. Не искам да подпиша освобождаване по погрешка.

Превключване на всяка графика и тестване дали работи според изискванията. Преди да преминете към следващата графика. Позволява на лицето, което тества, да се съсредоточи върху това, че всичко е правилно с определена функция. Само малка част от системата може да не работи правилно в даден момент. Което намалява въздействието върху клиентите.

Откриване на грешки

Ако се случи най-лошият случай и една от четирите графики не работи. Екип за разработка може да използва превключвателя на функциите, за да определи какъв е проблемът в производствена среда.

Тъй като кодът с грешката в него все още се произвежда. Екип за разработка може да включи функцията, когато минимален брой клиенти използват продукта. Проучете какъв е проблемът с помощта на други отдели като инфраструктурата. След като проблемът бъде открит, функцията може да бъде изключена отново. След това екипът може да премине към отстраняване на проблема с увереност, че знае какъв е основният проблем.

В миналото съм бил на издания, при които проблем е възниквал само в производствена среда. Цялото тестване и валидиране в нашите сценични среди не предизвика никакви проблеми. Ако бяхме върнали кода, нямаше да можем да се съберем и да проучим проблема. Щеше да бъде оставено на „мислим, че това е причината да се счупи“, а не „Да, затова не работи“. (Имам поговорка, която използвам, когато работя с екипи за разработка „Предположението е майката на всички глупости).

Прави кодирането на нови функции по-лесно

В разработката на софтуер. Може би сте чували за принципите SOLID, Clean Code и принципа KISS. Те са страхотни и аз силно вярвам в използването на тези насоки. Софтуерът обаче може да се усложни много бързо.

Например. Искам да внедря ново подобрение. Но ако тази нова функционалност не проработи и трябваше по някакъв начин да се върна към стария начин за сервиране на графика например. Моят код ще стане много объркан, много бързо и принципите, които засегнах, ще бъдат изхвърлени през прозореца.

Поставянето на нова функционалност зад превключване на функции ви позволява като разработчик да се съсредоточите върху изграждането на едно нещо по професионален и поддържаем начин. Не е нужно да се тревожите за най-лошите сценарии и отстъпки. За всичко това се грижи системата за превключване на функции.

Премахнете превключването на функции и стария код

Може би съм просто аз и моето ОКР. Но обичам да изтривам стар, неизползван код. Изпитвам ритник от това. Това важи и за превключвателите на функции. Обичам да изтривам стари. Ако се замислите, това е нещо добро.

Вие сте подобрили част от продукт, който сега е бил включен в производство за известно време. Защо не искате да премахнете този стар миризлив код и превключвател на функции, който е около него. Това означава, че сте свършили страхотна работа.

Кодът става все по-органичен. Развива се всеки ден, с по-бързи темпове от всякога. Старият код и функционалност трябва да се премахват постоянно, за да поддържате проекта си прост. Поддържането на вашия кодов отпечатък възможно най-малък позволява внедряванията да бъдат бърз и лесен процес.

Внедряване на превключване на функции

Няма да навлизам в подробности за това как да внедря система за превключване на функции. По-голямата част от системите за превключване на функции, които компаниите използват, са изградени „вътрешно“ от техните съществуващи екипи за разработка. Следователно съобразени с нуждите на всеки бизнес. Въпреки това, използването и основният принцип във всяка система са почти еднакви.

Използването на превключване на функции добавя допълнителен слой на безопасност към вашия процес на издаване. Освен че ви дава по-подробен процес на „връщане назад“, който стои върху съществуващия ви механизъм за връщане назад. Изисква се натиск и от вашия екип за разработка, тъй като те са уверени, че нещо наистина се обърка. Кодът с проблема може да бъде изключен много бързо, ако е необходимо.

Ако искате да научите повече за превключването на функции и как да внедрите системата в проект. Моля, не се колебайте да се свържете с мен. Ще се радвам да помогна.

Първоначално публикувано на https://www.philliphughes.co.uk на 9 май 2019 г.