¿Cuáles son buenas formas de cuantificar la calidad del código?

Algunos que se han utilizado:

  • Líneas de código
  • Puntos de función

Las herramientas comunes para probar la calidad del código incluyen herramientas de cobertura de prueba como Clover y correctores de pelusa como PyChecker. También existen herramientas para identificar el acceso inadecuado a estructuras de datos compartibles y mutables, como SureLogic (http://www.surelogic.com/concurr…).

RSM (http://msquaredtechnologies.com/…) tiene una lista de algunas métricas.

SemmleCode (http://semmle.com/knowledge-base…) también enumera algunas de las métricas que miden.

Coverity es probablemente la herramienta de calidad de código más sofisticada: http://coverity.com. No profundicé demasiado en su sitio web, pero supongo que tienen algunas métricas.

Dawson Engler, el fundador de Coverity, investiga mucho sobre la búsqueda automática de errores, aunque no parece centrarse demasiado en las medidas generales de calidad: http://www.stanford.edu/~engler/.

Un buen código puede cuantificarse observando seis componentes: mantenibilidad y usabilidad, confiabilidad y funcionalidad, eficiencia y portabilidad.
Algunos de estos puntos clave pueden ser evaluados por computadoras y otros no.

Mantenibilidad y usabilidad
Este es uno de los puntos más interesantes para mí porque mucha gente parece pensar que se trata solo de comentar el código.
Bueno, los comentarios son realmente importantes para mantener una buena capacidad de mantenimiento, pero otro punto es el respeto estricto de un estilo de codificación. Y luego, esto puede ser verificado por una computadora.

Tomemos el ejemplo de un proyecto de rubí, puede hacer un buen uso del impresionante bastón de proyecto de código abierto lanzado por Square. Realizará algunas comprobaciones en el estilo del código para asegurarse de que cumpla con los umbrales de calidad del código que ha establecido, de lo contrario fallará.
Por ejemplo, puede obtener estos fallos:

  Las líneas violaron los requisitos de estilo (2):
   lib / cane.rb: 20 Longitud de línea> 80 
   lib / cane.rb: 42 espacios en blanco al final 

 Las definiciones de clase requieren comentarios explicativos en la línea anterior (1): 
   lib / cane: 3 SomeClass

La disciplina te hará libre.

Fiabilidad y funcionalidad
La cobertura de la prueba de seguimiento es la clave, como Mattias Petter Johansson detalló en su respuesta:

Si bien una cobertura de prueba alta no garantiza un buen código, una cobertura de prueba baja indica que el código es malo.

Otra gran estimación de confiabilidad, que actualmente estoy usando para evaluar mis aplicaciones móviles, es la relación entre la cantidad de bloqueos y la cantidad de usos de la aplicación. Si esta proporción es superior al 1%, sé que mi aplicación necesita ser reparada.

Eficiencia
Realmente depende del proyecto detrás del código en sí.

Por ejemplo, la eficiencia de un sitio web puede estimarse aproximadamente calculando su tiempo de respuesta promedio bajo solicitudes concurrentes que simulan una “buena carga”, que depende de su tipo de sitio web, por supuesto, y la mantienen por debajo de 500 ms. Siege es una gran herramienta para eso, consulte las preguntas frecuentes de Siege. siege -c 5 -t30s http://google.fr

Pero cada proyecto necesita su propia métrica ajustada para estimar su eficiencia.

Portabilidad
Creo que este solo puede ser evaluado por un par de ojos humanos que conocen las tecnologías subyacentes.

Depende del idioma, pero el seguimiento de la cobertura de la prueba es una métrica bastante buena. Si bien una cobertura de prueba alta no garantiza un buen código, una cobertura de prueba baja indica que el código es malo.

Seguimiento de cuántos errores se descubren en el código en producción frente a antes de que llegue a producción.

Además, recuerde que lo más importante no son los informes que genera, sino el hecho de que sí genera informes y los observa. Lo que se mide se gestiona, por lo que si mide las métricas de calidad del código, la calidad del código aumentará, solo porque la gente siente que se están observando sus esfuerzos de calidad.

Si te interesa esto, ¡sígueme! Me encanta escribir sobre estas cosas.

More Interesting

¿Qué significan las mejoras en PHP7 para los operadores de centros de datos?

¿El campo de los sistemas informáticos ya está saturado?

¿Cómo se puede construir una carrera en investigación en el campo (s) de sistemas operativos y / o redes?

¿Las publicaciones de investigación realmente importan en las admisiones a la escuela de posgrado?

¿Cómo puede ayudar un estudiante universitario con la investigación del aprendizaje automático?

¿Por qué la evaluación parcial no se usa más comúnmente en los lenguajes de programación?

¿Está bien enviar un correo a un autor pidiéndole que me proporcione el código fuente de su trabajo?

¿Cuáles son algunos documentos notables en la investigación de lenguajes de programación?

¿Cómo es trabajar en un laboratorio de investigación de primer nivel?

¿Qué pasos debo hacer para investigar en visión artificial?

Voy a ir a la universidad pronto y tengo muchas ganas de hacer una investigación de pregrado de CS, pero todos los trabajos de investigación que he intentado leer están muy por encima de mi cabeza. ¿Esto es normal?

¿Qué grandes problemas computacionales han resuelto las supercomputadoras?

¿Cuál es el estado actual del arte en visión biomimética por computadora?

¿Por qué no hay un mayor énfasis en los algoritmos aleatorios para estudiantes de informática?

¿Qué hace a un gran investigador de aprendizaje automático? ¿Qué tipo de propiedades poseen esos individuos realmente excepcionales? ¿Es increíble la intuición, la ambición, una comprensión aguda de los dominios, o simplemente un celo religioso sobre el campo?