Descargar

Reutilización apropiada para programadores (RAP)

Enviado por Cesar Munguia


  1. Resumen
  2. Introducción
  3. Desarrollo
  4. Conclusión
  5. Bibliografía

Resumen

Este artículo está dedicado a la temática "Reutilización de Código" la cual es de gran importancia en el mundo de desarrollo de software hoy en día, pues facilita a gran escala lo que es el procedimiento de diseño, creación, implementación y mantenimiento de este mismo.

Esta práctica es difícil de efectuar, porque requiere cierta preparación por parte del desarrollador, el cliente y los administradores del proyecto para que se pueda implementar de manera correcta, ya que para poder reutilizar es vital conocer la problemática a resolver así como sus limitantes y adaptabilidad del código.

Si bien, se espera poder orientar al lector en lo que es reutilización de código como práctica de desarrollo considerando beneficios y desventajas durante la planeación e implementación de dicho código así como el por qué debe realizar estas prácticas y cuando no es recomendado ya sea por factores internos (experiencia, costos) o externos (tiempo, objetivos).

Palabras Clave:

Reutilización, Tiempo, Adaptabilidad, Limitantes, Diseño.

Abstract This article it"s dedicated to the topic: "Code Reuse" which is one of the main factors on software development now on days because it makes much easier to design, creation, application and maintenance of the very same software. This kind of practice is hard to apply, most likely because it requires a lot of preparation from the software developer, the client and the project managers in order to be able to apply it properly. It is also a good idea to know well the objectives, limits and code adaptability.

As main goal for this article, is to help the reader to reuse code as a normal practice considering the benefits and disadvantages during the design and application for those codes or methods, including when you should reuse or not to do so because of factors such as internal (experience, costs) or external (time, objectives).

Keywords:

Reuse, Time, Adaptability, Limits, Design.

Introducción

La reutilización es uno de los conceptos de la programación más antiguos y simples de entender, pero complejo al poner en práctica. El uso de software existente para desarrollar uno nuevo ha sido empleado desde los primeros días de la programación, siempre se han reusado partes de un código, planillas, funciones o procedimientos. Esta es la idea: parte o todo el código de un programa de computadora escrito una vez, sea o pueda ser usado en otros programas.

En sí, consiste en la creación de sistemas de software a partir de un software existente, en lugar de tener que rediseñar desde el principio.

En el siglo pasado resultaba imposible poder representar artefactos de software por su propio contenido (por ejemplo, buscar diagramas de clase similares a uno dibujado en otra herramienta), lo cual impedía que cualquiera pudiera buscarlos sin conocimiento previo de su existencia. Por este motivo, para reutilizar hubo que realizar el proceso inverso: primero parar la organización para ver qué podía ser reutilizable, después hacerlo reutilizable, lo siguiente era obligar a que todos conocieran lo que existe para reutilizar en la organización (puesto que si no, NO sabrían que existía), y luego intentar obligar a que reutilizaran lo existente por lo que tendrían que saber operar con ellos de antemano.

Tal cual la reutilización de código no se formalizo si no, hasta 1968 cuando en un congreso que organizó el Comité de Ciencia de la OTAN el ingeniero de Bell Laboratories, M.D. McIlroy, afirmó que "La industria del software se asienta sobre una base débil, y un aspecto importante de esa debilidad es la ausencia de una sub-industria de componentes". Es entonces cuando empiezan a surgir las primeras librerías de software con el fin de poder facilitar el diseño de diferentes módulos dentro de las compañías.

Desarrollo

En el área de programación o ingeniería de software la reutilización se refiere a la habilidad de poder extraer código, ya sean módulos, métodos, vistas, o cualquier pieza funcional de un algoritmo y poder implementarlo a otro sistema con el fin de poder ahorrar tiempo y esfuerzo durante las fases de diseño del software.

Así mismo, existen diferentes tipos de reutilización.

  • Conocimiento: se reutiliza el conocimiento y la experiencia de otros desarrolladores.

  • Oportunista se reutilizan piezas que se sabe que se ajustan al problema.

  • Sistemática: se diseñan componentes genéricos para que sean reutilizados con facilidad.

  • Bottom-Up: se desarrollan pequeños componentes para una determinada aplicación.

  • Top-Down: se van desarrollando las piezas necesarias poco a poco.

Y niveles, que se definen más por el componente a reutilizar.

  • Reutilización de código: librerías de funciones, editores, inclusión de ficheros, mecanismos de herencia en POO, componentes, etc.

  • Reutilización de diseños: no volver a inventar arquitecturas.

  • Reutilización de especificaciones: reutilización de las abstracciones del dominio.

  • Pero, como en todo proceso, se contemplan las grandes ventajas y desventajas por igual.

    Ventajas:

    • Reducción de costos.

    • Reducción de tiempo de desarrollo.

    • Reducción de esfuerzos durante la programación.

    • Facilita el mantenimiento con la apropiada documentación.

    Desventajas:

    • Ambigüedad del método a reutilizar.

    • Alto conocimiento en el lenguaje de desarrollo para implementarse de manera eficaz.

    • Conocer en su totalidad el objetivo final del programa así como contemplar sus limitantes.

    • El ritmo de avance del siglo XXI en programación hace más difícil implementarlo debido a que se puede encontrar desactualizada rápidamente.

    Si bien, como todo, reutilizar código es una práctica que muchos siempre contemplan poder realizar pero la cual no siempre se logra poder llevar a cabo por diferentes factores que están fuera del alcance del programador la mayoría de las veces tales como son los objetivos finales del sistema, cuestión de costos o seguridad, adaptabilidad del código, etc.

    Entonces… ¿Cuándo reutilizar código? Tanto novatos como expertos se preguntan con frecuencia cuando reutilizar código. Los novatos suelen buscar código que sea implementable sin cuestionar el funcionamiento lógico o algorítmico; en cambio, los expertos buscan un código que sea fácil de comprender a simple vista y verificar el nivel de abstracción que este presenta así como diferentes factores (entradas de datos, procesamientos de datos, etc.) haciendo quizá más difícil su selección.

    Pero realmente el cuándo implementarlo debería de ser siempre que sea posible y resuelva la problemática de manera eficiente. Mas existe una gran cantidad de factores a considerar para poder reutilizar código, tales como:

    • Tener primero previsto los objetivos del software o producto final: Esto con el fin que cuando se encuentre en la fase de diseño sea más fácil planear la atomicidad de los métodos.

    • Conocimiento del lenguaje de programación: Sea un lenguaje estructurado u orientado a objetos es importante conocer bien el mismo, debido a que quizá sea necesario adaptar el código para que cumpla con los requisitos iniciales.

    • Costos y Mantenimiento: Muchas veces es más económico reutilizar módulos, métodos, vistas o inclusive porciones de código programado para facilitar la creación de uno nuevo desde cero (Scratch) pero siempre se debe de recordar que una vez terminado este, se le debe dar mantenimiento o actualizaciones al producto final, por lo que se recomienda conocer el cómo funciona bien cada pieza de

    • código y verificar antecedentes tanto de éxitos como fallos de la reutilización.

      ¿Cómo reutilizar código? La reutilización de código se vuelve compleja ya que requiere de una gran versatilidad por parte del programador, hay una gran cantidad de puntos a considerar para poder diseñar y crear un código reutilizable, pero los principales serían:

      • DRY( Don"t Repeat Yourself- No te repites a ti mismo): Esto hace referencia a que cada pieza de código sea única y original, si bien es una mentalidad muy contradictoria ya que promueve y a la vez no lo que es reutilizar el código; es importante considerarlo debido a que DRY dice que "Cada pieza de conocimiento, deberá tener un único sentido, representación autoritaria dentro de un sistema" esto se puede interpretar tanto a que no se deba reutilizar código fuera de un sistema terminado o a no se deberá de tener más de una misma pieza del mismo código en otro. Ejemplo: "Reciclar 4 módulos del programa A e implementarlos en B; DRY desde el punto de vista a favor de la reutilización, diría que solo usemos un módulo del programa A desde el punto de vista negativo diría que ninguno".

      • Diseñar Métodos independientes y con un fin único: Esto nos dice que los métodos diseñados para un sistema deben cumplir un fin único, ya sean sumas, restas, multiplicaciones, altas, bajas, consultas, etc. así como que

      estos sean lo más independientes posibles, o sea que no dependan de otros métodos del mismo sistema, es tolerable que dependa de parámetros y retorne un proceso interno.

      • Mantener la objetividad a un lado: Referente a que si es un sistema bancario, sus métodos reutilizables deberán mantener al mínimo las peticiones de datos de casos específicos.

      • Técnicas de programación: Si bien un gran fallo de la reutilización, es que en la actualidad el ritmo de avance en técnicas y métodos de programación puede opacar rápidamente un método diseñado un año atrás, ya que puede que se implementara como función pasiva del mismo lenguaje en su versión posterior.

      Estadísticas La reutilización tiene ciertos indicadores, por ejemplo:

      • Entre el 40% y 60% de una aplicación es re-utilizable en otra.

      • Aproximadamente el 60% de una aplicación administrativa es re-utilizable.

      • Aproximadamente el 75% de las funciones son comunes a más de un programa.

      • Solo el 15% del código encontrado en muchos sistemas es único y novedoso a una aplicación específica.

      Para comprender mejor lo que es la reutilización es oportuno analizar el siguiente caso práctico:

      Juan es un programador con 5 años de experiencia en Java, y por primera vez le piden un módulo con compatibilidad con web mail, el realiza 80% de los módulos de manera eficiente, pero lo que respecta al módulo de envió automático de e-mails, lo descarga de internet, de un blog aparentemente confiable, el verifica el procedimiento y lo adapta a sus necesidades.

      El ejemplo anterior, nos muestra un ejemplo de cuando un programador novato encuentra código reciclable pero lo analiza y adapta para sus necesidades, a diferencia del siguiente ejemplo:

      Pedro tiene la misma experiencia que Juan en Java y se encuentra en la misma situación, salvo que, él ya había hecho un programa con web mail antes, y decide reciclar 40% de las clases que uso, involucrando datos de entrada del web mail y el sistema de auto-mensaje. Pero nunca se dio cuenta de un pequeño error en "case sensitive" el cual estaba desactivado, ósea no discriminaba minúsculas de mayúsculas, reduciendo la seguridad de entrada de contraseñas bastantemente. En este último ejemplo, vemos que Pedro tendrá problemas de seguridad si se realiza un ataque a su sistema, o alguien descubre ese error. Él puede reusar módulos que él cree que funcionan de manera eficiente, pero al no hacerlo transfiere una debilidad de un sistema a otro.

      Conclusión

      Se espera que este artículo satisfaga la necesidad del lector en su búsqueda de conocimiento relacionado a la "Reutilización de Código". Es altamente recomendado el empleo de esta misma por una gran gama de razones, mas es necesario estar conscientes que el poder lograrlo de la mejor manera no siempre es fácil y al final la decisión de realizar o no esta práctica cae en las manos de cada individuo debido a que cada programador piensa de diferente manera en lo que consta sobre la lógica de su programa así como las circunstancias en las que se ha solicitado el producto. La reutilización es una práctica que se ha ejercido a lo largo de los años, desde que surgió formalmente la computación siempre se ha encontrado conflictiva en diferentes factores pero cuando estos son solucionados o adaptados se logra entregar un producto con una calidad inigualable. Recordemos que la finalidad de reutilizar código es facilitar los plazos de tiempo predeterminados o ir por la funcionalidad de algun módulo operacional existente sin fallos, por ende este articulo apoya la reutilización siempre y cuando esta sea para mejorar o facilitar su código y usted, estimado lector, este consciente que el fragmento a anexar a su código resuelva su necesidad sin generar errores.

      Bibliografía

      http://biblioteca.usac.edu.gt/tesis/08/08_0476_C S.pdf.

      http://c2.com/cgi/wiki?DontRepeatYourself.

      Patrones de diseño: elementos de software orientado a objetos reutilizables.

      Erich Gamma. Addison Wesley, 2002.

      Müller Hausi A.. "Understanding software systems using reverse engineering technologies research and practice" (tutorial). En la 18 Conferencia Internacional de Ingeniería de Software (ICSE-18), Berlin, Alemania, Marzo 1996. Disponible en:

      http://www.rigi.csc.uvic.ca/UVicRevTut/UVicRevTut.ht ml.

      Universidad Politécnica de Sinaloa Ingeniería en Informática

       

       

      Autor:

      Canizales Torres, Axel (2014030422[arroba]upsin.edu.mx).

      Gama Herrera, Andrea Elizabeth Guadalupe (2014030455[arroba]upsin.edu.mx).

      Hernández Tirado, Miguel Aaron (2014030461[arroba]upsin.edu.mx) .

      Munguía Brito, César Abraham (2014030476[arroba]upsin.edu.mx).

      Rodríguez Benítez, José Carlos (2014030406[arroba]upsin.edu.mx) .

      Rodríguez Romero, Cristo Favel (2014030348[arroba]upsin.edu.mx).

      Sarabia Castellón, Jesús Gabriel (2014030516[arroba]upsin.edu.mx).