SonarQube - statická analýza kódu a její zapojení v CI. Babu Červenková Big Data developer - Java Fulltext - Robot tým

Podobné dokumenty
Algoritmizace a programování

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

Programové konvence, dokumentace a ladění. Programování II 2. přednáška Alena Buchalcevová

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

Obsah. Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13

Výčtový typ strana 67

typová konverze typová inference

Z. Kotala, P. Toman: Java ( Obsah )

Typický prvek kolekce pro české řazení

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Úvod do programovacích jazyků (Java)

8 Třídy, objekty, metody, předávání argumentů metod

Programátorská příručka

Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám.

11 Diagram tříd, asociace, dědičnost, abstraktní třídy

20. Projekt Domácí mediotéka

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/

Viditelnost (práva přístupu) Tomáš Pitner, upravil Marek Šabo

Základy programování Zdrojový kód, dokumentace, týmová práce

17. Projekt Trojúhelníky

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Semin aˇr Java V yjimky Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Unor 2008 Radek Koˇc ı Semin aˇr Java V yjimky 1/ 25

Abstraktní datové typy: zásobník

Java/QE Akademie - Osnova

4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ

Funkcionální programování. Kristýna Kaslová

PREPROCESOR POKRAČOVÁNÍ

Algoritmizace a programování

Algoritmizace, základy programování, VY_32_INOVACE_PRG_ALGO_01

7. Datové typy v Javě

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

1. Téma 12 - Textové soubory a výjimky

O autorovi O odborném korektorovi Úvod 17 Vývoj jazyka Java Java SE 8 Struktura této knihy Předchozí zkušenosti s programováním nejsou potřebné

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

Agenda. Docházka Návrat k minulému praktickému cvičení Zápočtové práce. Dokumentace. Dotazy, přání, stížnosti. Co, jak a proč dokumentovat

Jazyk C# (seminář 6)

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

První kapitola úvod do problematiky

CSS Stylování stránek. Zpracoval: Petr Lasák

Zápis programu v jazyce C#

KTE / ZPE Informační technologie

Uživatelská příručka Autor: Martin Fiala

3 KTE / ZPE Informační technologie

1. Programování proti rozhraní

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

12. Dokumentace a distribuce aplikací. speciálních dokumentačních komentářích vpisovaných před

3. Třídy. Základní pojmy objektového programování. Třídy

Programování v Javě I. Leden 2008

4IT101 otázky k závěrečnému testu verze pro zimní semestr 2007/2008

Inovace bakalářského studijního oboru Aplikovaná chemie

Soubor jako posloupnost bytů

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

Datové struktury. alg12 1

Java Enum Java, zimní semestr ,2017 1

Doxygen. Jakub Břečka

Quo vadis programování? Automatizace vyhodnocování studentských úloh

15. Projekt Kalkulačka

Java Cvičení 01. CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics

Seminář Java IV p.1/38

Programování v Javě I. Únor 2009

URČITÝM ZPŮSOBEM PODOBNÉ

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

RMI Remote Method Invocation

Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016

1. Téma 03 - Rozhodování

Vláknové programování část V

NPRG031 Programování II 1 / :47:55

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

Regulární výrazy. Vzory

Windows je registrovaná obchodní známka firmy Microsoft v USA a v ostatních zemích.

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

Základy programovaní 3 - Java. Unit testy. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. 26.,27.

Testy z Javy verze 1.0 Stránka 1 z 13

NMIN201 Objektově orientované programování 2016/17 1 / :03:29

Neměnné objekty. Tomáš Pitner, upravil Marek Šabo

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Dynamicky vázané metody. Pozdní vazba, virtuální metody

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth

Úvod do programovacích jazyků (Java)

Úvod do mobilní robotiky AIL028

Programovací jazyk Pascal

Java Výjimky Java, zimní semestr

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Textové soubory. alg9 1

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

HTML - pokračování. Co už víme?

Algoritmizace a programování. Terminálový vstup a výstup

Dalším příkladem může být například výstup dat na různá zařízení, souborů, grafických rozhraní, sítě atd.

Obecné informace o cvičeních

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

WPA - Konfigurace Java EE aplikace (Maven, struktura war arch. kontejnerem Tomcat 8

11. Dědičnost. Dědičnost strana 103

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

10 Balíčky, grafické znázornění tříd, základy zapozdření

4IT101 - Otázky k závěrečnému testu

Stream API. Petr Krajča. Základy programovaní 4 (Java) Katedra informatiky Univerzita Palackého v Olomouci

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

UJO Framework. revoluční architektura beans. verze

Transkript:

SonarQube - statická analýza kódu a její zapojení v CI Babu Červenková Big Data developer - Java Fulltext - Robot tým

Vývojový proces (zjednodušeně) Ticket automaticky build feature branch prgám jako o život pull request jupee merge deploy DEV code review

Statická analýza = analýza chyb/nekonzistencí kódu bez jeho spuštění String literál by měl být vlevo při volání equals podmínka je vždy true/false nepoužité proměnné zbytečný cast mrtvý kód zakomentované kusy kódu proměnná je vždy null zapomenuté importy memory leak nedostupné bloky kódu nepoužívat Thread.sleep v testech chyby stejné soubory neuzavřená spojení metoda neloguje exception hvězdičkové * importy duplikované parametry ve volání metod duplicity skoro stejné metody názvy proměnných přístup ke statickým parametrům standardy abstraktní třída by měla začínat Abstract* abstraktní třída nesmí implementovat equals a hashcode tostring() může vrátit null statické proměnné jsou vždy upper case nepoužívat octalový zápis čísel public metody mají Javadoc Junit assertion používat jen pro testy třída s názvem *Exception nedědí od Exception bad practices volání finalize copy&paste bloky nepoužívat enum jako kompozitní klíč jméno class by nemělo být stejné jako jméno vnitřních proměnných finally blok nesmí vyhazovat vyjímku použití lambd místo vložených tříd nepoužívat URL.hashCode hlavičky souborů taby vs mezery formátování počet znaků na řádek čitelnost zastaralý kód deprecated metoda by měla mít Javadoc s vysvětlením nepoužívat deprecated metody cyklomatická složitost deklarace throws RuntimeException prázdný řádek na konci souboru if else na více řádků počet parametrů metody nebo konstruktoru switch case max. 10 dokumentace pro Class nepoužívat třídy ze sun.* balíku velká komplexita jedné metody

Vývojový proces (zjednodušeně) Ticket automaticky build feature branch prgám jako o život pull request jupee merge deploy DEV code review statická analýza: IDE statická analýza (Sonar)

SonarQube

SonarQube

SonarQube

Features - analýza issues, pravidla

Features - analýza issues, pravidla - zobrazení code coverage

Features - analýza issues, pravidla - zobrazení code coverage - quality profile/quality gate per projekt

Features - analýza issues, pravidla - zobrazení code coverage - quality profile/quality gate per projekt - podpora pro 20+ jazyků

Features - analýza issues, pravidla - zobrazení code coverage - quality profile/quality gate per projekt - podpora pro 20+ jazyků - rozsáhlá podpora DevOps - pluginy na integraci do nastroju pro code review (Gitlab, Bitbucket, ) img src: https://gitlab.com/, https://jenkins.io/, https://maven.apache.org/, https://maven.apache.org/, https://gradle.org/, https://bitbucket.org/, https://travis-ci.org/, https://www.jetbrains.com/teamcity/

Features - analýza issues, pravidla - zobrazení code coverage - quality profile/quality gate per projekt - podpora pro 20+ jazyků - rozsáhlá podpora DevOps - pluginy na integraci do nastroju pro code review (Gitlab, Bitbucket, ) další (+ placené): - více dashboardů/reporting - enterprise edition - podpora - SonarCloud - sonar as a service img src: https://www.sonarsource.com/, http://blog.nethouse.se/2015/12/10/fight-technical-debt-with-sonarqube/

Jak to používáme v Robotovi mvn verify sonar:sonar -DskipTests -Dsonar.host.url=$SONAR_URL -Dsonar.analysis.mode=preview -Dsonar.gitlab.commit_sha=$CI_COMMIT_SHA -Dsonar.gitlab.project_id=$CI_PROJECT_ID - Dsonar.gitlab.ref_name=$CI_COMMIT_REF_NAME

Sonar je dobrý sluha špatný pán taky souhlasím, akorát se mi nechce opravovat kód po někom jiným já celkově nesouhlasím s tím, aby mi program kontroloval human readability nemyslím si, že tohle pravidlo má tak hloubkovou analýzu, že se to nepoužívá ani zvenčí, přeci jenom to je public,takže kdo ví odkud to voláš (i když by to byl humus) dáš mi admin práva, plíz? To kontroluje, že všichni píšou konzistentně a to je důležitý, sorry jako když si budeš chtít hrát, udělej si profil jako to pravidlo dává smysl, ale Sonar asi nevidí úplně do completable futures WSRedirectPath no tfuj takhle nemá vypadat konstanta critical issue na vás to první rozhodně není ani Javadoc ani block of commented-out lines of code,to je to na co tu nadávám to vás neomlouvá čuňátka! critical bych opravil, zbytek nech nemá no, ale nejlepší je,že to vůbec nepatří k tomu merge requestu je mi to celkem jedno, ale chce to nastavit si code style, ať všichni jedeme stejně štve mě to, že * nadává na zakomentovanej kód, který není kód ale komentář * dožaduje se lambdy v místě, kde lambda moc jednoduše udělat nejde aspoň, že ty chyby nejsou kritický

Kontakt Babu Červenková Fulltext robot E-mail: barbora.cervenkova@firma.seznam.cz Twitter: @SeznamBot Odkazy: SonarQube: https://www.sonarqube.org/ sonar-gitlab-plugin: https://gitlab.talanlabs.com/gabriel-allaigre/sonar-gitlab-plugin Robot na Twitteru: https://twitter.com/seznambot