á áľáŤá˝á ááľáĽ ááľá¨áá á áááľ áĽáá áááá SonarQube á¨áŽáľ áĽáŤáľá á á¨áá°á á°á¨á ááá á á . á¨á°áááľ ááŽáááśá˝ ááľáĽ á ááąá á˛áŤáá áą VueJs+Typescript, á˝ááŽá˝ á°áá áŠ. áľááá , áĽáá´áľ áĽááąá áááłáľ áĽáá°áťáá á á áá áááá ááááá áĽááááá.
á áá á˝áá ááľáĽ, á¨áá áĽáá°áťááŠáľ áľá SonarQube ááľá¨á áĽáááááŤáá. áľáá˝ á áá°-ááłáĽ - á á á ááá áá áĽáá°áá ᣠáľá áĽáą áááááŞáŤ áá ááá°ááľ
SonarQube (á¨ááľá áááľá) áááŁá áá°áť áĽá á¨áŽáľ áĽáŤáľ áááŞáŤ áááľ ááá ááľá¨á ááá˘
á MISRA CᣠMISRA C++ᣠMITER/CWE áĽá CERT Secure Codeing Standards á¨ááŽááŤá á ááŁáĽ á°á¨ááá˝ á áááľ áá°á¨áľ á¨áŽáľ áľáá°á áĽá áľá á°áľ áááá áá°áááᢠáĽáá˛áá áľá á°áśá˝á ᨠOWASP Top 10 áĽá CWE/SANS Top 25 á¨ááŽááŤááá áľá á°áśá˝ ááááŽá˝ ááá¨áľ áá˝ááá˘
ááá áĽááłá á¨ááłáŞáŤ áľáááą á¨á°ááŤáŠ á¨á°ááá ááłáŞáŤáá˝á á˘á ááá, SonarQube áá¤áąá áá° á ááľ áłá˝áŚááľ á ááááľ, á¨áá°áśá˝á áłáŞá á ááŤá áĽá á áĽáľááą áá áľ á áśááľáá áĽáŤáľ áá á á ááá áááŚá˝á áĽáá˛ááá¨áą áŤáľá˝áááłá.
á°á¨á᪠ááááŽá˝ á áá áááá
áĽááľ áŤáá¸á á¨ááŽááŤá á ááŁáĽ ááááá˝ áá°áááᢠá¨áá áŁáá ááá áŁáá áá¨á áľááááá áĽááá á¨25 á áá ááááá˝ áá¸áᢠá ááľá á¨á°áá°á ááá ááá°áá á°áá˘áá áááá ááŤá á ááŚáľá˘ á¨áá á á¨á°áĽ áľáŞáľ á áĽáŽ áááľáŤáľ á°á°áŞá áŤáŤáľáłá ááŤáľááŞááľ (á áááśá˝á á¨ááŽ)ᣠááá áĽááłá ááŞá á á°ááŤáá á˘ááááᢠá¨áá ááŤáľááŞááľ á°á°áŞ áááśá˝ áśááá.á¤áľáŁ áTypescript áśááá˛á¤áľ á á¨á°á¨áá.
áŚáá´ááá á°áá á á¨á˝áá áá¨áá áááá áá á áá sonarqube-áľáŤáá, áá á ᨠá ááĽáŽá˝ á áá áá áá á¨áľ-ááá, áá á ááἠáá° á áááአáááŤá SonarQube áááŁá áá áá¨áŞáŤ áĽá áá á°áľ.
á ááŤáľááŞááľ ááľ
á ááááŠá ááá°ááŤáľ SonarQube áĽáá ááá áľ áłááá-ááááŤ.
sonar.yaml:
version: '1'
services:
simplesample-sonar:
image: sonarqube:lts
ports:
- 9001:9000
- 9092:9092
network_mode: bridge
á áľááá áŚ
docker-compose -f sonar.yml up
á¨áá
á áá SonarQube á¨áááá á áĄ
áĽáľáŤáá ááá ááŽáááśá˝ á¨áá áĽá ፠ááľáá ááᢠáá
áá áááł áĽááľá°áŤáááá. áŚáá´áááá ááłá ááŽáááąá áá°áľáŠ VueJS+TS+Jest. áá° áŤáłá˝á áĽááŁááááĄ-
git clone https://github.com/vuejs/vue-test-utils-typescript-example.git
á ááááŞáŤ á°áá ááá ááŤá á ááĽá SonarQubeá°áĽá á¨áá áŤáᢠsonar-áľáŤááᣠá áĽááľ áá á á፠á ááĄ-
yarn add sonarqube-scanner
áĽá áá˛áŤáá áľáááá áŤáá áľááŞááśá˝ á¨áĽáą áá áááľáŤáľ.
áĽá á.json:
{
âŚ
scripts: {
...
"sonar": "sonar-scanner"
...
},
âŚ
}
á ááá á, áľáŤáአáĽáá˛á°áŤ, á¨ááŽáááąá ááźáśá˝ á áአááá ááľáĽ áááááľ áŤáľáááááłá. á áá á¨áłá áááŽá˝ áĽáááá.
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 - á áľáŤáť áááľá'A;
- sonar.ááŽáááľ ááá - á á áááአáá áአá¨ááŽáááľ áá፠áááľá'A;
- sonar.á¨ááŽáááľ áľá ááŽáááą á°áááś áľáááłáá áľá á ááááá áá áááἠáá˝áá á¨ááŽáááľ ááá;
- sonar.áááŽá˝ - á áá á¨áááŽá˝ áá ᣠáĽááá áá áá srcááá áá ááááá ááá áá˝áá. áá á áá á¨áľá ááá°á á ááťáŤá á°áááĽáŻá, áĽáąá áľáŤáá á¨á°ááá¨á áľ á áá;
- sonar.áá°ááá˝ - á¨ááłáá áá á áĽáŽ á¨áááľ áááŞáŤá˘ áá áá°áááš á¨áááá áľ á áá ááᢠá áá ááŽáááľ ááľáĽ áĽáá°áá áŤá á áá á¨áá ᣠáĽá áá°áá á á ááá ááľáĽ á¨ááá¨á¨á á áŤá á á áἠáááá á˘áá¨áŤ", áľááá áá áá á˝á áĽáááá áĽá ááŁáŠá áááŞáŤ áĽáá áááá;
- sonar.áá°á.ááŤá°áľ - áááĽáá á áá áá ááá¨áŤáá˝ áááᾠᣠá áá á á°á¨á á¨á°áá¨áአáĽá á áŤááľ ááአáá˝áá á˘
- sonar.ááá á˘ááŽá˛áá - á¨ááá áááá˝á á áŽáľ ááľá¨á.
ááľáŤáአá¨ááááŞáŤ á áá ᣠá¨ááá ááłá áĽááá á áľá°áá ááá ááá ááá áá-á¨áá°áť áá°áŠá áŤáą ááľááá ᣠáľáŤááá á áá áľááá ááá áľ á˝áá áá¨á áááá¨áľ áá˝ááá˘
áá áá áá áááľá¨á áá áá áá¨á ááááá¨áľ á¨áá¨áŤ áá°áŠá áááá áŤáľáááááłáᢠá áá ááŽáááľ ááľáĽ á¨áá¨áŤ áá°á áá á¨áá. áĽá á ááĽáŽáš á ááá á°ááá ááá ááľáĽ áá¸áᢠ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 áĽáá° á¨áá˛á˛ áĽá á á áŤá áĽáá° áá°á á áááá፠áááŁáá˘
ááŽá - ááŤáá á áááá˝ á gcov. ᨠgcov áááá˝á ááĽá ááá áááá˝ áá°á áľáŁá áĽá á¨áŽáľ áĽá á¨á˝áá áá¨á áŤáá¸á á¨á¤á˝á˛á¤áá¤á áážá˝ áľáĽáľáĽ áŤááááᢠá á°áłá ááá áááľá¨á áážá˝ áĽáá˛á ááá áŤáᢠááŽá á¨ááĽá¨ááááá˝áŁ á°ááŁáŤáľ áĽá á áááŤáá˝ á˝áá áá°áááá˘
áá°áááš á¨á°á ááá á áá á¨á˝áá áá¨á á ááľáĽ áááá á˝áá/lcov.info.
áááľ á ááĽá áááľá'á¨á¨áľ áá á¨áááá? áľááá
, á¨áá¨á°ááľá ááľááŽá˝ áá° áá
á ááá áĽáá¨áá. áá á ááľ ááĽáĽ á á: ááŽáááśá˝ áĽá ááááá˝ ááá áá˝áá, áááľá, á á ááá ááľáĽ src ááĽá á¨ááŽááŤá ááááá˝ ááá áŽáśá˝ á á áĽá á¨á ááľ ááá á¨áá áá á¨á°ááŤá áá¸á ᣠáĽá á á°áŤá ᣠá¨á ááľ ááá áá á°á°áŞ á á ááá á¨ááá°áá á á
áĽáŤá ááᢠáĽá áá°ááŤáŠ á¨ááŽááŤááá ááááá˝ á¨á˝áá áá¨á á á°ááŤáŠ áŚáłáá˝ áá¨áá˝ áá˝áá, áľááá
áĽáŤááłááą ááá áá
áá ááááááľ á¨áŤáą ááá á áá. á¨áĽá ááŽáááľ áá ááá á¨á°á¨áŁ á˝áá, áľááá
ááĽáą áĽáť á¨á
áá
áśá˝ ááá áĽáááááá:
sonar-project.properties:
sonar.typescript.coveragePlugin=lcov
sonar.typescript.lcov.reportPaths=coverage/lcov.info
áááááŞáŤá áľáŤáá ááááá ááá ááá ááá ááᢠááŽáááą áááá áἠáááľ áĽááááá áááľááááááŞáŤ áá áá°áá°á ááŽáááľ áľáŤáá á˛áŤááą á áŤáľ-á°á ááá áŤáᢠá ááŁáŽáš áááŤáľ á¨ááŽáááľ áááŞáŤáá˝á á áá áá°áľ áááŚá˝á ááá¨áľ áá¨á áá¨ááťáá˘
áľááá ᣠáá°á á˛á á¨á°áá á¨áá áľááá áĽáá áá package.json:
yarn run sonar
ááľáłááť: áĽáá˛áá áááŞáŤáá áá áá áá˝áá -X áá áá áááá áááἠááľáłááťá˘
áľáŤáአáááááŞáŤ áá á¨á°ááᨠá¨ááá áááľáŽá˝ áŤáą ááááŞáŤ ááááłáᢠá¨á፠á áá á°ááᎠá ááááŠá ááááľ ááááŤá áááľá'a áá°áŤá á°á°áŞáá˝áŁ á áá á á¨áá°áá áááá á ááľááľá˘ ááĽáŤá á¨á°ááŤáŠ áááŞáŤáá˝ áĽáá˛á á°áááá- á¨áĽáŤáľ ááááŤáá˝áŁ áá á°ááŚá˝áŁ á¨áááŞáŤáá˝ áá¨ááťáŁ á¨á áááá á°ááŚá˝.
ááľáłááť: á áá á˝áá áááá ááľáĽ á áááá á ááááĽáŁá¸áá, ááá áá áááá áŚáá´áá áááŽá˝á ááááľ áá˝áá.
á ááá á á¨á ááá áľáá°á ááááŤá src áááá á¨ááá áááá˝ ááááľ (á ááľ á¨á°áá°á á ááá˝ áŤáá°ááá¸) á¨áá°áá áááᣠá¨ááŁáŠ áá¨á á áá ááá˘
á ááá á ááá˝ á¨á°ááŤáŠ áľááłááá˝ áááŁáᣠá áá á˝áá áá áŤáá°áŽááá¸á (áááłá áĽáá° á˝ááᣠá¨áŽáľ áĽááľ áĽá á¨ááłá°ááľ)á˘
á ááá áĽáŤ áá¨á¨áť áá ááá á¨á°á°á á°áĄ áá¨ááá˝ á°á°áĽáľáŚ á°ááጠáá° á áááአáááŤáá˘
á¨áá á áá á áľá á áááá˝ ááľáĽ áá áĽáá°á°áá ᨠá áľááľáá áá¨áľ áĽáá˝ááááĄ-
áĽáá°ááá¨á, á ááľ ááá á°ááˇá, áĽá áĽáá˛áŤáá á ááľ ááááľ á˝áá áŤáłáŤá, áá á¨áĽá áá á áááłá°áá á¨áá- áŞáááľ.
áĽáľá˛ áĽáááá°áᢠááŽáááąá á á áá áááá áĽáááá¨á°áᣠá¨á˝áá áá áá á á áŤáľáá áĽá áá° áááá á¨ááá áŞáááľ âááľááľâ ááľáĽ áĽáááŁááá˘
áĽáá áĽááŤáá, á¨ááá á á°á¨ááŞ, á¨á°áá¨áᨠááá HelloWorld.vue, áááá á á áá.áľ, áá á á¨á˝ááá á á ááá áá˝áł áŤá áá¸áá. áá áĽáá´áľ á¨á˝áá áľááľ á ááááᢠá á, ááá ááá áľááá áá, áá á°á¨áá áá áá á á¨ááááá áá áľáŤáአá˘áá´ááľ á áá¨á ááľáŁ áľááá á áľááą ááľáĽ á°á áááá˘
áá áá áĽááľá°áŤáááĄ-
sonar-project.properties:
...
sonar.exclusions=src/main.ts
...
ááĽáŤáŞáŤ ááľá áľ áĽááááá: á áá áá¤áľ ááľáĽ á¨á°ááášáľ á áááá˝ á á°á¨ááŞ, á áááŞáŤá ááľáĽ á¨á°áá¨ááŠáľ ááá á áááá˝ á°á¨áá¨áá. sonar.áá°á.ááŤá°áľ.
áľáŤááŠá áŤáľáááá á áá áľáááááá áá¨á áĽááŤáááĄ-
ááŁáŠá ááĽáĽ áĽáááá¨áľáĄ- á¨áĽáŤáľ ááááŤáá˝. áľá áľáá á¨áá á°áááŹáŤáá áááľáá á°ááłáłá áá áĽá ááááá˝á˘ áĽáŤá¨á áŤáááá áá áá ááᢠáá ááŽáááłá˝á á¨á°áá áááá áĽááááá TSááááľáá áľáŤááá á ááľááá á áá ááá áá áŽá˝ áĽá áźáŽá˝ áŤáĽáĄáľá˘ áá° áááአááá á ááľ á°á¨á᪠áááŞáŤ á áá¨áá ááááá ááá°áá°á áĽáááááá áááľáâšááĄ
sonar-project.properties:
...
sonar.language=ts
...
áľáŤááŠá áĽáá°áá áĽáááľá áá¤áąá áĽáá¨ááĄ-
á˝áá áá á áá á ááˇá.
á¨áľáŤáá ááááĽá á¨á°ááá¨áľá á¨áá¨á°ááá ááľáá áá¨áľ áĽáá˝ááááĄ-
áááľá á¨ááŽáááľ ááááťá˝á á ááá á áá¨á á áá á áá°áááĄáá˘
áááłá áĽáá°áá¨á°áá áá: á áá á¨á°á°áá VueJs á°á°áŞá ááľáĽ ááᢠáśááá.á¤áľá°á áŤáá áá áá ááŤáľááŞááľ.
áá áá áľáá á á°á°áŞá ááľáĽ á¨ááᢠáśááá˛á¤áľ á TS, áľá á¨áľáá áŚáá´áá áľáŹáľ á áĄá áá¨áłá°áŤ ááľáĽ áĽáá°á°á¨áá° áááľáâšááĄ
áá áá áĽáááł á¨ááŤá¨ááᥠá¨SonarQube ááá˘áá˝ á°ááŤáŽá˝ á¨á ááą á¨á°áá°á áááśá˝ áĽáá á áá˘
ááá áá ááá ááá á°áŤáá á°áááᢠá á ááᣠáľáá˝ áĽáááá "á áá".
áľáá áŤá .vue- áááá˝ áááľá'áŚá
ᣠáĽááá˛áŤááľ áĽáá° áĽáááą áĽáá˛ááĽáŤá¸á ááááá¨á áĽáááá á¨á°á¨áŁ á˝áá.
áááŞáŤ áĽáá¨áááĄ-
sonar-project.properties:
...
sonar.typescript.file.suffixes=.ts,.tsx,.vue
...
áľáŤááá áĽááľááááĄ-
áĽá, áŽáá, ááá ááá áá° áá°á áá ááááłá, áĽá á á ááľ ááá፠áĽáť á á¨á°á¨áŁ á˝áá. áááľá á˝ááŠá á áľáá ááááłáľ á˝áááᢠVueJs+TS á SonarQube.
á¨á áá ááááľ áĽá á¨á˝áá áá¨áá áľáá˝ áááťáťá áĽáááá.
áĽáľáŤáá áŤá°á¨ááááĄ-
- áá° ááŽáááą á°á¨ááŻá áááľá- áľáŤáá;
- á áááááľ á¨áá á¨á˝áá áá¨áá ááááá¨áľ;
- á°áá áŻá áááľá- áľáŤáá;
- á¨áľáá á˝ááŠá ááł .vue- áááá˝ + á¨á°á¨áŁ á˝áá.
á¨áá¨áŤ á˝áá á á°á¨á᪠ááŽáľ áĽáŤáľ ááá˝ áľáŠá¨áľ á¨ááľáĄ á áá áááááá˝ á á áááłá á¨áŽáľ ááŁááľ áĽá á¨ááľááŽá˝ áĽááľ (á¨áŽáľ ááľáĽáľáĽááľ áá á á°áŤáŤá á¨ááĽáŽá˝ áľááľ ááľáĽ á¨á°áŤá°áą) á¨ááŽáááąá˘
áá áááľáŤáľ á°á°áŞá á áá áŁáá áľáá ፠TS (áśááá˛á¤áľ) á áá°áŤá á˛áᲠ(ááĽá áááá፠á áł) áĽá á¨áŽáľ ááľááŽá˝á ááá á .vue- áááá˝.
á¨áŽáľ ááŁááľá á°á á°áŤá˝ á áá áááł áááá á á ááá á¨áááááŤáá ááá á á°áᨠáľá áŤáŁá áĽá áĽáá˛áá áá° áŽáą áŤáááľ áá.áľ á ááľ dummy á°ááŁá áĽá á á°áᨠáľá ááŁááľ. áĽáá° ááľáĽ áĽááľ áááá°á˝ .vue, áĽá ááľáĽ .áľ - áááá˝.
main.ts:
...
function name(params:string): void {
console.log(params);
}
...
áá áá áááľá¨á á¨á ááááŠá ááľáá áááá á áľá°áŤá¨áľ ááľá áľ áŤáľáááááłááĄ-
sonar-project.properties:
...
sonar.exclusions=src/main.ts
...
áľáŤááŠá á¨áá¨áŤ áá áĽáá°áá áĽáááááĄ-
yarn test && yarn run sonar
á áĽááἠá¨áĽá á˝áá áááľáá, á áá áá áá፠ááááľ á¨ááá.
á¨áŽáľ ááľááŽá˝á á¨ááŁááľ á áááᣠáĽááŤáááĄ-
áááŁáŤáľ áĽáá áááá á˛.á˛.á˛.- áááá፠- jscpd:
npx jscpd src
ááŽáľ ááľááŽá˝áĄ-
ááááŁáľ áá áá°ááľ á á°á°áŞ áľáŞáśá˝ ááľáĽ áááľá áŤááá SonarJS(á˛á¤áľ). áĽááá á áááľ ááááá˝ ááľ á ááľ áá° á ááľ ááááľ ááááŤá¸áá ááľá°áá áĽááááá áśááá.á¤áľáľááá áááľáááá˘
á áá á¨á˝áá áá¨áá á¨ááťáťá á ááŤáá áááľ ááľáĽ ááľááŁáľ áááá.
áĽáľáŤáá áľá¨áľ áá á ááá ááŽáááľ áĽá á á°ááá ááááá˝ á¨áá¨áŤ á˝ááá á ááśá á°á¨á áá¨áľ áĽáá˝áááᢠááá áá áľá áá á áá¨á áá á á áááŤá˝ ááľáááľ ááťáá áááŞáŤ- áááŽáááą áá¨áŤáá˝, áĽáá˛áá á áááá˝ á ááľ ááľáĽ.
á¨áá˝á á¤á° ááťáááľ á áᢠá¨áá- áŞáááąá áá° á
áá¸áľ áááἠáááľáâšááĄ
á á ááá á¨áá¨áŤ ááἠ-
áá áá á¤á°-áá˝áááľ á ááŽáááłá˝á ááľáĽ áĽáááááĄ-
yarn add jest-sonar-reporter
áĽá áá° áá á áŤáááľá˘ á¨áá:
áĽá á.json:
âŚ
"testResultsProcessor": "jest-sonar-reporter"
âŚ
á áá áá°ááá áĽááŤááľáĄ-
yarn test
á¨á፠á áá á ááŽáááą áĽá ááľáĽ á ááľ ááá ááá áŤá test-report.xml.
á á áá áą ááľáĽ áĽáá ááá áľ áááľáâšááĄ
sonar-project.properties:
âŚ
sonar.testExecutionReportPaths=test-report.xml
âŚ
áĽá áľáŤááŠá áĽáá°áá áŤáľáááŠ:
yarn run sonar
á ááááš ááľáĽ áá áĽáá°á°ááá áĽáááá¨áľ áááľáâšááĄ
áĽá ááá á áá°ááá á. áĽáááłá áá áśáá á ááľáľ ááᣠááľáĽ á¨á°ááášáľá áááá˝ áĽáá° áááá˝ á áááĽáŤá¸áá áááŞáŤ- áá¨áŤáá˝. áá áá áááł áááľá°áŤá¨á á¨áá á¨áľ áááŞáŤáá áĽáá áááá áááľá sonar.áá°ááá˝áá á°áŽá˝á á áá¨áŤáá˝ á ááá á¨ááá ááá áľ (áá áá á ááľ áĽáť áá áŤáá)
sonar-project.properties:
âŚ
sonar.tests=src/components/__tests__
âŚ
áľáŤááá áĽáá°áá áĽáááááĄ-
yarn run sonar
á ááááš ááľáĽ áá áĽáá°á°ááá áĽáááá¨áľáĄ-
á áá á¨áá ááĽá á áá°áá áááŞáŤ- áá¨áŤáá˝ áĽáᣠáá° ááľáĽ á á á ááľá¨á áŤáá°áłáŤáŁ á¨áá á ááĽá áľáááľ á ááŽáááľ áááá˝ ááŤá¨á áá¨áľ áĽáá˝ááááĄ-
áá°áá°ááŤ
áľááá , áááŁá áľáá°á ááłáŞáŤá á°áááá°áá SonarQube. á ááľáĄ á¨á°áťááá ááŽáááľ á á°áłáŤ áááł á áá á°ááá VueJs+TS. á ááłááľ á¨á°áłááááľ á˝ááŽá˝ á°áľá°áŤááááᢠá¨áá¨áŤ á˝áá á áááŤá˝ á¨áá¨á áááľá á¨áá¨ááᢠá áá á˝áá ááľáĽ ááŽáľ áĽáŤáľ (ááááŁáľá á¨áá ááááš á ááą) á ááąá ááľáááľ áĽáť áááá¨áá SonarQube á¨á°á áááľ áá¨áŤá á¨áᎠááá˝ á¨áĽáŤáľ ááľáááśá˝á áá°áááᢠáá áĽááá áá áŁá áŞáá˝ áá á áá á ááľáĽ á ááááᢠá áĽá¨á°á°áĽ- áľáŞáśá˝. á¨ááŤáľá°áľáľ áĽá á áá áŁá áŞáŤáľ á ááą áá á°áľ áá SonarQube áĽáá° GitLab áĽá BitBucket áŁá á¨á°ááŤáŠ á¨áŽáľ áá¨ááť á áľá°áłá°á áľáááśá˝á˘ ááá¨áá¨á á¨áá á°áľ ááá°áľ(ááááľ) áĽáŤáá˝áá á˛á áá˝ áá° áá¨ááťá áá á áááŤáᢠáá áá áášá á¨á°áᨠá˝áá áłáŞá ááá˘
PS: á áŽáľ ááá á á áááš ááľáĽ á¨á°áááá ááá ááá á ááľáĽ ááááá˘
á áłá°áł áĽááą ááľáĽ á¨á°áááᥠá°á áááá˝ áĽáť ááłá°á áá˝ááá˘
ᨠSonarQube ááľá¨áá áľá áááá áŚ
-
26,3%á á 5
-
15,8%No3
-
15,8%áľááá ááľá¨á á°ááťáá áĽá áá áá áĽááááá3
-
10,5%áľááá ááľá¨á á°ááťáá áĽá áá áá á ááááá2
-
0,0%áĽá á¨á°áᨠááľá¨á áĽá¨á°á ááአáá0
-
31,6%áľá áĽáˇ áááááŞáŤ áá á°áá 6
19 á°á áááá˝ áľáá˝ á°áĽá°ááᢠ3 á°á áááá˝ áľáá á°á á
ጠá áľááááá˘
ááá: hab.com