Die kontinuierliche Integration ist mit einem Mehraufwand verbunden, z. B. Einrichtung, Umschulung, Sensibilisierungsmaßnahmen, Unterbrechung der Behebung von "Fehlern", die sich als Datenprobleme herausstellen, erzwungene Trennung der Programmierstile von Bedenken usw.
Ab wann rechnet sich die kontinuierliche Integration?
EDIT: Das waren meine Erkenntnisse
Das Setup war CruiseControl.Net mit Nant, das von VSS oder TFS liest.
Hier einige Gründe für einen Fehler, die nichts mit dem Setup zu tun haben:
Untersuchungskosten : Die Zeit, die aufgewendet wird, um zu untersuchen, ob ein rotes Licht auf eine echte logische Inkonsistenz im Code, in der Datenqualität oder auf eine andere Ursache zurückzuführen ist, z ist ausgefallen usw. usw.)
Politische Kosten über der Infrastruktur : Ich habe überlegt, für jede Methode im Testlauf eine "Infrastruktur" -Prüfung durchzuführen. Ich hatte keine Lösung für das Timeout, außer den Build-Server zu ersetzen. Bürokratie störte und es gab keinen Serverersatz.
Kosten für die Korrektur von Komponententests : Ein rotes Licht aufgrund eines Datenqualitätsproblems kann ein Hinweis auf einen schlecht geschriebenen Komponententest sein. Daher wurden datenabhängige Komponententests neu geschrieben, um die Wahrscheinlichkeit eines roten Lichts aufgrund schlechter Daten zu verringern. In vielen Fällen wurden die erforderlichen Daten in die Testumgebung eingefügt, um die Komponententests genau ausführen zu können. Es ist sinnvoll zu sagen, dass der Test robuster wird, wenn er die Daten robuster macht, wenn er von diesen Daten abhängig ist. Das hat natürlich gut funktioniert!
Deckungskosten, dh Schreiben von Komponententests für bereits vorhandenen Code : Es bestand das Problem der Abdeckung durch Komponententests. Es gab Tausende von Methoden, die keine Unit-Tests hatten. Daher würde eine beträchtliche Anzahl von Manntagen benötigt, um diese zu erstellen. Da dies zu schwierig wäre, um ein Geschäftsmodell zu erstellen, wurde beschlossen, Unit-Tests für künftige neue öffentliche Methoden zu verwenden. Diejenigen, die keinen Komponententest hatten, wurden als "potentiell infrarot" bezeichnet. Ein interessanter Punkt hierbei ist, dass statische Methoden ein Diskussionspunkt dafür waren, wie es möglich wäre, eindeutig zu bestimmen, wie eine bestimmte statische Methode fehlgeschlagen ist.
Kosten für maßgeschneiderte Releases : Nant-Skripte gehen nur so weit. Sie eignen sich beispielsweise nicht für CMS-abhängige Builds für EPiServer, CMS oder eine UI-orientierte Datenbankbereitstellung.
Dies sind die Arten von Problemen, die bei stündlichen Testläufen und QS-Builds über Nacht auf dem Buildserver aufgetreten sind. Ich gehe davon aus, dass diese als Build-Master unnötig sind und diese Aufgaben zum Zeitpunkt der Veröffentlichung manuell ausführen können, insbesondere mit einer Ein-Mann-Band und einem kleinen Build. Einzelschritt-Builds haben meiner Erfahrung nach die Verwendung von CI nicht gerechtfertigt. Was ist mit den komplexeren, mehrstufigen Builds? Dies kann eine Herausforderung sein, insbesondere ohne ein Nant-Skript. Also waren diese nicht mehr erfolgreich, obwohl sie eines geschaffen hatten. Die Kosten für die Behebung der Rotlichtprobleme überwogen die Vorteile. Schließlich verloren die Entwickler das Interesse und stellten die Gültigkeit des roten Lichts in Frage.
Nach einem fairen Versuch bin ich der Meinung, dass CI teuer ist und viel an den Rändern gearbeitet wird, anstatt nur die Arbeit zu erledigen. Es ist kostengünstiger, erfahrene Entwickler zu beschäftigen, die keine großen Projekte durcheinander bringen, als ein Alarmsystem einzuführen und zu warten.
Dies ist auch dann der Fall, wenn diese Entwickler das Unternehmen verlassen. Es spielt keine Rolle, ob ein guter Entwickler das Unternehmen verlässt, da durch die von ihm befolgten Prozesse sichergestellt wird, dass er Anforderungsspezifikationen und Entwurfsspezifikationen schreibt, die Codierungsrichtlinien einhält und seinen Code so kommentiert, dass er lesbar ist. All dies wird überprüft. Wenn dies nicht geschieht, erledigt sein Teamleiter seine Arbeit nicht. Dies sollte von seinem Vorgesetzten usw. übernommen werden.
Damit CI funktioniert, reicht es nicht aus, nur Komponententests zu schreiben, die vollständige Abdeckung beizubehalten und eine funktionierende Infrastruktur für große Systeme sicherzustellen.
Fazit: Man könnte sich fragen, ob die Behebung möglichst vieler Fehler vor der Veröffentlichung aus betriebswirtschaftlicher Sicht überhaupt wünschenswert ist. CI erfordert viel Arbeit, um eine Handvoll von Fehlern zu erfassen, die der Kunde in UAT identifizieren oder das Unternehmen für die Behebung im Rahmen eines Kundendienstvertrages bezahlen kann, wenn die Garantiezeit ohnehin abläuft.