Yadda ake aiwatar da na'urar tantance lambar a tsaye a cikin aikin gada ba tare da lalata ƙungiyar ba

Yadda ake aiwatar da na'urar tantance lambar a tsaye a cikin aikin gada ba tare da lalata ƙungiyar ba
Yana da sauƙi a gwada na'urar tantance lambar a tsaye. Amma don aiwatar da shi, musamman wajen haɓaka babban tsohon aikin, yana buƙatar fasaha. Idan an yi ba daidai ba, mai nazari na iya ƙara aiki, rage jinkirin ci gaba, da kuma inganta ƙungiyar. Bari mu ɗan yi magana game da yadda za a kusanci haɗin kai tsaye cikin tsarin ci gaba kuma mu fara amfani da shi azaman ɓangare na CI/CD.

Gabatarwar

Kwanan nan hankalina ya karkata ga littafin"Farawa Tare da Nazari Tsaye Ba tare da Shafar Ƙungiyar ba"A gefe guda, wannan labari ne mai kyau wanda ya dace da saninsa. A daya hannun kuma, a ganina har yanzu bai ba da cikakkiyar amsa kan yadda za a aiwatar da bincike mai mahimmanci a cikin wani aiki mai yawa ba. Labarin ya ce Kuna iya karɓar bashin fasaha kuma kuyi aiki kawai akan sabon lambar, amma babu amsar abin da za ku yi da wannan bashin fasaha daga baya.

Ƙungiyarmu ta PVS-Studio tana ba da ra'ayi akan wannan batu. Bari mu dubi yadda matsalar aiwatar da a tsaye code analyzer taso a farkon wuri, yadda za a shawo kan wannan matsala, da kuma yadda za a warware a hankali a hankali bashi fasaha.

Batutuwa

Yawancin lokaci ba shi da wahala don ƙaddamarwa da ganin yadda mai nazari a tsaye yake aiki [1]. Kuna iya ganin kurakurai masu ban sha'awa ko ma ban tsoro yuwuwar lahani a cikin lambar. Kuna iya ma gyara wani abu, amma sai yawancin masu shirye-shirye sun daina.

Duk masu bincike na tsaye suna samar da ingantaccen inganci. Wannan siffa ce ta hanyar bincike na lambar a tsaye, kuma babu abin da za a iya yi game da shi. Gabaɗaya, wannan matsala ce da ba za a iya warware ta ba, kamar yadda ka'idar Rice ta tabbatar [2]. Algorithms na koyon injin ba zai taimaka ba [3]. Ko da koda yaushe mutum ba zai iya faɗi ko wannan ko waccan lambar ba daidai ba ne, to bai kamata ku yi tsammanin wannan daga shirin ba :).

Ƙarya tabbatacce ba matsala ba ne idan an riga an saita na'urar tantancewa:

  • Kashe tsarin ƙa'idodin ƙa'idodin da bai dace ba;
  • An kashe wasu cututtukan da ba su da mahimmanci;
  • Idan muna magana ne game da C ko C++, to, an sanya macros alama waɗanda ke ɗauke da takamaiman gini waɗanda ke haifar da faɗakarwa mara amfani a duk wuraren da ake amfani da irin waɗannan macro;
  • Ayyukan nasu suna da alamar waɗanda ke yin ayyuka kama da ayyukan tsarin (analon nasa memcpy ko bugawa) [4];
  • Ƙarya tabbatacce an kashe musamman ta amfani da sharhi;
  • Da sauransu.

A wannan yanayin, zamu iya tsammanin ƙarancin ƙimar ƙimar ƙarya na kusan 10-15% [5]. A wasu kalmomi, 9 cikin 10 na gargadin masu nazari zai nuna matsala ta gaske a cikin lambar, ko aƙalla "lambar kamshi mai ƙarfi." Na yarda, wannan yanayin yana da daɗi matuƙa, kuma mai nazari abokin mai shirye-shirye ne na gaske.

Yadda ake aiwatar da na'urar tantance lambar a tsaye a cikin aikin gada ba tare da lalata ƙungiyar ba
A gaskiya ma, a cikin babban aikin, hoton farko zai zama daban-daban. Mai nazarin yana ba da ɗaruruwa ko dubunnan gargaɗi don lambar gado. Ba shi yiwuwa a hanzarta fahimtar wanene cikin waɗannan gargaɗin ya dace kuma waɗanda ba su da kyau. Ba daidai ba ne a zauna a fara magance duk waɗannan gargaɗin, tun da babban aikin a cikin wannan yanayin zai tsaya na kwanaki ko makonni. Yawanci, ƙungiya ba za ta iya samun irin wannan yanayin ba. Hakanan za a sami ɗimbin bambance-bambancen da ke lalata tarihin canji. Kuma saurin gyare-gyaren taro da yawa a cikin lambar ba makawa zai haifar da sabbin rubuce-rubuce da kurakurai.

Kuma mafi mahimmanci, irin wannan ƙwarewa a cikin yaki da gargadi ba shi da ma'ana. Yarda da cewa tun da aikin ya yi nasara shekaru da yawa, an riga an gyara yawancin kurakuran da ke cikinsa. Ee, waɗannan gyare-gyaren sun yi tsada sosai, dole ne a gyara su, sun karɓi ra'ayin mai amfani mara kyau game da kwari, da sauransu. Mai nazari a tsaye zai taimaka gyara yawancin waɗannan kurakurai a matakin coding, cikin sauri da arha. Amma a halin yanzu, wata hanya ko wata, waɗannan kurakuran an gyara su, kuma mai nazari ya fi gano kurakuran da ba su da mahimmanci a cikin tsohuwar lambar. Ba za a iya amfani da wannan lambar ba, ana iya amfani da ita da wuya sosai, kuma kuskuren da ke cikinta bazai haifar da sakamako mai ma'ana ba. Wataƙila wani wuri inuwa daga maɓallin shine launi mara kyau, amma wannan baya tsoma baki tare da amfani da kowa na samfurin.

Tabbas, ko da ƙananan kurakurai har yanzu kurakurai ne. Kuma wani lokacin kuskure na iya ɓoye ainihin rauni. Koyaya, barin komai da ciyar da kwanaki/makonni don magance lahani waɗanda da kyar suke bayyana kansu suna kama da ra'ayi mai ban mamaki.

Masu shirye-shirye suna duba, duba, duba duk waɗannan gargaɗin game da tsohuwar lambar aiki ... Kuma suna tunanin: za mu iya yin ba tare da bincike na tsaye ba. Bari mu je rubuta wasu sabbin ayyuka masu amfani.

A nasu hanyar, suna da gaskiya. Suna tunanin cewa da farko dole ne su kawar da duk waɗannan gargaɗin. Sa'an nan ne kawai za su iya amfana daga yin amfani da na'urar nazari akai-akai. In ba haka ba, sababbin gargaɗi za su nutse a cikin tsofaffi, kuma ba wanda zai kula da su.

Wannan kwatanci ɗaya ne da gargaɗin mai tarawa. Ba tare da dalili ba ne suka ba da shawarar a ajiye adadin masu tarawa a 0. Idan akwai gargaɗin 1000, to idan akwai 1001, babu wanda zai kula da shi, kuma ba a san inda za a nemi wannan sabon gargaɗin ba.

Yadda ake aiwatar da na'urar tantance lambar a tsaye a cikin aikin gada ba tare da lalata ƙungiyar ba
Mafi munin abin da ke cikin wannan labarin shine idan wani daga sama a wannan lokacin ya tilasta muku yin amfani da binciken lambobi a tsaye. Wannan kawai zai rage wa ƙungiyar rauni ne, tunda daga mahangarsu za a sami ƙarin ƙaƙƙarfan tsarin mulki wanda kawai ke shiga hanya. Babu wanda zai kalli rahotanni na masu nazari, kuma duk amfani zai kasance kawai "a kan takarda". Wadancan. A bisa ka'ida, an gina bincike a cikin tsarin DevOps, amma a aikace wannan baya amfanar kowa. Mun ji cikakkun labarai a rumfuna daga mahalarta taron. Irin wannan ƙwarewar na iya hana masu shirye-shirye yin amfani da kayan aikin bincike na tsaye na dogon lokaci, idan ba har abada ba.

Aiwatar da kawar da bashi na fasaha

A gaskiya ma, babu wani abu mai wuya ko ban tsoro game da gabatar da bincike a tsaye ko da a cikin babban tsohon aikin.

CI / CD

Bugu da ƙari, ana iya sanya mai nazari nan da nan wani ɓangare na ci gaba da ci gaba. Misali, rarraba PVS-Studio yana ƙunshe da kayan aiki don dacewa da duba rahoton cikin tsarin da kuke buƙata, da sanarwa ga masu haɓakawa waɗanda suka rubuta ɓangarori masu matsala na lambar. Ga waɗanda suka fi sha'awar ƙaddamar da PVS-Studio daga tsarin CI/CD, Ina ba da shawarar ku san kanku da abubuwan da suka dace. sashe takardu da jerin labarai:

Amma bari mu koma ga batun babban adadin ƙididdiga na ƙarya a farkon matakai na aiwatar da kayan aikin bincike na lamba.

Gyara bashin fasaha na yanzu da kuma magance sababbin gargadi

Masu nazari na kasuwanci na zamani suna ba ku damar yin nazarin sabbin gargaɗi kawai waɗanda ke bayyana a cikin sabon ko canza lamba. Aiwatar da wannan tsari ya bambanta, amma ainihin abu ɗaya ne. A cikin PVS-Studio static analyzer, ana aiwatar da wannan aikin kamar haka.

Don fara amfani da bincike na tsaye cikin sauri, muna ba da shawarar masu amfani da PVS-Studio suyi amfani da tsarin don kawar da faɗakarwa.6]. Babban ra'ayi shine mai zuwa. Mai amfani ya ƙaddamar da mai nazari kuma ya karɓi gargaɗi da yawa. Tun da aikin da aka yi a cikin shekaru masu yawa yana da rai, haɓakawa da samun kuɗi, to, mai yiwuwa ba za a sami gargadi da yawa a cikin rahoton da ke nuna lahani mai mahimmanci ba. A wasu kalmomi, an riga an gyara kurakurai masu mahimmanci ta hanya ɗaya ko wata ta amfani da hanyoyi masu tsada ko godiya ga amsawa daga abokan ciniki. Sabili da haka, duk abin da mai nazari ya gano a halin yanzu ana iya la'akari da bashin fasaha, wanda ba shi da amfani don ƙoƙarin kawar da nan da nan.

Kuna iya gaya wa PVS-Studio don la'akari da waɗannan gargaɗin da ba su da mahimmanci a yanzu (ajiye bashin fasaha na gaba), kuma ba zai ƙara nuna su ba. Mai nazari yana ƙirƙirar fayil na musamman inda yake adana bayanai game da kurakurai waɗanda basu da ban sha'awa tukuna. Kuma yanzu PVS-Studio zai ba da gargadi kawai don sabon ko canza lambar. Bugu da ƙari, duk waɗannan ana aiwatar da su cikin wayo. Idan, alal misali, an ƙara layin mara komai a farkon fayil ɗin lambar tushe, to, mai nazarin ya fahimci cewa, a zahiri, babu abin da ya canza, kuma zai ci gaba da yin shiru. Ana iya sanya wannan fayil ɗin alama a cikin tsarin sarrafa sigar. Fayil ɗin yana da girma, amma wannan ba matsala ba ne, tun da babu wani amfani a adana shi akai-akai.

Yanzu duk masu shirye-shirye za su ga gargaɗin da ke da alaƙa da sabo ko canza code kawai. Don haka, zaku iya fara amfani da mai nazari, kamar yadda suke faɗa, daga rana mai zuwa. Kuma zaka iya komawa zuwa bashin fasaha daga baya, kuma a hankali gyara kurakurai kuma saita mai nazari.

Don haka, an warware matsalar farko tare da aiwatar da mai nazari a cikin babban tsohon aikin. Yanzu bari mu gano abin da za a yi da bashin fasaha.

Gyaran kwaro da sake gyarawa

Mafi sauƙaƙa kuma mafi dabi'a shine keɓance ɗan lokaci don nazarin faɗakarwar masu nazari da aka danne kuma a hankali a magance su. Wani wuri ya kamata ka gyara kurakurai a cikin lambar, wani wuri ya kamata ka sake gyara don gaya wa mai nazarin cewa lambar ba ta da matsala. Misali mai sauƙi:

if (a = b)

Yawancin masu tara C++ da masu nazari suna kokawa game da irin wannan lambar, tunda akwai yuwuwar da gaske suke son rubutawa. (ba = b). Amma akwai yarjejeniyar da ba a bayyana ba, kuma yawanci ana lura da wannan a cikin takardun, cewa idan akwai ƙarin ƙididdiga, to ana la'akari da cewa mai shirye-shiryen ya rubuta irin wannan lambar da gangan, kuma babu buƙatar yin rantsuwa. Misali, a cikin takaddun PVS-Studio don bincike V559 (CWE-481) an rubuta a fili cewa za a yi la'akari da layin mai zuwa daidai kuma mai aminci:

if ((a = b))

Wani misali. An manta a cikin wannan lambar C++? hutu ko a'a?

case A:
  foo();
case B:
  bar();
  break;

Mai nazarin PVS-Studio zai ba da gargaɗi a nan V796 (CWE-484). Wannan bazai zama kuskure ba, a cikin wannan yanayin ya kamata ku ba mai binciken kwatance ta ƙara sifa [[fadi] ko misali __sifa__((faduwa)):

case A:
  foo();
  [[fallthrough]];
case B:
  bar();
  break;

Ana iya cewa irin waɗannan canje-canjen lambar ba su gyara kwaro ba. Haka ne, wannan gaskiya ne, amma yana yin abubuwa biyu masu amfani. Da fari dai, rahoton na nazari yana kawar da abubuwan da ba su dace ba. Na biyu, lambar ta zama mafi fahimta ga mutanen da ke da hannu wajen kiyaye ta. Kuma wannan yana da mahimmanci! Don wannan kadai, yana da daraja aiwatar da ƙananan gyare-gyare don ƙara bayyana lambar kuma mafi sauƙi don kiyayewa. Tun da mai nazarin bai fahimci ko ana buƙatar "hutu" ko a'a ba, kuma ba za a sani ba ga abokan shirye-shirye.

Baya ga gyare-gyaren kwaro da sake gyarawa, zaku iya musamman murkushe gargaɗin nazartar ƙarya a fili. Ana iya kashe wasu cututtukan da ba su da mahimmanci. Alal misali, wani yana tunanin gargaɗin ba shi da ma'ana V550 game da kwatanta ƙima mai iyo/biyu. Wasu kuma suna sanya su a matsayin masu mahimmanci kuma sun cancanci karatu [7]. Waɗanne gargaɗin da aka yi la'akari da su sun dace kuma waɗanda ba su dace da ƙungiyar haɓaka don yanke shawara ba.

Akwai wasu hanyoyi don murkushe faɗakarwar ƙarya. Misali, an ambaci alamar macro a baya. Duk waɗannan an bayyana su dalla-dalla a cikin takaddun. Abu mafi mahimmanci shine fahimtar cewa idan ka sannu a hankali kuma a hankali ku kusanci aiki tare da tabbataccen ƙarya, babu wani abu mara kyau tare da su. Yawancin gargadin da ba su da sha'awa suna ɓacewa bayan daidaitawa, kuma wurare ne kawai waɗanda ke buƙatar yin nazari da gaske kuma wasu canje-canje a cikin lambar sun rage.

Hakanan, koyaushe muna taimaka wa abokan cinikinmu su kafa PVS-Studio idan wata matsala ta taso. Bugu da ƙari, akwai lokuta lokacin da mu kanmu muka kawar da gargaɗin ƙarya kuma mun gyara kurakurai [8]. Kawai idan, na yanke shawarar ambata cewa wannan zaɓi don haɓaka haɗin gwiwa kuma yana yiwuwa :).

Hanyar Ratchet

Akwai wata hanya mai ban sha'awa don haɓaka ingancin lambar a hankali ta hanyar kawar da faɗakarwar mai nazari a tsaye. Maganar ƙasa ita ce adadin gargaɗin na iya raguwa kawai.

Yadda ake aiwatar da na'urar tantance lambar a tsaye a cikin aikin gada ba tare da lalata ƙungiyar ba

An yi rikodin adadin gargaɗin da mai binciken a tsaye ya bayar. An saita kofa mai inganci ta yadda a yanzu zaku iya shigar da lambar da ba ta ƙara yawan ayyukan ba. A sakamakon haka, tsarin rage yawan ƙararrawa a hankali yana farawa ta hanyar daidaita mai nazari da gyara kurakurai.

Ko da mutum yana so ya yi ɗan zamba kuma ya yanke shawarar wucewa mai inganci ba ta hanyar kawar da gargaɗi a cikin sabon code ɗinsa ba, amma ta hanyar inganta tsohuwar lambar ɓangare na uku, wannan ba abin tsoro bane. Duk iri ɗaya, ratchet yana jujjuyawa a hanya ɗaya, kuma sannu a hankali adadin lahani zai ragu. Ko da mutum ba ya so ya gyara nasa sabon lahani, zai kasance ya inganta wani abu a cikin code makwabta. A wani lokaci, hanyoyi masu sauƙi don rage adadin gargaɗin sun ƙare, kuma akwai lokacin da za a gyara kuskuren gaske.

An kwatanta wannan hanyar dalla-dalla a cikin labarin mai ban sha'awa ta Ivan Ponomarev "Aiwatar da bincike a tsaye a cikin tsari, maimakon neman kwari tare da shi", wanda nake ba da shawarar karantawa ga duk mai sha'awar inganta ingancin lambar.

Marubucin labarin kuma yana da rahoto kan wannan batu: "Ci gaba da bincike a tsaye".

ƙarshe

Ina fatan cewa bayan wannan labarin, masu karatu za su fi yarda da kayan aikin bincike na tsaye kuma za su so su aiwatar da su a cikin tsarin ci gaba. Idan kuna da tambayoyi, koyaushe muna shirye shawara masu amfani da PVS-Studio mai nazarin mu kuma yana taimakawa tare da aiwatar da shi.

Akwai wasu shakku na yau da kullun game da ko tsayayyen bincike na iya zama dacewa da amfani da gaske. Na yi ƙoƙarin kawar da mafi yawan waɗannan shakku a cikin littafin "Dalilan gabatar da PVS-Studio static code analyzer a cikin tsarin ci gaba" [9].

Na gode da kulawarku kuma ku zo скачать kuma gwada PVS-Studio analyzer.

Ƙarin hanyoyin haɗin gwiwa

  1. Andrey Karpov. Ta yaya zan iya hanzarta ganin gargaɗi masu ban sha'awa waɗanda mai nazarin PVS-Studio ke samarwa don lambar C da C ++?
  2. Wikipedia. Ka'idar Shinkafa.
  3. Andrey Karpov, Victoria Khanieva. Yin amfani da koyon na'ura a cikin bincike a tsaye na lambar tushen shirin.
  4. PVS-Studio. Takaddun bayanai. Ƙarin saitunan bincike.
  5. Andrey Karpov. Halayen PVS-Studio analyzer ta amfani da misalin EFL Core Libraries, 10-15% tabbataccen ƙarya..
  6. PVS-Studio. Takaddun bayanai. Matsakaicin taro na saƙonnin nazari.
  7. Ivan Andryashin. Game da yadda muka gwada bincike a tsaye akan aikinmu na na'urar kwaikwayo ta ilimi ta X-ray endovascular tiyata.
  8. Pavel Eremeev, Svyatoslav Razmyslov. Yadda ƙungiyar PVS-Studio ta inganta lambar Injin mara gaskiya.
  9. Andrey Karpov. Dalilan gabatar da PVS-Studio mai nazarin lambar a tsaye cikin tsarin ci gaba.

Yadda ake aiwatar da na'urar tantance lambar a tsaye a cikin aikin gada ba tare da lalata ƙungiyar ba

Idan kuna son raba wannan labarin tare da masu sauraron Ingilishi, da fatan za a yi amfani da hanyar haɗin fassarar: Andrey Karpov. Yadda za a gabatar da na'urar tantance lambobin a tsaye a cikin aikin gado kuma ba don sanyaya gwiwar ƙungiyar ba.

source: www.habr.com

Add a comment