36
© PITSS GmbH 2015 © PITSS GmbH 2015 1 Implementierung erster Klasse - Code Qualität in PL/SQL Stephan La Rocca – Consulting Manager Berlin, April 26 th 2016

ImplementierungersterKlasse Code Qualität in PL/SQL

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ImplementierungersterKlasse Code Qualität in PL/SQL

©PITSSGmbH2015

©PITSSGmbH2015 1

Implementierung erster Klasse-

CodeQualität inPL/SQL

StephanLaRocca– ConsultingManager

Berlin,April26th 2016

Page 2: ImplementierungersterKlasse Code Qualität in PL/SQL

©PITSSGmbH2015

©PITSSGmbH2015 2

3

LocationUSA

GermanyUK

17

Years oldfounded

in1999

80

Colleagueswell trained

highly experiencedspecialists

>500

Customerssatisfied

customers in40 countries

100%

Oracle Partnerspecialized

in Oracletechnologies

Page 3: ImplementierungersterKlasse Code Qualität in PL/SQL

©PITSSGmbH2015

©PITSSGmbH2015

Motivation

3

Wenn es einen Weg gibt, etwas besser zu machen: finde ihn.ThomasAlvaEdison(1847-1931),amerik.Erfinder

Page 4: ImplementierungersterKlasse Code Qualität in PL/SQL

©PITSSGmbH2015

©PITSSGmbH2015

Def inition Code Qualität

4

lesbar�

Code�

wartbar�

testbar

�DieDefinitionvonCode-Qualitätlässt sich unterscheiden nach:

�Wie leicht können andereEntwickler dieSoftwarebearbeiten

Wartbarkeit

Layout,Darstellung,verständlicheBenennungen

Lesbarkeit

�Modularisierung,wieleicht lässt sich derCodeautomatisch testen

Testbarkeit

Page 5: ImplementierungersterKlasse Code Qualität in PL/SQL

©PITSSGmbH2015

©PITSSGmbH2015

Code

5

Page 6: ImplementierungersterKlasse Code Qualität in PL/SQL

©PITSSGmbH2015

©PITSSGmbH2015

Metrics

6

„Eine Softwarequalitätsmetrik ist eine Funktion, die eine Software-Einheit in einen Zahlenwert abbildet, welcher als Erfüllungsgrad einer Qualitätseigenschaft der Software-Einheit interpretierbar ist.“– IEEE Standard 1061, 1998[1]

wartbar

MauriceHowardHalstead Thomas J. McCabe

Page 7: ImplementierungersterKlasse Code Qualität in PL/SQL

©PITSSGmbH2015

©PITSSGmbH2015

Halstead

7

wartbar

TrennungvonOperatorenundOperanden

create or replace function get_all_emails(p_adre_id in number)return varchar2is

v_emails varchar2(1000);begin

for i in (select adem_emailfrom adem_adressen_email

where adem_adre_id=p_adre_id) loopif v_emails is not null then

v_emails:=v_emails||';';end if;v_emails:=v_emails||i.adem_email;

end loop; return v_emails;

end;

Page 8: ImplementierungersterKlasse Code Qualität in PL/SQL

©PITSSGmbH2015

©PITSSGmbH2015

Halstead

8

wartbarUnterschiedliche

Operatoren (nt)

Operanden (nd)

GrößedesVokabulars

Gesamtanzahl

Operatoren (Nt)

Operanden (Nd)

Länge desCode

N_Vocal N_Code

Halstead-Volume := N_Code * log2(N_Vocal)

Page 9: ImplementierungersterKlasse Code Qualität in PL/SQL

©PITSSGmbH2015

©PITSSGmbH2015

Halstead

9

wartbar

Halstead-Volume := N_Code * log2(N_Vocal)

Code-Review (Komplexität) CRD := nt/2 * (Nd/nd)

Code-Review (Aufwand) CRA := CRD * HV

Zeit (Implementieren/Verstehen) := CRA/18 in Sekunden

HV = 31*log2(20) = 92CRD = 14/2 * (15/6)= 17,5CRA = 17,5 * 92 = 1.610

In 1:30 Min. verstanden

Page 10: ImplementierungersterKlasse Code Qualität in PL/SQL

©PITSSGmbH2015

©PITSSGmbH2015

McCabe

10

wartbar

AnzahlderBinär-Verzweigungen

create or replace function get_all_emails(p_adre_id in number)return varchar2is

v_emails varchar2(1000);begin

for i in (select adem_emailfrom adem_adressen_email

where adem_adre_id=p_adre_id) loopif v_emails is not null then

v_emails:=v_emails||';';end if;v_emails:=v_emails||i.adem_email;

end loop; return v_emails;

end;

Page 11: ImplementierungersterKlasse Code Qualität in PL/SQL

©PITSSGmbH2015

©PITSSGmbH2015

Npath-Complexity

11

wartbar

AnzahldermöglichenDurchläufe

create or replace function get_all_emails(p_adre_id in number)return varchar2is

v_emails varchar2(1000);begin

for i in (select adem_emailfrom adem_adressen_email

where adem_adre_id=p_adre_id) loopif v_emails is not null then

v_emails:=v_emails||';';end if;v_emails:=v_emails||i.adem_email;

end loop; return v_emails;

end;

Page 12: ImplementierungersterKlasse Code Qualität in PL/SQL

©PITSSGmbH2015

©PITSSGmbH2015

CRAP

12

testbar

ChangeRisk Analysisand Predictions

Cyclomatic Complexity

CodeCoverage inProzent

Page 13: ImplementierungersterKlasse Code Qualität in PL/SQL

©PITSSGmbH2015

©PITSSGmbH2015

CRAP

13

testbar

Quelle: http://www.thewebhatesme.com/

Page 14: ImplementierungersterKlasse Code Qualität in PL/SQL

©PITSSGmbH2015

©PITSSGmbH2015

CRAP

14

testbar

CodeCoverage fürPL/SQL

Page 15: ImplementierungersterKlasse Code Qualität in PL/SQL

©PITSSGmbH2015

©PITSSGmbH2015

CodingandNaming Convention

15

lesbar

create or replace function gea(p_1 in number)return varchar2 isve varchar2(1000);beginfor i in (select adem_email from adem_adressen_email

where adem_adre_id=p_1) loopif ve is not null then ve:=ve||';';end if;ve:=ve||i.adem_email;

end loop; return ve;end;

Page 16: ImplementierungersterKlasse Code Qualität in PL/SQL

©PITSSGmbH2015

©PITSSGmbH2015

CodingandNaming Convention

16

lesbar

create or replace function get_all_emails(p_adre_id in number)return varchar2is

v_emails varchar2(1000);begin

for i in (select adem_emailfrom adem_adressen_email

where adem_adre_id=p_adre_id) loopif v_emails is not null then

-- Trennzeichen nicht an die erste Stelle setzenv_emails:=v_emails||';';

end if;v_emails:=v_emails||i.adem_email;

end loop; return v_emails;

end;

Page 17: ImplementierungersterKlasse Code Qualität in PL/SQL

©PITSSGmbH2015

©PITSSGmbH2015

CodingandNaming Convention

17

lesbar�

NamingConvention

Lesbarkeit,Reg.Expression,

Kürzel,Sonderzeichen,Wiedererkennung

BestPractise

Globale Variablen,Magische

Konstanten,vermeideDeadCode NumberPrecission

SystemProtectionPerformanceAdvises

ContextSwitches,Subqueries,

Union

SQLInjection,Potentielle

Fehlerquellen

Page 18: ImplementierungersterKlasse Code Qualität in PL/SQL

©PITSSGmbH2015

©PITSSGmbH2015

CodingandNaming Convention

18

lesbar

Page 19: ImplementierungersterKlasse Code Qualität in PL/SQL

©PITSSGmbH2015

©PITSSGmbH2015

Messung conCode Qualität

19

lesbar�

Code�

wartbar�

testbar

�Messbare Größen helfen für dieVerbesserung:

�Halstead,McCabe,Wartbarkeit

AuditRulesLesbarkeit

Crap,CodeCoverageTestbarkeit

Page 20: ImplementierungersterKlasse Code Qualität in PL/SQL

©PITSSGmbH2015

©PITSSGmbH2015

Container für PL/SQL

20

� � � �

Datenbank

Apex Forms Reports SkriptsPackages,

Prozeduren,

Funktionen

Prozesse Trigger,Units Triggers,

Libraries,Units

Insidefile

system,*.sql

Page 21: ImplementierungersterKlasse Code Qualität in PL/SQL

©PITSSGmbH2015

©PITSSGmbH2015

Maßnahmen für bessere Qualität

21

• SECTION ONE

Page 22: ImplementierungersterKlasse Code Qualität in PL/SQL

©PITSSGmbH2015

©PITSSGmbH2015

Maßnahmen für bessere Qualität

22

Page 23: ImplementierungersterKlasse Code Qualität in PL/SQL

©PITSSGmbH2015

©PITSSGmbH2015

Maßnahmen für bessere Qualität

23

Qualität� �

��

KommentareEin Entwickler verbringt

mehr Zeit mit SourceCode

lesen als schreiben

AnalyseDeadCodeundRedundanzen

entfernen.Nutzen von

Refakturierungen

CodingStandardsEtablieren Sie neben den

BestPractise eigene

Unternehmensstandards

� �

VersionskontrolleNutzen vonBranches,

CompilerFlags,

gesicherten Ständen

ProfilingPerformanceAnalysen,

Kontext Switche,

UnitTestsSQLDeveloper, OATS,

Aufzeichnung von

Testfällen, Testabdeckung

��

Page 24: ImplementierungersterKlasse Code Qualität in PL/SQL

©PITSSGmbH2015

©PITSSGmbH2015

Best Practise

24

http://nyoug.org/Presentations/2006/200611_Steven_Feuerstein_Best_Practice_PLSQL/200611_Steven_Feuerstein_Best_Practice_PLSQL.pdf

Page 25: ImplementierungersterKlasse Code Qualität in PL/SQL

©PITSSGmbH2015

©PITSSGmbH2015

Exemplarische Maßnahmen unterschiedlichst er Ebene

25

Verwende suchbare

Namen

Bedeutsame Namen

Warnen vor

Konsequenzen

Kommentare

ErrorHandlingist Error

Handling– nicht dieLogik

ErrorHandling

FIRST,Fast, Independent,Repeatable,

Self-Validating,Timely

UnitTests

Eine Funktion für eine

Aufgabe

Funktionen

Guter Codeist wie ein

guter Zeitungsartikel

Formatierung

Verlasse Dichaufnichts

Abgrenzung

Erweitern, Refakturieren,

spezifische Erweiterung

vs.GlobalPicture

Systems

Page 26: ImplementierungersterKlasse Code Qualität in PL/SQL

©PITSSGmbH2015

©PITSSGmbH2015

Performance Checks

26

Besser:IF v_kreditlimit > c_max_limit AND check_kreditlimit(v_kreditlimit)

THEN ...

statt:IF check_kreditlimit(v_kreditlimit) AND v_kreditlimit > c_max_limit

THEN ...

Besser:

FORALL I IN 1..50000

INSERT INTO bulk_bind_beispiel

VALUES (feld1(i), feld2(i), feld3(i));

statt:

FOR I IN 1..50000 LOOP

INSERT INTO bulk_bind_beispiel

VALUES (feld1(i), feld2(i), feld3(i));

END LOOP;

Page 27: ImplementierungersterKlasse Code Qualität in PL/SQL

©PITSSGmbH2015

©PITSSGmbH2015

Entwicklungsrichtlin ien für dasUnternehmen

27

Page 28: ImplementierungersterKlasse Code Qualität in PL/SQL

©PITSSGmbH2015

©PITSSGmbH2015

Messung vonCodeQualität

28

lesbar�

Code�

wartbar�

testbar

�Messbare Größen helfen für dieVerbesserung:

�Halstead,McCabe,Wartbarkeit

AuditRulesLesbarkeit

Crap,CodeCoverageTestbarkeit

Page 29: ImplementierungersterKlasse Code Qualität in PL/SQL

©PITSSGmbH2015

©PITSSGmbH2015

Einbindung in NightlyBuild

29

CommandLineInterfacefürLaden,Parsen,Bewerten

Page 30: ImplementierungersterKlasse Code Qualität in PL/SQL

©PITSSGmbH2015

©PITSSGmbH2015

Einbindung in NightlyBuild

30

SelectScriptinnerhalbHUDSON–Auslösen vonFehlernfürE-MailBenachrichtigung

Page 31: ImplementierungersterKlasse Code Qualität in PL/SQL

©PITSSGmbH2015

©PITSSGmbH2015

Kontinuierliches Monitoring

31

Page 32: ImplementierungersterKlasse Code Qualität in PL/SQL

©PITSSGmbH2015

©PITSSGmbH2015

BoyScoutRule

32

Try and leave this world a little better than you found it…

Robert Stephenson Smyth Baden-Powell

Page 33: ImplementierungersterKlasse Code Qualität in PL/SQL

©PITSSGmbH2015

©PITSSGmbH2015

Prozess zur Qualität

33

CodeConvention&Guidelines

Übernahme vorhandener und

entwickeln unternehmenseigener

Vorgaben

��

Mitarbeiter,TeamsKontinuierliche

Auseinandersetzung mit

dem Thema Qualität

AusbildungStandards

Als VerbesserungUndnicht umdie

Mitarbeiter anden

Pranger zu stellen

Reviews

KPIs,NightlyChecksAufzeichnen,

visualisieren und

sinnvolle Ziele definieren

Automatisierung

CompanyGoalKontinuierliche

Verbesserung der

Software-Qualität

Page 34: ImplementierungersterKlasse Code Qualität in PL/SQL

©PITSSGmbH2015

©PITSSGmbH2015

Einstieg

34

Page 35: ImplementierungersterKlasse Code Qualität in PL/SQL

©PITSSGmbH2015

©PITSSGmbH2015

Aktivitäten derDOAG

35

Page 36: ImplementierungersterKlasse Code Qualität in PL/SQL

©PITSSGmbH2015

©PITSSGmbH2015

Def inition Code Qualität

36