Ich arbeite an einem neuen Projekt und der Code wird von mindestens zehn Softwareentwicklern geteilt und geschrieben. Es gibt einige Module, die lesbar sind, und einige Teile, die vollständig aus Spaghetti-Code bestehen.
Ich habe versucht, diesen Punkt zur Sprache zu bringen und erwähnte dies unserem Kunden und Architekten und schlug auch Unit-Tests vor. Unser Kunde unterstützt diese Dinge nicht und ist nur an der Entwicklung von Funktionen interessiert und kümmert sich nicht um Qualität und Regression.
Unser Architekt und ich sind uns einig, dass Komponententests uns helfen werden, die Regression in Schach zu halten, bevor wir neue Funktionen einführen.
Wie bilde ich unseren Kunden auf, damit das Projekt nicht bald implodiert, da viele Leute daran arbeiten und es besser spät als nie ist, einen Prozess einzubauen, der zu besserer Qualität führt?
Sie gehen mit Ihrem Kunden zu sehr ins Detail.
Vermutlich sind sie zu Ihnen gekommen (also zu Ihrem Team oder Ihrer Firma), weil Sie mehr über Softwareentwicklung wissen als sie. Es hört sich so an, als ob Sie jetzt versuchen, sie über Softwareentwicklung aufzuklären, um ihnen zu helfen, die Vorteile von Komponententests zu verstehen. Sie sollten stattdessen einfach die Zeit zum Erstellen geeigneter Komponententests in Ihre Schätzungen für neue Funktionen einbeziehen.
Wenn Sie gefragt werden, warum die Schätzungen höher erscheinen als zuvor (oder wenn Sie es vorziehen, im Voraus transparenter zu sein), erklären Sie, dass die höhere Investition im Voraus zu niedrigeren Wartungskosten und damit zu einem schnelleren Zugriff auf mehr Funktionen in der Zukunft führt.
Dies eröffnet Ihrem Kunden die Möglichkeit, jetzt eine Präferenz für kostengünstigere Funktionen zu äußern, mit dem Risiko hoher Wartungskosten in der Zukunft. Wenn es sich um einen internen Kunden handelt, eskalieren Sie das Problem, um sicherzustellen, dass das Unternehmen von diesem Ansatz überzeugt ist. Wenn der Kunde ein externer Kunde ist, hat er durchaus das Recht, sein Geld auf diese Weise auszugeben. Solange es Ihnen nichts ausmacht, Fehler zu beheben, ist Ihre zukünftige Anstellung sicher.
Machen Sie sich vorerst keine Gedanken über Vorschläge zum Refactoring von vorhandenem Spaghetti-Code. Wenn Ihr Kunde die Vorteile des Testens neuer Funktionen sieht, wird er später eher eine Investition in die vorhandene Codebasis unterstützen. Wenn Sie am Ende keine neuen Funktionen testen, gibt es keine Möglichkeit, Tests nachzurüsten (siehe vorheriger Kommentar zu zukünftigen Wartungszahlungen in diesem Fall).
Wenn ein Profi jemandem eine erste Schätzung gibt, sollte es für die „richtige“ Arbeit sein. Für Software, die nicht einmalig ist, umfasst dies normalerweise Untersuchungs-/Designzeit, Komponententests, Integrationstests, QA-Zeit und alle anderen notwendigen Teile der Entwicklung von qualitativ hochwertigem Code. Wenn die anfängliche Schätzung zu teuer ist oder zu lange dauert, dann verhandeln Sie, welche Funktionen im Umfang reduziert oder weggelassen werden, oder einen verkürzten QA-Zyklus mit erhöhtem Risiko.
Unit-Tests fallen zu lassen, wäre nichts, was ich auf den Tisch legen würde, da ich sie als Teil der normalen Entwicklung betrachte. Ich könnte anbieten, einen „schnellen und schmutzigen“ Prototyp eines Features zu erstellen, wenn wir uns einigen, dass wir den Prototyp wegwerfen und es richtig machen, wenn der Kunde dieses Feature möchte.
Ich stelle keinen Klempnermeister ein und schätze dann die Notwendigkeit jedes der Schritte, die er tut, um die Arbeit zu erledigen. Warum ist Ihr Kunde so stark in Ihre Entwicklung involviert? Wenn Sie ein neues Feature erstellen, schätzen Sie die Zeit, um es richtig zu machen, einschließlich Unit-Tests für das neue Feature und machen jeden Legacy-Code, den Sie berühren, robuster.
Es ist unrealistisch zu erwarten, dass ein Kunde dafür bezahlen möchte, dass Ihr Team Ihren Code bereinigt, um dem Team die Arbeit zu erleichtern, weil sich das Team nicht die Zeit genommen hat, beim ersten Mal gute Arbeit zu leisten.
Das Team muss damit beginnen, Unit-Tests zu berücksichtigen und stinkenden Code in seine Schätzungen für alles weitere einzubeziehen, anstatt zu versuchen, den Kunden dazu zu bringen, dafür zu zahlen, dass alter Code auf die Qualität gebracht wird, die er hätte erhalten sollen, als er für das Schreiben bezahlt wurde.
Wie motiviere ich unseren Kunden, der Unit-Tests abgeneigt ist und nur Features und Bugfixes will?
Ich denke, Sie sagen: "Es kostet nicht mehr Geld oder dauert länger." Aber ist das wahr? Manchmal ist es. Manchmal ist es nicht.
Der Kunde wird Ihnen nicht zuhören, weil Sie nicht ganz oben in der Hierarchie stehen. Der Architekt hat bereits vergeblich versucht, sie zu überzeugen, also haben sie keinen Grund, Ihnen zuzuhören. Soweit Sie wissen, sagte der Architekt dem Kunden sogar, dass keine Tests erforderlich seien.
Manchmal muss ein Kunde so schnell wie möglich auf den Markt kommen, um mehr Geld zu sammeln. Sie kümmern sich nicht um die langfristigen Wartungskosten. Natürlich, wenn Sie wissen, dass es absolut kritisch ist zu testen (Finanz-Apps, medizinische Scanner, Fahrzeugkontrollen und dergleichen), dann machen Sie es entweder richtig oder suchen sich woanders einen neuen Job und/oder melden es den Behörden. Wenn Sie eine Website für Muffinläden oder ähnliches erstellen, schwitzen Sie nicht. Es ist die Entscheidung des Kunden, wie er sein Geld ausgibt, auch wenn es aus technischer Sicht töricht ist.
Du nicht. Sie tun, was der Kunde verlangt. Sie weisen den Kunden darauf hin, dass die Software nicht vollständig getestet wird und möglicherweise Fehler und andere Probleme aufweist, wenn Sie keinen Zeitplan erhalten, der genügend Spielraum zum Hinzufügen dieser Robustheitsfunktionen bietet, und wenn sie eine robuste Software wünschen, dann sie müssen Ihnen einen Zeitplan geben, der es Ihnen ermöglicht, eine robuste Software zu erstellen. Wenn es dem Kunden egal ist, ob sein Server abstürzt, dann bauen Sie, was Sie können, und lassen den Server abstürzen.
VORBEHALT : Ich gehe davon aus, dass Sie ein direkter Auftragnehmer des "Kunden" sind. Wenn Sie ein Mitarbeiter des Kunden sind, sollten Sie mit Ihrem Vorgesetzten über die Softwareentwicklungspraktiken sprechen und sicherstellen, dass Sie auf derselben Seite sind, denn was auch immer Sie erstellen, wird bei Ihrem Vorgesetzten schlecht aussehen, wenn es schlecht ist. Wenn Sie ein Mitarbeiter eines Beratungsunternehmens sind, das diesen Kunden hat, sollten Sie Ihren Vorgesetzten des Beratungsunternehmens darauf aufmerksam machen, dass der Kunde ausdrücklich darum gebeten hat, dass keine Tests durchgeführt werden (möglichst schriftlich), damit, wenn die Scheiße aufgeht ( was unweigerlich der Fall sein wird), wird Ihr Unternehmen damit übers Ohr gehauen, dass der Kunde nicht sagen kann, er sei nicht gewarnt worden oder habe es nicht gewusst.
In vielen Shops sind Deadlines wichtiger als alle Probleme zu lösen. Ich war in einem Geschäft, wo das Unternehmen bei Versäumung einer Frist 1 Million USD verlieren könnte. Das Unternehmen sagte, dass sie später Updates herausgeben könnten und die Updates die Korrekturen enthalten könnten.
Im Projektmanagement müssen Sie Ihre Prioritäten abwägen. Beispielsweise geriet ein Projekt, an dem ich arbeitete, in Verzug, sodass viele der Anforderungen reduziert wurden. Auf ähnliche Weise sollten Probleme in eine Rangfolge gebracht werden, sodass die Probleme mit der niedrigsten Priorität nach Bedarf entfernt werden, um die Frist einzuhalten.
Eine der Anforderungen des Entwicklers ist es, dem Projektmanager eine gute Einschätzung der Arbeit zu geben. Der Entwickler muss auch alle Abweichungen melden, die er sieht (kommende oder unmittelbare). Dies ermöglicht es den Beteiligten, den Zeitplan zu überprüfen und entsprechende Änderungen vorzunehmen. Je früher die Berichterstattung, desto bessere Umplanungsmöglichkeiten.
Je später ein Fehler, ein Problem, eine Schwierigkeit oder eine Fehlfunktion entdeckt wird, desto kostspieliger ist natürlich die Behebung. Unit-Tests sind entscheidend, damit die Units aufgebaut und zusammengesetzt werden können und funktionieren. Dies ist nur gesunder Menschenverstand, bei mechanischen Geräten oder Geschäftsplänen, ebenso wie bei Programmen und Systemdesigns, aber es ist oft sehr schwierig, Menschen außerhalb des Handwerks dazu zu bringen, es zu verstehen. Vielleicht hilft etwas Aufklärung mit wirklich einfachen physikalischen Analogien.
DJ Clayworth
Peter m
Andy Lester
alephnull
Peter m
Bradley Thomas
DonQuiKong
Thomas Matthäus
RonJohn
Andy Lester
jwenting
Weckar E.