Kopie und Teig-Programmierung

Kopie- und Teig-Programmierung ist ein abschätziger Begriff, um hoch wiederholenden Computerprogrammcode zu beschreiben, der anscheinend durch die Kopie und Teig-Operationen erzeugt ist. Es ist für einen Mangel daran oft symptomatisch, Kompetenz oder eine ungenügend ausdrucksvolle Entwicklungsumgebung zu programmieren, weil Unterprogramme oder Bibliotheken normalerweise stattdessen verwendet würden.

Formen der Kopie- und Teig-Programmierung

Plagiat

Kopie und das Aufkleben werden häufig von unerfahrenen oder Studentenprogrammierern getan, die die Tat finden, Code von Kratzer schwierig zu schreiben, und es vorziehen, nach einer vorschriftlichen Lösung oder teilweiser Lösung zu suchen, die sie als eine Basis für ihr eigenes Problem-Lösen verwenden können.

(Siehe auch Ladungskultprogrammierung)

Verdoppelung

Als eine Weise, Bibliothekscode anzuwenden

Kopie und das Aufkleben werden auch von erfahrenen Programmierern getan, die häufig ihre eigenen Bibliotheken gut geprüfter, zum Gebrauch bereiter Codeschnipsel und allgemeiner Algorithmen haben, die an spezifische Aufgaben leicht angepasst werden.

Als eine Weise, sich Code zu verzweigen

Sich verzweigender Code ist ein normaler Teil der Softwareentwicklung der großen Mannschaft, parallele Entwicklung auf beiden Zweigen und folglich, kürzere Entwicklungszyklen erlaubend. Das klassische Ausbreiten hat die folgenden Qualitäten:

  • Wird durch ein Versionsregelsystem geführt, das das Ausbreiten unterstützt
  • Zweige werden wiederverschmolzen, sobald parallele Entwicklung vollendet wird.

Kopie und Teig sind eine weniger formelle Alternative zum klassischen Ausbreiten, häufig verwendet, wenn es vorausgesehen wird, dass die Zweige immer mehr mit der Zeit, als abweichen werden, wenn ein neues Produkt von von einem vorhandenen Produkt gesponnen wird.

Als eine Annäherung an wiederholende Aufgaben

Eine der schädlichsten Formen der Programmierung der Kopie-Und-Teigs kommt im Code vor, der eine wiederholende Aufgabe durchführt. Jede Wiederholung wird von oben kopiert und in wieder mit geringen Modifizierungen aufgeklebt. Schädliche Effekten werden unten besprochen.

Absichtliche Designwahl

Gebrauch, Idiome und Designmuster zu programmieren, ist aus der Kopie und Teig-Programmierung verschieden, weil, wie man erwartet, sie von der Meinung des Programmierers zurückgerufen, anstatt von einer Codebank wiederbekommen werden.

Es gibt Forschung hat darauf gezielt, Kürzung und Teig "zu entkriminalisieren", der als die Subtextprogrammiersprache bekannt ist. Bemerken Sie, dass unter diesem Modell, schneiden Sie und Teig das primäre Modell der Wechselwirkung und folglich nicht eines Antimusters ist.

Effekten

Spezifisch zum plagiierten Code

  • Unerfahrene Programmierer, die Code häufig kopieren, verstehen den vorschriftlichen Code nicht völlig, den sie nehmen. Als solcher entsteht das Problem mehr aus ihrer Unerfahrenheit, und fehlen Sie des Mutes als aus der Tat des Kopierens und Aufklebens per se. Der Code kommt häufig aus ungleichen Quellen wie der Code von Freunden oder Mitarbeiter, Internetforen, Code, der durch den professors/TAs des Studenten oder Informatik-Lehrbücher zur Verfügung gestellt ist. Das Ergebnis riskiert, ein zusammenhangloser Konflikt von Stilen zu sein, und kann überflüssigen Code haben, der Probleme anpackt, für die Lösungen nicht mehr erforderlich sind.
  • Programmfehler können auch durch Annahmen und Designwahlen leicht vorgestellt werden, die in den getrennten Quellen gemacht sind, die sich nicht mehr, wenn gelegt, in eine neue Umgebung wenden.
  • Solcher Code kann auch tatsächlich unabsichtlich verfinstert werden, weil die Namen von Variablen, Klassen, Funktionen normalerweise usw. unverändert verlassen werden, wenn auch ihr Zweck im neuen Zusammenhang völlig verschieden sein kann, als es im ursprünglichen Zusammenhang war.

Spezifisch zum kopierten Code

Als eine Weise, Bibliothekscode anzuwenden

  • Eine Form der Codeverdoppelung, Kopie und Teig-Programmierung zu sein, hat einige innere Probleme; solche Probleme werden verschlimmert, wenn der Code keine semantische Verbindung zwischen dem Quelltext und den Kopien bewahrt. In diesem Fall, wenn Änderungen erforderlich sind, wird Zeit vergeudet, für alle Doppelpositionen jagend. (Das kann teilweise gelindert werden, wenn der ursprüngliche Code und/oder die Kopie richtig kommentiert werden; jedoch sogar dann editieren die Problem-Überreste vom Bilden von demselben mehrmals. Außerdem, weil Codewartung häufig versäumt, die Anmerkungen, Anmerkungen zu aktualisieren, die beschreiben, wo man findet, dass entfernte Stücke des Codes für das Veralten notorisch sind.)
  • Anhänger des Gegenstands haben Methodiken orientiert weiter protestieren gegen den "" Codebibliotheksgebrauch der Kopie und des Teigs. Anstatt vielfache veränderte Kopien eines allgemeinen Algorithmus zu machen, würde orientierte Annäherung eines Gegenstands den Algorithmus in eine zusammengefasste Mehrwegklasse abstrahieren. Die Klasse wird flexibel, mit der vollen Unterstützung des Erbes und der Überbelastung geschrieben, so dass der ganze rufende Code verbunden werden kann, um diesen allgemeinen Code direkt zu verwenden, anstatt das Original zu verändern. Da zusätzliche Funktionalität erforderlich ist, wird die Bibliothek erweitert (während man rückwärts gerichtete Vereinbarkeit behält). Dieser Weg, wenn der ursprüngliche Algorithmus einen Programmfehler hat, um zu befestigen, oder, die ganze Software damit verbessert werden kann, erträgt Vorteil zu haben.

Als eine Weise, sich Code zu verzweigen

Weil eine Weise - von einem neuen Produkt, Kopie und Teig-Programmierung zu spinnen, im Vorteil ist. Weil die neue Entwicklungsinitiative den Code des vorhandenen Produktes nicht berührt:

  • Es gibt kein Bedürfnis zum Test des rückwärts Gehens das vorhandene Produkt, auf der QA Zeit sparend, die mit dem neuen Produktstart vereinigt ist, und Zeit reduzierend, um einzukaufen.
  • Es gibt keine Gefahr von vorgestellten Programmfehlern im vorhandenen Produkt, das die installierte Benutzerbasis umwerfen könnte.

Die Kehrseiten sind:

  • Wenn das neue Produkt so viel, wie vorausgesehen, vom vorhandenen Produkt nicht abweicht, können Sie abwickeln, zwei Codebasen (an zweimal den Kosten) dafür zu unterstützen, was im Wesentlichen ein Produkt ist. Das kann zu teurem Wiederfactoring und Handbuch führen, das unten die Linie verschmilzt.
  • Die Doppelcodebasis verdoppelt die Zeit, die erforderlich ist, Änderungen durchzuführen, die über beide Produkte gewünscht werden können; das vergrößert Zeit zum Markt für solche Änderungen, und kann tatsächlich irgendwelche erreichten Zeitgewinne durch das Ausbreiten des Codes an erster Stelle wegwischen.

Ähnlich dem obengenannten würde die Alternative zu einer Annäherung der Kopie-Und-Teigs eine Modularized-Annäherung sein:

  • Anfang durch das Ausklammern des Codes, der durch beide Produkte in Bibliotheken zu teilen ist.
  • Verwenden Sie jene Bibliotheken (aber nicht eine zweite Kopie der Codebasis) als das Fundament für die Entwicklung des neuen Produktes.
  • Wenn eine zusätzliche dritte, vierte oder fünfte Version des Produktes unten die Linie vorgestellt wird, ist diese Annäherung viel stärker, weil die Konfektionscodebibliotheken drastisch den Entwicklungslebenszyklus für irgendwelche zusätzlichen Produkte nach dem zweiten verkürzen.

Als eine Annäherung an wiederholende Aufgaben

  • Für wiederholende Aufgaben, die Kopie und Teig-Annäherung führt häufig zu großen Methoden (ein schlechter Codegeruch).
  • Jede Wiederholung schafft ein Codeduplikat mit allen Problemen, die in vorherigen Abteilungen, aber mit einem viel größeren Spielraum besprochen sind. Hunderte von Verdoppelungen sind üblich; Hunderte sind möglich. Üble Programmfehler-Lagen werden insbesondere sehr schwierig und kostspielig in solchem Code.
  • Solcher Code leidet auch unter bedeutenden Lesbarkeitsproblemen wegen der Schwierigkeit, genau wahrzunehmen, was sich zwischen jeder Wiederholung unterscheidet. Das hat einen direkten Einfluss auf die Gefahren und Kosten, den Code zu revidieren.
  • Das Verfahrensprogrammiermodell entmutigt stark die Annäherung der Kopie-Und-Teigs an wiederholende Aufgaben. Unter einem Verfahrensmodell soll eine bevorzugte Annäherung an wiederholende Aufgaben eine Funktion oder Unterprogramm schaffen, das einen einzelnen Pass durch die Aufgabe durchführt; dieses Unterprogramm wird dann durch die Elternteilroutine entweder wiederholend oder besser noch mit einer Form der sich schlingenden Struktur genannt. Solcher Code wird "gut zersetzt" genannt, und wird als leichter seiend empfohlen zu lesen und mehr sogleich ausziehbar.
  • Die allgemeine auf diesen Fall anwendbare Faustregel ist "wiederholen sich nicht".

Siehe auch

Links


Automatische Gewinn-Kontrolle / Lanka
Impressum & Datenschutz