SlideShare una empresa de Scribd logo
1 de 89
Der Vortragende
      Perl-Programmierung
                Perl::Critic




                    Perl::Critic
Dein Nachfolger könnte ein Psychopath sein




                    Renée Bäcker




        Chemnitzer LinuxTage 2011




             Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende
                   Perl-Programmierung
                             Perl::Critic


Über mich...



      Renée Bäcker

      Perl-Programmierer seit 2002

      Perl-Services.de

          Schulungen
          Programmierung
          OTRS
          Perl-Magazin




                          Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Oh mein Gott...
                   Perl-Programmierung      Regeln
                             Perl::Critic   Perl Best Practices


Ist das wirklich Perl?




  ($/,$%,$.,$-)=(gmtime($^T+=86400))[3..6]while($/-12)/4|$
  2||++$printf
  1900+$..-%02d-%02dn,++$%,$/==8?8:$/-7




                          Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Oh mein Gott...
                   Perl-Programmierung      Regeln
                             Perl::Critic   Perl Best Practices


Perl == RSA?




  The only language that looks the same before and after RSA
  encryption.  Keith Bostic




                          Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Oh mein Gott...
                Perl-Programmierung      Regeln
                          Perl::Critic   Perl Best Practices


Solcher Code macht Dich glücklich




                       Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Oh mein Gott...
                 Perl-Programmierung      Regeln
                           Perl::Critic   Perl Best Practices


... aber nur für einen kurzen Augenblick




                        Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Oh mein Gott...
                Perl-Programmierung      Regeln
                          Perl::Critic   Perl Best Practices


... nach ein paar Monaten




                       Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Oh mein Gott...
               Perl-Programmierung      Regeln
                         Perl::Critic   Perl Best Practices


Im Team ist so etwas unangebracht




                      Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Oh mein Gott...
               Perl-Programmierung      Regeln
                         Perl::Critic   Perl Best Practices


Im Team ist so etwas unangebracht




                      Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Oh mein Gott...
                      Perl-Programmierung      Regeln
                                Perl::Critic   Perl Best Practices


Ein Team braucht Regeln

  Tim, 26, C      Perl

  for ( $i = 0; $i = $#zahlen; $i++ ) {
      $array[i] = $zahlen[$i] * 2;
  }



  Michael, 27, schon länger bei Perl dabei

  for my $i ( 0 .. $#zahlen ) {
      $array[$i] = $zahlen[$i] * 2;
  }



  Sabrina, 25, Perl mit der Muttermilch aufgenommen ;-)

  my @array = map{ $_ * 2 }@zahlen;


                             Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Oh mein Gott...
                     Perl-Programmierung      Regeln
                               Perl::Critic   Perl Best Practices


Ein Team braucht Regeln



  Die Regeln sollten für einige Punkte abdecken:

      Code-Layout

      erlaubte Konstrukte

      Perl-Version

      Metadaten

      Projektinformationen (VCS,...)




                            Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Oh mein Gott...
                   Perl-Programmierung      Regeln
                             Perl::Critic   Perl Best Practices


Regeln für Perl-Code



  Firmen haben Regeln für

      Java

      C/C++

      ...

  Aber nur wenige haben festgelegte Regeln für Perl.




                          Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Oh mein Gott...
                   Perl-Programmierung      Regeln
                             Perl::Critic   Perl Best Practices


Regeln für Perl-Code




  Ohne Regeln...

  ... gibt es einen Wildwuchs an Perl-Code. Wartbarkeit nimmt ab.




                          Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Oh mein Gott...
           Perl-Programmierung      Regeln
                     Perl::Critic   Perl Best Practices


Das Buch




                  Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Oh mein Gott...
                  Perl-Programmierung      Regeln
                            Perl::Critic   Perl Best Practices


Was Damian Conway beschreibt...




     Best Practices

         ein paar wenige Kapitel sind veraltet (z.B.  Objekte )

     Vorschläge

     seine Erfahrung

     absolut lesenswertes Material




                         Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Oh mein Gott...
                 Perl-Programmierung      Regeln
                           Perl::Critic   Perl Best Practices


Gesetz?? - Viele halten es dafür...




                        Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Oh mein Gott...
                   Perl-Programmierung      Regeln
                             Perl::Critic   Perl Best Practices


... ist es aber nicht




                          Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Oh mein Gott...
                    Perl-Programmierung      Regeln
                              Perl::Critic   Perl Best Practices


Kategorien



  Conway zeigt Best Practices für eine ganze Reihe von Kategorien:

      Code-Layout

      Namenskonventionen

      Werte und Ausdrücke

      Variablen

      Kontrollstrukturen

      ...




                           Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                    Perl-Programmierung      In Projektarbeit einbinden...
                              Perl::Critic   Perl::Critic::*
                                             Eigene Regeln

Was hat Perl Best Practices mit Perl::Critic zu tun?




  Auf der Basis des Buchs wurde Perl::Critic entwickelt. Damit lässt
  sich der eigene Code analysieren...




                           Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                    Perl-Programmierung      In Projektarbeit einbinden...
                              Perl::Critic   Perl::Critic::*
                                             Eigene Regeln

Was ist Perl::Critic?



  Hilft dem Programmierer Fehler zu vermeiden, mehr oder
  weniger wie use warnings und use strict

  mehr...

  Perl::Critic schaut nicht auf die einfache syntaktische Korrektheit,
  sondern achtet darauf, dass gewisse Regeln eingehalten werden -
  z.B. ob Subroutinennamen CamelCase sind oder nicht.




                           Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                    Perl-Programmierung      In Projektarbeit einbinden...
                              Perl::Critic   Perl::Critic::*
                                             Eigene Regeln

Was ist Perl::Critic?



  Hilft dem Programmierer Fehler zu vermeiden, mehr oder
  weniger wie use warnings und use strict

  weniger...

  Perl::Critic kompiliert den Code nicht, sondern parst ihn dank
  PPI als Dokument.




                           Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                        Perl-Programmierung      In Projektarbeit einbinden...
                                  Perl::Critic   Perl::Critic::*
                                                 Eigene Regeln

Ein erstes Beispiel




  Ein erstes Beispiel

  #!/usr/bin/perl

  print Hallo Chemnitz;




                               Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                        Perl-Programmierung      In Projektarbeit einbinden...
                                  Perl::Critic   Perl::Critic::*
                                                 Eigene Regeln

Ausgabe


  Ein erstes Beispiel

  ~ perlcritic 1.pl
  Code before strictures are enabled at line 3, column 1. See page
  429 of PBP. ( Severity: 5)



       perlcritic wird mit Perl::Critic installiert

       Wir haben gegen eine Regel verstoÿen

       Es sagt uns, wo wir das in Perl Best Practices nden können

       Wie schlimm ist unser Code wirklich




                               Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                        Perl-Programmierung      In Projektarbeit einbinden...
                                  Perl::Critic   Perl::Critic::*
                                                 Eigene Regeln

Ausgabe


  Ein erstes Beispiel

  ~ perlcritic 1.pl
  Code before strictures are enabled at line 3, column 1. See page
  429 of PBP. ( Severity: 5)



       perlcritic wird mit Perl::Critic installiert

       Wir haben gegen eine Regel verstoÿen

       Es sagt uns, wo wir das in Perl Best Practices nden können

       Wie schlimm ist unser Code wirklich




                               Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                        Perl-Programmierung      In Projektarbeit einbinden...
                                  Perl::Critic   Perl::Critic::*
                                                 Eigene Regeln

Ausgabe


  Ein erstes Beispiel

  ~ perlcritic 1.pl
  Code before strictures are enabled at line 3, column 1. See page
  429 of PBP. ( Severity: 5)



       perlcritic wird mit Perl::Critic installiert

       Wir haben gegen eine Regel verstoÿen

       Es sagt uns, wo wir das in Perl Best Practices nden können

       Wie schlimm ist unser Code wirklich




                               Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                        Perl-Programmierung      In Projektarbeit einbinden...
                                  Perl::Critic   Perl::Critic::*
                                                 Eigene Regeln

Ausgabe


  Ein erstes Beispiel

  ~ perlcritic 1.pl
  Code before strictures are enabled at line 3, column 1. See page
  429 of PBP. ( Severity: 5)



       perlcritic wird mit Perl::Critic installiert

       Wir haben gegen eine Regel verstoÿen

       Es sagt uns, wo wir das in Perl Best Practices nden können

       Wie schlimm ist unser Code wirklich




                               Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                   Perl-Programmierung      In Projektarbeit einbinden...
                             Perl::Critic   Perl::Critic::*
                                            Eigene Regeln

Perl::Critic Regeln



      Die Überprüfung basiert auf bestimmten Regeln - in diesem
      Fall TestingAndDebugging::RequireUseStrict.

      Diese Regeln werden mit Perl::Critic mitgeliefert

          ... oder werden von anderen Module geliefert (z.B.
          Perl::Critic::OTRS)
          ... oder man schreibt selbst welche

      Regeln die Bugs vermeiden .. Regeln kosmetischer Natur




                          Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                   Perl-Programmierung      In Projektarbeit einbinden...
                             Perl::Critic   Perl::Critic::*
                                            Eigene Regeln

Perl::Critic Regeln



      Die Überprüfung basiert auf bestimmten Regeln - in diesem
      Fall TestingAndDebugging::RequireUseStrict.

      Diese Regeln werden mit Perl::Critic mitgeliefert

          ... oder werden von anderen Module geliefert (z.B.
          Perl::Critic::OTRS)
          ... oder man schreibt selbst welche

      Regeln die Bugs vermeiden .. Regeln kosmetischer Natur




                          Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                   Perl-Programmierung      In Projektarbeit einbinden...
                             Perl::Critic   Perl::Critic::*
                                            Eigene Regeln

Perl::Critic Regeln



      Die Überprüfung basiert auf bestimmten Regeln - in diesem
      Fall TestingAndDebugging::RequireUseStrict.

      Diese Regeln werden mit Perl::Critic mitgeliefert

          ... oder werden von anderen Module geliefert (z.B.
          Perl::Critic::OTRS)
          ... oder man schreibt selbst welche

      Regeln die Bugs vermeiden .. Regeln kosmetischer Natur




                          Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                    Perl-Programmierung      In Projektarbeit einbinden...
                              Perl::Critic   Perl::Critic::*
                                             Eigene Regeln

Nochmal...




  Regeln kosmetischer Natur?!?

  Gleiches Programm, aber...

  ~ perlcritic -severity=1 1.pl




                           Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                     Perl-Programmierung      In Projektarbeit einbinden...
                               Perl::Critic   Perl::Critic::*
                                              Eigene Regeln

Ausgabe
  ... viel mehr Fehler

  Code is not tidy at line 1, column 1. See page 33 of PBP. (Severity:
  1)
  RCS keywords $Id$ not found at line 1, column 1. See page 441 of
  PBP. (Severity: 2)
  RCS keywords $Revision$, $HeadURL$, $Date$ not found at line 1,
  column 1. See p age 441 of PBP. (Severity: 2)
  RCS keywords $Revision$, $Source$, $Date$ not found at line 1,
  column 1. See page 441 of PBP. (Severity: 2)
  No package-scoped $VERSION variable found at line 1, column
  1. See page 404 o f PBP. (Severity: 2)
  Return value of agged function ignored - print at line 3, column 1.
  See pages 208,278 of PBP. (Severity: 1)
  Code before strictures are enabled at line 3, column 1. See page
  429 of PBP. ( Severity: 5)
                         Renée Bäcker         Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                    Perl-Programmierung      In Projektarbeit einbinden...
                              Perl::Critic   Perl::Critic::*
                                             Eigene Regeln

Was ist passiert?




  Warum gibt es jetzt viel mehr Warnungen?

      Wir wollten, dass Perl::Critic viel pingeliger ist!                   -severity=1




                           Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                       Perl-Programmierung      In Projektarbeit einbinden...
                                 Perl::Critic   Perl::Critic::*
                                                Eigene Regeln

Severities


  Severities gewichtet die Regeln

      5 (gentle)      Schwerwiegenste Regeln

      4 (stern)

      3 (harsh)

      2 (cruel)

      1 (brutal)      Kosmetische Regeln

  Wer Regeln entwirft muss diese Wichtigkeit festlegen - kann aber
  noch angepasst werden.




                              Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                     Perl-Programmierung      In Projektarbeit einbinden...
                               Perl::Critic   Perl::Critic::*
                                              Eigene Regeln

Ein weiteres Beispiel
  Hier ist alles ok, oder?

  #!/usr/bin/perl
  # $Id$

  use strict;
  use warnings;
  our $VERSION = 0.01;

  my $has_flag = check_flag();
  print No flag if !$has_flag;

  sub check_flag {
      return 1;
  }
                             Renée Bäcker     Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                    Perl-Programmierung      In Projektarbeit einbinden...
                              Perl::Critic   Perl::Critic::*
                                             Eigene Regeln

Der Fehler



  Nein, doch noch eine Meldung...

  ~perlcritic -severity=2 2.pl
  Postx control if used at line 13, column 17. See pages 93,94 of
  PBP. (Severity: 2)



      Ich bin aber ein Freund des nachgestellten if. Was nun?




                           Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                    Perl-Programmierung      In Projektarbeit einbinden...
                              Perl::Critic   Perl::Critic::*
                                             Eigene Regeln

Der Fehler



  Nein, doch noch eine Meldung...

  ~perlcritic -severity=2 2.pl
  Postx control if used at line 13, column 17. See pages 93,94 of
  PBP. (Severity: 2)



      Ich bin aber ein Freund des nachgestellten if. Was nun?




                           Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                    Perl-Programmierung      In Projektarbeit einbinden...
                              Perl::Critic   Perl::Critic::*
                                             Eigene Regeln

Regeln ausschlieÿen



  Man kann Regeln auch ausschlieÿen. Perl Best Practices liefert
  Anregungen, wie man programmieren kann, man muss aber nicht
  mit allem einverstanden sein.
  Es gibt mehrere Wege, um Regeln auszuschlieÿen:

  1. Weg

  ~perlcritic -severity=2 -exclude=ProhibitPostxControls 2.pl
  2.pl source OK




                           Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                  Perl-Programmierung      In Projektarbeit einbinden...
                            Perl::Critic   Perl::Critic::*
                                           Eigene Regeln

Regeln ausschlieÿen

  Man kann auch im Code über bestimmte Kommentare die Regeln
  ausschalten

  2. Weg

  use strict;

  ## no critic (RequireCamelCase)
  my $has_flag = check_flag();

  ## use critic

  sub connect {} ## no critic (ProhibitBuiltinHomonyms)


                         Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                      Perl-Programmierung      In Projektarbeit einbinden...
                                Perl::Critic   Perl::Critic::*
                                               Eigene Regeln

Konguration


  Eine weitere Möglichkeit ist, eine Kongurationsdatei zu erstellen

      .perlcriticrc

      INI-Format

  Suchreihenfolge:

      im aktuellen Verzeichnis

      im HOME-Verzeichnis

      Angabe in Umgebungsvariablen PERLCRITIC




                             Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                   Perl-Programmierung      In Projektarbeit einbinden...
                             Perl::Critic   Perl::Critic::*
                                            Eigene Regeln

Konguration




  Ausschnitt einer Kongurationsdatei

  [ControlStructures::ProhibitPostfixControls]
  allow = if unless # My custom configuration
  severity = cruel # Same as severity = 2




                          Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                   Perl-Programmierung      In Projektarbeit einbinden...
                             Perl::Critic   Perl::Critic::*
                                            Eigene Regeln

Konguration




  Ausschnitt einer Kongurationsdatei

  [-NamingConventions::Capitalization]
  [-ValuesAndExpressions::ProhibitMagicNumbers]




                          Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                   Perl-Programmierung      In Projektarbeit einbinden...
                             Perl::Critic   Perl::Critic::*
                                            Eigene Regeln

Konguration



  Ausschnitt einer Kongurationsdatei

  [Modules::RequireFilenameMatchesPackage]
  add_themes = larry

  [TestingAndDebugging::RequireTestLables]
  add_themes = larry curly moe




                          Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende      Perl::Critic im Einsatz
                  Perl-Programmierung       In Projektarbeit einbinden...
                            Perl::Critic    Perl::Critic::*
                                            Eigene Regeln

Themes




    Unterschiedliche Projekte             Unterschiedliche Kongurationen

    Themes sind die Lösung

         Themes sind Gruppierungen von Regeln.
         Für jedes Projekt wird ein Theme erstellt und entsprechend
         eingebunden




                         Renée Bäcker       Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                    Perl-Programmierung      In Projektarbeit einbinden...
                              Perl::Critic   Perl::Critic::*
                                             Eigene Regeln

Themes im Einsatz
  Themes im Einsatz

  ~perlcritic -theme=core 3.pl
  Code is not tidy at line 1, column 1. See page 33 of PBP. (Severity:
  1)
  RCS keywords $Id$ not found at line 1, column 1. See page 441 of
  PBP. (Severity: 2)
  [...]
  Subroutine OTRSName is not all lower case or all upper case at
  line 6, column 1. See pages 45,46 of PBP. (Severity: 1)
  ~perlcritic -theme=maintenance 3.pl
  3.pl source OK
  ~perlcritic -theme=otrs 3.pl
  Variable, subroutine, and package names have to be in CamelCase
  at line 7, colum n 1. (no explanation). (Severity: 5)

                           Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                    Perl-Programmierung      In Projektarbeit einbinden...
                              Perl::Critic   Perl::Critic::*
                                             Eigene Regeln

Roundup


  Perl::Critic in der Zusammenfassung

      Statische Codeanalyse

           Basiert auf Regeln
           PPI

      Viele Einstellmöglichkeiten

           Severeties
           Themes
           Einzelne Regeln hinzufügen/abschalten




                           Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                  Perl-Programmierung      In Projektarbeit einbinden...
                            Perl::Critic   Perl::Critic::*
                                           Eigene Regeln

Perl::Critic testen




                         Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                     Perl-Programmierung      In Projektarbeit einbinden...
                               Perl::Critic   Perl::Critic::*
                                              Eigene Regeln

In Projektarbeit einbinden...



  Gröÿter Nutzen wenn es direkt in die Projekte eingebunden wird

      Direkt in Unittests

           Test::Perl::Critic

      Als Hooks in Versionskontrollsysteme

      Regelmäÿig selbst laufen lassen - schon während der
      Entwicklung




                            Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                     Perl-Programmierung      In Projektarbeit einbinden...
                               Perl::Critic   Perl::Critic::*
                                              Eigene Regeln

... in Unittests



  Einfach ein Testskript erstellen:

  98_perl_critic.t

  use Test::Perl::Critic;
  my $rcfile = File::Spec-catfile( 't', 'perlcriticrc'
  );
  Test::Perl::Critic-import( -profile = $rcfile );
  all_critic_ok();




                            Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                   Perl-Programmierung      In Projektarbeit einbinden...
                             Perl::Critic   Perl::Critic::*
                                            Eigene Regeln

... in Unittests




                          Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
              Perl-Programmierung      In Projektarbeit einbinden...
                        Perl::Critic   Perl::Critic::*
                                       Eigene Regeln

... in IDEs




                     Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
              Perl-Programmierung      In Projektarbeit einbinden...
                        Perl::Critic   Perl::Critic::*
                                       Eigene Regeln

... in IDEs




                     Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
              Perl-Programmierung      In Projektarbeit einbinden...
                        Perl::Critic   Perl::Critic::*
                                       Eigene Regeln

... in IDEs




                     Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
              Perl-Programmierung      In Projektarbeit einbinden...
                        Perl::Critic   Perl::Critic::*
                                       Eigene Regeln

... in IDEs




                     Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                Perl-Programmierung      In Projektarbeit einbinden...
                          Perl::Critic   Perl::Critic::*
                                         Eigene Regeln

... in VCS




  SVN-Hook

  SET REPOS=%1
  SET TXN=%2
  perl D:Repositoryhooksperl_critic.pl %REPOS%
  %TXN%




                       Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
             Perl-Programmierung      In Projektarbeit einbinden...
                       Perl::Critic   Perl::Critic::*
                                      Eigene Regeln

... in VCS




                    Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
             Perl-Programmierung      In Projektarbeit einbinden...
                       Perl::Critic   Perl::Critic::*
                                      Eigene Regeln

... in VCS




                    Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                    Perl-Programmierung      In Projektarbeit einbinden...
                              Perl::Critic   Perl::Critic::*
                                             Eigene Regeln

Weitere Pakete auf CPAN




  Häug reichen die Standardregeln nicht aus.
  CPAN liefert noch weitere Pakete mit Regeln:

      Perl::Critic::Bangs

      Perl::Critic::Lax

      Perl::Critic::OTRS




                            Renée Bäcker     Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                    Perl-Programmierung      In Projektarbeit einbinden...
                              Perl::Critic   Perl::Critic::*
                                             Eigene Regeln

... Perl::Critic::Bangs


  Für Modulentwickler sehr interessant

       ProhibitCommentedOutCode

           Wer hat sich noch nicht über gröÿere Mengen alten Codes
           geärgert?

       ProhibitFlagComments

           Überprüft auf Flags wie TODO, JFDI,...

       ProhibitNoPlan

           Tests sollten einen Plan haben...




                           Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                   Perl-Programmierung      In Projektarbeit einbinden...
                             Perl::Critic   Perl::Critic::*
                                            Eigene Regeln

... Perl::Critic::Bangs




       ProhibitNumberedNames

           my $var2 ist nicht sehr aussagekräftig

       ProhibitVagueNames

           my $data ist nichtssagend




                          Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                     Perl-Programmierung      In Projektarbeit einbinden...
                               Perl::Critic   Perl::Critic::*
                                              Eigene Regeln

... Perl::Critic::Lax


   An manchen Stellen ist Perl::Critic zu strikt. Hier helfen dann diese
   Regeln:

       ProhibitEmptyQuotes::ExceptAsFallback

             Erlaubt so etwas wie my $var = $test || 

       ProhibitStringyEval::ExceptForRequire

             String-eval ist nicht gut, aber manchmal braucht man es doch

       RequireEndWithTrueConst




                            Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                    Perl-Programmierung      In Projektarbeit einbinden...
                              Perl::Critic   Perl::Critic::*
                                             Eigene Regeln

... Perl::Critic::OTRS


  Wer OTRS-Entwicklung betreibt, kann sich diese Regeln
  anschauen:

      RequireCamelCase

            AllesMussInCamelCaseGeschriebenWerden (Subs, Variablen,...)

      RequireParensWithMethods

            Alle Nicht-Builtin-Methodenaufrufe müssen Klammern haben

      ...




                           Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                  Perl-Programmierung      In Projektarbeit einbinden...
                            Perl::Critic   Perl::Critic::*
                                           Eigene Regeln

Eigene Regeln




  Aber manchmal reichen auch diese Erweiterungen auf dem CPAN
  nicht!




                         Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                    Perl-Programmierung      In Projektarbeit einbinden...
                              Perl::Critic   Perl::Critic::*
                                             Eigene Regeln

Wie arbeitet Perl::Critic?



  Wie am Anfang erwähnt, arbeitet Perl::Critic mit PPI! Wer eigene
  Regeln entwickeln will, muss sich also mal mit PPI beschäftigen...

      Parser für Perl-Dokumente

      Parsen nach  menschlichen Verständnis

      Reines Perl

      Relativ langsam




                           Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                 Perl-Programmierung      In Projektarbeit einbinden...
                           Perl::Critic   Perl::Critic::*
                                          Eigene Regeln

Was ist eigentlich Perl?



  Acme::Buy

  use Acme::Buffy;
  BUffY bUFFY BUffY    bUFFY       bUfFy    buFfY
  bUFfY bUFFY buffy    buffY       bUffy    buFFY buffY
  BuFfy bUFfy bufFy    BuFFY       buffy    bUffy buFfY
  buffY BuFfy buFfy    bUFFy       bUfFY    buffY buFfY




                        Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                  Perl-Programmierung      In Projektarbeit einbinden...
                            Perl::Critic   Perl::Critic::*
                                           Eigene Regeln

Was ist eigentlich Perl?


  Acme::DoubleHelix

  use Acme::DoubleHelix;
   CG
  T--A
  A---T
  A----T
   C----G
    T----A
     A---T




                         Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                   Perl-Programmierung      In Projektarbeit einbinden...
                             Perl::Critic   Perl::Critic::*
                                            Eigene Regeln

Perl mit PPI parsen


  PPI im Einsatz

  #!/usr/bin/perl
  use strict;
  use warnings;
  use PPI;
  use PPI::Dumper;

  my $ppi = PPI::Document-new($0);
  my $dumper = PPI::Dumper-new($ppi);
  $dumper-print();



                          Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                 Perl-Programmierung      In Projektarbeit einbinden...
                           Perl::Critic   Perl::Critic::*
                                          Eigene Regeln

Baum eines Perl-Programms


  Baum eines Perl-Programms

  PPI::Document
      PPI::Token::Comment '#!/usr/bin/perln'
      PPI::Token::Whitespace 'n'
      PPI::Statement::Include
          PPI::Token::Word 'use'
          PPI::Token::Whitespace ' '
          PPI::Token::Word 'strict'
          PPI::Token::Structure ';'
      PPI::Token::Whitespace 'n'
  [...]


                        Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                    Perl-Programmierung      In Projektarbeit einbinden...
                              Perl::Critic   Perl::Critic::*
                                             Eigene Regeln

Eine neue Regel


  Wir brauchen eine Regel: Methodenaufrufe müssen immer runde
  Klammern haben.

  Beispielcode

  my $obj = CGI-new;
  print $obj-header();
  print $obj-start_html( -css = 'hallo.css' );
  my $hashref = { key = 'value' };
  print $hashref-{key};




                           Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                Perl-Programmierung      In Projektarbeit einbinden...
                          Perl::Critic   Perl::Critic::*
                                         Eigene Regeln

Mehr Infos...



  ungültig

  my $obj = CGI-new;

  PPI-Dump

  PPI::Token::Word 'CGI'
  PPI::Token::Operator '-'
  PPI::Token::Word 'new'
  PPI::Token::Structure ';




                       Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                Perl-Programmierung      In Projektarbeit einbinden...
                          Perl::Critic   Perl::Critic::*
                                         Eigene Regeln

Mehr Infos...


  gültig

  print $obj-header();

  PPI-Dump

  PPI::Token::Symbol '$obj'
  PPI::Token::Operator '-'
  PPI::Token::Word 'header'
  PPI::Structure::List ( ... )
  PPI::Token::Structure ';




                       Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                Perl-Programmierung      In Projektarbeit einbinden...
                          Perl::Critic   Perl::Critic::*
                                         Eigene Regeln

Mehr Infos...

  gültig

  print $obj-start_html( css = 'hallo.css' );

  PPI-Dump

  PPI::Token::Symbol '$obj'
  PPI::Token::Operator '-'
  PPI::Token::Word 'start_html'
  PPI::Structure::List ( ... )
      PPI::Token::Whitespace ' '
      PPI::Statement::Expression
          [...]
  PPI::Token::Structure ';'

                       Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                    Perl-Programmierung      In Projektarbeit einbinden...
                              Perl::Critic   Perl::Critic::*
                                             Eigene Regeln

Mehr Infos...




  uninteressant

  $hashref-{key};
  ..
  $arrayref-[1];

  Das sind einfach Dereferenzierungen...




                           Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                Perl-Programmierung      In Projektarbeit einbinden...
                          Perl::Critic   Perl::Critic::*
                                         Eigene Regeln

Mehr Infos...



  PPI-Dump

  PPI::Token::Symbol '$hashref'
  PPI::Token::Operator '-'
  PPI::Structure::Subscript { ... }
      PPI::Statement::Expression
          PPI::Token::Word 'key'
  PPI::Token::Structure ';'




                       Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                    Perl-Programmierung      In Projektarbeit einbinden...
                              Perl::Critic   Perl::Critic::*
                                             Eigene Regeln

Was wir jetzt wissen



  Wir haben jetzt alle notwendigen Informationen:

      Wir müssen auf PPI::Token::Operator reagieren (-)

      Wenn danach ein PPI::Structure::Subscript kommt,
      interessiert es uns nicht

      Wenn danach ein PPI::Structure::List kommt, ist alles ok




                           Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                    Perl-Programmierung      In Projektarbeit einbinden...
                              Perl::Critic   Perl::Critic::*
                                             Eigene Regeln

Was wir jetzt wissen



  Wir haben jetzt alle notwendigen Informationen:

      Wir müssen auf PPI::Token::Operator reagieren (-)

      Wenn danach ein PPI::Structure::Subscript kommt,
      interessiert es uns nicht

      Wenn danach ein PPI::Structure::List kommt, ist alles ok




                           Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                    Perl-Programmierung      In Projektarbeit einbinden...
                              Perl::Critic   Perl::Critic::*
                                             Eigene Regeln

Was wir jetzt wissen



  Wir haben jetzt alle notwendigen Informationen:

      Wir müssen auf PPI::Token::Operator reagieren (-)

      Wenn danach ein PPI::Structure::Subscript kommt,
      interessiert es uns nicht

      Wenn danach ein PPI::Structure::List kommt, ist alles ok




                           Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                     Perl-Programmierung      In Projektarbeit einbinden...
                               Perl::Critic   Perl::Critic::*
                                              Eigene Regeln

Perl::Critic Regel


  Die Regel

  package
  Perl::Critic::Policy::OTRS::RequireParensWithMethods;
  use strict;
  use warnings;
  use Perl::Critic::Utils qw{ :severities
  :classification :ppi };
  use base 'Perl::Critic::Policy';
  use Readonly;
  our $VERSION = '0.01';



                            Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                     Perl-Programmierung      In Projektarbeit einbinden...
                               Perl::Critic   Perl::Critic::*
                                              Eigene Regeln

Perl::Critic Regel



  Die Regel

  Readonly::Scalar my $DESC =
      q{Method invokation should use ()};
  Readonly::Scalar my $EXPL =
      q{Use -MethodName() instead of
  -MethodName.};




                            Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                     Perl-Programmierung      In Projektarbeit einbinden...
                               Perl::Critic   Perl::Critic::*
                                              Eigene Regeln

Perl::Critic Regel




  Die Regel

  sub   supported_parameters { return; }
  sub   default_severity { return $SEVERITY_HIGHEST; }
  sub   default_themes { return qw( otrs ) }
  sub   applies_to { return 'PPI::Token::Operator' }




                            Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                     Perl-Programmierung      In Projektarbeit einbinden...
                               Perl::Critic   Perl::Critic::*
                                              Eigene Regeln

Perl::Critic Regel



  Die Regel

  sub violates {
      my ( $self, $elem ) = @_;
      return if $elem ne '-';
      my $method = $elem-snext_sibling;
      return if ref $method eq
  'PPI::Structure::Subscript';




                            Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                     Perl-Programmierung      In Projektarbeit einbinden...
                               Perl::Critic   Perl::Critic::*
                                              Eigene Regeln

Perl::Critic Regel



  Die Regel

       my $list = $method-snext_sibling;
       return if ref $list eq 'PPI::Structure::List';
       return $self-violation( $DESC, $EXPL, $elem );
  }
  1;




                            Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                     Perl-Programmierung      In Projektarbeit einbinden...
                               Perl::Critic   Perl::Critic::*
                                              Eigene Regeln

Perl::Critic Regel



  Zusammenfassung eigene Regeln:

      erbt von Perl::Critic::Policy

      $DESC, $EXPL

      Methoden: default_severity, default_themes, applies_to

      violates




                            Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                   Perl-Programmierung      In Projektarbeit einbinden...
                             Perl::Critic   Perl::Critic::*
                                            Eigene Regeln

Die eigene Regel testen




  Die eigene Regel kann einfach getestet werden:

      Neues Object von Perl::Critic erzeugen

      Neues Object von der Regel erzeugen

      Test laufen lassen




                           Renée Bäcker     Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                   Perl-Programmierung      In Projektarbeit einbinden...
                             Perl::Critic   Perl::Critic::*
                                            Eigene Regeln

Die eigene Regel testen




  Test der eigenen Regel

  use Test::More;
  use Perl::Critic;
  use
  Perl::Critic::Policy::OTRS::RequireParensWithMethods;




                           Renée Bäcker     Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                   Perl-Programmierung      In Projektarbeit einbinden...
                             Perl::Critic   Perl::Critic::*
                                            Eigene Regeln

Die eigene Regel testen


  Test der eigenen Regel

  my @valid = (
      'CGI-new();',
      '$obj-method();',
  );
  my @invalid = (
      'CGI-new;',
      '$obj-method;',
  );
  plan tests = @valid + @invalid;



                           Renée Bäcker     Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                   Perl-Programmierung      In Projektarbeit einbinden...
                             Perl::Critic   Perl::Critic::*
                                            Eigene Regeln

Die eigene Regel testen




  Test der eigenen Regel

  my $c = Perl::Critic-new( -profile = 'NONE' );
  my $policy =
  Perl::Critic::Policy::OTRS::RequireParensWithMethods-new;
  $c-add_policy( -policy = $policy );




                           Renée Bäcker     Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                   Perl-Programmierung      In Projektarbeit einbinden...
                             Perl::Critic   Perl::Critic::*
                                            Eigene Regeln

Die eigene Regel testen




  Test der eigenen Regel

  ok( (scalar $c-critique( $_ )) == 0, 'valid' ) for
  @valid;
  ok( (scalar $c-critique( $_ ))  0, 'invalid' ) for
  @invalid;




                           Renée Bäcker     Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
                    Perl-Programmierung      In Projektarbeit einbinden...
                              Perl::Critic   Perl::Critic::*
                                             Eigene Regeln

Eigene Perl::Critic Regeln




  Wie zu sehen war, ist Perl::Critic ein nützliches Tool, um
  Programmierregeln durchzusetzen.


  
  Eigene Regeln sind einfach umzusetzen.
      Es gibt keine Entschuldigung mehr, unleserlichen Code zu
  schreiben ;-)




                           Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
Der Vortragende     Perl::Critic im Einsatz
               Perl-Programmierung      In Projektarbeit einbinden...
                         Perl::Critic   Perl::Critic::*
                                        Eigene Regeln

Vielen Dank!




                        Vielen Dank!




                      Renée Bäcker      Perl::Critic - Dein Nachfolger könnte ein Psychopath sein

Más contenido relacionado

Destacado

Rc diego fonseca
Rc diego fonsecaRc diego fonseca
Rc diego fonsecadiegoli17
 
Ganar o perder láminas
Ganar o perder láminasGanar o perder láminas
Ganar o perder láminasAnabel Cornago
 
7 RAZONES PARA CELEBRAR NAVIDAD. Edgar Nava de Oaxaca
7 RAZONES PARA CELEBRAR NAVIDAD. Edgar Nava de Oaxaca7 RAZONES PARA CELEBRAR NAVIDAD. Edgar Nava de Oaxaca
7 RAZONES PARA CELEBRAR NAVIDAD. Edgar Nava de OaxacaEdgaryBlanca Nava
 
2016 ULL Cabildo KEEDIO - Como se empieza
2016 ULL Cabildo KEEDIO - Como se empieza2016 ULL Cabildo KEEDIO - Como se empieza
2016 ULL Cabildo KEEDIO - Como se empiezaKEEDIO
 
Puzzles con letras trabajo
Puzzles con letras trabajoPuzzles con letras trabajo
Puzzles con letras trabajoAnabel Cornago
 

Destacado (8)

Alomaliza
AlomalizaAlomaliza
Alomaliza
 
Rc diego fonseca
Rc diego fonsecaRc diego fonseca
Rc diego fonseca
 
Organigramas
OrganigramasOrganigramas
Organigramas
 
Ganar o perder láminas
Ganar o perder láminasGanar o perder láminas
Ganar o perder láminas
 
E-CATALOG 1
E-CATALOG 1E-CATALOG 1
E-CATALOG 1
 
7 RAZONES PARA CELEBRAR NAVIDAD. Edgar Nava de Oaxaca
7 RAZONES PARA CELEBRAR NAVIDAD. Edgar Nava de Oaxaca7 RAZONES PARA CELEBRAR NAVIDAD. Edgar Nava de Oaxaca
7 RAZONES PARA CELEBRAR NAVIDAD. Edgar Nava de Oaxaca
 
2016 ULL Cabildo KEEDIO - Como se empieza
2016 ULL Cabildo KEEDIO - Como se empieza2016 ULL Cabildo KEEDIO - Como se empieza
2016 ULL Cabildo KEEDIO - Como se empieza
 
Puzzles con letras trabajo
Puzzles con letras trabajoPuzzles con letras trabajo
Puzzles con letras trabajo
 

Más de Renee Baecker

Perl5 Maintenance Fund
Perl5 Maintenance FundPerl5 Maintenance Fund
Perl5 Maintenance FundRenee Baecker
 
Jenkins und Perl-Projekte
Jenkins und Perl-ProjekteJenkins und Perl-Projekte
Jenkins und Perl-ProjekteRenee Baecker
 
OPAR Vortrag auf der CeBIT 2011
OPAR Vortrag auf der CeBIT 2011OPAR Vortrag auf der CeBIT 2011
OPAR Vortrag auf der CeBIT 2011Renee Baecker
 
Froscamp2010_perlcritic
Froscamp2010_perlcriticFroscamp2010_perlcritic
Froscamp2010_perlcriticRenee Baecker
 
Fr os con2010_bmatrainer
Fr os con2010_bmatrainerFr os con2010_bmatrainer
Fr os con2010_bmatrainerRenee Baecker
 
Fr os con2010_devel_nytprof
Fr os con2010_devel_nytprofFr os con2010_devel_nytprof
Fr os con2010_devel_nytprofRenee Baecker
 

Más de Renee Baecker (10)

2012 gpw yapc2012
2012 gpw yapc20122012 gpw yapc2012
2012 gpw yapc2012
 
Perl5 Maintenance Fund
Perl5 Maintenance FundPerl5 Maintenance Fund
Perl5 Maintenance Fund
 
Jenkins und Perl-Projekte
Jenkins und Perl-ProjekteJenkins und Perl-Projekte
Jenkins und Perl-Projekte
 
OPAR
OPAROPAR
OPAR
 
OPAR Vortrag auf der CeBIT 2011
OPAR Vortrag auf der CeBIT 2011OPAR Vortrag auf der CeBIT 2011
OPAR Vortrag auf der CeBIT 2011
 
Froscamp2010_perlcritic
Froscamp2010_perlcriticFroscamp2010_perlcritic
Froscamp2010_perlcritic
 
Froscamp2010_padre
Froscamp2010_padreFroscamp2010_padre
Froscamp2010_padre
 
Froscamp2010_moose
Froscamp2010_mooseFroscamp2010_moose
Froscamp2010_moose
 
Fr os con2010_bmatrainer
Fr os con2010_bmatrainerFr os con2010_bmatrainer
Fr os con2010_bmatrainer
 
Fr os con2010_devel_nytprof
Fr os con2010_devel_nytprofFr os con2010_devel_nytprof
Fr os con2010_devel_nytprof
 

Clt 2011 Perl Critic

  • 1. Der Vortragende Perl-Programmierung Perl::Critic Perl::Critic Dein Nachfolger könnte ein Psychopath sein Renée Bäcker Chemnitzer LinuxTage 2011 Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 2. Der Vortragende Perl-Programmierung Perl::Critic Über mich... Renée Bäcker Perl-Programmierer seit 2002 Perl-Services.de Schulungen Programmierung OTRS Perl-Magazin Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 3. Der Vortragende Oh mein Gott... Perl-Programmierung Regeln Perl::Critic Perl Best Practices Ist das wirklich Perl? ($/,$%,$.,$-)=(gmtime($^T+=86400))[3..6]while($/-12)/4|$ 2||++$printf 1900+$..-%02d-%02dn,++$%,$/==8?8:$/-7 Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 4. Der Vortragende Oh mein Gott... Perl-Programmierung Regeln Perl::Critic Perl Best Practices Perl == RSA? The only language that looks the same before and after RSA encryption. Keith Bostic Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 5. Der Vortragende Oh mein Gott... Perl-Programmierung Regeln Perl::Critic Perl Best Practices Solcher Code macht Dich glücklich Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 6. Der Vortragende Oh mein Gott... Perl-Programmierung Regeln Perl::Critic Perl Best Practices ... aber nur für einen kurzen Augenblick Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 7. Der Vortragende Oh mein Gott... Perl-Programmierung Regeln Perl::Critic Perl Best Practices ... nach ein paar Monaten Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 8. Der Vortragende Oh mein Gott... Perl-Programmierung Regeln Perl::Critic Perl Best Practices Im Team ist so etwas unangebracht Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 9. Der Vortragende Oh mein Gott... Perl-Programmierung Regeln Perl::Critic Perl Best Practices Im Team ist so etwas unangebracht Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 10. Der Vortragende Oh mein Gott... Perl-Programmierung Regeln Perl::Critic Perl Best Practices Ein Team braucht Regeln Tim, 26, C Perl for ( $i = 0; $i = $#zahlen; $i++ ) { $array[i] = $zahlen[$i] * 2; } Michael, 27, schon länger bei Perl dabei for my $i ( 0 .. $#zahlen ) { $array[$i] = $zahlen[$i] * 2; } Sabrina, 25, Perl mit der Muttermilch aufgenommen ;-) my @array = map{ $_ * 2 }@zahlen; Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 11. Der Vortragende Oh mein Gott... Perl-Programmierung Regeln Perl::Critic Perl Best Practices Ein Team braucht Regeln Die Regeln sollten für einige Punkte abdecken: Code-Layout erlaubte Konstrukte Perl-Version Metadaten Projektinformationen (VCS,...) Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 12. Der Vortragende Oh mein Gott... Perl-Programmierung Regeln Perl::Critic Perl Best Practices Regeln für Perl-Code Firmen haben Regeln für Java C/C++ ... Aber nur wenige haben festgelegte Regeln für Perl. Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 13. Der Vortragende Oh mein Gott... Perl-Programmierung Regeln Perl::Critic Perl Best Practices Regeln für Perl-Code Ohne Regeln... ... gibt es einen Wildwuchs an Perl-Code. Wartbarkeit nimmt ab. Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 14. Der Vortragende Oh mein Gott... Perl-Programmierung Regeln Perl::Critic Perl Best Practices Das Buch Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 15. Der Vortragende Oh mein Gott... Perl-Programmierung Regeln Perl::Critic Perl Best Practices Was Damian Conway beschreibt... Best Practices ein paar wenige Kapitel sind veraltet (z.B. Objekte ) Vorschläge seine Erfahrung absolut lesenswertes Material Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 16. Der Vortragende Oh mein Gott... Perl-Programmierung Regeln Perl::Critic Perl Best Practices Gesetz?? - Viele halten es dafür... Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 17. Der Vortragende Oh mein Gott... Perl-Programmierung Regeln Perl::Critic Perl Best Practices ... ist es aber nicht Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 18. Der Vortragende Oh mein Gott... Perl-Programmierung Regeln Perl::Critic Perl Best Practices Kategorien Conway zeigt Best Practices für eine ganze Reihe von Kategorien: Code-Layout Namenskonventionen Werte und Ausdrücke Variablen Kontrollstrukturen ... Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 19. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Was hat Perl Best Practices mit Perl::Critic zu tun? Auf der Basis des Buchs wurde Perl::Critic entwickelt. Damit lässt sich der eigene Code analysieren... Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 20. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Was ist Perl::Critic? Hilft dem Programmierer Fehler zu vermeiden, mehr oder weniger wie use warnings und use strict mehr... Perl::Critic schaut nicht auf die einfache syntaktische Korrektheit, sondern achtet darauf, dass gewisse Regeln eingehalten werden - z.B. ob Subroutinennamen CamelCase sind oder nicht. Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 21. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Was ist Perl::Critic? Hilft dem Programmierer Fehler zu vermeiden, mehr oder weniger wie use warnings und use strict weniger... Perl::Critic kompiliert den Code nicht, sondern parst ihn dank PPI als Dokument. Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 22. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Ein erstes Beispiel Ein erstes Beispiel #!/usr/bin/perl print Hallo Chemnitz; Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 23. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Ausgabe Ein erstes Beispiel ~ perlcritic 1.pl Code before strictures are enabled at line 3, column 1. See page 429 of PBP. ( Severity: 5) perlcritic wird mit Perl::Critic installiert Wir haben gegen eine Regel verstoÿen Es sagt uns, wo wir das in Perl Best Practices nden können Wie schlimm ist unser Code wirklich Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 24. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Ausgabe Ein erstes Beispiel ~ perlcritic 1.pl Code before strictures are enabled at line 3, column 1. See page 429 of PBP. ( Severity: 5) perlcritic wird mit Perl::Critic installiert Wir haben gegen eine Regel verstoÿen Es sagt uns, wo wir das in Perl Best Practices nden können Wie schlimm ist unser Code wirklich Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 25. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Ausgabe Ein erstes Beispiel ~ perlcritic 1.pl Code before strictures are enabled at line 3, column 1. See page 429 of PBP. ( Severity: 5) perlcritic wird mit Perl::Critic installiert Wir haben gegen eine Regel verstoÿen Es sagt uns, wo wir das in Perl Best Practices nden können Wie schlimm ist unser Code wirklich Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 26. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Ausgabe Ein erstes Beispiel ~ perlcritic 1.pl Code before strictures are enabled at line 3, column 1. See page 429 of PBP. ( Severity: 5) perlcritic wird mit Perl::Critic installiert Wir haben gegen eine Regel verstoÿen Es sagt uns, wo wir das in Perl Best Practices nden können Wie schlimm ist unser Code wirklich Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 27. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Perl::Critic Regeln Die Überprüfung basiert auf bestimmten Regeln - in diesem Fall TestingAndDebugging::RequireUseStrict. Diese Regeln werden mit Perl::Critic mitgeliefert ... oder werden von anderen Module geliefert (z.B. Perl::Critic::OTRS) ... oder man schreibt selbst welche Regeln die Bugs vermeiden .. Regeln kosmetischer Natur Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 28. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Perl::Critic Regeln Die Überprüfung basiert auf bestimmten Regeln - in diesem Fall TestingAndDebugging::RequireUseStrict. Diese Regeln werden mit Perl::Critic mitgeliefert ... oder werden von anderen Module geliefert (z.B. Perl::Critic::OTRS) ... oder man schreibt selbst welche Regeln die Bugs vermeiden .. Regeln kosmetischer Natur Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 29. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Perl::Critic Regeln Die Überprüfung basiert auf bestimmten Regeln - in diesem Fall TestingAndDebugging::RequireUseStrict. Diese Regeln werden mit Perl::Critic mitgeliefert ... oder werden von anderen Module geliefert (z.B. Perl::Critic::OTRS) ... oder man schreibt selbst welche Regeln die Bugs vermeiden .. Regeln kosmetischer Natur Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 30. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Nochmal... Regeln kosmetischer Natur?!? Gleiches Programm, aber... ~ perlcritic -severity=1 1.pl Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 31. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Ausgabe ... viel mehr Fehler Code is not tidy at line 1, column 1. See page 33 of PBP. (Severity: 1) RCS keywords $Id$ not found at line 1, column 1. See page 441 of PBP. (Severity: 2) RCS keywords $Revision$, $HeadURL$, $Date$ not found at line 1, column 1. See p age 441 of PBP. (Severity: 2) RCS keywords $Revision$, $Source$, $Date$ not found at line 1, column 1. See page 441 of PBP. (Severity: 2) No package-scoped $VERSION variable found at line 1, column 1. See page 404 o f PBP. (Severity: 2) Return value of agged function ignored - print at line 3, column 1. See pages 208,278 of PBP. (Severity: 1) Code before strictures are enabled at line 3, column 1. See page 429 of PBP. ( Severity: 5) Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 32. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Was ist passiert? Warum gibt es jetzt viel mehr Warnungen? Wir wollten, dass Perl::Critic viel pingeliger ist! -severity=1 Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 33. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Severities Severities gewichtet die Regeln 5 (gentle) Schwerwiegenste Regeln 4 (stern) 3 (harsh) 2 (cruel) 1 (brutal) Kosmetische Regeln Wer Regeln entwirft muss diese Wichtigkeit festlegen - kann aber noch angepasst werden. Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 34. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Ein weiteres Beispiel Hier ist alles ok, oder? #!/usr/bin/perl # $Id$ use strict; use warnings; our $VERSION = 0.01; my $has_flag = check_flag(); print No flag if !$has_flag; sub check_flag { return 1; } Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 35. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Der Fehler Nein, doch noch eine Meldung... ~perlcritic -severity=2 2.pl Postx control if used at line 13, column 17. See pages 93,94 of PBP. (Severity: 2) Ich bin aber ein Freund des nachgestellten if. Was nun? Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 36. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Der Fehler Nein, doch noch eine Meldung... ~perlcritic -severity=2 2.pl Postx control if used at line 13, column 17. See pages 93,94 of PBP. (Severity: 2) Ich bin aber ein Freund des nachgestellten if. Was nun? Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 37. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Regeln ausschlieÿen Man kann Regeln auch ausschlieÿen. Perl Best Practices liefert Anregungen, wie man programmieren kann, man muss aber nicht mit allem einverstanden sein. Es gibt mehrere Wege, um Regeln auszuschlieÿen: 1. Weg ~perlcritic -severity=2 -exclude=ProhibitPostxControls 2.pl 2.pl source OK Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 38. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Regeln ausschlieÿen Man kann auch im Code über bestimmte Kommentare die Regeln ausschalten 2. Weg use strict; ## no critic (RequireCamelCase) my $has_flag = check_flag(); ## use critic sub connect {} ## no critic (ProhibitBuiltinHomonyms) Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 39. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Konguration Eine weitere Möglichkeit ist, eine Kongurationsdatei zu erstellen .perlcriticrc INI-Format Suchreihenfolge: im aktuellen Verzeichnis im HOME-Verzeichnis Angabe in Umgebungsvariablen PERLCRITIC Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 40. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Konguration Ausschnitt einer Kongurationsdatei [ControlStructures::ProhibitPostfixControls] allow = if unless # My custom configuration severity = cruel # Same as severity = 2 Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 41. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Konguration Ausschnitt einer Kongurationsdatei [-NamingConventions::Capitalization] [-ValuesAndExpressions::ProhibitMagicNumbers] Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 42. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Konguration Ausschnitt einer Kongurationsdatei [Modules::RequireFilenameMatchesPackage] add_themes = larry [TestingAndDebugging::RequireTestLables] add_themes = larry curly moe Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 43. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Themes Unterschiedliche Projekte Unterschiedliche Kongurationen Themes sind die Lösung Themes sind Gruppierungen von Regeln. Für jedes Projekt wird ein Theme erstellt und entsprechend eingebunden Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 44. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Themes im Einsatz Themes im Einsatz ~perlcritic -theme=core 3.pl Code is not tidy at line 1, column 1. See page 33 of PBP. (Severity: 1) RCS keywords $Id$ not found at line 1, column 1. See page 441 of PBP. (Severity: 2) [...] Subroutine OTRSName is not all lower case or all upper case at line 6, column 1. See pages 45,46 of PBP. (Severity: 1) ~perlcritic -theme=maintenance 3.pl 3.pl source OK ~perlcritic -theme=otrs 3.pl Variable, subroutine, and package names have to be in CamelCase at line 7, colum n 1. (no explanation). (Severity: 5) Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 45. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Roundup Perl::Critic in der Zusammenfassung Statische Codeanalyse Basiert auf Regeln PPI Viele Einstellmöglichkeiten Severeties Themes Einzelne Regeln hinzufügen/abschalten Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 46. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Perl::Critic testen Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 47. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln In Projektarbeit einbinden... Gröÿter Nutzen wenn es direkt in die Projekte eingebunden wird Direkt in Unittests Test::Perl::Critic Als Hooks in Versionskontrollsysteme Regelmäÿig selbst laufen lassen - schon während der Entwicklung Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 48. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln ... in Unittests Einfach ein Testskript erstellen: 98_perl_critic.t use Test::Perl::Critic; my $rcfile = File::Spec-catfile( 't', 'perlcriticrc' ); Test::Perl::Critic-import( -profile = $rcfile ); all_critic_ok(); Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 49. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln ... in Unittests Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 50. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln ... in IDEs Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 51. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln ... in IDEs Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 52. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln ... in IDEs Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 53. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln ... in IDEs Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 54. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln ... in VCS SVN-Hook SET REPOS=%1 SET TXN=%2 perl D:Repositoryhooksperl_critic.pl %REPOS% %TXN% Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 55. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln ... in VCS Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 56. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln ... in VCS Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 57. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Weitere Pakete auf CPAN Häug reichen die Standardregeln nicht aus. CPAN liefert noch weitere Pakete mit Regeln: Perl::Critic::Bangs Perl::Critic::Lax Perl::Critic::OTRS Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 58. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln ... Perl::Critic::Bangs Für Modulentwickler sehr interessant ProhibitCommentedOutCode Wer hat sich noch nicht über gröÿere Mengen alten Codes geärgert? ProhibitFlagComments Überprüft auf Flags wie TODO, JFDI,... ProhibitNoPlan Tests sollten einen Plan haben... Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 59. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln ... Perl::Critic::Bangs ProhibitNumberedNames my $var2 ist nicht sehr aussagekräftig ProhibitVagueNames my $data ist nichtssagend Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 60. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln ... Perl::Critic::Lax An manchen Stellen ist Perl::Critic zu strikt. Hier helfen dann diese Regeln: ProhibitEmptyQuotes::ExceptAsFallback Erlaubt so etwas wie my $var = $test || ProhibitStringyEval::ExceptForRequire String-eval ist nicht gut, aber manchmal braucht man es doch RequireEndWithTrueConst Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 61. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln ... Perl::Critic::OTRS Wer OTRS-Entwicklung betreibt, kann sich diese Regeln anschauen: RequireCamelCase AllesMussInCamelCaseGeschriebenWerden (Subs, Variablen,...) RequireParensWithMethods Alle Nicht-Builtin-Methodenaufrufe müssen Klammern haben ... Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 62. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Eigene Regeln Aber manchmal reichen auch diese Erweiterungen auf dem CPAN nicht! Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 63. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Wie arbeitet Perl::Critic? Wie am Anfang erwähnt, arbeitet Perl::Critic mit PPI! Wer eigene Regeln entwickeln will, muss sich also mal mit PPI beschäftigen... Parser für Perl-Dokumente Parsen nach menschlichen Verständnis Reines Perl Relativ langsam Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 64. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Was ist eigentlich Perl? Acme::Buy use Acme::Buffy; BUffY bUFFY BUffY bUFFY bUfFy buFfY bUFfY bUFFY buffy buffY bUffy buFFY buffY BuFfy bUFfy bufFy BuFFY buffy bUffy buFfY buffY BuFfy buFfy bUFFy bUfFY buffY buFfY Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 65. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Was ist eigentlich Perl? Acme::DoubleHelix use Acme::DoubleHelix; CG T--A A---T A----T C----G T----A A---T Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 66. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Perl mit PPI parsen PPI im Einsatz #!/usr/bin/perl use strict; use warnings; use PPI; use PPI::Dumper; my $ppi = PPI::Document-new($0); my $dumper = PPI::Dumper-new($ppi); $dumper-print(); Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 67. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Baum eines Perl-Programms Baum eines Perl-Programms PPI::Document PPI::Token::Comment '#!/usr/bin/perln' PPI::Token::Whitespace 'n' PPI::Statement::Include PPI::Token::Word 'use' PPI::Token::Whitespace ' ' PPI::Token::Word 'strict' PPI::Token::Structure ';' PPI::Token::Whitespace 'n' [...] Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 68. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Eine neue Regel Wir brauchen eine Regel: Methodenaufrufe müssen immer runde Klammern haben. Beispielcode my $obj = CGI-new; print $obj-header(); print $obj-start_html( -css = 'hallo.css' ); my $hashref = { key = 'value' }; print $hashref-{key}; Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 69. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Mehr Infos... ungültig my $obj = CGI-new; PPI-Dump PPI::Token::Word 'CGI' PPI::Token::Operator '-' PPI::Token::Word 'new' PPI::Token::Structure '; Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 70. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Mehr Infos... gültig print $obj-header(); PPI-Dump PPI::Token::Symbol '$obj' PPI::Token::Operator '-' PPI::Token::Word 'header' PPI::Structure::List ( ... ) PPI::Token::Structure '; Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 71. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Mehr Infos... gültig print $obj-start_html( css = 'hallo.css' ); PPI-Dump PPI::Token::Symbol '$obj' PPI::Token::Operator '-' PPI::Token::Word 'start_html' PPI::Structure::List ( ... ) PPI::Token::Whitespace ' ' PPI::Statement::Expression [...] PPI::Token::Structure ';' Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 72. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Mehr Infos... uninteressant $hashref-{key}; .. $arrayref-[1]; Das sind einfach Dereferenzierungen... Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 73. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Mehr Infos... PPI-Dump PPI::Token::Symbol '$hashref' PPI::Token::Operator '-' PPI::Structure::Subscript { ... } PPI::Statement::Expression PPI::Token::Word 'key' PPI::Token::Structure ';' Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 74. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Was wir jetzt wissen Wir haben jetzt alle notwendigen Informationen: Wir müssen auf PPI::Token::Operator reagieren (-) Wenn danach ein PPI::Structure::Subscript kommt, interessiert es uns nicht Wenn danach ein PPI::Structure::List kommt, ist alles ok Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 75. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Was wir jetzt wissen Wir haben jetzt alle notwendigen Informationen: Wir müssen auf PPI::Token::Operator reagieren (-) Wenn danach ein PPI::Structure::Subscript kommt, interessiert es uns nicht Wenn danach ein PPI::Structure::List kommt, ist alles ok Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 76. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Was wir jetzt wissen Wir haben jetzt alle notwendigen Informationen: Wir müssen auf PPI::Token::Operator reagieren (-) Wenn danach ein PPI::Structure::Subscript kommt, interessiert es uns nicht Wenn danach ein PPI::Structure::List kommt, ist alles ok Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 77. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Perl::Critic Regel Die Regel package Perl::Critic::Policy::OTRS::RequireParensWithMethods; use strict; use warnings; use Perl::Critic::Utils qw{ :severities :classification :ppi }; use base 'Perl::Critic::Policy'; use Readonly; our $VERSION = '0.01'; Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 78. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Perl::Critic Regel Die Regel Readonly::Scalar my $DESC = q{Method invokation should use ()}; Readonly::Scalar my $EXPL = q{Use -MethodName() instead of -MethodName.}; Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 79. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Perl::Critic Regel Die Regel sub supported_parameters { return; } sub default_severity { return $SEVERITY_HIGHEST; } sub default_themes { return qw( otrs ) } sub applies_to { return 'PPI::Token::Operator' } Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 80. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Perl::Critic Regel Die Regel sub violates { my ( $self, $elem ) = @_; return if $elem ne '-'; my $method = $elem-snext_sibling; return if ref $method eq 'PPI::Structure::Subscript'; Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 81. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Perl::Critic Regel Die Regel my $list = $method-snext_sibling; return if ref $list eq 'PPI::Structure::List'; return $self-violation( $DESC, $EXPL, $elem ); } 1; Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 82. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Perl::Critic Regel Zusammenfassung eigene Regeln: erbt von Perl::Critic::Policy $DESC, $EXPL Methoden: default_severity, default_themes, applies_to violates Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 83. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Die eigene Regel testen Die eigene Regel kann einfach getestet werden: Neues Object von Perl::Critic erzeugen Neues Object von der Regel erzeugen Test laufen lassen Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 84. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Die eigene Regel testen Test der eigenen Regel use Test::More; use Perl::Critic; use Perl::Critic::Policy::OTRS::RequireParensWithMethods; Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 85. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Die eigene Regel testen Test der eigenen Regel my @valid = ( 'CGI-new();', '$obj-method();', ); my @invalid = ( 'CGI-new;', '$obj-method;', ); plan tests = @valid + @invalid; Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 86. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Die eigene Regel testen Test der eigenen Regel my $c = Perl::Critic-new( -profile = 'NONE' ); my $policy = Perl::Critic::Policy::OTRS::RequireParensWithMethods-new; $c-add_policy( -policy = $policy ); Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 87. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Die eigene Regel testen Test der eigenen Regel ok( (scalar $c-critique( $_ )) == 0, 'valid' ) for @valid; ok( (scalar $c-critique( $_ )) 0, 'invalid' ) for @invalid; Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 88. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Eigene Perl::Critic Regeln Wie zu sehen war, ist Perl::Critic ein nützliches Tool, um Programmierregeln durchzusetzen. Eigene Regeln sind einfach umzusetzen. Es gibt keine Entschuldigung mehr, unleserlichen Code zu schreiben ;-) Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein
  • 89. Der Vortragende Perl::Critic im Einsatz Perl-Programmierung In Projektarbeit einbinden... Perl::Critic Perl::Critic::* Eigene Regeln Vielen Dank! Vielen Dank! Renée Bäcker Perl::Critic - Dein Nachfolger könnte ein Psychopath sein