Lassen Sie uns zuerst die Prioritäten klarstellen ...
In Ihrer Rolle als Kunde geht es nicht hauptsächlich um Unit-Tests
Wenn Sie Lieferanten einsetzen, die Software für Sie produzieren, sollten Sie sich wirklich keine Sorgen machen, wenn sie die eine oder andere Methodik anwenden. Es geht darum, eine Lösung zu finden, mit der Sie Ihre Ziele erreichen können. Das einzige, worauf Sie achten sollten, ist, ob diese Lösung akzeptabel ist oder nicht. Aus diesem Grund führen wir Abnahmetests durch, da es in Ihrer Verantwortung liegt, sicherzustellen, dass Sie das bekommen, was Sie wollen. Im entscheidenden Moment der Kundenakzeptanz wird das Geld aus den Taschen Ihres Unternehmens in die Tasche des Lieferanten überwiesen.
Sie könnten Unit-Tests als lieferbare Anforderung fordern, aber es gibt einige ererbte Probleme mit ihnen. Das Schwerwiegendste ist, dass es vorher keinen sicheren Weg gibt, um die Metriken zu bestimmen:
- Was ist die akzeptable Anzahl von Komponententests?
Sollte es 10 Tests geben? Wie wäre es mit 100 Tests? Wie wäre es mit 1000 Tests? Tatsächlich ist es am Anfang ziemlich schwierig zu bestimmen, wie viele Tests Sie benötigen werden. Die tatsächliche Anzahl ist wirklich unbestimmbar ... wie das Halteproblem ... aber wir lösen dieses Problem nicht.
Sie brauchen nur Software mit Komponententests, damit Sie die Entwicklung fortsetzen können. Unit-Tests sagen noch nicht, was Sie kaputt gemacht haben, aber sie eignen sich hervorragend, um Ihnen mitzuteilen, wenn der Code einen Regressionsfehler aufweist.
- Was ist eine akzeptable Codeabdeckung?
"100% natürlich!" du würdest denken. Leider ist diese Metrik irreführend. Sind Sie sich wirklich sicher, dass alles wie erwartet funktioniert, selbst wenn Sie 100% Code-Abdeckung hatten ? Es ist möglich, eine 100% ige Abdeckung zu haben, dies ist jedoch nicht möglich.
Was Sie wirklich tun müssen, sind Erkundungstests, dh Sie müssen jemanden finden, der wirklich gut darin ist, Dinge zu zerbrechen, und ihn die Tests durchführen lassen. Um die Fehler zu finden, an die noch kein Entwickler gedacht hat.
Auch 100% sind mit reinen Komponententests manchmal nicht zu erreichen, wenn Sie einige notwendige Performance-Hacks haben und Designmuster verwenden, die schwer zu testen sind (suchen Sie "singleton" und "tdd" in Ihrer bevorzugten Suchmaschine und Sie werden einige Beispiele finden).
Sie möchten, dass die gelieferte Software funktioniert und das Spezifikationsdokument ist Ihre einzige Garantie dafür.
Sie benötigen eine höhere Teststufe
Ihr Spezifikationsdokument muss irgendwie überprüft werden. Jeder Punkt muss mit Ihren Lieferanten besprochen werden, die klare Ziele und Akzeptanzkriterien haben. Eine gut funktionierende QS-Organisation (oder ein großartiger Tester, wenn Sie ein begrenztes Budget haben und nur über einen begrenzten Umfang verfügen) würde die Testfälle bereitstellen, um diese Akzeptanzkriterien zu überprüfen. Sie benötigen auch jemanden, der diese Akzeptanzkriterien überprüft.
Es gibt verschiedene Möglichkeiten, Ihre Ziele zu überprüfen. Wenn mir jemand sagt, dass Sie keine vernünftigen Qualitäts-, Leistungs- und Effizienzziele festlegen können, werde ich sie mit großen und schweren Büchern zu Erkundungs-, Leistungs- und Usability-Tests in den Kopf stoßen. Es mag leicht sein, die Ziele zu übertreffen, aber Wissen und Kommunikation helfen Ihnen dabei, realistische Ziele zu setzen.
Ich bin kein Anwalt, aber die meisten Projektverträge (die im Grunde die Mutter aller Spezifikationen für das Projekt sind), die ich gelesen habe, haben normalerweise Kriterien für die Fehlerquote, die festlegen, wie viele Fehler als akzeptabel gelten. Die Fehler werden in der Regel nach Schweregrad bestimmt. Show-Stop-Fehler, die von der Qualitätssicherung festgestellt werden, weisen eine geringe Toleranz auf, während kleinere Fehler eine hohe Toleranz aufweisen. In realen Projekten ist es schwierig zu fordern, dass Software 0 Fehler aufweisen muss. Fristen setzen dieser Praxis normalerweise ein Ende. In diesen Situationen müssen Sie mit dem Verhandeln beginnen.
Die meisten mitgelieferten Programme, die ich gesehen habe, werden normalerweise nicht mit Unit-Tests geliefert. Sie könnten argumentieren, dass die Lieferanten professionell genug sein sollten, um dies zu liefern. Der Hauptgrund, warum Sie Unit-Tests erhalten möchten, besteht darin, sicherzustellen, dass Sie keine Regressionsfehler bekommen und Refactoring aktivieren. In der Praxis werden bei Projekten mit engen Terminen sowohl der Lieferant als auch der Kunde den Umfang verringern und Unit-Tests würden normalerweise aus dem Fenster verschwinden und von der Liste der erforderlichen Leistungen gestrichen werden.
Es ist ein bisschen traurig, dass hochkarätige Open-Source-Software mit Unit-Tests geliefert wird, aber ein professioneller Software-Entwickler kann das nicht, oder?
Wann kümmere ich mich als Kunde um Unit-Tests?
Ich würde argumentieren, dass Sie sich nur dann wirklich für Unit-Tests interessieren, wenn die zu liefernde Software eine autarke Komponente ist, die nicht als eigenständiges Programm ausgeführt wird. Für diese ist der gröbste Test, den Sie durchführen können, ein Unit-Test . Klassenbibliotheken wären eine Art von Produkt, das zusammen mit Unit-Tests geliefert werden kann.