¿Debería molestarme si mi relación LOC / día es demasiado alta? [cerrado]

9

Actualmente estoy trabajando en un proyecto independiente, por lo que no me puedo dar el lujo de realizar pruebas en humanos o revisar códigos externos; sin embargo, no veo ningún error difícil en mi código actual (los soluciono tal como los veo , y la mayoría de las veces son solo nombres de campo incorrectos y cosas por el estilo en un minuto o dos), y lo pruebo después de implementar cualquier función antes de presionarlo. Últimamente mi número LOC era de aproximadamente 400 por día (para el registro, es C #), y no solo estoy implementando nuevos sistemas, sino que también reescribo cosas que ya he escrito y corrijo algunos errores.

¿Debería molestarme? ¿Es la señal de que necesito parar y revisar todo el código que he estado escribiendo hasta esta fecha y refactorizarlo?

Max Yankov
fuente
¿Cómo estás midiendo LOC? ¿excluye el código generado por Visual Studio o no?
jk.
Con este comando bash en mi carpeta de código: (find ./ -name '* .cs' -print0 | xargs -0 cat) | wc -l
Max Yankov
correcto, por lo que es probable que incluya cualquier código generado, por ejemplo, designer.cs, no me preocuparía por la cantidad de líneas que está escribiendo
jk.
En general, sí, pero con este entorno particular (motor de juego Unity) no es el caso.
Max Yankov
1
Intento eliminar tantas líneas de código como pueda razonablemente antes de agregar más. Trabajar en un sistema mínimo es mucho más agradable que la alternativa.
Jon Purdy

Respuestas:

18

LOC es probablemente una de las métricas más abusadas, y como resultado es probablemente una de las medidas más inútiles de la calidad del código, y una medida aún más inútil del esfuerzo de programación.

Sí, esa es una declaración audaz para mí, y no, no puedo señalarle estudios que prueben mi punto. Sin embargo, puedo afirmar con una experiencia dura que cuando empiezas a preocuparte por la cantidad de código que has escrito, probablemente te preocupes por los problemas incorrectos.

Primero debe preguntarse qué es lo que está tratando de medir o probar, y si esta prueba es simplemente por interés, o para apoyar una mejora de calidad más amplia y dónde necesita usar esta información para obtener la aceptación de su equipo / gestión para hacer algo al respecto.

Una de las cosas para las que tiendo a usar LOC es un poco de verificación de cordura. Si me encuentro escribiendo mucho código, me intereso más en LOC por método, o LOC por clase, en lugar de LOC en general. Estas medidas pueden ser indicadores que debe refactorizar aún más si siente un poco de TOC sobre qué tan bien factorizado debe ser su código. Es posible que las clases muy grandes necesiten ser refactorizadas en unas pocas clases más pequeñas, y los métodos largos de varias líneas pueden desglosarse en varios métodos, otras clases, o incluso pueden indicar alguna repetición que podría eliminarse. Observe que usé la palabra "poder" varias veces allí.

La realidad es que LOC solo proporciona un posible indicador, y no hay una garantía real de que su código deba cambiar. La verdadera pregunta es si el código se comporta como se requiere y como se espera. Si es así, su próxima pregunta es si podrá o no mantener el código fácilmente y si tendrá tiempo ahora o en el futuro para realizar cambios en el código de trabajo para reducir sus gastos generales de mantenimiento en el futuro.

A menudo, un montón de código significa que tendrá más para mantener más tarde, pero a veces incluso un código bien factorizado puede extenderse a cientos de líneas de código, y sí, a veces puede encontrarse escribiendo cientos de líneas de código en un día. Sin embargo, la experiencia me dice que si mantengo una salida de cientos de líneas de código nuevo cada día, a menudo existe el riesgo de que gran parte del código se haya cortado y pegado de manera inapropiada en otro lugar, y eso en sí mismo puede indicar problemas con duplicación y mantenimiento, pero nuevamente eso no es garantía, por lo que tiendo a confiar en lo que mi experiencia e instintos me dicen en función de cómo se completaron las tareas en cuestión.

La mejor manera de evitar el dilema planteado en su pregunta en mi humilde opinión es olvidarse de LOC y refactorizar TODO el tiempo. Primero escriba su prueba de código, implemente para fallar, refactorice para pasar, luego vea qué se puede refactorizar allí y luego mejore el código. Abandonarás la tarea sabiendo que ya has verificado tu trabajo, y no te preocupará tanto cuestionarte en el futuro. Hablando de manera realista, si usa un enfoque de prueba primero como lo he descrito, cualquier medición de LOC / día en su código completado realmente significará que ha escrito 3-5 veces la cantidad medida, con ese esfuerzo ocultado con éxito por su refactorización en curso esfuerzos

S.Robins
fuente
1
+1 400 líneas al día podrían ser un indicio de un problema, desafortunadamente creo que la única forma de averiguarlo es revisar el código, lo cual es difícil en un equipo de 1 hombre
jk.
Gracias por una respuesta tan detallada :) Creo que cubre completamente el tema.
Max Yankov
@jk. Creo que abordo su comentario en el contexto de mi respuesta. Cuando está solo, la mejor manera de proteger la calidad de su código es centrarse en cómo escribe y prueba su código. Un buen conjunto de pruebas junto con una mentalidad de refactorización continua puede ser tan bueno como una revisión de código de muchas maneras. Tenga en cuenta que no digo prescindir de las revisiones en absoluto, sino que deberían ser secundarias para garantizar que su producto cumpla con los requisitos y tenga una buena cobertura de prueba, lo que permite realizar cambios futuros con confianza. Mi primera pregunta durante la revisión del código siempre es "¿Dónde está la prueba para esto?" :-)
S.Robins
+1 Aunque no puede señalar estudios que muestren que la LOC es una mala métrica, es fácil encontrar estudios que hayan tenido problemas porque usaron LOC como una métrica.
daramarak
Totalmente de acuerdo en que LOC es una métrica inútil. Algunos días escribo cientos de líneas de código y está bien. Algunos días me pongo a cero. Algunos días todo lo que hago es eliminar el código. :-)
Brian Knoblauch
5

Para nada: algunos días está arreglando un error difícil de encontrar y solo cambia una línea. Otros días agrega código nuevo y escribe varios miles de líneas.

Daily LOC no le dice nada, excepto que las tareas para ese día podrían lograrse con 400 líneas de código.

Tom Clarkson
fuente
2

Algunas de estas respuestas están perdiendo el punto, no está utilizando LOC como una medida de productividad (si lo fuera, entonces no estaría preocupado por ser demasiado 'productivo'), lo que realmente está haciendo es preocuparse por la calidad de su código porque el código es el enemigo, esto es algo bueno de qué preocuparse.

Desafortunadamente, la única manera de saber sobre la calidad del código es la revisión del código, ya que usted es un equipo de un solo hombre, esto será complicado, incluso si se detuvo para revisar su código (y realmente no quiere parar, ¿verdad?) el propio código no revelará tanto como un compañero que revisa su código. Sugeriría intentar que alguien más revise al menos parte de su código para que pueda saber si su 400 LOC / día está produciendo galimatías o no. Incluso una revisión independiente del código de un día ayudará aquí

jk.
fuente
1

No debe molestarse con la cantidad de LOC que produce por día.

Pero debes preocuparte:

  • si su código no se prueba (si, por ejemplo, no tiene pruebas unitarias)
  • si comienza a tener problemas para agregar nuevas funciones o cambiar las funciones implementadas (eso significa que su refactorización no fue adecuada)
  • si su experiencia no es grande y su código no se revisa (es probable que un par de ojos adicionales detecte problemas)
BЈовић
fuente
0

LOC es una medida 'oficial' de productividad, pero los argumentos en contra de su valor podrían ser largos (un ORM podría generar 50,000 líneas de código en 3 minutos, sin embargo, si el diseño de la base de datos es incorrecto, todo ese código puede ir a la papelera).

Le sugiero que mida su progreso haciendo un seguimiento del% de tareas completadas frente al tiempo frente al% de tareas planificadas para completarse. Esto es lo que cuenta. Los clientes pagan por el código de trabajo que proporciona valor comercial no para los LOC.

Algunas referencias sobre LOC

Ninguna posibilidad
fuente
pero él no está usando LOC como una medida de productividad
jk.
Sí, pero como dije no es una medida precisa. Lo mismo cuando usas "valor promedio de 1,2,100" obtienes un promedio pero está sesgado y no es preciso. Con LOC, las cosas empeoran porque cada entorno de desarrollo y conjunto de herramientas podrían reflejar diferentes cifras de productividad. Por ejemplo, los LOC no pueden comparar la complejidad del código, solo su longitud. Modifiqué la publicación original con 2 referencias que quizás quieras ver.
NoChance
0

¿También está midiendo el número de duplicados de código ?

Si el alto rendimiento se debe a que tiene mucho copiar y pegar en su código, entonces debería preocuparse.

Motivo: en caso de que haya un error en su fuente de copiar y pegar, es difícil y propenso a errores corregir todos los usos de copiar y pegar

k3b
fuente
-1

Si crees en un hermoso código funcional, entonces esa debería ser tu única medida

"¿Fluye? ¿Se ve hermosa?"

Noche oscura
fuente
3
la unica medida? ¿qué tal funciona? ¿Es lo suficientemente rápido?
jk.
es por eso que dije funcional :)
Darknight