Comhtháthú tionscadail VueJS+TS le SonarQube

Bainimid úsáid ghníomhach as an ardán inár gcuid oibre fuaimrian chun cáilíocht an chóid a choinneáil ar ardleibhéal. Nuair a bheidh ceann de na tionscadail scríofa i VueJs+Cineál, tháinig fadhbanna. Dá bhrí sin, ba mhaith liom a insint duit go mion conas a d’éirigh linn iad a réiteach.

Comhtháthú tionscadail VueJS+TS le SonarQube

San Airteagal seo beimid ag caint, mar a scríobh mé thuas, faoi ardán SonarQube. Teoiric bheag - cad é go ginearálta, dóibh siúd atá ag éisteacht faoi don chéad uair:

fuaimrian (iar Sonar) ardán foinse oscailte é le haghaidh iniúchadh leanúnach agus tomhas cáilíochta cód.
Tacaíonn sé le hanailís cód agus braite earráide de réir rialacha na gcaighdeán ríomhchláraithe MISRA C, MISRA C++, MITER/CWE agus CERT. Is féidir leis earráidí a aithint freisin ó liostaí earráidí cláir OWASP Top 10 agus CWE/SANS Top 25.
In ainneoin go n-úsáideann an t-ardán uirlisí éagsúla de dhéantús an duine réidh, laghdaíonn SonarQube na torthaí go dtí painéal amháin, ag coinneáil stair rití agus mar sin ligeann duit treocht ghinearálta na n-athruithe ar cháilíocht bogearraí a fheiceáil le linn forbartha.

Is féidir tuilleadh sonraí a fháil ag láithreán gréasáin oifigiúil

Tacaítear le líon mór teangacha ríomhchlárúcháin. Ag déanamh breithiúnas ar an eolas ón nasc thuas, is breis agus 25 teanga iad seo. Chun tacú le teanga ar leith, ní mór duit an breiseán cuí a shuiteáil. Cuimsíonn an leagan pobail breiseán chun oibriú leis Javascript (lena n-áirítear typesсript), cé go ndeir an vicí a mhalairt. Taobh thiar Javascript freagraí breiseán SonarJS, le haghaidh Clóscríobh SonarTS faoi ​​seach.

Úsáidtear an cliant oifigiúil chun faisnéis clúdaigh a sheoladh sonarqube-scanóir, a, ag baint úsáide as na socruithe ó config-file, seolann na sonraí seo chuig an bhfreastalaí fuaimrian le haghaidh tuilleadh comhdhlúthaithe agus comhiomlánaithe.

Chun Javascriptfillteán npm. Mar sin, cuirimis tús le cur i bhfeidhm céim ar chéim fuaimrian в Vue-tionscadal ag baint úsáide as Clóscríbhneoireacht.

Chun an freastalaí a imscaradh fuaimrian a ligean ar leas a bhaint as docker-cum.

sonar.yaml:

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

Seoladh:

docker-compose -f sonar.yml up

Ina dhiaidh sin fuaimrian beidh sé ar fáil ag: http://localhost:9001 .

Comhtháthú tionscadail VueJS+TS le SonarQube
Níl aon tionscadail ann go fóill agus tá sé sin cothrom. Cuirfimid an cás seo ina cheart. Ghlac mé an tionscadal sampla oifigiúil le haghaidh VueJS+TS+Jest. Déanaimis é a lúbadh i dtreo féin:

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

Ar dtús ní mór dúinn an cliant a shuiteáil fuaimrian, ar a dtugtar sonar-scanóirdo npm tá fillteán:

yarn add sonarqube-scanner

Agus cuir an t-ordú láithreach chuig scripteanna a bheith ag obair leis.

pacáiste.json:

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

Ansin, le go n-oibreoidh an scanóir, ní mór duit socruithe an tionscadail a shocrú i gcomhad speisialta. Let tús leis an Basics.

maoine.sonraí-tionscadal:

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.óstach.url - seoladh Sonar‘A;
  • sonar.projectEochair – aitheantóir tionscadail uathúil ar an bhfreastalaí Sonar‘A;
  • sonar.projectName – a ainm, is féidir é a athrú am ar bith, ós rud é go sainaithnítear an tionscadal le eochair tionscadail;
  • foinsí.sona – fillteán le foinsí, seo de ghnáth src, ach is féidir a bheith rud ar bith. Socraítear an fillteán seo i gcoibhneas leis an bhfréamhfhillteán, arb é an fillteán óna seoltar an scanóir;
  • tástálacha sonar – paraiméadar atá ar aon dul leis an gceann roimhe sin. Is é seo an fillteán ina bhfuil na tástálacha suite. Sa tionscadal seo, níl fillteán dá leithéid ann, agus tá an tástáil suite in aice leis an gcomhpháirt atá á thástáil san fhillteán 'tástáil', mar sin déanfaimid neamhaird de faoi láthair agus úsáidfimid an chéad pharaiméadar eile;
  • sonrai.tástála – cosán do thástálacha ag baint úsáide as masc, d’fhéadfadh go mbeadh roinnt eilimintí liostaithe agus camóga eatarthu;
  • sonar.sourceEncoding – ionchódú do chomhaid foinse.

Le haghaidh an scanóir a sheoladh ar dtús, tá gach rud réidh, ach amháin an príomhghníomh roimhe seo: an t-inneall tástála féin a sheoladh, ionas gur féidir leis faisnéis a ghiniúint faoin gclúdach, a úsáidfidh an scanóir ina dhiaidh sin.

Ach chun é seo a dhéanamh, ní mór duit an t-inneall tástála a chumrú chun an fhaisnéis seo a ghiniúint. Sa tionscadal seo, tá an t-inneall tástála . Agus tá a chuid socruithe sa chuid comhfhreagrach den chomhad pacáiste.json.

Cuirimis na socruithe seo leis:

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

Is é sin, leagaimid an bhratach féin ar an ngá atá le clúdach a ríomh agus an fhoinse (mar aon le heisceachtaí) ar a mbunófar é.

Anois, déanaimis an tástáil a rith:

yarn test

Feicfimid na rudaí seo a leanas:

Comhtháthú tionscadail VueJS+TS le SonarQube

Is é an chúis nach bhfuil aon chód sa chomhpháirt féin. A ligean ar a shocrú seo.

HelloWorld.vue:

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

Beidh sé seo go leor chun clúdach a ríomh.

Tar éis an tástáil a atosú, déanfaimid cinnte de seo:

Comhtháthú tionscadail VueJS+TS le SonarQube

Ar an scáileán ba cheart dúinn faisnéis a fheiceáil faoin gclúdach, agus cruthófar fillteán san fhillteán tionscadail clúdach le faisnéis clúdach tástála i bhformáid uilíoch LCOV (síneadh LTP GCOV).

Gcov Is áirgiúlacht a scaiptear go héasca é chun clúdach cód a scrúdú. Gineann Gcov líon beacht na bhforghníomhuithe do gach ráiteas i gclár agus ligeann sé duit nótaí a chur leis an gcód foinseach. Tagann Gcov mar ghnáthfhóntas mar chuid de phacáiste GCC.
Lcov - comhéadan grafach le haghaidh gcov. Cuireann sé comhaid gcov le chéile le haghaidh comhaid foinse iolracha agus cuireann sé sraith de leathanaigh HTML le faisnéis cód agus clúdach. Gintear leathanaigh freisin chun nascleanúint a dhéanamh níos éasca. Tacaíonn Lcov le clúdach teaghráin, feidhmeanna agus brainsí.

Tar éis na tástálacha a bheith críochnaithe, beidh an fhaisnéis clúdaigh lonnaithe i clúdach/lcov.info.
Caithfimid a rá Sonar'Cén áit ar féidir liom é a fháil? Mar sin, cuirimis na línte seo a leanas lena chomhad cumraíochta. Ach tá pointe amháin ann: is féidir le tionscadail a bheith ilteangach, is é sin, san fhillteán src tá cóid foinse ann do roinnt teangacha ríomhchlárúcháin agus cleamhnacht le ceann amháin nó le ceann eile, agus ar a seal, déantar úsáid breiseán amháin nó eile a chinneadh trína fhadú. Agus is féidir faisnéis chlúdaigh a stóráil in áiteanna éagsúla do theangacha éagsúla ríomhchlárúcháin, mar sin tá a rannán féin ag gach teanga chun é seo a shocrú. Úsáideann ár dtionscadal Clóscríbhneoireacht, mar sin ní mór dúinn rannóg socruithe díreach dó:

maoine.sonraí-tionscadal:

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

Tá gach rud réidh le haghaidh an chéad seoladh an scanóir. Ba mhaith liom a thabhairt faoi deara go bhfuil an tionscadal SonarCruthaítear e go huathoibríoch an chéad uair a ritheann tú an scanóir do thionscadal ar leith. Sna hamanna ina dhiaidh sin, carnfar faisnéis chun dinimic na n-athruithe ar pharaiméadair tionscadail le himeacht ama a fheiceáil.

Mar sin, bainimis úsáid as an ordú a cruthaíodh níos luaithe i pacáiste.json:

yarn run sonar 

Tabhair faoi deara: is féidir leat an paraiméadar a úsáid freisin -X le haghaidh logáil níos mionsonraithe.

Má seoladh an scanóir den chéad uair, déanfar dénártha an scanóir féin a íoslódáil ar dtús. Ina dhiaidh sin tosaíonn sé agus tosaíonn sé ag scanadh an fhreastalaí Sonar'a le haghaidh breiseán suiteáilte, agus mar sin an teanga tacaithe á ríomh. Tá paraiméadair éagsúla eile dá oibriú luchtaithe freisin: próifílí cáilíochta, rialacha gníomhacha, stór méadrachta, rialacha freastalaí.

Comhtháthú tionscadail VueJS+TS le SonarQube

Comhtháthú tionscadail VueJS+TS le SonarQube

Tabhair faoi deara: Ní fhanfaimid go mion orthu faoi chuimsiú an ailt seo, ach is féidir leat teagmháil a dhéanamh le foinsí oifigiúla i gcónaí.

Ansin, tosaíonn an anailís fillteán src maidir le hinfhaighteacht comhaid foinse do chách (mura bhfuil ceann sonrach sonraithe go sainráite) teanga tacaithe, lena n-innéacsú ina dhiaidh sin.

Comhtháthú tionscadail VueJS+TS le SonarQube

Ansin déanaimid anailísí éagsúla eile, nach ndírímid orthu san Airteagal seo (mar shampla, linting, dúbailt cód a bhrath, etc.).

Ag deireadh obair an scanóir, déantar an fhaisnéis go léir a bhailítear a chomhiomlánú, a chartlannú agus a sheoladh chuig an bhfreastalaí.

Tar éis seo, is féidir linn a fheiceáil cheana féin cad a tharla sa chomhéadan gréasáin:

Comhtháthú tionscadail VueJS+TS le SonarQube

Mar is féidir linn a fheiceáil, d'oibrigh rud éigin, agus fiú léiríonn clúdach de chineál éigin, ach ní hionann sé linne -tuairisc.

A ligean ar figiúr sé amach. Breathnaímid ar an tionscadal go mion, cliceáil ar an luach clúdaigh, agus "titim tríd" isteach i dtuarascáil mhionsonraithe comhaid:

Comhtháthú tionscadail VueJS+TS le SonarQube

Anseo feicimid, chomh maith leis an bpríomhchomhad scrúdaithe Dia duitWorld.vue, tá comhad ann freisin príomh.ts, a millteann pictiúr iomlán an chlúdaigh. Ach conas a rinne muid é a eisiamh ó ríomh an chlúdaigh. Sea, tá gach rud ceart, ach bhí sé ar an leibhéal , ach rinne an scanóir innéacsú air, agus mar sin chríochnaigh sé ina chuid ríomhaireachtaí.

Déanaimis é seo a shocrú:

maoine.sonraí-tionscadal:

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

Ba mhaith liom soiléiriú a dhéanamh: chomh maith leis na fillteáin atá sonraithe sa pharaiméadar seo, cuirtear gach fillteán atá liostaithe sa pharaiméadar leis freisin sonrai.tástála.

Tar éis dúinn an scanóir a sheoladh, feicimid an fhaisnéis cheart:

Comhtháthú tionscadail VueJS+TS le SonarQube

Comhtháthú tionscadail VueJS+TS le SonarQube

Breathnaímid ar an gcéad phointe eile - Próifílí cáilíochta. Labhair mé thuas faoi thacaíocht Sonar'om roinnt teangacha ag an am céanna. Is é seo go díreach atá á fheiceáil againn. Ach tá a fhios againn go bhfuil ár dtionscadal scríofa i TS, mar sin cén fáth brú an scanóir le ionramhálacha agus seiceálacha gan ghá. Socróimid an teanga le haghaidh anailíse trí pharaiméadar amháin eile a chur leis an gcomhad cumraíochta Sonar'A:

maoine.sonraí-tionscadal:

...
sonar.language=ts
...

Rithfimid an scanóir arís agus an toradh a fheiceáil:

Comhtháthú tionscadail VueJS+TS le SonarQube

Bhí an clúdach imithe go hiomlán.

Má fhéachaimid ar logáil an scanóir, is féidir linn an líne seo a leanas a fheiceáil:

Comhtháthú tionscadail VueJS+TS le SonarQube

Is é sin, ní raibh ár gcomhaid tionscadail innéacsaithe go simplí.

Seo a leanas an scéal: tacaíocht oifigiúil VueJs atá sa breiseán SonarJSatá freagrach as Javascript.

Comhtháthú tionscadail VueJS+TS le SonarQube

Ach níl an tacaíocht seo sa bhreiseán SonarTS le haghaidh TS, faoinar osclaíodh ticéad oifigiúil sa rianaitheoir fabhtanna Sonar'A:

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

Seo roinnt freagraí ó cheann de na hionadaithe ó fhorbróirí SonarQube, ag dearbhú an fhíric seo.

Comhtháthú tionscadail VueJS+TS le SonarQube

Comhtháthú tionscadail VueJS+TS le SonarQube

Ach d'oibrigh gach rud dúinn, rud a dhéanann tú. Sea, déanaimis iarracht beagán a dhéanamh "hack".
Má tá tacaíocht ann .vue-comhaid Sonar'Ó, ansin déanaimis iarracht a insint dó iad a mheas mar Clóscríbhneoireacht.

Cuirimis paraiméadar leis:

maoine.sonraí-tionscadal:

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

Seolfaimid an scanóir:

Comhtháthú tionscadail VueJS+TS le SonarQube

Agus, voila, tá gach rud ar ais go gnáth, agus le próifíl amháin amháin Clóscríbhneoireacht. Is é sin, d'éirigh linn an fhadhb a réiteach mar thacaíocht VueJs+TS le haghaidh fuaimrian.

Déanaimis iarracht dul níos faide agus an t-eolas clúdaigh a fheabhsú beagán.

Cad atá déanta againn go dtí seo:

  • curtha leis an tionscadal Sonar-scannán;
  • ar bun faisnéis chlúdaigh a ghiniúint;
  • cumraithe Sonar-scannán;
  • an fhadhb tacaíochta a réiteach .vue-comhaid + Clóscríbhneoireacht.

Chomh maith le clúdach tástála, tá critéir úsáideacha suimiúla eile ann maidir le cáilíocht cód, mar shampla, dúbailt cód agus líon na línte (a bhaineann le ríomh comhéifeachtaí a bhaineann le castacht cód) an tionscadail.

I gcur i bhfeidhm reatha an breiseán le haghaidh oibriú le TS (SonarTS) ní oibreoidh CPD (Brathadóir Greamaigh Cóipeála) agus línte cód a chomhaireamh .vue-comhaid.

Chun staid shintéiseach de dhúbláil cód a chruthú, ní gá ach an comhad comhpháirte a dhúbailt le hainm difriúil agus cuir leis an gcód é freisin príomh.ts feidhm chaochadán agus déan í a dhúbailt le hainm eile. Chun seiceáil le haghaidh dúbailt mar atá i .vueagus i .ts -comhaid.

príomh.ts:

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

Chun seo a dhéanamh, ní mór duit trácht a dhéanamh go sealadach ar an líne chumraíochta:

maoine.sonraí-tionscadal:

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

Déanaimis an scanóir a atosú mar aon le tástáil:

yarn test && yarn run sonar

Ar ndóigh, beidh ár gclúdach ag titim, ach anois níl suim againn ann.

Maidir le línte cód a dhúbailt, feicfimid:

Comhtháthú tionscadail VueJS+TS le SonarQube

Chun seiceáil úsáidfimid FGL- fóntais - jscpd:

npx jscpd src

Comhtháthú tionscadail VueJS+TS le SonarQube

Le haghaidh línte cód:

Comhtháthú tionscadail VueJS+TS le SonarQube

B'fhéidir go réiteofar é seo i leaganacha breiseán amach anseo SonarJS(TS). Ba mhaith liom a thabhairt faoi deara go bhfuil siad ag tosú de réir a chéile ar an dá breiseán seo a chumasc i gceann amháin SonarJS, rud atá ceart, dar liom.

Anois theastaigh uaim machnamh a dhéanamh ar an rogha eolas clúdaigh a fheabhsú.

Go dtí seo is féidir linn clúdach tástála a fheiceáil i dtéarmaí céatadáin don tionscadal iomlán, agus do chomhaid go háirithe. Ach is féidir an táscaire seo a leathnú le faisnéis faoin gcainníocht aonad-tástálacha don tionscadal, chomh maith le i gcomhthéacs comhaid.

Tá leabharlann ann ar féidir - an tuarascáil a thiontú go formáid le haghaidh Sonar'A:
sonraí tástála cineálach - https://docs.sonarqube.org/display/SONAR/Generic+Test+Data.

Déanaimis an leabharlann seo a shuiteáil inár dtionscadal:

yarn add jest-sonar-reporter

Agus é a chur leis an chumraíocht :

pacáiste.json:

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

Anois, déanaimis an tástáil a rith:

yarn test

Ina dhiaidh sin cruthófar comhad i bhfréamh an tionscadail tástála-tuarascáil.xml.

A ligean ar é a úsáid sa chumraíocht Sonar'A:

maoine.sonraí-tionscadal:

…
sonar.testExecutionReportPaths=test-report.xml
…

Agus an scanóir a atosú:

yarn run sonar

A ligean ar a fheiceáil cad atá athraithe sa chomhéadan Sonar'A:

Comhtháthú tionscadail VueJS+TS le SonarQube

Agus níl aon athrú ar bith. Is é fírinne an scéil nach measann Sonar na comhaid a thuairiscítear i dtuarascáil Jest mar chomhaid aonad-tástálacha. Chun an cás seo a cheartú, úsáidimid an paraiméadar cumraíochta Sonar tástálacha sonar, ina gcuirfimid na fillteáin in iúl go sainráite le tástálacha (níl ach ceann amháin againn faoi láthair):

maoine.sonraí-tionscadal:

…
sonar.tests=src/components/__tests__
…

Déanaimis an scanóir a atosú:

yarn run sonar

Feicfimid cad atá athraithe sa chomhéadan:

Comhtháthú tionscadail VueJS+TS le SonarQube

Anois tá líon na n-ár aonad-tests agus, tar éis teipthe trí chliceáil taobh istigh, is féidir linn dáileadh na huimhreach seo a fheiceáil i measc na gcomhad tionscadail:

Comhtháthú tionscadail VueJS+TS le SonarQube

Conclúid

Mar sin, d'fhéachamar ar uirlis le haghaidh anailíse leanúnach fuaimrian. D’éirigh linn tionscadal scríofa a chomhtháthú isteach ann VueJs+TS. Socraithe roinnt saincheisteanna comhoiriúnachta. Mhéadaigh muid an t-ábhar faisnéise atá sa táscaire clúdach tástála. San Airteagal seo scrúdaigh muid ach ceann amháin de na critéir cáilíochta cód (b'fhéidir ar cheann de na cinn is mó), ach fuaimrian tacaíonn sé le critéir cháilíochta eile, lena n-áirítear tástáil sábháilteachta. Ach níl na gnéithe seo go léir ar fáil go hiomlán i pobail-leaganacha. Ceann de na gnéithe suimiúla agus úsáideacha ná comhtháthú fuaimrian le córais bhainistíochta stórtha cód éagsúla, mar shampla GitLab agus BitBucket. Chun cosc ​​a chur iarratas tarraingthe chumasc (cumasc).'a chuig an bpríomhbhrainse den stór nuair a bhíonn an clúdach díghrádaithe. Ach is scéal é seo d’alt iomlán difriúil.

PS: Tá gach rud a thuairiscítear san alt i bhfoirm cód ar fáil i mo forc.

Ní féidir ach le húsáideoirí cláraithe páirt a ghlacadh sa suirbhé. Sínigh isteach, le do thoil.

An úsáideann tú ardán SonarQube:

  • 26,3%Tá5

  • 15,8%Uimh3

  • 15,8%Chuala mé faoin ardán seo agus ba mhaith liom use3

  • 10,5%Chuala mé faoin ardán seo agus níl mé ag iarraidh é a úsáid2

  • 0,0%Tá ardán eile á úsáid agam0

  • 31,6%An chéad uair a chuala mé fúithi6

Vótáil 19 úsáideoir. Staon 3 úsáideoir.

Foinse: will.com

Add a comment