Actualmente estoy escribiendo mi tesis de maestría sobre el mantenimiento de una aplicación web. Encontré algunos métodos como el "Índice de mantenimiento" de Coleman et.al. o el "Índice de mantenimiento de software" de Muthanna et.al. Para ambos hay que calcular la complejidad ciclomática. Entonces mi pregunta es:
¿Es posible medir la complejidad ciclomática de una aplicación web?
En mi opinión, hay tres partes en una aplicación web:
- Código del servidor (PHP, C #, Python, Perl, etc.)
- Código de cliente (JavaScript)
- HTML (enlaces y formularios como operadores, parámetros GET y campos de formulario como operandos !?)
¿Qué piensas? ¿Hay otro punto de vista sobre la complejidad de la aplicación web? ¿Me he perdido algo?
Respuestas:
La complejidad ciclomática es una de las múltiples mediciones de la complejidad del código. Por ejemplo, en Visual Studio, el índice de mantenimiento depende de:
Cada una de esas mediciones, así como otras mediciones de complejidad, funcionan de alguna manera, pero nunca son la indicación absoluta de que el código fuente tiene problemas de complejidad . Se sabe que algunas mediciones, como LOC, son totalmente sin sentido y engañosas; otros, como la complejidad ciclomática, son ligeramente mejores, pero aún tienen problemas.
Esto se debe al hecho de que:
Es demasiado complicado para un programa de computadora saber qué tan complejo sería percibir un desarrollador el código fuente .
Por ejemplo, a menudo noté una gran caída del índice de mantenibilidad al refactorizar el código de estilo de procedimiento a estilo funcional a través de LINQ, transformando un bloque de código fuente altamente ilegible en una sola expresión de encadenamiento que era extremadamente explícita.
Otro ejemplo sería el reflejo de los patrones de programación en las métricas. A menudo, al introducir patrones de programación en su código, lo hará menos complejo para un desarrollador (suponiendo que este desarrollador esté familiarizado con esos patrones), pero el índice de mantenimiento disminuirá.
El código fuente puede tener diferentes formas.
Medir la complejidad ciclomática o la profundidad de la herencia o el acoplamiento de clases es muy limitado para una aplicación web, porque, como dijiste, la existencia de HTML / CSS, JavaScript, etc. y, como se señaló en los comentarios, la existencia de acceso a la base de datos.
Esta limitación no existe solo para aplicaciones web. En aplicaciones de escritorio, por ejemplo, ¿qué pasa con la complejidad del diseño de la interfaz de usuario (código XAML en aplicaciones de Windows)? ¿Qué pasa con el código generado? O acceso a la base de datos?
fuente