Ontwikkeling is een van de gebieden die het meest wordt beïnvloed door de vooruitgang in AI. Het fenomeen heeft niet gewacht op ChatGPT. Hoe kan AI het ontwerpen, programmeren en optimaliseren van software en websites vergemakkelijken? Wat zijn de beste AI-code assistenten? Wat zijn hun beperkingen?
"AI zal binnen 5 jaar 80 % aan code schrijven".
Thomas Dohmke, CEO van GitHub
"AI zal binnen 5 jaar 80 % van de code schrijven" was de profetische en licht provocerende uitspraak die Thomas Dohmke, de baas van GitHub, het samenwerkings- en beheerplatform voor broncode dat door meer dan 100 miljoen ontwikkelaars wordt gebruikt, in 2022 deed.
Generatieve AI's zoals ChatGPT, Copilot en Gemini (voorheen Google Bard) hebben de democratisering van kunstmatige intelligentie gemarkeerd. Gebaseerd op grote taalmodellen (LLM)Deze AI's worden niet alleen gebruikt om tekst of afbeeldingen te maken. Ze kunnen ook code genereren, er commentaar op geven, optimalisaties voorstellen of bugs opsporen, waardoor ontwikkelaars kostbare tijd besparen.
Gelanceerd in 2021, GitHub-copilootde populairste code-genererende AI, telt al in oktober 2023 meer dan een miljoen betalende gebruikers in meer dan 37.000 organisaties !
Meer is er niet nodig om van 2024 het jaar te maken van AI's die zich specialiseren in code. Reden te meer om het debat over de AI-trend nieuw leven in te blazen. low-code/geen-code over het verdwijnen van het beroep van ontwikkelaar, of in ieder geval de onvermijdelijke evolutie ervan.
Het duurde slechts 16 minuten om dit spel te maken!
Code, de ideale gegevens om AI te voeden
Code is een van de favoriete gebieden van AI. Lang voor de komst van ChatGPT in november 2022. Deze omvatten de IBM Watson Code assistent in 2015, DeepCode in 2016 om beveiligingslekken in een programma te vinden of Microsoft IntelliCode in 2017 om de semi-automatische code-invoer van IntelliSense te verbeteren die tien jaar eerder verscheen in Visual Studio.
Het zal geen verrassing zijn dat deze AI's zijn gebaseerd op grote taalmodellen (LLM's) die zijn getraind op grote tekstgebaseerde datasets. En om de algoritmen voor machinaal leren te voeden, hebben deze AI's gestructureerde gegevens nodig. Code is de ideale kandidaat: in tekstformaat, gestructureerd, in grote hoeveelheden beschikbaar, open source, in enorme repositories zoals GitHub of SourceForge.
En dus, GitHub Copilot is getraind op de 54 miljoen repositories van GitHub, inclusief een dataset van 159 GB aan Python-code.
Inhoud
1. De belangrijkste toepassingen van AI-code :
- Automatische codegeneratie
- Bug opsporen en corrigeren
- Code optimaliseren en herschrijven
- Codeanalyse en uitleg
- Codedocumentatie
- Kwetsbaarheden in de beveiliging opsporen
- Geautomatiseerde tests
- Converteren van de ene taal naar de andere
- Een nieuwe taal leren
2. De grenzen van code-AI's
3. Lijst van de beste AI voor codegeneratie
Wat is het doel van code-AI's?
Het gebruik van kunstmatige intelligentie is daarom voor veel ontwikkelaars gemeengoed geworden. Vooral omdat deze tools gemakkelijk verkrijgbaar zijn. Ze zijn te vinden in de vorm vanuitbreidingen in de meest gebruikte ontwikkelomgevingen (IDE's)zoals Visual Studio Code, Eclipse of de gespecialiseerde software van JetBrains (IntelliJ, PhpStorm, PyCharm, WebStorm...).
Op dit moment zijn er enkele honderden hulpmiddelen voor ontwikkeling, voor een breed scala aan toepassingen. En het aantal groeit voortdurend. Wekelijks verschijnen er nieuwe AI-tools die tegemoetkomen aan de vraag van ontwikkelaars naar efficiëntere en beter presterende oplossingen.
De AI kan worden gebruikt voor een breed scala aan ontwikkelingsdoeleinden :
Automatische codegeneratie
Dit is veruit de functie die het meest gebruikt wordt door ontwikkelaars. De AI maakt code op basis van een verzoek (een prompt), een beschrijving in natuurlijke taal van wat je wilt, of op basis van al ingevoerde code door deze aan te vullen. Deze laatste autocompletion-functie is een verbetering ten opzichte van de semi-automatische invoersystemen die al lang in IDE's bestaan. Maar in plaats van gewoon het volgende woord te raden, zal de AI een of meer regels code genereren op basis van waarschijnlijkheidsstatistieken.
De AI doet alleen suggesties. De ontwikkelaar kan zijn verzoek iteratief verfijnen om het gewenste resultaat te verkrijgen.
De tijdsbesparing is enorm. Ontwikkelaars kunnen sneller coderen (55 % sneller volgens de statistieken van GitHub), nauwkeuriger en met een beter begrip van de code.
Bug opsporen en corrigeren
Code AI wordt ook gebruikt om code te debuggen, te valideren aan de hand van de syntaxis van een bepaalde taal en om fouten op te sporen die moeilijk te vinden zijn in complexe code. De AI analyseert de code die aan hem wordt voorgelegd en detecteert eventuele fouten, zoals :
- syntaxisfouten Er ontbreekt een puntkomma aan het einde van een instructie in Java of JavaScript, er ontbreekt een afsluitende tag in PHP of er staan te veel accolades in een CSS...
- uitvoeringsfouten : gebruik van een niet-geïnitialiseerde of verwijderde variabele (NullPointer), poging tot toegang tot een object dat niet langer toegankelijk is in het geheugen (PointerException), aanroepstapel te groot (StackOverflow)...
- logische fouten deling door nul, rekenkundige overloop, niet-bestaande functieaanroepen, enz.
- invoer-uitvoerfouten fouten: fouten bij het lezen van of schrijven naar een opslagmedium, pogingen om een bestand te openen dat niet bestaat, enz.
- opmaakfouten onverwacht formaat door een tekenreeks, onjuist gegevenstype, enz.
Code optimaliseren en herschrijven
AI's kunnen de kwaliteit, uitvoeringssnelheid en leesbaarheid van code verbeteren. Ze suggereren wijzigingen die moeten worden aangebracht: refactoring code (structuur vereenvoudigen, code meer modulair en herbruikbaar maken, SOLID principes toepassen, enz.), overbodige lussen verminderen, taken parallelliseren, gegevensstructuren en input-output optimaliseren, enz.
AI's snuffelen code ruiktDit zijn slechte software-ontwerppraktijken die het moeilijker kunnen maken om code te debuggen en die het risico op bugs vergroten. Dubbele code, niet-expliciete variabelenamen of overmatige koppeling (klassen en modules die te veel van elkaar afhankelijk zijn) worden in enkele seconden opgespoord.
Bovendien zijn deAI formatteert code volgens de conventies en best practices van een bepaalde taal terwijl er commentaar en documentatie wordt toegevoegd. Dit maakt de code makkelijker te lezen, te begrijpen en te onderhouden, waardoor ontwikkelaars snel weer aan het project kunnen werken, zelfs degenen die er niet bij betrokken zijn geweest.
Codeanalyse en uitleg
Om een code beter te begrijpen, kan een ontwikkelaar een AI vragen stellen in natuurlijke taal via een chatinterface. Sommige AI's kunnen ook codevisualisaties genereren om ontwikkelaars te helpen de structuur van de code, de logica en de relaties tussen de verschillende onderdelen ervan beter te begrijpen.
Het massale gebruik van AI om code uit te leggen heeft geleid tot een daling van het publiek van Stack Overflow, het beroemde vraag-en-antwoord forum dat door miljoenen ontwikkelaars wordt geraadpleegd, waardoor in oktober 2023 28 %'s uit het personeel zijn verwijderd.
Codedocumentatie
Het voltooien van de code betekent ook het schrijven van de documentatie, een vervelende en vaak verwaarloosde fase. Maar al te vaak worden ontwikkelaars onder druk gezet om steeds sneller werkende code af te leveren, waardoor documentatie op de achtergrond blijft.
Kunstmatige intelligentie kan dat allemaal veranderen. Door de code te analyseren kan het onmiddellijk volledige, geformatteerde documentatie produceren, die helderheid en leesbaarheid garandeert. Dit revolutionaire proces vermindert de technische schuld aanzienlijk en stelt ontwikkelaars in staat zich te concentreren op hun kerntaak: code maken.
Kwetsbaarheden in de beveiliging opsporen
Je zou kunnen denken dat AI net zo nuttig is voor het corrigeren van code als voor het opsporen van beveiligingslekken. Dat is ook zo. AI's zoals Checkmarx CheckAI, BurpGPT, DeepCode, Codetie, GitHub-copiloot detecteren kwetsbaarheden en doen aanbevelingen om ze te sluiten, soms met slechts één klik. Ze detecteren kwetsbaarheden bekende, antipatroon beveiligingsmiddelen zoals SQL-injecties of XSS. Sommige AI's kunnen de gegevensstroom in de broncode analyseren om potentiële in- en uitgangen voor aanvallen te identificeren.
We moeten echter waakzaam blijven en niet alleen op AI vertrouwen. Handmatige statische en dynamische tests blijven noodzakelijk.
Geautomatiseerde testgeneratie
Dankzij zijn mogelijkheden is AI in staat om automatische tests uitvoeren. Dit brengt een aantal voordelen met zich mee, waaronder tijdsbesparing, verbeterde codedekking (het identificeren van delen van code die niet handmatig zijn getest), betere bugdetectie en een verlaging van de kosten die gepaard gaan met handmatig testen.
Tools voor het genereren van tests zijn onder andere DeepCode die gebruikmaakt vanmachinaal leren om unit- en integratietesten te genereren.
Deze technologie is echter nog niet perfect. Het bespaart tijd, maar moet nog steeds worden aangevuld met handmatig testen, vooral om de niet-functionele aspecten van een applicatie of site te testen, zoals bruikbaarheid of prestaties. AI kan dus nog niet worden gezien als vervanging voor handmatig testen.
Converteren van de ene taal naar de andere
De meeste code AI's beheersen verschillende programmeertalen en kunnen code vertalen van de ene taal naar de andere. Dit is geen gemakkelijke taak, omdat het omzetten van de ene taal naar de andere syntaxis (bijvoorbeeld van blokstructuur naar inspringen), logica (paradigma's en controlestructuren veranderen), het vinden van gelijkwaardige bibliotheken in de doeltaal, het omzetten van commentaar en documentatie en het optimaliseren van de code voor de doeltaal met zich meebrengt.
Je kunt dus in een paar seconden van C++ naar Python gaan en omgekeerd, of van Java naar Python. Automatische codeconversie door AI's versnelt het softwareontwikkelingsproces op verschillende platforms en voorkomt handmatige vertaalfouten. Naast de onderstaande code-AI's zijn er gespecialiseerde AI's zoals DeepCode, Polyglot, Code Trans en AI-codevertaler.
Een nieuwe taal leren
Code AI's ondersteunen een groot aantal programmeertalen, waardoor de barrières tussen verschillende ontwikkelaars worden doorbroken. Je kunt dus gemakkelijk een nieuwe taal leren door de AI te vragen deze om te zetten vanuit een taal die je al kent. Zoals we hierboven zagen, kan de AI ook bestaande code uitleggen of zichzelf testen door hem te vragen je fouten te corrigeren. De kers op de taart is dat AI's zoals ChatGPT of Gemini (voorheen Bard) in staat zijn om code-oefeningen en MCQ's te maken om je nieuwe kennis te testen.
GitHub Copilot kan bijvoorbeeld code begrijpen en genereren in de belangrijkste talen en frameworks, waaronder :
- Gecompileerde talen C, C++, C#, Go, Java...
- Scripttalen Bash, JavaScript, Powershell, Python, Ruby, TypeScript...
- Opmaaktalen: CSS, HTML, XML, JSON, YAML...
- Databasetalen SQL, MySQL, PostgreSQL...
- Specifieke programmeertalen SQL, R...
- Kaders Django (Python), Angular en React (JavaScript), ASP.NET (C#), Spring Boot (Java), Laravel (PHP), Qt (C++)...
Natuurlijk kan kunstmatige intelligentie niet tippen aan de zeer gespecialiseerde en interactieve trainingen die we bij ORSYS aanbieden. Onze 246 trainingen in softwareontwikkeling en web worden gegeven door ervaren professionals die hun cursussen afstemmen op jouw behoeften. AI vervangt menselijk contact niet.
De grenzen van codegeneratie AI
AI zorgt in elke fase voor een revolutie in het ontwikkelingsproces. Ze hebben echter nog steeds te maken met tal van beperkingen en restricties waar rekening mee moet worden gehouden voordat ze worden gebruikt.
Een gestandaardiseerde code
Afkomstig van open source code repositories, leidt de code die door AI's wordt gegenereerd tot gestandaardiseerde code, herhaalde code die soms de kwaliteit verlaagt en de algehele code verarmt. GitClear, een adviesbureau, heeft 153 miljoen regels gewijzigde code geanalyseerd die tussen januari 2020 en december 2023 zijn geschreven. Het concludeerde dat
“ coderotatie - het percentage regels dat minder dan twee weken na creatie wordt herzien of bijgewerkt - het percentage regels dat minder dan twee weken na creatie wordt herzien of bijgewerkt zal naar verwachting in 2024 verdubbeld zijn ten opzichte van de basiswaarde in 2021, vóór de komst van AI. "
Volgens GitClear zal de toename in copy-and-paste code veroorzaakt door AI de technische schuld van bedrijven de komende jaren waarschijnlijk verergeren.
Ongelijke kwaliteit in talen
Code AI's zijn zoals alle AI's: de kwaliteit van hun respons hangt nauw samen met de kwantiteit en kwaliteit van de gegevens die worden gebruikt om ze te trainen. Het resultaat is, hoe populairder een programmeertaal is in openbare code-repositories zoals GitHub, GitLab of Bitbucket, hoe relevanter de AI-suggesties zullen zijn.
JavaScript is bijvoorbeeld erg aanwezig in repositories. AI-suggesties voor JavaScript zullen daarom zeer relevant zijn. Omgekeerd zullen talen die bekend zijn, maar relatief minder aanwezig in codeopslagplaatsen, zoals Julia, SAP's ABAP of MATLAB, slecht worden ondersteund.
Programmeervooroordelen
Openbare repositories die dienen als trainingsdata voor AI's kunnen code bevatten die slecht geschreven is of gericht is op een bepaald resultaat. Dit kan invloed hebben op suggesties voor AI-code, zoals het genereren van discriminerende code.
AI begrijpt complexe code niet
Op dit moment zijn codegeneratie-AI's niet in staat om een project als geheel te behandelen.
AI's zijn ideaal voor het genereren van korte code, codefragmenten zoals snippets of functies.. Omgekeerd zijn hun suggesties minder relevant voor lange code. Op dit moment betekent werken aan een complex project het opsplitsen ervan, zodat de AI het deel voor deel kan analyseren. De AI kan echter geen rekening houden met het hele plaatje of de hele context van het project integreren (budget, tijd, doelplatform, vaardigheden van ontwikkelaars, beschikbare tools, behoeften van belanghebbenden, enz.)
AI's die lijden aan hallucinaties
Bekend bij ChatGPT-gebruikers zijn hallucinaties antwoorden die door LLM's worden verzonnen wanneer ze het juiste antwoord op een vraag niet kunnen vinden en die als een vaststaand feit worden gepresenteerd. Toegepast op ontwikkeling kan dit leiden tot valse, onveilige code die de tijd van de ontwikkelaar verspilt.
Auteursrecht en vertrouwelijkheid van gegevens
Als AI's op grote schaal gebruik maken van openbare gegevens, is er ongetwijfeld code die onder het auteursrecht valt, met het risico op plagiaat. Bovendien is het belangrijk om te onthouden dat wanneer je een AI gebruikt, je deze traint. Als je code schrijft waarop eigendomsrechten rusten of die onderhevig is aan geheimhoudingsovereenkomsten, kun je het beleid van je bedrijf schenden. Sommige uitgevers, zoals Tabnine en GitHub voor Copilot Business, slaan je code niet op en trainen hun AI alleen op open source repositories waarvan de licentie dit toestaat.
Mogelijke beveiligingsfouten
Vertrouw niet te veel op AI voor de beveiliging van je gegevens. De code die door AI's wordt gegenereerd, wordt niet getest of gevalideerd door mensen. Bovendien hangt de kwaliteit van de code, zoals we hebben gezien, af van de kwaliteit van de gegevens waarop de code is getraind. Als de gegevens gecompromitteerd zijn of fouten bevatten, kan de gegenereerde code ook gecompromitteerd zijn.
Bovendien kan de code die door AI's wordt gegenereerd moeilijk te controleren en te begrijpen zijn, waardoor het moeilijk is om beveiligingslekken te detecteren. Anders kunnen alleen AI's die gespecialiseerd zijn in cyberbeveiliging deze code analyseren!
Ethische kwesties
Programma's waarbij mensen betrokken zijn (gezondheid, autonoom rijden, selectie van kandidaten, enz.) kunnen ethische kwesties opwerpen waar AI's niet mee om kunnen gaan of die kunnen leiden tot bevooroordeelde resultaten. Zou jij het leven van patiënten of gebruikers van autonome voertuigen toevertrouwen aan een AI?
De toekomst van ontwikkeling wordt geschreven door AI
Hoewel de tools nog voor verbetering vatbaar zijn, boekt AI gestage vooruitgang en levert het al veel diensten aan ontwikkelaars, die zich kunnen concentreren op andere samenwerkingstaken met een hogere toegevoegde waarde. Ze zullen bijvoorbeeld meer tijd hebben om de vele projectvergaderingen bij te wonen (coördinatie, demo's, monitoring, validatie, retrospectief, enzovoort), waar AI hen helaas nog niet kan vervangen!
De belangrijkste code generatie AI's
GitHub-copiloot
De bekendste code-assistent. Niet te verwarren met Copilot, de conversationele AI in Windows 11, Bing en Microsoft 365. GitHub Copilot werd in 2021 ontwikkeld door GitHub, een dochteronderneming van Microsoft, in samenwerking met OpenAI. Het belangrijkste voordeel is dat het als extensie kan worden geïntegreerd in grote IDE's zoals Visual Studio Code, Visual Studio, Vim, Neovim, JetBrains IDE's en Azure Data Studio.
Prijs: Vanaf 10 $/maand of 100 $ per jaar
Tabnine
Deze open source tool wordt gebruikt door 3 miljoen ontwikkelaars en werkt met GPT-modellen om code te voorspellen en te suggereren terwijl de ontwikkelaar schrijft. De tool biedt ook snippets voor veelvoorkomende taken en een chatfunctie. Tabnine integreert met de belangrijkste IDE's: Visual Studio, Eclipse, Android Studio en JetBrains IDE's.
Prijs: vanaf 12 $/maand (gratis beperkte versie)
Amazon CodeWhisperer
CodeWhisperer is ontwikkeld door Amazon en schrijft zowel fragmenten als volledige functies vanuit je verzoek of bestaande code. Het kan worden gebruikt op de opdrachtregel of via een IDE (VS Code, Visual Studio, JetBrains IDE, AWS Cloud9, enz.). De Amazon Q conversatieassistent geeft persoonlijk advies.
Prijs : vanaf 20 $/maand (gratis voor persoonlijk gebruik)
Google Gemini (voorheen Bard)
De nieuwe versie van Google's AI heet Gemini en verbetert de efficiëntie, vooral bij ontwikkeling. Bard genereert code in zo'n twintig talen, kan code uitleggen, debuggen en becommentariëren en functies schrijven voor Google Sheets.
Prijs: gratis (Voor nu)
ChatGPT
De beroemde generatieve AI is niet specifiek ontworpen voor programmeren, maar het kan code in de belangrijkste talen begrijpen en genereren. ChatGPT heeft een aantal beperkingen: het maakt geen complete programma's, integreert niet met IDE's en is niet erg effectief in het detecteren van beveiligingslekken.
Prijs : vanaf 20 $/maand (gratis beperkte versie GPT-3.5 )