¿Existen estudios realizados sobre la efectividad de los idiomas tipados estáticamente vs dinámicamente?
En particular:
- Mediciones de productividad del programador.
- Tasa de defectos
También se incluyen los efectos de si se emplean o no pruebas unitarias.
He visto mucha discusión sobre los méritos de ambos lados, pero me pregunto si alguien ha hecho un estudio al respecto.
productivity
comparison
type-systems
dynamic-typing
static-typing
Winston Ewert
fuente
fuente
Respuestas:
Algunas lecturas sugeridas:
No exactamente sobre la escritura estática, pero relacionado:
Algunos artículos o ensayos interesantes sobre el tema o sobre análisis estático de programas en general:
Y para aquellos que se estarían preguntando de qué se trata todo esto:
Sin embargo, dudo que alguno de estos le dé una respuesta directa, ya que no hacen exactamente el estudio que está buscando. Sin embargo, serán lecturas interesantes.
Personalmente, Considero firmemente que la escritura estática sobre la escritura dinámica facilita la detección de errores. Paso demasiado tiempo buscando errores tipográficos y errores menores como estos en JavaScript o incluso en el código Ruby. Y cuando se trata de la opinión de que Dynamic Typing le da un impulso en la productividad, creo que todo se reduce a herramientas. Si los idiomas escritos estáticamente tienen las herramientas adecuadas para permitir la compilación en segundo plano y proporcionar una interfaz REPL, entonces obtendrá los beneficios de ambos mundos. Scala proporciona esto, por ejemplo, lo que hace que sea muy fácil de aprender y crear prototipos en la consola interactiva, pero le brinda los beneficios de la escritura estática (y de un sistema de tipos más fuerte que muchos otros idiomas, aparte de los idiomas ML). Del mismo modo, no creo que tenga una pérdida de productividad al usar Java o C ++ (debido a la escritura estática), siempre y cuando use un IDE que me ayude. Cuando vuelvo a la codificación solo con configuraciones simples (editor + compilador / intérprete), me parece más engorroso y los lenguajes dinámicos parecen más fáciles de usar. Pero aún buscas insectos. Supongo que la gente diría que el problema de las herramientas es un argumento reversible, como si las herramientas fueran mejores para los lenguajes dinámicos, entonces la mayoría de los errores y errores tipográficos se señalarían en el momento de la codificación, pero eso refleja la falla en el sistema en mi opinión. Aún así, usualmente prototipo en JRuby y codificaré en Java más tarde la mayoría de las cosas que hago. Como si las herramientas fueran mejores para los lenguajes dinámicos, entonces la mayoría de los errores y errores tipográficos se señalarían en el tiempo de codificación, pero eso refleja la falla en el sistema en mi opinión. Aún así, usualmente prototipo en JRuby y codificaré en Java más tarde la mayoría de las cosas que hago. Como si las herramientas fueran mejores para los lenguajes dinámicos, entonces la mayoría de los errores y errores tipográficos se señalarían en el tiempo de codificación, pero eso refleja la falla en el sistema en mi opinión. Aún así, usualmente prototipo en JRuby y codificaré en Java más tarde la mayoría de las cosas que hago.
ADVERTENCIA: Algunos de estos enlaces no son confiables, y algunos pasan por portales de varias sociedades de computación que utilizan accesos de pago para los miembros. Lo siento, intenté encontrar varios enlaces para cada uno de estos, pero no es tan bueno como me gustaría que fuera.
fuente
Ayer mismo encontré este estudio: las pruebas unitarias no son suficientes. También necesitas escribir estática.
Básicamente, el autor utilizó una herramienta capaz de convertir automáticamente un proyecto de un lenguaje de escritura no estático en uno de escritura estática (python a haskell)
Luego seleccionó una serie de proyectos de Python de código abierto que también incluían una cantidad razonable de unidades de prueba, y los convirtió automáticamente en haskell.
La traducción a Haskell reveló una serie de errores relacionados con el tipo de variables: los errores no fueron descubiertos por las unidades de prueba.
fuente
Mi opinión. Aunque existe evidencia débil de que los lenguajes escritos dinámicamente son más productivos, no es concluyente. (1) Hay muchos factores que no fueron controlados, (2) hay muy pocos estudios, (3) ha habido poca o ninguna discusión sobre lo que constituye un método de prueba apropiado.
fuente
Aquí hay un punto de partida:
El documento desafía la sabiduría comúnmente recibida de que, siendo todo lo demás igual, los programadores escriben la misma cantidad de líneas de código por vez, independientemente del idioma. En otras palabras, el documento debe servir como evidencia empírica de apoyo de que la productividad mecánica (líneas de código escritas) no es una buena medida de la productividad funcional, y al menos debe ser normalizada por el lenguaje.
fuente
He encontrado un lenguaje estático frente a un lenguaje dinámico: una revisión de la literatura , que enumera algunos estudios sobre el tema y ofrece un buen resumen de cada estudio.
Aquí está el resumen ejecutivo:
fuente
Sinceramente, no creo que la tipificación estática vs dinámica sea la verdadera pregunta.
Creo que hay dos parámetros que deberían venir primero:
Si se siente cómodo con el idioma, escribirá el código y localizará los errores con facilidad.
Si escribe código desacoplado y prueba cada funcionalidad exhaustivamente, producirá un código bien perfeccionado y, por lo tanto, será productivo (porque no puede calificar como productivo si no evalúa la calidad del producto, ¿verdad? )
Por lo tanto, consideraría que el debate estático vs dinámico con respecto a la productividad es bastante discutible, o al menos ampliamente reemplazado por otras consideraciones.
fuente
Aquí hay algunos:
Stefan Hanenberg. 2010. Un experimento sobre sistemas de tipos estáticos y dinámicos: dudas sobre el impacto positivo de los sistemas de tipos estáticos en el tiempo de desarrollo. En Actas de la conferencia internacional de ACM sobre lenguajes y aplicaciones de sistemas de programación orientados a objetos (OOPSLA '10). ACM, Nueva York, NY, EE. UU., 22-35. DOI = 10.1145 / 1869459.1869462 http://doi.acm.org/10.1145/1869459.1869462
Daniel P. Delorey, Charles D. Knutson, Scott Chun, "¿Los lenguajes de programación afectan la productividad? Un estudio de caso que utiliza datos de proyectos de código abierto", hilo dental, pp.8, primer taller internacional sobre tendencias emergentes en investigación y desarrollo de software libre (FLOSS) '07: Talleres ICSE 2007), 2007
Daly, M .; Sazawal, V., Foster, J .: Work in Progress: an Empirical Study of Static Typing in Ruby, Workshop on Evaluation and Usabilidad of Programming Language and Tools (PLATEAU) en ON-WARD 2009.
Lutz Prechelt y Walter F. Tichy. 1998. Un experimento controlado para evaluar los beneficios de la verificación del tipo de argumento del procedimiento. IEEE Trans. Softw. Ing. 24, 4 (abril de 1998), 302-312. DOI = 10.1109 / 32.677186 http://dx.doi.org/10.1109/32.677186
fuente