Avaldatud on uuringu tulemused, kus uuriti Python-koodi alti vigu, mis on seotud komade vale kasutamisega koodis. Probleemid on tingitud sellest, et Python ĂŒhendab loendis olevad read automaatselt, kui need ei ole komaga eraldatud, samuti kĂ€sitletakse vÀÀrtust tuple'ina, kui vÀÀrtusele jĂ€rgneb koma. Tehase automatiseeritud analĂŒĂŒs 666 GitHubi Python-koodiga repositooriumi ĂŒle on tuvastanud vĂ”imalikke koma probleeme 5% uuritud projektidest.
Edasine kĂ€sitsi kontroll nĂ€itas, et tegelikud vead esinevad ainult 24 repositooriumis (3,6%), samas kui ĂŒlejÀÀnud 1,4% on valehĂ€ired (nĂ€iteks vĂ”is koma olla tahtlikult vahele jĂ€etud ridade vahel, et ĂŒhendada mitmele reale jaotatud failiteede, pika koodilĂ”igu, HTML-bloki vĂ”i SQL-lause vÀÀrtused). Oluline on, et nende 24 repositooriumi hulgas, kus on tegelikud vead, on sellised suured projektid nagu Tensorflow, Google V8, Sentry, Pydata xarray, rapidpro, django-colorfield ja django-helpdesk. Samuti ei ole komadega seotud probleemid spetsiifilised Pythonile ja sageli ilmnevad need C/C++ projektides (hiljutised parandused â LLVM, Mono, Tensorflow).
Uuritud vigade peamised tĂŒĂŒbid:
- Kaasatud koma, mis on kogudes, tuple'ides ja loendites intuitsiooniks, mille tagajĂ€rjel ĂŒhendatakse read ja neid ei tĂ”lgendata eraldi vÀÀrtustena. NĂ€iteks Sentry's oli ĂŒhes testis kahe rea vahel «releases» ja «discover» vahele jĂ€etud koma loendis, mis tĂ”i kaasa mitteeksisteeriva kĂ€itleja «/releasesdiscover» kontrollimise asemel eraldiseisva kontrollimise «/releases» ja «/discover».

Teine nĂ€ide â koma vahelejĂ€tmine rapidpro's viis kahe erineva reegli ĂŒhendamiseni real 572:

- Puuduv koma ĂŒhekohalise tupikmĂ€e mÀÀratlemise lĂ”pus, mis toob kaasa selle, et mÀÀramise kĂ€igus antakse tavaline tĂŒĂŒp tupikmĂ€e asemel. NĂ€iteks vĂ€ljend "values = (1,)" toob kaasa ĂŒhekohalise tupikmĂ€e mÀÀramise, kuid "values = (1)" toob kaasa tĂ€isarvu tĂŒĂŒbi mÀÀramise. Klambrid nimetatud mÀÀramistes ei mĂ”juta tĂŒĂŒbi mÀÀratlemist ja on valikulised, tupikmĂ€e olemasolu mÀÀrab parser ainult koma olemasolu alusel. REST_FRAMEWORK = { âDEFAULT_PERMISSION_CLASSESâ: ( ârest_framework.permissions.IsAuthenticatedâ # tavalise tĂŒĂŒbi asemel mÀÀratakse string. ) }
- Vastupidine olukord â liigsed komad mÀÀramise korral. Kui mÀÀramise lĂ”pus on kogemata koma jĂ€etud, siis mÀÀratakse vÀÀrtusena tupikmĂ€e asemel tavaline tĂŒĂŒp (nĂ€iteks, kui "value = 1" asemel on mĂ€rgitud "value = 1,").
Allikas: opennet.ru


