Amalachadh pròiseact VueJS + TS le SonarQube

Bidh sinn gu gnìomhach a’ cleachdadh an àrd-ùrlar nar n-obair fuaimneach gus càileachd còd a chumail aig ìre àrd. Nuair a bhios tu ag amalachadh aon de na pròiseactan a tha sgrìobhte a-steach VueJs+Tippescript, dh'èirich duilgheadasan. Mar sin, bu mhath leam innse dhut ann am barrachd mionaideachd mar a chaidh againn air fuasgladh fhaighinn orra.

Amalachadh pròiseact VueJS + TS le SonarQube

San artaigil seo bruidhnidh sinn, mar a sgrìobh mi gu h-àrd, mun àrd-ùrlar SonarQube. Beagan teòiridh - dè a th 'ann san fharsaingeachd, dhaibhsan a tha a' cluinntinn mu dheidhinn airson a 'chiad uair:

fuaimneach (roimhe Sonar) na àrd-ùrlar stòr fosgailte airson sgrùdadh leantainneach agus tomhas càileachd còd.
A’ toirt taic do mhion-sgrùdadh còd agus lorg mhearachdan a rèir riaghailtean inbhean prògramaidh MISRA C, MISRA C ++, MITER/CWE agus CERT. Faodaidh e cuideachd mearachdan aithneachadh bho liostaichean mhearachdan prògramadh OWASP Top 10 agus CWE/SANS Top 25.
A dh ’aindeoin gu bheil an àrd-ùrlar a’ cleachdadh grunn innealan deiseil, bidh SonarQube a ’lughdachadh na toraidhean gu aon deas-bhòrd, a’ cumail eachdraidh ruith agus mar sin a ’toirt cothrom dhut an gluasad coitcheann de dh’ atharrachaidhean ann an càileachd bathar-bog fhaicinn rè leasachadh.

Gheibhear tuilleadh fiosrachaidh aig làrach-lìn oifigeil

Tha àireamh mhòr de chànanan prògramaidh a’ faighinn taic. A rèir an fhiosrachaidh bhon cheangal gu h-àrd, tha iad sin nas motha na 25 cànan. Gus taic a thoirt do chànan sònraichte, feumaidh tu am plugan iomchaidh a stàladh. Tha an dreach coimhearsnachd a’ toirt a-steach plugan airson a bhith ag obair leis Javascript (a' gabhail a-steach seòrsaichean сript), ged a tha an uicidh ag ràdh a chaochladh. Air cùlaibh Javascript freagairtean plugan SonarJS, airson Typescript SonarTS fa leth.

Tha an neach-dèiligidh oifigeil air a chleachdadh gus fiosrachadh còmhdaich a chuir sonarqube-scanner, a tha, a 'cleachdadh nan roghainnean bho config-file, a 'cur an dàta seo chun an fhrithealaiche fuaimneach airson tuilleadh daingneachadh agus cruinneachadh.

airson Javascript tha clò-bhualadair npm. Mar sin, tòisichidh sinn air buileachadh ceum air cheum fuaimneach в sealladh- cleachdadh pròiseict Clò-sgrìobhadh.

Gus am frithealaiche a chuir an gnìomh fuaimneach gabhamaid brath docker-compose.

sonar.yaml:

version: '1'
    services:
        simplesample-sonar:
            image: sonarqube:lts
            ports:
                - 9001:9000
                - 9092:9092
            network_mode: bridge

Cur air bhog:

docker-compose -f sonar.yml up

Às deidh seo fuaimneach ri fhaighinn aig: http://localhost:9001 .

Amalachadh pròiseact VueJS + TS le SonarQube
Chan eil pròiseactan ann fhathast agus tha sin cothromach. Cuiridh sinn ceart air an t-suidheachadh seo. Ghabh mi am pròiseact eisimpleir oifigeil airson VueJS+TS+Jest. Lùbamaid dhinn fèin e :

git clone https://github.com/vuejs/vue-test-utils-typescript-example.git

An toiseach feumaidh sinn an neach-dèiligidh a stàladh fuaimneachris an canar sonar-sganairairson npm tha pasgan ann:

yarn add sonarqube-scanner

Agus sa bhad cuir an àithne gu sgriobtaichean a bhith ag obair leis.

pacaid.json:

{
 … 
   scripts: {
      ...
      "sonar": "sonar-scanner"
      ...
   },
 …
}

An uairsin, airson an sganair a bhith ag obair, feumaidh tu na roghainnean pròiseict a shuidheachadh ann am faidhle sònraichte. Feuch an tòisich sinn leis na bunaitean.

sonar-project.properties:

sonar.host.url=http://localhost:9001

sonar.projectKey=test-project-vuejs-ts
sonar.projectName=Test Application (VueJS+TS)

sonar.sources=src
# sonar.tests=
sonar.test.inclusions=src/**/*tests*/**
sonar.sourceEncoding=UTF-8

  • sonar.host.url - seòladh Sonar'A;
  • sonar.projectKey - aithnichear pròiseact sònraichte air an t-seirbheisiche Sonar'A;
  • sonar.projectName - ainm, faodar atharrachadh aig àm sam bith, leis gu bheil am pròiseact air a chomharrachadh le iuchair pròiseict;
  • sonar.stòran - pasgan le stòran, mar as trice seo SRC, ach faodaidh rud sam bith a bhith ann. Tha am pasgan seo air a shuidheachadh co-cheangailte ris a’ phasgan root, is e sin am pasgan às an tèid an sganair a chuir air bhog;
  • deuchainnean sonar - paramadair a tha co-chosmhail ris an fhear roimhe. Seo am pasgan far a bheil na deuchainnean suidhichte. Anns a 'phròiseact seo, chan eil pasgan mar sin ann, agus tha an deuchainn ri taobh a' phàirt a thathar a 'dèanamh deuchainn sa phasgan'deuchainn', mar sin leigidh sinn seachad e airson a-nis agus cleachdaidh sinn an ath paramadair;
  • sonar.test.in-ghabhail - slighe airson deuchainnean a’ cleachdadh masg, is dòcha gu bheil grunn eileamaidean air an liostadh air an sgaradh le cromagan;
  • sonar.sourceCòdachadh - còdachadh airson faidhlichean stòr.

Airson a ’chiad fhoillseachadh den sganair, tha a h-uile dad deiseil, ach a-mhàin am prìomh ghnìomh roimhe: cuir air bhog an einnsean deuchainn fhèin, gus an urrainn dha fiosrachadh a ghineadh mun chòmhdach, a chleachdas an sganair às deidh sin.

Ach airson seo a dhèanamh, feumaidh tu an einnsean deuchainn a rèiteachadh gus am fiosrachadh seo a ghineadh. Anns a 'phròiseact seo, tha an einnsean deuchainn tha. Agus tha na roghainnean aige anns an roinn fhreagarrach den fhaidhle pasgan.json.

Nach cuir sinn na roghainnean seo ris:

"collectCoverage": true,
"collectCoverageFrom": [
      "src/**/*",
      "!src/main.ts",
      "!src/App.vue",
      "!src/**/*.d.*",
      "!src/**/*__tests__*"
],

Is e sin, tha sinn a 'suidheachadh a' bhratach fhèin airson an fheum air obrachadh a-mach còmhdach agus an stòr (còmhla ri eisgeachdan) air a bheil e air a chruthachadh.

A-nis leig leinn an deuchainn a ruith:

yarn test

Chì sinn na leanas:

Amalachadh pròiseact VueJS + TS le SonarQube

Is e an t-adhbhar nach eil còd sam bith anns a 'phàirt fhèin. Feuch an cuir sinn seo ceart.

HelloWorld.vue:

...
methods: {
    calc(n) {
      return n + 1;
    }
  },
mounted() {
  this.msg1 = this.msg + this.calc(1);
},
...

Bidh seo gu leòr airson còmhdach a thomhas.

Às deidh dhuinn an deuchainn ath-thòiseachadh, nì sinn cinnteach de seo:

Amalachadh pròiseact VueJS + TS le SonarQube

Air an sgrion bu chòir dhuinn fiosrachadh mun chòmhdach fhaicinn, agus thèid pasgan a chruthachadh ann am pasgan a 'phròiseict craoladh le fiosrachadh còmhdach deuchainn ann an cruth uile-choitcheann LCOV (leudachadh LTP GCOV).

Gcov na ghoireas air a sgaoileadh gu saor airson sgrùdadh a dhèanamh air còmhdach còd. Bidh Gcov a’ gineadh an dearbh àireamh de chuir gu bàs airson gach aithris ann am prògram agus a’ leigeil leat notaichean a chur ris a’ chòd stòr. Tha Gcov a’ tighinn mar ghoireas àbhaisteach mar phàirt den phasgan GCC.
Lcov - eadar-aghaidh grafaigeach airson gcov. Bidh e a’ cruinneachadh fhaidhlichean gcov airson grunn fhaidhlichean stòr agus a’ toirt a-mach seata de dhuilleagan HTML le còd agus fiosrachadh còmhdaich. Tha duilleagan air an cruthachadh cuideachd gus seòladh a dhèanamh nas fhasa. Bidh LCov a’ toirt taic do chòmhdach sreangan, gnìomhan, agus geugan.

Às deidh na deuchainnean a bhith deiseil, thèid fiosrachadh còmhdaich a chuir a-steach craoladh/lcov.info.
Feumaidh sinn a ràdh Sonar‘Cò às a gheibh mi e? Mar sin, leig dhuinn na loidhnichean a leanas a chur ris an fhaidhle rèiteachaidh aige. Ach tha aon phuing ann: faodaidh pròiseactan a bhith ioma-chànanach, is e sin, sa phasgan SRC tha còdan stòr ann airson grunn chànanan prògramaidh agus ceangal ri aon no fear eile, agus an uair sin, tha cleachdadh plugan no dhà air a dhearbhadh leis an leudachadh aige. Agus faodar fiosrachadh còmhdaich a stòradh ann an diofar àiteachan airson diofar chànanan prògramaidh, agus mar sin tha a roinn fhèin aig gach cànan airson seo a stèidheachadh. Bidh am pròiseact againn a’ cleachdadh Clò-sgrìobhadh, mar sin feumaidh sinn roinn roghainnean dìreach air a shon:

sonar-project.properties:

sonar.typescript.coveragePlugin=lcov
sonar.typescript.lcov.reportPaths=coverage/lcov.info

Tha a h-uile dad deiseil airson a’ chiad sganair a chuir air bhog. Bu mhath leam a thoirt fa-near gu bheil am pròiseact Sonar'e air a chruthachadh gu fèin-obrachail a' chiad uair a ruitheas tu an sganair airson pròiseact sònraichte. Anns na h-amannan às deidh sin, thèid fiosrachadh a chruinneachadh gus daineamaigs atharrachaidhean ann am paramadairean pròiseict fhaicinn thar ùine.

Mar sin, cleachdamaid an àithne a chaidh a chruthachadh na bu thràithe pasgan.json:

yarn run sonar 

Note: faodaidh tu cuideachd am paramadair a chleachdadh -X airson logadh nas mionaidiche.

Ma chaidh an sganair a chuir air bhog airson a’ chiad uair, an uairsin thèid binary an sganair fhèin a luchdachadh sìos an toiseach. Às deidh sin bidh e a 'tòiseachadh agus a' tòiseachadh a 'sganadh an fhrithealaiche Sonar'a airson plugain stàlaichte, mar sin a' tomhas cànan le taic. Tha grunn pharaimearan eile airson a ghnìomhachd air an luchdachadh cuideachd: pròifilean càileachd, riaghailtean gnìomhach, stòr meatrach, riaghailtean frithealaiche.

Amalachadh pròiseact VueJS + TS le SonarQube

Amalachadh pròiseact VueJS + TS le SonarQube

Note: Cha bhith sinn a’ fuireach orra gu mionaideach taobh a-staigh frèam an artaigil seo, ach faodaidh tu fios a chuir gu stòran oifigeil an-còmhnaidh.

An uairsin, tòisichidh am mion-sgrùdadh pasgan SRC airson na tha ri fhaighinn de fhaidhlichean stòr dha na h-uile (mura h-eil fear sònraichte air a shònrachadh gu soilleir) cànan le taic, leis an clàr-amais aca às deidh sin.

Amalachadh pròiseact VueJS + TS le SonarQube

An uairsin thig grunn mhion-sgrùdaidhean eile, air nach bi sinn a’ cuimseachadh san artaigil seo (mar eisimpleir, leithid linting, lorg dùblachadh còd, msaa).

Aig deireadh obair an sganair, tha a h-uile fiosrachadh a thèid a chruinneachadh air a chruinneachadh, air a thasgadh agus air a chuir chun t-seirbheisiche.

Às deidh seo, chì sinn mar-thà dè thachair san eadar-aghaidh lìn:

Amalachadh pròiseact VueJS + TS le SonarQube

Mar a chì sinn, dh ’obraich rudeigin, agus eadhon a’ sealltainn còmhdach de sheòrsa air choreigin, ach chan eil e a rèir an fheadhainn againn tha-aithris.

Feuch an dèan sinn a-mach e. Bheir sinn sùil nas mionaidiche air a’ phròiseact, cliog air an luach còmhdaich, agus “tuiteam troimhe” ann an aithisg faidhle mionaideach:

Amalachadh pròiseact VueJS + TS le SonarQube

An seo chì sinn, a bharrachd air a’ phrìomh fhaidhle sgrùdaichte HelloWorld.vue, tha faidhle ann cuideachd prìomh.ts, a tha a 'milleadh an dealbh gu lèir den chòmhdach. Ach ciamar a thàinig sinn air falbh bho bhith a 'cunntadh còmhdach. Tha, tha a h-uile dad ceart, ach bha e air an ìre tha, ach chuir an sganair clàr air, agus mar sin chrìochnaich e na àireamhachadh.

Feuch an cuir sinn seo ceart:

sonar-project.properties:

...
sonar.exclusions=src/main.ts
...

Bu mhath leam soilleireachadh a dhèanamh: a bharrachd air na pasganan a tha air an sònrachadh sa pharamadair seo, thèid a h-uile pasgan a tha air an liostadh sa pharamadair a chur ris cuideachd sonar.test.in-ghabhail.

Às deidh dhuinn an sganair a chuir air bhog, chì sinn am fiosrachadh ceart:

Amalachadh pròiseact VueJS + TS le SonarQube

Amalachadh pròiseact VueJS + TS le SonarQube

Bheir sinn sùil air an ath phuing - Pròifilean càileachd. Bhruidhinn mi gu h-àrd mu dheidhinn taic Sonar'om grunn chànanan aig an aon àm. Is e seo dìreach a tha sinn a’ faicinn. Ach tha fios againn gu bheil am pròiseact againn sgrìobhte a-steach TS, mar sin carson a chuireas cuideam air an sganair le làimhseachadh agus sgrùdaidhean neo-riatanach. Suidhichidh sinn an cànan airson mion-sgrùdadh le bhith a’ cur aon pharamadair eile ris an fhaidhle rèiteachaidh Sonar'A:

sonar-project.properties:

...
sonar.language=ts
...

Ruith sinn an sganair a-rithist agus chì sinn an toradh:

Amalachadh pròiseact VueJS + TS le SonarQube

Bha an còmhdach air falbh gu tur.

Ma choimheadas sinn air log an sganair, chì sinn an loidhne a leanas:

Amalachadh pròiseact VueJS + TS le SonarQube

Is e sin, cha robh na faidhlichean pròiseict againn dìreach air an clàradh.

Tha an suidheachadh mar a leanas: taic oifigeil VueJs tha anns a' plugan SonarJScò air a bheil uallach Javascript.

Amalachadh pròiseact VueJS + TS le SonarQube

Ach chan eil an taic seo anns a’ plugan SonarTS airson TS, mun deach tiogaid oifigeil fhosgladh anns an rianadair bug Sonar'A:

  1. https://jira.sonarsource.com/browse/MMF-1441
  2. https://github.com/SonarSource/SonarJS/issues/1281

Seo cuid de fhreagairtean bho aon de na riochdairean bho luchd-leasachaidh SonarQube, a 'dearbhadh an fhìrinn seo.

Amalachadh pròiseact VueJS + TS le SonarQube

Amalachadh pròiseact VueJS + TS le SonarQube

Ach dh’obraich a h-uile càil dhuinn, tha thu a’ cur an aghaidh. Tha, feuchaidh sinn e beagan “hack”.
Ma tha taic ann .bhuain- faidhlichean Sonar'Oh, feuch an innis sinn dha beachdachadh orra mar Clò-sgrìobhadh.

Nach cuir sinn paramadair ris:

sonar-project.properties:

...
sonar.typescript.file.suffixes=.ts,.tsx,.vue
...

Nach cuir sinn an sganair air bhog:

Amalachadh pròiseact VueJS + TS le SonarQube

Agus, voila, tha a h-uile dad air ais gu àbhaisteach, agus le aon phròifil a-mhàin airson Clò-sgrìobhadh. Is e sin, chaidh againn air fuasgladh fhaighinn air an duilgheadas mar thaic VueJs+TS airson fuaimneach.

Feuchaidh sinn ri dhol nas fhaide agus beagan leasachaidh a dhèanamh air an fhiosrachadh còmhdaich.

Na tha sinn air a dhèanamh gu ruige seo:

  • air a chur ris a’ phròiseact Sonar-sganadair;
  • Suidhich tha gus fiosrachadh còmhdaich a chruthachadh;
  • rèiteachadh Sonar-sganadair;
  • fuasgladh air an duilgheadas taic .bhuain-faidhle + Clò-sgrìobhadh.

A bharrachd air craoladh deuchainn, tha slatan-tomhais feumail inntinneach eile ann airson càileachd còd, mar eisimpleir, dùblachadh còd agus an àireamh de loidhnichean (an sàs ann an àireamhachadh co-èifeachdan co-cheangailte ri iom-fhillteachd còd) den phròiseact.

Ann an gnìomhachadh gnàthaichte a 'phlug airson a bhith ag obair le TS (SonarTS) chan obraich CPD (Copy Paste Detector) agus a 'cunntadh loidhnichean còd .bhuain- faidhlichean.

Gus suidheachadh synthetigeach de dhùblachadh còd a chruthachadh, dìreach dùblaich am faidhle co-phàirteach le ainm eadar-dhealaichte agus cuideachd cuir ris a’ chòd e. prìomh.ts gnìomh meallta agus dèan lethbhreac dheth le ainm eile. Gus sgrùdadh a dhèanamh airson dùblachadh mar ann an .bhuain, agus a-staigh .ts - faidhlichean.

prìomh.ts:

...
function name(params:string): void {
  console.log(params);
}
...

Gus seo a dhèanamh, feumaidh tu beachd a thoirt seachad airson ùine ghoirid air an loidhne rèiteachaidh:

sonar-project.properties:

...
sonar.exclusions=src/main.ts
...

Nach ath-thòisich sinn an sganair còmhla ri deuchainn:

yarn test && yarn run sonar

Gu dearbh, bidh an còmhdach againn a’ tuiteam, ach a-nis chan eil ùidh againn ann an sin.

A thaobh a bhith a’ dùblachadh loidhnichean còd, chì sinn:

Amalachadh pròiseact VueJS + TS le SonarQube

Airson sgrùdadh cleachdaidh sinn CPD- goireasach - jscpd:

npx jscpd src

Amalachadh pròiseact VueJS + TS le SonarQube

Airson loidhnichean còd:

Amalachadh pròiseact VueJS + TS le SonarQube

Is dòcha gun tèid seo fhuasgladh ann an dreachan plugan san àm ri teachd SonarJS(TS). Bu mhath leam a thoirt fa-near gu bheil iad a’ tòiseachadh mean air mhean air an dà plugan seo a chur còmhla ann an aon SonarJS, a tha mi a’ smaoineachadh a tha ceart.

A-nis bha mi airson beachdachadh air an roghainn fiosrachadh còmhdaich a leasachadh.

Gu ruige seo chì sinn còmhdach deuchainn ann an teirmean sa cheud airson a’ phròiseict gu lèir, agus airson faidhlichean gu sònraichte. Ach tha e comasach an comharra seo a leudachadh le fiosrachadh mun mheud aonad-tests airson a 'phròiseict, a thuilleadh air ann an co-theacsa faidhlichean.

Tha leabharlann ann as urrainn tha- tionndaidh an aithisg gu cruth airson Sonar'A:
dàta deuchainn coitcheann - https://docs.sonarqube.org/display/SONAR/Generic+Test+Data.

Nach stàlaich sinn an leabharlann seo sa phròiseact againn:

yarn add jest-sonar-reporter

Agus cuir ris an rèiteachadh tha:

pacaid.json:

…
"testResultsProcessor": "jest-sonar-reporter"
…

A-nis leig leinn an deuchainn a ruith:

yarn test

Às deidh sin thèid faidhle a chruthachadh ann am freumh a’ phròiseict deuchainn-aithisg.xml.

Leig leinn a chleachdadh anns an rèiteachadh Sonar'A:

sonar-project.properties:

…
sonar.testExecutionReportPaths=test-report.xml
…

Agus ath-thòisich an sganair:

yarn run sonar

Feuch sinn a-mach dè a tha air atharrachadh san eadar-aghaidh Sonar'A:

Amalachadh pròiseact VueJS + TS le SonarQube

Agus chan eil dad air atharrachadh. Is e an fhìrinn nach eil Sonar a’ beachdachadh air na faidhlichean a tha air am mìneachadh ann an aithisg Jest mar fhaidhlichean aonad- deuchainnean. Gus an suidheachadh seo a cheartachadh, bidh sinn a’ cleachdadh am paramadair rèiteachaidh Sonar deuchainnean sonar, anns am bi sinn a’ comharrachadh gu soilleir na pasganan le deuchainnean (chan eil againn ach aon airson an-dràsta):

sonar-project.properties:

…
sonar.tests=src/components/__tests__
…

Feuch an ath-thòisich sinn an sganair:

yarn run sonar

Chì sinn na tha air atharrachadh san eadar-aghaidh:

Amalachadh pròiseact VueJS + TS le SonarQube

A-nis tha sinn air àireamh ar n-àireamh fhaicinn aonad-tests agus, às deidh dhuinn fàiligeadh le bhith a’ cliogadh a-staigh, chì sinn cuairteachadh na h-àireimh seo am measg nam faidhlichean pròiseict:

Amalachadh pròiseact VueJS + TS le SonarQube

co-dhùnadh

Mar sin, choimhead sinn air inneal airson mion-sgrùdadh leantainneach fuaimneach. Chuir sinn a-steach gu soirbheachail pròiseact a chaidh a sgrìobhadh a-steach VueJs+TS. Chàirich sinn cuid de chùisean co-chòrdalachd. Mheudaich sinn susbaint fiosrachaidh a’ chomharra còmhdach deuchainn. San artaigil seo, rinn sinn sgrùdadh air dìreach aon de na slatan-tomhais airson càileachd còd (is dòcha aon de na prìomh fheadhainn), ach fuaimneach a’ toirt taic do shlatan-tomhais càileachd eile, a’ gabhail a-steach deuchainnean sàbhailteachd. Ach chan eil na feartan sin uile rim faighinn gu h-iomlan coimhearsnachd-tionndaidhean. Is e aon de na feartan inntinneach agus feumail amalachadh fuaimneach le diofar shiostaman riaghlaidh tasgaidh còd, leithid GitLab agus BitBucket. Gus casg a chur air Iarrtas tarraing (tighinn còmhla).'a gu prìomh mheur an tasgaidh nuair a tha an còmhdach air a dhol sìos. Ach is e sgeulachd a tha seo airson artaigil gu tur eadar-dhealaichte.

PS: Tha a h-uile dad a tha air a mhìneachadh san artaigil ann an cruth còd ri fhaighinn ann an mo phòc.

Chan fhaod ach luchd-cleachdaidh clàraichte pàirt a ghabhail san sgrùdadh. Soidhnig a-steach, mas e do thoil e.

Am bi thu a’ cleachdadh an àrd-ùrlar SonarQube:

  • 26,3%Seadh5

  • 15,8%Chan eil 3

  • 15,8%Chuala mi mun àrd-ùrlar seo agus tha mi airson a chleachdadh3

  • 10,5%Tha mi air cluinntinn mun àrd-ùrlar seo agus chan eil mi airson a chleachdadh2

  • 0,0%Tha mi a’ cleachdadh àrd-ùrlar eile0

  • 31,6%A’ chiad turas a chuala mi mu deidhinn6

Bhòt 19 neach-cleachdaidh. Cha do stad 3 neach-cleachdaidh.

Source: www.habr.com

Cuir beachd ann