Z tego, co przeczytałem, zwinne programowanie często wymaga refaktoryzacji lub inżynierii wstecznej kodu do diagramów. Oczywiście jest o wiele więcej, ale jeśli weźmiemy pod uwagę praktyki oparte na tych dwóch metodach, czy dynamiczne pisanie języków jest niekorzystne?
Wydaje się, że języki o statycznym typie znacznie ułatwiłyby refaktoryzację i inżynierię wsteczną.
Czy refaktoryzacja lub (zautomatyzowana) inżynieria wsteczna jest trudna, jeśli nie niemożliwa w dynamicznie pisanych językach? Co projekty realnego świata mówią o używaniu dynamicznie typowanych języków do metodologii zwinnej?
agile
dynamic-typing
static-typing
Gerenuk
źródło
źródło
dynamic-typing
istatic-typing
Odpowiedzi:
Języki dynamiczne są teoretycznie w niekorzystnej sytuacji, wszystkie pozostałe są równe, ponieważ określają mniej o tym, jak działa kod (jakie są ograniczenia), a zatem mniej refaktoryzacji można wykonać automatycznie, a pojawiających się problemów nie można również automatycznie wykryć .
Ale wszystko inne nie jest równe. Najpopularniejsze języki dynamiczne pozwalają na uzyskanie bardzo zwartego, ale zrozumiałego kodu, co ogólnie przyspiesza ich rozwój i sprawia, że logika (która może ulec zmianie w refaktoryzacji) jest łatwiejsza do zauważenia wizualnie. Więc chociaż możesz stracić względną przewagę w pracy w dynamicznym języku, nadal możesz wyjść na przód, szczególnie jeśli i tak planujesz ręczne refaktoryzowanie.
Z drugiej strony istnieją języki o typie statycznym z zasadniczo tymi samymi zaletami co języki dynamiczne (tj. Kompaktowe i zrozumiałe - z typami w większości wywnioskowanymi, ale bardzo tam): Haskell jest być może wiodącym przykładem, ale OCaML / F #, Scala, i inne również należą do tej kategorii. Niestety, ponieważ są rzadziej używane niż najpopularniejsze języki o typie statycznym, nie mają dla nich tak szerokiego zestawu narzędzi (np. Do refaktoryzacji).
Podsumowując, myślę, że odpowiednio dostosujesz się do zwinnych metodologii w większości języków; Nie powiedziałbym, że jest teraz wyraźny zwycięzca, ponieważ praktyka jeszcze nie dogoniła teorii.
źródło
Zautomatyzowane refaktoryzowanie zostało wynalezione w języku Smalltalk, dynamicznie pisanym języku. Więc nie, nie jest niemożliwe automatyczne refaktoryzowanie w dynamicznie pisanym języku. To, jak trudne jest, zależy znacznie bardziej od innych czynników oprócz dyscypliny pisania. Zarówno C ++, jak i Java są typami statycznymi, ale narzędzia refaktoryzacji naprawdę istnieją tylko dla Javy. Smalltalk dzięki introspekcji i prostej składni był naprawdę dobrym kandydatem do narzędzi refaktoryzacyjnych.
W pewnym sensie dynamiczne pisanie ułatwia refaktoryzację. Jeśli masz dobry pakiet testowy, możesz być pewien, że twoje refaktoryzacje niczego nie zepsuły. Dynamicznie wpisywana baza kodu jest zazwyczaj mniejsza. Ponadto refaktoryzacje mają zwykle wpływ na mniej kodu. W sumie wysiłek włożony w ręczne refaktoryzowanie dynamicznej bazy kodu jest mniejszy niż w przypadku statycznej podstawy kodu.
źródło
Refaktoryzacja została wynaleziona w dynamicznych językach. Zautomatyzowane narzędzia do refaktoryzacji zostały wynalezione w dynamicznych językach. IDE zostały wynalezione w dynamicznych językach. Opracowano kilka metodologii zwinnych w dynamicznych językach.
Naprawdę nie widzę żadnego problemu.
źródło
Aby nie zapomnieć, „zwinny” sposób pracy, który stał się znany jako Extreme Programming (XP), został stworzony w projekcie Smalltalk (a Smalltalk z pewnością liczy się jako język „dynamiczny”).
Oto studium przypadku przemysłowego zastosowania narzędzia do refaktoryzacji wyposażonego w dynamicznie pisany język:
z „Transformacji warstwy danych aplikacji” Will Loew-Blosser OOPSLA 2002
Również - „Narzędzia do dokonywania niemożliwych zmian - doświadczenia z narzędziem do przekształcania dużych programów Smalltalk”
źródło
Wasze zasady są dla mnie poprawne .
Języki o silnym typie, takie jak C #, są dobrymi kandydatami na bazę kodu, która stale wymaga ponownego faktorowania. Zasadniczo większość dostępnych na rynku narzędzi do przefakturowania (takich jak Resharper, JustCode itp.) Jest bardzo skuteczna w statycznych językach programowania.
Dla zespołu programistów, który ćwiczy metodologię Agile / Scrum, bardzo pomocne (nawet krytyczne) jest posiadanie dobrego zestawu narzędzi do faktoringu pod zbroją. W przeciwnym razie wszystkie nagłe zmiany w nadchodzącym sprincie mogą być koszmarem do modyfikacji lub przeprojektowania.
Zatem zwinna metodologia nie zapewnia korzyści dla języków o typie statycznym ani dynamiki jeden raz. Zapewnia iteracyjne podejście do tworzenia solidnej aplikacji.
źródło