stringtranslate.com

Complejidad de programación

La complejidad de la programación (o complejidad del software ) es un término que incluye propiedades del software que afectan las interacciones internas. Varios comentaristas distinguen entre los términos "complejo" y "complicado". Complicado implica ser difícil de entender, pero en última instancia cognoscible. Complejo, por el contrario, describe las interacciones entre entidades. A medida que aumenta el número de entidades, el número de interacciones entre ellas aumenta exponencialmente, haciendo imposible conocerlas y comprenderlas todas. De manera similar, los niveles más altos de complejidad en el software aumentan el riesgo de interferir involuntariamente con las interacciones, aumentando así el riesgo de introducir defectos al cambiar el software. En casos más extremos, puede hacer que la modificación del software sea prácticamente imposible.

La idea de vincular la complejidad del software con su mantenibilidad ha sido explorada extensamente por el profesor Manny Lehman , quien desarrolló sus Leyes de la evolución del software . Él y su coautor Les Belady exploraron numerosas métricas de software que podrían usarse para medir el estado del software y finalmente concluyeron que la única solución práctica es utilizar modelos de complejidad deterministas. [1]

Tipos

La complejidad de un programa existente determina la complejidad de cambiar el programa. La complejidad del problema se puede dividir en dos categorías: [2]

  1. La complejidad accidental se relaciona con las dificultades que enfrenta un programador debido a las herramientas de ingeniería de software. Seleccionar un mejor conjunto de herramientas o un lenguaje de programación de nivel superior puede reducirlo. La complejidad accidental a menudo resulta de no utilizar el dominio para enmarcar la forma de la solución. [ cita necesaria ] El diseño basado en dominios puede ayudar a minimizar la complejidad accidental.
  2. La complejidad esencial está causada por las características del problema a resolver y no se puede reducir.

Medidas

Se han propuesto varias medidas de complejidad del software. Muchos de ellos, aunque ofrecen una buena representación de la complejidad, no se prestan a una medición fácil. Algunas de las métricas más utilizadas son

Se pueden utilizar varias otras métricas para medir la complejidad de la programación:

La Ley de Tesler es un adagio en la interacción entre humanos y computadoras que establece que cada aplicación tiene una complejidad inherente que no se puede eliminar ni ocultar.

Métricas de Chidamber y Kemerer

Chidamber y Kemerer [4] propusieron un conjunto de métricas de complejidad de programación ampliamente utilizadas en mediciones y artículos académicos: métodos ponderados por clase, acoplamiento entre clases de objetos, respuesta para una clase, número de hijos, profundidad del árbol de herencia y falta de cohesión de métodos, que se describen a continuación:

Ver también

Referencias

  1. ^ MM Lehmam LA Belady; Evolución del programa: procesos de cambio de software 1985
  2. ^ En ingeniería de software, un problema se puede dividir en su complejidad accidental y esencial [1].
  3. ^ Enrique, S.; Kafura, D. IEEE Transactions on Software Engineering Volumen SE-7, Número 5, septiembre de 1981 Página(s): 510 - 518
  4. ^ ab Chidamber, SR; Kemerer, CF IEEE Transactions on Software Engineering Volumen 20, Número 6, junio de 1994 Página(s):476 - 493