Complejidad del diseño de software

El término complejidad significa el estado de eventos o cosas, que tienen múltiples enlaces interconectados y estructuras muy complicadas. En la programación de software, a medida que se realiza el diseño del software, la cantidad de elementos y sus interconexiones gradualmente se vuelven enormes, lo que se vuelve demasiado difícil de entender a la vez.

La complejidad del diseño de software es difícil de evaluar sin utilizar métricas y medidas de complejidad. Veamos tres medidas importantes de complejidad del software.

Medidas de complejidad de Halstead

En 1977, Maurice Howard Halstead introdujo métricas para medir la complejidad del software. Las métricas de Halstead dependen de la implementación real del programa y sus medidas, que se calculan directamente a partir de los operadores y operandos del código fuente, de manera estática. Permite evaluar el tiempo de prueba, vocabulario, tamaño, dificultad, errores y esfuerzos para el código fuente C / C ++ / Java.

Según Halstead, “un programa informático es una implementación de un algoritmo que se considera una colección de tokens que se pueden clasificar como operadores u operandos”. Las métricas de Halstead piensan en un programa como una secuencia de operadores y sus operandos asociados.

Define varios indicadores para verificar la complejidad del módulo.

Parámetro Sentido
n1 Número de operadores únicos
n2 Número de operandos únicos
N1 Número de ocurrencia total de operadores
N2 Número de ocurrencia total de operandos

Cuando seleccionamos el archivo de origen para ver sus detalles de complejidad en Metric Viewer, se ve el siguiente resultado en Metric Report:

Métrico Sentido Representación matemática
norte Vocabulario n1 + n2
norte Talla N1 + N2
V Volumen Longitud * Vocabulario Log2
re Dificultad (n1 / 2) * (N1 / n2)
mi Esfuerzos Dificultad * Volumen
segundo Errores Volumen / 3000
T Tiempo de prueba Tiempo = Esfuerzos / S, donde S = 18 segundos.

Medidas de complejidad ciclomática

Cada programa incluye declaraciones para ejecutar con el fin de realizar alguna tarea y otras declaraciones de toma de decisiones que deciden qué declaraciones deben ejecutarse. Estos constructos de toma de decisiones cambian el flujo del programa.

Si comparamos dos programas del mismo tamaño, el que tenga más declaraciones de toma de decisiones será más complejo ya que el control del programa salta con frecuencia.

McCabe, en 1976, propuso Cyclomatic Complexity Measure para cuantificar la complejidad de un software dado. Es un modelo basado en gráficos que se basa en las construcciones de toma de decisiones del programa, como las declaraciones if-else, do-while, repeat-until, switch-case y goto.

Proceso para hacer el gráfico de control de flujo:

  • Divida el programa en bloques más pequeños, delimitados por constructos de toma de decisiones.
  • Cree nodos que representen cada uno de estos nodos.
  • Conecte los nodos de la siguiente manera:
    • Si el control puede ramificarse del bloque i al bloque j

      Dibuja un arco

    • De nodo de salida a nodo de entrada

      Dibuja un arco.

Para calcular la complejidad ciclomática de un módulo de programa, usamos la fórmula:

V(G) = e – n + 2

Where
e is total number of edges
n is total number of nodes

La complejidad ciclomática del módulo anterior es

e = 10
n = 8
Cyclomatic Complexity = 10 - 8 + 2
                      = 4

Según P. Jorgensen, la Complejidad Ciclomática de un módulo no debe exceder 10.

Punto de función

Se usa ampliamente para medir el tamaño del software. Function Point se concentra en la funcionalidad proporcionada por el sistema. Las características y la funcionalidad del sistema se utilizan para medir la complejidad del software.

El punto de función cuenta con cinco parámetros, denominados Entrada externa, Salida externa, Archivos internos lógicos, Archivos de interfaz externa y Consulta externa. Para considerar la complejidad del software, cada parámetro se clasifica además como simple, promedio o complejo.

Veamos los parámetros del punto de función:

Entrada externa

Cada entrada única al sistema, desde el exterior, se considera entrada externa. Se mide la unicidad de la entrada, ya que dos entradas no deben tener los mismos formatos. Estas entradas pueden ser datos o parámetros de control.

  • Simple - si el recuento de entrada es bajo y afecta a menos archivos internos

  • Complex - si el recuento de entrada es alto y afecta a más archivos internos

  • Average - entre simple y complejo.

Salida externa

Todos los tipos de salida proporcionados por el sistema se cuentan en esta categoría. La salida se considera única si su formato de salida y / o procesamiento son únicos.

  • Simple - si el recuento de salida es bajo

  • Complex - si el recuento de salida es alto

  • Average - entre simple y complejo.

Archivos internos lógicos

Cada sistema de software mantiene archivos internos para mantener su información funcional y funcionar correctamente. Estos archivos contienen datos lógicos del sistema. Estos datos lógicos pueden contener tanto datos funcionales como datos de control.

  • Simple - si el número de tipos de registros es bajo

  • Complex - si el número de tipos de registros es alto

  • Average - entre simple y complejo.

Archivos de interfaz externa

El sistema de software puede necesitar compartir sus archivos con algún software externo o puede necesitar pasar el archivo para su procesamiento o como parámetro para alguna función. Todos estos archivos se cuentan como archivos de interfaz externos.

  • Simple - si el número de tipos de registro en el archivo compartido es bajo

  • Complex - si el número de tipos de registros en el archivo compartido es alto

  • Average - entre simple y complejo.

Consulta externa

Una consulta es una combinación de entrada y salida, donde el usuario envía algunos datos para consultar como entrada y el sistema responde al usuario con la salida de la consulta procesada. La complejidad de una consulta es más que una entrada externa y una salida externa. Se dice que la consulta es única si su entrada y salida son únicas en términos de formato y datos.

  • Simple - si la consulta necesita un procesamiento bajo y produce una pequeña cantidad de datos de salida

  • Complex - si la consulta necesita un proceso alto y produce una gran cantidad de datos de salida

  • Average - entre simple y complejo.

A cada uno de estos parámetros del sistema se le asigna un peso de acuerdo con su clase y complejidad. La siguiente tabla menciona el peso dado a cada parámetro:

Parámetro Simple Promedio Complejo
Entradas 3 4 6
Salidas 4 5 7
Investigación 3 4 6
Archivos 7 10 15
Interfaces 5 7 10

La tabla anterior produce puntos de función sin procesar. Estos puntos de función se ajustan según la complejidad del entorno. El sistema se describe utilizando catorce características diferentes:

  • Transmisión de datos
  • Procesamiento distribuido
  • Objetivos de rendimiento
  • Carga de configuración de operación
  • Tasa de transacción
  • Entrada de datos en línea,
  • Eficiencia del usuario final
  • Actualización en línea
  • Lógica de procesamiento compleja
  • Re-usability
  • Facilidad de instalación
  • Facilidad operativa
  • Varios sitios
  • Deseo de facilitar cambios

A continuación, estos factores de características se clasifican de 0 a 5, como se menciona a continuación:

  • Sin influencia
  • Incidental
  • Moderate
  • Average
  • Significant
  • Essential

Luego, todas las calificaciones se resumen como N. El valor de N varía de 0 a 70 (14 tipos de características x 5 tipos de calificaciones). Se utiliza para calcular los factores de ajuste de complejidad (CAF), utilizando las siguientes fórmulas:

CAF = 0.65 + 0.01N

Luego,

Delivered Function Points (FP)= CAF x Raw FP

Este FP se puede utilizar en varias métricas, como:

    Cost = $ / FP

    Quality = Errores / FP

    Productivity = FP / persona-mes