Python kodearen 4 milioi lerro mota egiaztatzeko bidea. 3. zatia

Dropbox-ek Python kodearako mota egiaztatzeko sistema ezartzerakoan egindako bideari buruzko materialaren itzulpenaren hirugarren zatia aurkezten dizuegu.

Python kodearen 4 milioi lerro mota egiaztatzeko bidea. 3. zatia

β†’ Aurreko zatiak: lehenengo ΠΈ bigarren

Idatzitako kodearen 4 milioi lerrora iristen da

Beste erronka handi bat (eta barne inkestatutakoen artean bigarren kezkarik ohikoena) Dropbox-en mota egiaztapenek estaltzen duten kode kopurua handitzea zen. Arazo hau konpontzeko hainbat planteamendu probatu ditugu, idatzitako kode-basearen tamaina naturalki hazten hasi eta mypy taldearen ahaleginak mota automatizatuen inferentzia estatiko eta dinamikoan zentratuz. Azkenean, bazirudien ez zegoela irabazteko estrategia soilrik, baina komentarioen kodeen bolumenaren hazkunde azkarra lortu genuen ikuspegi asko konbinatuz.

Ondorioz, gure Python biltegi handienak (backend kodea duena) ia 4 milioi kode komentatu ditu. Kode estatikoa idazteko lana hiru urtetan amaitu zen gutxi gorabehera. Mypy-k hainbat kode-estaldura-txostenak onartzen ditu orain, idazketaren aurrerapena kontrolatzea errazten dutenak. Bereziki, moten anbiguotasuna duten kodeari buruzko txostenak sor ditzakegu, esate baterako, mota baten erabilera esplizitua. Any egiaztatu ezin diren oharpenetan, edo motako oharpenik ez duten hirugarrenen liburutegiak inportatzea bezalako gauzekin. Dropbox-en mota egiaztatzeko zehaztasuna hobetzeko proiektu baten barruan, Python biltegi zentralizatu batean kode irekiko liburutegi ezagun batzuen mota-definizioak (stub fitxategiak deiturikoak) hobetzen lagundu dugu. mekanografiatuta.

Python eredu zehatz batzuetarako mota zehatzagoak ahalbidetzen dituzten mota sistemaren ezaugarri berriak inplementatu (eta estandarizatu egin ditugu ondorengo PEPetan). Horren adibide nabarmena da TypeDict, kate-gako multzo finko bat duten JSON antzeko hiztegietarako motak eskaintzen dituena, bakoitza bere motako balio batekin. Mota sistema zabaltzen jarraituko dugu. Gure hurrengo urratsa Python-en gaitasun numerikoetarako laguntza hobetzea izango da.

Python kodearen 4 milioi lerro mota egiaztatzeko bidea. 3. zatia
Kode komentatuaren lerro kopurua: zerbitzaria

Python kodearen 4 milioi lerro mota egiaztatzeko bidea. 3. zatia
Adierazitako kodearen lerro kopurua: bezeroa

Python kodearen 4 milioi lerro mota egiaztatzeko bidea. 3. zatia
Adierazitako kodearen lerro kopurua guztira

Hona hemen Dropbox-en ohartarazitako kode kopurua handitzeko egin ditugun gauzen ezaugarri nagusien ikuspegi orokorra:

Oharpen zorroztasuna. Pixkanaka-pixkanaka kode berria anotatzeko zorroztasunaren baldintzak areagotu ditugu. Lehendik ohar batzuk zituzten fitxategiei oharpenak gehitzea iradokitzen duten linter aholkuekin hasi ginen. Orain motako oharrak behar ditugu Python fitxategi berrietan eta lehendik dauden fitxategi gehienetan.

Idazketa txostenak. Taldeei astero txostenak bidaltzen dizkiegu euren kodea idazteko mailari buruz eta lehenik komentatu beharrekoari buruzko aholkuak ematen ditugu.

mypy-ren dibulgazioa. Mypyri buruz hitz egiten dugu ekitaldietan eta taldeekin hitz egiten dugu motako oharpenekin hasten laguntzeko.

Inkestak. Erabiltzaileen aldizkako inkestak egiten ditugu arazo nagusiak identifikatzeko. Arazo hauek konpontzen nahiko urrun joateko prest gaude (nahiz eta mypy bizkortzeko hizkuntza berri bat sortu!).

Errendimendua. Mypy-ren errendimendua asko hobetu dugu daemon eta mypyc erabiliz. Hau ohartazio prozesuan sortzen diren eragozpenak leuntzeko egin zen, eta kode kopuru handiarekin lan egin ahal izateko.

Editoreekin integrazioa. Dropbox-en ezagunak diren editoreetan mypy exekutatzen laguntzeko tresnak eraiki ditugu. Honek PyCharm, Vim eta VS Code barne hartzen ditu. Horrek asko erraztu zuen kodea anotatzeko eta bere funtzionaltasuna egiaztatzeko prozesua. Ekintza mota hauek ohikoak dira lehendik dagoen kodea ohartatzerakoan.

Analisi estatikoa. Analisi estatikoko tresnak erabiliz funtzio sinadurak ondorioztatzeko tresna bat sortu dugu. Tresna honek egoera erraz samarretan bakarrik funtziona dezake, baina gure kode motako estaldura handitzen lagundu digu ahalegin handirik gabe.

Hirugarrenen liburutegietarako laguntza. Gure proiektuetako askok SQLAlchemy tresna-kit erabiltzen dute. Python-en gaitasun dinamikoak aprobetxatzen ditu PEP 484 motak zuzenean modelatu ezin dituztenak. Guk, PEP 561-aren arabera, dagokion stub fitxategia sortu eta mypy-rako plugin bat idatzi genuen (kode irekia), SQLAlchemy laguntza hobetzen duena.

Aurkitu ditugun zailtasunak

Idatzitako kodearen 4 milioi lerrorako bidea ez da beti erraza izan guretzat. Bide honetan zulo ugari topatu genituen eta hainbat akats egin genituen. Hauek dira aurkitu ditugun arazoetako batzuk. Horiei buruz kontatzeak besteei antzeko arazoak saihesten lagunduko diela espero dugu.

Fitxategiak falta dira. Fitxategi kopuru txiki bat bakarrik egiaztatuz hasi ginen gure lana. Fitxategi hauetan sartzen ez dena ez da egiaztatu. Fitxategiak eskaneatzeko zerrendara gehitu ziren haietan lehen oharrak agertu zirenean. Egiaztapen-esparrutik kanpo kokatutako modulu batetik zerbait inportatu bazen, orduan bezalako balioekin lan egiteaz ari ginen. Any, batere probatu ez zirenak. Horrek idazketaren zehaztasunaren galera nabarmena ekarri zuen, batez ere migrazioaren hasierako faseetan. Ikuspegi honek harrigarriro ondo funtzionatu du orain arte, nahiz eta egoera tipikoa den berrikuspenaren esparrura fitxategiak gehitzeak kode-oinarriaren beste atal batzuetan arazoak erakusten dituela. Kasurik txarrenean, bi kode-eremu isolatu batu zirenean, zeinetan, bata bestearengandik independentean, motak dagoeneko egiaztatu zirenean, eremu horien motak elkarren artean bateraezinak zirela ikusi zen. Horrek oharpenetan aldaketa asko egin beharra ekarri zuen. Orain atzera begiratuta, konturatzen gara mypy-ren mota egiaztatzeko eremuan liburutegi nagusiko moduluak gehitu beharko genituzkeela lehenago. Horrek gure lana askoz aurreikusgarriagoa egingo luke.

Kode zaharraren oharrak ematea. Hasi ginenean, lehendik zegoen Python kodearen 4 milioi lerro inguru genituen. Argi zegoen kode hori guztia ohartaraztea ez zela lan erraza. PyAnnotate izeneko tresna bat sortu dugu, probak exekutatzen diren heinean motaren informazioa bil dezakeena eta bildutako informazioan oinarrituta zure kodeari motako oharrak gehi ditzakeena. Hala ere, ez dugu nabaritu tresna honen harrera bereziki hedatu bat. Moten informazioa biltzea motela zen, eta automatikoki sortutako oharpenek eskuzko edizio asko behar zituzten askotan. Kodea berrikusten genuen bakoitzean tresna hau automatikoki abian jartzea pentsatu genuen, edo sareko benetako eskaeren bolumen txiki batzuk aztertzean oinarritutako informazioa biltzea, baina ez egitea erabaki genuen, bi ikuspegiak arriskutsuegia zirelako.

Ondorioz, esan daiteke kode gehiena eskuz ohartarazi zutela jabeek. Prozesu hau norabide egokian bideratzeko, komentatu beharreko modulu eta funtzio bereziki garrantzitsuei buruzko txostenak prestatzen ditugu. Esaterako, garrantzitsua da ehunka lekutan erabiltzen den liburutegiko modulu baterako ohar motak ematea. Baina berri batekin ordezkatzen ari den zerbitzu zahar bat jada ez da hain garrantzitsua komentatzea. Era berean, analisi estatikoa erabiltzen esperimentatzen ari gara ondarearen kodearen motako oharrak sortzeko.

Inportazio ziklikoak. Goian, inportazio ziklikoei buruz hitz egin nuen ("mendekotasun korapilatsuak"), eta horien existentziak mypy bizkortzea zailtzen zuen. Era berean, gogor lan egin behar izan dugu mypy-k inportazio zikliko hauek eragiten dituzten hizkera mota guztiak onartzeko. Duela gutxi sistemaren birdiseinu proiektu garrantzitsu bat osatu dugu mypy-ren inportazio zirkularrei buruzko arazo gehienak konpondu zituena. Arazo hauek, egia esan, proiektuaren hasierako egunetatik sortu ziren, Aloretik bueltan, mypy proiektua jatorrian zentratzen zen hezkuntza-hizkuntzatik. Alore sintaxiak inportazio ziklikoko komandoekin arazoak konpontzea errazten du. Mypy modernoak muga batzuk heredatu ditu bere lehenagoko inplementazio soiletik (Alorentzat oso egokia zen). Python-ek inportazio zirkularrekin lan egitea zaila egiten du, batez ere adierazpenak anbiguoak direlako. Esate baterako, esleipen-eragiketa batek motako alias bat defini dezake. Mypy ez da beti horrelako gauzak detektatzeko gai inportazio-begizta gehiena prozesatu arte. Aloren ez zegoen halako anbiguotasunik. Sistemaren garapenaren hasierako faseetan hartutako erabaki txarrak ezusteko desatsegin bat sor diezaioke programatzaileari urte asko geroago.

Emaitzak: 5 milioi kode lerrorako bidea eta horizonte berriak

Mypy proiektuak bide luzea egin du: hasierako prototipoetatik ekoizpen kode motako 4 milioi lerro kontrolatzen dituen sistemaraino. Mypy eboluzionatu ahala, Python-en motako aholkuak estandarizatu egin ziren. Egun, ekosistema indartsu bat garatu da Python kodea idaztearen inguruan. Liburutegien euskarrirako tokia du, IDE eta editoreentzako tresna laguntzaileak ditu, hainbat motatako kontrol sistema ditu, bakoitzak bere alde onak eta txarrak ditu.

Dagoeneko Dropbox-en mota egiaztatzea ematen den arren, uste dut oraindik Python kodea idazteko lehen egunetan gaudela. Uste dut mota egiaztatzeko teknologiek eboluzionatzen eta hobetzen jarraituko dutela.

Zure eskala handiko Python proiektuan idazketa egiaztapena erabili ez baduzu, jakin ezazu orain oso une egokia dela idazketa estatikora pasatzen hasteko. Antzeko trantsizioa egin dutenekin hitz egin dut. Inor ez zen damutu. Mota egiaztatzeak Python "Python arrunta" baino askoz ere egokiagoa den lengoaia bihurtzen du proiektu handiak garatzeko.

Irakurle maitea! Mota egiaztapena erabiltzen al duzu zure Python proiektuetan?

Python kodearen 4 milioi lerro mota egiaztatzeko bidea. 3. zatia
Python kodearen 4 milioi lerro mota egiaztatzeko bidea. 3. zatia

Iturria: www.habr.com

Gehitu iruzkin berria