Softwarea probatzea eta hori egitea erraztea nire interesa izan da orain urte batzuk. Interes hori lehen zeuden frontend aplikazioetan zentratuago dago orain. Zehazkiago, reactjs aplikazioetarako. Hilabete batzuk dira bost eta hamar urteko erreakzio-kode batean murgiltzen ari naizela, ikuspegiak eta erronkak eskaintzen dizkidana.
Pertsonalki orain urte batzuk daramatzat reactjs kodea garatzen; Partekatu dudan kode irekiko lehen proiektuetako bat testable deitzen da. 2020an edo kaleratu zen, eta harrezkero, nire ikaskuntza bidearen zati bat reactjs-i eskaini diot.
Berriki, json-tool eta text-tool bezalako gauzen probagarritasunaren zatian zentratzen diren kode irekiko beste proiektu batzuetan lanean aritu naiz; bi aplikazioak kode irekikoak dira eta Snapcraft-en zabaltzen dira. Horiez gain, maiz egiten ditut esperimentuak reactjs-playground izeneko biltegi batean. Reactjs-en funtzioekin esperimentatzen dudan lekua da eta hari ikasteko orduak dedikatzen ditudan. Urte horietan kode hurbileko proiektuetan eta kode irekiko proiektuetan lortu dudan esperientziak oinarri bat eman zidan, komun eta abantaila batzuk identifikatzea ahalbidetzen didana.
Reactjs ereduarekin eta tresnarekin bat egiten duten garatzaileak konturatzen dira liburutegiak eskaintzen dituen eraikuntza-blokeak erraz ulertzen eta konposatzen direla. Osagai baten kontzeptu abstraktuena erabiltzaile-interfazeak azkar osatzeko erabil daiteke. Hala ere, akatsen iturri ere izan daiteke osagai baten hierarkiaren egiturari dagokionez. Sistemen deskonposizioa urte luzez aztertutako gaia da .
Softwarean abstrakzioaren batasunaren tamaina eztabaidagai ere izan da; metodoek eta klaseek lerro kopuru txiki bat izan behar dutela diote batzuek, eta beste batzuek, aldiz, pieza handiago eta ongi egituratua izatea nahiago dute. Tamaina edozein dela ere software-proiektu guztietan bezala, kodea irakurtzerakoan testuinguru gehiago ematen duen eta karga kognitiboan marruskadura gutxiago sortzen duen tamaina nahiago dut.
Kasualitatea edo ez, nire esperientziaren arabera, hau posible iruditzen zait negozio-testuinguruarekin batera lantzen ari naizen kode-zatiari mugak ondo ezarrita ditudanean. Oraindik ez dut horretarako zenbaki magikoa aurkitu, baina nire neurketa fitxategien artean egin behar dudan jauzi kopurua bihurtu da zer egin behar dudan ulertzeko.
Egin behar ditudan adina jauzi, orduan eta gehiago eduki behar dut buruan testuinguruari eta informazioari; hau gogorra bihurtzen da kodearen oinarria mantenduz. Osagai horiek deskonposatzea erronka bat da, hala ere, kontuan hartu behar da kodearen oinarria hobeto mantentzeko.
Garapen profesionalerako, estatu globala oinarrizko baldintza da; reactjs aplikazioetarako, ez da desberdina. Egoera globala erraz ikusten dute aplikazioaren erabiltzaileek. Zerbait erosten ari bazara eta produktua zure saskira gehitzen baduzu, gehitu dituzun elementu kopurua ikus dezakezu; hau da estatu globala.
reactjs aplikazioetan, garai batean oso erabilia den redux egoera kudeatzeko pakete globalak orain erabilera murriztu du aplikazioko mugen inguruko testuinguru txikiagoen alde. Hala ere, komunitateak iritzi desberdinak partekatu ditu estatu globalaren kudeaketarako redux erabili beharrari buruz; honek gaiari buruzko blog batzuk sortu zituen:
Komunitateak atzera bota arren, react-redux, hau da, reactjs osagaiekin lotzeko erabiltzen den liburutegia, bere adopzioa hazi egin da azken bost urteetan npm joeren arabera . 2025eko otsailaren 01ean, redux-erako npm-n erakusten diren deskargak 6.752.764 dira.
Horren alternatiba zein den galdetzen baduzu, erantzuna reactjs testuingurua eta kontsultekin amuak dira.
Redux paketearen menpe dauden aplikazioetarako, erronka bat da berez ihes egitea. Egoera globala aplikazioaren probagarritasuna murrizten duen menpekotasunetako bat da. Nire esperientziaren arabera, beharrezkoa den testuinguru globala askotan domeinuaren ezagutzaren konplexutasun handiagoarekin dator. Osagai jakin bat edo zure aplikazioaren zati bat probatu nahi baduzu ere, ezin izango duzu zati honek behar dituen mendekotasun globalak partekatu gabe.
Enpresetako aplikazioetarako reactj-ak hartzea, pieza hau idazteko momentuan, mantengarritasunerako erabaki zuzena izan da (Facebookek liburutegien lizentzia eredua aldatu zuenean izan zuen une larria izan arren). ReactJs-ek atzerako bateragarritasuna eskaintzen du jada erabiltzen ez diren APIentzat, eta horrek epe luzerako adopzioa egiten du abantail nagusietako bat.
Osagaiak ibiltzeko kontzeptu abstraktu gisa nahikoak ez balira bezala, testuinguruak ere reactjs-ek probetan ematen duen abantailetako bat dira. Gai honi buruz gehiago lantzen dut reactjs testuinguruaren probari eskainitako blog-argitalpen batean. reactjs testuinguruak eskaintzen duen kapsulatze-maila probak berritzeko eta reactjs kode-oinarrietan birfactorizazioa ahalbidetzeko onura nagusietako bat da.
Osagaien deskonposizioa eta negozio-logika erronka bat direnez, testuinguruak kodearen berregituraketa hobea ahalbidetzen duten tresnak dira. Testagarritasunaren zatian, hau ere abantaila bat da, erabilitako proba-bikoitzaren kopuru murriztua ahalbidetzen duen mekanismoa baita, beraz, kode probagarriagoa izateko.
Orain arte, zerrenda hori ikusita, probaren zatia argi geratu da iturburu-kodea nola egituratzen den eta aplikazioaren mugak nola antolatu diren. Hala ere, proba-kodea ekoizpen-kodearen araberakoa den heinean, proba-bikoitzak erabil daitezke esparrua mugatzen laguntzeko. Probak berritzeko pentsamendu-prozesua urrats sinple batzuekin osatzen dute.
2.1. Proba gainditu al da?
2.1.1 - Yes → Check if the feedback is correct 2.1.2 - No → Provide the dependency without questioning
Kontuan izan hau: Hemen deskribatzen den ikuspegia Michael Feathersek deskribatutako Karakterizazio proba gisa deskribatzen denaren antzekoa da.
Legacy Code liburuarekin eraginkortasunez lan egitea.
LLM-en etorrerak ere ikuspegiak eman ditzake lehen probak idazten eta kode-oinarriak inongo probarik gabe moldatzen diren bitartean. Estrategia honetako urrats bakoitza errepikakorra izan nahi da; posible da TDD estilo desberdinak konbinatzea ere. Proposatutako planteamendua ez da dena egiteari uztea eta kode-oinarriak dituen proba-kasu posible guztiak eta arazo posible guztiak berritzea, puzzle-jokoa da. Probatutako funtzionalitate bakoitza puzzlean sartzen den pieza bat da.
Ikuspegi bera proposatzen da birfaktorizaziorako. Garatzaileek kode zati bat etengabe birfaktorizatu ahal izan behar dute. Ez da bestelako proiektu bat, eta ez dago soilik hari dedikatzera zuzenduta. Bere helburu nagusia kodearen oinarria zena baino hobea egitea da. Iteratiboki. Badira zenbait alderdi ez duten kode-oinarrietan probak aldatzeko erabil daitezkeenak:
Planteamendu honen oinarrian ikasketa prozesua dago; kodearen oinarria ikasteko urrats guztiak hartzen dira kontuan.
Copilot aurreko atalean azaldutako lehen esplorazio proba automatizatzeko erabil daiteke; hiru arau jarraituz, mendekotasunak identifikatzen eta oinarri gisa erabiltzeko proba integralen multzoa idazten has daiteke.
Har dezagun Testable adibide gisa; reactjs-en duela bost urte baino gehiago idatzitako aplikazioa da eta probak egiteko entzima erabiltzen du. Gaur egungo estandarrentzat, hartu zuen liburutegia proba-liburutegiarekin batera vitest edo broma da. Proba kasuak probatzeko eta LLMak aprobetxatzeko, copilotoa erabil dezakegu astunak egiten laguntzeko.
Testable esperientzia gamifikatu batez osatuta dago, erronka ezberdinetan egoera, maila eta erabiltzaileen progresioa dituena. Hurrengo irudian deskribatzen den osagaia elkarrizketa-koadroak erakusteko eta esperientziaren historian aurrera egiteko erabiltzen den osagaia da. Copilot vscode-rako erabilita, interesatzen zaigun ekoizpen-kodearekin proba bat idazteko eskatu nion:
Galdera kargatu eta kodea aztertu ondoren, erantzuna ematen du.
Erantzunarekin batera, Copilot ohartu da oraindik ez dudala proba-liburutegirik erabiltzen eta hori egitea iradokitzen du, eta horren ostean, sortutako proba kasua erakusten da. Proba-kasua erakusten den moduan exekutatzen baduzu, proba ez da gainditzen eta gorri gisa markatzen du.
Puntu hau garrantzitsua da, konfigurazio osagarriak kontuan hartu behar direla erakusten duelako eta Copilotek ezin izan duela asmatu. Honako hauek dira:
Atal honetan lehenago deskribatutako fluxua hemen ere aplikatzen da. Iritzi-begizta orain arazo horiek konpontzen hastea eta probak egitea da TDD zikloa amaitu arte.