Extensibilidad


La extensibilidad es un principio de diseño de sistemas e ingeniería de software que prevé el crecimiento futuro. La extensibilidad es una medida de la capacidad de extender un sistema y el nivel de esfuerzo requerido para implementar la extensión. Las extensiones pueden realizarse mediante la adición de nueva funcionalidad o mediante la modificación de la funcionalidad existente. El principio prevé mejoras sin perjudicar las funciones del sistema existente.

Un sistema extensible es aquel cuya estructura interna y flujo de datos se ven mínimamente o no afectados por una funcionalidad nueva o modificada, por ejemplo, volver a compilar o cambiar el código fuente original puede ser innecesario al cambiar el comportamiento de un sistema, ya sea por el creador o por otros programadores. [1] Debido a que los sistemas de software son de larga duración y se modificarán para incorporar nuevas características y funcionalidades adicionales que demanden los usuarios, la extensibilidad permite a los desarrolladores expandir o agregar capacidades del software y facilita la reutilización sistemática. Algunos de sus enfoques incluyen facilidades para permitir que se inserten las rutinas del programa de los usuarios y la capacidad de definir nuevos tipos de datos, así como para definir nuevas etiquetas de marcado de formato. [2]

El diseño extensible en la ingeniería de software es aceptar que no todo se puede diseñar de antemano. En su lugar, se proporciona un marco de software ligero que permite cambios. Se hacen pequeños comandos para evitar perder el elemento de extensibilidad, siguiendo el principio de separar los elementos de trabajo en unidades comprensibles, para evitar problemas tradicionales de desarrollo de software , incluyendo baja cohesión y alto acoplamiento.y permitir un desarrollo continuo. Abrazar el cambio es esencial para el diseño extensible, en el que las adiciones serán continuas. Cada parte del sistema se podrá trabajar con cualquier cambio, y la idea de cambio a través de la adición es el centro de todo el diseño del sistema. El diseño extensible admite una nueva priorización frecuente y permite que la funcionalidad se implemente en pequeños pasos a pedido, que son los principios defendidos por las metodologías ágiles y el desarrollo iterativo. La extensibilidad impone menos dependencias y más limpias durante el desarrollo, así como un acoplamiento reducido y abstracciones más cohesivas, además de interfaces bien definidas. [3]

La inconstancia se encuentra en la base de todo software debido a los fenómenos humanos, ya que el software es una "entidad en evolución" que es desarrollada y mantenida por seres humanos, lo que produce cambios continuos del sistema en la especificación e implementación del software. Los componentes de un software a menudo son desarrollados e implementados por partes no relacionadas de forma independiente. Los componentes de software adaptables son necesarios ya que es poco probable que los componentes de proveedores externos encajen en un escenario de implementación específico fuera del bastidor, teniendo en cuenta a otros usuarios que no sean el fabricante. Muchos sistemas de software y líneas de productos de software se derivan de un sistema base, que comparten una arquitectura de software común .o, a veces, una gran parte de la funcionalidad y la implementación, pero posiblemente están equipados con diferentes componentes que requieren un sistema base extensible. [4]

La creación de sistemas de software que sean extensibles de forma independiente es un desafío importante. Un sistema extensible de forma independiente no solo permite que dos personas desarrollen extensiones del sistema de forma independiente, sino que también permite que las dos extensiones se combinen sin una verificación de integridad global. [5]

Hay tres formas diferentes de extensibilidad de software: extensibilidad de caja blanca, extensibilidad de caja gris y extensibilidad de caja negra, que se basan en los artefactos y la forma en que se modifican.