Software Evaluation

Software Evaluation - OpenSource-Qualität prüfen

Software-Qualität

isWagner kann Ihnen helfen Entscheidungshilfen zu erstellen, die auf Ihre Fragen zugeschnitten sind. Kann eine Portalsoftware Ihre Community bereitstellen? Ist der Funktionsumfang korrekt im Sinne Ihrer Anforderungen? Läßt sich die Software skalieren und ist damit auf ein Wachstum vorbereitet? Wie viele Kunden verträgt Ihr Online-Shop? Diese Fragen werden oft von Agenturen bei der Bereitstellung von OpenSource-Systemen vergessen oder das Budget ist zu klein. Dabei wird vergessen, dass eine spätere Anpassung mit der heißen Nadel am laufenden System schwere finanzielle Verluste bedeuten kann. Außerdem ist eine Analyse oft gar nicht teuer. Evtl. kennen wir ja schon Ihr System und können Ihnen schon vorab kostenlos Grundlegendes beantworten. Fragen Sie uns.

Definition von Software-Qualität

Auch wenn wir bei Analysen oft pragmatisch vorgehen, insbesondere wenn nur unzureichend spezifiziert wurde, kennen wir die Definition von Software-Qualität sehr genau. Ein guter Rat: haben Sie folgende Punkte von Anfang an im Blick, sind die TCO mit Sicherheit viel günstiger.

Korrektheit = primäre Qualität

Das ist der wichtigste Qualitätsbegriff. Er meint die Fähigkeit von Softwareprodukten, ihre Aufgaben exakt so zu erfüllen, wie sie durch Anforderungskatalog bzw. Spezifikationen definiert sind.

Robustheit

Fähigkeit von Softwaresystemen, auch unter außergewöhnlichen Bedingungen zu funktionieren.

Unter außergewöhnlichen Bedingungen versteht man im allgemeinen Fälle, die nicht in der Spezifikation ausdrücklich beschrieben sind.

Eine Software gilt als robust, wenn bei Auftreten einer außergewöhnlichen Bedingung das System nicht "katastrophale" Ereignisse auslöst. Beispiele für solch katastrophale Ereignisse wären ein unerwarteter Absturz des Programms oder, noch schlimmer, das Programm verhält sich scheinbar normal, die Programmergebnisse sind aber falsch. Wohl mit der schlimmste Fall sind falsche Ergebnisse, denen man aber ihre 'Falschheit' nicht sofort ansieht.

Bei Auftreten einer außergewöhnlichen Bedingung sollte die Software entweder die Ausführung unter Mitteilung einer aussagekräftigen Fehlermeldung sauber beenden (z.B. alle geöffneten Dateien schließen) oder dem Benutzer die Möglichkeit geben, die außergewöhnliche Bedingung aufzuheben (z.B. Hinweis auf eine falsche Eingabe und Wiederholung der Eingabeprozedur).

Zuverlässigkeit = Korrektheit + Robustheit

Änderbarkeit: Erweiterbarkeit und Wartbarkeit

Leichtigkeit, mit der Software geändert werden kann.

Erweiterbarkeit: Änderbarkeit aufgrund von Spezikationsänderungen

Wartbarkeit: Änderbarkeit aufgrund von Fehlern

Sehr wichtiges Qualitätskriterium, da häufig insbesondere bei großen Programmen der Kostenanteil für nachträgliche Änderungen ca. 70% der Gesamtkosten der Softwareerstellung beträgt.

vorteilhaft sind:

  • Einfachheit des Softwareentwurfs
  • Dezentralisierung -> relativ autonome Module/Klassen mit einfachen Schnittstellen
  • Kapselung von Datenstrukturen -> Datenzugriff über API-Funktionen
  • sinnvolle Dokumentation (nicht getrennt von Code)

Änderbarkeit von OpenSource

Änderbarkeit von Software läßt sich oft mit herkömmlichen prozeduralen Programmiertechniken nur mit hohem Aufwand erreichen. Siehe z.B. xtCommerce(als Negativbeispiel).

Wiederverwendbarkeit

Eigenschaft von Softwareprodukten, ganz oder teilweise für neue Anwendungen wiederverwendet werden zu können. Die Idee der Wiederverwendbarkeit von Software kommt aus der Erfahrung heraus, daß oft Elemente von Softwaresystemen nach dem gleichen Muster gebaut sind.

Vorteile von Wiederverwendbarkeit:

  • weniger Fehler, da schon ausgiebig getestet
  • billiger

Wiederverwendbarkeit von Software läßt sich mit herkömmlichen prozeduralen Programmiertechniken kaum vernünftig erreichen.

Kompatibilität (Verträglichkeit)

Maß der Leichtigkeit, mit der Softwareprodukte mit anderen verbunden werden können.

  • häufig Probleme, da z.B. Datenformate nicht kompatibel
  • vorteilhaft: Einheitlichkeit des Entwurfs, Standards

Portabilität

Maß der Leichtigkeit, mit der Softwareprodukte auf verschiedene Hardware- und Software-Umgebungen übertragen werden können.

  • Portieren von SW kostet oft viel Geld
  • positives Beispiel: PHP (plattformunabhängig)

Verifizierbarkeit

Maß der Leichtigkeit, mit der Prozeduren zur Fehlererkennung- und verfolgung während der Validations- und Betriebsphase erzeugt werden können.

Integrität

Fähigkeit des Softwaresystems, seine verschiedenen Komponenten (Programme, Daten, Dokumente) gegen unberechtigte Zugriffe und Veränderungen zu schützen.

Benutzerfreundlichkeit (Usability)

Leichtigkeit, mit der die Benutzung von Softwaresystemen, ihre Bedienung, das Bereitstellen von Eingabedaten, die Auswertung der Ergebnisse und das Wiederaufsetzen nach Benutzungsfehlern erlernt werden kann.

grafisches Benutzerinterface, Anzahl der Mausklicks für eine Aufgabe etc.

Performance

Schnelligkeit sowie ökonomische Nutzung von Speicher und Kommunikationsgeräten.

Durch die enorme Entwicklung im Hard- und Softwarebereich (immer schnellere Prozessoren, optimierende Compiler, immer höhere Bandbreiten) gegenüber den anderen Kriterien immer weniger wichtig.

mögliche Ausnahmen:

  • Echtzeitanwendungen
  • Kernel von Servern und Datenbanken

Konkurrierende Qualitätskriterien

Die oben genannten Kriterien für Softwarequalität sind nicht immer miteinander vereinbar. Zum Beispiel würde optimale Performance die perfekte Anpassung der Software an eine bestimmte Hardware und an eine bestimmte Softwareumgebung (z.B. an ein bestimmtes Betriebssystem) erfordern, was dann aber zu Lasten der Portabilität geht. Oft gelingt es aber, die verschiedenen Kriterien miteinander zu versöhnen. Manchmal müssen Kompromisse eingegangen werden. In diesen Fällen ist es wichtig, die Qualitätskriterien, denen man die höchste Priorität einräumt, klarzulegen.

Objektorientierter gegenüber klassischem Softwareentwurf

Objektorientierter Softwareentwurf bzw. objektorientierte Programmierung führt insbesondere hinsichtlich zweier Qualitätskriterien zu einer deutlichen Verbesserung gegenüber klassischem Softwareentwurf und klassischer prozeduraler Programmierung:

  • Änderbarkeit
  • Wiederverwendbarkeit

Software-Qualität im Überblick

  • Korrektheit
  • Robustheit
  • Zuverlässigkeit = Korrektheit + Robustheit
  • Änderbarkeit
  • Wiederverwendbarkeit
  • Kompatibilität
  • Portabilität
  • Verifizierbarkeit
  • Integrität
  • Usability
  • Performance