Category Archives: Software Test

Softwarequalität — erwarte sie nie vom Auftragnehmer (!)


Im Dzone Guide to Software Quality and Software Agility, Edition 2015 findet sich auf den Seiten 4-5 das Ergebnis einer Umfrage unter 600 IT Professionals (von denen die meisten im Umfeld der Implementierung Java-basierter Enterprise Applikationen arbeiten dürften: denn auf dieses Umfeld konzentriert sich Dzone).

Und dieses Ergebnis ist erschreckend (in Englisch gehaltene Aussagen sind Zitate aus dem Bericht):


    DZone surveyed more than 600 IT professionals for our Guide to Code Quality and Software Agility to discover how organizations should prioritize various quality metrics as they mature, and to reveal how the types of software they produce inf luence their testing strategies.

    Starting with the basics, we asked respondents whether their team does testing at all. 87% said they do, leaving 13% who don’t. 95% of respondents said they believe that testing is necessary on all the software they develop, meaning 8% of respondents don’t do testing, but believe they should.

 
Man kann dieses Umfrageergebnis auch so lesen:


    13% aller Entwickler testen gar nicht, was sie implementiert haben.

    Einer von 20 denkt sogar, Test sei überflüssig (!).

 
Wen will es bei solcher Einstellung noch wundern, dass Software häufig deutlich zu schlechte Qualität hat?

Die Auftraggeber bezahlen das mit zu hohen Wartungskosten (und hohem Risiko) über den gesamten Lebenszyklus der Anwendung hinweg.

Erschreckend ist, dass selbst Entwickler, die wissen, dass Test notwendig ist, ihn — je nach Unternehmen mehr oder weniger — viel zu früh beenden (oft sogar im vollen Bewusstsein, dass bisher durchgeführter Test nicht ausreicht).

Dies belegen folgende Aussagen des Umfrageergebnisses:


    The Definition of Done Varies Significantly Among Organisations:

    The most basic definition of done for software products is also the most common for respondents:

    79% say its when all code compiles and builds for all platforms.

    Other common answers were [ Prozentzahl auf jeweils ein spezifisches Unternehmen bezogen? ]:

    • Features reviewed and accepted by Product Owner (65%),
    • New features are system-tested (59%),
    • Acceptance/story tests are written and passing (52%).

    We also asked whether respondents had ever had deadlines in their current product team that caused them to release with less testing than they thought was necessary. 72% said yes.

 
Es wundert mich immer wieder, wie wenig Auftraggeber versuchen zu erzwingen, dass sie für ihr Geld auch wirklich Qualität bekommen. Sind Einkäufer auch großer Unternehmen derart inkompetent? Oder gibt man ihnen einfach nur falsche Zielvorgaben?

Zu ungenaue Dokumentation von Software-Anforderungen kann enorme Schäden verursachen


Anforderungen an unternehmenskritische Software müssen schriftlich, genau und vollständig dokumentiert sein.

Welch gewaltiger Schaden entstehen kann, wenn man das nicht beherzigt, zeigen die folgenden beiden Beispiele:

  • The Mars Climate Orbiter space probe failed to land on Sep 23, 1999, because its thruster control software was based on English units while the team responsible for adjusting its trajectory was using the metric system!
     
  • A few months later, the Mars Polar Lander also experienced a setback during its landing. It was still 40 metres above its final landing point when its feet deployed, as expected, but the software interpreted it as an imminent event. As a result, the computer shut down the descent engines, leading to an abrupt crash and total loss of both mission and hardware. System engineers had advised the software developers to not rely on the transient signal from the legs of the lander as they were deploying but, apparently, they failed to document this information in the software specifications.

Quelle: Software Quality Issues, 22 Jun 2015, by Claude Y. Laporte

Beide Beispiele zeigen klar und deutlich, dass keine Anforderung

  • als selbstverständlich gelten
  • oder auch nur undokumentiert bleiben darf.

Es reicht auf keinen Fall, Anforderungen nur mündlich zu kommunizieren — schon allein deswegen nicht, weil später hinzukommende Tester sie dann ja nicht kennen und deswegen auch nicht gezielt verifi­zie­ren werden.
 
 
Dass guter Ausgang eines Projekts, in dem es nicht einfach nur um Prototyping gehen soll, höchst genaue Dokumentation sämtlicher Anforderungen noch vor Beginn der Implementierung zwingend voraussetzt, zeigt auch ein Projektdesaster, das SAP erlitten hat beim Versuch für die Firma Waste Management (in USA) ein neues ERP-System zu implementieren. Das Projekt endete in einem Zustand, in dem Waste Management SAP vor Gericht sogar des Betruges bezichtigte [E].

Zu welcher Komplexität sich diese juristische Auseinandersetzung schon während der ersten 2 Jahre aufgeschaukelt hat, geht hervor aus SAPs Statement We’ve spent millions so far on the Waste Management suit.

Da der Prozess schließlich mit einem Vergleich endete, der vorsah, dass SAP an Waste Management eine nicht öffentlich gemachte Summe zu überweisen hatte, kann man sich vorstellen, welch enormer Schaden in diesem Projekt für SAP, wahrscheinlich aber auch für den Auftraggeber entstanden war.

Dass das Desaster ganz wesentlich auf viel zu ungenaue Anforderungsdefinition zurückführbar war, lässt sich ablesen an folgenden 3 Fakten:

  • Der Kunde (Waste Management) argumentierte: SAP gave Waste Management software that it knew was “unstable and lacking key functionality”, …
     
  • Der Auftragnehmer (SAP) konterte: Waste management breached its contracts with SAP by failing to “timely and accurately define its business requirements”.
     
  • Der Prozess endete mit einem Vergleich, was ja wohl nicht anderes bedeutet, als dass es Versäumnisse auf beiden Seiten gab.

Wie oft — und wie dramatisch — Software-Tester versagen


Dass es wirklich höchste Zeit wird, auch die Effektivität von Software-Testern systematisch zu kontrollieren, zeigt eine ganz unglaubliche Sicherheitslücke, die im Februar 2015 in gleich mehreren Tausend per Internet zugänglicher Anwendun­gen entdeckt wurde:

Wie die Computerwoche schrieb, handelte es sich um Konfigurationsfehler die zur Folge hatten, dass — im Prinzip wenigstens — jeder Internet-Nutzer mehrere Millionen Kundendaten nach Name, Adresse, E-Mail und Kreditkartennummer im Internet nicht nur abrufen, sondern auch manipulieren konnte.

Von den zahlreichen Entwicklern dieser vielen Anwendungen war ganz offensicht­lich keinerlei ernsthafter Sicherheitstest durchgeführt worden.

Will da noch jemand behaupten, sie hätten professionell genug gearbeitet?

Und ganz offensichtlich hat auch niemand unter den Verantwortlichen ernsthaft ge­prüft, wie vollständig der Test, für den sie bezahlt hatten, denn nun eigentlich war.

Glaubt die Software-Industrie wirklich, sich derart dilettantisches Vorgehen noch lange leisten zu können?

|

Man lese auch: Was es bedeuten kann, wenn Software-Tester versagen

Wie man als CIO Budget für Softwaretest optimal einsetzt


Projekte, die eine Modernisierung unternehmenskritischer Software-Applikationen großer Unternehmen zum Ziel haben, werden größer und größer und verursachen heute Kosten, die gar nicht mehr so selten 3-stellige Millionenhöhe erreichen.

Einen ganz beträchtlichen Teil solcher Ausgaben verursacht der Test der neuen Lösungen: Typischerweise arbeitet daran ein großes Team (in Fällen, die ich zwischen 2003 und 2010 beobachten konnte, waren es bis zu 50 Personen über Jahre hinweg).

Natürlich versucht der CIO des Auftraggebers dann hin und wieder, kosten­günstigere Dienstleister zu finden. Das gängige Verfahren: Es erfolgt eine neue Ausschreibung der Testaufgabe mit dem Ziel, zu prüfen,

  • ob der gegenwärtige Dienstleister nicht allzu teuer oder zu wenig kreativ geworden ist (z.B. deswegen, weil er bestrebt sein wird, mit der Zeit weniger erfahrenes, für ihn billigeres Personal einzusetzen)
     
  • oder ob es konkurrierende Anbieter gibt, die ihn deutlich zu unterbieten in der Lage sind, Offshore-Anbieter etwa.

Sehr oft steht am Ende einer solchen Ausschreibung der Austausch des Anbieters, d.h. der Austausch des gesamtem, großen Teams von Testern und Testmanager.

Das aber kann gefährlich sein, denn

  • erstens geht dabei eine große Menge von Knowhow verloren (die neuen Tester müssen sich ja erst wieder mit der zu testenden Applikationslogik bekannt machen)
     
  • und zweitens ist zunächst noch völlig offen, wie effektiv das neue Team denn nun wirklich arbeiten wird.

Mit anderen Worten:

Die Wahrscheinlichkeit, dass der Befreiungsschlag gelingt, ist ebenso groß wie die Wahrscheinlichkeit, dass er misslingt. Rechnet man die Kosten der notwendigen Einarbeitung des neuen Teams hinzu — Kosten also, die gar nicht anfielen, wenn man beim alten Dienstleister geblieben wäre —, so ist die Wahrschein­lichkeit, dass solcher Wechsel unterm Strich eher Verlust denn Gewinn bedeutet, ziemlich hoch.

Andererseits:

Das Team über Jahre hinweg einfach arbeiten zu lassen, ohne zu versu­chen, die Effektivität des Dienstleisters zu maximieren, wäre ganz sicher auch nicht richtig.

Was also sollte man tun?

Die naheliegenste Lösung ist folgende:

Sobald absehbar ist, dass ein Testteam über längere Zeit hinweg eine gewisse Größe haben muss, sollte man es aufteilen in zwei etwa gleich große Teams, die

  • unter der Regie zueinander konkurrierender Dienstleister
  • unabhängig voneinander an derselben Testaufgabe arbeiten.
  • Wenigstens eines dieser Teams sollte seine Testwerkzeuge selbst wählen dürfen.

Ihre Effektivität sollte einem strengen Monitoring durch den Auftraggeber unter­liegen, so dass der z.B. alle 6 Monate beiden Teams mitteilen kann, wie effektiv jedes von ihnen im Vergleich zum jeweils anderen gearbeitet hat (Effektivität = Kosten dividiert durch die Summe der Gewichte vom Team aufgedeckter Fehler in den zu testenden Applikationen).

Vorteile dieser Lösung:

  • Keiner der beiden Auftragnehmer kann sich leisten, unerfahrende Leute einzusetzen oder ungeeignetes Werkzeug zu nutzen (denn täte er das, würde sofort erkennbar werden, wie seine Effektivität verglichen mit der seines Konkurrenten zurückgeht).
     
  • Sobald eines der beiden Teams deutlich weniger effizient arbeitet als das andere, sieht man, dass es höchste Zeit wird, es auszutauschen.
     
  • Kosten für den Neuaufbau von Knowhow werden so minimiert, und nie ent­steht eine Situation, in der zu wenig gut eingearbeitete Tester verfügbar sind.
     
  • Schon im jeweils eigenen Interesse wird so jedes Team sich optimale Werk­zeuge aussuchen und wird bestrebt sein, das eigene Vorgehen ständig zu überdenken und effektiver zu gestalten.
     
  • Diese Lösung ist kostenneutral.
     
  • Zudem minimiert sie die Wahrscheinlichkeit, dass gelegentlicher Austausch des Dienstleisters zu einer gravierenden Fehlentscheidung wird.

Man bedenke:

Zu beurteilen, wie effektiv Tester arbeiten, ist anders kaum möglich (denn: Die Zahl beim Test gefundener Fehler hängt ja nicht nur davon ab, wie geschickt die Tester vorgehen, sondern auch davon, wie gut die Entwickler gearbeitet haben). Kurz:

Die oben vorgestellte Lösung scheint der einzige Weg zu sein, über den ein CIO erreichen kann, dass die Gelder, mit denen er den Test finanziert, so wirkungsvoll wie nur irgend möglich eingesetzt sind.
 

Software-Qualität – eine oft böse Überraschung


Wer für Software-Entwicklung bezahlt, hält es für selbstverständlich, qualitätsvolle Software zu bekommen. Welch ein Irrtum das sein kann!

Selbst weltweit anerkannte IT-Dienstleister (s.u. Beispiele) liefern hin und wieder absolut unbrauch­bare Software und bescheren so ihren Kunden Verluste in Millionen-Höhe.

Warum nur fühlen sich Software-Entwickler so wenig für die Qualität ihrer Erzeugnisse verantwortlich?

Warum nur sehen sie Qualität so gar nicht als eines ihrer wichtigsten Ziele?

Liegt es daran, dass ihre Auftraggeber Qualität nur allzu pauschal fordern (und denken, sie nicht extra bezahlen zu müssen)?

Traurige Tatsachen sind:

  • Wartbarkeitsaspekte — für Eigentümer und Betreiber der Software extrem wichtig — adressiert kaum jemand: Wie sich die Total Cost of Ownership niedrig halten lässt, diskutieren Entwickler nicht wirklich (sie müsste vom Auftraggeber schon explizit gefordert sein, …).
     
  • Benutzerfreundlichkeit scheint Entwicklern völlig egal (so ergab eine Studie aus 2012).

 

Eine 2001 im Auftrag des deutschen Forschungsministeriums erstellte Studie kam zum Ergebnis: Für Software-Dienstleister ist Qualität ein Fremdwort, und so ist es heute noch:

  • Im Früjahr 2013 bestätigt ein SAP-Team diese Einschätzung ganz unfreiwillig im wirklich übelsten Sinne des Wortes: durch Auslieferung einer absolut unbrauchbaren Neuimplementierung des Payroll Systems der kalifornischen Behörden auf der SAP Plattform (siehe [1], kürzer [CW]).
     
  • Ähnliches war einige Monate früher IBM passiert (siehe [2]). Diesem Team misslang die Neuimplementierung eines Order Management Systems. Man streitet sich jetzt vor Gericht um einen zweistelligen Millionenbetrag.
     
  • Vorher schon hatte IBM in Australien Software abgeliefert, die unbrauchbar war: "The system, which was delivered 20 months after deadline and 300 per cent over budget, led to 70,000 staff in Queensland’s health system being underpaid, overpaid or not paid for months."
     
  • Ein ganz ähnliches Beispiel aus Deutschland (2015).
     
  • Leider sind das keineswegs die einzigen Beispiele für in den letzten Jahren komplett schiefgelaufene, wirklich große Software-Entwicklungsprojekte. Siehe auch Zahlen dazu, z.B. von 2010.
     
    Man muss sich ernsthaft fragen, ob gängige Software-Entwicklungsmethodik (insbesondere die neue, sog. agile) nicht ganz grundsätzlich nur für Projekte kleiner oder mittlerer Größenordnung funktioniert.

    Wie sonst nämlich wäre es erklärbar, dass man mit den heute zur Verfügung stehenden wunderbaren, kaum noch verbesserungsfähigen Entwick­lungs­werkzeugen an der Neuimplementierung von Anwendungen scheitert, die man vor 30-40 Jahren schon einmal – und damals doch durchaus erfolgreich – geschaffen hatte (!).

    Oder sind vielleicht die Einkäufer schuld, die davon ausgehen, dass der jeweils billigste Anbieter das Projekt schon stemmen werde? Wollen sie Qualität zum Nulltarif?

 

In 2010 schrieben Wissenschaftler der Carnegie Mellon University, die Software-Entwicklungsprozesse untersucht hatten: The software industry is the only modern high-tech industry that ignores quality until test.

Inzwischen aber zeigt sich noch Schlimmeres:

Selbst wirkungsvoller Test gelingt Software-Entwicklern nicht wirklich (siehe etwa [3], [4] und [5] sowie The Healthcare Go Live Debacle).

Wie wenig effektiv Tester bisher sind, spiegelt sich auch wider in Gartners Erkennt­nis: 40% of problems are found by end users.

Wie lange noch — so frage ich — werden Auftraggeber sich das gefallen lassen?

Und insbesondere: Wann endlich werden Software-Entwickler die Konstruktion von Qualität ebenso ernst nehmen, wie das Konstruieren der Software selbst?

Bisher ist das Streben nach Qualität auf Seiten der Entwickler selten mehr als ein Lippenbekenntnis.

Tatsache ist: Wo Termin und Budget eng werden, wird weniger getestet — mit oft schlimmen Folgen (immer für den Auftraggeber, nicht selten auch für den Auftrag­nehmer). Beide Vertragspartner sollten sich dessen bewusst sein und nicht ver­säumen, dem ganz entschieden zu begegnen: Auf jeden Fall weit effektiver als bisher zu beobachten.

Den oft jungen Entwicklern sei gesagt:

Zu glauben, dass sogenanntes agiles Vorgehen die früher übliche, peinlich genaue Dokumentation aller zu entwickelnden Funktionalität überflüssig macht, ist ein ganz gewaltiger Irrtum: Der Wille, praktisch alles, was man produziert, in jedem noch so unfertigen Zustand gerne dem Anwender zu zeigen (damit der sage, wo er was anders haben möchte), mag ja gut gemeint sein, ist aber einfach nur naiv, denn solches Vorgehen überfordert den Anwender – man schiebt ja so nur eigene Verantwortung auf ihn ab.

Kluge Kunden durchschauen das und akzeptieren es nicht.

Vorzugehen, wie im Agilen Manifest gefordert, kann nur gut sein für prototypische Entwicklung in sehr kleinen Teams. Viele der heutigen Entwickler wollen das nicht einsehen. Methodiker, die ihnen Einhalt gebieten, gibt es nicht mehr wirklich. Es fehlt wohl die Einsicht, dass sie zu bezahlen sehr gut angelegtes Geld wäre …

SCRUM-Verfechter, eine spezifische Subklasse der Agilisten, übersehen, dass sich mit täglichen Stand-up-Meetings nur Mikroprozesse steuern lassen — auf keinen Fall aber Großprojekte.

Die Achillesferse aller Software-Entwickler


Wissenschaftliche Untersuchungen (z.B. eine der Carnegie Mellon University aus 2003) belegen, dass moderne Software, wenn sie in Betrieb genommen wird, i.A. immer noch bis zu fünf Fehler pro 1000 Lines of Code enthält; sprich: etwa 1 Fehler auf je 3 DIN A4 Seiten manuell erstellten Source Codes.

Selbst im besten untersuchten Programm – bestehend aus 10.000.000 Lines of Code – fand sich immer noch 1 Fehler in je 7500 Zeilen. Wirklich vorhanden waren wohl mehr, denn in großen Systemen entdeckt man niemals alle.

Wären mathematische Publikationen auch nur annähernd so fehlerhaft, wäre die Mathematik als Wissenschaft längst in sich zusam­men gebrochen (es baut dort ja Neues stets auf Älterem auf).

Wir sehen: Die Informatik — wenigstens aber ihre Technik zur Qualitätssicherung — steckt heute wohl noch in Kinderschuhen, die vergleichbar sind mit denen, die die Mathematik noch vor Christi Geburt trug.

Auf jeden Fall ist Software heute noch weit davon ent­fernt, so fehlerfrei zu sein, wie die Ergebnisse der Mathematiker das sein möchten (und i.A. auch wirklich sind).

Siehe auch:

 
Dass es wirklich höchste Zeit wird, zeigt eine ganz unglaubliche Sicherheitslücke, die 2015 in gleich mehreren Tausend auf Mongo-DB basierender Anwendungen entdeckt wurde (aber nicht dem Datenbankhersteller anzulasten ist):

Wie die Computerwoche schrieb, handelte es sich um Konfigurationsfehler die zur Folge hatten, dass — im Prinzip wenigstens — jeder Internet-Nutzer mehrere Millionen Kundendaten nach Name, Adresse, E-Mail und Kreditkartennummer im Internet nicht nur abrufen, sondern auch manipulieren konnte.

Von den zahlreichen Entwicklern dieser vielen Anwendungen war ganz offen­sichtlich kein oder viel zu wenig ernsthafter Sicherheitstest durchgeführt worden.

Will da noch jemand behaupten, sie hätten professionell genug gearbeitet?

 

PS: Im Artikel Dogma-driven Development schreibt ein gewisser David Green recht treffend:
 
The trouble is, in this farcical echo chamber of an industry, where the lessons of 40 years ago still haven’t been learnt properly. Where we keep repeating the mistakes of 20 years ago. Of 10 years ago. Of 5 years ago. Of 2 years ago. Of last week. For Christ’s sake people, can we not just learn a little of what’s gone before?

Man ist versucht zu fragen: Warum gestatten Auftraggeber den Software-Entwicklern derart unprofessionell zu arbeiten? Zählt denn wirklich nur, dass sie einen Festpreis einhalten? Warum interessiert die Auftraggeber kaum die abgelieferte Qualität? Fühlt man sich unfähig, sie zu beurteilen?

 

Notwendiges Wissen kompetenter Software-Entwickler


Kompetente Software-Entwickler wissen und beherzigen:
 


 

Wie man Software Test effektiv macht


Wer daran interessiert ist, entstehende Software möglichst wirkungsvoll zu testen (oder zu kontrollieren, wie effektiv sie getestet wird bzw. wurde), dem empfehle ich die Lektüre meiner Seite Aus dem Erfahrungsschatz eines IT Managers.

Meinungen zum dort Gesagten, bitte hier als Kommentar hinterlassen. Danke.

 

Test Automation Tools


Diskussionsforum zur Seite Test Automation Tools

und zu meinen Aussagen, das Messen von Testabdeckung betreffend:

Klar sein muss:

Nur nachgewiesene Testabdeckung kann zeigen, ob ausreichend getestet wurde.

 

Software Tester’s Core Knowhow


People who want to do software test the right way, especially those who are responsible for Test Automation or Managing a Team of Software Testers, might be interested in looking up Software Tester’s Core Knowhow (2 articles in English, many more in German).

For reducing the danger of Costly Automation Failures I recommend to read first what Carl Nagle is telling us about Test Automation Reality.