Beiträge

Gute und schlechte Software-Praktiken gestern und heute

Wodurch sich robuste Software auszeichnet und warum Entwickler (und Unternehmen) sie brauchen.

Fachbeitrag von Dr. Bernhard Scheffold, OXID eSales AG

Einen wesentlichen Teil bei der Entwicklung einer OXID eShop Lösung für ein mittelständisches Unternehmen nimmt die Integration des Shops mit seinen Umsystemen ein. Hierzu zählen Warenwirtschaftssysteme, Produktdatenmanagementsysteme, CRM-Systeme und externe Suchserver. Letztere sind häufig eine Notwendigkeit, um eine leistungsfähige Suche zu verwirklichen.

Wenn die Suche eine „On-Premise-Lösung“ ist, kann sie zwar als Teil des Shops aufgefasst werden, stellt aber dennoch eine Integrationsaufgabe da, die korrekt, robust und performant realisiert werden muss. Anhand eines kleinen Stück Codes aus einer solchen Integrationaufgabe möchte ich diskutieren, wodurch sich gute und schlechte Praktiken unterscheiden.

Guter Code existiert jenseits vom Buzz

Aus dem Blickwinkel von nahezu 40 Jahren Praxis in der Software-Entwicklung ziehen sich immer wiederkehrende gute und schlechte Praktiken wie ein roter Faden durch das Tätigkeitsfeld des Software-Entwicklers. Statt die schlechten Praktiken zu beseitigen, werden gerne neue Hypes und Buzzwords in den Ring geworfen. Von ihnen wird immer wieder die quasi ‚automatische Lösung‘ von Softwareproblemen erwartet. Dabei ist Software oftmals Auftragsarbeit, die die sogenannte „Bottom Line“ eines Wirtschaftsunternehmen verbessern und den Kunden robuste und betreibbare Lösungen liefern soll. Ich möchte daher dafür plädieren, nicht zu viel Zeit mit der Suche nach dem Heiligen Gral in Form des aktuellen Hypes zu verbringen, sondern die eigenen Fähigkeiten zu entwickeln, wie man robuste Software schreibt.

Ein Typisches Anti-Pattern…

Illustrieren möchte ich das an einem hübschen kurzen Beispiel aus der Praxis, das ein hartnäckig verfolgtes Anti-Pattern zeigt:
Eine Software zur Erstellung eines Suchindexes zeigt merkwürdiges Verhalten in Bezug auf die Handhabung mehrerer Sprachen. So landet im englischen Sprachindex deutscher Text, obwohl die Indizierungslogik die Sprache doch augenscheinlich korrekt setzt. Zentral ist hier eine Klasse Indexer, die in reduzierter Form in Pseudocode wie folgt aussieht:


class Indexer 
{
  private int langId = 0;
  private String langIsoCode = null;


  public Indexer()
  {
  }

  public setLanguageId(int id)
  {
    this.langId = id;
  }

  public int getLanguageId()
  {
    return this.langId;
  }

  public setLanguageIsoCode(String isoCode)
  {
    this.langIsoCode = isoCode;
  }

  public String getLanguageIsoCode()
  {
    retrurn this.langIsoCode;
  }

  public index(String key)
  {
    String view = Database.getLanguageViewFor(this.langId);
    String value = Database.readFromView(view, key);
    this.sendToIndex(key, value);
  }

  private sendToIndex(key, value)
  {
    // not included here
  }
}

Diese hübsche Klasse macht noch ein paar weitere Dinge (vielleicht keine klare „Separation of Concerns“?), aber sie wird wie folgt verwendet:


String keyToIndex = 'myKey';
Indexer indexer = new Indexer();

foreach (Languages: String langIsoCode) {
  indexer.setLanguageIsoCode(langIsoCode);
  indexer.index(keyToIndex);
}

Das sieht beim flüchtigen Lesen, vor allem, wenn es in eine grössere Code-Base eingebettet ist, vernünftig aus.
Das Problem ist jedoch, dass Indexer zwei Member-Variablen langId und langIsoCode hat, die eigentlich einem Constraint unterworfen sein sollten (die ID muss immer zum ISO-Code passen). Dieser Constraint existiert jedoch nicht im Code, sondern bestenfalls im Kopf des Entwicklers und er wird durch die Konstruktion dieser Klasse nicht erzwungen.

… und die Probleme, die daraus erwachsen

Die Probleme beginnen bereits in der Konstruktionsphase, die das Anlegen eines nicht-funktionsfähigen Objekts erlaubt. Die public Setter und Getter erlauben eine beliebige Änderung von außen, die den Zusammenhang von ID und ISO-Code verletzen können. Diese Probleme bleiben über den gesamten Lebenszyklus des Objektes bestehen: Der Verwender muss peinlich genau aufpassen, immer beide Argumente vorher übereinstimmend zu setzen. Somit hat diese Klasse auch ein großes Usability-Problem.

Am besten wäre es, Indexer als eine nicht-mutierbare Klasse anzulegen, die zudem nur entweder die ID oder den ISO-Code der Sprache als Konstruktor-Parameter nimmt und damit nur korrekt an gelegt werden kann und auch nicht mehr durch den Aufruf einer mutierenden Methode in einen inkorrekten Zustand versetzt werden kann.

Wenn die Klasse schon mutierbar sein soll (was sehr oft vermieden werden kann), dann sollte es keine Mutation geben, die einen ungültigen Zustand erzeugt. Vorstellbar wäre ein Setter für entweder ID und ISO-Code oder ein Setter, der beide als Parameter nimmt und eine fehlerhafte Kombination der beiden Parameter erkennen kann.

Gegenprobe: Punktet das Pattern mit Flexibilität?

Wie oft wurde aber ein Design wie das obige von einem Programmierer als erstrebenswert, weil “flexibel” verteidigt? Schliesslich wird doch in vielen Büchern (die vielleicht nie hätten gedruckt werden sollen) genau solcher Stil vorgemacht. Da ich die Zahl der Bugs, die auf dieses Anti-Pattern zurückzuführen sind aber schon nicht mehr zählen kann, nenne ich es nur noch „Das Schicksal herausfordern“.

Die geliebte “Flexibilität” führt nämlich allzu oft dazu, dass eine Instanz einer solchen Klasse in einen ungültigen Zustand versetzt wird und der Zusammenhang zwischen Ursache und Wirkung oft nicht leicht zu erkennen ist, da beide in der Code-Base weit voneinander entfernt sind. Bei genauer Betrachtung handelt es sich bei dem geschilderten Anti-Pattern nämlich nicht um eine Flexibilisierung des Codes – z.B. durch Interfaces und Polymorphie – sondern um das Einbringen von Non-Determinismen.

Sehr viel mehr zur Robustheit von Software trägt hingegen das Inversion-Of-Control- oder Hollywood-Prinzip („don’t call us, we call you“) bei. In der OO-Welt findet sich das in Frameworks bzw. in Form des „Template Method“-Patterns wieder, in der funktionalen Welt findet es sich in Erlang/OTP als sogenannte Behaviours. Der Grund dafür, dass diese Entwurfstechnik zu robustem Code führt, ist einfach: Hier wird Wiederverwendung in bester DRY-Manier (Don’t repeat yourself) betrieben und durch jede Ausprägung eines Frameworks (oder Behaviours) werden die Fehler in diesem reduziert.

Angenehmer Nebeneffekt ist, dass das Verhalten einer Software, die auf solchen Prinzipien fußt, vorhersagbarer ist und kein unerwartetes Verhalten zeigt. Auf diese Weise fordert der Entwickler das Schicksal nicht mehr heraus, sondern begibt sich selber in dessen Kontrolle.

Flexibilität vs. Robustheit

Das Interessante ist nun, dass es robuste Programmiertechniken schon lange gibt und dass sie auch in modernen Software-Ökosystemen immer noch mit Erfolg angewendet werden. Trotzdem sind schlechte Praktiken immer noch verbreitet und eben deswegen auch so schwer auszurotten. Man muss wohl erst selber die Erfahrung gemacht haben, dass man sein Leben als Software-Entwickler nicht durch „flexible“ Entwürfe erleichtert, sondern eher durch robuste. Der Grund dafür liegt darin, dass der Hauptaufwand nicht im schnellen Erstellen eines „Proof of Concepts“ liegt, sondern in der sogenannten Wartungsphase, in der Fehler behoben und neue Anforderungen so realisiert werden müssen, dass sie möglichst keine neuen Fehler einführen.

Autor:

Dr. B. Scheffold, OXID eSales AG

Dr. Bernhard Scheffold ist seit 2012 Softwarearchitekt bei der OXID eSales AG. Zuvor entwickelte der promovierte Physiker Branchen-Software für Banken, Versicherungen, im Gesundheitswesen sowie für die Industrie und Genforschung.
Für OXID Professional Services betreut Dr. Scheffold Projekte mittelständischer Unternehmen und Konzerne mit dem Schwerpunkt Systemanalyse und -integration sowie Performancetuning.
Die Prinzipien zur Erstellung robuster und evolvierbarer Software und Architektur vermittelt er auch als Kursleiter „Product Line Engineering mit Frameworks“ bei der Digicomp AG, Schweiz.

OXID eShop Version 4.7.0 Beta 1 released

Yesterday we released the Beta 1 of OXID eShop CE / PE 4.7. The software is now available for Download in our OXID eXchange marketplace. Make sure to download your copy now:

OXID eShop 4.7.0 CE Beta 1

OXID eShop 4.7.0 PE Beta 1

Under „Download additional file“ you will find an SQL file for trying out the beta on a test system. Please note: The file can only be used with this beta version.

Please find an overview over new features and changes in the Preview. If you are interested in the more technical details, be sure to check out the Wiki-Page on OXIDForge.

You can take a look at the demo shops here:

Demo Shop Professional Edition

Demo Shop Community Edition

If you discover a bug during your testing, please report it to https://bugs.oxid-esales.com and help us straightening out the new OXID eShop for the final release.

We are very interested in your general feedback that you can share with us on the dev-general mailing list.

Roadmap 4.7/5.0 released

To carry on the spirit of collaboration with our customers and our community as well as a transparent software development, we have published the Roadmap for OXID eShop 4.7/5.0. This will help developers and partners to plan for changes and upcoming new features that may require changes in their shop architecture.

With the upcoming release we decided to focus feature-wise on Enterprise Edition to better respond to new market developments and our customers’ needs. As this gives a whole new direction to the product we proudly call this new generation of OXID eShop 5.0. Professional and Community Edition, in release 4.7, benefit from essential changes in the software (OXID framework and core), too.

Please find the roadmap here: http://www.oxid-esales.com/en/products/facts/preview.html

We are always happy about feedback. Let us know what you think in the comments or our Forum.

Stay tuned for rollout plans and timing on this blog.

OXID eShop: Update Cycles and Maintenance Releases

In a couple of weeks we will release OXID eShop version 4.6.0. Thanks to our proven Open Source development and beta testing process this release will be in time and built to highest quality standards.

However, starting with the release of version 4.6.0 we will introduce some slight changes in the update cycles. This will make the update process easier and clearer for everybody. We will also expand our maintenance activities for previous versions of OXID eShop.

Terminology

There will be three different kinds of releases:

  • Major releases: Upgrades OXID eShop to a new version number, e.g. 4.0 or 5.0
  • Minor releases: Updates the current major release, e.g. 4.6 or 5.1
  • Patch: Indicates the stage of development for current minor release, e.g. 4.6.1 or 4.5.8

Maintenance

As with previous version of OXID eShop you will continue to get a monthly patch that fixes known bugs for the current minor release. Extending our maintenance activities, from now on we will also supply patches for the previous version (X.X-1). But patches for previous versions will be released only when needed and not a regular basis. They will not contain any new or additional features.

As usual, you will have two possibilities to update: You can either download the full release or you can generate a cumulative package. Just pick your current version and you will get one package that will automatically do a complete update to the newest version of OXID eShop for you.

Keep your system up to date

Every release will be compatible with PHP 5.2 and PHP 5.3.

For optimal functionality of OXID eShop and its extensions we recommend regular updates and always using the latest versions. We also recommend working with a test and staging system at all times.

Update cycles

The next major release will be 5.0, coming this summer. About a quarter of a year later we will supply you with the first minor release 5.1.

For the upcoming major releases we aim to get them out around the beginning of each year. The first minor release will follow early in the year, so our customers have enough time to update their shops and go into the Christmas trade with a smoothly running OXID eShop.

Weihnachten im E-Commerce 2011 – Birgit Bonn, gutesbuybonn.de

In der Blogserie „Weihnachten im E-Commerce 2011“ bitten wir Experten um ihre Einschätzung oder Momentaufnahme zum diesjährigen Weihnachtsgeschäft im E-Commerce.

Im heutigen Blogeintrag verrät uns Birgit Bonn, Marketing- und Online Shop Verantwortliche bei gutesbuybonn.de, dass auch Eltern mit knappem Zeitbudget bei ihnen noch Weihnachtsglück haben…

Birgit Bonn

Birgit Bonn

„Wer Weihnachten Kindermöbel verschenken möchte, entscheidet dies auch schon einmal spontan 3 Tage vor Heiligabend.

Mit diesem Wunsch stößt der Kunde im stationären Möbelhandel auf Unverständnis und sieht sich mit 6 Wochen Wartezeit für einen Kinderschreibtisch konfrontiert.

Der Onlinehandel setzt hier neue Maßstäbe. So ist gutesbuybonn.de auch in diesem Weihnachtsgeschäft darauf eingestellt, Möbelbestellungen innerhalb von 3 Tagen und auch noch am 24.12. auszuliefern.“

Und wie erleben Sie das diesjährige Weihnachtsgeschäft? Teilen Sie uns Ihre Einschätzung mit über den OXID Marktcheck 2011, es gibt auch etwas zu gewinnen…

Weihnachten im E-Commerce 2011 – Robert Rieser, mobilemojo

In der Blogserie „Weihnachten im E-Commerce 2011“ bitten wir Experten um ihre Einschätzung oder Momentaufnahme zum diesjährigen Weihnachtsgeschäft im E-Commerce.

So kurz vor Weihnachten gibt uns Robert Rieser, Inhaber von mobilemojo, einen kleinen Einblick in die spannende Welt des OXID eShop mobile in der Vorweihnachtszeit…

Robert Rieser

Robert Rieser

„Wir sind überrascht über die Vielzahl an Anfragen zum Oxid eShop mobile, und der Begeisterung, mit der sich die Shopbetreiber diesem Thema widmen. Als weiterer Vertriebskanal ergänzt es das stationäre Internet in der turbulenten Vorweihnachtszeit ideal. Denn gerade in der Verbindung alter Kernideen mit dem mobilen Nutzungsszenarien steckt zur Zeit jede Menge Innovationskraft! Dies geht vor allem von kleineren Firmen aus, die wir bei Ihren Projekten gerne unterstützen.“

Und wie erleben Sie das diesjährige Weihnachtsgeschäft? Teilen Sie uns Ihre Einschätzung mit über den OXID Marktcheck 2011, es gibt auch etwas zu gewinnen…

Weihnachten im E-Commerce 2011 – Joachim Graf, HighText Verlag

In der Blogserie „Weihnachten im E-Commerce 2011“ bitten wir Experten um
ihre Einschätzung oder Momentaufnahme zum diesjährigen
Weihnachtsgeschäft im E-Commerce.

Joachim Graf, Zukunftsforscher und Herausgeber der Branchenpublikation iBusiness des HighText Verlags, blickt für uns heute nicht nur in die nähere sondern auch schon die fernere Zukunft des E-Commerce.

Joachim Graf

Joachim Graf

„Die guten Zahlen des Weihnachtsgeschäfts 2011 lassen darauf schließen, dass noch immer Geschäft aus dem Präsenzhandel ins Internet wandert – dort scheinen die Umsatzmargen des Vorjahrs ja leicht unterboten zu werden. Vermutlich werden dieses und das nächste Weihnachtsgeschäft allerdings die letzten sein, in denen E-Commerce überdurchschnittlich wächst.

Denn E-Commerce und Handel nähern sich bei den Kaufzyklen einander an. Onlineshops werden sich in Zukunft deutlicher positionieren und differenzieren müssen.“

 

Und wie erleben Sie das diesjährige Weihnachtsgeschäft? Teilen Sie uns Ihre Einschätzung mit über den OXID Marktcheck 2011, es gibt auch etwas zu gewinnen…

Weihnachten im E-Commerce 2011 – Marc van der Wielen, Trusted Shops

In der Blogserie „Weihnachten im E-Commerce 2011“ bitten wir Experten um ihre Einschätzung oder Momentaufnahme zum diesjährigen Weihnachtsgeschäft im E-Commerce.

Im heutigen Blog machen wir mit Marc van der Wielen, Partner Manager bei Trusted Shops, einen kleinen Sprachkurs zum Thema Weihnachten…

Marc van der Wielen

Marc van der Wielen

„Auf der Überholspur Richtung Europa wird es bei Trusted Shops nicht langweilig: gerade zur Weihnachtszeit kann man hier im Hause sprachlich noch einiges dazu lernen. „Frohe Weihnachten“, „Merry christmas“, „¡Feliz Navidad“ oder „Joyeux Noël“ gehen ja noch flott von der Zunge. Die korrekte Betonung von „Vrolijk Kerstfeest“ oder gar „Wesołych Świąt“ stellen jedoch selbst den sprachbegabtesten Mitarbeiter auf eine harte Probe.

Bis Ende 2012 darf nun fleißig geübt werden, wobei sich das Repertoire bis zum Dezember weiter vergrößern dürfte. Wie wünscht man sich eigentlich „Frohe Weihnachten“ in Dänemark oder Schweden?“

 

 

Und wie erleben Sie das diesjährige Weihnachtsgeschäft? Teilen Sie uns Ihre Einschätzung mit über den OXID Marktcheck 2011, es gibt auch etwas zu gewinnen…

Weihnachten im E-Commerce 2011 – Michael Bröske, heldenlounge.de

In der Blogserie „Weihnachten im E-Commerce 2011“ bitten wir Experten
um ihre Einschätzung oder Momentaufnahme zum diesjährigen
Weihnachtsgeschäft im E-Commerce.

Heute bekommen wir einen Einblick, wie Helden sich für das Weihnachtsgeschäft wappnen. Michael Bröske betreut bei heldenlounge.de Technik und Inhalte, regiert über das Online Marketing und Social Media.

Michael Bröske

Michael Bröske, heldenlounge.de

„Echte Helden müssen sich nicht warmlaufen: mit Launchtermin Ende Oktober ist die heldenlounge.de mitten ins Weihnachtsgeschäft gestartet!

Unser Fazit bisher: mehr als zufrieden – und damit es auch so bleibt, setzen wir verstärkt auf Google Adwords und belohnen unsere Kunden in der Weihnachtszeit zusätzlich mit einer heldentauglichen Überraschung.“

Und wie läuft Ihr Weihnachtsgeschäft? Stimmen Sie ab bei dem diesjährigen OXID Marktcheck: Zum OXID Marktcheck 2011.

Weihnachten im E-Commerce 2011 – Dr. Roman Zenner, cooee eCommerce

In der Blogserie „Weihnachten im E-Commerce 2011“ bitten wir Experten um ihre Einschätzung oder Momentaufnahme zum diesjährigen Weihnachtsgeschäft im E-Commerce.

Den Anfang macht Consultant und Autor Roman Zenner, cooee eCommerce, und führt uns gleich in wärmere Gefilde:

Roman Zenner

Roman Zenner, cooee eCommerce

„Während hierzulande der Winter Einzug hält und die Menschen ihre Weihnachtseinkäufe lieber im warmen Wohnzimmer via Internet erledigen anstatt in frostigen Fußgängerzonen zu bibbern, bleibt der Schirmvogel gelassen: Im südamerikanischen Winter lässt es sich bei über 15 Grad gut aushalten. Und wenn Sie wissen möchten, was dieses Geschöpf mit dem OXID eShop verbindet, empfehle ich ab Ende Januar das Aufsuchen einer Buchhandlung Ihres Vertrauens – egal ob on- oder offline.“

Haben Sie schon an der diesjährigen OXID Weihnachtsumfrage teilgenommen? Es winken tolle Preise! Zum OXID Marktcheck 2011.