Izvor: ELEKS blog
Zahvaljujući obećanjima o potencijalnom ubrzanju razvojnih procesa, GitHubov alat Copilot privukao je velik interes programera. Ovaj članak donosi osvrt na GitHub Copilot i ocjenu njegova učinka na povećanje brzine razvoja softvera u praksi
Copilot je izazvao buru rasprava već od samog početka, pa su ga tako neki dočekali s entuzijazmom i optimizmom, dok su drugi skeptični i oprezni u pogledu njegova utjecaja na programiranje i ulogu programera u budućnosti. Utjecaj tog alata na razne aspekte razvoja softvera, od brzine do kvalitete koda i učenja, i dalje je u središtu raznih analiza i rasprava.
„Korisnici alata GitHub Copilot brže su rješavali zadatke, a preciznije 55 posto brže od programera koji se nisu služili tim alatom.“ – GitHub
Zaintrigirale su nas smjele tvrdnje o povećanju brzine zahvaljujući upotrebi Copilota pa smo se odlučili ispitati učinkovitost alata, osobito u domeni primjene umjetne inteligencije u razvoju softvera. U potrazi za istinom proveli smo vlastito ispitivanje primjene Copilota u stvarnim projektima. Kako bismo osigurali optimalne rezultate, odabrali smo sljedeći pristup:
- odabir raznovrsnih projekata – s obzirom na to da smo nastojali obuhvatiti širok spektar primjena u praksi, odabrali smo više projekata s raznolikim tehnološkim stogova (engl. stacks) i arhitekturama
- programeri s raznolikim iskustvom – u testiranju su sudjelovali programeri s raznim razinama iskustva i kompetencijama.
Glavni je cilj analize sustava GitHub Copilot bio ocijeniti njegov utjecaj na produktivnost u programiranju i utvrditi čimbenike koji utječu na alat, kao i najučinkovitije načine upotrebe alta. Testiranje je trajalo tri mjeseca kako bi se ublažilo sustavno odstupanje u rezultatima tijekom razdoblja u kojem su se programeri navikavali na novi program. Rezultati testiranja prikazani su u nastavku.
Analiza alata GitHub Copilot: utjecaj na brzinu programiranja
ELEKS-ov tim nedavno je proveo dubinsku analizu sustava GitHub Copilot radi ocjene njegova učinka na rješavanje programerskih zadataka i trajanje postupaka, kao i ocjene standarda kvalitete preporučenih rješenja. Rezultati analize nalaze se na sljedećoj poveznici: ELEKS-ova analiza sustava GitHub Copilot – ispitivanje potencijala umjetne inteligencije u razvoju softvera (na engleskom jeziku).
Poseban naglasak u istraživanju stavljen je na učinak primjene alata Copilot u različitim vrstama projekata. Ispitali smo i analizirali učinkovitost alata u monolitnim aplikacijama i mikroservisima, kao i u backend i frontend aplikacijama kako bismo utvrdili najučinkovitiji način primjene alata.
„Copilot omogućuje od 10 do 15 posto veću produktivnost kod pisanja novog koda.“ – ELEKS-ov tim
Općenito govoreći, uočili smo velike fluktuacije u pogledu utjecaja alata Copilot na povećanje brzine programiranja koje su ovisile o više čimbenika. Slijedi pregled glavnih čimbenika koji utječu na učinkovitost alata Copilot.
- Veličina postojeće baze koda
„Učinak Copilota na brzinu programiranja razlikuje se ovisno o vrsti projekta i strukturi koda: u monolitnim frontend aplikacijama postigli smo povećanje brzine od približno 20 do 25 posto; brzina je porasla za približno 10 do 15 posto u monolitnim backend aplikacijama, odnosno za približno 5 do 7 posto u backend mikroservisima. – Ihor Mysak, voditelj odjela za tehnologiju u ELEKS-u
Presuda? Copilot briljira na projektima s velikim bazama koda, gdje pruža podršku programerima s pomoću postojećih predložaka i rješenja. Međutim, nije toliko učinkovit u domeni mikroservisa jer oni barataju malim bazama koda. Stoga zaključujemo da Copilot nije učinkovito rješenje za projekte koji su u začetku i još nemaju dovoljnu količinu programerskih rješenja.
- Tehnološki stack
Kod testiranja Copilota na projektima s raznolikim tehnološkim stogovima pokazalo se da kvaliteta rješenja uvelike ovisi o popularnosti primijenjene tehnologije.
- Zabilježen je značajan porast produktivnosti kod aplikacija izrađenih u sustavu React, ali to nije bio slučaj s već zastarjelim i manje popularnim okvirom Zend.
- Projekti koji se temelje na tehnologiji .Net polučili su osrednje rezultate – performanse alata bile su bolje nego kod Zenda, ali slabije nego kod aplikacija temeljenih na Reactu, što upućuje na vezu s relativnom popularnošću i količinom dostupnih materijala u sustavu .Net.
Činjenica je da je Copilot treniran na javnim repozitorijima GitHuba, tako da je imao pristup tehnologijama koje su bile popularne među programerima, što vjerojatno objašnjava naše rezultate.
- Kvaliteta koda u postojećim bazama koda
Copilot je davao bolja rješenja ako su varijable i metode imale jasne i logične nazive, pa stoga zaključujemo da kvalitetni nazivi pomažu Copilotu da bolje razumije kontekst koda i tako pruži korisnije i točnije odgovore.
Nejasni ili dvoznačni nazivi varijabla i metoda pružaju manje informacija za Copilotovu analizu, a to negativno utječe na kvalitetu njegovih rješenja u postupku razvoja softvera. Zaključujemo da kodovi s dobrim nazivima ne samo da olakšavaju posao programerima već i poboljšavaju učinkovitost alata na bazi umjetne inteligencije.
- Vrsta zadatka koju programer obavlja
Copilot je učinkovit u određenim područjima, ali isto tako ima svoja ograničenja, pogotovo kad je riječ o pisanju koda koji primjenjuje novu poslovnu logiku.
„Copilot piše isključivo kod na temelju upita, ali ne i potpuna rješenja. Copilot je najučinkovitiji za rješavanje jasnih, šablonskih zadataka. Vrijeme koje se utroši na pisanje detaljnog opisa poslovne logike može biti dulje od vremena koje bi bilo potrebno za implementaciju poslovne logike bez Copilota.“ – Ihor Mysak, voditelj odjela za tehnologiju u ELEKS-u
Copilot je imao dobre rezultate na šablonskim zadacima, ali nije mogao držati korak kad je riječ o novim zamislima i kreativnom programiranju. Poruka je jasna: Copilot je pouzdan alat za rutinske zadatke, ali inovativni projekti zahtijevaju dašak ljudske kreativnosti.
Ključni savjeti za učinkovitu upotrebu Copilota:
- Preciznost je ključna: što je upit (prompt) precizniji i detaljniji, to su veći izgledi da će Copilot dati kvalitetna rješenja.
- Sve je u kontekstu: zatvorite nepovezane projekte dok upotrebljavate Copilot kako ga ne biste zbunili. Ako je u integriranom razvojnom okruženju (IDE) otvoreno više projekata, Copilot može pomiješati kontekste pa dati rješenja za projekt A na temelju koda iz projekta B.
- Komentari su bitni: ako dodate komentare prije izrade razreda ili metode, dobit ćete bolje rezultate kod automatskog dovršavanja zadataka.
- Datoteka u fokusu: Copilot je osjetljiv na otvorene kartice s projektnim datotekama pa je na temelju toga moguće proizvesti uži kontekst.
Iskorištavanje potencijala alata GitHub Copilot: prilagodljivost i neizravni učinak
Prilagodljivost okruženjima za konkretan projekt
Sposobnost alata Copilot da se prilagodi posebnostima projekta jedna je od njegovih najzanimljivijih karakteristika. Copilot će s vremenom „naučiti“ stil programiranja i značajke projekta pa će početi nuditi bolja rješenja.
Iako alat u početku može davati generička i neprecizna rješenja, točnost i relevantnosti rješenja raste što je alat dulje izložen projektu, odnosno na temelju interakcija unutar projekta. To posebno dolazi do izražaja na projektima koji imaju zadan stil koda i velike baze koda na kojima je moguće „istrenirati“ alat. Zahvaljujući svojoj prilagodljivosti, Copilot ne samo da povećava učinkovitost već i pomaže očuvati dosljednost koda unutar projekta.
Programeri ističu i da Copilot ima pozitivan utjecaj na složenost koda, odnosno uočen je pomak prema čitkijim i održivijim rješenjima, osobito među programerima koji su navikli pisati komplicirane i kompleksne strukture koda.
Bolje automatsko testiranje
Osim pisanja koda, Copilot isto tako predstavlja koristan alat za automatsko testiranje. Alat može dati predloške i preporuke testnih scenarija pa tako programerima štedi vrijeme i resurse.
„Copilot daje od 20 do 30 posto brže rezultate kod pisanja unit testova.“ – ELEKS-ov tim
Osobito je pažnje vrijedna sposobnost alata da generira jedinstvene testne slučajeve koji znaju promaći programerima. Softverski proizvod tako prolazi dublju analizu zahvaljujući većem opsegu testiranja.
Zanimljivo je da je kvaliteta Copilotovih testova izravno povezana s kvalitetom i strukturom ispitanog koda. Naši su programeri primijetili da jasni nazivi varijabli i metoda i jasnoća cjelokupne strukture koda značajno pridonose kvaliteti i preciznosti testova koje generira Copilot. Učinkovitost Copilota kod pisanja jediničnih testova stoga ovisi o samom alatu i kvaliteti koda koji se testira.
Zaključak je da je Copilot koristan alat u postupku pisanja jediničnih testova koji pridonosi povećanju ne samo brzine već i kvalitete konačnog proizvoda.
Neizravan učinak
GitHub Copilot povećava brzinu pisanja koda i podiže kvalitetu cjelokupnog rada programera. Na temelju povratnih informacija programera jasno je da im je Copilot omogućio da više pažnje posvete kreativnim i zahtjevnim zadacima umjesto da troše vrijeme na rutinske zadatke.
Copilot isto tako predstavlja učinkovito alternativno rješenje za pretraživanje interneta ili dokumentacije jer skraćuje vrijeme koje se troši na prebacivanje između različitih prozora i omogućuje programeru da se usredotoči na trenutačni zadatak. To je korisna mogućnost kad treba brzo pronaći odgovor na pitanje bez odvraćanja pažnje s glavnog zadatka.
„Copilot pozitivno utječe na komfor i zadovoljstvo programera. Pojednostavljuje postupak traženja odgovora na razna pitanja i uskače kad nemate priliku potražiti savjet iskusnijeg kolege ili pronaći rješenje na internetu.“ – Olena Hladych, voditeljica odjela za osiguranje kvalitete u ELEKS-u
Zanimljivo je da smo pronašli vezu između mekih vještina programera i razine zadovoljstva alatom Copilot; programeri koji nisu imali razvijene komunikacijske vještine obično su izrazili manju razinu zadovoljstva alatom, vjerojatno jer im je bilo teže formulirati precizne upite.
Zaključak
GitHub Copilot moćan je alat koji značajno povećava produktivnost programera u određenim scenarijima, osobito kod postupaka sastavljanja jediničnih testova i navigacije velikim bazama kodova koje se temelje na popularnim tehnologijama. Međutim, učinkovitost mu opada na zadacima koji zahtijevaju inovativne pristupe ili izradu novih koncepata.
Kad je riječ o tvrdnji da alat osigurava porast produktivnosti od 55 posto, stvarni rezultati bili su nešto gori. Produktivnost timova porasla je u prosjeku za 10 do 15 posto na zadacima koji su podrazumijevali pisanje novog koda. Ipak, važno je naglasiti razne prednosti upotrebe alata. Programeri su općenito ocijenili da je Copilot vrijedan alat koji uvelike povećava brzinu programiranja te je razina zadovoljstva programera alatom bila značajna.
Timovima i programerima preporučujemo da razmisle o upotrebi Copilota, ali da pritom imaju na umu njegova potencijalna ograničenja. Za učinkovitu upotrebu Copilota potrebno je razumjeti da je riječ o pomoćnom alatu, a ne zamjeni za ljudski intelekt i kreativnost. Copilot može unaprijediti produktivnost i zadovoljstvo radom, skratiti vrijeme koje se troši na rutinske zadatke u razvoju softvera, a programerima omogućiti da se usredotoče na kompleksnije i kreativnije zadatke.