Complejidad de una aplicación web

8

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:

  1. Código del servidor (PHP, C #, Python, Perl, etc.)
  2. Código de cliente (JavaScript)
  3. 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?

Dominik G
fuente
1
CSS JSON o XML (para comunicación AJAX entre cliente y servidor)
James McLeod
66
¿Qué pasa con el acceso a los datos y la estructura y el código de la base de datos (procedimientos almacenados)?
Finalizado el
@James McLeod Entonces, en CSS, ¿qué serían operadores y qué serían operandos? JSON y XML son probablemente operandos para funciones de cliente y servidor, ¿o qué piensas?
Dominik G
Sí, para CSS, ¿no es el JSON / XML generado dinámicamente por JavaScript? ¿Cómo se mediría eso? Del mismo modo, ¿medirías lo que está almacenado en la base de datos?
StuperUser
La base de datos sería un buen punto que olvidé por completo.
Dominik G

Respuestas:

5

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:

  • Complejidad ciclomática
  • Profundidad de la herencia,
  • Acoplamiento de clase,
  • Líneas de código IL (el código IL es el código fuente compilado en el lenguaje intermedio que luego se compila JIT).

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?

Arseni Mourzenko
fuente
Sé que ningún modelo está completo ni ninguno de los modelos que encontré incorrecto, pero aún así pueden dar pistas. Tengo curiosidad por saber cómo se puede medir la GUI y el código separado del cliente y el servidor. También utilizo la encuesta AFOTEC para obtener algunos valores subjetivos.
Dominik G