Extensibilidad

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar
Medición de la capacidad y esfuerzo requerido para ampliar la funcionalidad de un sistema dado

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 nuevas funciones o mediante la modificación de funciones existentes. El principio prevé mejoras sin perjudicar las funciones existentes del sistema.

Un sistema extensible es aquel cuya estructura interna y flujo de datos se ven mínimamente o no afectados por funcionalidades nuevas o modificadas; 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 parte del creador u otros programadores. Debido a que los sistemas de software tienen una larga vida y se modificarán para incorporar nuevas características y funcionalidades demandadas por los usuarios, la extensibilidad permite a los desarrolladores ampliar o agregar capacidades al software y facilita la reutilización sistemática. Algunos de sus enfoques incluyen facilidades para permitir que se inserten las rutinas de programa propias de los usuarios y la capacidad de definir nuevos tipos de datos, así como definir nuevas etiquetas de formato.

Diseño extensible

El diseño extensible en 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 crean 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, incluida la baja cohesión y el alto acoplamiento, y permitir un desarrollo continuo. Aceptar el cambio es esencial para el diseño extensible, en el que las adiciones serán continuas. Cada parte del sistema será viable con cualquier cambio, y la idea de cambio mediante 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 implementar la funcionalidad 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.

Importancia

La inconstancia es la base de todo software debido a fenómenos humanos, ya que el software es una "entidad en evolución" que es desarrollado y mantenido por seres humanos, lo que produce cambios continuos en el sistema en la especificación e implementación del software. Los componentes de un software suelen ser 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 listo para usar, teniendo en cuenta a usuarios externos distintos del fabricante. Muchos sistemas de software y líneas de productos de software se derivan de un sistema base, que comparte una arquitectura de software común o, a veces, gran parte de la funcionalidad e implementación, pero posiblemente estén equipados con diferentes componentes que requieren un sistema base extensible.

Construir sistemas de software que sean independientemente extensibles es un desafío importante. Un sistema independientemente extensible no sólo 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.

Clasificación de los mecanismos de extensibilidad

Existen 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.

Caja Blanca

Bajo esta forma de extensibilidad, un sistema de software se puede ampliar modificando el código fuente, y es la forma más flexible y menos restrictiva. Hay dos subformas de extensibilidad, extensibilidad de caja abierta y extensibilidad de caja de vidrio, dependiendo de cómo se apliquen los cambios.

Caja abierta

Los cambios se realizan de forma invasiva en sistemas extensibles de caja abierta; es decir, el código fuente original está siendo pirateado directamente. Requiere código fuente disponible y la licencia de código fuente permitida para modificaciones. La extensibilidad de caja abierta es más relevante para la corrección de errores, la refactorización de código interno o la producción de la próxima versión de un producto de software.

Caja-de-vidrio

La extensibilidad de Glass-box (también llamada marcos basados en arquitectura) permite ampliar un sistema de software con el código fuente disponible, pero no permite modificar el código. Las extensiones deben separarse del sistema original de manera que el sistema original no se vea afectado. Un ejemplo de esta forma de extensibilidad son los marcos de aplicaciones orientados a objetos que logran extensibilidad normalmente mediante el uso de herencia y enlace dinámico.

Caja Negra

En la extensibilidad de caja negra (también llamada marcos basados en datos) no se utilizan detalles sobre la implementación de un sistema para implementar implementaciones o extensiones; Sólo se proporcionan especificaciones de interfaz. Este tipo de enfoque es más limitado que los diversos enfoques de caja blanca. Las extensiones de caja negra generalmente se logran a través de aplicaciones de configuración del sistema o el uso de lenguajes de secuencias de comandos específicos de la aplicación mediante la definición de interfaces de componentes.

Caja gris

La extensibilidad de caja gris es un compromiso entre un enfoque de caja blanca pura y uno de caja negra pura, que no depende completamente de la exposición del código fuente. A los programadores se les podría proporcionar la interfaz de especialización del sistema, que enumera todas las abstracciones disponibles para su refinamiento y especificaciones sobre cómo se deben desarrollar las extensiones.

Extensibilidad versus reutilización

La extensibilidad y la reutilización tienen muchas propiedades destacadas en común, incluido el bajo acoplamiento, la modularidad y la capacidad de los elementos de alto riesgo para construir para muchos sistemas de software diferentes, lo cual está motivado por la observación de que los sistemas de software a menudo comparten elementos comunes. La reutilización junto con la extensibilidad permite transferir una tecnología a otro proyecto con menos tiempo de desarrollo y mantenimiento, así como una mayor confiabilidad y consistencia.

Seguridad

Los sistemas operativos modernos admiten la extensibilidad a través de controladores de dispositivos y módulos de kernel cargables. Muchas aplicaciones modernas admiten la extensibilidad a través de complementos, lenguajes de extensión, subprogramas, etc. La tendencia a aumentar la extensibilidad afecta negativamente a la seguridad del software.

CGI es uno de los principales medios por los que los servidores web proporcionan extensibilidad. Algunas personas ven los scripts CGI como "un enorme agujero de seguridad".

Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save