Ich formuliere um:
Wenn ihr einen Software-Startup hättet und von Beginn an automatisiertes zuverlässiges Testen haben wollt, wie würdet ihr vorgehen, um dies zu realisieren?
Ich bin ja, wie bereits gesagt, kein Softwareentwickler. Meine Profession ist eine andere, auch wenn ich selber ein kleines Javaprojekt habe (auch wenn da seit einem Jahr kaum was passiert ist, weil wenig Zeit).
Zunächst mal würde ich mir darüber Gedanken machen, was ihr wie intensiv testen wollt. So wichtig Tests auch sind, ändert das nichts daran daß ihr nur begrenzte Ressourcen habt, also verteilt sie sinnvoll. Ich habe in meinem Projekt z.B. ausschließlich Unit-Tests, keine Integrationstests oder dergleichen, und das reicht mir dort auch.
View-Elemente teste ich überhaupt nicht automatisiert. Das zu testen wäre sehr aufwendig, der Nutzen an dieser Stelle ist aber gering. Und wenn ich meine, daß ich den Button doch woanders haben will, muß ich gleich den Test anpassen. Dazu kommt, das an dieser Stelle Fehler sehr schnell auffallen, außerdem teste ich an dieser Stelle sehr viel während der Programmierung. Wohlgemerkt, wir reden hier ausschließlich über die Benutzeroberfläche, nicht über die Programmlogik oder dergleichen (das ist strikt getrennt), und da will ich auch gerne sofort sehen wie es aussieht.
Der ultimative Test für eine Benutzeroberfläche ist sowieso kein automatisierter Test, sondern der (noch) ahnungslose Benutzer, der da einfach ohne Vorinformation oder Schulung rangesetzt wird und eine Aufgabe umsetzen soll. Der zwar die Domäne kennt, aber für den deine Software komplett unbekannt ist. Lege eine Bestellung an, buche einen Artikel ein, füge einen neuen Kontakt hinzu, sowas in der Art. Und dann dem Tester über die Schulter gucken: findet er selbständig die Informationen die er braucht, oder muß er sich mühselig durch lauter Menüs klicken und findet er einfach keine Übersicht?
Das ist natürlich kein automatisierter Test, aber für deine Benutzeroberfläche der Härtetest schlechthin. Wer noch nie eine Benutzeroberfläche geschrieben hat mit der andere später arbeiten sollen, hat keine Vorstellung davon was andere damit anstellen. Ich habe mal ein Excelmakro für eine E-Installationsfirma geschrieben, mit diesem sollten die Bauleiter den Fortschritt ihrer Baustellen festhalten. Die Benutzer meines Excelprogramms waren zwar keine dummen Menschen, aber eben auch keine Akademiker. Das waren praktisch veranlagte Leute, für die das einfach funktionieren mußte und die Büroarbeit eher als lästige Nebenbeschäftigung empfanden.
Ich habe mir damals ein paar Zielstellungen selber auferlegt, unter anderem wollte ich die Benutzeroberfläche möglichst idiotensicher machen. Ich will nicht dauernd was erklären müssen, Schulungen sollten nicht notwendig sein, die Leute sollten damit auch noch arbeiten können wenn ich aus der Firma raus bin, usw. Das Ding sollte etwa so leicht zu bedienen sein wie ein Appleprodukt.
Und nicht zuletzt wollte ich ja, daß die Leute mein Program mögen und es nicht als Belastung empfinden. Das Programm an sich war sowieso schon redundant weil alles nochmal irgendwo anders schriftlich notiert werden mußte, ich wollte die Leute nicht noch zusätzlich täglich auf die Palme bringen.
Ich habe dann einfach mal jemanden, der damit später arbeiten sollte, an meinen ersten Entwurf rangesetzt, und der erste Testlauf war ein absolutes Fiasko für mich. Unter anderem war ich davon überrascht, wie flink Leute im Fehlermeldungen wegklicken sein können. Ich hatte da eine relativ lange Meldung drin die eigentlich nur kommen sollte, wenn der Benutzer Gefahr lief wirklich üblen Mist zu machen und dem Benutzer ein paar Dinge klarmachen. Diese Meldung kam weitaus schneller als ich hätte ahnen können, ich hab nichtmal den Mund aufgekriegt um etwas sagen zu können da hatte er schon auf OK geklickt, und stand hinterher im Wald und wußte nicht mehr raus. Damit war mein Testlauf auch schon zu Ende. Überrascht war ich auch, wie arglos manche Menschen auf irgendwelche Knöpfe klicken.
Freilich kann man dem Benutzer immer vorhalten, wieso man denn einfach Meldungen wegklickt, ohne sie zu lesen, aber letztendlich habe ich meine Zielstellung damit trotzdem verfehlt. Also habe ich mir nochmal über das ein oder andere Gedanken gemacht, Bedienkonzept umgestellt, usw. Nach dem dritten derartigen Testlauf war es dann perfekt, eine kurze Präsentation vor allen Kollegen mit Vorführung, damit sie es mal gesehen haben, und das wars.
Wie gesagt, kein automatisierter Test, aber dennoch ein Test, und meiner bescheidenen Meinung nach einer der wichtigsten. Denn deine Benutzeroberfläche ist maßgeblich dafür mitverantwortlich, ob deine Kunden gerne mit dem Programm arbeiten. Und eine idiotensichere Benutzeroberfläche zu bauen ist hohe Kunst. Jeder versteht die Struktur, die er selber entworfen hat, eine Struktur zu entwerfen die
andere verstehen ist dagegen etwas ganz anderes.
Brauchen wir professionelle Tester oder können das bei uns die Entwickler mitmachen?
Grunsätzlich sollten Test und Testling von verschiedenen Menschen geschrieben werden. Mir blieb bei meinem Projekt nichts anderes übrig als Unittest und Klasse selber zu schreiben, aber grundsätzlich würde ich es nicht als Test ansehen, wenn ein Entwickler sein Werk selber testet.
Aber das allerwichtigste:
Ein Punkt der gerne übersehen wird:
* Man braucht Mitarbeiter/Entwickler, die das wollen.
Egal von welchem Tool wir reden, ohne Entwickler die das auch wollen, bringt das nicht viel. Per "Order de Mufti" von oben einführen "Ihr müsst jetzt automatisiert testen, dafür haben wir Tool XY lizenziert" geht schnell in die Hose. Den wenn die Entwickler sich übergangen fühlen oder das Tool nicht ihren Anforderungen genügt, erfüllen sie zwar formal die Kennzahlen - aber reell erhöht sich die Qualität kaum.
Kann man gar nicht unterschätzen. Nicht nur bei Tests, sondern auch bei so lustigen Dingen wie ISO 9001: Wenn die Prozesse nicht auch gelebt werden, bringen sie im besten Fall nix oder schaden oft sogar.
Wenn man gute Leute hat ist es auch durchaus sinnvoll, sie bei der Gestaltung solcher Prozesse wie Tests mit einzubeziehen. Wenn da ein paar Leute bereits Erfahrung mit einem Werkzeug haben und es auch gerne einsetzen, wird es oft auch gerne von den anderen Entwicklern angenommen. Vor allem, wenn ihr das Team erst aufbaut und noch keine alten Zöpfe gewachsen sind.
Genauso die Frage, ob Tests von Testern oder Entwicklern gemacht werden, das finde ich eigentlich weniger wichtig. Gut ist es, wenn sich die Leute das suchen können was ihnen liegt, manche Entwickler lieben auch schlicht etwas Abwechslung. Manche Leute haben auch einen gewissen Spaß daran, die Dinge anderer kaputtzutesten.