Umgang mit einem Entwickler, der Edge Cases in seiner Arbeit ununterbrochen ignoriert

25

Ich glaube, ich habe ein interessantes, ziemlich verbreitetes Problem mit einem der Entwickler in meinem Team. Der Typ ist ein großartiger Entwickler, arbeitet schnell und produktiv, produziert Code von ziemlich guter Qualität und so weiter. Guter Ingenieur. Aber es gibt ein Problem mit ihm - sehr oft kann er Randfälle in seinem Code nicht ansprechen.

Wir haben oft mit ihm darüber gesprochen und er versucht es, aber ich denke, er denkt einfach nicht so. Was am Ende passiert, ist, dass die Qualitätssicherung viele Probleme mit seinem Code findet und ihn immer wieder zur Entwicklung zurückschickt, was letztendlich dazu führt, dass Termine versäumt werden und alle im Team unglücklich sind.

Ich weiß nicht, was ich mit ihm machen soll und wie ich ihm helfen kann, dieses Problem zu überwinden. Vielleicht könnte jemand mit mehr Erfahrung raten?

Alex N.
quelle
11
Bitten Sie jemanden, seinen Code mit Unit-Tests zu verdecken.
Job
8
Die am besten qualifizierte Person, um den Code zu testen, ist der Autor.
16
@Developer Art: Stimme überhaupt nicht zu. Die schlechteste Person, die Code testet, ist die Person, die diesen Code entwickelt hat. Jeder hat blinde Flecken, aber die Person, die die Erstellung durchführt, hat den größten blinden Fleck in Bezug auf ihren Code.
James P. Wright
2
@Developer Art: Ich glaube, dass das Schreiben automatisierter Tests eine ziemlich häufige Rolle ist. In der Regel machen Sie das ein oder zwei Jahre lang, wenn Sie in der Firma, in der Sie sich befinden, nicht ganz bereit für die Prime Time sind. Es ist eine Art Fegefeuer.
Morgan Herlocker
19
Sie bezeichnen ihn als "großartigen Entwickler", "produktiv", "guten Ingenieur" und "guten Qualitätscode". Aber die Qualitätssicherung findet immer wieder Probleme mit seiner Arbeit. Würden Sie diese Begriffe wirklich verwenden, um jemanden zu beschreiben, der regelmäßig und konsequent arbeitet? Ich frage mich, ob diese Geschichte mehr zu bieten hat, da die Beschreibung des Einzelnen als Fachmann und die von ihm geleistete Arbeit überhaupt nicht übereinstimmen.
Thomas Owens

Antworten:

29

Fordern Sie ihn auf, automatische Komponententests für seinen Code zu schreiben. Schreibeinheitentests zwingen zum Durchdenken der Randfälle.

Einige Angaben:

  1. Damit er sich nicht herausgehoben fühlt, sollte dies für Ihr gesamtes Team eingerichtet werden. Fordern Sie jeden auf, automatisierte Komponententests für neuen Code oder Code zu schreiben, den er modifiziert.
  2. Fordern Sie, dass die Namen der Komponententests den Fall beschreiben, in dem sie getestet werden.
  3. Decken Sie die automatisierten Komponententests in der Codeüberprüfung auf hohem Niveau ab. Lassen Sie die Prüfer nach verpassten Testfällen suchen (dh nach den Randfällen, die er immer wieder übersieht). Nach einigem Feedback von seinem Team zu Fällen mit verpassten Kanten wird er wahrscheinlich lernen, diese vor der Überprüfung zu berücksichtigen.
  4. Erzwingen Sie diese Regel für das gesamte Team: Wenn QA einen Fehler findet, schuldet der verantwortliche Entwickler den automatisierten Test, der den Fehler bestätigt, und beweist, dass er ihn behoben hat. (bevor sie irgendeine andere Arbeit machen)
Matthew Rodatus
quelle
Amen, noch besser, verlangt, dass jeder zuerst seinen Code testet. Die Verwendung eines BDD-Frameworks lindert normalerweise die Schmerzen
George Mauer
@ George Gute Idee. TDD würde hier noch mehr helfen.
Matthew Rodatus
3
Bei Unit-Tests geht es nicht darum, Fehler zu finden - blog.stevensanderson.com/2009/08/24/…
Dainius
1
@Dainius Ich stimme zu. Der Komponententest erleichtert einem Entwickler das Durchdenken der Randfälle, die Fehler ausschließen (aber nicht identifizieren) können.
Matthew Rodatus
After some amount of feedback from his team about missed edge cases, he will probably learn to consider thoseEntwickler, die schlechte Praktiken haben, argumentieren oft, dass der zusätzliche Aufwand für gute Praktiken irrelevant ist (weil sie den Nutzen davon nicht sehen). Der Entwickler kann zwar zustimmen, wenn Sie zusätzliche Edge-Cases hinzufügen, dies bedeutet jedoch nicht, dass er dies für relevant hält oder ob er sie selbst hinzufügen wird.
Flater
23

Geben Sie ihm eine Checkliste, z

  • Null-Eingänge
  • Eingänge am extrem großen Bereichsende
  • Eingänge am extrem kleinen Bereichsende
  • Kombinationen
  • Eingaben, die angenommene Invarianten verletzen (zB wenn x = y)

Die QA-Mitarbeiter können Ihnen bei der Erstellung der Checkliste behilflich sein

Geben Sie die Checkliste an alle Entwickler weiter, nicht nur an diese.

Steven A. Lowe
quelle
1
Ein guter Punkt, dass alle Entwickler die Checkliste verwenden sollten. Das Herausgreifen eines Entwicklers kann zu schlechten Gefühlen führen. Und es könnte helfen, die Codequalität eines jeden zu verbessern.
FrustratedWithFormsDesigner
Gute Idee, obwohl ich neugierig bin, wie das aus der Sicht der Entwickler gesehen werden könnte. Ich bin in meiner Karriere als Entwickler nie auf diese Praxis gestoßen, daher ist es schwierig, die Reaktion abzuschätzen. Gibt es da irgendwelche Einblicke?
Alex N.
@Alex: Checklisten sind für manche Entwickler Routine und für andere eine schreckliche Beleidigung. Probieren Sie es aus und sehen Sie, was passiert. Wenn er beendet wird, verbessert sich Ihre Codequalität ;-)
Steven A. Lowe
4
Ihre Entwickler verwenden keine Checklisten? Wenn eine Checkliste Leben retten könnte, würden sie sie verwenden? Viele Ärzte tun das nicht und die Patienten leiden. Lesen Sie dies: newyorker.com/reporting/2007/12/10/071210fa_fact_gawande
Barry Brown
1
@Barry, ich habe nicht gesagt, dass sie nicht werden. Checklisten in diesem Fall klingen meiner Meinung nach wie ein Mittel gegen die Symptome eines Problems, nicht gegen das Problem selbst. Das Problem dabei ist Disziplin und Sorgfalt. Wenn das Problem die Komplexität eines Systems ist, das eine Notfallwartung mit einem hohen Maß an Verantwortung und Stress erfordert und zu einer verminderten Detailgenauigkeit führt, dann sind Checklisten (Piloten, Ärzte usw.) erforderlich. Aber das ist noch mehr einer philosophischen Debatte, denke ich, außerhalb des Rahmens dieser Frage.
Alex N.
17

Guter Ingenieur.

Okay.

Aber es gibt ein Problem mit ihm - sehr oft kann er Randfälle in seinem Code nicht ansprechen.

Es ist eine Qualität, die gute Ingenieure nicht teilen.


Das Beobachten von Randfällen ist ein Merkmal, das bei Menschen entweder vorhanden ist oder nicht. Es hat nichts damit zu tun, Ingenieur oder Programmierer zu sein. Die Entwicklung dieser Eigenschaft wird durch den kulturellen Hintergrund, das Lebensumfeld, die Ereignisse in der Kindheit und die Lebenserfahrungen beeinflusst. Dann wird die Einstellung einfach auf jede Arbeit angewendet, die eine Person tut.

Was Sie brauchen, ist herauszufinden, ob Ihr Typ von dem Typ ist, der diesen bestimmten Sinn nicht entwickelt hat (vielleicht noch). Es ist auch sehr wahrscheinlich, dass er sich aus irgendeinem Grund nicht darum kümmert. Sie müssen die gesamte Situation analysieren, ob er in seinem Job glücklich ist. Wenn nicht, sollten Sie vielleicht zuerst etwas tun, um ihm zu helfen.

Wenn er mit dem Job gut zurechtkommt, aber noch nicht die Gefahr von Randfällen erlebt hat, können Sie anfangen, ihn zu unterrichten. Wenn er es ernst nimmt, könnte er im Laufe der Zeit sein Verhalten ändern. Obwohl ich in diesem Fall skeptisch bin, können Sie es trotzdem versuchen.

Sollte sich herausstellen, dass es sich um eine Person handelt, die sich mit Randproblemen nicht auskennt, haben Sie möglicherweise nichts anderes übrig, als ihn aus dem Team zu entfernen. Diese Eigenschaft ist für die praktische Programmierung von wesentlicher Bedeutung. Leider würde ohne sie selbst ein großartiger Mensch keine gute Arbeit leisten.


quelle
6
+1 Dies ist eine Fähigkeit , die einige Leute haben ein paar Leute haben ein guter Programmierer zu lernen zu sein. Es gibt jedoch zwei Arten von Randfällen: Randfälle für geschäftliche Anforderungen ("Wenn wir 27 linke und 28 rechte Trainer bestellen, ist diese Reihenfolge wahrscheinlich falsch"), die in den Projektanforderungen und tatsächlich behandelt werden sollten Codieren von Edge Cases (Umgang mit ungültigen Eingaben, ständiges Durchlaufen von Listen, wenn ein Hashset schneller sinnvoll ist, wenn das Set größer als x ist usw.), über die Sie nur lernen müssen.
Ed James
Vielen Dank für Ihren Einblick. Schätze es wirklich. Sie sind hier in allen Belangen ganz richtig, auch wenn ich neugierig bin, ob er ein großartiger Mensch ist, dem jedoch etwas fehlt, das großartige Ingenieure großartig macht, wie kann ich ihn trotzdem dazu bringen, andere Arbeiten zu verrichten und ihn vielleicht in der Organisation zu halten Umzug in ein anderes Team oder so ... Obwohl ich nur vermute, dass ich diese Frage beantworten kann :)
Alex N.
Ich habe darüber nachgedacht, bin mir aber nicht sicher. Eine andere Rolle, um für diese Art von Person akzeptabel zu werden, sollte es nicht erfordern, auf Details zu achten, und es gibt nicht viele von ihnen in einem Softwareunternehmen.
Die Welt ist nicht so schwarz und weiß, wie dein erster Satz andeutet. Ich gehe davon aus, dass es Entwickler gibt, die einige Randfälle identifizieren können, aber nicht alle.
Mike Partridge
5

Könnten Sie früher im Prozess Code-Überprüfungen oder Design-Überprüfungen durchführen?

PSU_Kardi
quelle
4

Bringen Sie ihm bei, zuerst den Test zu programmieren. Koppeln Sie mit ihm. Sie schreiben die Testfälle und er schreibt den Code, um die Tests zu bestehen.

Kevin Cline
quelle
3

Könnte es ihm helfen, die Qualitätssicherung früh genug in die Entwicklung von Features einzubeziehen, um eine Liste von Randfällen zu erhalten, die zu Beginn behandelt werden müssen? Während manche meinen, dass der Entwickler nicht alles abdeckt, kann dies eine Möglichkeit sein, dies zu umgehen, wenn er die Grenzfälle übersieht, die ein Tester anfangs möglicherweise gut abfängt.

Die andere Idee, die ich hier hätte, ist, wie er dieses Problem sieht. Ist er wirklich genervt und verärgert über dieses Muster oder sieht er das nur als normal an und nicht als etwas, um das er sich bei der Lösung Sorgen machen muss? Zugegeben, dies erfordert viel Vertrauen und die Offenheit für seine Perspektive, aber ich denke, dass hier ein gewisses Maß an Einfühlungsvermögen vorhanden ist, das hilfreich sein kann, wenn Sie die Dinge aus seiner Perspektive betrachten können.

JB King
quelle
3

Es gibt unendlich viele Randfälle, die alle abdecken, ist unmöglich. Was ist, wenn jemand tut #define TRUE FALSE? Es fügt Randfälle hinzu, werden Sie sie auch überprüfen?

Außerdem würde ich nicht in Betracht ziehen, jede Funktion einer privaten Klasse oder einer internen Funktion gegen Narren zu prüfen.

Der Ansatz, den ich für Code wähle, der sehr solide und stabil sein muss, ist:

if(conditions_met)
{
DoStuff();
}
else
{
CrashAppAndDumpMemory();
}

Auf diese Weise erhalten Sie solide Anwendungs-Dumps in der Qualitätssicherung. Zum Zeitpunkt der Veröffentlichung ist die App solide und sicher.

Fehler zu umgehen ist schlecht. OK, Sie können eine Funktion speichern, wenn das Dateihandle null ist und null zurückgibt. In den meisten Fällen liegt jedoch irgendwo ein Entwurfsfehler vor, und ein Absturz der App ist eine bessere Methode, um Sie zu zwingen, die Ursache zu finden. Die meisten Edge-Fälle maskieren den Fehler nur, indem sie ein Problem verbergen, beispielsweise, dass die Schaltfläche nicht mehr funktioniert. Absturz sagt Ihnen, dass einige Annahmen über das Produkt falsch sind, und Sie müssen die Logik, die den Absturz verursacht hat, überarbeiten.

Coder
quelle
#define TRUE FALSE ist kein Randfall, sondern eine Straftat.
gnasher729
1

Wenn es sich um einen Randfall handelt, muss dieser überhaupt berücksichtigt werden? Wenn die Randfälle wichtig sind, müssen die Randfälle in die Anforderungen / Features / User Story eingespeist werden.

Wenn die Edge-Cases als Teil einer Arbeit betrachtet wurden und Geräte installiert werden müssen, sollten sie Teil des Workitems sein. Per Definition ist das Workitem erst dann vollständig, wenn der Mechanismus für die Handhabung des Edge-Cases erfüllt ist an Ort und Stelle.

Dies gibt Ihnen als Teamleiter etwas zum Abhaken, nachdem die Arbeit während der Diskussion nach der Arbeit abgeschlossen wurde, und es gibt dem Entwickler etwas zum Abhaken, wenn er die Arbeit abgeschlossen hat.

Bronumski
quelle
Es gibt immer Randfälle. Wenn jemand behauptet, dass die Randfälle niemals auftreten, sind dies nicht die richtigen Randfälle.
Barry Brown
1
@Barry Brown Ich stimme zu, dass es immer Edge-Fälle gibt, aber es gibt einen Unterschied zwischen wichtigen Edge-Fällen, die die Stakeholder als wichtig erachten, die wir als Szenarien bezeichnen können, und Edge-Fällen, die ein Entwickler als wichtig erachtet. Wenn ein Stakeholder der Meinung ist, dass etwas wichtig ist, sollte es in der Planungssitzung besprochen und als Szenario in eine User Story aufgenommen werden, und es sollte nicht dem Entwickler überlassen bleiben, darüber nachzudenken. Dies sollte eine angemessene Anforderung an die Aufgabe sein. Es ist sehr zeitaufwendig und nicht notwendig, bei jeder einzelnen nicht öffentlichen Methode eine Nullprüfung gegen Parameter durchzuführen.
Bronumski
1

Das Auffangen von Randfällen ist der Grund, warum QA existiert. Programmierer haben die Verantwortung, die Arbeit rechtzeitig zu verdrängen. Die ganze Zeit auf der Suche nach Randfällen zu verbringen, ist sehr ineffizient. Wenn Sie einen einigermaßen schnellen Iterationszyklus haben, sollte dies überhaupt kein Problem sein. Kantenfälle sind nahezu unendlich zahlreich. Wenn es ein Problem mit "Core" -Fällen geben würde, wäre ich ein bisschen besorgt. So wie Entwickler Experten in der Entwicklung sind, sollte ein Tester auch Experten im Testen sein. Wenn ein Tester ein Problem findet, sendet er es an die Entwicklung zurück. Der Entwickler behebt das Problem. Problem gelöst. Die Zeit, die ein Entwickler benötigt, um jeden Randfall aufzuspüren, ist viel länger, als der iterative Testzyklus dauern sollte. Beachten Sie auch, wenn ich über Tests spreche, meine ich nicht White-Box-Unit-Tests, sondern ausschließlich Black-Box-Tests.

Morgan Herlocker
quelle
1
Das ist wirklich nicht die richtige Antwort. Es ist eine schlechte Praxis, für die Ausgabe von Arbeiten von halber Qualität belohnt zu werden. Das Entwicklungsteam sollte als Ganzes für qualitativ hochwertige Arbeit verantwortlich sein.
David
Anständige Entwickler müssen nicht nach Edge Cases suchen . Einige Codes sind so geschrieben, dass sie keine Kantenfälle enthalten. In anderen Fällen sind Kantenfälle offensichtlich. Code, der keine Kantenfälle behandelt, ist unvollständiger Code.
gnasher729
0

Dies ist einer der Fälle, in denen meiner Meinung nach testgetriebene Entwicklung Abhilfe schafft, weil es hilfreich ist, in Randfällen und allem zu denken, was den Code beschädigen kann.

Billal Begueradj
quelle