March 13, 2026
5 min skaitymas
Laisvis Stonys

Tinkintos “OpenEdge” taisyklės “SonaQube”

Kodo modelių pastebėjimas gali būti naudingas dėl kelių priežasčių, ypač didesnėse programinės įrangos sistemose, kuriose išlaikyti nuoseklią kodo kokybę tampa sudėtinga. Kartais tai padeda nustatyti blogą praktiką. Kitais atvejais tai tiesiog padeda rasti panašių kodo pavyzdžių visame projekte. “SonarQube” jau pateikia daugybę integruotų taisyklių, tačiau supratimas, kaip veikia pasirinktinės taisyklės, atveria daug daugiau lankstumo. Norėdami tai ištirti, aš sukūriau vietinę aplinką naudodamas “Progress OpenEdge” ir dokumentavau visą procesą. Tai apima komandas, kurias paleidžiau, klaidas, kurias padariau, ir tai, kaip AI padėjo sugeneruoti pavyzdį “OpenEdge” projektą ir šalinti problemas. Kaip “Progress OpenEdge” kūrėjas, norėjau pamatyti, kaip toli pasirinktines “SonaSrqube” taisykles galima nustumti realioje “OpenEdge” sąrankoje.

Kelionė

1) “OpenEdge” projekto pavyzdžio generavimas naudojant AI

Norėdami pradėti, paprašiau AI sugeneruoti mažą “OpenEdge” Projektas, kuriame yra apie dešimt failų. Projektas apėmė paprastą meniu UI, kai failų įvestį ir išvestį bei pagrindinius skaičiavimus.

AI uždavė keletą paaiškinančių klausimų ir tada grąžino ZIP failą su instrukcijomis.

Pirmoji versija nebuvo sudaryta. Aš nukopijavau kompiliatoriaus klaidas atgal į AI ir iteravau, kol projektas pagaliau suveikė. AI taip pat įterpė komentarus, kur sąmoningai pristatė blogą kodavimo praktiką. Tai palengvino vėliau išbandyti pasirinktines taisykles.

2) “SonarQube” paleidimas “Docker”

Toliau įdiegiau “Docker Desktop for Windows” ir paleidau oficialų “SonarQube” vaizdą iš “Docker Hub”.

Iš pradžių palikau prievadą nustatytą 0, kad “Docker” automatiškai priskirtų vieną. Tai pasirodė esanti klaida. Kiekvienas konteinerio paleidimas iš naujo pakeitė pagrindinio kompiuterio prievadą, o tai reiškė, kad nuolat turėjau atnaujinti URL ir konfigūraciją.

Sprendimas buvo paprastas: prijunkite “SonarQube” prie statinio prievado.

3) Projekto struktūra ir sonarinio projekto savybės

Aš sukūriau minimalų savybių failą projekto root sonar-project.properties ('rnd2' buvo mano “OpenEdge” projekto pavadinimas):

Štai mano projekto failų struktūra (src įtraukta į PROPATH):

4) Pirmasis prisijungimas, papildiniai ir ankstyvos klaidos

Paleidęs “SonarQube”, prisijungiau ir sukūriau naują projektą.

Iš pradžių laikiausi AI sukurtų instrukcijų, kad galėčiau įdiegti “OpenEdge” susiję papildiniai. Toks požiūris pasirodė klaidinantis.

Praleidau du svarbius kūrinius:

  • ANT/PCT sąranka
  • CABL licencija

Trūkstama CABL licencija buvo pagrindinis blokatorius. Kartą sekiau oficialią “Riverside” dokumentaciją ir sumontavau jų “OpenEdge” papildiniai JAR failai iš Riverside “SonarQube OpenEdge” papildinio išleidimai, viskas pradėjo veikti taip, kaip tikėtasi.

Įdomu tai, kad nuskaitymai veikė be ANT ir PCT. Mano prielaida yra ta, kad AI sukurtas projektas naudojo paprastus kelius ir standartinę struktūrą.

5) Įskiepių JAR diegimas “Docker” talpykloje

Iš pradžių nebuvau nustatęs rišimo laikiklio. Aš naudojau Docker Desktop → Files skirtuką, kad įkelčiau aplanką į /tmp, tada atidarė šaknies apvalkalą ir perkėlė JARs:

“Sonarqube” yra konteinerio pavadinimas. “Root” vartotojui geriausia kopijuoti failus į įprastą vietą.

Iš “Windows” terminalo:

docker exec -it --user root sonarqube /bin/bash

mv /tmp/plugins/ * /opt/sonarqube/plėtiniai/atsisiuntimai/

Tada aš iš naujo paleidau konteinerį, kad “SonarQube” įdiegtų papildinius paleidžiant. (Geriau naudoti surišimo laikiklį, bet tai veikė, kol eksperimentavau.)

6) “SonarScanner” paleidimas sistemoje “Windows”

Tada atsisiunčiau “Windows x64 SonarScanner”, ištraukiau jį ir sugeneravau vartotojo žetoną “SonarQube”. Dėl mano ankstesnės uosto 0 klaidos turėjau atnaujinti URL tarp restartų. Tai buvo dar viena priežastis nuo pat pradžių laikytis 9000. Štai kaip atrodė mano savybių failas:

Įdiegus papildinius, aš paleidau komandą iš savo “OpenEdge” projekto aplankas:

<.. >\ sonar-skaitytuvas-8.0.1.6346-windows-x64\ bin\ sonar-scanner.bat

Po to, kai nuskaitymas baigtas, atnaujinau projekto puslapį SonarQube, kad galėtumėte peržiūrėti rezultatus.

Iš pradžių turėjau tam tikrų problemų su:

  • Kokybiški vartai
  • Taisyklių profiliai
  • Įgalinimo taisyklės

Pagrindinė priežastis vėl buvo trūkstama CABL licencija. Nustačius tai, “OpenEdge” Taisyklės elgėsi normaliai.

Pirmasis sėkmingas nuskaitymas jau aptiko keletą problemų kodo bazėje. Tai reiškė, kad aplinka pagaliau buvo paruošta pasirinktinėms taisyklėms. Skaitytuvą galite atsisiųsti iš SonarScanner CLI dokumentacija.

7) Pasirinktinės taisyklės kūrimas (šablonas+AI)

Kai nuskaitymo vamzdynas veikė, aš perėjau prie pasirinktinių taisyklių kūrimo. Aš atsisiunčiau Riverside taisykles-plugin-template ir peržiūrėjau jų skaidrių kaladę, paaiškinančią architektūrą.

Tada aš paprašiau AI sugeneruoti Java taisyklę ir įmečiau ją į šabloną. Užregistravau jį AcmeRulesDefinition.java (dvi vietos), sekdamas NooPrule ir TooManyParameters pavyzdžiais.

Pažvelkite į tai, kur įdėjau “Java” taisyklę:

Sukurtas taisyklių šaltinis:

Registracija į AcmeRulesDefinition.java:

Svarbu pažymėti, kad atsisiunčiau “Riverside” taisyklių papildinio šablonas ir peržiūrėjo “SonaQube” pasirinktinių taisyklių kūrimo dokumentacija Prieš kurdamas savo pirmąją taisyklę.

8) Įskiepio kūrimas ir taisyklės suaktyvinimas

Norėdamas sukompiliuoti taisyklių įskiepį, aš įdiegė Maven ir pastatė šablono projektą.

Iš projekto šaknies:

<.. >/apache-maven-3.9.12/bin/mvn švarus paketas

“Maven” sėkmingai sugeneravo papildinį JAR. Tada nukopijavau JAR į “SonaQube” konteinerį naudodamas tą patį rankinį metodą, kaip ir anksčiau, ir iš naujo paleidau konteinerį. Po paleidimo iš naujo naujoji taisyklė pasirodė “SonarQube” sąsajoje. Jis buvo išjungtas pagal numatytuosius nustatymus, todėl įgalinau jį taisyklių profilyje.

Vėl paleidus skaitytuvą, gautas pirmasis rezultatas. Ataskaitoje buvo pažymėtos kodo vietos, kuriose buvo naudojami MESSAGE teiginiai. Pirmoji pasirinktinė taisyklė veikė.

9) Taisyklių išplėtimas

Po pirmosios sėkmės eksperimentavau su papildomomis taisyklėmis. Vienas iš pavyzdžių buvo “StreamsMustBecloseDrule”. Šis etapas pristatė keletą naujų iššūkių:

  • “Maven” kompiliavimo klaidos, kurias sukelia neteisingas importas.
  • Taisyklės įkeliamos, bet nerodomos vartotojo sąsajoje.
  • Taisyklės rodomos, bet problemų neaptinka.

To buvo tikimasi. AI yra naudingas generuojant pradinius taškus, tačiau produkcijai vis dar reikia žmogaus patvirtinimo ir teisingos integracijos. 2026 m. Būtų neįprasta nenaudoti AI. Tačiau sukurtas turinys yra tik atspirties taškas. Tai vis dar reikalauja žmogiško sprendimo ir tinkamos integracijos.

Išvada: ko mane išmokė ši sąranka

Šis eksperimentas padėjo man suprasti, kaip praktiškai veikia visa SonarQube sąranka. “SonarQube” paleidimas “Docker”, “SonarScanner” konfigūravimas, diegimas “OpenEdge” papildinys, o CABL licencijos tvarkymas buvo svarbūs žingsniai. Maži konfigūracijos pasirinkimai, pvz., Naudojant dinaminį Docker prievadą, gali greitai sukelti nereikalingų problemų.

Dirbtinis intelektas buvo naudingas kuriant pavyzdį “OpenEdge” projektą ir rengiant taisyklių idėjas, tačiau tai tik atspirties taškas. Sukurtam kodui vis dar reikia žmogaus sprendimo, patikrinimo ir tinkamos integracijos. Teisingai nustačius aplinką, kurti ir išbandyti pasirinktines taisykles tampa daug lengviau. Tokie įrankiai kaip “SonarQube” gali atlikti svarbų vaidmenį išlaikant kodo kokybę ilgai veikiančiose ar senesnės sistemos.

Pasikalbėkime apie jūsų projektą

Pradedate projektą arba norite sustiprinti jau vykdomą? Susisiekite ir atsakysime jums per vieną darbo dieną.

Parašykite mums

Ačiū! Jūsų pateikimas gautas!
Oi! Pateikiant formą kažkas nutiko.