2011-04-13 9 views
15

Estamos considerando la creación de un analizador estático para recopilar métricas de software para el código de Clojure. Por supuesto, manejará las cosas obvias como el número de archivos, funciones, parámetros por función, etc. Me pregunto si hay alguna métrica que sea específica para el código de Clojure. ¿Algunas ideas?Métricas de software específicas para los programas de Clojure

Respuesta

13

En promedio, creo que las métricas de software son una idea dudosa, generalmente te distraen de la pregunta realmente importante que es "¿cuánto valor le estamos entregando al cliente?".

Habiendo dicho eso, reconozco que pueden ser un mal necesario en algunos contextos y ocasionalmente pueden proporcionarle algunas ideas útiles sobre su código base.

Así que aquí hay algunos que pueden ser específicos de Clojure.

  • Número de define de nivel superior (tal vez expresada como una relación a símbolo recuento total?)
  • acoplamiento Java: (. Nuevo, NombredeClase, .someMethod etc.)% de símbolos relacionados con interoperabilidad Java - idealmente mantener el acoplamiento confinado a módulos específicos responsables de la interoperabilidad de Java, es decir, debe ser muy bajo en todas partes, excepto en las bibliotecas que administran la interoperabilidad.
  • Nivel medio de anidación máximo de defns de función (supongo buena 5ish, 10+ mal ??)
  • Macro densidad:% de formas que requieren expansión macro
  • % de funciones con docstrings
  • % de símbolos o parámetros de la función definida con el tipo insinúa
  • tamaño medio de funciones anónimas (que probablemente debería ser pequeño!)
  • % de funciones en clojure.core utilizados (da una idea de la "gama vocabulario" y la sofisticación del código)
  • (Gracias s nickik!) número de ref-types creados (vars dinámicos, átomo, ref y agente) - ¡esencial si quieres mantener un control cuidadoso de tu estado mutable!

p.s. ¡Si funciona así, sería muy interesante ver la variación en los resultados en algunos de los proyectos de clojure de código abierto!

+0

Entiendo el sentimiento anti-métrica. Creo que las métricas solo son útiles para ampliar áreas problemáticas. Buena respuesta por cierto. –

+0

Countig ref-types es realmente importante. Contando ref/atom/agent y vars dinámicos (en 1.3). – nickik

+0

@nickik - totalmente de acuerdo los tipos de ref son muy importantes. ¿Aunque es complicado averiguar qué medida usarías en un analizador estático? El problema que preveo es que estos a menudo se asignan dinámicamente, por lo que no es necesariamente útil contar los símbolos ref/atom/agent, por ejemplo ... de todos modos se han agregado a la lista – mikera

Cuestiones relacionadas