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 · PDF file7 wartbar Trennung von Operatoren und Operanden create or replace function get_all_emails(p_adre_id in number) return

Embed Size (px)

Citation preview

©PITSSGmbH2015

©PITSSGmbH2015 1

Implementierung erster Klasse-

CodeQualität inPL/SQL

StephanLaRocca– ConsultingManager

Berlin,April26th 2016

©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

©PITSSGmbH2015

©PITSSGmbH2015

Motivation

3

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

©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

©PITSSGmbH2015

©PITSSGmbH2015

Code

5

©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

©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;

©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)

©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

©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;

©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;

©PITSSGmbH2015

©PITSSGmbH2015

CRAP

12

testbar

ChangeRisk Analysisand Predictions

Cyclomatic Complexity

CodeCoverage inProzent

©PITSSGmbH2015

©PITSSGmbH2015

CRAP

13

testbar

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

©PITSSGmbH2015

©PITSSGmbH2015

CRAP

14

testbar

CodeCoverage fürPL/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;

©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;

©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

©PITSSGmbH2015

©PITSSGmbH2015

CodingandNaming Convention

18

lesbar

©PITSSGmbH2015

©PITSSGmbH2015

Messung conCode Qualität

19

lesbar�

Code�

wartbar�

testbar

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

�Halstead,McCabe,Wartbarkeit

AuditRulesLesbarkeit

Crap,CodeCoverageTestbarkeit

©PITSSGmbH2015

©PITSSGmbH2015

Container für PL/SQL

20

� � � �

Datenbank

Apex Forms Reports SkriptsPackages,

Prozeduren,

Funktionen

Prozesse Trigger,Units Triggers,

Libraries,Units

Insidefile

system,*.sql

©PITSSGmbH2015

©PITSSGmbH2015

Maßnahmen für bessere Qualität

21

• SECTION ONE

©PITSSGmbH2015

©PITSSGmbH2015

Maßnahmen für bessere Qualität

22

©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

��

©PITSSGmbH2015

©PITSSGmbH2015

Best Practise

24

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

©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

©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;

©PITSSGmbH2015

©PITSSGmbH2015

Entwicklungsrichtlin ien für dasUnternehmen

27

©PITSSGmbH2015

©PITSSGmbH2015

Messung vonCodeQualität

28

lesbar�

Code�

wartbar�

testbar

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

�Halstead,McCabe,Wartbarkeit

AuditRulesLesbarkeit

Crap,CodeCoverageTestbarkeit

©PITSSGmbH2015

©PITSSGmbH2015

Einbindung in NightlyBuild

29

CommandLineInterfacefürLaden,Parsen,Bewerten

©PITSSGmbH2015

©PITSSGmbH2015

Einbindung in NightlyBuild

30

SelectScriptinnerhalbHUDSON–Auslösen vonFehlernfürE-MailBenachrichtigung

©PITSSGmbH2015

©PITSSGmbH2015

Kontinuierliches Monitoring

31

©PITSSGmbH2015

©PITSSGmbH2015

BoyScoutRule

32

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

Robert Stephenson Smyth Baden-Powell

©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

©PITSSGmbH2015

©PITSSGmbH2015

Einstieg

34

©PITSSGmbH2015

©PITSSGmbH2015

Aktivitäten derDOAG

35

©PITSSGmbH2015

©PITSSGmbH2015

Def inition Code Qualität

36