ProHoster > Pūnaewele > Nā Administration > Pehea e hoʻokō ai i kahi loiloi code static i kahi papahana hoʻoilina me ka hoʻohaʻahaʻa ʻole i ka hui
Pehea e hoʻokō ai i kahi loiloi code static i kahi papahana hoʻoilina me ka hoʻohaʻahaʻa ʻole i ka hui
He mea maʻalahi ka hoʻāʻo ʻana i kahi helu helu helu static. Akā no ka hoʻokō ʻana, ʻoi loa i ka hoʻomohala ʻana i kahi papahana kahiko nui, pono ke akamai. Inā hana hewa ʻole, hiki i ka mea loiloi ke hoʻohui i ka hana, hoʻolohi i ka hoʻomohala ʻana, a hoʻohaʻahaʻa i ka hui. E kamaʻilio pōkole e pili ana i ke ʻano e hoʻokokoke pono ai i ka hoʻohui ʻana o ka loiloi static i ke kaʻina hoʻomohala a hoʻomaka e hoʻohana iā ia ma ke ʻano he ʻāpana o CI/CD.
Hōʻike
I kēia mau lā, ua huki ʻia koʻu manaʻo i ka hoʻolaha "E hoʻomaka me ka Static Analysis me ka ʻole o ka hoʻoluhi ʻana i ka hui". Ma kekahi ʻaoʻao, he ʻatikala maikaʻi kēia i kūpono e ʻike. 'Ōlelo mai ka ʻatikala hiki iā ʻoe ke ʻae i ka ʻaiʻē ʻenehana a hana wale i ke code hou, akā ʻaʻohe pane i ka mea e hana ai me kēia aie ʻenehana ma hope.
Hāʻawi kā mākou hui PVS-Studio i kāna ʻike ma kēia kumuhana. E nānā kākou i ke ʻano o ka pilikia o ka hoʻokō ʻana i ka helu helu helu static ma kahi mua, pehea e lanakila ai i kēia pilikia, a pehea e hoʻopau mālie ai i ka ʻaiʻē ʻenehana.
Nā pilikia
ʻAʻole paʻakikī ka hoʻomaka ʻana a ʻike i ke ʻano o ka hana ʻana o kahi mea hoʻoponopono static [1]. Hiki iā ʻoe ke ʻike i nā hewa hoihoi a i ʻole nā pilikia weliweli i ke code. Hiki iā ʻoe ke hoʻoponopono i kekahi mea, akā haʻalele ka nui o nā mea polokalamu.
Hoʻopuka nā mea loiloi static a pau i nā hopena maikaʻi ʻole. He hiʻohiʻona kēia o ke ʻano loiloi code static, a ʻaʻohe mea hiki ke hana ʻia. Ma ka hihia maʻamau, he pilikia hiki ʻole ke hoʻonā ʻia kēia, e like me ka mea i hōʻoia ʻia e ka theorem a Rice [2]. ʻAʻole kōkua nā algorithm aʻo mīkini [3]. ʻOiai inā ʻaʻole hiki i ke kanaka ke haʻi mau inā he hewa kēia a i ʻole kēlā code, a laila ʻaʻole pono ʻoe e manaʻo i kēia mai ka papahana :).
ʻAʻole pilikia nā hoʻopunipuni hoʻopunipuni inā ua hoʻonohonoho mua ʻia ka mea hoʻoponopono static:
Hoʻopau i nā hoʻonohonoho kānāwai pili ʻole;
Ua hoʻopau ʻia kekahi mau diagnostics pili ʻole;
Inā mākou e kamaʻilio e pili ana iā C a i ʻole C ++, a laila hoʻopaʻa ʻia nā macros i loaʻa nā hana kikoʻī e hōʻike ʻia ai nā ʻōlelo aʻo pono ʻole ma nā wahi a pau e hoʻohana ʻia ai nā macros;
Hōʻailona ʻia nā hana ponoʻī e hana i nā hana e like me nā hana ʻōnaehana (kona analogue memcpy ai ole ia, paʻi) [4];
Hoʻopau ʻia nā ʻōlelo maikaʻi ʻole me ka hoʻohana ʻana i nā manaʻo;
A pela aku.
I kēia hihia, hiki iā mākou ke manaʻo i kahi haʻahaʻa haʻahaʻa haʻahaʻa haʻahaʻa ma kahi o 10-15% [5]. Ma nā huaʻōlelo ʻē aʻe, ʻo 9 o 10 mau ʻōlelo aʻoaʻo e hōʻike ana i kahi pilikia maoli i ka code, a i ʻole ka liʻiliʻi loa "code ʻala ikaika." E ʻae, ʻoluʻolu loa kēia hiʻohiʻona, a he hoaaloha maoli ka mea hoʻoponopono.
ʻO kaʻoiaʻiʻo, ma kahi papahana nui, eʻokoʻa loa ke kiʻi mua. Hoʻopuka ka mea loiloi i nā haneli a i ʻole mau tausani o nā ʻōlelo aʻo no ke code hoʻoilina. ʻAʻole hiki ke hoʻomaopopo koke i kahi o kēia mau ʻōlelo aʻo e pili ana a ʻaʻole pono. He mea noʻonoʻo ke noho i lalo a hoʻomaka i ka hana ʻana i kēia mau ʻōlelo aʻo a pau, no ka mea, e pau ka hana nui i kēia hihia no nā lā a i ʻole pule. ʻO ka maʻamau, ʻaʻole hiki i kahi hui ke kūʻai i kēlā ʻano hiʻohiʻona. E nui nō hoʻi nā diffs e hōʻino i ka mōʻaukala hoʻololi. A ʻo ka hoʻoponopono wikiwiki ʻana i nā ʻāpana he nui i loko o ke code e hopena i nā typos hou a me nā hewa.
A ʻo ka mea nui loa, ʻo ia ʻano hana i ka hakakā ʻana i nā ʻōlelo aʻo he mea liʻiliʻi. E ʻae mai ka holo pono ʻana o ka papahana no nā makahiki he nui, ua hoʻoponopono ʻia ka hapa nui o nā hewa koʻikoʻi i loko. ʻAe, he kumukūʻai nui kēia mau hoʻoponopono, pono e hoʻopau ʻia, loaʻa nā manaʻo hoʻohana maikaʻi ʻole e pili ana i nā pōpoki, a pēlā aku. E kōkua ana ka mea anaana static e hoʻoponopono i ka nui o kēia mau hewa i ka pae coding, wikiwiki a maʻalahi. Akā i kēia manawa, hoʻokahi ala a i ʻole kekahi, ua hoʻoponopono ʻia kēia mau hewa, a ʻike nui ka mea anana i nā hewa koʻikoʻi ʻole i ka code kahiko. ʻAʻole hiki ke hoʻohana ʻia kēia code, hiki ke hoʻohana ʻole ʻia, a ʻaʻole i alakaʻi ka hewa i nā hopena ʻike. Malia paha ma kahi o ke aka mai ka pihi ke kala hewa, akā ʻaʻole ia e hoʻopilikia i ka hoʻohana ʻana o kekahi i ka huahana.
ʻOiaʻiʻo, ʻo nā hewa liʻiliʻi he mau hewa. A i kekahi manawa hiki i kahi kuhi ke hūnā i kahi nāwaliwali maoli. Eia naʻe, ʻo ka hāʻawi ʻana i nā mea āpau a me ka hoʻolilo ʻana i nā lā / pule e pili ana i nā hemahema i hōʻike ʻole ʻia e like me kahi manaʻo kānalua.
Nānā nā polokalamu polokalamu, nānā, nānā i kēia mau ʻōlelo aʻo a pau e pili ana i ka code hana kahiko ... A manaʻo lākou: hiki iā mākou ke hana me ka ʻole o ka nānā ʻana. E hele kāua e kākau i kekahi mau hana pono hou.
Ma ko lākou ʻano ponoʻī, pololei lākou. Manaʻo lākou he mea mua lākou e hoʻopau i kēia mau ʻōlelo luhi. Ma laila wale nō e loaʻa ai iā lākou ka pōmaikaʻi mai ka hoʻohana mau ʻana i ka code analyzer. Inā ʻaʻole, e hāʻule wale nā ʻōlelo aʻo hou i nā mea kahiko, ʻaʻohe mea e hoʻolohe iā lākou.
ʻO kēia ka hoʻohālikelike like me nā ʻōlelo aʻoaʻo compiler. ʻAʻole ia he kumu ʻole ko lākou paipai ʻana e mālama i ka helu o nā ʻōlelo aʻoaʻo ma ka 0. Inā he 1000 mau ʻōlelo aʻo, a laila i ka wā he 1001, ʻaʻohe mea nāna e hoʻolohe, ʻaʻole maopopo kahi e ʻimi ai i kēia ʻōlelo aʻo hou.
ʻO ka mea pōʻino loa i kēia moʻolelo, ʻo ia ke koi ʻia ʻoe e kekahi mai luna mai i kēia manawa e hoʻohana i ka loiloi code static. E hoʻohaʻahaʻa wale kēia i ka hui, no ka mea, mai ko lākou manaʻo e loaʻa hou ka paʻakikī bureaucratic e hele wale i ke ala. ʻAʻohe mea e nānā i nā hōʻike a ka mea hoʻoponopono, a ʻo ka hoʻohana ʻana a pau e "ma ka pepa". ʻO kēlā mau mea. ʻO ka maʻamau, kūkulu ʻia ka loiloi i loko o ke kaʻina DevOps, akā i ka hoʻomaʻamaʻa ʻaʻole pono kēia i kekahi. Ua lohe mākou i nā moʻolelo kikoʻī ma nā hale kūʻai mai ka poʻe i hele i ka ʻaha kūkā. Hiki i ia ʻike ke hoʻonāwaliwali i ka poʻe programmer mai ka hoʻohana ʻana i nā mea hana loiloi static no ka manawa lōʻihi, inā ʻaʻole mau loa.
Hoʻokō a hoʻopau i ka ʻaiʻē ʻenehana
ʻO ka ʻoiaʻiʻo, ʻaʻohe mea paʻakikī a makaʻu paha e pili ana i ka hoʻokomo ʻana i ka loiloi static a hiki i kahi papahana kahiko nui.
CI / CD
Eia kekahi, hiki ke hana koke i ka mea anaana i ke kaʻina hana hoʻomohala mau. No ka laʻana, aia ka PVS-Studio i nā pono no ka nānā pono ʻana i ka hōʻike ma ke ʻano āu e pono ai, a me nā hoʻolaha i nā mea hoʻomohala i kākau i nā ʻāpana pilikia o ke code. No ka poʻe makemake nui i ka hoʻokuʻu ʻana i ka PVS-Studio mai nā ʻōnaehana CI / CD, paipai wau e hoʻomaʻamaʻa ʻoe iā ʻoe iho me nā mea pili. pauku nā palapala a me nā ʻatikala:
Akā, e hoʻi kākou i ka hoʻopuka ʻana o ka nui o nā mea maikaʻi ʻole i nā pae mua o ka hoʻokō ʻana i nā mea hana loiloi code.
Hoʻoponopono i ka ʻaiʻē ʻenehana i kēia manawa a me ka hoʻoponopono ʻana i nā ʻōlelo aʻo hou
Hiki iā ʻoe ke aʻo i nā ʻōlelo aʻo hou i ʻike ʻia ma nā code hou a i ʻole nā mea i hoʻololi ʻia. ʻOkoʻa ka hoʻokō ʻana o kēia ʻano hana, akā ʻo ke ʻano like. Ma ka PVS-Studio static analyzer, ua hoʻokō ʻia kēia hana penei.
No ka hoʻomaka koke ʻana i ka hoʻohana ʻana i ka loiloi static, manaʻo mākou i nā mea hoʻohana PVS-Studio e hoʻohana i ka mīkini no ka hoʻopau nui ʻana i nā ʻōlelo aʻo.6]. Eia ka manao nui. Ua hoʻokuʻu ka mea hoʻohana i ka loiloi a loaʻa nā ʻōlelo aʻo he nui. ʻOiai ke ola nei kahi papahana i kūkulu ʻia no nā makahiki he nui, e hoʻomohala ana a loaʻa kālā, a laila ʻaʻole nui nā ʻōlelo aʻo i loko o ka hōʻike e hōʻike ana i nā hemahema koʻikoʻi. I nā huaʻōlelo ʻē aʻe, ua hoʻoponopono ʻia nā pōpoki koʻikoʻi i kekahi ala a i ʻole me ka hoʻohana ʻana i nā ala ʻoi aku ka maikaʻi a i ʻole mahalo i ka manaʻo mai nā mea kūʻai aku. No laila, hiki ke noʻonoʻo ʻia nā mea a pau i ʻike ʻia e ka mea anamanaʻo i kēia manawa, ʻaʻole hiki ke hoʻāʻo e hoʻopau koke.
Hiki iā ʻoe ke haʻi iā PVS-Studio e noʻonoʻo i kēia mau ʻōlelo aʻo i pili ʻole i kēia manawa (e mālama i ka aie ʻenehana no hope), a ʻaʻole ia e hōʻike hou iā lākou. Hoʻokumu ka mea hōʻike i kahi faila kūikawā kahi e mālama ai i ka ʻike e pili ana i nā hewa ʻaʻole hoihoi. A i kēia manawa e hoʻopuka ʻo PVS-Studio i nā ʻōlelo luhi wale nō no ka code hou a i hoʻololi ʻia paha. Eia kekahi, ua hoʻokō ʻia kēia mau mea me ke akamai. Inā, no ka laʻana, ua hoʻohui ʻia kahi laina hakahaka i ka hoʻomaka ʻana o ka faila code source, a laila maopopo ka mea ananely, ʻoiaʻiʻo, ʻaʻohe mea i loli, a e hoʻomau ʻia e noho mālie. Hiki ke hoʻokomo ʻia kēia faila markup i kahi ʻōnaehana mana mana. Nui ka faila, akā ʻaʻole pilikia kēia, no ka mea ʻaʻohe kumu o ka mālama pinepine ʻana.
I kēia manawa, e ʻike nā mea papahana a pau i nā ʻōlelo luhi e pili ana i nā code hou a i hoʻololi ʻia paha. No laila, hiki iā ʻoe ke hoʻomaka i ka hoʻohana ʻana i ka analyzer, e like me kā lākou e ʻōlelo ai, mai ka lā aʻe. A hiki iā ʻoe ke hoʻi i ka hōʻaiʻē ʻenehana ma hope, a hoʻoponopono mālie i nā hewa a hoʻonohonoho i ka analyzer.
No laila, ua hoʻoholo ʻia ka pilikia mua me ka hoʻokō ʻana o ka mea anana i kahi papahana kahiko nui. I kēia manawa e noʻonoʻo kākou i ka mea e hana ai me ka ʻaiʻē loea.
Hoʻoponopono ʻino a me refactorings
ʻO ka mea maʻalahi a maʻamau ka hoʻokaʻawale ʻana i kekahi manawa no ka nānā ʻana i nā ʻōlelo aʻoaʻo analyser i kāohi nui ʻia a hana mālie me lākou. Ma kahi e pono ai ʻoe e hoʻoponopono i nā hewa i ke code, ma kahi e pono ai ʻoe e refactor e haʻi i ka mea loiloi ʻaʻole pilikia ke code. Laʻana maʻalahi:
if (a = b)
Hoʻopiʻi ka hapa nui o nā mea hōʻuluʻulu C ++ a me nā mea loiloi e pili ana i ia code, no ka mea aia ke kiʻekiʻe o ko lākou makemake maoli e kākau (a == b). Akā, aia kahi ʻaelike i ʻōlelo ʻole ʻia, a ʻike pinepine ʻia kēia i loko o ka palapala, inā he mau pale hou, a laila manaʻo ʻia ua kākau ʻia e ka programmer ia code, a ʻaʻohe pono e hoʻohiki. No ka laʻana, i ka palapala PVS-Studio no ka diagnostics V559 (CWE-481) ua kakau maopopo ia keia laina e manaoia he pololei a palekana.
if ((a = b))
ʻO kekahi laʻana. Ua poina anei ia ma kēia code C++? wanaao ae ʻaʻole paha?
case A:
foo();
case B:
bar();
break;
E hoʻopuka ka mea hōʻike PVS-Studio i kahi ʻōlelo aʻo ma aneʻi V796 (CWE-484). ʻAʻole paha kēia he hewa, a laila pono ʻoe e hāʻawi i ka parser i kahi hōʻailona ma ka hoʻohui ʻana i ke ʻano [[ hāʻule ]] a i ʻole he laʻana __ʻano__((fallthrough)):
case A:
foo();
[[fallthrough]];
case B:
bar();
break;
Hiki ke ʻōlelo ʻia ʻaʻole e hoʻoponopono kēlā mau hoʻololi code i ka bug. ʻAe, he ʻoiaʻiʻo kēia, akā hana ʻelua mau mea pono. ʻO ka mea mua, hoʻopau ka hōʻike analyer i nā hopena maikaʻi ʻole. ʻO ka lua, ʻoi aku ka maʻalahi o ke code no ka poʻe i komo i kāna mālama. A he mea nui loa kēia! No kēia wale nō, pono e hana i nā refactorings liʻiliʻi e hoʻomaʻamaʻa a maʻalahi hoʻi ka mālama ʻana i ke code. No ka mea ʻaʻole maopopo i ka mea loiloi inā pono ka "break" a ʻaʻole paha, ʻaʻole maopopo ia i nā hoa polokalamu.
Ma kahi o ka hoʻoponopono ʻana i ka bug a me ka refactorings, hiki iā ʻoe ke kāohi pono i nā ʻōlelo aʻoaʻo hoʻopunipuni. Hiki ke hoʻopau ʻia kekahi mau diagnostics pili ʻole. No ka laʻana, manaʻo kekahi he mea ʻole ka ʻōlelo aʻo V550 e pili ana i ka hoʻohālikelike ʻana i nā waiwai lana/pālua. A hoʻokaʻawale kekahi iā lākou he mea nui a kūpono hoʻi e aʻo ʻia [7]. ʻO nā ʻōlelo aʻo i manaʻo ʻia he kūpono a ʻaʻole ia i ka hui hoʻomohala e hoʻoholo.
Aia kekahi mau ala ʻē aʻe e hoʻopau ai i nā leka hoʻopunipuni. No ka laʻana, ua ʻōlelo mua ʻia ka māka macro. ʻO kēia mau mea a pau i wehewehe ʻia ma ka palapala. ʻO ka mea nui loa, ʻo ka hoʻomaopopo ʻana inā ʻoe e hoʻokokoke mālie a me ka systematically e hana me nā hopena hoʻopunipuni, ʻaʻohe hewa iā lākou. ʻO ka hapa nui o nā ʻōlelo aʻo hoihoi ʻole e nalowale ma hope o ka hoʻonohonoho ʻana, a ʻo nā wahi wale nō e koi pono i ka noʻonoʻo pono a me kekahi mau hoʻololi i ke code e koe.
Eia kekahi, kōkua mau mākou i kā mākou mea kūʻai aku e hoʻonohonoho i ka PVS-Studio inā loaʻa kekahi pilikia. Eia kekahi, aia kekahi mau hihia i hoʻopau mākou iā mākou iho i nā ʻōlelo aʻo wahaheʻe a hoʻoponopono i nā hewa [8]. ʻO ka hihia wale nō, ua hoʻoholo wau e haʻi i kēia koho no ka hui lōʻihi hiki nō hoʻi :).
ʻO ke ʻano Ratchet
Aia kekahi ala hoihoi e hoʻomaikaʻi mālie i ka maikaʻi code ma ka hoʻopau ʻana i ka ʻōlelo aʻoaʻo static analyzer. ʻO ka laina lalo, hiki ke emi wale ka helu o nā ʻōlelo aʻo.
Hoʻopaʻa ʻia ka helu o nā ʻōlelo aʻo i hoʻopuka ʻia e ka mea hoʻoponopono static. Hoʻonohonoho ʻia ka ʻīpuka maikaʻi i kēia manawa hiki iā ʻoe ke komo i kahi code ʻaʻole e hoʻonui i ka nui o nā hana. ʻO ka hopena, hoʻomaka ke kaʻina hana o ka hoʻohaʻahaʻa haʻahaʻa ʻana i ka helu o nā alarms ma ka hoʻoponopono ʻana i ka mea anana a me ka hoʻoponopono ʻana i nā hewa.
ʻOiai inā makemake ke kanaka e hoʻopunipuni liʻiliʻi a hoʻoholo e hele i ka ʻīpuka maikaʻi ʻaʻole ma ka hoʻopau ʻana i nā ʻōlelo aʻo i kāna code hou, akā ma ka hoʻomaikaʻi ʻana i ke code ʻaoʻao kahiko, ʻaʻole ia he mea weliweli. Hoʻokahi like, huli ka ratchet i hoʻokahi ʻaoʻao, a e emi mālie ka helu o nā hemahema. ʻOiai inā ʻaʻole makemake ke kanaka e hoʻoponopono i kāna mau hemahema hou, pono ʻo ia e hoʻomaikaʻi i kekahi mea ma ke code e pili ana. I kekahi manawa, pau nā ala maʻalahi e hōʻemi i ka helu o nā ʻōlelo aʻo, a hiki mai kahi manawa e hoʻoponopono ʻia ai nā pōpoki maoli.
He hōʻike pū ka mea kākau o ka ʻatikala e pili ana i kēia kumuhana: "Ke kālailai kūmau mau".
hopena
Manaʻo wau ma hope o kēia ʻatikala, e ʻae ʻia ka poʻe heluhelu i nā mea hana loiloi static a makemake lākou e hoʻokō iā lākou i ke kaʻina hana. Inā he mau nīnau kāu, mākaukau mau mākou aʻo nā mea hoʻohana o kā mākou static analyzer PVS-Studio a kōkua me kāna hoʻokō.
Aia kekahi mau kānalua maʻamau e pili ana inā hiki ke maʻalahi a me ka pono o ka loiloi static. Ua ho'āʻo wau e hoʻopau i ka hapa nui o kēia mau kānalua i ka paʻi "Nā kumu e hoʻokomo i ka PVS-Studio static code analyzer i loko o ke kaʻina hana" [9].
Mahalo no kou noonoo a hele mai скачать a ho'āʻo i ka PVS-Studio analyzer.