Programmiert Ihr Deutsch?

Nachgeladen (reloaded)

Mit diesem Post würde ich gerne ein Thema wieder aufgreifen, dass ich vor drei Jahren einmal angeschnitten habe: Programmiert Ihr Deutsch?

Grund dafür ist, dass wir in zwei aktuellen Projekten dazu übergegangen sind, alles was mit der Domäne und Tests zu tun hat komplett in deutsch zu entwickeln. Nach anfänglicher Skepsis darüber muss ich nun sagen, dass ich meine Meinung deutlich geändert habe und es in jedem kommenden Projekt wohl wieder so machen würde – es sei denn natürlich, es gibt Beschränkungen bzw. gute Gründe eben nicht deutsch als Sprache zu verwenden (bspw. englischsprachige Teammitglieder oder Kunden).

Wir haben Modell-, Controller- und Attributnamen auf deutsch definiert, was auch erstaunlich problemlos funktioniert. Die einzigen Anpassungen die in Rails daraus resultieren sind, dass es erfordert die Inflections (config/initializers/inflections.rb) anzupassen. Alles weitere (bspw. Datenbanktabellennamen) resultiert daraus und benötigt weiter keine Konfiguration. Wir waren bislang noch nicht wagemutig genug das auf die Spitze zu treiben und auch Umlaute in Klassen- und Dateinamen zu verwenden, das bleibt dann dem geneigten Leser als Übung überlassen ;)

Testing

Richtig angenehm wird es in den Tests: Cucumber bringt von Haus aus mit, Features auch in anderen Sprachen als Englisch zu verfassen. Alles was dazu nötig ist, ist bei der Installation das Kürzel der Sprache mitzugeben, für die zusätzliche Web Steps generiert werden sollen, in unserem Fall:

rails generate cucumber:install de

Eine Übersicht der in deutsch benötigten Keywords gibt es mittels

bundle exec cucumber --i18n de

Die Testdaten legen wir über Tabellen an, was meiner Meinung nach mittlerweile auch etwas übersichtlicher ist als Bibliotheken zu verwenden, die Factory Steps generieren (wie cucumber_factory oder pickle). Dies ist aber sicherlich Geschmacksache und es gäbe auch Möglichkeiten, die Stepgeneratoren so anzupassen, dass sie auch für deutsche Steps funktionieren. Hier ein kurzes Beispiel für eines unserer Features (wichtig für Cucumber ist dabei der Kommentar in der ersten Zeile):

# language: de

Funktionalität: Kunde-Login
  Als Kunde
  Möchte ich mich mit meinen Zugangsdaten einloggen
  Um an der Auktion teilnehmen zu können

  Grundlage: Bestehender Kunde
    Angenommen es gibt die folgenden Kunden:
      | email        | kundennummer | password   |
      | kunde@web.de | 123456       | top_secret |

  Szenario: Erfolgreiches Login mit E-Mail-Adresse
    Wenn ich auf die Login-Seite gehe
    Und ich "Login" mit "kunde@web.de" ausfülle
    Und ich "Passwort" mit "top_secret" ausfülle
    Und ich auf "Anmelden" drücke
    Dann sollte ich auf der Startseite sein
    Und ich sollte "Sie wurden erfolgreich eingeloggt" sehen

Auch die Specs lassen sich bis auf die Keywords sehr gut auf deutsch schreiben, was bei uns dann in etwa so aussieht:

# encoding: utf-8

require 'spec_helper'

describe Auktionator do
  
  context "bei bevorstehender Auktion" do
    
    before do
      @termin = Factory(:auktionstermin, :start => 1.day.from_now)
      @los1 = Factory(:los, auktionstermin: @termin, losnummer: 1)
      @los2 = Factory(:los, auktionstermin: @termin, losnummer: 2)
      @auktionator = Auktionator.new(@termin)
    end
    
    describe "#phase" do
      
      it "sollte 'auktion_bevorstehend' zurückgeben" do
        @auktionator.phase.should == 'auktion_bevorstehend'
        @auktionator.auktion_bevorstehend?.should be_true
      end
    
    end

    describe "#los" do
    
      it "sollte das aktuelle Los zurückgeben" do
        @auktionator.los.should == @los1
      end
    
    end

end

Mich würde wie gesagt eure Meinung dazu interessieren, vielleicht habt ihr Tips und weitere Tools dafür. Wer darüber hinaus auf der Suche nach Anregungen zum Thema Domänenabbildung ist, dem sei ggf. noch Eric Evans’ Buch Domain Driven Design empfohlen - dies aber wohl eher nur als Randnotiz.

iOS app for GitHub

iOctocat

ist GitHub für die Hosentasche - deine Projekte und das was dort passiert immer dabei mit deinem iPhone und iPod Touch.
Die App ist