Үздіксіз тестілеу Agile және DevOps-ті қалай жақсартады
Кәсіпорындар Agile және DevOps мүмкіндіктерін қолдана отырып, үздіксіз интеграция (CI), жеткізу (CD) және тестілеу (CT) өнімді жақсартуға көмектесетін негізгі элементтерге айналуда. Соңғы мәліметтер бойынша зерттеу, бағдарламалық қамтамасыз етуді әзірлеудің өмірлік циклінде осы құбыр желісін пайдаланатын ұйымдар кодты 208 есе жиі орналастырады, қателерді 2.6 есе жылдам түзетеді және пайдаланушылардан 7 есе аз бас тартуды алады. Мұның бәрі жылдамдық пен сапа басты артықшылықтарға айналған нарықтағы олардың сенімділігін арттырады. рөлін анықтайық үздіксіз тестілеу Agile және DevOps принциптеріне сәйкес жұмыс істейтін компанияларда және неге оны елемеу керек.
CI/CD-де үздіксіз тестілеу
Agile және DevOps екеуі де жоғары сапалы бағдарламалық жасақтаманы уақытында жеткізуге арналған. Agile әзірлеудің өмірлік циклін оңтайландыруға бағытталған, ал DevOps CI/CD ортасында бағдарламалау мен операцияларды біріктіреді. Бірге қолданғанда екі әдіс де бағдарламалық жасақтаманы әзірлеуді оңтайландырады және жақсы өнімдерді жасауға әкеледі.
Үздіксіз интеграция, тестілеу, жеткізу және орналастыру автоматтандырылған құбырға сәйкес келетін CI/CD тұжырымдамасының бөлігі болып табылады. Бұл конвейер жаңадан жазылған дайын кодты негізгі код базасымен біріктіру процесін жеңілдетеді, әртүрлі сынақтар мен тексерулерді жүргізеді және автоматтандырылған орналастыруды бастайды. Мұның бәрі CI/CD жобаға қаншалықты терең енгізілгеніне байланысты.
CI/CD құрылымы матрешкаға ұқсайды, онда үздіксіз интеграция тестілеу, жеткізу және орналастыру арқылы толықтырылады және кеңейтіледі. Бұл процестердің мақсаты мерзімдерді қысқарту кезінде шығарылымдардың сенімділігі мен тұрақтылығын жақсарту болып табылады.
Үздіксіз тестілеуді қамтитын бүкіл даму циклін қарастырайық.
Цикл кодты жазудан және оны сынақтармен қамтудан басталады. Содан кейін Дженкинс сияқты жүйе автоматты түрде өзгерістерді жинап, оларды сынай бастайды. Автоматтандырылған сынақтардан сәтті өткеннен кейін өзгерістер қолмен тестілеуге өтеді. Нәтиже - нөмірмен тағайындалған өнімнің тұрақты нұсқасы және енді бұл өзгерістер шығарылым кандидаты деп аталады.
Әрі қарай, шығарылым тармағы клиенттің өндірістік серверіне жүктеледі және орналастырылады. Келесі соңғы қадам - инженерлер өнімнің енгізілген нұсқасын қадағалап, қажет болған жағдайда қолданбаны тұрақтандыратын немесе бекітетін мониторинг жүргізу. Цикл жаңа функцияларды жоспарлаумен немесе болашақ шығарылымдар үшін өзгерістер мен түзетулер туралы деректерді жинаумен аяқталады.
CI процесі жаңадан жазылған кодты тексеру үшін жоғарыда аталған қадамдарды автоматтандыруды қамтиды. Әзірлеу жеке тармақтарда жүргізіледі, содан кейін барлық өзгерістер негізгі тармаққа біріктіріледі. Құрастыру және сынау процесі автоматты түрде басталады және мүмкіндігінше аз уақыт алады.
Ықшам дискінің идеясы үздіксіз интеграция қадамын автоматты түрде орындау және жобаны өндіріс серверіне шығаруға дайындау болып табылады. Әдетте, осы кезеңде DevOps маманы әзірлеу процесіне қосылады. Олар CI сатысында тексерілген және дәлелденген құрылымды алып, оны орналастырады.
Үздіксіз тестілеуге не кіреді
Үздіксіз тестілеу үздіксіз даму, біріктіру және орналастыру цикліндегі шағын тісті тетік болып табылады. Ол бағдарламалық жасақтаманы әзірлеудің өмірлік циклінің барлық кезеңдерінде – жоспарлаудан бастап өндіріске дейін автоматтандырылған сынақтарды орындау процесін болжайды. Бұл бизнеске тәуекелдер туралы мүмкіндігінше тез кері байланыс алуға мүмкіндік береді. Қарапайым сөзбен айтқанда, үздіксіз тестілеу «дәл қазір біздің бағдарламалық жасақтаманың сапасы қандай?» Деген сұраққа жауап береді.
Ескі типтегі бағдарламалық жасақтаманы тестілеу қызметтері бағдарламалық жасақтаманы бір командадан екіншісіне кезең-кезеңімен беруді ұсынды. Бұған қоса, жобаның әзірлеу және сапаны бақылау үшін белгілі бір кезеңдері болған.
Бірақ әрбір әзірлеу кезеңінде кері байланысты қолмен алудың дәстүрлі әдісі интеграциялық циклдердің ұзағырақ болуына және өнімді шығарудың кешіктірілуіне әкеледі. Сондықтан бағдарламалық қамтамасыз етуді үздіксіз тестілеу қажеттілігі туындады.
Бүгінгі шындықта тестілеу қолданбаның шығарылымынан шығарылған оқшауланған процесс бола алмайды. Командалар бірге тиімді және тиімді жұмыс істей алуы керек, ал сапа әзірлеушілердің, QA инженерлерінің және операциялық топтардың ортақ мәселесіне айналады.
Ішінде DevOps негізіндегі әзірлеу процесс, код үздіксіз әзірленеді, жеткізіледі, сыналады және орналастырылады. Мысалы, әзірлеуші репозиторийдегі кодты тексерген сайын үздіксіз процесте бірлік сынақтарының автоматтандырылған жинағы орындалады. Егер құрастыру тексерулерден өтсе, ол кешенді функционалдық және жүктеме сынақтары үшін QA өнімділігі серверлеріне орналастырылады. Сынақтар аяқталғаннан кейін қосымша өндіріске жіберіледі.
Үздіксіз тестілеудің мақсаты - ерте және жиі тестілеу арқылы үздіксіз жеткізу процесінің әрбір кезеңінде бағдарламалық қамтамасыз ету сапасын бағалау.
Неліктен ескі модель енді тиімді емес? Қолданбаның архитектурасы кең таралған және күрделі болып келеді бұлтты, API интерфейстері, микросервистер және т.б. Бұл бір іскерлік транзакция аясында әртүрлі хаттамалар мен технологиялардың шексіз дерлік комбинацияларын жасайды. Сонымен қатар, көптеген бағдарламалар өте жиі шығарылымдарды қажет етеді - Amazon, Google және Netflix-те болатындай күніне мың ретке дейін. Сондықтан тесттерді әзірлеу уақыты күрт қысқарады.
Бұған қоса, қолданба жұмысындағы ақау көбінесе бизнес мәселелеріне әкеледі. Бұл, мысалы, болды HSBC – оларда 2016 жылдың қаңтарында бағдарламалық жасақтаманың үлкен ақаулығы орын алды және миллиондаған клиенттер өздерінің онлайн тіркелгілеріне кіре алмады. Банк екі күнде дерлік қалпына келіп, қалыпты жұмысын қалпына келтіре алды, бірақ оның сенімі әлсіреп қалды.
Бұрын тестілеу жоғары жылдамдықтың жауы болып саналған және күмәнді іскерлік құндылыққа ие болды. Бірақ бүгінде үздіксіз тестілеуді қолдана отырып, кез келген бағдарламалық жасақтаманы тестілеуші компания бағдарламалық қамтамасыз етудің жиі шығарылымдарына, сапасына және қауіпсіздігіне бағытталған ақылды процестерді құруға көмектесе алады.
Сынақ автоматтандырудың рөлі қандай
Автоматтандырылған тестілеу және үздіксіз тестілеу бір-бірін толықтырады, бірақ оларды теңестіруге болмайды. Бұл процестердің әрқайсысы DevOps-қа үлкен әсер етеді және үздіксіз жеткізілімге өзінше әсер етеді.
Сынақтарды автоматтандыруда тапсырмалар жинағын тезірек және аз қателермен орындауға арналған арнайы құрал пайдаланылады. Әдетте, мүмкіндік әзірленіп, орталықтандырылған репозиторийге біріктірілгеннен кейін тестілеуші сценарийлерді жаза бастайды, бұл бағдарламалық жасақтаманы жеткізуді айтарлықтай баяулатады.
Үздіксіз тестілеу автоматтандырылған тестілеуге қарағанда кеңірек. Кітап авторы және бағдарламалық қамтамасыз етуді зерттеуші ретінде Джез Кішіпейіл Оның мақсаты «жеткізу үдерісінде үздіксіз қолмен және автоматтандырылған сынақтардың көптеген түрлерін орындау» деп санайды. Мұнда функция әзірленбес бұрын сынақ сценарийлері жазылады. Бағдарламашы жаңа функцияның бастапқы кодын орталықтандырылған репозиторийге біріктірген кезде код сапасын бағалайтын әртүрлі сынақ сценарийлері автоматты түрде іске қосылады.
Негізінде үздіксіз тестілеу тиімділікті арттыру және бағдарламалық қамтамасыз етуді жеткізуді жеделдету үшін тестілеуді автоматтандыруды пайдаланатын әдістеме болып табылады.
Үздіксіз тестілеудің артықшылықтары
DevOps процестеріне үздіксіз тестілеуді енгізу компанияларға келесі артықшылықтарды береді:
-
Шұғыл кері байланыс
Үздіксіз тестілеу бағдарламалық жасақтаманы әзірлеудің өмірлік циклінің әрбір кезеңінде сапаны қамтамасыз ету мен жұмыс процестерін автоматтандырады. Кері байланыс мамандарға кодты қолданбас бұрын оны жақсарту үшін қажетті ақпаратты береді.
Ұлттық стандартты технологиялар институтының зерттеушілері тапты бағдарламалық жасақтаманы өндіру кезеңінде анықталған қатені түзету 15 сағатты алады. Бұл кодтау кезеңінде бірдей қате анықталған кездегіден үш есе ұзағырақ.
Дәл емес сынақтардың әйгілі мысалы Марс Climate Orbiter аппаратының істен шығуы болды. Бағдарламалық жасақтамадағы ақауларға байланысты орбиталық аппарат Марс атмосферасына енген бойда құлады. Бұл фиаско NASA-ға шамамен 125 миллион доллар шығын келтірді.
Алдын ала кері байланыс әлеуетті іскерлік тәуекелдерді – пайдаланушы тәжірибесіндегі теріс өзгерістерден бастап бағдарламалық құралдың сәтсіз шығарылымдарына дейін жедел бағалауға көмектеседі.
-
Жылдам жеткізу
Жоғарыда айтқанымыздай, кодты репозиторийге біріктіргеннен кейін болатын барлық процестер әзірлеу аяқталғанға дейін жоспарланады және автоматтандырылады. DevOps емес тәжірибеде тестерлер қолайлы сынақ деректерін табуға көп уақыт жұмсайды (50%) және сынақтардың 70% әлі де қолмен әзірленеді. Бұл көрсеткіштерді автоматтандыру платформаларын пайдалану арқылы бағдарламалық қамтамасыз етуді тестілеудің аутсорсингін ұйымдастыру арқылы айтарлықтай жақсартуға болады.
-
Жақсартылған сапаны бақылау
Үздіксіз тестілеудің арқасында командалар сапаны қамтамасыз ету қызметтерін жоғары деңгейде ұсына алады. Автоматтандырылған басқару құралдарын пайдалану бір кезеңде валидациядан өтпеген функциялардың келесіге өтпеуін қамтамасыз етеді. Мысалы, Google айдап Күніне шамамен 150 миллион сынақ және олардың барлығы дерлік автоматтандырылған. Борис Чен, tCell компаниясының негізін қалаушы және инженерия жөніндегі вице-президенті автоматтандыру бір адамның уақытын үнемдеп қана қоймайды, сонымен қатар бүкіл команданың жылдам жұмыс істеуіне мүмкіндік береді деп мәлімдейді.
1-инфографика: https://static.andersenlab.com/andersenlab/new-andersensite/cases/rideshair/visual-concept/1-1-desktop.webp
Дереккөз: andersenlab.com
-
Бизнес үшін тәуекелдерді азайту
Қолданбаның бір бөлігіндегі қате бизнестің қажетсіз тоқтап қалуына және өнімділік пен табыстылыққа теріс әсер етуі мүмкін. Бұл әсіресе қызметтердің қолжетімділігіне тәуелді компанияларға қатысты.
Үздіксіз тестілеу үлкен бағдарламалық жүйелерде жіберіп алуы мүмкін мәселелерді анықтайды және оларды толықтай ашады. Бұл бизнестің бұзылуына байланысты шығындарды болдырмауға көмектеседі.
2-инфографика: https://d3jqtupnzefbtn.cloudfront.net/andersenlab/new-andersensite/cases/management-events/2-charts.png
Неліктен DevOps және Agile үшін үздіксіз тестілеу маңызды
DevOps - бұл кодты біріктіру, сынақтарды іске қосу немесе бірнеше ортада орналастыру болсын, үздіксіздікті қамтамасыз ету. Бұл тізбекте үздіксіз тестілеу бағдарламалық қамтамасыз етуді әзірлеудің тиімді желісін жасау үшін үздіксіз жеткізу және орналастырумен үздіксіз интеграцияны біріктіретін көпір болып табылады.
Бұл жұмыс процесі жаңа мүмкіндіктің күтілетін сапа критерийлеріне сәйкес келуін және қолданбаның пайдаланушыға уақытында берілуін қамтамасыз етеді. Үздіксіз тестілеу тек АҚШ-та 2.08 жылы 2020 триллион долларды құраған сапасыз бағдарламалық қамтамасыз етуге жұмсалатын соманы азайтуға бағытталған.
Жақында Forrester Total Economic Impact™ (TEI) зерттеуінің нәтижелері суреттеңіз бірнеше корпоративтік компаниялардың үздіксіз тестілеу тәжірибесін енгізу арқылы 19 миллион доллардан астам табыс тапқаны. Кәсіпорындар сынақ жағдайын әзірлеу уақытын 50%-ға дейін қысқартты, бағдарламалық қамтамасыз етуді шығару өнімділігін 40%-ға арттырды және маңызды кодты енгізуді 8 сағаттан 30 минутқа дейін жылдамдатты.
Үздіксіз тестілеу Agile және DevOps әдістемелерін бағдарламалық жасақтаманы жылдам әзірлеуді қамтамасыз етуде тиімдірек және тиімді етеді. Ол ақауларды әзірлеу циклінің басында табу, процесті жақсарту және жоба шығындарын азайту арқылы тиімді және жылдам шығарылымдарға кепілдік береді. Ал бұл, өз кезегінде, бағдарламалық қамтамасыз етуді жеткізу икемді, сапалы және жылдам болатынын білдіреді.