From: Moritz Bunkus Date: Wed, 31 Oct 2012 14:28:00 +0000 (+0100) Subject: Doku: Test-Doku aus t/README in die Haupt-Doku überführt & erweitert X-Git-Tag: release-3.0.0beta1~66 X-Git-Url: http://wagnertech.de/git?a=commitdiff_plain;h=d1564e8aa44f920d0c9ddf08141417f0deb89ba6;p=kivitendo-erp.git Doku: Test-Doku aus t/README in die Haupt-Doku überführt & erweitert --- diff --git a/doc/dokumentation.xml b/doc/dokumentation.xml index 6f4041a8c..25b52d39e 100644 --- a/doc/dokumentation.xml +++ b/doc/dokumentation.xml @@ -5429,6 +5429,148 @@ filenames + + Die kivitendo-Test-Suite + + + Einführung + + kivitendo enthält eine Suite für automatisierte Tests. Sie basiert auf dem Standard-Perl-Modul Test::More. + + Die grundlegenden Fakten sind: + + + Alle Tests liegen im Unterverzeichnis t/. + + Ein Script (bzw. ein Test) in f/ enthält einen oder mehrere Testfälle. + + Alle Dateinamen von Tests enden auf .t. Es sind selbstständig ausführbare Perl-Scripte. + + Die Test-Suite besteht aus der Gesamtheit aller Tests, sprich aller Scripte in f/, deren + Dateiname auf .t endet. + + + + + Voraussetzungen + + Für die Ausführung werden neben den für kivitendo eh schon benötigten Module noch weitere Perl-Module benötigt. Diese sind: + + + Test::Deep (Debian-Paketname: libtest-deep-perl; Fedora Core: + perl-Test-Deep; openSuSE: perl-Test-Deep) + + + + + + Existierende Tests ausführen + + + Es gibt mehrere Möglichkeiten zum Ausführen der Tests: entweder, man lässt alle Tests auf einmal ausführen, oder man führt + gezielt einzelne Scripte aus. Für beide Fälle gibt es das Helferscript t/test.sh. + + Will man die komplette Test-Suite ausführen, so muss man einfach nur t/test.sh ohne weitere Parameter aus + dem kivitendo-Basisverzeichnis heraus ausführen. + + Um einzelne Test-Scripte auszuführen, übergibt man deren Namen an t/test.sh. Beispielsweise: + + t/test.sh t/form/format_amount.t t/background_job/known_jobs.t + + + + + + Bedeutung der verschiedenen Test-Scripte + + + Die Test-Suite umfasst Tests sowohl für Funktionen als auch für Programmierstil. Einige besonders zu erwähnende, weil auch + während der Entwicklung nützliche Tests sind: + + + t/001compile.t -- compiliert alle Quelldateien und bricht bei Fehlern sofort ab + t/002goodperl.t -- überprüft alle Perl-Dateien auf Anwesenheit von 'use strict'-Anweisungen + t/003safesys.t -- überprüft Aufrufe von system() und exec() auf Gültigkeit + t/005no_tabs.t -- überprüft, ob Dateien Tab-Zeichen enthalten + t/006spelling.t -- sucht nach häufigen Rechtschreibfehlern + t/011pod.t -- überprüft die Syntax von Dokumentation im POD-Format auf Gültigkeit + + + Weitere Test-Scripte überprüfen primär die Funktionsweise einzelner Funktionen und Module. + + + + + Neue Test-Scripte erstellen + + + Es wird sehr gern gesehen, wenn neue Funktionalität auch gleich mit einem Test-Script abgesichert wird. Auch bestehende + Funktion darf und soll ausdrücklich nachträglich mit Test-Scripten abgesichert werden. + + + + Ideen für neue Test-Scripte, die keine konkreten Funktionen testen + + + Ideen, die abgesehen von Funktions noch nicht umgesetzt wurden: + + + Überprüfung auf fehlende symbolische Links + Suche nach Nicht-ASCII-Zeichen in Perl-Code-Dateien (mit gewissen Einschränkungen wie das Erlauben von deutschen Umlauten) + Test auf DOS-Zeilenenden (\r\n anstelle von nur \n) + Überprüfung auf Leerzeichen am Ende von Zeilen + Test, ob alle zu übersetzenden Strings in locale/de/all vorhanden sind + Test, ob alle Webseiten-Templates in templates/webpages mit vom Perl-Modul Template compiliert werden können + + + + + + Konvention für Verzeichnis- und Dateinamen + + + Es gibt momentan eine wenige Richtlinien, wie Test-Scripte zu benennen sind. Bitte die folgenden Punkte als Richtlinie betrachten und ihnen soweit es geht folgen: + + + Die Dateiendung muss .t lauten. + + Namen sind englisch, komplett klein geschrieben und einzelne Wörter mit Unterstrichten getrennt (beispielsweise + bad_function_params.t). + + Unterverzeichnisse sollten grob nach dem Themenbereich benannt sind, mit dem sich die Scripte darin befassen + (beispielsweise background_jobs für Tests rund um Hintergrund-Jobs). + + Test-Scripte sollten einen überschaubaren Bereich von Funktionalität testen, der logisch zusammenhängend ist + (z.B. nur Tests für eine einzelne Funktion in einem Modul). Lieber mehrere Test-Scripte schreiben. + + + + + + Minimales Skelett für eigene Scripte + + + Der folgenden Programmcode enthält das kleinstmögliche Testscript und kann als Ausgangspunkt für eigene Tests verwendet werden: + + use Test::More tests => 0; + +use lib 't'; + +use Support::TestSetup; + +Support::TestSetup::login(); + + Wird eine vollständig initialisierte kivitendo-Umgebung benötigt (Stichwort: alle globalen Variablen wie + $::auth, $::form oder $::lxdebug), so muss in der Konfigurationsdatei + config/kivitendo.conf im Abschnitt testing.login ein gültiger Login-Name eingetragen + sein. Dieser wird für die Datenbankverbindung benötigt. + + Wir keine vollständig initialisierte Umgebung benötigt, so kann die letzte Zeile Support::TestSetup::login(); + weggelassen werden, was die Ausführungszeit des Scripts leicht verringert. + + + + Stil-Richtlinien diff --git a/doc/html/ch04s04.html b/doc/html/ch04s04.html index 84d9627fa..bae0cca0f 100644 --- a/doc/html/ch04s04.html +++ b/doc/html/ch04s04.html @@ -1,6 +1,6 @@ - 4.4. Translations and languages

4.4. Translations and languages

4.4.1. Introduction

[Anmerkung]Anmerkung

Dieser Abschnitt ist in Englisch geschrieben, um + 4.4. Translations and languages

4.4. Translations and languages

4.4.1. Introduction

[Anmerkung]Anmerkung

Dieser Abschnitt ist in Englisch geschrieben, um internationalen Übersetzern die Arbeit zu erleichtern.

This section describes how localization packages in kivitendo are built. Currently the only language fully supported is German, and since most of the internal messages are held in English the English @@ -78,4 +78,4 @@ filenames

The last of which is very machine dependant. Remember that case you made a typo, so that you don't have to translate everything again. If a tranlsation is missing, the lost file is checked first. If you maintain a language package, you might - want to keep this safe somewhere.

\ No newline at end of file + want to keep this safe somewhere.

\ No newline at end of file diff --git a/doc/html/ch04s05.html b/doc/html/ch04s05.html index 9d3743f07..87fee7702 100644 --- a/doc/html/ch04s05.html +++ b/doc/html/ch04s05.html @@ -1,120 +1,41 @@ - 4.5. Stil-Richtlinien

4.5. Stil-Richtlinien

Die folgenden Regeln haben das Ziel, den Code möglichst gut les- - und wartbar zu machen. Dazu gehört zum Einen, dass der Code einheitlich - eingerückt ist, aber auch, dass Mehrdeutigkeit so weit es geht vermieden - wird (Stichworte "Klammern" oder "Hash-Keys").

Diese Regeln sind keine Schikane sondern erleichtern allen das - Leben!

Jeder, der einen Patch schickt, sollte seinen Code vorher - überprüfen. Einige der Regeln lassen sich automatisch überprüfen, andere - nicht.

  1. Es werden keine echten Tabs sondern Leerzeichen - verwendet.

  2. Die Einrückung beträgt zwei Leerzeichen. Beispiel:

    foreach my $row (@data) {
    -  if ($flag) {
    -    # do something with $row
    -  }
    +   4.5. Die kivitendo-Test-Suite

    4.5. Die kivitendo-Test-Suite

    4.5.1. Einführung

    kivitendo enthält eine Suite für automatisierte Tests. Sie basiert auf dem Standard-Perl-Modul Test::More.

    Die grundlegenden Fakten sind:

    • Alle Tests liegen im Unterverzeichnis t/.

    • Ein Script (bzw. ein Test) in f/ enthält einen oder mehrere Testfälle.

    • Alle Dateinamen von Tests enden auf .t. Es sind selbstständig ausführbare Perl-Scripte.

    • Die Test-Suite besteht aus der Gesamtheit aller Tests, sprich aller Scripte in f/, deren + Dateiname auf .t endet.

    4.5.2. Voraussetzungen

    Für die Ausführung werden neben den für kivitendo eh schon benötigten Module noch weitere Perl-Module benötigt. Diese sind:

    • + Test::Deep (Debian-Paketname: libtest-deep-perl; Fedora Core: + perl-Test-Deep; openSuSE: perl-Test-Deep)

    4.5.3. + Existierende Tests ausführen +

    Es gibt mehrere Möglichkeiten zum Ausführen der Tests: entweder, man lässt alle Tests auf einmal ausführen, oder man führt + gezielt einzelne Scripte aus. Für beide Fälle gibt es das Helferscript t/test.sh.

    Will man die komplette Test-Suite ausführen, so muss man einfach nur t/test.sh ohne weitere Parameter aus + dem kivitendo-Basisverzeichnis heraus ausführen.

    Um einzelne Test-Scripte auszuführen, übergibt man deren Namen an t/test.sh. Beispielsweise:

    t/test.sh t/form/format_amount.t t/background_job/known_jobs.t

    4.5.4. + Bedeutung der verschiedenen Test-Scripte +

    Die Test-Suite umfasst Tests sowohl für Funktionen als auch für Programmierstil. Einige besonders zu erwähnende, weil auch + während der Entwicklung nützliche Tests sind:

    • + t/001compile.t -- compiliert alle Quelldateien und bricht bei Fehlern sofort ab

    • + t/002goodperl.t -- überprüft alle Perl-Dateien auf Anwesenheit von 'use strict'-Anweisungen

    • + t/003safesys.t -- überprüft Aufrufe von system() und exec() auf Gültigkeit

    • + t/005no_tabs.t -- überprüft, ob Dateien Tab-Zeichen enthalten

    • + t/006spelling.t -- sucht nach häufigen Rechtschreibfehlern

    • + t/011pod.t -- überprüft die Syntax von Dokumentation im POD-Format auf Gültigkeit

    Weitere Test-Scripte überprüfen primär die Funktionsweise einzelner Funktionen und Module.

    4.5.5. + Neue Test-Scripte erstellen +

    Es wird sehr gern gesehen, wenn neue Funktionalität auch gleich mit einem Test-Script abgesichert wird. Auch bestehende + Funktion darf und soll ausdrücklich nachträglich mit Test-Scripten abgesichert werden.

    4.5.5.1. + Ideen für neue Test-Scripte, die keine konkreten Funktionen testen +

    Ideen, die abgesehen von Funktions noch nicht umgesetzt wurden:

    • Überprüfung auf fehlende symbolische Links

    • Suche nach Nicht-ASCII-Zeichen in Perl-Code-Dateien (mit gewissen Einschränkungen wie das Erlauben von deutschen Umlauten)

    • Test auf DOS-Zeilenenden (\r\n anstelle von nur \n)

    • Überprüfung auf Leerzeichen am Ende von Zeilen

    • Test, ob alle zu übersetzenden Strings in locale/de/all vorhanden sind

    • Test, ob alle Webseiten-Templates in templates/webpages mit vom Perl-Modul Template compiliert werden können

    4.5.5.2. + Konvention für Verzeichnis- und Dateinamen +

    Es gibt momentan eine wenige Richtlinien, wie Test-Scripte zu benennen sind. Bitte die folgenden Punkte als Richtlinie betrachten und ihnen soweit es geht folgen:

    • Die Dateiendung muss .t lauten.

    • Namen sind englisch, komplett klein geschrieben und einzelne Wörter mit Unterstrichten getrennt (beispielsweise + bad_function_params.t).

    • Unterverzeichnisse sollten grob nach dem Themenbereich benannt sind, mit dem sich die Scripte darin befassen + (beispielsweise background_jobs für Tests rund um Hintergrund-Jobs).

    • Test-Scripte sollten einen überschaubaren Bereich von Funktionalität testen, der logisch zusammenhängend ist + (z.B. nur Tests für eine einzelne Funktion in einem Modul). Lieber mehrere Test-Scripte schreiben.

    4.5.5.3. + Minimales Skelett für eigene Scripte +

    Der folgenden Programmcode enthält das kleinstmögliche Testscript und kann als Ausgangspunkt für eigene Tests verwendet werden:

    use Test::More tests => 0;
     
    -  if ($use_modules) {
    -    $row->{modules} = MODULE->retrieve(
    -      id   => $row->{id},
    -      date => $use_now ? localtime() : $row->{time},
    -    );
    -  }
    +use lib 't';
     
    -  $report->add($row);
    -}
  3. Öffnende geschweifte Klammern befinden sich auf der gleichen - Zeile wie der letzte Befehl. Beispiele:

    sub debug {
    -  ...
    -}

    oder

    if ($form->{item_rows} > 0) {
    -  ...
    -}
  4. Schließende geschweifte Klammern sind so weit eingerückt wie - der Befehl / die öffnende schließende Klammer, die den Block - gestartet hat, und nicht auf der Ebene des Inhalts. Die gleichen - Beispiele wie bei 3. gelten.

  5. Die Wörter "else", - "elsif", "while" befinden - sich auf der gleichen Zeile wie schließende geschweifte Klammern. - Beispiele:

    if ($form->{sum} > 1000) {
    -  ...
    -} elsif ($form->{sum} > 0) {
    -  ...
    -} else {
    -  ...
    -}
    +use Support::TestSetup;
     
    -do {
    -  ...
    -} until ($a > 0);
  6. Parameter von Funktionsaufrufen müssen mit runden Klammern - versehen werden. Davon nicht betroffen sind interne Perl-Funktionen, - und grep-ähnliche Operatoren. Beispiel:

    $main::lxdebug->message("Could not find file.");
    -%options = map { $_ => 1 } grep { !/^#/ } @config_file;
  7. Verschiedene Klammern, Ihre Ausdrücke und Leerzeichen:

    Generell gilt: Hashkeys und Arrayindices sollten nicht durch - Leerzeichen abgesetzt werden. Logische Klammerungen ebensowenig, - Blöcke schon. Beispiel:

    if (($form->{debug} == 1) && ($form->{sum} - 100 < 0)) {
    -  ...
    -}
    -
    -$array[$i + 1]             = 4;
    -$form->{sum}              += $form->{"row_$i"};
    -$form->{ $form->{index} } += 1;
    -
    -map { $form->{sum} += $form->{"row_$_"} } 1..$rowcount;
  8. Mehrzeilige Befehle

    1. Werden die Parameter eines Funktionsaufrufes auf mehrere - Zeilen aufgeteilt, so sollten diese bis zu der Spalte eingerückt - werden, in der die ersten Funktionsparameter in der ersten Zeile - stehen. Beispiel:

      $sth = $dbh->prepare("SELECT * FROM some_table WHERE col = ?",
      -                    $form->{some_col_value});
    2. Ein Spezialfall ist der ternäre Oprator "?:", der am - besten in einer übersichtlichen Tabellenstruktur organisiert - wird. Beispiel:

      my $rowcount = $form->{"row_$i"} ? $i
      -             : $form->{oldcount} ? $form->{oldcount} + 1
      -             :                     $form->{rowcount} - $form->{rowbase};
  9. Kommentare

    1. Kommentare, die alleine in einer Zeile stehen, sollten - soweit wie der Code eingerückt sein.

    2. Seitliche hängende Kommentare sollten einheitlich - formatiert werden.

    3. Sämtliche Kommentare und Sonstiges im Quellcode ist bitte - auf Englisch zu verfassen. So wie ich keine Lust habe, - französischen Quelltext zu lesen, sollte auch der kivitendo - Quelltext für nicht-Deutschsprachige lesbar sein. - Beispiel:

      my $found = 0;
      -while (1) {
      -  last if $found;
      -
      -  # complicated check
      -  $found = 1 if //
      -}
      -
      -$i  = 0        # initialize $i
      -$n  = $i;      # save $i
      -$i *= $const;  # do something crazy
      -$i  = $n;      # recover $i
  10. Hashkeys sollten nur in Anführungszeichen stehen, wenn die - Interpolation gewünscht ist. Beispiel:

    $form->{sum}      = 0;
    -$form->{"row_$i"} = $form->{"row_$i"} - 5;
    -$some_hash{42}    = 54;
  11. Die maximale Zeilenlänge ist nicht beschränkt. Zeilenlängen - unterhalb von 79 Zeichen helfen unter bestimmten Bedingungen, aber - wenn die Lesbarkeit unter kurzen Zeilen leidet (wie zum Biespiel in - grossen Tabellen), dann ist Lesbarkeit vorzuziehen.

    Als Beispiel sei die Funktion - print_options aus - bin/mozilla/io.pl angeführt.

  12. Trailing Whitespace, d.h. Leerzeichen am Ende von Zeilen sind - unerwünscht. Sie führen zu unnötigen Whitespaceänderungen, die diffs - verfälschen.

    Emacs und vim haben beide recht einfache Methoden zur - Entfernung von trailing whitespace. Emacs kennt das Kommande - nuke-trailing-whitespace, vim macht das gleiche - manuell über :%s/\s\+$//e Mit :au - BufWritePre * :%s/\s\+$//e wird das an Speichern - gebunden.

  13. Es wird kein perltidy verwendet.

    In der Vergangenheit wurde versucht, - perltidy zu verwenden, um einen einheitlichen - Stil zu erlangen. Es hat sich aber gezeigt, dass - perltidys sehr eigenwilliges Verhalten, was - Zeilenumbrüche angeht, oftmals gut formatierten Code zerstört. Für - den Interessierten sind hier die - perltidy-Optionen, die grob den beschriebenen - Richtlinien entsprechen:

    -syn -i=2 -nt -pt=2 -sbt=2 -ci=2 -ibc -hsc -noll -nsts -nsfs -asc -dsm
    --aws -bbc -bbs -bbb -mbl=1 -nsob -ce -nbl -nsbl -cti=0 -bbt=0 -bar -l=79
    --lp -vt=1 -vtc=1
  14. - STDERR ist tabu. Unkonditionale - Debugmeldungen auch.

    kivitendo bietet mit dem Modul LXDebug - einen brauchbaren Trace-/Debug-Mechanismus. Es gibt also keinen - Grund, nach STDERR zu schreiben.

    Die LXDebug-Methode - "message" nimmt als ersten Paramter außerdem - eine Flagmaske, für die die Meldung angezeigt wird, wobei "0" immer - angezeigt wird. Solche Meldungen sollten nicht eingecheckt werden - und werden in den meisten Fällen auch vom Repository - zurückgewiesen.

  15. Alle neuen Module müssen use strict verwenden.

    - $form, $auth, - $locale, $lxdebug und - %myconfig werden derzeit aus dem main package - importiert (siehe Globale Variablen. Alle anderen - Konstrukte sollten lexikalisch lokal gehalten werden.

\ No newline at end of file +Support::TestSetup::login();

Wird eine vollständig initialisierte kivitendo-Umgebung benötigt (Stichwort: alle globalen Variablen wie + $::auth, $::form oder $::lxdebug), so muss in der Konfigurationsdatei + config/kivitendo.conf im Abschnitt testing.login ein gültiger Login-Name eingetragen + sein. Dieser wird für die Datenbankverbindung benötigt.

Wir keine vollständig initialisierte Umgebung benötigt, so kann die letzte Zeile Support::TestSetup::login(); + weggelassen werden, was die Ausführungszeit des Scripts leicht verringert.

\ No newline at end of file diff --git a/doc/html/ch04s06.html b/doc/html/ch04s06.html index e99f3e0d1..a5580b2ea 100644 --- a/doc/html/ch04s06.html +++ b/doc/html/ch04s06.html @@ -1,38 +1,120 @@ - 4.6. Dokumentation erstellen

4.6. Dokumentation erstellen

4.6.1. Einführung

Diese Dokumentation ist in DocBook™ - XML geschrieben. Zum Bearbeiten reicht grundsätzlich ein Text-Editor. - Mehr Komfort bekommt man, wenn man einen dedizierten XML-fähigen - Editor nutzt, der spezielle Unterstützung für - DocBook™ mitbringt. Wir empfehlen dafür den - XMLmind XML - Editor, der bei nicht kommerzieller Nutzung kostenlos - ist.

4.6.2. Benötigte Software

Bei DocBook™ ist Prinzip, dass - ausschließlich die XML-Quelldatei bearbeitet wird. Aus dieser werden - dann mit entsprechenden Stylesheets andere Formate wie PDF oder HTML - erzeugt. Bei kivitendo übernimmt diese Aufgabe das Shell-Script - scripts/build_doc.sh.

Das Script benötigt zur Konvertierung verschiedene - Softwarekomponenten, die im normalen kivitendo-Betrieb nicht benötigt - werden:

  • - Java - in einer halbwegs aktuellen Version

  • Das Java-Build-System Apache Ant -

  • Das Dokumentations-System Dobudish für - DocBook™ 4.5, eine Zusammenstellung - diverser Stylesheets und Grafiken zur Konvertierung von - DocBook™ XML in andere Formate. Das - Paket, das benötigt wird, ist zum Zeitpunkt der - Dokumentationserstellung - dobudish-nojre-1.1.4.zip, aus auf code.google.com - bereitsteht.

Apache Ant sowie ein dazu passendes Java Runtime Environment - sind auf allen gängigen Plattformen verfügbar. Beispiel für - Debian/Ubuntu:

apt-get install ant openjdk-7-jre

Nach dem Download von Dobudish muss Dobudish im Unterverzeichnis - doc/build entpackt werden. Beispiel unter der - Annahme, das Dobudish™ in - $HOME/Downloads heruntergeladen wurde:

cd doc/build
-unzip $HOME/Downloads/dobudish-nojre-1.1.4.zip

4.6.3. PDFs und HTML-Seiten erstellen

Die eigentliche Konvertierung erfolgt nach Installation der - benötigten Software mit einem einfachen Aufruf direkt aus dem - kivitendo-Installationsverzeichnis heraus:

./scripts/build_doc.sh

4.6.4. Einchecken in das Git-Repository

Sowohl die XML-Datei als auch die erzeugten PDF- und - HTML-Dateien sind Bestandteil des Git-Repositories. Daraus folgt, dass - nach Änderungen am XML die PDF- und HTML-Dokumente ebenfalls gebaut - und alles zusammen in einem Commit eingecheckt werden sollten.

Die "dobudish"-Verzeichnisse bzw. - symbolischen Links gehören hingegen nicht in das Repository.

\ No newline at end of file + 4.6. Stil-Richtlinien

4.6. Stil-Richtlinien

Die folgenden Regeln haben das Ziel, den Code möglichst gut les- + und wartbar zu machen. Dazu gehört zum Einen, dass der Code einheitlich + eingerückt ist, aber auch, dass Mehrdeutigkeit so weit es geht vermieden + wird (Stichworte "Klammern" oder "Hash-Keys").

Diese Regeln sind keine Schikane sondern erleichtern allen das + Leben!

Jeder, der einen Patch schickt, sollte seinen Code vorher + überprüfen. Einige der Regeln lassen sich automatisch überprüfen, andere + nicht.

  1. Es werden keine echten Tabs sondern Leerzeichen + verwendet.

  2. Die Einrückung beträgt zwei Leerzeichen. Beispiel:

    foreach my $row (@data) {
    +  if ($flag) {
    +    # do something with $row
    +  }
    +
    +  if ($use_modules) {
    +    $row->{modules} = MODULE->retrieve(
    +      id   => $row->{id},
    +      date => $use_now ? localtime() : $row->{time},
    +    );
    +  }
    +
    +  $report->add($row);
    +}
  3. Öffnende geschweifte Klammern befinden sich auf der gleichen + Zeile wie der letzte Befehl. Beispiele:

    sub debug {
    +  ...
    +}

    oder

    if ($form->{item_rows} > 0) {
    +  ...
    +}
  4. Schließende geschweifte Klammern sind so weit eingerückt wie + der Befehl / die öffnende schließende Klammer, die den Block + gestartet hat, und nicht auf der Ebene des Inhalts. Die gleichen + Beispiele wie bei 3. gelten.

  5. Die Wörter "else", + "elsif", "while" befinden + sich auf der gleichen Zeile wie schließende geschweifte Klammern. + Beispiele:

    if ($form->{sum} > 1000) {
    +  ...
    +} elsif ($form->{sum} > 0) {
    +  ...
    +} else {
    +  ...
    +}
    +
    +do {
    +  ...
    +} until ($a > 0);
  6. Parameter von Funktionsaufrufen müssen mit runden Klammern + versehen werden. Davon nicht betroffen sind interne Perl-Funktionen, + und grep-ähnliche Operatoren. Beispiel:

    $main::lxdebug->message("Could not find file.");
    +%options = map { $_ => 1 } grep { !/^#/ } @config_file;
  7. Verschiedene Klammern, Ihre Ausdrücke und Leerzeichen:

    Generell gilt: Hashkeys und Arrayindices sollten nicht durch + Leerzeichen abgesetzt werden. Logische Klammerungen ebensowenig, + Blöcke schon. Beispiel:

    if (($form->{debug} == 1) && ($form->{sum} - 100 < 0)) {
    +  ...
    +}
    +
    +$array[$i + 1]             = 4;
    +$form->{sum}              += $form->{"row_$i"};
    +$form->{ $form->{index} } += 1;
    +
    +map { $form->{sum} += $form->{"row_$_"} } 1..$rowcount;
  8. Mehrzeilige Befehle

    1. Werden die Parameter eines Funktionsaufrufes auf mehrere + Zeilen aufgeteilt, so sollten diese bis zu der Spalte eingerückt + werden, in der die ersten Funktionsparameter in der ersten Zeile + stehen. Beispiel:

      $sth = $dbh->prepare("SELECT * FROM some_table WHERE col = ?",
      +                    $form->{some_col_value});
    2. Ein Spezialfall ist der ternäre Oprator "?:", der am + besten in einer übersichtlichen Tabellenstruktur organisiert + wird. Beispiel:

      my $rowcount = $form->{"row_$i"} ? $i
      +             : $form->{oldcount} ? $form->{oldcount} + 1
      +             :                     $form->{rowcount} - $form->{rowbase};
  9. Kommentare

    1. Kommentare, die alleine in einer Zeile stehen, sollten + soweit wie der Code eingerückt sein.

    2. Seitliche hängende Kommentare sollten einheitlich + formatiert werden.

    3. Sämtliche Kommentare und Sonstiges im Quellcode ist bitte + auf Englisch zu verfassen. So wie ich keine Lust habe, + französischen Quelltext zu lesen, sollte auch der kivitendo + Quelltext für nicht-Deutschsprachige lesbar sein. + Beispiel:

      my $found = 0;
      +while (1) {
      +  last if $found;
      +
      +  # complicated check
      +  $found = 1 if //
      +}
      +
      +$i  = 0        # initialize $i
      +$n  = $i;      # save $i
      +$i *= $const;  # do something crazy
      +$i  = $n;      # recover $i
  10. Hashkeys sollten nur in Anführungszeichen stehen, wenn die + Interpolation gewünscht ist. Beispiel:

    $form->{sum}      = 0;
    +$form->{"row_$i"} = $form->{"row_$i"} - 5;
    +$some_hash{42}    = 54;
  11. Die maximale Zeilenlänge ist nicht beschränkt. Zeilenlängen + unterhalb von 79 Zeichen helfen unter bestimmten Bedingungen, aber + wenn die Lesbarkeit unter kurzen Zeilen leidet (wie zum Biespiel in + grossen Tabellen), dann ist Lesbarkeit vorzuziehen.

    Als Beispiel sei die Funktion + print_options aus + bin/mozilla/io.pl angeführt.

  12. Trailing Whitespace, d.h. Leerzeichen am Ende von Zeilen sind + unerwünscht. Sie führen zu unnötigen Whitespaceänderungen, die diffs + verfälschen.

    Emacs und vim haben beide recht einfache Methoden zur + Entfernung von trailing whitespace. Emacs kennt das Kommande + nuke-trailing-whitespace, vim macht das gleiche + manuell über :%s/\s\+$//e Mit :au + BufWritePre * :%s/\s\+$//e wird das an Speichern + gebunden.

  13. Es wird kein perltidy verwendet.

    In der Vergangenheit wurde versucht, + perltidy zu verwenden, um einen einheitlichen + Stil zu erlangen. Es hat sich aber gezeigt, dass + perltidys sehr eigenwilliges Verhalten, was + Zeilenumbrüche angeht, oftmals gut formatierten Code zerstört. Für + den Interessierten sind hier die + perltidy-Optionen, die grob den beschriebenen + Richtlinien entsprechen:

    -syn -i=2 -nt -pt=2 -sbt=2 -ci=2 -ibc -hsc -noll -nsts -nsfs -asc -dsm
    +-aws -bbc -bbs -bbb -mbl=1 -nsob -ce -nbl -nsbl -cti=0 -bbt=0 -bar -l=79
    +-lp -vt=1 -vtc=1
  14. + STDERR ist tabu. Unkonditionale + Debugmeldungen auch.

    kivitendo bietet mit dem Modul LXDebug + einen brauchbaren Trace-/Debug-Mechanismus. Es gibt also keinen + Grund, nach STDERR zu schreiben.

    Die LXDebug-Methode + "message" nimmt als ersten Paramter außerdem + eine Flagmaske, für die die Meldung angezeigt wird, wobei "0" immer + angezeigt wird. Solche Meldungen sollten nicht eingecheckt werden + und werden in den meisten Fällen auch vom Repository + zurückgewiesen.

  15. Alle neuen Module müssen use strict verwenden.

    + $form, $auth, + $locale, $lxdebug und + %myconfig werden derzeit aus dem main package + importiert (siehe Globale Variablen. Alle anderen + Konstrukte sollten lexikalisch lokal gehalten werden.

\ No newline at end of file diff --git a/doc/html/ch04s07.html b/doc/html/ch04s07.html new file mode 100644 index 000000000..0727e304c --- /dev/null +++ b/doc/html/ch04s07.html @@ -0,0 +1,38 @@ + + + 4.7. Dokumentation erstellen

4.7. Dokumentation erstellen

4.7.1. Einführung

Diese Dokumentation ist in DocBook™ + XML geschrieben. Zum Bearbeiten reicht grundsätzlich ein Text-Editor. + Mehr Komfort bekommt man, wenn man einen dedizierten XML-fähigen + Editor nutzt, der spezielle Unterstützung für + DocBook™ mitbringt. Wir empfehlen dafür den + XMLmind XML + Editor, der bei nicht kommerzieller Nutzung kostenlos + ist.

4.7.2. Benötigte Software

Bei DocBook™ ist Prinzip, dass + ausschließlich die XML-Quelldatei bearbeitet wird. Aus dieser werden + dann mit entsprechenden Stylesheets andere Formate wie PDF oder HTML + erzeugt. Bei kivitendo übernimmt diese Aufgabe das Shell-Script + scripts/build_doc.sh.

Das Script benötigt zur Konvertierung verschiedene + Softwarekomponenten, die im normalen kivitendo-Betrieb nicht benötigt + werden:

  • + Java + in einer halbwegs aktuellen Version

  • Das Java-Build-System Apache Ant +

  • Das Dokumentations-System Dobudish für + DocBook™ 4.5, eine Zusammenstellung + diverser Stylesheets und Grafiken zur Konvertierung von + DocBook™ XML in andere Formate. Das + Paket, das benötigt wird, ist zum Zeitpunkt der + Dokumentationserstellung + dobudish-nojre-1.1.4.zip, aus auf code.google.com + bereitsteht.

Apache Ant sowie ein dazu passendes Java Runtime Environment + sind auf allen gängigen Plattformen verfügbar. Beispiel für + Debian/Ubuntu:

apt-get install ant openjdk-7-jre

Nach dem Download von Dobudish muss Dobudish im Unterverzeichnis + doc/build entpackt werden. Beispiel unter der + Annahme, das Dobudish™ in + $HOME/Downloads heruntergeladen wurde:

cd doc/build
+unzip $HOME/Downloads/dobudish-nojre-1.1.4.zip

4.7.3. PDFs und HTML-Seiten erstellen

Die eigentliche Konvertierung erfolgt nach Installation der + benötigten Software mit einem einfachen Aufruf direkt aus dem + kivitendo-Installationsverzeichnis heraus:

./scripts/build_doc.sh

4.7.4. Einchecken in das Git-Repository

Sowohl die XML-Datei als auch die erzeugten PDF- und + HTML-Dateien sind Bestandteil des Git-Repositories. Daraus folgt, dass + nach Änderungen am XML die PDF- und HTML-Dokumente ebenfalls gebaut + und alles zusammen in einem Commit eingecheckt werden sollten.

Die "dobudish"-Verzeichnisse bzw. + symbolischen Links gehören hingegen nicht in das Repository.

\ No newline at end of file diff --git a/doc/html/index.html b/doc/html/index.html index 83d2b300c..b30a65dfd 100644 --- a/doc/html/index.html +++ b/doc/html/index.html @@ -3,4 +3,10 @@ kivitendo: Installation, Konfiguration, Entwicklung

kivitendo: Installation, Konfiguration, Entwicklung


Inhaltsverzeichnis

1. Aktuelle Hinweise
2. Installation und Grundkonfiguration
2.1. Benötigte Software und Pakete
2.1.1. Betriebssystem
2.1.2. Pakete
2.2. Manuelle Installation des Programmpaketes
2.3. kivitendo-Konfigurationsdatei
2.3.1. Einführung
2.3.2. Abschnitte und Parameter
2.3.3. Versionen vor 2.6.3
2.4. Anpassung der PostgreSQL-Konfiguration
2.4.1. Zeichensätze/die Verwendung von UTF-8
2.4.2. Änderungen an Konfigurationsdateien
2.4.3. Erweiterung für servergespeicherte Prozeduren
2.4.4. Datenbankbenutzer anlegen
2.5. Webserver-Konfiguration
2.5.1. Grundkonfiguration mittels CGI
2.5.2. Konfiguration für FastCGI/FCGI
2.6. Der Task-Server
2.6.1. Verfügbare und notwendige Konfigurationsoptionen
2.6.2. Automatisches Starten des Task-Servers beim Booten
2.6.3. Wie der Task-Server gestartet und beendet wird
2.6.4. Task-Server mit mehreren Mandanten
2.7. Benutzerauthentifizierung und Administratorpasswort
2.7.1. Grundlagen zur Benutzerauthentifizierung
2.7.2. Administratorpasswort
2.7.3. Authentifizierungsdatenbank
2.7.4. Passwortüberprüfung
2.7.5. Name des Session-Cookies
2.7.6. Anlegen der Authentifizierungsdatenbank
2.8. Benutzer- und Gruppenverwaltung
2.8.1. Zusammenhänge
2.8.2. Datenbanken anlegen
2.8.3. Gruppen anlegen
2.8.4. Benutzer anlegen
2.8.5. Gruppenmitgliedschaften verwalten
2.8.6. Migration alter Installationen
2.9. Drucken mit kivitendo
2.10. OpenDocument-Vorlagen
2.11. Konfiguration zur Einnahmenüberschussrechnung/Bilanzierung: EUR
2.11.1. Einführung
2.11.2. Konfigurationsparameter
2.11.3. Festlegen der Parameter
2.11.4. Bemerkungen zu Bestandsmethode
2.11.5. Bekannte Probleme
2.12. SKR04 19% Umstellung für innergemeinschaftlichen Erwerb
2.12.1. Einführung
2.12.2. Konto 3804 manuell anlegen
2.13. kivitendo ERP verwenden
3. Features und Funktionen
3.1. Wiederkehrende Rechnungen
3.1.1. Einführung
3.1.2. Konfiguration
3.1.3. Auflisten
3.1.4. Erzeugung der eigentlichen Rechnungen
3.1.5. Erste Rechnung für aktuellen Monat erstellen
3.2. Dokumentenvorlagen und verfügbare Variablen
3.2.1. Einführung
3.2.2. Variablen ausgeben
3.2.3. Verwendung in Druckbefehlen
3.2.4. Anfang und Ende der Tags verändern
3.2.5. Zuordnung von den Dateinamen zu den Funktionen
3.2.6. Sprache, Drucker und E-Mail
3.2.7. Allgemeine Variablen, die in allen Vorlagen vorhanden sind
3.2.8. Variablen in Rechnungen
3.2.9. Variablen in Mahnungen und Rechnungen über Mahngebühren
3.2.10. Variablen in anderen Vorlagen
3.2.11. Blöcke, bedingte Anweisungen und Schleifen
3.2.12. Markup-Code zur Textformatierung innerhalb von - Formularen
3.3. Excel-Vorlagen
3.3.1. Zusammenfassung
3.3.2. Bedienung
3.3.3. Variablensyntax
3.3.4. Einschränkungen
4. Entwicklerdokumentation
4.1. Globale Variablen
4.1.1. Wie sehen globale Variablen in Perl aus?
4.1.2. Warum sind globale Variablen ein Problem?
4.1.3. Kanonische globale Variablen
4.1.4. Ehemalige globale Variablen
4.2. Entwicklung unter FastCGI
4.2.1. Allgemeines
4.2.2. Programmende und Ausnahmen
4.2.3. Globale Variablen
4.2.4. Performance und Statistiken
4.2.5. Bekannte Probleme
4.3. SQL-Upgradedateien
4.3.1. Einführung
4.3.2. Format der Kontrollinformationen
4.3.3. Hilfsscript dbupgrade2_tool.pl
4.4. Translations and languages
4.4.1. Introduction
4.4.2. File structure
4.5. Stil-Richtlinien
4.6. Dokumentation erstellen
4.6.1. Einführung
4.6.2. Benötigte Software
4.6.3. PDFs und HTML-Seiten erstellen
4.6.4. Einchecken in das Git-Repository
\ No newline at end of file + Formularen
3.3. Excel-Vorlagen
3.3.1. Zusammenfassung
3.3.2. Bedienung
3.3.3. Variablensyntax
3.3.4. Einschränkungen
4. Entwicklerdokumentation
4.1. Globale Variablen
4.1.1. Wie sehen globale Variablen in Perl aus?
4.1.2. Warum sind globale Variablen ein Problem?
4.1.3. Kanonische globale Variablen
4.1.4. Ehemalige globale Variablen
4.2. Entwicklung unter FastCGI
4.2.1. Allgemeines
4.2.2. Programmende und Ausnahmen
4.2.3. Globale Variablen
4.2.4. Performance und Statistiken
4.2.5. Bekannte Probleme
4.3. SQL-Upgradedateien
4.3.1. Einführung
4.3.2. Format der Kontrollinformationen
4.3.3. Hilfsscript dbupgrade2_tool.pl
4.4. Translations and languages
4.4.1. Introduction
4.4.2. File structure
4.5. Die kivitendo-Test-Suite
4.5.1. Einführung
4.5.2. Voraussetzungen
4.5.3. + Existierende Tests ausführen +
4.5.4. + Bedeutung der verschiedenen Test-Scripte +
4.5.5. + Neue Test-Scripte erstellen +
4.6. Stil-Richtlinien
4.7. Dokumentation erstellen
4.7.1. Einführung
4.7.2. Benötigte Software
4.7.3. PDFs und HTML-Seiten erstellen
4.7.4. Einchecken in das Git-Repository
\ No newline at end of file diff --git a/doc/kivitendo-Dokumentation.pdf b/doc/kivitendo-Dokumentation.pdf index 9840d8358..881218ef3 100644 Binary files a/doc/kivitendo-Dokumentation.pdf and b/doc/kivitendo-Dokumentation.pdf differ diff --git a/t/README b/t/README deleted file mode 100644 index 07276f3f5..000000000 --- a/t/README +++ /dev/null @@ -1,41 +0,0 @@ -Testsuite for Lx-Office. - -These tests are a means to ensure basic sanity among the lx-office source -files. The test framework was originally written by the guys of Bugzilla, and -has been modified to cope with the Lx-Office structure. - -To run a full test use the shell script t/test.sh. -You can also run every test with the perl interpreter like this: - -$ perl t/001compile.t - -A makefile for an automated make test would be highly appreciated. - - - -The Tests: - -001compile.t: Tries to compile every source file. Bails out if any errors occur. -002goodperl.t: Checks every perl source file for taint, warnings and strict. - While taint is not seen mandatory, warnings and strict are. -003safesys: Checks is system() and exec() calls are fully qualified. -004template.t defunct! -005no_tabs.t checks every file for the \t Tab char. don't use tabs please. -006spelling.t checks for common spelling errors. -011pod.t checks if POD syntax is correct. - - -Wanted Tests: - -- module check -- check if symlinks are missing. -- check for anything outside lower ascii in pl/pm files (only place for complex - coding is locale) -- check for msdos line endings -- check for trailing whitespace -- Devise a test to check if there are modifications to locales without a - locales.pl run. -- Test if parse_template can compile all html templates. - -and later: -- spec tests for pure backend modules like Form.pm and Common.pm