Solo por curiosidad, ¿cuál es la diferencia entre un proyecto pequeño, mediano y grande? ¿Se mide por líneas de código o complejidad o qué?
Estoy construyendo un sistema de trueque y hasta ahora tengo alrededor de 1000 líneas de código para iniciar sesión / registrarme. Aunque hay mucha LOC, no lo consideraría un gran proyecto porque no es tan complejo, aunque este es mi primer proyecto, así que no estoy seguro. ¿Cómo se mide?
Respuestas:
Complejidad.
Mientras más complejidad, más difícil es aprender todo en el proyecto.
fuente
Aproximadamente cómo acordaría las cosas: tenga en cuenta que esto es más o menos arbitrario. El "tamaño" del proyecto en una combinación de otros factores como la complejidad, las líneas de código fuente, la cantidad de características / valor comercial, etc. Un producto muy pequeño puede ofrecer una gran cantidad de valor, etc. Dicho esto:
2m + sloc es un proyecto de grande a enorme. Estos son generalmente tan complejos que pocas personas, si es que hay alguna, son "fluidas" en todo el sistema; más bien, la responsabilidad tiende a modularizarse a lo largo de la estructura del código. Estos proyectos a menudo brindan un enorme valor comercial y pueden ser de misión crítica. A veces también están bajo una fuerte tensión de deuda técnica y otras preocupaciones heredadas.
100k - 2m sloc es un proyecto de tamaño mediano. Este es mi punto medio: el proyecto es lo suficientemente complejo como para requerir algún conocimiento experto, y probablemente ha acumulado cierto grado de deuda técnica; es probable que también entregue cierto grado de valor comercial.
10k - 100k es un proyecto pequeño, pero no demasiado pequeño para tener la suficiente complejidad como para que necesite la consideración de un experto; Si es de código abierto, considere hacer que las personas de su confianza revisen sus confirmaciones.
Cualquier cosa de menos de 10k de pendiente es realmente pequeña. Eso no significa que no pueda ofrecer ningún valor, y muchos proyectos muy interesantes tienen una impresión muy pequeña (por ejemplo, Camping, cuya fuente es ~ 2 kb (!)). Los no expertos generalmente pueden generar inquietudes sobre el valor (corregir errores y agregar funciones) sin tener que saber demasiado sobre el dominio.
fuente
El tamaño de un proyecto se mide por el grado de falta de mantenimiento.
fuente
Complejidad que puede estimarse de varias maneras:
Si bien los requisitos pueden sonar como una buena manera de medir esto, a menudo hay más requisitos que se encontrarán a medida que se realiza un proyecto asumiendo una metodología que no sea Waterfall, creo.
fuente
El tamaño de un proyecto probablemente se mide mejor por la cantidad de requisitos que tiene el sistema, donde los requisitos no pueden reducirse aún más.
Por supuesto, más requisitos en su mayoría significa más complejidad, pero no siempre es así.
fuente
Mediría el tamaño de un proyecto por lo difícil que es ver todo el proyecto como una sola imagen general. Por ejemplo, tengo una base de código de exploración / creación de prototipos para un problema de aprendizaje automático en el que estoy trabajando. Son solo 5k líneas de código, pero se siente como un gran proyecto. Hay toneladas de opciones de configuración que interactúan de manera impredecible. Puede encontrar casi todos los patrones de diseño conocidos por el hombre en algún lugar de la base de código para administrar toda esa complejidad. El diseño a menudo es subóptimo porque la cosa creció mucho por la evolución y no se refactoriza tan a menudo como debería ser. Soy el único que trabaja en esta base de código, pero a menudo me sorprende cómo interactúan las cosas.
Por otro lado, uno de mis proyectos de pasatiempo tiene aproximadamente 3-4 veces más código, y sin embargo, se siente mucho más pequeño porque es básicamente una biblioteca de funciones matemáticas que son en su mayoría ortogonales entre sí. Las cosas no interactúan de manera compleja, y es bonito entender cada función de forma aislada. Es fácil ver el panorama general en la medida en que hay uno, porque no hay mucho que ver.
fuente
Respuesta arbitraria: qué tan grande es el proyecto, cuánto desearía haberlo hecho con el abastecimiento de eventos y SOA desde el principio. O que los autores del sistema habían leído el libro de Evan "DDD: abordar la complejidad en el corazón del software";)
fuente
Compexidad y alcance
La complejidad y el alcance creo que es lo que determina qué tan grande es realmente un proyecto. Sin embargo, hay varios intangibles que también pueden afectar el tamaño de un proyecto.
Requisitos
La mayor caída que enfrenté fue la falta de requisitos. En mi situación particular, el gerente de ventas estaba determinando los requisitos. Su enfoque estaba en la venta ... tenía que conseguir la venta. En su opinión, lo que pedía el cliente no parecía tan complicado porque habíamos construido algo similar. Los requisitos vagos conducen a trabajos de bajo precio y expectativas excesivamente comprometidas.
La falta de una CCMU
CCMU es lo que yo llamo un " Coo Ca Moo " (claro entendimiento mutuo completo). Necesita tener una CCMU con su cliente.
Si tiene un proyecto pequeño con una CCMU pobre, puede terminar haciendo el proyecto 2,3,4 o más veces. Por lo tanto, un trabajo simple de 20 horas se convierte en un proyecto de 60 horas con un personal estresado y un cliente muy insatisfecho.
Alcance Creep
Esto sucede más a menudo de lo que piensas. El cliente decide que, dado que ya está haciendo A, B y C, no debería ser tan difícil agregar D o incluso F. Si este comportamiento no se verifica, también puede convertir un proyecto pequeño en un proyecto de tamaño mediano. Y dependiendo de cómo el gerente de ventas vendió el trabajo, estas expectativas de alcance pueden parecer "GRATUITAS" para el cliente.
fuente
Es extraño, al leer muchas de estas respuestas, encuentro que veo el tamaño de un proyecto de manera muy diferente. Quizás sea mi trabajo en una gran corporación, pero tiendo a ver el tamaño de un proyecto como una escala de su visibilidad / conveniencia para sus clientes (dependiendo de su área de trabajo, estos pueden ser compañeros de trabajo o clientes reales).
fuente
La complejidad es la respuesta correcta, pero ¿cómo estimarla?
Los factores son:
Cuanto más tenga de esos, más complejo es el proyecto.
fuente
LOC es notoriamente inexacto para muchas mediciones, pero creo que está tratando de medir algo que realmente no hay una forma precisa de medir. Quizás una alternativa podría ser la complejidad ciclomática .
Sin embargo, en última instancia, creo que la "grandeza" de un proyecto es difícil de cuantificar. Es casi como preguntar cómo se determina si un perro es grande o no. No solo hay varias formas de medirlo (masa, volumen, etc.), sino que personalmente no lo encuentro muy útil. La realidad es que mi criterio probablemente será algo así como "¿Qué posibilidades hay de que huya de este perro si lo veo en un callejón oscuro?"
Y para que conste, generalmente no consideraría que 1k líneas de código fueran mucho. Sería una parte considerable de código, pero que no sería que mucho en el gran esquema de las cosas. Por supuesto, supongo que depende del idioma. Por ejemplo, 1k líneas de código es mucho menos código en un lenguaje como C que en un lenguaje como Pyhon.
fuente