Gibt es eine formale Definition für "Refactoring"?

8

Wer weiß schon, wie man das Refactoring formeller definieren kann?

AKTUALISIEREN.

  

Ein Refactoring ist ein Paar R = (pre; T) wobei pre die Voraussetzung dafür ist   das Programm muss genügen, und T ist die Programmumwandlung.

    
jaircazarin-old-account 19.11.2008, 05:38
quelle

4 Antworten

3

Es ist eine interessante Frage und eine, die ich nicht bedacht hatte. Ich habe ein wenig gegoogelt und mir dieses Papier (PDF) ausgedacht. beim Refactoring in AOP, das versucht, einige mathematische Modelle auf Aspekte anzuwenden, um zu zeigen, dass funktionale Aspekte die gleiche Flexibilität wie traditionelle Aspekte haben, jedoch mit reduzierter Komplexität. Ich habe die ganze Zeitung nicht gelesen, aber Sie könnten dort etwas finden.

Eine weitere interessante Idee wäre es, Refactorings auf die gleiche Art wie Compiler-Optimierungen zu betrachten. Im Wesentlichen stellt der Compiler Ihren Code im laufenden Betrieb um, obwohl mit anderen Zielen als dem Refactoring auf Codeebene gearbeitet wird. Sie müssten irgendwie die Komplexität und Lesbarkeit des Codes vernünftig quantifizieren, um zu demonstrieren, wie sich ein bestimmtes Refactoring darauf auswirkt. Das Modell wäre wahrscheinlich der schwierigste Teil.

Ich habe auch dieses Papier gefunden, das eine Algebra der OO-Programmierung erstellt und leitet einige Grundgesetze ab und verwendet dann diese Grundregeln, um ein komplizierteres Refactoring abzuleiten.

Interessante Sachen. Hoffe, das hilft.

    
tvanfosson 19.11.2008 05:56
quelle
2

Refactoring ist eine Reihe von Korrektheitserhaltenden Transformationen, aber Refactoring kann zu einem allgemeineren Code als das Original

führen

, so können wir nicht einfach behaupten, dass eine refaktorierende Transformation T im Programm P die gleichen Eigenschaften R vor und nach dem Refactoring aufweist, aber die Eigenschaften R 'des umstrukturierten Programms P' sollten zumindest äquivalent zu R

sein %Vor%

wir können auch behaupten, dass die Ein- und Ausgänge gleich oder äquivalent bleiben

Aber um Ihrem Beispiel zu folgen, wollen wir vielleicht eine Refactoring-Transformation T als 4-Tupel P, I, O, R definieren, wobei P das ursprüngliche Programm ist, I die Eingaben und / oder Vorbedingungen, O die Ausgaben und / oder Nachbedingung, und R ist das transformierte Programm, dann (unter Verwendung temporaler Logik?) das bestätigen

%Vor%

gilt vor der Umwandlung

%Vor%

definiert die Transformation und

%Vor%

gilt nach der Umwandlung

meine symbolische Mathematik ist rostig, aber das ist eine allgemeine Richtung

Dies würde eine gute Masterarbeit machen, BTW

    
Steven A. Lowe 19.11.2008 06:20
quelle
2

Es könnte interessant sein zu bemerken, dass die meisten Refactorings paarweise kommen:

  • Parameter hinzufügen - Parameter entfernen
  • Klasse / Methode extrahieren - Inline-Klasse / Methode
  • Pull Up Feld / Methode - Pull Feld / Methode
  • Ändern der bidirektionalen Assoziation in unidirektional - Ändern der unidirektionalen Assoziation in bidirektional
  • ...

Das Anwenden der beiden Refactorings des Paares ist eine Null-Transformation.

Für ein Refaktorierungspaar R, R ':

  

R '(R (Code)) = Code

    
philant 19.11.2008 07:23
quelle
-2

Nun nicht direkt, aber in Geld ausgedrückt - ich kann ja sagen. Ich kann keine Gleichung dazu finden:)

Code gut geschrieben, frei von Komplexität (die durch Refactoring verursacht werden könnte) kann Zeit und Geld sparen.

    
shahkalpesh 19.11.2008 05:49
quelle