D'après ce que j'ai lu, le développement agile implique souvent une refactorisation ou une ingénierie inverse du code dans des diagrammes. Bien sûr, il y a bien plus que cela, mais si l'on considère les pratiques qui s'appuient sur ces deux méthodes, les langages typés dynamiquement sont-ils défavorisés?
Il semble que les langages de type statique rendraient le refactoring et la rétro-ingénierie beaucoup plus faciles.
La refactorisation ou la rétro-ingénierie (automatisée) est-elle difficile, voire impossible, dans les langues typées dynamiquement? Que disent les projets du monde réel sur l'utilisation des langages typés dynamiquement pour la méthodologie agile?
agile
dynamic-typing
static-typing
Gerenuk
la source
la source
dynamic-typing
etstatic-typing
Réponses:
Les langages dynamiques sont théoriquement désavantagés, toutes choses étant égales par ailleurs, car ils spécifient moins le fonctionnement du code (quelles sont les contraintes), et donc moins de refactorisation peut être effectuée automatiquement, et les problèmes qui surviennent ne peuvent pas être détectés automatiquement également .
Mais tout le reste n'est pas égal. Les langages dynamiques les plus populaires permettent un code très compact mais compréhensible, ce qui rend généralement leur développement plus rapide et rend la logique (qui peut changer lors du refactoring) plus facile à repérer visuellement. Donc, même si vous perdez un peu de l'avantage relatif de travailler dans un langage dynamique, vous pouvez toujours vous démarquer, surtout si vous prévoyez de faire votre refactoring à la main de toute façon.
D'autre part, il existe des langages typés statiquement avec essentiellement les mêmes avantages que les langages dynamiques (c'est-à-dire compacts et compréhensibles - avec des types principalement déduits, mais très présents): Haskell est peut-être l'exemple principal, mais OCaML / F #, Scala, et d'autres sont également dans cette catégorie. Malheureusement, étant donné qu'ils sont moins largement utilisés que les langages à typage statique les plus populaires, ils n'ont pas autant d'outils pour eux (par exemple pour le refactoring).
Donc, en fin de compte, je pense que vous ferez bien avec les méthodologies agiles dans la plupart des langues; Je ne dirais pas qu'il y a un gagnant clair en ce moment car la pratique n'a pas encore rattrapé la théorie.
la source
Le refactoring automatisé a été inventé dans Smalltalk, un langage typé dynamiquement. Donc non, il n'est pas impossible d'avoir une refactorisation automatisée dans un langage typé dynamiquement. La difficulté dépend beaucoup plus d'autres facteurs que la discipline de frappe. C ++ et Java sont tous deux typés statiquement, mais les outils de refactorisation n'existent vraiment que pour Java. Smalltalk avec son introspection et sa syntaxe simple était un très bon candidat pour les outils de refactoring.
À certains égards, la frappe dynamique facilite la refactorisation. Si vous avez une bonne suite de tests, vous pouvez être sûr que vos refactorings n'ont rien cassé. Une base de code typée dynamiquement est généralement plus petite. En outre, les refactorisations ont tendance à affecter moins de code. Au total, l'effort de refactorisation manuelle d'une base de code dynamique est inférieur à celui d'une base de code statique.
la source
Le refactoring a été inventé dans les langages dynamiques. Les outils de refactorisation automatisés ont été inventés dans des langages dynamiques. Les IDE ont été inventés dans des langages dynamiques. Plusieurs méthodologies agiles ont été inventées dans des langages dynamiques.
Je ne vois vraiment aucun problème.
la source
N'oublions pas que la façon de travailler "Agile", connue sous le nom d' Extreme Programming (XP), a été créée sur un projet Smalltalk (et Smalltalk compte certainement comme un langage "dynamique").
Voici une étude de cas d'utilisation industrielle d'un outil de refactoring fourni avec un langage typé dynamiquement:
de "Transformation d'une couche de données d'application" Will Loew-Blosser OOPSLA 2002
Aussi - "Outils pour faire des changements impossibles - expériences avec un outil pour transformer de grands programmes Smalltalk"
la source
Vos principes me semblent corrects .
Les langages fortement typés comme C # sont de bons candidats pour une base de code qui a constamment besoin d'être refactorisée. Fondamentalement, la plupart des outils de refactorisation (comme Resharper, JustCode, etc.) sur le marché sont très efficaces dans les langages de programmation typés statiquement.
Pour une équipe de développement qui pratique la méthodologie Agile / Scrum, il est très utile (même critique) d'avoir un bon ensemble d'outils de refactorisation sous armure. Sinon, tous les changements soudains dans le sprint à venir peuvent être un cauchemar à modifier ou à reconcevoir.
Ainsi, la méthodologie agile n'offre aucun avantage aux langages typés statiquement ou dynamiques une fois. Il offre une approche itérative pour créer une application solide.
la source