Pelo que li, o desenvolvimento ágil geralmente envolve refatoração ou código de engenharia reversa em diagramas. É claro que há muito mais do que isso, mas se considerarmos as práticas que dependem desses dois métodos, as linguagens de tipo dinâmico estão em desvantagem?
Parece que linguagens com estática tornariam a refatoração e a engenharia reversa muito mais fáceis.
A refatoração ou a engenharia reversa (automatizada) é difícil, se não impossível, em idiomas de tipo dinâmico? O que os projetos do mundo real dizem sobre o uso de linguagens dinamicamente tipadas para a metodologia ágil?
agile
dynamic-typing
static-typing
Gerenuk
fonte
fonte
dynamic-typing
estatic-typing
Respostas:
As linguagens dinâmicas estão teoricamente em desvantagem, todas as demais são iguais, porque especificam menos sobre como o código funciona (quais são as restrições) e, portanto, menos refatoração pode ser feita automaticamente, e os problemas que surgem também não podem ser detectados automaticamente. .
Mas tudo o resto não é igual. As linguagens dinâmicas mais populares permitem código altamente compacto, mas compreensível, o que geralmente torna o desenvolvimento mais rápido e facilita a localização visual da lógica (que pode mudar na refatoração). Portanto, embora você possa perder parte da vantagem relativa de trabalhar em uma linguagem dinâmica, ainda assim poderá avançar, especialmente se estiver planejando fazer a refatoração manualmente de qualquer maneira.
Por outro lado, existem linguagens estaticamente tipadas com essencialmente as mesmas vantagens que linguagens dinâmicas (ou seja, compactas e compreensíveis - com tipos principalmente inferidos, mas muito existentes): Haskell é talvez o exemplo principal, mas OCaML / F #, Scala, e outros também estão nessa categoria. Infelizmente, uma vez que são menos usados do que as linguagens de tipo estaticamente mais populares, elas não possuem um conjunto de ferramentas extensivo (por exemplo, para refatoração).
Então, como resultado, acho que você fará adequadamente com metodologias ágeis na maioria dos idiomas; Eu não diria que há um vencedor claro agora, já que a prática ainda não alcançou a teoria.
fonte
A refatoração automatizada foi inventada no Smalltalk, uma linguagem de tipo dinâmico. Portanto, não, não é impossível ter refatoração automatizada em uma linguagem de tipo dinâmico. O quão difícil é depende muito mais de outros fatores além da disciplina de digitação. C ++ e Java são de tipo estaticamente, mas as ferramentas de refatoração realmente existem apenas para Java. O Smalltalk, com sua introspecção e sintaxe simples, era realmente um bom candidato para ferramentas de refatoração.
De certa forma, a digitação dinâmica realmente facilita a refatoração. Se você possui um bom conjunto de testes, pode ter certeza de que suas refatorações não quebraram nada. Uma base de código digitada dinamicamente é geralmente menor. Além disso, as refatorações tendem a afetar menos código. No total, o esforço envolvido na refatoração manual de uma base de código dinâmica é menor que o de uma base de código estática.
fonte
A refatoração foi inventada em linguagens dinâmicas. As ferramentas automatizadas de refatoração foram inventadas em linguagens dinâmicas. Os IDEs foram inventados em linguagens dinâmicas. Várias metodologias ágeis foram inventadas em linguagens dinâmicas.
Eu realmente não vejo nenhum problema.
fonte
Para não esquecermos, a maneira de trabalhar "Agile", que ficou conhecida como Extreme Programming (XP), foi criada em um projeto Smalltalk (e o Smalltalk certamente conta como uma linguagem "dinâmica").
Aqui está um estudo de caso do uso industrial de uma ferramenta de refatoração fornecida com uma linguagem de tipo dinâmico:
de “Transformação de uma camada de dados de aplicativos” Loew-Blosser OOPSLA 2002
Também - "Ferramentas para fazer alterações impossíveis - experiências com uma ferramenta para transformar grandes programas Smalltalk"
fonte
Seus princípios pensados me parecem corretos .
As linguagens fortemente tipadas, como o C #, são boas candidatas a uma base de código que precisa constantemente de re-fatoração. Basicamente, a maioria das ferramentas de re-fatoração (como Resharper, JustCode, etc.) no mercado são muito eficazes em linguagens de programação com tipos estatísticos.
Para a equipe de desenvolvimento que pratica a metodologia Agile / Scrum, é muito útil (mesmo crítico) ter um bom conjunto de ferramentas de refatoração sob a armadura. Caso contrário, todas as mudanças repentinas no próximo sprint podem ser um pesadelo para serem modificadas ou redesenhadas.
Assim, a metodologia ágil não oferece vantagens para linguagens estaticamente tipadas ou dinâmicas uma vez. O que ele fornece é uma abordagem iterativa para criar um aplicativo sólido.
fonte