1

Code Klone, auch bekannt als Duplicate code wird oft als schädlich für die Systemqualität angesehen.Ist Code Clone eine gängige Praxis in C, Java und Python?

  1. Ich frage mich, ob diese doppelten Code in Standard-APIs oder anderen ausgereiften Tools gesehen werden konnte.
  2. Wenn es in der Tat der Fall ist, dann welche Sprache (wie C, Java, Python, geläufiges Lisp etc.) denken Sie sollten code clone Praxis mit einer höheren Wahrscheinlichkeit einführen?
+1

vielleicht bin ich dicht, aber ich habe eine harte Zeit herauszufinden, was genau Sie fragen. Könntest Du das erläutern? – chesles

+0

@chesles Danke für deinen Rat und ich habe mich ein bisschen verändert. –

Antwort

3

Code-Klonen ist sehr häufig, egal welche Programmiersprache verwendet wird, ja, sogar in C, Python und Java.

Menschen tun es, weil es sie auf kurze Sicht effizient macht; Sie machen Code-Wiederverwendung. Es ist wohl schlecht, weil es auf lange Sicht Gruppen-Ineffizienzen verursacht: Klone verwenden Code-Fehler und Annahmen neu, und wenn diese entdeckt werden und repariert werden müssen, müssen alle Code-Klone repariert werden, und der Programmierer, der das Fixieren tut, tut dies nicht weiß, wo die Klone sind, oder auch wenn es welche gibt.

Ich glaube nicht, Klone sind schlecht, wegen der Code-Wiederverwendung-Effekt. Ich denke, was schlecht ist, verwaltet sie nicht.

Um mit dem letzteren Problem zu helfen, baue ich clone detectors (see our CloneDR), die automatisch finden genaue und fast-miss dupliziertem Code, mit der Struktur der Programmiersprache, um die Suche zu führen. CloneDR funktioniert für eine Vielzahl von Programmiersprachen (einschließlich OP-Sets).

In jedem Softwaresystem mit 100K SLOC oder mehr werden mindestens 10% des Codes geklont. (OK, OK, Suns JDK wird von einem außergewöhnlich guten Team gebaut, sie haben nur etwa 9,5%). In älteren konventionellen Anwendungen ist es tendenziell schlechter; Ich vermute, weil die Programmierer mehr Code aus Selbstverteidigung klonen. (Ich habe Anwendungen gesehen, in denen die Klone 50% Code enthalten, ja, diese Programme sind aus vielen Gründen schrecklich, nicht nur Klonen).

Sie können Klonberichte unter dem Link für Anwendungen in mehreren Sprachen sehen, sich die Statistiken anschauen und sehen, wie die Klone aussehen.

3

Der gesamte Code ist der gleiche, unabhängig davon, wer es schreibt. Jede von Ihnen zitierte API wurde von Menschen geschrieben, die auf dem Weg Entscheidungen trafen. Ich habe noch nicht die perfekte API gesehen - alle können im Nachhinein Dinge wiederholen.

Klonierungscode fliegt angesichts von DRY, also wird es natürlich empfohlen, dass Sie es nicht tun. Es ist schädlich, weil mehr Code mehr Bugs bedeutet und Duplikation bedeutet, dass Sie daran denken müssen, sie in allen Clones zu beheben.

Aber jede Regel hat ihre Ausnahmen. Ich bin mir sicher, dass jeder an einen Umstand denken kann, in dem sie etwas tun, was "Best Practices" und Dogma sagen würde, dass sie das nicht sollten, aber sie haben es trotzdem getan. Zeit und andere Einschränkungen erlauben nicht immer, perfekt zu sein.

Vorzuschlagen, dass Erlaubnis gewährt werden muss, um so etwas zu erlauben, ist für mich lächerlich. Sei so trocken wie du kannst. Wenn Sie am Ende damit brechen, verstehen Sie, warum Sie es getan haben, und denken Sie daran, zurückzugehen und es zu reparieren, wenn Sie eine Chance bekommen.

+0

+1 für die Erkenntnis, dass Sie manchmal gegen die Richtlinien gehen müssen und dass Sie sicherstellen sollten, dass Sie wissen, WARUM Sie gegen diese Richtlinien gingen, wenn Sie dies tun.Ich werde jedoch bemerken, dass Sie manchmal nicht "zurückgehen und es reparieren" sollten, weil die Gründe, die gegen die Richtlinien verstoßen, eine Konstante sind (dh Sie wählen den gleichen Code zweimal in einer engen Schleife, weil Sie ihn in eine Methode würde Overhead einführen und Sie WISSEN (gemessen), dass die fragliche enge Schleife ein Leistungsproblem bereits ist). – RHSeeger

Verwandte Themen