E hoʻokō i ka loiloi static i ke kaʻina hana, ma mua o ka hoʻohana ʻana iā ia e ʻimi ai i nā pōpoki

Ua hoʻoikaika ʻia au e kākau i kēia ʻatikala e ka nui o nā mea e pili ana i ka loiloi static e ulu nui mai nei i koʻu nānā. ʻO ka mea mua, kēia PVS-studio blog, e hoʻolaha ikaika ana iā ia iho ma Habré me ke kōkua o nā loiloi o nā hewa i ʻike ʻia e kā lākou mea hana ma nā papahana open source. Ua hoʻokō ʻia ʻo PVS-studio Kākoʻo Java, a, ʻoiaʻiʻo hoʻi, nā mea hoʻomohala o IntelliJ IDEA, nona ka mea hoʻoponopono i kūkulu ʻia ʻo ia paha ka mea kiʻekiʻe loa no Java i kēia lā, ʻaʻole hiki ke noho mamao.

I ka heluhelu ʻana i kēlā mau loiloi, loaʻa iā ʻoe ka manaʻo e kamaʻilio nei mākou e pili ana i kahi elixir magic: e kaomi i ke pihi, a eia - kahi papa inoa o nā hemahema i mua o kou mau maka. Me he mea lā i ka hoʻomaikaʻi ʻana o nā mea loiloi, e ʻike koke ʻia ka nui o nā pōpoki, a ʻoi aku ka maikaʻi o nā huahana i nānā ʻia e kēia mau robots, me ka ʻole o kā mākou hoʻoikaika ʻana.

Akā ʻaʻohe elixirs magic. Makemake au e kamaʻilio e pili ana i ka mea maʻamau ʻaʻole i kamaʻilio e pili ana i nā pou e like me "eia nā mea i loaʻa i kā mākou robota": he aha nā mea loiloi hiki ʻole ke hana, he aha kā lākou kuleana maoli a wahi i ke kaʻina hoʻopuka polokalamu, a pehea e hoʻokō pono ai iā lākou. .

E hoʻokō i ka loiloi static i ke kaʻina hana, ma mua o ka hoʻohana ʻana iā ia e ʻimi ai i nā pōpoki
Ratchet (kumu: ʻO Wikipedia).

ʻAʻole hiki ke hana i nā mea ananelista static

He aha ka loiloi kumu kumu, mai ka manaʻo kūpono? Hāʻawi mākou i kekahi code kumu ma ke ʻano he hoʻokomo, a ma ke ʻano he hoʻopuka, i ka manawa pōkole (ʻoi aku ka pōkole ma mua o nā hoʻokolohua holo ʻana) loaʻa iā mākou kekahi ʻike e pili ana i kā mākou ʻōnaehana. ʻO ka palena kumu a me ka makemakika hiki ʻole ke loaʻa iā mākou kahi papa haiki o ka ʻike ma kēia ala.

ʻO ka laʻana kaulana loa o kahi pilikia ʻaʻole hiki ke hoʻoponopono ʻia me ka hoʻohana ʻana i ka loiloi static pilikia pani: He kumumanaʻo kēia e hōʻoiaʻiʻo ana he hiki ʻole ke hoʻomohala i kahi algorithm maʻamau e hiki ke hoʻoholo mai ke kumu kumu o kahi papahana inā e loop a hoʻopau paha i ka manawa palena. ʻO ka hoʻonui ʻia o kēia theorem Ka manaʻo o ka laiki, e ʻōlelo ana no kēlā me kēia waiwai waiwai ʻole o nā hana helu, ʻo ka hoʻoholo ʻana inā loiloi ka papahana arbitrary i kahi hana me ia waiwai he pilikia algorithmically intractable. No ka laʻana, ʻaʻole hiki ke kākau i kahi mea hoʻoponopono e hiki ke hoʻoholo mai kekahi code kumu inā he hoʻokō ka papahana e kālailai ʻia ana i kahi algorithm e helu ana, e ʻōlelo, ka ʻālike o ka integer.

No laila, ʻo ka hana o nā mea anana static he mau palena hiki ʻole ke hoʻokō. ʻAʻole hiki ke ʻike ʻia kahi mea hoʻoponopono static i nā hihia āpau e like me, no ka laʻana, ka hanana ʻana o kahi "null pointer exception" i nā ʻōlelo e ʻae ai i ka waiwai o ka null, a i ʻole i nā hihia āpau e hoʻoholo i ka hanana ʻana o kahi " ʻAʻole i loaʻa ke ʻano" ma nā ʻōlelo i paʻi ʻia. ʻO nā mea a pau e hiki ai i ka mea loiloi static kiʻekiʻe ke hana i nā hihia kūikawā, ʻo ka helu o ia mau pilikia, ma waena o nā pilikia āpau e pili ana i kāu code kumu, ʻo ia, me ka hoʻonui ʻole ʻana, he hāʻule i ka moana.

ʻAʻole pili ka nānā ʻana i ka ʻikepili i ka ʻimi ʻana i nā pōpoki

Mai ka mea i luna aʻe, ʻo ka hopena: ʻaʻole ʻo ka loiloi static he mea e hōʻemi ai i ka helu o nā hemahema i kahi papahana. Makemake wau e ʻōlelo: ke noi ʻia i kāu papahana no ka manawa mua, e ʻike ʻo ia i nā wahi "ʻoluʻolu" i ke code, akā, ʻoi loa, ʻaʻole ia e ʻike i nā hemahema e pili ana i ka maikaʻi o kāu papahana.

ʻO nā hiʻohiʻona o nā hemahema i ʻike maʻalahi ʻia e nā mea loiloi he mea kupanaha, akā ʻaʻole pono mākou e poina ua loaʻa kēia mau hiʻohiʻona ma ka nānā ʻana i kahi pūʻulu nui o nā codebases nui. Ma ke kumu like, loaʻa i nā mea hackers ka manawa e hoʻāʻo ai i kekahi mau huaʻōlelo maʻalahi ma ka helu nui o nā moʻolelo e loaʻa i kēlā mau moʻolelo i loaʻa kahi ʻōlelo huna.

ʻAʻole pono e hoʻohana ʻia ka loiloi static? ʻAʻole naʻe! A no ke kumu like e pono ai e nānā i kēlā me kēia ʻōlelo huna hou e hōʻoia i ka hoʻokomo ʻia i ka papa inoa o nā huaʻōlelo "maʻalahi".

ʻOi aku ka nānā ʻana o Static ma mua o ka ʻimi ʻana i nā pōpoki

ʻO ka ʻoiaʻiʻo, ʻoi aku ka laulā o nā pilikia i hoʻoponopono ʻia e ka nānā ʻana. Ma hope o nā mea a pau, ma ka laulā, ʻo ka loiloi static kekahi hōʻoia o nā code kumu i hana ʻia ma mua o ka hoʻomaka ʻana. Eia kekahi mau mea hiki iā ʻoe ke hana:

  • Ke nānā ʻana i ke ʻano coding ma ke ʻano ākea o ka huaʻōlelo. Hoʻopili kēia i ka hoʻopololei ʻana, e ʻimi ana i ka hoʻohana ʻana i nā pani hakahaka/ʻokoʻa, ka hoʻonohonoho ʻana i nā paepae ma nā metric e like me ka helu o nā laina/ka paʻakikī cyclomatic o kahi ʻano, a me nā mea ʻē aʻe. Ma Java, ʻo ia ka mea hana ʻo Checkstyle, ma Python - flake8. Kapa ʻia nā papahana o kēia papa he "linters."
  • ʻAʻole hiki ke nānā ʻia ke code executable wale nō. Hiki ke nānā 'akomi 'ia nā waihona waiwai e like me JSON, YAML, XML, .properties (a pono!). Ma hope o nā mea a pau, ʻoi aku ka maikaʻi o ka ʻike ʻana ua haki ka hale JSON ma muli o kekahi mau huaʻōlelo i hoʻopaʻa ʻole ʻia i ka wā mua o ka hōʻoia ʻana i ka Pull Request ma mua o ka wā o ka hoʻokō ʻana a i ʻole ka manawa holo? Loaʻa nā mea hana kūpono: e.g. YAMLlint, JSONLint.
  • ʻO ka hōʻuluʻulu ʻana (a i ʻole ka parsing no nā ʻōlelo hoʻonohonoho hoʻoikaika kino) ʻo ia kekahi ʻano o ka loiloi static. Ma keʻano laulā, hiki i nā mea hōʻuluʻulu ke hana i nā ʻōlelo aʻo e hōʻike ana i nā pilikia me ka maikaʻi o ka code kumu a ʻaʻole pono e mālama ʻia.
  • I kekahi manawa ʻoi aku ka hoʻohui ʻana ma mua o ka hoʻopili ʻana i nā code executable. No ka laʻana, inā loaʻa iā ʻoe nā palapala i ke ʻano Ascii Kahuna, a laila i ka manawa e hoʻololi ai i HTML/PDF ka mea hoʻokele AsciiDoctor (Pākuʻi Maven) hiki ke hoʻopuka i nā ʻōlelo aʻo, no ka laʻana, e pili ana i nā loulou kūloko i haki. A he kumu maikaʻi kēia e ʻae ʻole ai i ka Pull Request me nā hoʻololi palapala.
  • ʻO ka nānā ʻana i ka huaʻōlelo kekahi ʻano o ka nānā ʻana. Mea hoohana aspell hiki iā ia ke nānā i ka spelling ʻaʻole wale ma nā palapala, akā i nā code kumu papahana (nā manaʻo a me nā literals) ma nā ʻōlelo papahana like ʻole, me C/C++, Java a me Python. ʻO ka hewa o ka spelling i loko o ka mea hoʻohana a i ʻole nā ​​palapala he hemahema hoʻi!
  • Nā ho'āʻo hoʻonohonoho (e pili ana iā lākou - ʻike. kēia и kēia nā hōʻike), ʻoiai ua hoʻokō ʻia i loko o kahi manawa hoʻāʻo ʻāpana e like me pytest, ʻoiaʻiʻo nō kekahi ʻano o ka nānā ʻana static, ʻoiai ʻaʻole lākou e hoʻokō i nā code kumu i ka wā o kā lākou hoʻokō ʻana.

E like me kāu e ʻike ai, ʻoi aku ka liʻiliʻi o ka ʻimi ʻana i nā pōpoki ma kēia papa inoa, a loaʻa nā mea ʻē aʻe ma ka hoʻohana ʻana i nā hāmeʻa manuahi manuahi.

ʻO wai o kēia mau ʻano o ka loiloi static āu e hoʻohana ai i kāu papahana? ʻOiaʻiʻo, ʻoi aku ka maikaʻi! ʻO ka mea nui ka hoʻokō pono ʻana, e kūkākūkā hou ʻia.

ʻO ka pipeline hāʻawi ma ke ʻano he kānana multi-stage a me ka nānā ʻana static e like me kāna pae mua

ʻO ka metaphor maʻamau no ka hoʻohui mau ʻana he pipeline e holo ai nā loli, mai ka hoʻololi ʻana i ke code kumu a hiki i ka lawe ʻana i ka hana. ʻO ke kaʻina maʻamau o nā pae i kēia pipeline e like me kēia:

  1. ka nānā ʻana paʻa
  2. ka houluulu ana
  3. hoʻāʻo ʻāpana
  4. nā hoʻokolohua hoʻohui
  5. Nā hoʻokolohua UI
  6. nānā lima lima

ʻAʻole hoʻololi ʻia nā hoʻololi i hōʻole ʻia ma ka pae Nth o ka pipeline i ka pae N+1.

No ke aha i kēia ala a ʻaʻole ma kahi ʻē aʻe? Ma ka ʻāpana hoʻāʻo o ka pipeline, e ʻike nā mea hōʻike i ka pyramid hoʻāʻo kaulana.

E hoʻokō i ka loiloi static i ke kaʻina hana, ma mua o ka hoʻohana ʻana iā ia e ʻimi ai i nā pōpoki
Hoʻāʻo pyramid. Puna: 'atikala Martin Fowler.

Aia ma lalo o kēia pyramid nā ho'āʻo i maʻalahi ke kākau, ʻoi aku ka wikiwiki o ka hoʻokō ʻana, a ʻaʻohe manaʻo e hāʻule. No laila, ʻoi aku ka nui o lākou, pono lākou e uhi i nā code hou aʻe a hoʻokō mua ʻia. Ma ka piko o ka pyramid, he ʻoiaʻiʻo ka mea ʻē aʻe, no laila e hoʻemi ʻia ka helu o ka hoʻohui a me nā hoʻāʻo UI i ka liʻiliʻi e pono ai. ʻO ke kanaka i loko o kēia kaulahao ka waiwai nui loa, lohi a hilinaʻi ʻole, no laila aia ʻo ia ma ka hope loa a hana wale i ka hana inā ʻaʻole i loaʻa nā hemahema i nā pae mua. Eia naʻe, hoʻohana ʻia nā loina like e kūkulu i kahi pipeline i nā ʻāpana pili ʻole i ka hoʻāʻo!

Makemake wau e hāʻawi i kahi hoʻohālikelike ma ke ʻano o kahi ʻōnaehana kānana wai multi-stage. Hāʻawi ʻia ka wai lepo (nā hoʻololi me nā hemahema) i ka mea hoʻokomo; ma ka hoʻopuka e loaʻa iā mākou ka wai maʻemaʻe, kahi i hoʻopau ʻia ai nā mea haumia makemake ʻole.

E hoʻokō i ka loiloi static i ke kaʻina hana, ma mua o ka hoʻohana ʻana iā ia e ʻimi ai i nā pōpoki
kānana pae-nui. Puna: Wikimedia maoli

E like me kāu e ʻike ai, hoʻolālā ʻia nā kānana hoʻomaʻemaʻe i hiki i kēlā me kēia cascade hope ke kānana i kahi hapa o nā mea haumia. I ka manawa like, ʻoi aku ka kiʻekiʻe o nā cascades hoʻomaʻemaʻe coarser a me ke kumu kūʻai haʻahaʻa. Ma kā mākou hoʻohālikelike, ʻo ia ka mea ʻoi aku ka wikiwiki o ka hoʻokomo ʻana i nā ʻīpuka maikaʻi, koi ʻoi aku ka liʻiliʻi o ka hoʻoikaika ʻana e hoʻomaka, a ʻoi aku ka maikaʻi ʻole o ka hana - a ʻo ia ke kaʻina i kūkulu ʻia ai. ʻO ke kuleana o ka loiloi static, e like me kā mākou e hoʻomaopopo nei, hiki ke hoʻopau wale i nā hemahema nui loa, ʻo ia ke kuleana o ka "mud" grid i ka hoʻomaka ʻana o ka cascade kānana.

ʻAʻole hoʻomaikaʻi ʻo Static analysis iā ia iho i ka maikaʻi o ka huahana hope, e like me ka "pena ʻōpala" ʻaʻole hiki ke inu i ka wai. Eia naʻe, i ka hui pū me nā mea ʻē aʻe o ka pipeline, ʻike ʻia kona koʻikoʻi. ʻOiai i loko o kahi kānana multistage hiki i nā pae hoʻopuka ke hopu i nā mea a pau i hana ʻia e nā pae hoʻokomo, ua maopopo ka hopena o ka hoʻāʻo e hana me nā pae hoʻomaʻemaʻe maikaʻi wale nō, me ka ʻole o nā pae hoʻokomo.

ʻO ke kumu o ka "mud trap" e hoʻokuʻu i nā cascade ma hope mai ka hopu ʻana i nā hemahema nui loa. No ka laʻana, ma ka liʻiliʻi loa, ʻaʻole pono e hoʻopilikia ʻia ka mea e hana ana i ka loiloi code e nā code i hōʻano hewa ʻia a me ka uhaki ʻana i nā kūlana coding i hoʻokumu ʻia (e like me nā pale ʻē aʻe a i ʻole nā ​​lālā pūnana hohonu loa). Pono e hopu ʻia nā pōpoki e like me nā NPE e nā hoʻāʻo ʻāpana, akā inā ma mua o ka hoʻāʻo ʻana e hōʻike mai ka mea loiloi iā mākou e hiki mai ana kahi bug, e wikiwiki loa kēia i ka hoʻoponopono ʻana.

Ke manaʻoʻiʻo nei au ua maopopo ke kumu e hoʻomaikaʻi ʻole ai ka loiloi static i ka maikaʻi o ka huahana inā hoʻohana ʻia i kekahi manawa, a pono e hoʻohana mau ʻia e kānana i nā loli me nā hemahema nui. ʻO ka nīnau no ka hoʻohana ʻana i kahi mea ananala static e hoʻomaikaʻi i ka maikaʻi o kāu huahana e like me ka nīnau ʻana, "E hoʻomaikaʻi ʻia ka wai i lawe ʻia mai loko mai o ka loko lepo i ka maikaʻi o ka inu ʻana inā e hele ʻia i loko o kahi colander?"

Ka hoʻokō ʻana i kahi papahana hoʻoilina

He nīnau koʻikoʻi koʻikoʻi: pehea e hoʻokō ai i ka loiloi static i ke kaʻina hana hoʻohui mau ma ke ʻano he "puka maikaʻi"? I ka hihia o nā ho'āʻo maʻalahi, maopopo nā mea a pau: aia kahi hoʻonohonoho o nā hoʻokolohua, ʻo ka hemahema o kekahi o lākou ke kumu kūpono e manaʻoʻiʻo ai ʻaʻole i hala ka ʻaha i ka ʻīpuka maikaʻi. ʻAʻole hiki i ka hoʻāʻo ʻana e hoʻokomo i ka ʻīpuka ma ke ʻano like e pili ana i nā hopena o kahi loiloi static: ua nui loa nā ʻōlelo aʻoaʻo loiloi ma ka code hoʻoilina, ʻaʻole ʻoe makemake e haʻalele loa iā lākou, akā hiki ʻole ke hoʻōki i ka hoʻouna ʻana i kahi huahana. no ka mea, loaʻa nā ʻōlelo aʻoaʻo loiloi.

Ke hoʻohana ʻia no ka manawa mua, hoʻopuka ka mea loiloi i ka nui o nā ʻōlelo luhi ma kekahi papahana, ʻo ka hapa nui ʻaʻole pili i ka hana kūpono o ka huahana. ʻAʻole hiki ke hoʻoponopono i kēia mau ʻōlelo a pau i ka manawa hoʻokahi, a ʻaʻole pono ka nui. Ma hope o nā mea a pau, ʻike mākou e hana ana kā mākou huahana holoʻokoʻa, ʻoiai ma mua o ka hoʻokomo ʻana i ka loiloi static!

ʻO ka hopena, ua kaupalena ʻia nā mea he nui i ka hoʻohana ʻana i ka loiloi static, a i ʻole e hoʻohana wale ia ma ke ʻano ʻike, ke hoʻopuka wale ʻia kahi hōʻike loiloi i ka wā e ʻākoakoa ai. Ua like kēia me ka loaʻa ʻole o ka nānā ʻana, no ka mea inā he nui nā ʻōlelo aʻo iā mākou, a laila ʻaʻole ʻike ʻia ka hanana ʻana o kekahi (ʻaʻole koʻikoʻi) i ka wā e hoʻololi ai i ke code.

Ua ʻike ʻia nā ʻano o ka hoʻokomo ʻana i nā ʻīpuka maikaʻi:

  • Ka hoʻonoho ʻana i ka palena i ka huina o nā ʻōlelo aʻo a i ʻole ka helu o nā ʻōlelo aʻo i puʻunaue ʻia e ka helu o nā laina o ke code. Hana maikaʻi ʻole kēia, no ka mea, ʻae ʻia kēlā ʻīpuka i nā loli me nā hemahema hou e hele ai, ʻoiai ʻaʻole i ʻoi aku ko lākou palena.
  • Hoʻoponopono, i kekahi manawa, nā ʻōlelo aʻo kahiko a pau i ke code e like me ka nānā ʻole ʻia, a hōʻole e kūkulu i ka wā e puka mai ai nā ʻōlelo luhi hou. Hāʻawi ʻia kēia hana e PVS-studio a me kekahi mau kumuwaiwai pūnaewele, no ka laʻana, Codacy. ʻAʻole i loaʻa iaʻu ka manawa e hana ai ma PVS-studio, no kaʻu ʻike me Codacy, ko lākou pilikia nui ʻo ka hoʻoholo ʻana i ka mea "kahiko" a he aha ka "hou" hewa he algorithm paʻakikī ʻaʻole e hana mau. pololei, ʻoi aku ka nui inā hoʻololi a hoʻololi hou ʻia nā faila. I koʻu ʻike, hiki iā Codacy ke haʻalele i nā ʻōlelo aʻo hou i kahi noi huki, ʻoiai i ka manawa like ʻaʻole e hāʻawi i kahi noi huki ma muli o nā ʻōlelo aʻo i pili ʻole i nā loli i ke code o kahi PR i hāʻawi ʻia.
  • I koʻu manaʻo, ʻo ka hopena maikaʻi loa ka mea i wehewehe ʻia ma ka puke Lawe mau "ʻano ratcheting". ʻO ka manaʻo kumu, ʻo ka helu o nā ʻōlelo aʻoaʻo static he waiwai o kēlā me kēia hoʻokuʻu ʻana, a ʻae ʻia nā hoʻololi wale nō ʻaʻole e hoʻonui i ka nui o nā ʻōlelo aʻo.

Ratchet

Hana ia penei:

  1. I ka pae mua, ua hana ʻia kahi moʻolelo ma ka metadata e pili ana i ka hoʻokuʻu ʻana i ka helu o nā ʻōlelo aʻo i ke code i loaʻa e nā mea nānā. No laila, ke kūkulu ʻoe i luna, kākau kāu luna waihona ʻaʻole "hoʻokuʻu i ka 7.0.2", akā "hoʻokuʻu iā 7.0.2 i loaʻa nā ʻōlelo aʻo 100500." Inā ʻoe e hoʻohana i kahi mana hoʻopaʻa waihona kiʻekiʻe (e like me Artifactory), maʻalahi ka mālama ʻana i nā metadata e pili ana i kāu hoʻokuʻu ʻana.
  2. I kēia manawa i kēlā me kēia noi huki, ke kūkulu ʻia, hoʻohālikelike i ka helu o nā ʻōlelo aʻo i loaʻa me ka helu o nā ʻōlelo aʻo i loaʻa i ka hoʻokuʻu o kēia manawa. Inā alakaʻi ʻo PR i ka hoʻonui ʻana i kēia helu, a laila ʻaʻole i hala ke code i ka ʻīpuka maikaʻi no ka loiloi static. Inā emi a loli ʻole ka helu o nā ʻōlelo aʻo, a laila ua hala.
  3. Ma ka hoʻokuʻu aʻe, e hoʻopaʻa hou ʻia ka helu o nā ʻōlelo luhi i ka metadata hoʻokuʻu.

No laila liʻiliʻi a paʻa (e like me ka hana ʻana o ka ratchet), e maʻalahi ka helu o nā ʻōlelo aʻo i ka ʻole. ʻOiaʻiʻo, hiki ke hoʻopunipuni ʻia ka ʻōnaehana ma ka hoʻokomo ʻana i kahi ʻōlelo aʻo hou, akā hoʻoponopono i ka haʻi. He mea maʻamau kēia, no ka mea ma kahi lōʻihi e hāʻawi i nā hopena: hoʻoponopono ʻia nā ʻōlelo aʻo, ma ke ʻano he kānāwai, ʻaʻole hoʻokahi, akā i loko o kahi hui o kekahi ʻano i ka manawa hoʻokahi, a ua hoʻopau koke ʻia nā ʻōlelo aʻo maʻalahi a pau.

Hōʻike kēia pakuhi i ka huina o nā ʻōlelo aʻo Checkstyle no ʻeono mahina o ka hana ʻana o ia "ratchet" ma kekahi o kā mākou papahana OpenSource. Ua emi iho ka helu o nā ʻōlelo aʻo ma ke ʻano o ka nui, a ua hana maoli kēia, e like me ka hoʻomohala huahana!

E hoʻokō i ka loiloi static i ke kaʻina hana, ma mua o ka hoʻohana ʻana iā ia e ʻimi ai i nā pōpoki

Ke hoʻohana nei au i kahi mana i hoʻololi ʻia o kēia ʻano hana, e helu kaʻawale ana i nā ʻōlelo aʻo e ka module papahana a me ka mea hana loiloi, ka hopena i kahi faila YAML me ke kūkulu ʻana i nā metadata e like me kēia:

celesta-sql:
  checkstyle: 434
  spotbugs: 45
celesta-core:
  checkstyle: 206
  spotbugs: 13
celesta-maven-plugin:
  checkstyle: 19
  spotbugs: 0
celesta-unit:
  checkstyle: 0
  spotbugs: 0

Ma kekahi ʻōnaehana CI kiʻekiʻe, hiki ke hoʻokō ʻia ka ratchet no nā mea hana loiloi static me ka hilinaʻi ʻole i nā plugins a me nā mea hana ʻekolu. Hoʻopuka kēlā me kēia mea kānana i kāna hōʻike ponoʻī ma kahi kikokikona maʻalahi a i ʻole XML maʻalahi i maʻalahi ke kālailai. ʻO nā mea a pau i koe, ʻo ke kākau ʻana i ka loiloi kūpono i ka palapala CI. Hiki iā ʻoe ke ʻike pehea e hoʻokō ʻia ai kēia i kā mākou papahana open source e pili ana iā Jenkins a me Artifactory maanei ai ole ia, maanei. Aia nā laʻana ʻelua i ka waihona ratchetlib: ʻano hana countWarnings() helu i nā huaʻōlelo xml i nā faila i hana ʻia e Checkstyle a me Spotbugs ma ke ʻano maʻamau, a compareWarningMaps() hoʻokō i ka ratchet hoʻokahi, hoʻolei i kahi hewa ke piʻi ka helu o nā ʻōlelo aʻo i kekahi o nā ʻāpana.

Hiki ke hoʻokō maikaʻi ʻia ka "ratchet" no ka nānā ʻana i ka spelling o nā manaʻo, kikokikona literals a me nā palapala me ka aspell. E like me kāu e ʻike ai, i ka nānā ʻana i ka spelling, ʻaʻole pololei nā huaʻōlelo a pau i ʻike ʻole ʻia i ka puke wehewehe ʻōlelo maʻamau; hiki ke hoʻohui ʻia i ka puke wehewehe mea hoʻohana. Inā ʻoe e hana i kahi puke wehewehe ʻōlelo maʻamau o ke kumu kumu o ka papahana, a laila hiki ke hoʻonohonoho ʻia ka ʻīpuka o ka spelling quality penei: holo aspell me kahi puke wehewehe kikoʻī a maʻamau. ʻaʻole pono ʻaʻole ʻike i nā kuhi hewa.

E pili ana i ke koʻikoʻi o ka hoʻoponopono ʻana i ka mana anala

I ka hopena, ʻo ka manaʻo e hoʻomaopopo ʻia ʻaʻole pehea ʻoe e hoʻokō ai i ka nānā ʻana i kāu pipeline hoʻouna, pono e hoʻopaʻa ʻia ka mana o ka analyer. Inā ʻoe e ʻae i ka mea ananala e hoʻopou koke, a laila i ka wā e hui pū ai i ka noi huki hou, hiki ke "pop up" nā hemahema hou ʻaʻole pili i nā hoʻololi code, akā pili i ka mea hiki i ka mea loiloi hou ke ʻimi i nā hemahema - a e uhaki kēia i kāu hana o ka ʻae ʻana i nā noi huki. ʻO ka hoʻomaikaʻi ʻana i kahi mea loiloi he hana noʻonoʻo. Eia nō naʻe, ʻo ka hoʻopaʻa paʻa ʻana o ka mana o kēlā me kēia ʻāpana hui he mea pono ia a he kumuhana no kahi kūkākūkā kaʻawale.

haʻina

  • ʻAʻole ʻike ʻia ka ʻikepili static no ʻoe a ʻaʻole e hoʻomaikaʻi i ka maikaʻi o kāu huahana ma muli o kahi noi hoʻokahi. Hiki ke loaʻa ka hopena maikaʻi i ka maikaʻi ma o kāna hoʻohana mau ʻana i ka wā o ka lawe ʻana.
  • ʻAʻole ʻo ka ʻimi ʻana i nā pōpoki ka hana nui o ka nānā ʻana; aia ka hapa nui o nā hana pono i nā mea hana opensource.
  • E hoʻokō i nā ʻīpuka maikaʻi e pili ana i nā hopena o ka loiloi static ma ka pae mua loa o ka pipeline hoʻopuka, me ka hoʻohana ʻana i kahi "ratchet" no ke code hoʻoilina.

kūmole

  1. Lawe mau
  2. A. Kudryavtsev: Hōʻike polokalamu: pehea e hoʻomaopopo ai he polokalamu polokalamu maikaʻi ʻoe hōʻike i nā ʻano hana like ʻole o ka nānā ʻana i nā code (ʻaʻole static wale nō!)

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka