Ọna lati ṣe ayẹwo awọn laini miliọnu mẹrin ti koodu Python. Apa 4

A ṣafihan si akiyesi rẹ apakan kẹta ti itumọ ohun elo nipa ọna ti Dropbox mu nigba imuse iru eto ṣiṣe ayẹwo fun koodu Python.

Ọna lati ṣe ayẹwo awọn laini miliọnu mẹrin ti koodu Python. Apa 4

→ Awọn ẹya iṣaaju: akọkọ и ikeji

Gigun awọn laini miliọnu mẹrin ti koodu ti tẹ

Ipenija pataki miiran (ati ibakcdun keji ti o wọpọ julọ laarin awọn ti a ṣe iwadi ni inu) n pọ si iye koodu ti o bo nipasẹ awọn sọwedowo iru ni Dropbox. A ti gbiyanju ọpọlọpọ awọn isunmọ lati yanju iṣoro yii, lati dagba nipa ti ara ti iwọn koodu koodu ti a tẹ si idojukọ awọn akitiyan ẹgbẹ mypy lori aimi ati itọkasi iru adaṣe adaṣe. Ni ipari, o dabi pe ko si ilana ti o rọrun ti o bori, ṣugbọn a ni anfani lati ṣaṣeyọri idagbasoke iyara ni iwọn didun ti koodu asọye nipa apapọ ọpọlọpọ awọn isunmọ.

Bi abajade, ibi ipamọ Python wa ti o tobi julọ (pẹlu koodu ẹhin) ni o fẹrẹ to awọn laini miliọnu mẹrin ti koodu asọye. Iṣẹ lori titẹ koodu aimi ti pari ni isunmọ ọdun mẹta. Mypy ni bayi ṣe atilẹyin awọn oriṣi awọn ijabọ agbegbe koodu ti o jẹ ki o rọrun lati ṣe atẹle ilọsiwaju titẹ. Ni pataki, a le ṣe agbekalẹ awọn ijabọ lori koodu pẹlu awọn aibikita ni awọn oriṣi, gẹgẹbi, fun apẹẹrẹ, lilo ti o fojuhan ti iru kan Any ninu awọn asọye ti a ko le rii daju, tabi pẹlu awọn nkan bii gbigbewọle awọn ile-ikawe ẹnikẹta ti ko ni awọn asọye iru. Gẹgẹbi apakan ti iṣẹ akanṣe kan lati ṣe ilọsiwaju deede iru iṣayẹwo ni Dropbox, a ṣe alabapin si imudarasi iru awọn asọye (ti a pe ni awọn faili stub) fun diẹ ninu awọn ile ikawe orisun ṣiṣi olokiki ni ibi ipamọ Python aarin kan. ti tẹ.

A ṣe imuse (ati idiwon ni awọn PEP ti o tẹle) awọn ẹya tuntun ti iru eto ti o gba awọn iru kongẹ diẹ sii fun awọn ilana Python kan pato. Apeere pataki ti eyi ni TypeDict, eyi ti o pese awọn oriṣi fun awọn iwe-itumọ-itumọ-JSON ti o ni ipilẹ ti o wa titi ti awọn bọtini okun, ọkọọkan pẹlu iye ti iru tirẹ. A yoo tesiwaju lati faagun awọn eto iru. Igbesẹ ti nbọ wa yoo jẹ lati ni ilọsiwaju atilẹyin fun awọn agbara nọmba Python.

Ọna lati ṣe ayẹwo awọn laini miliọnu mẹrin ti koodu Python. Apa 4
Nọmba awọn ila ti koodu asọye: olupin

Ọna lati ṣe ayẹwo awọn laini miliọnu mẹrin ti koodu Python. Apa 4
Nọmba awọn ila ti koodu asọye: alabara

Ọna lati ṣe ayẹwo awọn laini miliọnu mẹrin ti koodu Python. Apa 4
Lapapọ nọmba ti awọn ila ti akọsilẹ koodu

Eyi ni awotẹlẹ ti awọn ẹya akọkọ ti awọn ohun ti a ṣe lati mu iye koodu asọye pọ si ni Dropbox:

Annotation rigor. A maa pọ si awọn ibeere fun lile ti asọye koodu tuntun. A bẹrẹ pẹlu awọn imọran linter ti o daba fifi awọn asọye kun si awọn faili ti o ti ni awọn asọye tẹlẹ. Bayi a nilo iru awọn alaye ni awọn faili Python tuntun ati ninu ọpọlọpọ awọn faili ti o wa tẹlẹ.

Titẹ iroyin. A firanṣẹ awọn ẹgbẹ ni awọn ijabọ ọsẹ kan lori ipele ti titẹ ni koodu wọn ati fun imọran lori kini o yẹ ki o ṣe alaye ni akọkọ.

Gbajumo ti mypy. A sọrọ nipa mypy ni awọn iṣẹlẹ ati sọrọ si awọn ẹgbẹ lati ṣe iranlọwọ fun wọn lati bẹrẹ pẹlu awọn asọye iru.

Idibo. A ṣe awọn iwadii olumulo igbakọọkan lati ṣe idanimọ awọn iṣoro pataki. A ti ṣetan lati lọ jinna pupọ ni yiyanju awọn iṣoro wọnyi (paapaa ṣiṣẹda ede tuntun lati yara mypy!).

Iṣẹ ṣiṣe. A ti ni ilọsiwaju si iṣẹ ti mypy nipa lilo daemon ati mypyc. Eyi ni a ṣe lati dan awọn airọrun ti o dide lakoko ilana asọye, ati lati ni anfani lati ṣiṣẹ pẹlu awọn koodu titobi pupọ.

Integration pẹlu awọn olootu. A ti kọ awọn irinṣẹ lati ṣe atilẹyin ṣiṣe mypy ni awọn olootu ti o gbajumọ lori Dropbox. Eyi pẹlu PyCharm, Vim ati koodu VS. Eyi jẹ irọrun pupọ ilana ti asọye koodu ati ṣayẹwo iṣẹ ṣiṣe rẹ. Awọn iru awọn iṣe wọnyi jẹ wọpọ nigbati o ba n ṣalaye koodu to wa tẹlẹ.

Ayẹwo aimi. A ṣẹda ohun elo kan lati ṣe afihan awọn ibuwọlu iṣẹ ni lilo awọn irinṣẹ itupalẹ aimi. Ọpa yii le ṣiṣẹ nikan ni awọn ipo ti o rọrun, ṣugbọn o ṣe iranlọwọ fun wa lati pọ si iru iru koodu wa laisi igbiyanju pupọ.

Atilẹyin fun awọn ile-ikawe ẹnikẹta. Ọpọlọpọ awọn iṣẹ akanṣe wa lo ohun elo irinṣẹ SQLAlchemy. O gba anfani ti awọn agbara agbara ti Python pe awọn oriṣi PEP 484 ko lagbara lati ṣe awoṣe taara. A, ni ibamu pẹlu PEP 561, ṣẹda faili stub ti o baamu ati kọ ohun itanna kan fun mypy (ìmọ orisun), eyiti o ṣe atilẹyin atilẹyin SQLAlchemy.

Awọn iṣoro ti a pade

Ọna si awọn laini miliọnu mẹrin ti koodu ti tẹ ko nigbagbogbo rọrun fun wa. Lori ọna yii a pade ọpọlọpọ awọn iho ati ṣe ọpọlọpọ awọn aṣiṣe. Iwọnyi jẹ diẹ ninu awọn iṣoro ti a koju. A retí pé sísọ nípa wọn yóò ran àwọn ẹlòmíràn lọ́wọ́ láti yẹra fún irú àwọn ìṣòro bẹ́ẹ̀.

Awọn faili ti o padanu. A bẹrẹ iṣẹ wa nipa ṣiṣe ayẹwo nikan iye awọn faili. Ohunkohun ti ko si ninu awọn faili wọnyi ko ṣayẹwo. Awọn faili ni a ṣafikun si atokọ ọlọjẹ nigbati awọn asọye akọkọ han ninu wọn. Ti nkan kan ba gbe wọle lati inu module ti o wa ni ita ipari ti ijẹrisi, lẹhinna a n sọrọ nipa ṣiṣẹ pẹlu awọn iye bii Any, eyiti a ko ṣe idanwo rara. Eyi yori si ipadanu pataki ti deede titẹ, paapaa ni awọn ipele ibẹrẹ ti ijira. Ọna yii ti ṣiṣẹ ni iyalẹnu daradara titi di isisiyi, botilẹjẹpe ipo aṣoju kan ni pe fifi awọn faili kun si ipari ti atunyẹwo ṣafihan awọn iṣoro ni awọn apakan miiran ti codebase. Ni ọran ti o buru julọ, nigbati awọn agbegbe ti o ya sọtọ meji ti koodu ti dapọ, ninu eyiti, ni ominira ti ara wọn, awọn oriṣi ti ṣayẹwo tẹlẹ, o han pe awọn iru awọn agbegbe wọnyi ko ni ibamu pẹlu ara wọn. Eyi yori si iwulo lati ṣe ọpọlọpọ awọn ayipada si awọn asọye. Ni wiwo pada ni bayi, a mọ pe o yẹ ki a ti ṣafikun awọn modulu ile-ikawe mojuto si agbegbe wiwa iru mypy laipẹ. Eyi yoo jẹ ki iṣẹ wa jẹ asọtẹlẹ diẹ sii.

Annotating atijọ koodu. Nigba ti a bẹrẹ, a ni nipa awọn ila 4 milionu ti koodu Python ti o wa tẹlẹ. O han gbangba pe sisọ gbogbo koodu yii kii ṣe iṣẹ ti o rọrun. A ti ṣẹda ohun elo kan ti a pe ni PyAnnotate ti o le gba iru alaye bi awọn idanwo nṣiṣẹ ati pe o le ṣafikun iru awọn asọye si koodu rẹ ti o da lori alaye ti o gba. Bibẹẹkọ, a ko ṣe akiyesi isọdọmọ ni ibigbogbo ti irinṣẹ yii. Iru alaye ikojọpọ lọra, ati pe awọn asọye ti ipilẹṣẹ laifọwọyi nigbagbogbo nilo ọpọlọpọ awọn atunṣe afọwọṣe. A ronu nipa ṣiṣiṣẹ ọpa yii laifọwọyi ni gbogbo igba ti a ba ṣe atunyẹwo koodu, tabi gbigba iru alaye ti o da lori itupalẹ iwọn kekere ti awọn ibeere nẹtiwọọki gangan, ṣugbọn pinnu lati ma ṣe nitori boya ọna jẹ eewu pupọ.

Bi abajade, o le ṣe akiyesi pe pupọ julọ koodu naa ni a ṣe alaye pẹlu ọwọ nipasẹ awọn oniwun rẹ. Lati le ṣe itọsọna ilana yii ni itọsọna ti o tọ, a pese awọn ijabọ lori pataki awọn modulu pataki ati awọn iṣẹ ti o nilo lati ṣe alaye. Fun apẹẹrẹ, o jẹ pataki lati pese iru annotations fun a ìkàwé module ti o ti lo ni ogogorun ti awọn aaye. Ṣugbọn iṣẹ atijọ ti a rọpo pẹlu tuntun ko ṣe pataki mọ lati ṣe alaye. A tun n ṣe idanwo pẹlu lilo itupalẹ aimi lati ṣe agbekalẹ iru awọn asọye fun koodu julọ.

Awọn agbewọle cyclic. Loke, Mo ti sọrọ nipa awọn agbewọle lati ilu okeere (“igbẹkẹle tangles”), aye ti eyiti o jẹ ki o nira lati yara si mypy. A tun ni lati ṣiṣẹ takuntakun lati jẹ ki mypy ṣe atilẹyin gbogbo iru awọn ọrọ-ọrọ ti o ṣẹlẹ nipasẹ awọn agbewọle lati ilu okeere. Laipẹ a pari iṣẹ akanṣe atunto eto pataki kan ti o ṣeto pupọ julọ awọn ọran mypy nipa awọn agbewọle agbewọle lati ilu okeere. Awọn iṣoro wọnyi jẹ otitọ lati awọn ọjọ ibẹrẹ ti iṣẹ akanṣe, pada lati Alore, ede ẹkọ ti iṣẹ akanṣe mypy ti dojukọ ni akọkọ. Alore syntax jẹ ki o rọrun lati yanju awọn iṣoro pẹlu awọn aṣẹ agbewọle kẹkẹ. Mypy ode oni ti jogun diẹ ninu awọn idiwọn lati iṣaaju rẹ, imuse ti o rọrun (eyiti o jẹ ibamu nla fun Alore). Python jẹ ki ṣiṣẹ pẹlu awọn agbewọle agbewọle lati ilu okeere nira, ni pataki nitori awọn ikosile jẹ aibikita. Fun apẹẹrẹ, iṣẹ iyansilẹ le ṣe asọye iru inagijẹ gangan. Mypy ko ni anfani nigbagbogbo lati rii awọn nkan bii eyi titi pupọ julọ ti lupu agbewọle ti ni ilọsiwaju. Ko si iru ambiguities ni Alore. Awọn ipinnu ti ko dara ti a ṣe ni awọn ipele ibẹrẹ ti idagbasoke eto le ṣafihan iyalẹnu aibanujẹ si olupilẹṣẹ ọpọlọpọ ọdun nigbamii.

Awọn abajade: ọna si awọn laini koodu 5 miliọnu ati awọn iwoye tuntun

Ise agbese mypy ti wa ọna pipẹ - lati awọn apẹẹrẹ ibẹrẹ si eto ti o ṣakoso awọn laini miliọnu mẹrin ti awọn iru koodu iṣelọpọ. Bi mypy ti wa, awọn amọran iru Python jẹ idiwọn. Awọn ọjọ wọnyi, ilolupo ilolupo ti o lagbara ti ni idagbasoke ni ayika titẹ koodu Python. O ni aaye fun atilẹyin ile-ikawe, o ni awọn irinṣẹ iranlọwọ fun IDEs ati awọn olootu, o ni ọpọlọpọ awọn eto iṣakoso iru, ọkọọkan wọn ni awọn anfani ati awọn alailanfani tirẹ.

Paapaa botilẹjẹpe iṣayẹwo iru ti jẹ fifun tẹlẹ ni Dropbox, Mo gbagbọ pe a tun wa ni awọn ọjọ ibẹrẹ ti titẹ koodu Python. Mo ro pe iru awọn imọ-ẹrọ ṣiṣayẹwo yoo tẹsiwaju lati dagbasoke ati ilọsiwaju.

Ti o ko ba ti lo iṣayẹwo iru tẹlẹ ninu iṣẹ akanṣe Python titobi rẹ, lẹhinna mọ pe ni bayi ni akoko ti o dara pupọ lati bẹrẹ gbigbe si titẹ aimi. Mo ti sọrọ si awọn ti o ti ṣe iru iyipada kan. Ko si ọkan ninu wọn ti o kabamọ. Ṣiṣayẹwo oriṣi jẹ ki Python jẹ ede ti o dara julọ si idagbasoke awọn iṣẹ akanṣe ju “Python deede.”

Eyin onkawe! Ṣe o lo iru iṣayẹwo ninu awọn iṣẹ akanṣe Python rẹ?

Ọna lati ṣe ayẹwo awọn laini miliọnu mẹrin ti koodu Python. Apa 4
Ọna lati ṣe ayẹwo awọn laini miliọnu mẹrin ti koodu Python. Apa 4

orisun: www.habr.com

Fi ọrọìwòye kun