Testen van de codekwaliteit 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. Dit wordt geïmplementeerd door een combinatie van SonarQube en inhoudspakketonderzoek met behulp van OakPAL. Er zijn meer dan 100 regels, die generieke regels van Java en AEM-specifieke regels combineren. Sommige van de AEM-specifieke regels worden gecreeerd gebaseerd op beste praktijken van AEM Techniek en worden bedoeld als de kwaliteitsregels van de douanecode.

NOTE
U kunt de volledige lijst van regels met deze verbindingdownloaden.

Waarderingen met drie lagen three-tiered-gate

Kwesties die door code kwaliteitstests worden geïdentificeerd worden toegewezen aan één van drie categorieën.

  • Kritiek - dit zijn kwesties die een directe mislukking van de pijpleiding veroorzaken.

  • Belangrijk - dit zijn kwesties die de pijpleiding veroorzaken om een gepauzeerde staat in te gaan. Een plaatsingsmanager, projectmanager, of bedrijfseigenaar kunnen of de kwesties met voeten treden, waarin de pijpleiding te werk gaat, of zij kunnen de kwesties goedkeuren, in welk geval de pijpleiding met een mislukking stopt.

  • Info - dit zijn kwesties die puur voor informatiedoeleinden worden verstrekt en geen effect op de pijpleidingsuitvoering hebben

NOTE
In een slechts pijpleiding van de codekwaliteit, kunnen de belangrijke mislukkingen in de gate van de Kwaliteit van de Code niet worden met voeten getreden aangezien de het testen stap van de codekwaliteit de definitieve stap in de pijpleiding is.

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.

Naam
Definitie
Categorie
Drempel voor fout
Beveiligingsbeoordeling
A = Geen kwetsbaarheden
B = minstens 1 minder kleine kwetsbaarheid
C = minstens 1 belangrijke kwetsbaarheid
D = minstens 1 kritieke kwetsbaarheid
E = minstens 1 kwetsbaarheid van de blocker
Kritiek
< B
Betrouwbaarheidsbeoordeling
A = Geen insecten
B = minstens 1 minder kleine insect
C = minstens 1 belangrijke insect
D = minstens 1 kritieke insect
E = minstens 1 blocker insect
Kritiek
< D
Onderhoudsverklaring

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%
Belangrijk
< A
Dekking

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 als true zijn geëvalueerd tijdens het uitvoeren van eenheidstests
  • CF = Voorwaarden die ten minste één keer als false zijn geëvalueerd tijdens het uitvoeren van eenheidstests
  • LC = Covered lines = lines_to_cover - uncover_lines
  • B = totaal aantal voorwaarden
  • EL = totaal aantal uitvoerbare regels (lines_to_cover)
Belangrijk
< 50%
Overgeslagen eenheidstests
Aantal overgeslagen eenheidstests
Info
> 1
Problemen openen
Algemene uitgiftypen - Vulnerabilities, Bugs en Codefragmenten
Info
> 0
Gedupliceerde lijnen

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.

Info
> 1%
Compatibiliteit met Cloud Service
Aantal geïdentificeerde compatibiliteitsproblemen met cloudservices
Info
> 0
NOTE
Zie {de Metrische Definities van 0} SonarQube 🔗 voor meer gedetailleerde definities.
NOTE
Meer over de de kwaliteitsregels van de douanecode leren die door Cloud Manager worden in werking gesteld, zie de Regels van de Kwaliteit van de Code van de Douane.

Werken met valse positieven dealing-with-false-positives

Het kwaliteitscontroleproces is niet perfect en zal soms ten onrechte problemen identificeren die eigenlijk niet problematisch zijn. Dit wordt bedoeld als 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 zal dan een blokkeerkwetsbaarheid veroorzaken. Maar na het herzien van de code, erkent u dat dit 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";

Maar als de code eigenlijk dit 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.

NOTE
Hoewel het aan te raden is de @SuppressWarnings -annotatie zo specifiek mogelijk te maken, dat wil zeggen alleen de specifieke instructie of het specifieke blok dat de uitgave veroorzaakt, van annotatie te voorzien op klasseniveau.
NOTE
Terwijl er geen expliciete veiligheidsteststap is, zijn er veiligheid-verwante code kwaliteitsregels die tijdens de stap van de codekwaliteit worden geëvalueerd. Zie Overzicht van de Veiligheid voor AEM as a Cloud Serviceom meer over veiligheid in Cloud Service te leren.

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, die effectief zijn wanneer bepaalde verpakkingsbeperkingen worden nageleefd. Het meest significant is de optimalisering die voor projecten wordt uitgevoerd die één enkel inhoudspakket uitvoeren, dat algemeen als "allen"pakket wordt bedoeld, dat verscheidene andere inhoudspakketten bevat die door de bouwstijl worden geproduceerd, die als overgeslagen worden gemerkt. 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.

NOTE
  • Deze optimalisatie heeft geen invloed op de pakketten die worden geïmplementeerd op AEM.
  • Omdat de overeenkomst tussen de ingesloten inhoudspakketten en de overgeslagen inhoudspakketten is gebaseerd op bestandsnamen, kan deze optimalisatie niet worden uitgevoerd als meerdere overgeslagen inhoudspakketten exact dezelfde bestandsnaam hebben of als de bestandsnaam tijdens het insluiten is gewijzigd.
recommendation-more-help
fbcff2a9-b6fe-4574-b04a-21e75df764ab