2008-11-19 10 views
8

Ktoś zna sposób zdefiniowania refaktoryzacji w bardziej formalny sposób?Czy istnieje jakaś formalna definicja "refaktoryzacji"?

AKTUALIZACJA.

refaktoring jest para R = (wstępnego, t), gdzie jest wstępnie warunkiem, że program musi spełniać, a T jest transformacja programu.

+0

odnowieniem i upvoted - to doskonałe pytanie –

+0

Co na ziemi jest obraźliwa o to? Bardzo dobre pytanie. – tvanfosson

+0

Resonable transformations zawierają własne warunki wstępne, więc wydaje się zbędne w tej charakterystyce. –

Odpowiedz

-2

Cóż, nie bezpośrednio, ale pod względem pieniędzy - mogę powiedzieć tak. Nie mogę wymyślić tego równania :)

Kod dobrze napisany, wolny od złożoności (który może być wynikiem refaktoryzacji) może zaoszczędzić czas/wysiłek, a tym samym pieniądze.

3

To interesujące pytanie, którego nie brałem pod uwagę. Zrobiłem trochę googlowania i wymyśliłem to paper (PDF) na temat refaktoryzacji w AOP, który próbuje zastosować pewne matematyczne modelowanie do aspektów, aby pokazać, że aspekty funkcjonalne mają taką samą elastyczność jak tradycyjne aspekty, ale z mniejszą złożonością. Nie przeczytałem całej gazety, ale możesz tam coś znaleźć.

Innym interesującym pomysłem jest myślenie o refaktoryzacjach na tych samych liniach, co optymalizacje kompilatora. Zasadniczo kompilator refaktoryzuje twój kod w locie, chociaż ma inne cele niż refaktoryzacja na poziomie kodu. Musiałbyś w jakiś sposób określić złożoność kodu i czytelność w rozsądny sposób, aby pokazać, jak wpływa na niego dany refaktoryzacja. Jeśli chodzi o model, prawdopodobnie będzie to trudna część.

Znalazłem także ten paper, który ustanawia algebrę programowania OO i wyprowadza pewne podstawowe prawa, a następnie używa tych podstawowych zasad do wyprowadzenia bardziej skomplikowanego refaktoryzacji.

Interesujące rzeczy. Mam nadzieję że to pomoże.

+0

doskonałe znaleziska! –

2

refaktoryzacji to cykl przemian poprawności-konserwujące, ale refaktoryzacji kodu może skutkować bardziej ogólnym niż oryginalny

więc nie możemy twierdzić, że transformacja refaktoryzacja T o p Program posiada takie same właściwości R przed i po refaktoringu, ale właściwości R „o refactored programu P” powinna być co najmniej równoważna z R

given program P implies R 
refactoring transformation T(P) produces P' 
where (P' implies R') and (R' is equivalent to or subsumes R') 

możemy stwierdzić, że dane wejściowe i wyjściowe są takie same lub równoważne

ale aby podążać za twoim przykładem, być może chcemy zdefiniować transformację przekształcającą T jako 4-krotne P, I, O, R, gdzie P jest oryginalnym programem, I jest wejściami i/lub warunkami wstępnymi, O jest wyjściami i/lub postpondition, a R jest przekształconym programem, a następnie twierdzą (używając logiki temporalnej?), Które

P:I -> O 

trzyma przed transformacją

T(P) -> R 

definiuje transformację i

R:I -> O 

trzyma po przekształceniu

mój symboliczny matematyka jest zardzewiały, ale to ogólny kierunek

byłoby to zrobić tezę dobry magistra, BTW

+0

Nie. Krok refaktoryzacji może zmienić semantykę programu. Rozważ opuszczenie argumentu z wywołania funkcji. –

+0

@ [Ira Baxter]: tak - mówiłem o wejściach i wyjściach programu P, a nie o poszczególnych funkcjach w P. Oczywiście mogłeś upuścić dane wejściowe do programu, jeśli nie był on używany, ale jeśli nie był W takim razie praktyczna (w przeciwieństwie do formalnej) semantyka programu pozostanie niezmieniona ;-) –

2

To może być ciekawe, że większość refaktoryzacji przyjść w parach:

  • Dodaj parametr - Usunięcie parametru
  • Extract Class/Method - Inline klasa/Metoda
  • podciągnąć Pole/Method - Pull Down Pole/Method
  • Zmień dwukierunkowego na jednokierunkowy Association - Stowarzyszenie Zmień jednokierunkowy dwukierunkowy
  • ...

Zastosowanie dwóch refaktoryzacji pary jest transformacją zerową.

dla pary refaktoring R, R ':

R' (R (kod)) = kod

Powiązane problemy