„Това е най-удивителното приложение на машинното обучение, което някога съм виждал.“
Майк Кригер, съосновател на Instagram.
Думите на Майк Кригер не са хипербола. Макар че ML е способен на някои забележителни неща по отношение на анализа на данни и прозренията, GitHub Copilot променя изцяло правилата на играта заради потенциалната полза, която може да предостави на разработчиците на продукти по целия свят.
Копилотите за кодиране и генеративният изкуствен интелект помагат на екипите да отключат огромни ползи, като например ускоряване на жизнения цикъл на разработката на софтуер до немислими досега скорости. Въздействието на технологията върху RPA и софтуерното тестване обаче са две от най-вълнуващите граници на тази невероятна технология.
В тази статия ще разгледаме как кодиращите копилоти и генеративният изкуствен интелект са променили света на софтуерното тестване и RPA в наши дни, преди да проучим бъдещото им въздействие върху технологиите.
Копилоти и генеративен AI в
разработване на софтуер: Начален курс
Генериращият изкуствен интелект и кодиращите копилоти са относително нови в сферата на разработването на софтуер. Преди да обсъдим влиянието им върху пространството, си струва да разгледаме техния произход и начина им на работа.
1. Автоматични програмисти с изкуствен интелект
Големите езикови модели (LLM) се подобриха значително през последните няколко години. С експоненциалното нарастване на обема на масивите от данни и на изчислителната мощ се повишава и качеството на резултатите.
Има много вертикални области, които могат да се възползват от магистратурата по право. Някои от най-често използваните включват генериране на текст, изображения, видеоклипове и други форми на медии. Въпреки че тези случаи на употреба са впечатляващи, има последствия за разработчиците, които може би са много по-интересни.
На пазара има редица автокодери за LLM. Въпреки това GitHub CoPilot е може би най-известният и най-успешният. Голяма част от причините за това са, че той се обучава в хранилището на GitHub. Той има достъп до милиони примери за код с отворен код, най-добри практики, архитектура на приложенията и други, от които може да се учи, което му позволява да предоставя висококачествени и разнообразни резултати.
2. Как работят кодовите пилоти?
Един от най-лесните начини да разкажем за работата на копилотите за кодиране е като разгледаме водещия продукт в играта – GitHub CoPilot. Приложението е базирано на модела ChatGPT-3 на OpenAi.
Подобно на ChatGPT и други подобни LLM, CoPilot се основава на милиарди параметри. По време на разработването на ChatGPT-3 OpenAI започна да изгражда специална програма за кодиране, наречена OpenAI Codex. Microsoft закупи ексклузивен достъп до продукта.
Ключовият момент тук обаче е, че Microsoft вече притежава GitHub. Ако сте програмист, знаете всичко за GitHub. По принцип това е уеб базирана платформа, която се използва за контрол на версиите и сътрудничество в проекти за разработка на софтуер. Те обучиха OpenAI Codex на базата на библиотеката GitHub, която съдържа милиони редове публичен код с отворен код.
CoPilot използва машинно обучение, за да открива модели и връзки между редовете код. Подобно на ChatGPT, той разглежда дадена дума или ред и изчислява вероятността за това какво ще последва въз основа на огромно хранилище от исторически данни.
Силата на копилотите с изкуствен интелект се крие в способността им да предлагат фрагменти от код, докато разработчиците редактират. Представете си го като подобрен автокомплект за кодиране. Когато програмистите въвеждат ред код, LLM сравнява началото на този код с огромната си библиотека от предишни проекти. Оттам той предлага вероятностни редове и нови редове код.
Очевидните предимства тук са, че разработчиците могат да спестят невероятно много време чрез това автоматично допълване. Това повишава производителността, а в много случаи и точността на кода.
3. Какво ще кажете за генеративния изкуствен интелект за кодиране и разработка?
Както можете да видите от историята на CoPilot, генеративният ИИ и Copilots имат сходни корени. И двете са технологии, които използват статистическа вероятност, за да правят прогнози за това, от което се нуждаят потребителите, въз основа на приписана информация.
Голямата разлика между софтуера за копилотиране и генеративния ИИ обаче е, че последният се основава на подкани. Накратко това означава, че потребителите въвеждат набор от писмени инструкции в машината и тя извежда съдържание. Както всеки, който е използвал ChatGPT или подобни приложения, знае, този изход може да бъде под формата на текст, изображения, видео или код.
Така че, въпреки че методите, които кодиращите използват, за да достигнат до автоматизирано кодиране, са различни, можем да ги поставим под подобен чадър на автоматизирано или генеративно кодиране, подпомагано от изкуствен интелект.
Еволюцията на софтуерното тестване
Софтуерното тестване е гъвкаво и постоянно развиващо се. В рамките на няколко десетилетия тя се промени и преобрази, за да отговори на новите изисквания и да използва напредъка на технологиите.
1. Ръчно тестване:
В началото на софтуерното тестване се използваше ръчно тестване. Този вид тестване беше скъп и отнемаше много време, тъй като изискваше от експертите по осигуряване на качеството да преглеждат софтуера с тънък гребен, като разработват поредица от тестови случаи, изпълняват и записват резултатите, планират поправки и повтарят процеса.
Гарантирането, че всички възможни сценарии и ситуации са обхванати от тези тестове, беше голямо предизвикателство, а като се добавят времето и разходите, ръчното тестване изискваше много ресурси. Освен това беше силно податлив на човешки грешки, което се засилваше от ограничените възможности за разпространение, което означаваше, че всички неоткрити грешки бяха трудни за бързо отстраняване.
2. Скриптирано тестване:
Скриптираното тестване представляваше огромна стъпка напред за общността на QA. Вместо да преглеждат кода и тестовите сценарии ръчно, разработчиците могат да пишат програми, които да тестват софтуера автоматично. Големите плюсове тук бяха, че тестването стана по-ефективно и по-малко податливо на човешки грешки. Постигането на тази цел обаче изисква умело, прецизно и продължително планиране и кодиране, за да се осигури цялостно покритие.
3. Автоматизация на тестовете:
Автоматизацията на тестването е следващата еволюция на тестването. Инструменти като ZAPTEST можеха да предложат на програмистите всички предимства на скриптираното тестване, но без да се използва интерфейс за кодиране. И тук значителните предимства са спестяването на време, многократно използваемите и адаптивни тестове, тестването на потребителския интерфейс и API, както и тестването на различни платформи и устройства.
4. Тестване, базирано на данни:
Тестването, базирано на данни, беше решение на проблема с тестването на софтуер, който обработва различни набори от данни. Това отново е форма на автоматизация на тестовете, но този метод включва създаване на тестови скриптове и тяхното изпълнение спрямо зададени набори от данни. Този тип тестване позволява на разработчиците да работят по-бързо, да изолират тестовете и да намалят времето за повтаряне на тестовите случаи.
5. Генериращо тестване на ИИ:
Генериращото тестване с изкуствен интелект е най-новата иновация в тестването на софтуер. С помощта на LLM екипите за осигуряване на качеството могат да създават тестови случаи и тестови данни, които помагат за ускоряване на процеса на тестване. Тези тестови случаи са много гъвкави и могат да се редактират, което помага на разработчиците да използват повторно и да променят предназначението на тестовете и значително да увеличат обхвата на тестването.
Съвременното използване на втори пилоти и
Генериращ изкуствен интелект в софтуерното тестване и RPA
Генериращият изкуствен интелект и копилотите имат голямо въздействие върху тестването на софтуер. Въпреки това, вместо да заместят изцяло програмистите, тези инструменти помогнаха да се увеличат тестерите. Накратко, те помагат на разработчиците да станат по-бързи и по-ефективни и в много случаи повишават качеството на тестването.
Сайтът
Проучване на разработчиците на Stack Overflow от 2023 г.
предлага някои идеи за съвременното използване на инструменти за изкуствен интелект в общността за разработване на софтуер. Една от най-интересните части на проучването показва, че макар малко повече от половината от всички разработчици да се интересуват от инструменти с изкуствен интелект за тестване на софтуер, по-малко от 3 % от тях заявяват, че се доверяват на тези инструменти. Нещо повече, само 1 на всеки 4 посочва, че в момента използва инструменти с изкуствен интелект за тестване на софтуер.
Интересното в тези статистически данни е, че те показват, че използването на инструменти с изкуствен интелект все още не е широко разпространено и че ранните внедрители все още могат да получат предимство.
1. Случаи на употреба на копилот и генеративен изкуствен интелект при тестване на софтуер и RPA
Копилотите и генеративният изкуствен интелект оказват влияние върху всички области на разработката на софтуер. Ето някои от начините, по които технологията може да помогне при тестването на софтуер и RPA.
Анализ на изискванията
Анализът на изискванията е ключова част от жизнения цикъл на разработката на софтуер. Процесът включва разбиране на изискванията на заинтересованите страни и различните функции, необходими за създаването на даден софтуер. Генериращият AI може да помогне на екипите да разработят идеи, като предлага нови идеи и гледни точки.
Планиране на тестовете
След като изискванията за тестване са добре разбрани, екипите за осигуряване на качеството трябва да разпределят нещата в график, за да осигурят адекватно покритие на тестовете. Този тип работа изисква експертни познания и опит, но Generative AI може да подкрепи екипите чрез примери и ръководства, както и да направи препоръки за конкретни инструменти и най-добри практики за техните уникални изисквания.
Създаване на тестови случаи
Екипите за осигуряване на качеството могат да използват LLM за анализ на кода, изискванията на потребителите и спецификациите на софтуера, за да разберат основните връзки, които стоят зад системата. След като изкуственият интелект се запознае с входовете и изходите и очакваното поведение на софтуера, той може да започне да изгражда тестови случаи, които ще тестват софтуера.
Ползите от това не се ограничават до спестяване на време и ръчно кодиране. Създаването на тестови казуси с изкуствен интелект може да доведе и до по-всеобхватно покритие, тъй като може да изследва области, които инженерите по осигуряване на качеството може да не вземат предвид, което води до по-надеждни компилации.
Намиране и решаване на грешки
Машинното обучение позволява на специалистите по осигуряване на качеството да съкратят значително времето, необходимо за откриване и отстраняване на грешки. При тестването на софтуер много грешки се откриват лесно. В много случаи обаче това е трудоемък и отнемащ време процес. Генериращият изкуствен интелект може да извършва проверките за част от времето на ръчните работници и да помага да се откроят дори най-упоритите грешки. Освен това тези инструменти с изкуствен интелект могат да разрешават идентифицираните от тях грешки, което спестява безкрайно много време на екипите за осигуряване на качеството.
Тестване на потребителския интерфейс
Инструментите за генеративен изкуствен интелект могат да симулират редица поведения на потребителите и взаимодействия със софтуерни системи. Методите могат да дадат на екипите за разработка увереност, че техният интерфейс може да се справи с широк спектър от употреби между човек и компютър. Освен това генеративният изкуствен интелект може също така да анализира данни за потребителския интерфейс и топлинни карти и да прави предложения как да се подобри потребителският интерфейс и да се направи по-удобен за потребителите.
Бъдещето на вторите пилоти и генеративният AI
в Софтуерно тестване и RPA
Въпреки че днешното използване на копилоти и генеративен изкуствен интелект в автоматизацията на софтуера вече е вълнуващо, бъдещето е още по-обещаващо.
Бъдещето на копилота и генеративния изкуствен интелект зависи от подобренията, които могат да бъдат направени в продуктите. Неотдавнашно проучване от университета Purdue, озаглавено Кой отговаря по-добре? Задълбочен анализ на отговорите на ChatGPT и Stack Overflow на въпроси, свързани със софтуерното инженерство подчертава някои от ограниченията на моделите с генеративен изкуствен интелект.
Изследователите са предоставили на ChatGPT над 500 въпроса от Stack Overflow. Инструментът с изкуствен интелект отговори неточно на повече от половината от тях. Важно е да се отбележи, че един от най-съществените проблеми, които изследователите отбелязват, е, че изкуственият интелект се проваля най-често, защото не разбира правилно въпросите. Тази подробност подчертава значението на бързия инженеринг в рамките на генеративния ИИ.
Освен това тази година Google и Amazon проведоха независими тестове, за да проверят качеството на инструментите за генеративен изкуствен интелект в условията на интервю. И в двата случая инструментът е успял да отговори достатъчно добре на тестовите въпроси, за да получи позицията, както съобщава
CNBC
и
Business Inside
съответно.
Така че е ясно, че сме на етап, в който технологията има потенциал, но трябва да се изгладят някои дребни неща. Мащабът, в който тези инструменти се усъвършенстват през последните години, ни дава увереност, че ще се достигне необходимото ниво, а вероятно и по-рано от предвиденото.
Сега можем да разгледаме някои от областите, в които тези технологии ще повлияят на бъдещето на тестването на софтуерни разработки.
1. Хиперавтоматизация
Хиперавтоматизацията описва дестинация в еволюцията на предприятието, където всеки процес, който може да бъде автоматизиран, ще бъде автоматизиран. Това е цялостен подход към производителността, който е силно взаимосвързан.
По отношение на разработването на софтуер не е трудно да си представим централизирана система с надзор на изискванията към бизнес процесите. Системата ще разбира и идентифицира нуждите и ефективността и постоянно ще набелязва областите, които трябва да бъдат подобрени чрез технологиите.
С развитието на бизнеса тези централизирани системи ще използват генеративен изкуствен интелект, за да създават приложения, които автоматично ще разрешават затрудненията и неефективността или може би ще предават определени задачи за изпълнение на инженерите.
2. Проектиране на софтуерни архитектури
С достатъчно данни инструментите с изкуствен интелект могат да разберат най-добрите практики за софтуерна архитектура и да намерят начини за подобряване на тези проекти за постигане на максимална ефективност. Машинното обучение е свързано с откриването на модели и връзки, които са извън обхвата на човешкия ум.
Ако инструментите с изкуствен интелект имат достатъчно познания за различни приложения, можем да ги инструктираме да адаптират предишни архитектури към нови изисквания, което води до по-ефективни конструкции или дори до идеи, които иначе не биха били взети предвид.
3. Модернизация на наследени системи
Въпреки че нито един софтуер не е съвършен, има много инструменти, които все още вършат отлична работа и са толкова дълбоко вградени в инфраструктурата на компанията, че е трудно да бъдат заменени. Адаптирането на тези системи може да бъде трудна задача, особено ако са написани с помощта на излязъл от мода софтуерен код.
В бъдеще инструментите за генериращ изкуствен интелект ще могат да преобразуват този код на актуалния език, което ще позволи на екипите да запазят наследените си системи и в много случаи да ги подобрят.
4. Усъвършенстване на разработката с нисък код и без код
Едно от предизвикателствата при автоматизираното тестване на софтуер чрез инструменти за генеративен изкуствен интелект, което посочихме по-горе, е ситуацията, при която програмистът няма знания и опит, за да провери резултата.
Копилотите с изкуствен интелект ще помогнат да се допълнят инструментите с нисък код, като правят по-добри предложения, които водят до надеждни приложения. Усъвършенстваните инструменти за тестване ще позволят на човешките оператори да имат свободна творческа воля, като същевременно постоянно валидират работата си и отварят вратата за нетехнически специалисти да създават необходимите им приложения.
Предимства на генеративния изкуствен интелект при тестването на софтуер
Използването на генеративен изкуствен интелект за тестване на софтуер има много предимства, които го правят привлекателен вариант за екипите за разработка, които искат да работят по-бързо, но без да правят компромис с качеството.
1. Ускоряване на жизнения цикъл на разработката на софтуер
Разработчиците са подложени на постоянен натиск да работят дълги часове, за да гарантират, че софтуерът и новите функции ще бъдат пуснати на пазара своевременно. Макар че методологиите Agile/DevOps са осигурили по-голяма ефективност на разработката, все още има отделни етапи на разработката, които могат да се възползват от по-нататъшно рационализиране.
Инструментите за генериращ изкуствен интелект позволяват на екипите за тестване да се справят с различни етапи на SDLC – от генериране на прототипи до тестване на потребителския интерфейс.
2. Изчерпателно откриване на грешки
Едно от най-мощните приложения на изкуствения интелект при тестването на софтуер идва от способността на технологията да сравнява големи масиви от данни. Инструментите за ML могат да анализират огромни масиви от данни (включително код), за да изградят хранилище с информация и очаквани модели.
Когато разработчиците предават код, те могат да го сравнят с тези модели, които могат да откроят неочаквани сценарии, зависимости и уязвимости, което позволява да се подобри кодът по време на целия процес на разработка.
3. Подобрено покритие на тестовете
Инструментите за машинно обучение са създадени, за да анализират и разбират огромни масиви от данни. Когато се прилага към тестването на софтуер, тя позволява на екипите да увеличат обхвата на своето тестване на софтуер. Ползите не се свеждат само до премахване на човешкия труд от уравнението за пестене на пари; ИИ също така води до много по-всеобхватен тип тестване, което позволява по-добро откриване на грешки в сложен набор от сценарии.
4. Намалени разходи
В сравнение с наемането на екип от QA инженери и използването им за повтарящи се и отнемащи време задачи за тестване на софтуер, генеративният AI и RPA са по-бързи и по-рентабилни.
Тъй като светът на разработката на софтуер става все по-конкурентен, намирането на начини за предоставяне на качествени и трайни продукти в рамките на бюджета става все по-важно. Инструментите за генериращ изкуствен интелект и копилотите могат да намалят зависимостта от инженерите и да им позволят да извършват работа, ориентирана към стойността, и да доведат до по-малко раздути конструкции.
Означават ли инструментите на генеративния изкуствен интелект края
на човешките софтуерни инженери?
Въпреки очевидните си предимства, всеки инструмент за автоматизация може да предизвика у работниците тревога за бъдещето им. Това е нормална реакция, но скоростта и обхватът на генеративния изкуствен интелект означават, че опасенията са по-обширни от обикновено. Макар че тези инструменти могат да автоматизират много задачи, те не могат да изпълняват всички задачи, които софтуерните инженери изпълняват. Разбирането на възможностите на технологиите, както и на техните ограничения, е от съществено значение за инженерите и ръководителите.
Първото нещо, което хората трябва да запомнят, е, че инструментите за автоматизация на тестове, задвижвани от AI, съществуват на пазара от доста време. Въпреки това лесният за използване характер на генеративния AI го прави способен на допълнителна гъвкавост.
Едно от първите неща, които трябва да вземем предвид, е, че генеративният ИИ работи най-добре за резултати, които могат да бъдат проверени. Това е ключов момент. Характерът на обучението на магистрите по право означава, че те ще направят всичко възможно, за да ви дадат отговор, дори ако това понякога означава „халюциниране“ на факти, препратки и аргументи.
Ако имате достатъчно познания по кодиране, ще можете да прочетете и проверите всеки текст, който генерира AI, и да откриете потенциални грешки. Ако сте програмист, който използва генеративен изкуствен интелект, вместо да умее да програмира, няма да можете да откривате тези грешки.
Така че, погледнато от тази гледна точка, квалифицираните инженери все още ще бъдат важна част от екосистемата за разработване на софтуер. От тях все още ще се изисква да провеждат тестове както в контролен, така и в практически смисъл.
Друго ограничение на генеративния изкуствен интелект при тестването на софтуер е свързано с мобилното тестване. Например ChatGPT е добър вариант за тестване на потребителските интерфейси на уебсайтове. Той обаче няма достъп до различни мобилни устройства. При наличието на толкова много различни телефони и модели на пазара, той изостава от текущия софтуер за автоматизация на тестове като ZAPTEST. Този проблем също не е малка пречка. Повече от
половината от всички потребители на интернет се използват от мобилни устройства.
и този брой се увеличава всяка година.
Така че, въпреки че генериращият изкуствен интелект ще отнеме много задължения на разработчиците, той няма да направи тези специалисти излишни без значителни промени в инфраструктурата за тестване и възможността за проверка на резултатите.
Заключителни мисли
Софтуерното тестване и RPA са в процес на постоянно усъвършенстване. С появата на нови технологии и методи и двете дисциплини усвояват най-добрите практики, за да помогнат на екипите по осигуряване на качеството да извършват по-бързо и по-всеобхватно тестване на част от цената на ръчното тестване.
Въпреки че подобряването на обхвата на тестовете и намаляването на човешките грешки и разходи са някои от по-очевидните ползи от тестовете, задвижвани от изкуствен интелект, те също така помагат на екипите да възприемат подход на непрекъснато интегриране и разгръщане (CI/CD).
В условията на по-високи от всякога очаквания на потребителите и конкуренция, генеративният изкуствен интелект предлага на екипите начин за осигуряване на бързи и ефективни тестове, без да се прави компромис с качеството.