ç§ãã¡ã¯ä»äºã§ãã©ãããã©ãŒã ãç©æ¥µçã«äœ¿çšããŠããŸã ãœããŒãã¥ãŒã ã³ãŒãã®å質ãé«ãã¬ãã«ã§ç¶æããŸãã ã§æžããããããžã§ã¯ãã® XNUMX ã€ãçµ±åãããšã VueJs+Typescriptãåé¡ãçºçããŸããã ããã§ãã©ã®ããã«ããŠãããã解決ããããšãã§ããã®ãã詳ããã話ããããšæããŸãã
ãã®èšäºã§ã¯ãäžã§æžããããã«ãSonarQube ãã©ãããã©ãŒã ã«ã€ããŠèª¬æããŸãã åããŠããã«ã€ããŠèã人ã®ããã«ãã¡ãã£ãšããçè« - äžè¬çã«ã¯ã©ã®ãããªãã®ãã説æããŸãã
ãœããŒãã¥ãŒã ïŒåè ãœããŒ) ã¯ãç¶ç¶çãªæ€æ»ãšã³ãŒãå質枬å®ã®ããã®ãªãŒãã³ãœãŒã¹ ãã©ãããã©ãŒã ã§ãã
MISRA CãMISRA C++ãMITER/CWEãããã³ CERT ã»ãã¥ã¢ ã³ãŒãã£ã³ã°æšæºããã°ã©ãã³ã°æšæºã®ã«ãŒã«ã«åŸã£ãã³ãŒãåæãšãšã©ãŒæ€åºããµããŒãããŸãã ãŸããOWASP Top 10 ããã³ CWE/SANS Top 25 ããã°ã©ãã³ã° ãšã©ãŒ ãªã¹ãã®ãšã©ãŒãèªèã§ããŸãã
ãã©ãããã©ãŒã ã§ã¯ããŸããŸãªæ¢è£œã®ããŒã«ã䜿çšãããŠããã«ãããããããSonarQube ã¯çµæã XNUMX ã€ã®ããã·ã¥ããŒãã«ãŸãšããŠå®è¡ã®å±¥æŽãä¿æãããããéçºäžã®ãœãããŠã§ã¢å質ã®å€åã®äžè¬çãªåŸåã確èªã§ããŸãã
詳现ã«ã€ããŠã¯ã次㮠URL ãåç
§ããŠãã ããã
å€æ°ã®ããã°ã©ãã³ã°èšèªããµããŒããããŠããŸãã äžèšã®ãªã³ã¯ããã®æ å ±ããå€æãããšãããã㯠25 以äžã®èšèªã§ãã ç¹å®ã®èšèªããµããŒãããã«ã¯ãé©åãªãã©ã°ã€ã³ãã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã ã³ãã¥ããã£ããŒãžã§ã³ã«ã¯ãé£æºããããã®ãã©ã°ã€ã³ãå«ãŸããŠããŸã Javascriptã (typescript ãå«ã)ããã ã wiki ã«ã¯å察ã®ããšãæžãããŠããŸãã åŸãã« Javascriptã ãã©ã°ã€ã³ã®åç SonarJSãã¿ã€ãã¹ã¯ãªããã®å Žå ãœããŒTS ããããã
å ¬åŒã¯ã©ã€ã¢ã³ãã¯åææ å ±ã®éä¿¡ã«äœ¿çšãããŸã ãœããŒãã¥ãŒãã¹ãã£ããŒã®èšå®ã䜿çšããŸãã èšå®-fileããã®ããŒã¿ããµãŒããŒã«éä¿¡ããŸã ãœããŒãã¥ãŒã ãããªãçµ±åãšéçŽã®ããã«ã
ã®ããã« Javascriptã ããã
ãµãŒããŒãå±éããã«ã¯ ãœããŒãã¥ãŒã 掻çšããŸããã ããã«ãŒã®äœæ.
ãœããŒ.yaml:
version: '1'
services:
simplesample-sonar:
image: sonarqube:lts
ports:
- 9001:9000
- 9092:9092
network_mode: bridge
å®è¡ïŒ
docker-compose -f sonar.yml up
ãã®åŸ ãœããŒãã¥ãŒã ã§å
¥æå¯èœã«ãªããŸã:
ãŸã ãããžã§ã¯ãã¯ãããŸããããããã¯åœç¶ã§ãã ãã®ç¶æ³ãä¿®æ£ããŸãã å
¬åŒã®ãµã³ãã«ãããžã§ã¯ãã䜿çšããŸãã VueJS+TS+Jestã ãããèªåèªèº«ã«åãã£ãŠæ²ããŠã¿ãŸãããã
git clone https://github.com/vuejs/vue-test-utils-typescript-example.git
ãŸãã¯ã©ã€ã¢ã³ããã€ã³ã¹ããŒã«ããå¿ èŠããããŸã ãœããŒãã¥ãŒããšåŒã°ãã ãœããŒã¹ãã£ããŒã®ããã« npm ã©ãããŒããããŸã:
yarn add sonarqube-scanner
ãããŠããã«ã³ãã³ããè¿œå ããŸã ã¹ã¯ãªãã ããã䜿ã£ãŠäœæ¥ããŸãã
ããã±ãŒãž.json:
{
âŠ
scripts: {
...
"sonar": "sonar-scanner"
...
},
âŠ
}
次ã«ãã¹ãã£ããŒãåäœãããã«ã¯ãç¹å¥ãªãã¡ã€ã«ã§ãããžã§ã¯ãèšå®ãè¡ãå¿ èŠããããŸãã åºæ¬ããå§ããŸãããã
ãœããŒãããžã§ã¯ãã®ããããã£:
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
- ãœããŒ.ãã¹ã.url - äœæ ãœããŒ'ã;
- sonar.projectKey â ãµãŒããŒäžã®äžæã®ãããžã§ã¯ãèå¥å ãœããŒ'ã;
- ãœããŒ.ãããžã§ã¯ãå â ãããžã§ã¯ãã¯æ¬¡ã®ããã«èå¥ãããããããã€ã§ãå€æŽã§ããŸãã ãããžã§ã¯ãããŒ;
- ãœããŒãœãŒã¹ â ãœãŒã¹ã®ãããã©ã«ããŒãéåžžã¯ãã SRCãã§ãäœã§ãæ§ããŸããã ãã®ãã©ã«ããŒã¯ãã¹ãã£ããŒãèµ·åããããã©ã«ããŒã§ããã«ãŒã ãã©ã«ããŒãåºæºã«ããŠèšå®ãããŸãã
- ãœããŒãã¹ã â åã®ãã©ã¡ãŒã¿ãšé£åãããã©ã¡ãŒã¿ã ããã¯ãã¹ããé 眮ãããŠãããã©ã«ããŒã§ãã ãã®ãããžã§ã¯ãã«ã¯ãã®ãããªãã©ã«ããŒã¯ãªãããã¹ãã¯ãã©ã«ããŒå ã®ãã¹ã察象ã³ã³ããŒãã³ãã®é£ã«ãããŸããtest' ãªã®ã§ãä»ã¯ç¡èŠããŠæ¬¡ã®ãã©ã¡ãŒã¿ã䜿çšããŸãã
- ãœããŒãã¹ãã€ã³ã¯ã«ãŒãžã§ã³ â ãã¹ã¯ã䜿çšãããã¹ãã®ãã¹ãè€æ°ã®èŠçŽ ãã«ã³ãã§åºåãããŠãªã¹ããããå ŽåããããŸãã
- sonar.sourceEncoding â ãœãŒã¹ãã¡ã€ã«ã®ãšã³ã³ãŒãã£ã³ã°ã
ã¹ãã£ããŒã®æåã®èµ·åã§ã¯ãå è¡ããäž»ãªã¢ã¯ã·ã§ã³ãé€ããŠããã¹ãŠã®æºåãæŽã£ãŠããŸãããã¹ã ãšã³ãžã³èªäœãèµ·åããŠãã¹ãã£ããŒãåŸã§äœ¿çšããã«ãã¬ããžã«é¢ããæ å ±ãçæã§ããããã«ããŸãã
ãã ãããããè¡ãã«ã¯ããã®æ å ±ãçæããããã«ãã¹ã ãšã³ãžã³ãæ§æããå¿ èŠããããŸãã ãã®ãããžã§ã¯ãã§ã¯ããã¹ã ãšã³ãžã³ã¯æ¬¡ã®ãšããã§ãã åè«ã ãã®èšå®ã¯ãã¡ã€ã«ã®å¯Ÿå¿ããã»ã¯ã·ã§ã³ã«ãããŸã package.json.
ãããã®èšå®ãè¿œå ããŸãããã
"collectCoverage": true,
"collectCoverageFrom": [
"src/**/*",
"!src/main.ts",
"!src/App.vue",
"!src/**/*.d.*",
"!src/**/*__tests__*"
],
ã€ãŸããã«ãã¬ããžãšããã圢æãããããŒã¹ãšãªããœãŒã¹ (äŸå€ãå«ã) ãèšç®ããå¿ èŠããããã©ããã瀺ããã©ã°èªäœãèšå®ããŸãã
ã§ã¯ããã¹ããå®è¡ããŠã¿ãŸãããã
yarn test
次ã®ããšãããããŸãã
ãã®çç±ã¯ãã³ã³ããŒãã³ãèªäœã«ã³ãŒããååšããªãããã§ãã ãããä¿®æ£ããŸãããã
HelloWorld.vue:
...
methods: {
calc(n) {
return n + 1;
}
},
mounted() {
this.msg1 = this.msg + this.calc(1);
},
...
ã«ãã¬ããžãèšç®ããã«ã¯ããã§ååã§ãã
ãã¹ããåéããåŸã次ã®ããšã確èªããŸãã
ç»é¢ã«ã«ãã¬ããžã«é¢ããæ å ±ã衚瀺ããããããžã§ã¯ããã©ã«ããŒã«ãã©ã«ããŒãäœæãããŸãã ã«ãã¬ããž ãŠãããŒãµã«åœ¢åŒã®ãã¹ãã«ãã¬ããžæ å ±ãå«ã LCOV (LTP GCOV æ¡åŒµ).
ã°ã³ã ã¯ãã³ãŒã ã«ãã¬ããžã調ã¹ãããã®ç¡æé åžãŠãŒãã£ãªãã£ã§ãã Gcov ã¯ãããã°ã©ã å ã®åã¹ããŒãã¡ã³ãã®æ£ç¢ºãªå®è¡æ°ãçæãããœãŒã¹ ã³ãŒãã«æ³šéãè¿œå ã§ããããã«ããŸãã Gcov ã¯ãGCC ããã±ãŒãžã®äžéšãšããŠæšæºãŠãŒãã£ãªãã£ãšããŠæäŸãããŸãã
ã«ã³ã - gcov ã®ã°ã©ãã£ã«ã« ã€ã³ã¿ãŒãã§ã€ã¹ã è€æ°ã®ãœãŒã¹ ãã¡ã€ã«ã® gcov ãã¡ã€ã«ãã¢ã»ã³ãã«ããã³ãŒããšã«ãã¬ããžæ å ±ãå«ãäžé£ã® HTML ããŒãžãçæããŸãã ããã²ãŒã·ã§ã³ã容æã«ããããã«ããŒãžãçæãããŸãã Lcov ã¯ãæååãé¢æ°ãããã³åå²ã®ã«ãã¬ããžããµããŒãããŸãã
ãã¹ããå®äºãããšãã«ãã¬ããžæ
å ±ã次ã®å Žæã«è¡šç€ºãããŸãã ã«ãã¬ããž/lcov.info.
èšãå¿
èŠããããŸã ãœããŒãã©ãããå
¥æã§ããŸããïŒã ãããã£ãŠãæ§æãã¡ã€ã«ã«æ¬¡ã®è¡ãè¿œå ããŸãããã ãã ãããã€ã³ãã XNUMX ã€ãããŸãããããžã§ã¯ãã¯å€èšèªã«ããããšãã§ããŸããã€ãŸãããã©ã«ããŒå
ã§ãããžã§ã¯ããå€èšèªã«ããããšãã§ããŸãã SRC ããã€ãã®ããã°ã©ãã³ã°èšèªã®ãœãŒã¹ ã³ãŒãããããããããã«å±ããŠãããããããã®ãã©ã°ã€ã³ã®äœ¿çšã¯ãã®æ¡åŒµåã«ãã£ãŠæ±ºãŸããŸãã ãŸããã«ãã¬ããžæ
å ±ã¯ããã°ã©ãã³ã°èšèªããšã«ç°ãªãå Žæã«ä¿åã§ãããããèšèªããšã«ãããèšå®ããããã®ç¬èªã®ã»ã¯ã·ã§ã³ããããŸãã ç§ãã¡ã®ãããžã§ã¯ãã§ã¯ã ã¿ã€ãã¹ã¯ãªãããããã£ãŠããã®ããã ãã«èšå®ã»ã¯ã·ã§ã³ãå¿
èŠã§ãã
ãœããŒãããžã§ã¯ãã®ããããã£:
sonar.typescript.coveragePlugin=lcov
sonar.typescript.lcov.reportPaths=coverage/lcov.info
ã¹ãã£ããŒãåããŠèµ·åããæºåããã¹ãŠæŽããŸããã 泚æãããã®ã¯ããã®ãããžã§ã¯ãã¯ã ãœããŒ'e ã¯ãç¹å®ã®ãããžã§ã¯ãã«å¯ŸããŠã¹ãã£ããåããŠå®è¡ãããšãã«èªåçã«äœæãããŸãã ãã®åŸãæéã®çµéã«äŒŽããããžã§ã¯ããã©ã¡ãŒã¿ã®å€åã®ãã€ããã¯ã¹ã確èªããããã«æ å ±ãèç©ãããŸãã
ããã§ãåã«äœæããã³ãã³ãã䜿çšããŠã¿ãŸããã package.json:
yarn run sonar
泚æïŒ ãã©ã¡ãŒã¿ã䜿çšããããšãã§ããŸã -X ãã詳现ãªãã°ãèšé²ããŸãã
ã¹ãã£ããŒãåããŠèµ·åãããå Žåã¯ãã¹ãã£ããŒèªäœã®ãã€ããªãæåã«ããŠã³ããŒããããŸãã ãã®åŸãèµ·åããŠãµãŒããŒã®ã¹ãã£ã³ãéå§ããŸã ãœããŒ'a ã¯ã€ã³ã¹ããŒã«ãããŠãããã©ââã°ã€ã³ãè¡šããããã«ãã£ãŠãµããŒããããŠããèšèªãèšç®ããŸãã ãã®æäœã®ããã®ä»ã®ããŸããŸãªãã©ã¡ãŒã¿ãããŒããããŸãã å質ãããã¡ã€ã«ãã¢ã¯ãã£ããªã«ãŒã«ãã¡ããªã¯ã¹ ãªããžããªããµãŒã㌠ã«ãŒã«.
泚æïŒ ãã®èšäºã®æ å ã§ã¯è©³ãã説æããŸãããããã€ã§ãå ¬åŒæ å ±æºã«åãåãããããšãã§ããŸãã
次ã«ããã©ã«ããŒã®åæãå§ãŸããŸã SRC ãã¹ãŠã®ãµããŒã察象èšèª (ç¹å®ã®èšèªãæ瀺çã«æå®ãããŠããªãå Žå) ã®ãœãŒã¹ ãã¡ã€ã«ãšããã®åŸã®ã€ã³ããã¯ã¹ä»ãã®å¯çšæ§ã«ã€ããŠã
次ã«ããã®ä»ã®ããŸããŸãªåæãè¡ãããŸããããã®èšäºã§ã¯åãäžããŸãã (ããšãã°ããªã³ãã£ã³ã°ãã³ãŒãéè€ã®æ€åºãªã©)ã
ã¹ãã£ããŒã®äœæ¥ã®æåŸã«ãåéããããã¹ãŠã®æ å ±ãéçŽãããã¢ãŒã«ã€ããããŠãµãŒããŒã«éä¿¡ãããŸãã
ãã®åŸãWeb ã€ã³ã¿ãŒãã§ã€ã¹ã§äœãèµ·ãã£ããããã§ã«ç¢ºèªã§ããŸãã
ã芧ã®ãšãããäœãã¯æ©èœããããçš®ã®ã«ãã¬ããžã衚瀺ãããŠããŸãããç§ãã¡ã®ãã®ãšã¯äžèŽããŸãã åè«-å ±åã
ãããç解ããŸãããã ãããžã§ã¯ããããã«è©³ããèŠãŠãã«ãã¬ããžå€ãã¯ãªãã¯ãããšã詳现ãªãã¡ã€ã« ã¬ããŒãã衚瀺ãããŸãã
ããã§ã¯ãã¡ã€ã³ã®èª¿ã¹ããããã¡ã€ã«ã«å ããŠã HelloWorld.vueããã¡ã€ã«ããããŸã main.tsãããã¯å ±éã®å šäœåãå°ç¡ãã«ããŸãã ãããããªãè£åç¯å²ã®èšç®ããé€å€ããã®ã§ããããã ã¯ãããã¹ãŠæ£ããã§ãããã¬ãã«äžã§ãã åè«ããããã¹ãã£ããŒãã€ã³ããã¯ã¹ãä»ããã®ã§ããããèšç®ã«å«ãŸããŠããŸããŸããã
ãããä¿®æ£ããŸããã:
ãœããŒãããžã§ã¯ãã®ããããã£:
...
sonar.exclusions=src/main.ts
...
æ確ã«ãããã®ã§ããããã®ãã©ã¡ãŒã¿ãŒã§æå®ããããã©ã«ããŒã«å ããŠããã©ã¡ãŒã¿ãŒã«ãªã¹ããããŠãããã¹ãŠã®ãã©ã«ããŒãè¿œå ãããŸãã ãœããŒãã¹ãã€ã³ã¯ã«ãŒãžã§ã³.
ã¹ãã£ããŒãèµ·åãããšãæ£ããæ å ±ã衚瀺ãããŸãã
次ã®ç¹ãèŠãŠã¿ãŸããã - å質ãããã¡ã€ã«ã ãµããŒãã«ã€ããŠã¯äžã§ã話ããŸãã ãœããŒåæã«è€æ°ã®èšèªã䜿çšã§ããŸãã ããã¯ãŸãã«ç§ãã¡ãèŠãŠãããã®ã§ãã ããããç§ãã¡ã®ãããžã§ã¯ãã¯æ¬¡ã®ããã«æžãããŠããããšãç¥ã£ãŠããŸãã TSã§ã¯ããªãäžå¿ èŠãªæäœããã§ãã¯ã§ã¹ãã£ããŒã«è² æ ããããå¿ èŠãããã®ã§ããããã æ§æãã¡ã€ã«ã«ãã©ã¡ãŒã¿ãŒããã XNUMX ã€è¿œå ããŠãåæçšã®èšèªãèšå®ããŸãã ãœããŒ'A:
ãœããŒãããžã§ã¯ãã®ããããã£:
...
sonar.language=ts
...
ã¹ãã£ããå床å®è¡ããŠçµæãèŠãŠã¿ãŸãããã
ã«ããŒåã¯å®å šã«ãªããªããŸããã
ã¹ãã£ããŒã®ãã°ãèŠããšã次ã®è¡ã衚瀺ãããŸãã
ã€ãŸãããããžã§ã¯ã ãã¡ã€ã«ã«ã€ã³ããã¯ã¹ãäœæãããŠããªãã ãã§ãã
ç¶æ³ã¯æ¬¡ã®ãšããã§ãïŒæ£åŒã«ãµããŒããããŠããŸã VueJ ãã©ã°ã€ã³ã«ãããŸã SonarJS誰ã責任ãè² ãã®ã Javascriptã.
ãã ãããã®ãµããŒãã¯ãã©ã°ã€ã³ã«ã¯å«ãŸããŠããŸãã ãœããŒTS ã®ããã« TSããã°ãã©ãã«ãŒã§å ¬åŒãã±ããããªãŒãã³ãããŸãã ãœããŒ'A:
ãã®äºå®ãè£ä»ãããSonarQube éçºè ã®ä»£è¡šè ã® XNUMX 人ããã®åçãããã€ã玹ä»ããŸãã
ããããç§ãã¡ã«ãšã£ãŠã¯ãã¹ãŠãããŸããããŸãããããªãã¯å察ããŸãã ããã ããã¡ãã£ãšè©ŠããŠã¿ãŸããã "ããã¯".
ãµããŒããããã° .vue-ãã¡ã€ã« ãœããŒãããããããªã圌ã«ãããã次ã®ããã«èããããã«äŒããŠã¿ãŸãããã ã¿ã€ãã¹ã¯ãªãã.
ãã©ã¡ãŒã¿ãŒãè¿œå ããŸãããã
ãœããŒãããžã§ã¯ãã®ããããã£:
...
sonar.typescript.file.suffixes=.ts,.tsx,.vue
...
ã¹ãã£ããŒãèµ·åããŸãããã
ãããŠãã»ãããã¹ãŠãæ£åžžã«æ»ãããããã¡ã€ã«ã XNUMX ã€ã ãã«ãªããŸããã ã¿ã€ãã¹ã¯ãªããã ã€ãŸãããµããŒãã§åé¡ã解決ã§ããŸãã VueJs+TS ã®ããã« ãœããŒãã¥ãŒã.
ããã«é²ãã§ãã«ãã¬ããžæ å ±ãå°ãæ¹åããŠã¿ãŸãããã
ç§ãã¡ããããŸã§ã«è¡ã£ãããš:
- ãããžã§ã¯ãã«è¿œå ãããŸãã ãœããŒ-ã¹ãã£ããŒ;
- èšå® åè« ã«ãã¬ããžæ å ±ãçæããããã
- èšå®æžã¿ ãœããŒ-ã¹ãã£ããŒ;
- ãµããŒãã®åé¡ã解決ããŸãã .vue-ãã¡ã€ã« + ã¿ã€ãã¹ã¯ãªãã.
ãã¹ã ã«ãã¬ããžã«å ããŠãã³ãŒãã®å質ã«ã€ããŠã¯ä»ã«ãèå³æ·±ã䟿å©ãªåºæºããããŸããããšãã°ããããžã§ã¯ãã®ã³ãŒãã®éè€ãè¡æ° (ã³ãŒãã®è€éãã«é¢é£ããä¿æ°ã®èšç®ã«é¢ä¿ãã) ãªã©ã§ãã
çŸåšã®ãã©ã°ã€ã³ã®å®è£ ã§ã¯ã TS (ãœããŒTSïŒ åäœããªãã§ããã CPD (ã³ããŒããŒã¹ãæ€åºåš) ã³ãŒãã®è¡æ°ãæ°ãã .vue-ãã¡ã€ã«ã
ã³ãŒãéè€ã®åæç¶æ³ãäœæããã«ã¯ãåã«ã³ã³ããŒãã³ã ãã¡ã€ã«ãå¥ã®ååã§è€è£œãããããã³ãŒãã«è¿œå ããŸãã main.ts ãããŒé¢æ°ãäœæããå¥ã®ååã§è€è£œããŸãã 次ã®ããã«éè€ããã§ãã¯ããã«ã¯ .vueãããã³ .ts -ãã¡ã€ã«ã
main.ts:
...
function name(params:string): void {
console.log(params);
}
...
ãããè¡ãã«ã¯ãæ§æè¡ãäžæçã«ã³ã¡ã³ãã¢ãŠãããå¿ èŠããããŸãã
ãœããŒãããžã§ã¯ãã®ããããã£:
...
sonar.exclusions=src/main.ts
...
ãã¹ããšãšãã«ã¹ãã£ããŒãåèµ·åããŠã¿ãŸãããã
yarn test && yarn run sonar
ãã¡ãããç§ãã¡ã®å ±éç¯å²ã¯æžããŸãããä»ã¯ãããªããšã«ã¯èå³ããããŸããã
ã³ãŒãè¡ã®è€è£œã«é¢ããŠã¯ã次ã®ããšãããããŸãã
確èªããã«ã¯ã䜿çšããŸã CPD-ãŠãŒãã£ãªã㣠- jscpd:
npx jscpd src
ã³ãŒãè¡ã®å Žå:
ããããããã¯å°æ¥ã®ãã©ã°ã€ã³ã®ããŒãžã§ã³ã§è§£æ±ºãããã§ããã ãœããŒJS(TS)ã ããã XNUMX ã€ã®ãã©ã°ã€ã³ãåŸã ã« XNUMX ã€ã«çµ±åãå§ããŠããããšã«æ³šæããŠãã ããã SonarJSãããã¯æ£ãããšæããŸãã
ããã§ãã«ãã¬ããžæ å ±ãæ¹åãããšããéžæè¢ãæ€èšããããšæããŸããã
ãããŸã§ã®ãšããããããžã§ã¯ãå šäœãç¹ã«ãã¡ã€ã«ã®ãã¹ã ã«ãã¬ããžãããŒã»ã³ããŒãžã§ç¢ºèªã§ããŸãã ãã ããæ°éã«é¢ããæ å ±ã䜿çšããŠãã®ææšãæ¡åŒµããããšã¯å¯èœã§ãã åäœ- ãããžã§ã¯ãã®ãã¹ãã ãã§ãªãããã¡ã€ã«ã®ã³ã³ããã¹ãã§ããã¹ãããŸãã
ã§ããå³æžé€šããããŸã åè«-ã¬ããŒãã次ã®åœ¢åŒã«å€æããŸã ãœããŒ'A:
äžè¬çãªãã¹ãããŒã¿ -
ãã®ã©ã€ãã©ãªããããžã§ã¯ãã«ã€ã³ã¹ããŒã«ããŸãããã
yarn add jest-sonar-reporter
ãããŠãããæ§æã«è¿œå ããŸã åè«:
ããã±ãŒãž.json:
âŠ
"testResultsProcessor": "jest-sonar-reporter"
âŠ
ã§ã¯ããã¹ããå®è¡ããŠã¿ãŸãããã
yarn test
ãã®åŸããããžã§ã¯ãã®ã«ãŒãã«ãã¡ã€ã«ãäœæãããŸã ãã¹ãã¬ããŒã.xml.
èšå®ã§äœ¿ã£ãŠã¿ãŸããã ãœããŒ'A:
ãœããŒãããžã§ã¯ãã®ããããã£:
âŠ
sonar.testExecutionReportPaths=test-report.xml
âŠ
ãããŠã¹ãã£ããŒãåèµ·åããŸãã
yarn run sonar
ã€ã³ã¿ãŒãã§ãŒã¹ã§äœãå€ãã£ãã®ãèŠãŠã¿ãŸããã ãœããŒ'A:
ãããŠäœãå€ãã£ãŠããŸããã å®éã®ãšãããSonar 㯠Jest ã¬ããŒãã«èšèŒãããŠãããã¡ã€ã«ããã¡ã€ã«ãšã¯ã¿ãªããŸããã åäœ-ãã¹ãã ãã®ç¶æ³ãä¿®æ£ããã«ã¯ãæ§æãã©ã¡ãŒã¿ã䜿çšããŸãã ãœã㌠ãœããŒãã¹ãããã§ã¯ããã¹ããå«ããã©ã«ããŒãæ瀺çã«ç€ºããŸã (ä»ã®ãšãã㯠XNUMX ã€ã ãã§ã)ã
ãœããŒãããžã§ã¯ãã®ããããã£:
âŠ
sonar.tests=src/components/__tests__
âŠ
ã¹ãã£ããåèµ·åããŸãããã
yarn run sonar
ã€ã³ã¿ãŒãã§ãŒã¹ã§äœãå€ãã£ãã®ãèŠãŠã¿ãŸãããã
ããã§ãç§ãã¡ã®æ°ãããããŸãã åäœ-tests å ãã¯ãªãã¯ããŠå€±æãããšããããžã§ã¯ã ãã¡ã€ã«éã§ã®ãã®æ°å€ã®ååžãããããŸãã
ãŸãšã
ããã§ãç¶ç¶çãªåæã®ããã®ããŒã«ãæ€èšããŸããã ãœããŒãã¥ãŒãã ã§æžããããããžã§ã¯ããããã«ããŸãçµ±åããŸããã VueJs+TSã ããã€ãã®äºææ§ã®åé¡ãä¿®æ£ããŸããã ãã¹ãã«ãã¬ããžã€ã³ãžã±ãŒã¿ãŒã®æ å ±å 容ãå¢å ããŸããã ãã®èšäºã§ã¯ãã³ãŒãå質åºæºã®ãã¡ XNUMX ã€ã ã (ããããäž»èŠãªãã®ã® XNUMX ã€) ãæ€èšããŸãããã ãœããŒãã¥ãŒã å®å šæ§ãã¹ããªã©ã®ä»ã®å質åºæºããµããŒãããŠããŸãã ãã ãããããã®æ©èœã®ãã¹ãŠãå®å šã«å©çšã§ããããã§ã¯ãããŸããã ã³ãã¥ããã£-ããŒãžã§ã³ã èå³æ·±ã䟿å©ãªæ©èœã® XNUMX ã€ã¯çµ±åã§ãã ãœããŒãã¥ãŒã GitLab ã BitBucket ãªã©ã®ããŸããŸãªã³ãŒã ãªããžããªç®¡çã·ã¹ãã ã䜿çšããŸãã é²ãããã« ããŒãžãã«(ããŒãž)ãªã¯ãšã¹ã'a ã«ãã¬ããžãäœäžããå Žåããªããžããªã®ã¡ã€ã³ ãã©ã³ãã«éä¿¡ãããŸãã ããããããã¯ãŸã£ããå¥ã®èšäºã®è©±ã§ãã
PSïŒ ãã®èšäºã§ã³ãŒã圢åŒã§èª¬æãããŠãããã®ã¯ãã¹ãŠã次ã®å Žæã§å
¥æã§ããŸãã
ç»é²ãŠãŒã¶ãŒã®ã¿ãã¢ã³ã±ãŒãã«åå ã§ããŸãã
SonarQube ãã©ãããã©ãŒã ã䜿çšããŠããŸãã:
-
èŠèŽè ã®ïŒïŒ%ãã¯ã5
-
èŠèŽè ã®ïŒïŒ%ãNo3
-
èŠèŽè ã®ïŒïŒ%ããã®ãã©ãããã©ãŒã ã«ã€ããŠèããã®ã§äœ¿çšããããšæã£ãŠããŸã3
-
èŠèŽè ã®ïŒïŒ%ããã®ãã©ãããã©ãŒã ã«ã€ããŠèããããšããããã䜿ããããªã2
-
èŠèŽè ã®ïŒïŒ%ãå¥ã®ãã©ãããã©ãŒã ã䜿çšããŠããŸã0
-
èŠèŽè ã®ïŒïŒ%ã圌女ã®ããšãåããŠç¥ããŸãã6
19 人ã®ãŠãŒã¶ãŒãæ祚ããŸããã 3åã®ãŠãŒã¶ãŒãæ£æš©ããã
åºæïŒ habr.com