Codekwaliteitstests code-quality-testing
Leer hoe het testen van de codekwaliteit van pijpleidingen werkt en hoe het de kwaliteit van uw plaatsingen kan verbeteren.
Inleiding introduction
Bij het testen van de codekwaliteit wordt uw toepassingscode geëvalueerd op basis van een set kwaliteitsregels. Het is het primaire doel van een code-kwaliteit slechts pijpleiding en wordt uitgevoerd onmiddellijk na de bouwstap in alle productie en niet-productiepijpleidingen.
Zie Vormend Uw CI-CD Pijpleidingom meer over verschillende soorten pijpleidingen te leren.
Codekwaliteitsregels understanding-code-quality-rules
Testen van de codekwaliteit scant de broncode om ervoor te zorgen dat deze aan bepaalde kwaliteitscriteria voldoet. Deze stap wordt geïmplementeerd door een combinatie van SonarQube en inhoudspakketonderzoek met OakPAL. Er zijn meer dan 100 regels, die generieke regels van Java en AEM-specifieke regels combineren. Sommige AEM-specifieke regels zijn gebaseerd op beste praktijken van AEM Techniek en zijn gekend als de kwaliteitsregels van de douanecode.
U kunt de huidige volledige lijst van regels downloaden gebruikend deze verbinding.
Waarderingen met drie lagen three-tiered-gate
Kwesties die door code kwaliteitstests worden geïdentificeerd worden toegewezen aan één van drie categorieën.
-
Kritieke - Kwesties die een directe mislukking van de pijpleiding veroorzaken.
-
Belangrijk - Kwesties die de pijpleiding veroorzaken om een gepauzeerde staat in te gaan. Een plaatsingsmanager, projectmanager, of bedrijfseigenaar kunnen of de kwesties met voeten treden, toestaand de pijpleiding om te werk te gaan. Alternatief, kunnen zij de kwesties goedkeuren, veroorzakend de pijpleiding om met een mislukking te stoppen.
-
Info - Kwesties die puur voor informatiedoeleinden worden verstrekt en geen effect op de pijpleidingsuitvoering hebben
Waarderingen ratings
De resultaten van deze stap worden geleverd als Waarderingen.
De volgende tabel geeft een overzicht van de classificaties en foutdrempels voor elk van de kritieke, belangrijke en informatiecategorieën.
B = minstens 1 minder kleine kwetsbaarheid
C = minstens 1 belangrijke kwetsbaarheid
D = minstens 1 kritieke kwetsbaarheid
E = minstens 1 kwetsbaarheid van de blocker
B = minstens 1 minder kleine insect
C = minstens 1 belangrijke insect
D = minstens 1 kritieke insect
E = minstens 1 blocker insect
Gedefinieerd door de openstaande herstelkosten voor code ruikt als een percentage van de tijd dat al naar de toepassing is gegaan
- A = <=5%
- B = 6-10%
- C = 11-20%
- D = 21-50%
- E = >50%
Gedefinieerd door een combinatie van de dekking van de testlijn en de voorwaarde met de volgende formule:Coverage = (CT + CF + LC)/(2*B + EL)
CT
= Voorwaarden die ten minste één keer alstrue
zijn geëvalueerd tijdens het uitvoeren van eenheidstestsCF
= Voorwaarden die ten minste één keer alsfalse
zijn geëvalueerd tijdens het uitvoeren van eenheidstestsLC
= Covered lines = lines_to_cover - uncover_linesB
= totaal aantal voorwaardenEL
= totaal aantal uitvoerbare regels (lines_to_cover)
Gedefinieerd als het aantal regels dat is betrokken bij gedupliceerde blokken. Een codeblok wordt als gedupliceerd beschouwd onder de volgende omstandigheden.
niet-Java Projecten:
- Er moeten ten minste 100 opeenvolgende en gedupliceerde tokens zijn.
- Deze tokens moeten ten minste worden verspreid over:
- 30 regels code voor COBOL
- 20 coderegels voor ABAP
- 10 coderegels voor andere talen
Java-projecten:
- Er moeten minstens tien opeenvolgende en gedupliceerde instructies zijn, ongeacht het aantal tokens en regels.
Verschillen in inspringing en in letterlijke tekenreeksen worden genegeerd wanneer duplicaten worden gedetecteerd.
Werken met valse positieven dealing-with-false-positives
Het kwaliteitscontroleproces is niet perfect en identificeert soms problemen die eigenlijk geen problemen zijn. Deze staat wordt genoemd a vals positief.
In deze gevallen kan de broncode worden geannoteerd met de standaard Java @SuppressWarnings
-annotatie die de regel-id opgeeft als het annotatiekenmerk. Bijvoorbeeld, één gemeenschappelijk vals positief is dat de regel SonarQube om hardcoded wachtwoorden te ontdekken agressief kan zijn over hoe een hard - gecodeerd wachtwoord wordt geïdentificeerd.
De volgende code is vrij gemeenschappelijk in een AEM project, dat code heeft om met één of andere externe dienst te verbinden.
@Property(label = "Service Password")
private static final String PROP_SERVICE_PASSWORD = "password";
SonarQube vergroot een kwetsbaarheid voor blokkers. Maar na het herzien van de code, erkent u dat deze kwestie geen kwetsbaarheid is en kan de code met aangewezen regelidentiteitskaart annoteren.
@SuppressWarnings("squid:S2068")
@Property(label = "Service Password")
private static final String PROP_SERVICE_PASSWORD = "password";
Nochtans, als de code eigenlijk het volgende was:
@Property(label = "Service Password", value = "mysecretpassword")
private static final String PROP_SERVICE_PASSWORD = "password";
Dan is de correcte oplossing het hardcoded wachtwoord te verwijderen.
@SuppressWarnings
zo specifiek mogelijk te maken (bijvoorbeeld alleen de instructie of het blok dat de uitgave veroorzaakt aanwijzen), is het ook mogelijk om een annotatie op klasseniveau te maken.Optimalisatie van inhoudspakketscannen content-package-scanning-optimization
In het kader van het kwaliteitsanalyseproces voert Cloud Manager een analyse uit van de inhoudspakketten die door de Maven-build worden geproduceerd. Cloud Manager biedt optimalisaties om dit proces te versnellen, dat effectief is wanneer bepaalde verpakkingsbeperkingen worden nageleefd. De meest significante optimalisering richt projecten die één enkel "al"pakket produceren, die veelvoudige inhoudspakketten van de bouwstijl bevatten, die als overgeslagen duidelijk zijn. Wanneer Cloud Manager dit scenario detecteert in plaats van het "all"-pakket uit te pakken, worden de afzonderlijke inhoudspakketten direct gescand en gesorteerd op basis van afhankelijkheden. Neem bijvoorbeeld de volgende build-uitvoer.
all/myco-all-1.0.0-SNAPSHOT.zip
(content-package)ui.apps/myco-ui.apps-1.0.0-SNAPSHOT.zip
(overgeslagen-content-package)ui.content/myco-ui.content-1.0.0-SNAPSHOT.zip
(overgeslagen-content-package)
Als de enige items binnen myco-all-1.0.0-SNAPSHOT.zip
de twee overgeslagen inhoudspakketten zijn, worden de twee ingesloten pakketten gescand in plaats van het "all"-inhoudspakket.
Voor projecten die tientallen ingebedde pakketten produceren, is deze optimalisering getoond om naar boven van 10 minuten per pijpleidingsuitvoering te besparen.
Een speciaal geval kan voorkomen wanneer het "alle"inhoudspakket een combinatie overgeslagen inhoudspakketten en bundels OSGi bevat. Als myco-all-1.0.0-SNAPSHOT.zip
bijvoorbeeld de twee eerder vermelde ingesloten pakketten en een of meer OSGi-pakketten bevat, wordt een nieuw, minimaal inhoudspakket samengesteld met alleen de OSGi-bundels. Dit pakket krijgt altijd de naam cloudmanager-synthetic-jar-package
en de opgenomen bundels worden in /apps/cloudmanager-synthetic-installer/install
geplaatst.
- Deze optimalisatie heeft geen invloed op de pakketten die worden geïmplementeerd op AEM.
- De overeenkomst tussen ingesloten inhoudspakketten en overgeslagen inhoudspakketten is afhankelijk van bestandsnamen. Deze optimalisatie kan niet optreden als meerdere overgeslagen pakketten dezelfde bestandsnaam hebben of als de bestandsnaam tijdens het insluiten verandert.