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 ser 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]
Diseño extensible
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 de desarrollo de software tradicionales como 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 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 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]
Importancia
La inconstancia se encuentra en la base de todo software debido a 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 en el 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, grandes partes 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]
Clasificación de mecanismos de extensibilidad
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.
Caja blanca
Bajo esta forma de extensibilidad, un sistema de software puede ampliarse modificando el código fuente , y es la forma más flexible y menos restrictiva. Hay dos sub-formas de extensibilidad, extensibilidad de caja abierta y extensibilidad de caja de vidrio, dependiendo de cómo se apliquen los cambios.
Abrir caja
Los cambios se realizan de forma invasiva en sistemas extensibles de caja abierta; es decir, se ha pirateado directamente el código fuente original. Requiere el código fuente disponible y la licencia de código fuente permitida para la modificación. La extensibilidad de caja abierta es más relevante para la corrección de errores, la refactorización del código interno o la producción de la próxima versión de un producto de software.
Caja de vidrio
La extensibilidad de la caja de vidrio (también llamada marcos impulsados por arquitectura) permite que un sistema de software se extienda con el código fuente disponible, pero es posible que no permita que se modifique 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 la extensibilidad típicamente mediante el uso de herencia y enlace dinámico.
Caja negra
En la extensibilidad de caja negra (también denominada marcos basados en datos) no se utilizan detalles sobre la implementación de un sistema para implementar implementaciones o extensiones; solo 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 scripting específicos de la aplicación mediante la definición de interfaces de componentes.
Caja gris
La extensibilidad de la caja gris es un compromiso entre un enfoque de caja blanca pura y un enfoque 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 refinar y especificaciones sobre cómo deben desarrollarse las extensiones. [6]
Extensibilidad frente a reutilización
La extensibilidad y la reutilización tienen muchas propiedades enfatizadas en común, incluido el bajo acoplamiento, la modularidad y la capacidad de elementos de alto riesgo para construir para muchos sistemas de software diferentes, lo que está motivado por la observación de sistemas de software que a menudo comparten elementos comunes. La reutilización junto con la extensibilidad permite que una tecnología se transfiera a otro proyecto con menos tiempo de desarrollo y mantenimiento, así como una mayor confiabilidad y consistencia. [7]
Seguridad
Los sistemas operativos modernos admiten la extensibilidad a través de controladores de dispositivo 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 de aumentar la extensibilidad afecta negativamente a la seguridad del software. [8]
CGI es uno de los medios principales por los que los servidores web proporcionan extensibilidad. Algunas personas ven los scripts CGI como "un enorme agujero de seguridad". [9]
Ver también
Referencias
- ^ Johansson, Niklas y Anton Löfgren. Diseño para la extensibilidad: un estudio de investigación de acción para maximizar la extensibilidad mediante principios de diseño. Np: np, nd Departamento de Tecnología de la Información Aplicada de la Universidad de Gotemburgo, 29 de mayo de 2009. Web. 26 de abril de 2014. < https://gupea.ub.gu.se/bitstream/2077/20561/1/gupea_2077_20561_1.pdf >.
- ^ Despierta, Margaret. "Extensible." SearchSAO. Np, marzo de 2007. Web. 27 de abril de 2014. < http://searchsoa.techtarget.com/definition/extensible >.
- ^ Kelly, Allan. "La filosofía del software extensible". ACCU-Profesionalismo en Programación (2002): Web. 27 de abril de 2014. < http://accu.org/index.php/journals/391 >.
- ^ Zenger, Matthias. "1.2 Características de los mecanismos de extensibilidad". Abstracciones del lenguaje de programación para componentes de software extensibles. Lausana: Instituto Federal Suizo de Tecnología, 2004. N. pag. Web. 26 de abril de 2014. < http://zenger.org/papers/thesis.pdf >.
- ^ Martin Rytter y Bo Nørregaard Jørgensen. "Contextos independientes extensibles". Publicado en "Arquitectura de software: 4ª Conferencia Europea, ECSA 2010, Copenhague, Dinamarca, 23-26 de agosto de 2010, Actas" . 2010. p. 327.
- ^ Zenger, Matthias. "1.3 Clasificación de los mecanismos de extensibilidad". Abstracciones del lenguaje de programación para componentes de software extensibles. Lausana: Instituto Federal Suizo de Tecnología, 2004. N. pag. Web. 26 de abril de 2014.
- ^ Zenger, Matthias. "1.1.1 Reutilización". Abstracciones del lenguaje de programación para componentes de software extensibles. Lausana: Instituto Federal Suizo de Tecnología, 2004. N. pag. Web. 26 de abril de 2014.
- ^ Gary McGraw. "Software Security: Building Security in" .2006.p. 9.
- ^ Len Bass, Paul Clements, Rick Kazman. "Arquitectura de software en la práctica" . 2003. p. 339.
enlaces externos
La definición del diccionario de extensibilidad en Wiktionary