Soll ich von Programmierern Unit-Tests verlangen? [geschlossen]

26

Ich arbeite an einem Ort, an dem wir viele IT-Projekte kaufen. Derzeit erstellen wir einen Standard für Systemanforderungen für die Anforderung zukünftiger Projekte. In diesem Prozess diskutieren wir, ob wir von unseren Lieferanten automatisierte Komponententests verlangen können oder nicht.

Ich bin der festen Überzeugung, dass ein ordnungsgemäßer automatisierter Komponententest die einzige Möglichkeit ist, die Qualität und Stabilität des Codes zu dokumentieren. Alle anderen scheinen zu glauben, dass Unit-Tests eine optionale Methode sind, die nur den Lieferanten betrifft. Daher werden wir keine Anforderungen an automatisierte Komponententests, kontinuierliche Tests, Abdeckungsberichte, Inspektionen von Komponententests oder dergleichen stellen. Ich finde diese Politik äußerst frustrierend.

Bin ich hier total aus der Reihe?

Bitte liefern Sie mir Argumente für eine der Meinungen.

Morten
quelle
63
Das Problem bei "erzwungenen" Unit-Tests ist, dass es sich mit ziemlicher Sicherheit nur um Token-Versuche handelt. Sie erhöhen nicht die Qualität Ihrer Arbeit, sondern nur die Kosten. Sofern die Entwickler nicht glauben / wissen, dass ihnen Unit-Tests beim Schreiben von Code helfen, ist es höchstwahrscheinlich kontraproduktiv, sie dazu zu zwingen.
Joachim Sauer
10
Sollten Sie sich vielleicht nicht überlegen, ob sie bereits Tests durchführen, wenn Sie sich für einen Lieferanten entscheiden?
Bart
2
Hmm, ich fühle deinen Schmerz. Wenn dies als unwichtig erachtet wird, hoffe ich, dass Ihr Lieferant volle Unterstützung bietet, wenn es nicht wie gewünscht / erwartet funktioniert. Ich persönlich würde gerne zumindest ein gewisses Maß an angemessenen Softwareentwicklungspraktiken sehen, ohne sie erzwingen zu müssen.
Bart
21
Ich bin der festen Überzeugung, dass ein ordnungsgemäßer automatisierter Komponententest die einzige Möglichkeit ist, die Qualität und Stabilität des Codes zu dokumentieren. - Immer wenn jemand angibt, dass es nur einen Weg gibt, etwas zu tun, wird eine rote Fahne gehisst. Es gibt viele andere Möglichkeiten, dies zu erreichen. Einschließlich einiger, an die wir noch nicht einmal gedacht haben.
SoylentGray
8
@Chad: Deshalb stelle ich diese Frage: um meinen festen Bilief herauszufordern :-)
Morten

Antworten:

46

Ich bin der festen Überzeugung, dass ein ordnungsgemäßer automatisierter Komponententest die einzige Möglichkeit ist, die Qualität und Stabilität des Codes zu dokumentieren.

Die Sache ist, dass Sie nicht (oder zumindest sehr selten) einen ordnungsgemäßen automatisierten Komponententest erhalten, indem Sie ihn den Menschen aufzwingen. Das ist ein guter Weg, um beschissene Tests zu bekommen und die Kosten für die Projekte zu erhöhen.

Persönlich würde ich mich auf eine Nachfrage oder SLA konzentrieren, die Qualität beinhaltet; unabhängig davon, wie es erreicht wird. Vor 10 Jahren waren Unit-Tests bestenfalls selten. Sie möchten Ihren Lieferanten in 10 Jahren keine Handschellen anlegen, wenn wir bessere Methoden zur Qualitätssicherung haben, aber Ihre veralteten Richtlinien erfordern, dass sie die alte Methode anwenden.

Telastyn
quelle
6
+1 Ich kann schlechte Komponententests schreiben, die scheinbar alles testen, aber nicht so funktionieren, wie sie sollten, um tatsächlich alles zu testen. Das fügt keine Qualität hinzu oder beweist nichts.
SoylentGray
1
@Chad Ja, das ist sicherlich wahr, aber der Kunde könnte auch Kennzahlen für die Codeabdeckung und auch den Quellcode für die Tests anfordern, wenn er glaubt, zwischen einem riesigen Integrationstest, der die Abdeckung erhöht, und echten Komponententests unterscheiden zu können. Auch wenn der Kunde diese Anforderungen stellt, können die Entwickler das System trotzdem spielen, es wird nur ein bisschen herausfordernder.
Chris O
3
@ChrisO - Genau das, was man spielen kann, beweist, dass es nicht den Anforderungen des OP entspricht.
SoylentGray
1
@JarrodRoberson - Ja, die Codeabdeckung ist nur eine statistische Metrik und garantiert keinesfalls, dass es sich bei den automatisierten Tests tatsächlich um gute automatisierte Tests handelt. Das Management und einige Kunden lieben statistische Kennzahlen.
Chris O
1
@MatthewFlynn: Die Tests werden mit den nachgebildeten Daten / Strukturen ausgeführt, ohne Ausnahmen zu verursachen. Viele Dinge laufen auf dem glücklichen Weg mit erwarteten Inputs großartig.
Telastyn
18

Persönlich denke ich, dass Sie in Ihrem Fall stattdessen in Akzeptanztests denken sollten:

  • Sie erhalten eine Black Box und erwarten, dass sie sich auf eine bestimmte Art und Weise verhält.
  • Sie werden erst dann bezahlen, wenn dies der Fall ist.
  • Schreiben Sie Komponententests, in denen Sie das Verhalten trainieren, das Sie sehen müssen, und wenn sie fehlschlagen, müssen sie es beheben.

Beachten Sie auch, dass dies Vertrauenssache ist. Wenn Sie Ihrem Lieferanten nicht vertrauen, müssen Sie den Quellcode beschaffen, überprüfen und selbst kompilieren. Alles , was weniger als das bedeutet , dass Sie zumindest das Vertrauen sie einige .

user1249
quelle
Die "Black Box" -Hypothese ist falsch - siehe Mortens Kommentar zu Garret Halls Antwort.
Doc Brown
Wenn ich weiß, dass der Lieferant Unittesting einsetzt, würde ich ihm eher vertrauen. Aber ist das vernünftig von mir? Mein Argument ist (nachdem ich selbst viel Code erstellt habe), dass der Preis für die Behebung eines Fehlers oder die Erweiterung einiger Funktionen viel geringer ist, wenn Ihr Code durch geeignete Tests abgedeckt wird. Das macht es zu meinem Geschäft, ob sie Unit-Test oder nicht. Aber ich bin nicht ganz sicher, ob dies eine unfaire Annahme ist (?)
Morten
@ DocBrown Ich verstehe. Stimmen Sie nicht zu, dass dies auch gilt, wenn es sich um eine weiße Box handelt?
1
@Morten Da Sie am Entwurf beteiligt sind, würde ich vorschlagen, TDD zum Entwerfen der APIs (einschließlich der Fehlerbedingungen) zu verwenden und es dann dem Programmierteam zu überlassen, damit die Tests bestanden werden.
@ ThorbjørnRavnAndersen: Der Punkt ist, dass in diesem (als "White Box" bezeichneten) Szenario das OP nicht nur "funktionale Korrektheit" will, sondern dass der Lieferant qualitativ hochwertigen Quellcode liefert, umgeben von Komponententests, um sicherzustellen, dass der Lieferant funktioniert in einer bestimmten Weise. Was er definitiv nicht will, ist, diese Unit-Tests selbst zu schreiben.
Doc Brown
8

Ich bin der festen Überzeugung, dass ein ordnungsgemäßer automatisierter Komponententest die einzige Möglichkeit ist, die Qualität und Stabilität des Codes zu dokumentieren.

Es überrascht mich, wie verbreitet dieses Denken ist. Automatisiert, ja. Einzelprüfung (allein), nein. Automatisierte Softwaretests bieten weit mehr als nur Komponententests. Was ist mit Integration, System, Funktionalität, Qualitätssicherung? Aus einigen Gründen neigen die Leute dazu zu denken: "Okay, wir haben also richtige Komponententests. Mit dem Testen fertig, nenne es Freitagabend!" . Unit-Tests sind nur der Anfang.

Wie auch immer, zurück zum Thema. Ich stimme anderen zu, die sagen, dass das Erzwingen von etwas auf irgendjemanden wahrscheinlich zu Ergebnissen führen wird, die den gewünschten entgegengesetzt sind. Sie wissen nie, wie ein Team arbeitet, vielleicht haben sie eine Testabteilung im Wert von Millionen Dollar und haben nie einen Einzeltest geschrieben.

Bei meinem ersten Job habe ich an einem Ort gearbeitet, an dem wir 0 Unit-Tests hatten (wir waren ein Haufen Junioren, die mehr oder weniger ernsthafte Dinge anstrebten). Ob Sie es glauben oder nicht, es hat funktioniert. Sicher, niemand war sich darüber im Klaren, warum dieser Fehler behoben wurde oder was dieser Fehler behoben hat , aber es hat funktioniert. Es gab Zeiten, in denen ein absolut zufälliger Fehler auftauchte, aberBaseballschläger und die Gefahr, dass Ihre Wohnung niedergebrannt wirdEinige zusätzliche Stunden können Wunder wirken. Vielleicht verwenden Ihre Lieferanten ähnliche Techniken ?

km
quelle
6

Ich bezweifle sehr, dass Ihr Management bereit ist, für ordnungsgemäße Einheitentests in einem Vertrag zu zahlen. Ein ordnungsgemäßer Komponententest kostet genau so viel wie der von ihnen getestete Code, bietet dem Endbenutzer jedoch nur einen geringen wahrgenommenen Wert, sodass sie nicht als gleichwertig eingestuft werden. Keine Qualitätsentwicklungsfirma wird bereit sein, den Entwicklungsaufwand für Komponententests zu geringeren Kosten als für andere Teile aufzuwenden, da sie sich nicht auf die Arbeit auswirken, sondern mehr als zwei Verträge finden können, die die gleiche Zeit in Anspruch nehmen Unit-Test-Anforderungen.

Anspruchsvolle Komponententests werden Ihre erhaltenen Angebote wahrscheinlich auf ein unangemessenes Maß ansteigen lassen, und es wird wahrscheinlich das erste Zugeständnis sein, das gemacht wird, um einen niedrigeren Preis zu erzielen.

Ryathal
quelle
Eigentlich kosten richtige Komponententests mehr als 100% des Codes, den sie testen, aber Sie sind in finanzieller Hinsicht auf dem richtigen Weg. Unsachgemäße Unit-Tests kosten sogar mehr als die richtigen!
5

Die Kosten für nicht durchgeführte Komponententests hängen davon ab, in welchem ​​Umfang Sie den Code selbst erweitern / unterstützen. Es wäre auch wichtig, Teile des Codes zu untersuchen, um sich ein Bild von der Qualität zu machen.

Wenn Sie die Projekte nur kaufen, um sie wie eine Drittanbieter-Bibliothek zu verwenden, und nicht glauben, dass Sie sie ändern werden, ist das Risiko von Code mit geringerer Qualität geringer, solange er tatsächlich funktioniert.

Dies sind letztendlich Geschäftsentscheidungen, obwohl Sie sicherstellen müssen, dass jeder, der die Entscheidung trifft, auch über die technische Bewertung informiert ist. Wenn Sie es dem Management erklären müssen, erklären Sie es wie den Kauf eines Gebrauchtwagens. Letztendlich ist es Sache des Käufers, zu entscheiden, ob es sich lohnt, aber es ist eine gute Idee, es zu einem Mechaniker zu bringen, damit Sie wissen, dass Sie keine Zitrone bekommen.

Garrett Hall
quelle
Wir kaufen sie als Projekte. Dies bedeutet, dass wir uns voraussichtlich am Entwicklungsprozess beteiligen, den Code besitzen und den Code höchstwahrscheinlich mehrmals erweitern werden. Das Wichtigste: Die Erweiterung wird nicht immer von der Firma gemacht, die die Version 1.0
Morten
@Morten: Dann sollten Sie Unit-Tests fordern, solange Ihr Unternehmen sie nutzen und auch erweitern möchte. Um Ihre Kollegen zu überzeugen, erklären Sie ihnen, dass Unit-Tests nur Beispiele für die Verwendung des Codes sind, den Sie verwalten möchten. Sie sind daher ein wesentlicher Bestandteil der Dokumentation. Ich denke, sie betrachten "Dokumentation" auch nicht als "optional".
Doc Brown
2

Sie bezahlen, Sie können verlangen, was Sie wollen, einschließlich Kopien / Berichte aller ihrer Unit-Tests.

Sie könnten sogar die Tests oder zumindest die Testspezifikationen selbst schreiben.

Ich stimme Ihrer Ansicht darin zu, dass dies ein sehr gutes Maß für die Codequalität ist. Wenn ein Lieferant diese Forderung ablehnte, würde er Alarmglocken läuten. Warum wollten sie das nicht - sie haben niedrige Qualitätsstandards und nehmen Abkürzungen an?

NimChimpsky
quelle
1
Würde ich nicht getesteten Code wollen? Kann irgendjemand große Teile einer stabilen, zuverlässigen Software ohne Unit-Tests produzieren?
Morten
3
@Morten: Sie möchten keinen ungetesteten Code - aber der automatische Unit-Test ist nicht die einzige Möglichkeit, Code zu testen. Dies ist nur ein Baustein, um unter anderem die Codequalität zu verbessern.
Doc Brown
3
@Morten: Unit-Tests sind nicht die einzige Möglichkeit, Code zu testen. Vor 1996 hat niemand formale Unit-Tests durchgeführt, aber die Software hat noch funktioniert.
Gbjbaanb
1
@gbjbaanb Meinst du, nur weil es neu ist, ist es nicht nützlich? : p Ich habe an Software mit und ohne Komponententests gearbeitet, und diejenigen mit Komponententests waren bedeutend einfacher und schneller zu schreiben (hauptsächlich, weil das Auffinden und Beheben von Fehlern einfacher war).
Setzen Sie Monica am
1
es ist nicht schwarz und weiß, getestet gegen ungetestet. Das Fehlen automatisierter Tests bedeutet nicht, dass der Code nicht getestet wurde, sondern nur, dass er nicht automatisiert wurde. Ich habe hunderttausende Zeilen automatisierten Testcodes gesehen, mehr als dreimal so viel wie der tatsächliche Code und das Projekt waren voller Fehler. Ich habe 600.000 Zeilen komplexen gleichzeitigen Codes mit automatisierten ZERO-Komponententests gesehen, die jahrelang ohne Ausfallzeiten oder Fehler in der Produktion liefen.
1

Sie haben vollkommen Recht, dass Ihr Projekt automatisierte Komponententests, kontinuierliche Tests, Abdeckungsberichte und Inspektionen von Komponententests erfordert.

Allerdings Anspruchsvolle werden die Dinge erreichen nicht die Ergebnisse , die Sie wünschen , wie andere detailliert haben.

Ihre Herausforderung ist es, Menschen zu erklären und zu überzeugen - eine viel härtere Fähigkeit!

Ich beginne zunächst mit dem Management und erkläre die Vor- und Nachteile des Testens und der anschließenden Auszahlung. Bitte achten Sie darauf, dass Sie die Emotionen hinter Aussagen wie "Ich schreibe EIGENE Unit-Tests" (Großschreibung Ihrer) nicht mitteilen. Sie wollen nicht die Worte "schreien" (wie ALL CAPS andeutet), um die Leute zu überzeugen und zu überzeugen, dass sie selbst die richtige Lösung auswählen können.

Letztendlich würde ich, wenn Sie diese Methoden nicht einführen können und sie dort, wo Sie sich gerade befinden, umarmen lassen, und wenn Sie sie genauso leidenschaftlich mögen wie Sie sagen (was gut ist!), Zu einem anderen Unternehmen wechseln, da es viele gibt, die diese Dinge wertschätzen und würde Sie an Bord begrüßen. Stellen Sie einfach sicher, dass Sie in Interviews ganz vorne mit dabei sind, damit sie wissen, wo Ihre Leidenschaften liegen und ob Sie zu uns passen.

Michael Durrant
quelle
Frage war für Fremdanbieter; Die Antwort bezieht sich auf das interne Team.
JohnMcG
1

Das Erzwingen automatisierter Tests bei jemandem führt nicht zu den gewünschten Ergebnissen, wie @Joachim Sauer und @Telastyn in ihren Kommentaren hervorgehoben haben. Für viele Menschen ist das automatisierte Testen von Einheiten eine große Veränderung in ihrem Denken. Weil viele Leute Code schreiben, der funktioniert, aber nicht sehr testbar ist. Ich könnte eine ASP.NET-Webseite schreiben, auf der sich die gesamte Logik, die Abfrage der Datenbank, der Geschäftsregeln, der Objekte usw. im Code befindet. Wird die Seite funktionieren? Ja. Ist es mit automatisierten Komponententests testbar? Absolut nicht. Wenn ein Lieferant nicht über automatisierte Komponententests verfügt, ist es sehr anstrengend zu lernen, wie Komponententests ordnungsgemäß geschrieben werden, und als Ergebnis dessen muss der Code neu geschrieben oder neu faktorisiert werden, um die Testbarkeit zu verbessern. Wahrscheinlich geben sie diese Kosten an Sie weiter.

Tatsache ist, dass der Lieferant Ihnen ein Produkt gibt, sei es eine DLL oder eine Windows-Anwendung, und Sie erwarten, dass es in 99% der Fälle funktioniert. Sicher gibt es hier und da Fehler, aber zum größten Teil sollte es funktionieren. Dies ist eine vernünftige Erwartung, insbesondere wenn der Lieferant Ihr Geschäft behalten möchte. Wenn es sich um eine Black Box handelt, spielt es keine Rolle, wie sie sie zum Laufen bringen, sie könnten eine menschliche Welle von Testern oder einen Raum voller Affen gebrauchen, die nach dem Zufallsprinzip auf Tasten schlagen. Solange es funktioniert. Sie müssten Ihnen jedoch eine andere Dokumentation zur Verwendung zur Verfügung stellen.

Wenn sie Ihnen jedoch den Quellcode gaben, damit Sie ihn ändern können, würde ich Unit-Tests erwarten. Ich würde nicht mit einem Unternehmen zusammenarbeiten, das keine Komponententests anbietet. Woher willst du sonst wissen, dass eine Modifikation, die du vornimmst, nicht das ganze Ding abspritzt?

bwalk2895
quelle
1

Unit-Tests sind ein Hinweis darauf, wie der Lieferant während des Entwicklungszyklus mit Risiken umgeht. Wer Unit-Tests einsetzt, schätzt das Risiko und die Qualität dieser Tests ist ein Hinweis darauf, wie viel Risiko managt wurde.

Unit-Tests geben jedoch keinen Aufschluss darüber, welchen Grad an Risiko das Projekt zu bewältigen versucht. Es spielt auch keine Rolle bei der Reduzierung des Risikos, das durch schlechte Programmierpraktiken entsteht.

Daher können Sie einen Lieferanten haben, der über solide Testpraktiken verfügt, aber weiterhin hochriskanten Code schreibt, während ein anderer Lieferant keine Tests durchführt, aber einen Code mit geringem Risiko schreibt. Wenn die beiden Lieferanten dasselbe Produkt anbieten, ist es am besten, sich an den Lieferanten mit geringem Risiko zu wenden.

Dies kann nur durch Befragung, Betreuung und Kenntnisnahme der Persönlichkeiten und Fähigkeiten der mit diesem Lieferanten befassten Personen beurteilt werden.

Reactgular
quelle
0

Wenn man sich mit anderen einverstanden erklärt, dass die Forderung nach Einheitentests zu Testzwecken führen würde; Etwas, das genau dem widerspricht, was Sie wollen.

Bei der Überprüfung Ihrer Lieferanten; Fragen Sie sie nach ihrem Entwicklungsprozess , da das Testen nur ein Teil dieses Prozesses ist.

Haben sie einen automatisierten Build-Prozess? Folgen sie einem Management-Paradigma? Haben sie gut ausgebildete Tester und ein unabhängiges Qualitätssicherungsteam ? Wie wäre es mit Dokumentationsstandards?

Diese helfen Ihnen dabei, die Gesamtqualität ihres Prozesses und damit die Qualität ihrer Produktion zu beurteilen.

Burhan Khalid
quelle
0

Es scheint mir, dass die Aufnahme dieser Anforderung wenig praktischen Nutzen hätte, da es unmöglich wäre, sie durchzusetzen.

Sie können den Code für die tatsächlichen Tests oder einen Bericht darüber anfordern, welche tatsächlichen Tests ausgeführt und bestanden wurden. Wenn es sich um ein proprietäres Projekt handelt, möchte der Anbieter das wahrscheinlich nicht liefern, da es wahrscheinlich sehr auf die Details des Codes hindeutet, und es kann strikt sein, dass er gezwungen ist, Implementierungsdetails auf niedriger Ebene bereitzustellen und mitzuteilen, wie sie ausgeführt werden sollen Arbeitsplätze. Irgendwann muss es Vertrauen geben.

Wenn Sie dies nicht tun, könnten sie Sie entweder umhauen, aber das Kästchen neben "führt eine Reihe von Komponententests durch" markieren, um die Anforderung zu erfüllen, indem ein einzelner Test geschrieben wird, der bestanden wird, wenn das Dienstprogramm kompiliert und ausgeführt wird, oder ein ähnlicher Test Anstrengung.

Obwohl automatisierte Komponententests eine lobenswerte Praxis sind, halte ich es nicht für sinnvoll, von externen Anbietern darauf zu bestehen.

JohnMcG
quelle
0

Wie viele Leute bereits betont haben, wird es wahrscheinlich nicht zu qualitativ hochwertigen Ergebnissen führen, wenn Anbieter gezwungen werden, Komponententests (oder besser eine Kombination aus automatisierten Komponententests und Integrationstests) zu schreiben, um einen Vertrag zu erfüllen. Auf der anderen Seite stimme ich zu, dass das automatisierte Testen die derzeit bei weitem beste Methode ist, um die Qualität des Codes sicherzustellen.

Ich denke , Code mit schriftlicher Einheit Tests ist viel einfacher zu pflegen als Code, der zuerst geschrieben wurde und hatten Unit - Tests später hinzugefügt. Es erzwingt Modularität und minimale Abhängigkeiten. Integrationstests sind auch erforderlich, um die Korrektheit des Codes zu überprüfen, sie haben jedoch nicht die gleichen Auswirkungen auf die Qualität des Codes, wie er geschrieben wurde. Im Wesentlichen könnten automatisierte Integrationstests nachträglich hinzugefügt werden, aber Unit-Tests haben den größten Einfluss, wenn sie mit dem Originalcode geschrieben werden.

Mein Rat für Ihre Situation ist, nach Anbietern zu suchen, die es vorziehen, Code mit Unit-Tests zu schreiben, und sie gegenüber Anbietern auszuwählen, die dazu neigen, Code mit Unite-Tests nicht zu schreiben. Wenn das Management dafür aufkommt, fügen Sie automatisierte Tests in den Vertrag ein, jedoch NUR, WENN DER VENDER ZUM SCHREIBEN VON CODES MIT EINHEITSTESTS VERWENDET WIRD.

Tony
quelle
0

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.

Spoike
quelle
-1

Woher wissen Sie, dass die Anbieter keine Komponententests schreiben?

Vielleicht hatten das Management und der Verkäufer eine Besprechung und der Verkäufer sagte, der Code kostet $ X und die Unit-Tests kosten $ Y. Penny Pinching Management sagte, wir wollen nur den Code.

Der Anbieter hat entschieden, Unit-Tests trotzdem zu schreiben (wegen der Qualität) und sie nur nicht mit Ihnen zu teilen (wegen des Wettbewerbsvorteils).

Jetzt müssen Sie einige wichtige Anpassungen an der Software vornehmen. Da Sie den Code besitzen, können Sie ihn selbst erstellen oder zu einem wettbewerbsfähigen Preis vermieten (nicht unbedingt beim ursprünglichen Anbieter). Da Sie die Komponententests jedoch nicht gekauft haben, kann der ursprüngliche Anbieter vergleichbare Qualitätsarbeiten zu einem für Wettbewerber günstigeren Preis ausführen.

Emory
quelle
-1

Es gibt viele Projekte, die sehr erfolgreich sind, obwohl sie keine Komponententests verwenden. Schauen Sie sich nur den Linux-Kernel an, es ist ein gigantisches Projekt mit einer Komplexität, die weit über das hinausgeht, was Sie in einem normalen Projekt finden würden, und es funktioniert immer noch. Wenn das Ergebnis also eine gute Software ist, sollte es Sie nicht interessieren, wie sie diese erreicht hat.

Konstantin Weitz
quelle
-1

Nein, Sie müssen nicht unbedingt vollständige und automatisierte Testeinheiten anfordern. Es ist wichtiger, dass sie Ihnen die richtigen Dokumente für die Teststrategie liefern. Auf diese Weise geht es uns gut.

Stackoverclan
quelle