ABONAMENTE VIDEO REDACȚIA
RO
EN
NOU
Numărul 161
Numărul 160 Numărul 159 Numărul 158 Numărul 157 Numărul 156 Numărul 155 Numărul 154 Numărul 153 Numărul 152 Numărul 151 Numărul 150 Numărul 149 Numărul 148 Numărul 147 Numărul 146 Numărul 145 Numărul 144 Numărul 143 Numărul 142 Numărul 141 Numărul 140 Numărul 139 Numărul 138 Numărul 137 Numărul 136 Numărul 135 Numărul 134 Numărul 133 Numărul 132 Numărul 131 Numărul 130 Numărul 129 Numărul 128 Numărul 127 Numărul 126 Numărul 125 Numărul 124 Numărul 123 Numărul 122 Numărul 121 Numărul 120 Numărul 119 Numărul 118 Numărul 117 Numărul 116 Numărul 115 Numărul 114 Numărul 113 Numărul 112 Numărul 111 Numărul 110 Numărul 109 Numărul 108 Numărul 107 Numărul 106 Numărul 105 Numărul 104 Numărul 103 Numărul 102 Numărul 101 Numărul 100 Numărul 99 Numărul 98 Numărul 97 Numărul 96 Numărul 95 Numărul 94 Numărul 93 Numărul 92 Numărul 91 Numărul 90 Numărul 89 Numărul 88 Numărul 87 Numărul 86 Numărul 85 Numărul 84 Numărul 83 Numărul 82 Numărul 81 Numărul 80 Numărul 79 Numărul 78 Numărul 77 Numărul 76 Numărul 75 Numărul 74 Numărul 73 Numărul 72 Numărul 71 Numărul 70 Numărul 69 Numărul 68 Numărul 67 Numărul 66 Numărul 65 Numărul 64 Numărul 63 Numărul 62 Numărul 61 Numărul 60 Numărul 59 Numărul 58 Numărul 57 Numărul 56 Numărul 55 Numărul 54 Numărul 53 Numărul 52 Numărul 51 Numărul 50 Numărul 49 Numărul 48 Numărul 47 Numărul 46 Numărul 45 Numărul 44 Numărul 43 Numărul 42 Numărul 41 Numărul 40 Numărul 39 Numărul 38 Numărul 37 Numărul 36 Numărul 35 Numărul 34 Numărul 33 Numărul 32 Numărul 31 Numărul 30 Numărul 29 Numărul 28 Numărul 27 Numărul 26 Numărul 25 Numărul 24 Numărul 23 Numărul 22 Numărul 21 Numărul 20 Numărul 19 Numărul 18 Numărul 17 Numărul 16 Numărul 15 Numărul 14 Numărul 13 Numărul 12 Numărul 11 Numărul 10 Numărul 9 Numărul 8 Numărul 7 Numărul 6 Numărul 5 Numărul 4 Numărul 3 Numărul 2 Numărul 1
×
▼ LISTĂ EDIȚII ▼
Numărul 161
Abonamente

Generare de cod în proiectele mobile

Csaba Fulop
Senior Software Engineer @ Cognizant



David Dumitru
Senior Software Engineer @ Cognizant



PROGRAMARE

Pe măsură ce instrumentele bazate pe inteligență artificială devin tot mai prezente în procesele de dezvoltare software, calitatea codului generat automat devine un subiect esențial. În acest articol explorăm metodele prin care am îmbunătățit acest cod, făcându-l mai robust, mai clar și mai ușor de integrat. Ne vom baza pe experiența practică și vom evidenția punctele forte ale acestor instrumente, limitările lor, dar și strategiile pentru a le reduce efectul asupra codului generat. Vom pune în balanță furnizarea de context în mod exhaustiv cu împărțirea unei probleme în părți mai mici, scoțând în evidență efectul asupra nivelului de încredere al echipei în aceste instrumente.

Context

Experiența noastră cu aceste instrumente a început cu câteva explorări mai timide, ulterior accelerate de către cerințele proiectului de a le folosi într-un mod responsabil și aplicând standardul ISO42K. Bazat pe experiența pe care am dobândit-o, am ajuns să creăm pentru echipele noastre un set de bune practici care pun accent pe valorificarea prompt engineering (ingineria prompturilor) și context engineering (ingineria contextului). Contextul proiectului ne-a oferit oportunitatea de a avea acces la mai multe instrumente de IA ceea ce ne-a ajutat să calibrăm bunele practici. Am folosit atât instrumente care se integrează în mediile de dezvoltare (IDE), cât și din acelea care sunt disponibile prin interfețe web.

Prezentarea generală a bunelor practici

Începem prin a enunța câteva concepte cheie care stau la baza bunelor practici:

Abordarea noastră inițială s-a bazat pe comportamentul implicit al instrumentului IA, care a produs rezultate inconsistente — cod util, dar și mult „zgomot” (informații irelevante). Pentru că am dorit să avem rezultate cât mai bune folosind acest instrumente, am mutat accentul pe generarea de teste unitare (Unit Tests). Aceasta s-a dovedit a fi o abordare cu mult mai succes atunci când a fost combinată cu context engineering: prin furnizarea de instrucțiuni structurate, instrumentul a generat teste fiabile și aliniate la proiect, pe care echipa le-a adoptat cu încredere.

Contextul este dat de următoarele:

Bazându-ne pe acest succes, am formalizat procesul prin introducerea unor fișiere de instrucțiuni partajate (shared) în repository-ul proiectului.

Acestea includeau:

Am observat că acest „pachet de context” poate servi și ca material de onboarding pentru noii dezvoltatori (software engineers) și a îmbunătățit calitatea și consecvența rezultatelor oferite de instrumentele IA. Echipa a devenit mai încrezătoare în utilizarea instrumentelor IA integrându-le în fluxurile de lucru zilnice, în loc să-l trateze ca pe un add-on experimental.

Pe parcursul integrării acestor fișiere de context am identificat câteva provocări:

Folosind aceste bune practici am reușit sa îmbunătățim calitatea codului generat, codul devenind aliniat cu cerințele proiectului. Totuși, am observat în continuare inconsistențe între codul generat și specificații. Concluzia la care am ajuns după mai multe iterații pe fișierele de instrucțiuni a fost că o fereastră de context largă conduce la rezultate mai puțin deterministe. Din cercetările noastre, am dedus că un context mai larg care include toate specificațiile proiectului diluează anumite părți mai importante din context pentru problema curentă. Pentru a ajunge la rezultate mai bune, am început să împărțim taskurile mai mari în subtaskuri și să folosim instrucțiuni specifice pentru fiecare subtask. Scopul nostru a fost de a reduce ambiguitatea și de a crește în importanță din perspectiva instrumentului IA a anumitor părți din context. O analogie pe care o facem cu instrumentul IA în acest caz este aceea a unui programator care nu cunoaște proiectul. Acest programator va avea nevoie de informațiile contextuale relevante implementării subtaskului fără a fi nevoit să citească toată documentația.

Un exemplu concret ar fi implementarea unei interfețe grafice pe baza unui design de tip Figma. La prima încercare, am putea scrie un prompt care să ceară instrumentului IA să genereze întreaga interfață. Această abordare va necesita un context foarte larg pentru a putea genera un astfel de cod și are șanse foarte bune să nu fim mulțumiți de rezultat. O abordare care ne face sa fim mai preciși ar fi să împărțim implementarea în mai mulți pași. Primii pași ar putea fi să cerem instrumentului IA să genereze cod doar pentru părți din interfața grafică, descriind și unde să se limiteze și oferindu-i doar contextul specificațiilor generale despre cum să implementeze interfețe grafice conform proiectului. Următorii pași ar putea fi să implementeze conform arhitecturii proiectului interfața stratului de prezentare (presentation layer) pentru interfața grafică. În final, să cerem să genereze cod pentru fiecare acțiune a utilizatorului de pe interfața grafică.

Reducând contextul ajutăm instrumentul IA să se axeze pe mai puține cerințe. Codul generat astfel va fi mai aproape de specificații pentru ca cerințele și instrucțiunile nu sunt ignorate, nu sunt diluate. Reducând halucinațiile crește încrederea echipei în a folosi instrumentele IA și crește viteza de lucru.

Un alt avantaj al modului acesta de lucru este că procesul de revizuire al codului generat este mai ușor, codul fiind mai scurt. De altfel, acesta poate fi un mod de a măsura dacă un subtask ar trebui împărțit. Dacă acel cod generat este prea lung, probabil ar trebui regenerat cu pași mai mici. Un cod care e greu de revizuit poate ascunde multe cazuri subtile care pot cauza probleme.

Concluzie

Instrumentele IA pot deveni un partener puternic în dezvoltarea aplicațiilor software, atunci când este utilizat împreună cu o abordare disciplinată a prompt și context engineering. Câștigurile sale de productivitate depind mai puțin de capacitățile IA și mai mult de claritatea inputurilor (datelor de intrare) furnizate. Echipele care investesc în context structurat, mențin o documentație vie și adoptă bune practici iterative, ajungând să transforme un instrument IA dintr-un simplu instrument de sugestii de cod într-un coechipier de încredere care accelerează livrarea, îmbunătățește calitatea și face din IA o parte de încredere a procesului lor de inginerie.

LANSAREA NUMĂRULUI 161

Smarter AI Automations

Miercuri, 26 Noiembrie, ora 18:00

sediul Cognizant

Facebook Meetup StreamEvent YouTube

NUMĂRUL 159 - Industria Automotive

Sponsori

  • BT Code Crafters
  • Bosch
  • Betfair
  • MHP
  • BoatyardX
  • .msg systems
  • P3 group
  • Ing Hubs
  • Cognizant Softvision
  • GlobalLogic
  • BMW TechWorks Romania