stringtranslate.com

Complejidad de programación

La complejidad de programación (o complejidad del software ) es un término que incluye las 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, lo que hace 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, lo que aumenta el riesgo de introducir defectos al cambiar el software. En casos más extremos, puede hacer que modificar el software sea prácticamente imposible.

La idea de vincular la complejidad del software con su capacidad de mantenimiento 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 usar modelos de complejidad deterministas. [1]

Tipos

La complejidad de un programa existente determina la complejidad de modificarlo. 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. La selección de un mejor conjunto de herramientas o un lenguaje de programación de nivel superior puede reducirla. La complejidad accidental a menudo resulta de no usar el dominio para enmarcar la forma de la solución. [ cita requerida ] El diseño impulsado por el dominio puede ayudar a minimizar la complejidad accidental.
  2. La complejidad esencial es causada por las características del problema a resolver y no puede reducirse.

Medidas

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

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

La Ley de Tesler es un adagio en la interacción humano-computadora que establece que cada aplicación tiene una cantidad inherente de complejidad 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:

Véase 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 puede dividirse en su complejidad accidental y esencial [1].
  3. ^ Henry, 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