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