sábado, 8 de septiembre de 2012

Reutilización de Software




¿Qué es?


Es el proceso de creación de sistemas de software a partir de un software existente, en lugar de tener que rediseñar desde el principio. 

En los años 60, se construyeron bibliotecas de subrutinas científicas reutilizables con un dominio de aplicación limitado,  en la actualidad se crean componentes comunes a varios procesos con el fin de poder utilizarlos en la construcción de software.

Podemos definirla como el empleo  de elementos de software u otros de nivel superior, creados en desarrollo anteriores, para de este modo reducir los tiempos y simplificar el desarrollo del software, mejorando la calidad y reduciendo su costo.
·         Elementos que intervienen en la reutilización

ü  Especificaciones de requerimientos previamente concebidas
ü  Diseños previamente definidos (Estructuras de datos, algoritmos, etc.)
ü  Código probado y depurado con anterioridad
ü  Planes y casos de prueba previamente utilizados
ü  Personal cualificado (aprovechamiento de la experiencia de los ingenieros de un proyecto a otro)
ü  Paquetes de software de propósito general

Conceptos de reutilización de software


ü  La reutilización de software aparece como una alternativa para desarrollar aplicaciones y sistemas SW de un manera más eficiente, productiva y rápida.
ü  La idea es reutilizar elementos y componentes SW en lugar de tener que desarrollarlos desde un principio.
ü  Surge formalmente de 1968
ü  La idea principal era producir componentes de software como si de componentes eléctricos se tratara.
ü  El objetivo es reutilizar lo existente sin tener que volver a rediseñarlo desde el principio.

Dificultades de la reutilización


ü  En muchas empresas no existe plan de reutilización (No se considera prioritario)
ü  Escasa formación
ü  Resistencia del personal
ü  Pobre soporte metodológico
ü  Uso de métodos que no promueven la reutilización (Estructurados)
ü  Necesario métodos para:
§  Desarrollo para reutilización
§  Desarrollo con reutilización
ü  ¿Quién soporta los gastos adicionales de la reutilización?

Ventajas


ü  Reducir el tiempo de desarrollo.
ü  Reducir los costos.
ü  Incrementar la productividad.
ü  No tener que reinventar las soluciones.
ü  Facilitar la compartición de productos del ciclo de vida.
ü  Mayor fiabilidad
ü  Mayor eficiencia (Aunque al principio pueda parecer que no)
ü  Consistencia y la familiaridad, los patrones dentro del software serán más consistentes, tendiendo a facilitar el mantenimiento del producto.

Desventajas


ü  Necesidad de invertir antes de obtener resultados.
ü  Carencia de métodos adecuados.
ü  Necesidad de formar al personal.
ü  Convencer a los “manager”.
ü  Dificultad para institucionalizar los procesos.
   

Categorías de recurso de software


1.    Componentes ya desarrollados
El software existente se puede adquirir de una tercera parte o provenir de uno desarrollado internamente para un proyecto anterior. Llamados componentes CCYD (componentes comercialmente ya desarrollados), estos componentes están listos para utilizarse en el proyecto actual y se han validado totalmente.
2.    Componentes ya experimentados
Especificaciones, diseños, código o datos de prueba existentes desarrollados para proyectos anteriores que son similares al software que se va a construir para el  proyecto actual. Los miembros del equipo de software actual ya han tenido la experiencia completa en el  área de la aplicación representada para estos componentes.  Las modificaciones, por tanto, requeridas para componentes de total experiencia, tendrán un riesgo relativamente bajo.
3.    Componentes con experiencia parcial
Especificaciones, diseños, código o datos de prueba  existentes desarrollados para proyectos anteriores que se relacionan con el software que se va a construir para el proyecto actual, pero que requerirán una modificación sustancial. Los miembros del equipo de software actual han limitado su experiencia sólo al área de aplicación representada por estos  componentes. Las modificaciones, por tanto, requeridas para componentes de experiencia parcial tendrán bastante grado de riesgo.
4.    Componentes nuevos
Los componentes de software que el equipo de software debe construir específicamente para las necesidades del proyecto actual.

Unidades de software que se reutilizan

ü  Reutilización de sistemas de aplicación
§  Se incorpora sin ningún cambio en otros sistemas
§  Configuración de la aplicación para diferentes clientes
ü  Reutilización de componentes
§  Varía en tamaño desde subsistemas hasta objetos simple
ü  Reutilización de objetos y funciones
§  Reutilización de componentes software que implemente una unica función

Tipos de reutilización

ü  Oportunista
§  El ingeniero de software reutiliza piezas que él sabe que se ajustan al problema
ü  Sistemática
§  Esfuerzo a nivel organizacional y planificado de antemano
§  Todo componente reutilizado ha de ser ideado, a priori, para ser reutilizado
§  Implica inversiones iniciales para recoger frutos en el futuro
§  Diseñar componentes genéricos para que sean reutilizados con facilidad
ü  Bottom-Up
§  Se desarrollan pequeños componentes para una determinada aplicación
§  Se incorpora a un repositorio
ü  Top-Down
§  Se determinan las piezas necesarias que encajan unas con otras
§  Se van desarrollando poco a poco
§  Requiere alta inversión a comienzo
§  Se recogerán beneficios en el futuro

Análisis de escenarios para la reutilización


Existen al menos 4 escenarios en los que un proyecto de software requerirá elementos de reutilización.
       
1.       El proyecto es similar a un anterior (reutilización de un proyecto existente).
2.       Mismo proyecto con configuración diferente (reutilizan productos actuales)
3.       Características de uso basados en productos existentes
4.       Nueva Arquitectura con capacidades o elementos existentes


Patrones de diseño

ü  Descripción del problema y la esencia de una solución, de forma que la solución se pueda reutilizar en diferentes situaciones
ü  No es una especificación detallada
ü  Es una descripción de conocimiento y experiencia acumulada

Los patrones y los lenguajes de patrones son formas de describir las mejores prácticas, buenos diseños y encapsulan la experiencia de tal forma que es posible para otros reutilizar dicha experiencia

Elementos esenciales de un patrón de diseño
  • Nombre que es una referencia significativa del patrón
  • Una descripción del área del problema que explica cuándo puede aplicarse el patrón
  • Descripción de las partes de la solución del diseño, sus relaciones y sus responsabilidades.
  • Una declaración de las consecuencias de aplicar el patrón
           
Tipos de patrones
1.     Patrones de creación
  • Permiten que el sistema sea independiente de cómo se crean, componen o representan sus objetos
  • Encapsulan el conocimiento sobre las clases concretas que se van a utilizar
  • Ejemplos: Abstract factory, Builder, Factory Method, Singleton
2.     Patrones estructurales
  • Facilitar y mejorar las relaciones entre objetos
  • Manera en que las instancias se comunican entre si.
  • Ejemplos: Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy
3.     Patrones de comportamiento
  • Están relacionados con el flujo de control del sistema
  • Ciertas formas de organizar el control en un sistema pueden derivar en grandes beneficios para la eficiencia y el mantenimiento del sistema
  • Ejemplos: Chain of Responsability, Comand, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method, Visitor

Niveles de Reutilización
1.     Reutilización de Código
§  Librerías de funciones, editores, inclusión de ficheros, mecanismos de herencia en POO, componentes, etc.
2.     Reutilización de Diseños
§  No volver a inventar arquitecturas
§  p.ej. patrones de diseño
§  P.ej. patrones arquitectónicos (C/S, pipeline, OO, etc.)
3.     Reutilización de Especificaciones
§  Reutilización de las abstracciones del dominio
§  Debe estar asociada a la generación (semi)automática de los elementos de diseño e implementación.

Aspectos para la reutilización de software existente
1.     Si los componentes ya desarrollados cumplen los requisitos del proyecto, adquiéralos. El coste de la adquisición y de la integración de los componentes ya desarrollados serán casi siempre menores que el coste para desarrollar el software equivalente. Además, el riesgo es relativamente bajo.
2.     Si se dispone de componentes ya experimentados, los riesgos asociados a la modificación y a la  integración generalmente se aceptan. El plan del proyecto debería reflejar la utilización de estos  componentes.
3.     Si se dispone de componentes de experiencia parcial para el proyecto actual, su uso se debe analizar   con detalle. Si antes de que se integren adecuadamente los componentes con otros elementos del  software se requiere una gran modificación, proceda cuidadosamente - el riesgo es alto. El coste de modificar los componentes de experiencia parcial algunas veces puede ser mayor que el coste de  desarrollar componentes nuevos. De forma irónica, a menudo se descuida la utilización de componentes de software reutilizables durante la planificación, llegando a convertirse en la preocupación primordial durante la fase de desarrollo del proceso de software. Es mucho mejor especificar al principio las  necesidades de recursos del software. De esta forma se puede dirigir la evaluación técnica de alternativas y puede tener lugar la adquisición oportuna.


Las fuentes consultadas para postear esta información son:

Ingeniería de Software un Enfoque práctico - Quinta Edición - Pressman Roger S.


4 comentarios:

  1. Hola Julian,

    Soy Rubén y lo primero que tengo que decirte es que me ha gustado bastente tu entrada. La reutilización es uno de los temas que más me interesan dentro de la Ingeniería del Software. Considero este área básico para la mejora tanto en calidad como en velocidad de desarrollo.

    Dado que me interesa tanto la reutilización he creado un blog donde, de momento, sólo hablo de ella. En la primera entrada de mi blog hago un repaso al estado del arte de la reutilización, en las siguientes entradas me voy centrando en la reutilización a traves de los comentarios y en próximas entradas mostraré una propuesta de como deben ser, y que datos deben tener, los comentarios para mejorar la reutilización.

    Hago este comentario ya que considero que puede ser complementario al tuyo, la dirección web es: http://blogdesarrolloweb.wordpress.com/category/reutilizacion-2/

    Un saludo,

    Rubén

    ResponderEliminar
  2. 5 tips for getting an axe with the solo titanium razor - TITanium
    출장마사지 articles titanium mig 170 › 5-tips-h ceramic vs titanium › articles micro touch titanium trim › 5-tips-h titanium plate flat irons

    ResponderEliminar