Ipatuman ang static nga pagtuki sa proseso, imbes nga gamiton kini aron makit-an ang mga bug

Naaghat ko nga isulat kini nga artikulo sa daghang mga materyales sa static nga pagtuki nga labi nga naabut sa akong atensyon. Una, kini PVS-studio nga blog, nga aktibong nagpasiugda sa iyang kaugalingon sa Habré sa tabang sa mga pagrepaso sa mga sayup nga nakit-an sa ilang himan sa mga proyekto sa open source. Bag-o lang gipatuman ang PVS-studio suporta sa Java, ug, siyempre, ang mga nag-develop sa IntelliJ IDEA, kansang built-in analisador tingali ang labing abante alang sa Java karon, dili makapalayo.

Kung nagbasa sa ingon nga mga pagsusi, nakuha nimo ang pagbati nga naghisgot kami bahin sa usa ka magic elixir: i-press ang buton, ug ania kini - usa ka lista sa mga depekto sa atubangan sa imong mga mata. Mopatim-aw nga samtang nag-uswag ang mga analisador, daghang mga bug ang awtomatikong makit-an, ug ang mga produkto nga gi-scan sa kini nga mga robot mahimong labi ka maayo ug labi ka maayo, nga wala’y bisan unsang paningkamot sa among bahin.

Apan walay mga magic elixir. Gusto nakong hisgutan kung unsa ang kasagarang wala gihisgutan sa mga post sama sa "ania ang mga butang nga makit-an sa atong robot": kung unsa ang dili mahimo sa mga analista, unsa ang ilang tinuud nga papel ug lugar sa proseso sa paghatud sa software, ug kung giunsa kini ipatuman sa husto. .

Ipatuman ang static nga pagtuki sa proseso, imbes nga gamiton kini aron makit-an ang mga bug
Ratchet (tinubdan: wikipedia).

Unsa ang dili mahimo sa mga static analisador

Unsa ang pagtuki sa source code, gikan sa praktikal nga punto sa panglantaw? Naghatag kami og pipila ka source code isip input, ug isip output, sa hamubo nga panahon (mas mubo kay sa nagdagan nga mga pagsulay) makakuha kami og pipila ka impormasyon mahitungod sa among sistema. Ang sukaranan ug mathematically dili mabuntog nga limitasyon mao nga kita makakuha lamang sa usa ka medyo pig-ot nga klase sa impormasyon sa niini nga paagi.

Ang labing inila nga pananglitan sa usa ka problema nga dili masulbad gamit ang static analysis mao ang problema sa pagsira: Kini usa ka teorama nga nagpamatuod nga imposible ang paghimo sa usa ka kinatibuk-ang algorithm nga makatino gikan sa gigikanan nga code sa usa ka programa kung kini molihok o matapos sa usa ka limitado nga oras. Ang extension niini nga theorem mao ang Ang teorama ni Rice, nga nag-ingon nga alang sa bisan unsa nga dili-trivial nga kabtangan sa makalkula nga mga gimbuhaton, ang pagtino kung ang usa ka arbitraryong programa nag-evaluate sa usa ka function nga adunay ingon nga kabtangan usa ka algorithm nga dili masulbad nga problema. Pananglitan, imposible ang pagsulat sa usa ka analista nga makatino gikan sa bisan unsang source code kung ang programa nga gi-analisar usa ka pagpatuman sa usa ka algorithm nga nagkalkula, ingnon ta, ang pag-squaring sa usa ka integer.

Busa, ang pag-andar sa mga static analisador adunay dili mabuntog nga mga limitasyon. Ang usa ka static analyzer dili gayud makamatikod sa tanan nga mga kaso sama sa, pananglitan, ang panghitabo sa usa ka "null pointer exception" sa mga pinulongan nga nagtugot sa bili sa null, o sa tanan nga mga kaso sa pagtino sa panghitabo sa usa ka " attribute not found" sa dinamikong gi-type nga mga pinulongan. Ang tanan nga mahimo sa labing abante nga static analyzer mao ang pagpasiugda sa mga espesyal nga kaso, ang gidaghanon niini, taliwala sa tanan nga posible nga mga problema sa imong gigikanan nga code, mao, nga wala’y pagpasobra, usa ka tinulo sa dagat.

Ang static nga pagtuki dili bahin sa pagpangita sa mga bug

Gikan sa ibabaw, ang konklusyon mosunod: static analysis dili usa ka paagi sa pagkunhod sa gidaghanon sa mga depekto sa usa ka programa. Ako mangahas sa pag-ingon: sa diha nga i-apply sa imong proyekto sa unang higayon, kini makakaplag "makapaikag" nga mga dapit sa code, apan, lagmit, kini dili makakaplag sa bisan unsa nga mga depekto nga makaapekto sa kalidad sa imong programa.

Ang mga pananglitan sa mga depekto nga awtomatik nga nakit-an sa mga tig-analyze makapahingangha, apan dili nato kalimtan nga kini nga mga pananglitan nakit-an pinaagi sa pag-scan sa usa ka dako nga hugpong sa dagkong mga codebase. Sa parehas nga prinsipyo, ang mga hacker nga adunay higayon nga sulayan ang daghang yano nga mga password sa daghang mga account sa katapusan makit-an ang mga account nga adunay yano nga password.

Nagpasabot ba kini nga dili angay gamiton ang static analysis? Siyempre dili! Ug alang sa eksakto nga parehas nga hinungdan nga angayan nga susihon ang matag bag-ong password aron masiguro nga kini gilakip sa lista sa paghunong sa "yano" nga mga password.

Ang static nga pagtuki labaw pa sa pagpangita sa mga bug

Sa tinuud, ang mga problema nga praktikal nga nasulbad pinaagi sa pag-analisar mas lapad. Sa tinuud, sa kinatibuk-an, ang static nga pagtuki mao ang bisan unsang pag-verify sa mga source code nga gihimo sa wala pa kini gilansad. Ania ang pipila ka mga butang nga imong mahimo:

  • Pagsusi sa estilo sa coding sa pinakalapad nga diwa sa pulong. Naglakip kini sa duha nga pagsusi sa pag-format, pagpangita alang sa paggamit sa mga walay sulod/dugang nga parentheses, pagtakda sa mga threshold sa mga sukatan sama sa gidaghanon sa mga linya/cyclomatic complexity sa usa ka pamaagi, ug uban pa - bisan unsa nga posibleng makababag sa pagkabasa ug pagpadayon sa code. Sa Java, ang ingon nga himan mao ang Checkstyle, sa Python - flake8. Ang mga programa niini nga klase kasagaran gitawag nga "linters."
  • Dili lamang executable code ang mahimong analisahon. Ang mga resource file sama sa JSON, YAML, XML, .properties mahimo (ug kinahanglan!) awtomatik nga susihon alang sa balido. Pagkahuman, mas maayo nga mahibal-an nga ang istruktura sa JSON nabuak tungod sa pipila nga wala gipares nga mga kinutlo sa usa ka sayo nga yugto sa awtomatik nga pag-verify sa Pull Request kaysa sa panahon sa pagsulay o pagdagan sa oras? Ang angay nga mga himan anaa: e.g. YAMLlint, JSONLint.
  • Ang pag-compile (o pag-parse alang sa dinamikong programming language) usa usab ka matang sa static analysis. Sa kinatibuk-an, ang mga compiler makahimo sa paghimo og mga pasidaan nga nagpakita sa mga problema sa kalidad sa source code ug dili angay ibaliwala.
  • Usahay ang pag-compile labaw pa sa pag-compile sa executable code. Pananglitan, kung ikaw adunay dokumentasyon sa format AsciiDoctor, unya sa higayon nga himoon kini nga HTML/PDF ang AsciiDoctor handler (Maven nga plugin) mahimong mag-isyu og mga pasidaan, pananglitan, mahitungod sa mga naguba nga internal links. Ug kini usa ka maayong rason nga dili dawaton ang Paghangyo sa Pagbitad nga adunay mga pagbag-o sa dokumentasyon.
  • Ang pagsusi sa spell kay usa usab ka matang sa static analysis. Utility aspell makahimo sa pagsusi sa spelling dili lamang sa dokumentasyon, kondili usab sa mga source code sa programa (komento ug literal) sa lain-laing mga programming language, lakip ang C/C++, Java ug Python. Ang sayop sa spelling sa user interface o dokumentasyon kay depekto usab!
  • Mga pagsulay sa pag-configure (mahitungod sa kung unsa kini - tan-awa. kini и kini reports), bisan tuod gipatuman sa usa ka unit test runtime sama sa pytest, sa pagkatinuod usa usab ka matang sa static nga pagtuki, tungod kay wala sila magpatuman sa mga source code atol sa ilang pagpatuman.

Sama sa imong nakita, ang pagpangita sa mga bug sa kini nga lista adunay labing gamay nga hinungdanon nga papel, ug ang tanan magamit pinaagi sa paggamit sa libre nga mga himan sa open source.

Hain niining mga matang sa static analysis ang angay nimong gamiton sa imong proyekto? Siyempre, mas daghan ang mas maayo! Ang nag-unang butang mao ang pagpatuman niini sa husto, nga pagahisgutan pa.

Ang pipeline sa pagpadala ingon usa ka multi-stage nga filter ug static nga pagtuki ingon una nga yugto niini

Ang klasiko nga metapora alang sa padayon nga panagsama usa ka pipeline diin ang mga pagbag-o sa pagdagayday, gikan sa mga pagbag-o sa source code hangtod sa pagpadala hangtod sa produksiyon. Ang standard nga han-ay sa mga yugto niini nga pipeline ingon niini:

  1. static nga pagtuki
  2. kompilasyon
  3. mga pagsulay sa yunit
  4. mga pagsulay sa panagsama
  5. Mga pagsulay sa UI
  6. manual check

Ang mga pagbag-o nga gisalikway sa Nth stage sa pipeline wala ibalhin sa stage N+1.

Ngano nga kini gyud nga paagi ug dili kung dili? Sa testing nga bahin sa pipeline, ang mga tester makaila sa iladong testing pyramid.

Ipatuman ang static nga pagtuki sa proseso, imbes nga gamiton kini aron makit-an ang mga bug
Pagsulay sa piramide. Tinubdan: nga artikulo Martin Fowler.

Sa ubos niini nga piramide mao ang mga pagsulay nga mas sayon ​​isulat, mas paspas nga ipatuman, ug walay kalagmitan nga mapakyas. Busa, kinahanglan nga adunay daghan kanila, kinahanglan nga magtabon sila sa dugang nga code ug ipatuman una. Sa ibabaw sa piramide, ang kaatbang mao ang tinuod, mao nga ang gidaghanon sa integration ug UI nga mga pagsulay kinahanglan nga pagkunhod sa gikinahanglan nga minimum. Ang tawo sa kini nga kadena mao ang labing mahal, hinay ug dili kasaligan nga kapanguhaan, mao nga naa siya sa katapusan ug naghimo lamang sa trabaho kung ang nangaging mga yugto wala’y nakit-an nga mga depekto. Bisan pa, ang parehas nga mga prinsipyo gigamit sa paghimo sa usa ka pipeline sa mga bahin nga dili direktang may kalabutan sa pagsulay!

Gusto nakong itanyag ang usa ka analohiya sa porma sa usa ka multi-stage nga sistema sa pagsala sa tubig. Ang hugaw nga tubig (mga pagbag-o nga adunay mga depekto) gihatag sa input; sa output kinahanglan nga makadawat kita og limpyo nga tubig, diin ang tanan nga dili gusto nga mga kontaminante giwagtang.

Ipatuman ang static nga pagtuki sa proseso, imbes nga gamiton kini aron makit-an ang mga bug
Multi-stage filter. Tinubdan: Wikipedia

Sama sa imong nahibal-an, ang mga pagsala sa paglimpyo gidisenyo aron ang matag sunod nga kaskad makasala sa labi ka labi ka maayo nga bahin sa mga kontaminado. Sa parehas nga oras, ang mga cascade sa coarser purification adunay mas taas nga throughput ug mas mubu nga gasto. Sa among analohiya, kini nagpasabut nga ang mga ganghaan sa kalidad sa pag-input mas paspas, nanginahanglan gamay nga paningkamot sa pagsugod, ug sa ilang kaugalingon labi ka dili mapangahason sa operasyon - ug kini ang pagkasunod-sunod kung diin kini gitukod. Ang papel sa static nga pag-analisa, nga, ingon sa atong nasabtan karon, makahimo sa pagtangtang lamang sa pinakagrabe nga mga depekto, mao ang papel sa "lapok" nga grid sa sinugdanan sa filter cascade.

Ang static nga pag-analisa sa iyang kaugalingon dili makapauswag sa kalidad sa katapusan nga produkto, sama nga ang usa ka "sala sa lapok" dili makahimo sa tubig nga mainom. Ug bisan pa, inubanan sa ubang mga elemento sa pipeline, ang kahinungdanon niini klaro. Bisan kung sa usa ka multistage filter ang mga yugto sa pag-output mahimo’g makuha ang tanan nga gibuhat sa mga yugto sa pag-input, klaro kung unsa ang mga sangputanan gikan sa usa ka pagsulay sa paghimo sa mga yugto sa pagputli nga nag-inusara, nga wala ang mga yugto sa pag-input.

Ang katuyoan sa "lapok nga lit-ag" mao ang paghupay sa mga sunod-sunod nga kaskad gikan sa pagdakop sa grabe nga mga depekto. Pananglitan, sa labing gamay, ang tawo nga naghimo sa pagrepaso sa code kinahanglan nga dili mabalda sa dili husto nga pagkaporma nga code ug mga paglapas sa natukod nga mga sumbanan sa coding (sama sa mga ekstra nga parentheses o lawom kaayo nga mga sanga). Ang mga bug sama sa mga NPE kinahanglan nga madakpan pinaagi sa mga pagsulay sa yunit, apan kung bisan sa wala pa ang pagsulay ang analista nagpakita kanamo nga ang usa ka bug kinahanglan nga mahitabo, kini makapadali sa pag-ayo niini.

Nagtuo ko nga klaro na karon kung ngano nga ang static nga pagtuki dili makapauswag sa kalidad sa produkto kung gigamit usahay, ug kinahanglan gamiton kanunay aron masala ang mga pagbag-o nga adunay grabe nga mga depekto. Ang pangutana kung ang paggamit sa usa ka static analyzer makapauswag sa kalidad sa imong produkto halos katumbas sa pagpangutana, "Maayo ba ang tubig nga gikuha gikan sa hugaw nga pond sa kalidad sa pag-inom kung kini ipasa sa usa ka colander?"

Implementasyon ngadto sa usa ka legacy nga proyekto

Usa ka importante nga praktikal nga pangutana: unsaon pagpatuman sa static analysis ngadto sa padayon nga proseso sa paghiusa isip usa ka "kalidad nga ganghaan"? Sa kaso sa awtomatik nga mga pagsulay, ang tanan klaro: adunay usa ka hugpong sa mga pagsulay, ang kapakyasan sa bisan kinsa niini igo nga rason sa pagtuo nga ang asembliya wala makapasar sa kalidad nga ganghaan. Usa ka pagsulay sa pag-instalar sa usa ka ganghaan sa samang paagi base sa mga resulta sa usa ka static nga pag-analisa napakyas: adunay daghan kaayo nga mga pasidaan sa pag-analisar sa legacy code, dili nimo gusto nga hingpit nga ibaliwala kini, apan imposible usab nga hunongon ang pagpadala sa usa ka produkto tungod lang kay kini adunay mga pasidaan sa analisador.

Kung gigamit sa unang higayon, ang analisador naghimo og daghang mga pasidaan sa bisan unsang proyekto, ang kadaghanan niini wala’y kalabotan sa husto nga paglihok sa produkto. Imposible nga matul-id ang tanan niini nga mga komento sa usa ka higayon, ug daghan ang dili kinahanglan. Pagkahuman, nahibal-an namon nga ang among produkto sa kinatibuk-an nagtrabaho, bisan sa wala pa ipaila ang static nga pagtuki!

Ingon usa ka sangputanan, daghan ang limitado sa panagsa nga paggamit sa static nga pagtuki, o gamiton lamang kini sa mode nga impormasyon, kung ang usa ka report sa analisador kay gipagawas sa panahon sa asembliya. Katumbas kini sa pagkawala sa bisan unsang pagtuki, tungod kay kung daghan na kita nga mga pasidaan, nan ang panghitabo sa lain (bisan unsa ka seryoso) kung ang pagbag-o sa code dili mamatikdan.

Ang mosunod nga mga pamaagi sa pagpaila sa kalidad nga mga ganghaan nailhan:

  • Pagbutang ug limitasyon sa kinatibuk-ang gidaghanon sa mga pasidaan o ang gidaghanon sa mga pasidaan nga gibahin sa gidaghanon sa mga linya sa code. Dili maayo ang pagtrabaho niini, tungod kay ang ingon nga ganghaan gawasnon nga gitugotan ang mga pagbag-o nga adunay bag-ong mga depekto nga moagi, basta ang ilang limitasyon dili molapas.
  • Ang pag-ayo, sa usa ka piho nga higayon, ang tanan nga daan nga mga pasidaan sa code ingon nga gibalewala, ug pagdumili sa pagtukod kung adunay bag-ong mga pasidaan mahitabo. Kini nga gamit gihatag sa PVS-studio ug pipila ka mga kapanguhaan sa online, pananglitan, Codacy. Wala ako'y higayon nga magtrabaho sa PVS-studio, sama sa akong kasinatian sa Codacy, ang ilang panguna nga problema mao nga ang pagtino kung unsa ang "daan" ug kung unsa ang "bag-o" nga sayup usa ka komplikado nga algorithm nga dili kanunay molihok. sa husto, ilabi na kung ang mga file gibag-o o gibag-o sa ngalan. Sa akong kasinatian, ang Codacy mahimong ibaliwala ang mga bag-ong pasidaan sa usa ka hangyo sa pagbitad, samtang sa samang higayon dili pagpasa sa usa ka hangyo sa pagbitad tungod sa mga pasidaan nga wala’y kalabotan sa mga pagbag-o sa code sa usa ka gihatag nga PR.
  • Sa akong opinyon, ang labing epektibo nga solusyon mao ang gihulagway sa libro Padayon nga Paghatud "Paagi sa pagpamulak". Ang sukaranan nga ideya mao nga ang gidaghanon sa mga static analysis nga mga pasidaan usa ka kabtangan sa matag pagpagawas, ug ang mga pagbag-o lamang ang gitugotan nga dili makadugang sa kinatibuk-ang gidaghanon sa mga pasidaan.

Ratchet

Naglihok kini niining paagiha:

  1. Sa una nga yugto, usa ka rekord ang gihimo sa metadata bahin sa pagpagawas sa gidaghanon sa mga pasidaan sa code nga nakit-an sa mga analista. Mao nga, kung magtukod ka sa agos, ang imong tagdumala sa repository nagsulat dili lang "pagpagawas sa 7.0.2", apan "pagpagawas sa 7.0.2 nga adunay sulud nga 100500 nga mga pasidaan sa checkstyle." Kung mogamit ka usa ka advanced manager sa repository (sama sa Artifactory), dali ra ang pagtipig sa ingon nga metadata bahin sa imong pagpagawas.
  2. Karon ang matag hangyo sa pagbitad, kung gitukod, gitandi ang gidaghanon sa mga sangputanan nga mga pasidaan sa gidaghanon sa mga pasidaan nga magamit sa karon nga pagpagawas. Kung ang PR modala ngadto sa pagdugang niini nga gidaghanon, nan ang code dili moagi sa kalidad nga ganghaan alang sa static nga pagtuki. Kung ang gidaghanon sa mga pasidaan mokunhod o dili mausab, nan kini molabay.
  3. Sa sunod nga pagpagawas, ang gikalkula nga gidaghanon sa mga pasidaan irekord pag-usab sa pagpagawas sa metadata.

Sa hinayhinay apan makanunayon (sama sa kung ang usa ka ratchet molihok), ang gidaghanon sa mga pasidaan mahimong zero. Siyempre, ang sistema mahimong malimbongan pinaagi sa pagpaila sa usa ka bag-ong pasidaan, apan ang pagtul-id sa lain. Normal kini, tungod kay sa usa ka taas nga gilay-on naghatag kini og mga resulta: ang mga pasidaan gitul-id, isip usa ka lagda, dili sa tagsa-tagsa, apan sa usa ka grupo sa usa ka matang sa makausa, ug ang tanan nga dali nga matangtang nga mga pasidaan giwagtang sa madali.

Kini nga graph nagpakita sa kinatibuk-ang gidaghanon sa mga pasidaan sa Checkstyle alang sa unom ka bulan nga operasyon sa ingon nga "ratchet" sa usa sa among mga proyekto sa OpenSource. Ang gidaghanon sa mga pasidaan mikunhod sa usa ka han-ay sa gidak-on, ug kini natural nga nahitabo, dungan sa pagpalambo sa produkto!

Ipatuman ang static nga pagtuki sa proseso, imbes nga gamiton kini aron makit-an ang mga bug

Gigamit nako ang usa ka giusab nga bersyon sa kini nga pamaagi, gilain ang pag-ihap sa mga pasidaan pinaagi sa module sa proyekto ug himan sa pagtuki, nga nagresulta sa usa ka YAML file nga adunay metadata sa pagtukod nga ingon niini:

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

Sa bisan unsang advanced nga sistema sa CI, ang ratchet mahimong ipatuman alang sa bisan unsang static nga mga himan sa pag-analisar nga wala magsalig sa mga plugins ug mga himan sa ikatulo nga partido. Ang matag analisador naghimo sa kaugalingon nga taho sa usa ka yano nga teksto o XML nga pormat nga dali analisahon. Ang nahabilin mao ang pagsulat sa kinahanglan nga lohika sa script sa CI. Imong makita kung giunsa kini gipatuman sa among open source nga mga proyekto base sa Jenkins ug Artifactory dinhi o dinhi. Ang duha ka pananglitan nagdepende sa librarya ratchetlib: pamaagi countWarnings() nag-ihap sa xml tag sa mga file nga gihimo sa Checkstyle ug Spotbugs sa naandan nga paagi, ug compareWarningMaps() nagpatuman sa sama nga ratchet, paglabay sa usa ka sayop sa diha nga ang gidaghanon sa mga pasidaan sa bisan unsa nga mga kategoriya sa pagtaas.

Ang usa ka makapaikag nga pagpatuman sa "ratchet" posible alang sa pag-analisar sa spelling sa mga komentaryo, literal nga teksto ug dokumentasyon gamit ang aspell. Sama sa imong nahibal-an, kung susihon ang spelling, dili tanan nga mga pulong nga wala mahibal-an sa sukaranan nga diksyonaryo dili husto; mahimo silang idugang sa diksyonaryo sa tiggamit. Kung maghimo ka ug custom nga diksyonaryo nga bahin sa source code sa proyekto, nan ang spelling quality gate mahimong maporma niining paagiha: running aspell with a standard and custom dictionary dili unta walay makit-an nga mga sayop sa spelling.

Mahitungod sa kamahinungdanon sa pag-ayo sa bersyon sa analisador

Sa konklusyon, ang punto nga timan-an mao nga bisan kung giunsa nimo pagpatuman ang pagtuki sa imong pipeline sa pagpadala, ang bersyon sa analisador kinahanglan nga ayohon. Kung gitugotan nimo ang analisador nga kusang mag-update, unya kung mag-assemble sa sunod nga hangyo sa pagbitad, ang mga bag-ong depekto mahimong "mo-pop up" nga wala’y kalabotan sa mga pagbag-o sa code, apan adunay kalabotan sa kamatuoran nga ang bag-ong analista dali nga makit-an ang daghang mga depekto - ug kini makaguba sa imong proseso sa pagdawat sa mga hangyo sa pagbitad . Ang pag-upgrade sa usa ka analista kinahanglan usa ka mahunahunaon nga aksyon. Bisan pa, ang estrikto nga pag-ayo sa bersyon sa matag sangkap sa asembliya kasagaran usa ka kinahanglanon nga kinahanglanon ug usa ka hilisgutan alang sa usa ka lahi nga diskusyon.

kaplag

  • Ang static nga pag-analisa dili makit-an ang mga bug alang kanimo ug dili mapauswag ang kalidad sa imong produkto ingon usa ka sangputanan sa usa ka aplikasyon. Ang usa ka positibo nga epekto sa kalidad makab-ot lamang pinaagi sa kanunay nga paggamit niini sa panahon sa proseso sa paghatud.
  • Ang pagpangita sa mga bug dili ang panguna nga tahas sa pag-analisar; ang kadaghanan sa mapuslanon nga mga gimbuhaton magamit sa mga gamit sa opensource.
  • Ipatuman ang kalidad nga mga ganghaan base sa mga resulta sa static analysis sa pinakaunang yugto sa delivery pipeline, gamit ang "ratchet" para sa legacy code.

mga pakisayran

  1. Padayon nga Paghatud
  2. A. Kudryavtsev: Pagtuki sa programa: unsaon pagsabot nga ikaw usa ka maayong programmer report sa lain-laing mga pamaagi sa code analysis (dili lang static!)

Source: www.habr.com

Idugang sa usa ka comment