Nach dem, was ich gelesen habe, beinhaltet die agile Entwicklung oft das Umgestalten oder Reverse Engineering von Code in Diagrammen. Natürlich gibt es noch viel mehr, aber wenn wir die Praktiken berücksichtigen, die auf diesen beiden Methoden beruhen, sind dynamisch typisierte Sprachen im Nachteil?
Es scheint, dass statisch getippte Sprachen das Refactoring und Reverse Engineering erheblich vereinfachen würden.
Ist Refactoring oder (automatisiertes) Reverse Engineering in dynamisch typisierten Sprachen schwierig, wenn nicht unmöglich? Was sagen reale Projekte über die Verwendung dynamisch typisierter Sprachen für eine agile Methodik?
agile
dynamic-typing
static-typing
Gerenuk
quelle
quelle
dynamic-typing
undstatic-typing
Antworten:
Dynamische Sprachen sind theoretisch von Nachteil, da alle anderen Sprachen gleich sind, da sie weniger Angaben zur Funktionsweise des Codes (zu den Einschränkungen) enthalten und daher weniger Umgestaltungen automatisch durchgeführt werden können und auftretende Probleme nicht automatisch erkannt werden können .
Aber alles andere ist nicht gleich. Die beliebtesten dynamischen Sprachen ermöglichen sehr kompakten und dennoch verständlichen Code, wodurch die Entwicklung in ihnen im Allgemeinen beschleunigt wird und die Logik (die sich beim Refactoring ändern kann) visuell leichter erkennbar wird. Obwohl Sie möglicherweise den relativen Vorteil verlieren, in einer dynamischen Sprache zu arbeiten, können Sie dennoch weiterkommen, insbesondere wenn Sie das Refactoring ohnehin von Hand planen.
Auf der anderen Seite gibt es statisch typisierte Sprachen mit im Wesentlichen den gleichen Vorteilen wie dynamische Sprachen (dh kompakt und verständlich - Typen werden meistens abgeleitet, aber sehr häufig): Haskell ist vielleicht das führende Beispiel, aber OCaML / F #, Scala, und andere sind auch in dieser Kategorie. Da sie weniger häufig verwendet werden als die gängigsten statisch typisierten Sprachen, verfügen sie leider nicht über so umfangreiche Toolsets (z. B. für das Refactoring).
Unter dem Strich denke ich, dass Sie mit agilen Methoden in den meisten Sprachen angemessen umgehen können. Ich würde nicht sagen, dass es im Moment einen klaren Sieger gibt, da die Praxis die Theorie noch nicht eingeholt hat.
quelle
Das automatisierte Refactoring wurde in Smalltalk, einer dynamisch typisierten Sprache, erfunden. Nein, es ist nicht unmöglich, automatisiertes Refactoring in einer dynamisch getippten Sprache durchzuführen. Wie schwer es ist, hängt wesentlich mehr von anderen Faktoren als der Schreibdisziplin ab. C ++ und Java sind beide statisch typisiert, aber Refactoring-Tools gibt es nur für Java. Smalltalk war mit seiner Selbstbeobachtung und einfachen Syntax ein wirklich guter Kandidat für Refactoring-Tools.
In gewisser Weise erleichtert die dynamische Typisierung das Refactoring. Wenn Sie eine gute Testsuite haben, können Sie sicher sein, dass Ihre Refactorings nichts kaputt gemacht haben. Eine dynamisch typisierte Codebasis ist normalerweise kleiner. Darüber hinaus wirken sich Refactorings in der Regel weniger auf den Code aus. Insgesamt ist der Aufwand für die manuelle Umgestaltung einer dynamischen Codebasis geringer als der einer statischen Codebasis.
quelle
Refactoring wurde in dynamischen Sprachen erfunden. Automated Refactoring Tools wurden in dynamischen Sprachen erfunden. IDEs wurden in dynamischen Sprachen erfunden. Mehrere agile Methoden wurden in dynamischen Sprachen erfunden.
Ich sehe wirklich kein Problem.
quelle
Wenn wir nicht vergessen, wurde die "agile" Arbeitsweise, die als Extreme Programming (XP) bekannt wurde, in einem Smalltalk-Projekt erstellt (und Smalltalk zählt zweifellos als "dynamische" Sprache).
Hier ist eine Fallstudie zum industriellen Einsatz eines Refactoring-Tools mit einer dynamisch typisierten Sprache:
aus "Transformation einer Anwendungsdatenschicht" Will Loew-Blosser OOPSLA 2002
Außerdem - "Tools zum Vornehmen unmöglicher Änderungen - Erfahrungen mit einem Tool zum Transformieren großer Smalltalk-Programme"
quelle
Dein Grundsatzgedanke klingt für mich richtig .
Die stark typisierten Sprachen wie C # sind gute Kandidaten für eine Codebasis, die ständig überarbeitet werden muss. Grundsätzlich sind die meisten Re-Factoring-Tools (wie Resharper, JustCode usw.) auf dem Markt in statisch typisierten Programmiersprachen sehr effektiv.
Für Entwicklerteams, die mit der Agile / Scrum-Methodik arbeiten, ist es sehr hilfreich (auch kritisch), einen guten Satz von Re-Factoring-Tools unter Rüstung zu haben. Andernfalls können alle plötzlichen Änderungen im bevorstehenden Sprint ein Albtraum sein, der geändert oder neu gestaltet werden muss.
Somit bietet die agile Methodik keine Vorteile für statisch typisierte oder einmal dynamische Sprachen. Was es bietet, ist ein iterativer Ansatz zum Erstellen einer soliden Anwendung.
quelle