sábado, 11 de julio de 2015

Presentacion TDD(Test Driven Development)

Presentacion TDD(Test Driven Development)



*UI: La interfaz de usuario es el medio con que el usuario puede comunicarse con una máquina, un equipo o una computadora, y comprende todos los puntos de contacto entre el usuario y el equipo.
*Complejidad ciclomatico: proporciona una medición cuantitativa de la complejidad lógica de un programa.

viernes, 19 de junio de 2015

Patrones de diseños Builder y Abstract


Patrones de diseños


Builder


El patrón de diseño se usa para crear objetos de una clase en particular(a la que se refiere como clase Producto), asignado valores predeterminados a sus atributos.
Los valores que serán asignados son definidos en los Concrete Builders, que son clases concretas que herdan de una clase abstracta denominada Abstract Builder.
Existe además una clase Director que se gestiona el uso de las clases uso de las clase anterior.Así, desde una clase Principal simplemente habrá que hacer uso de la clase Director para instanciar objetos de la clase Producto, dependiendo del Concrete BUilder que se asigne.



 



Abstract Factory

Se Gestiona la creacion de objetos pero de distintas clases.
Los objetos que a ser creados son denominados Productos Concretos, que implementarán una interface determinada, la cual es domininada Producto Abstracto.
Así mismo, la creación de estos objetos se hace através de factorias, que son clases que se encargan  de gestionar recursos para la creación  de estas instancias. Así, existe una Factoria Abstracta(que no es más que otra interface), y por lo tanto, Factorias Concretas, que son clases que implementan tal interface.









Presentación Lucas Campos

Hola soy Lucas, estudio ingeniería en computación. Me gusta tocar guitarra y leer mucho, principalmente novelas y cuentos de terror, también filosofía y psicoanálisis. Me dedico a andar en bicicleta apenas tengo tiempo libre.


Patrones de diseño Factory Method y Prototype (Metodo de fábrica y Prototipo)

Introducción                                                                                                                                              


En la ingeniería de software, un patrón de diseño es una solución general reusable para un problema que ocurre comúnmente en un contexto dado dentro del diseño de software. Un patrón de diseño es una descripción o plantilla para cómo resolver un problema, que  puede ser usada en diferentes situaciones. Los patrones son las buenas practicas formalizadas, que el programador puede usar para resolver problemas comunes al momento de diseñar una aplicación o un sistema. Los patrones de diseño orientado a objetos, comúnmente muestran relaciones e interacciones entre clases u objetos, sin especificar las clases finales u objetos finales de la aplicación que están involucrados.






Factory Method (Método de fábrica)                                                                                                        


El patrón de diseño Factory Method te permite crear objetos sin ser molestado en lo que es la clase actual que está siendo creada. El beneficio es que el codigo del cliente (codigo de llamado ) sólo puede "decir": "mándame un objeto que pueda hacer tal y tal cosa", sin saber cual es la clase actual que hace lo que necesita.

Hagamos un ejemplo para ver como funciona esto. Digamos que tienes una tienda de libros en línea y la gente viene a tu sitio a comprar estos libros. Cuando un cliente pide un libro, tu solo tienes que hacer que otro distribuidor de libros mande este libro directamente al cliente. Tienes muchos distribuidores que puedes escoger para enviar los libros a tus clientes directamente.

Desde que tienes muchos distribuidores, tienes la siguiente lógica para determinar que distribuidor elegir para enviar los libros a los clientes:

          · Si el cliente esta en la costa Este, tu usaras DistribuidorCostaEste
          · Si el cliente esta en el medio oeste, tu usaras DistribuidorMedioOeste
          · Si el cliente esta en la costa Oeste, tu usaras DistribuidorCostaOeste


La clave está en que tu cliente no se preocupará de cual distribuidor tu usarás, porque ellos tendrán su libro a pesar de todo. Está completamente oculto desde el punto de vista del cliente.

Usando este ejemplo, tenemos el siguiente UML:






Esta lógica que decide cual distribuidor a ocupar está en el método BookStore.GetDstributor. El método retorna IDistributor con la lógica explicada anteriormente.
Este método es el Metodo de Fabrica que retorna un producto (un distribuidor). Cada distribuidor implementa la interfaz de IDistribuitor, el cual tiene el método ShipBook.  El código de cliente solo dice "entregame un distribuidor que pueda enviar el libro (metodo ShipBook).




Prototype Method                                                                                                                                      

El Patron de diseño Prototype, es también un patrón que usamos para recibir un objeto instanciado para una clase particular, al igual que los patrones Build y Factory. En vez de tener un objeto nuevo cada vez, podemos hacer una copia de un objeto ya existente de manera instantánea (el objeto que podemos usar como prototipo) y empezar a usarlo. De esa forma, no tenemos que repetir el proceso de creación para el objeto que estamos tratando de ocupar. La nueva copia del objeto es completamente independiente del objeto original, y puede ser usada para cualquier propósito que no signifique afectar al original. No hay limites para copiar los objetos existentes.








Conclusión                                                                                                                                                 

El método de fábrica o Factory Method, agiliza de manera eficaz el uso de métodos al momento de interactuar con una aplicación como la del ejemplo al hacer de manera aparte los distribuidores de manera automática con sus métodos propios agilizando el proceso que deberá tener en este caso el usuario. El metodo de prototipo nos permite agilizar a la hora de probar nuestros objetos y si esque estos se tienen que mejorar.

jueves, 18 de junio de 2015

Manifiesto Ágil

 Manifiesto Ágil

El manifiesto ágil es una compilación de los principios y valores que resaltan las metodologías ágiles fue formalizada en el manifiesto para el desarrollo de software ágil. Este documento desarrollado por los representantes de cada una de las metodologías que en el momento se presentaban como  ágiles, logra resumir en un conjunto de ideas las prácticas.

Principales factores que encontramos para llevar a cabo las metodologías ágiles.

Gente: Los individuos son el principal factor de éxito
Equipo: El equipo es más importante que el entorno, debe estar motivado
Organización: Primero se crea el equipo y ´este configura su propio entorno de desarrollo
Necesidades: Es importante que el entorno responda a las necesidades del equipo
Confianza: Se debe confiar en que el equipo, con las herramientas necesarias, podrá llevar a cabo el trabajo

Roles: No existen. Los equipos se organizan por si mismos



Conclusión:

-Las metodologías  ágiles son importantes en el desarrollo de software, ya que permiten otras alternativas a las metodologías tradicionales

-El uso de un método ágil no es para todos. Hay que tener en cuenta varias condiciones si se decide a seguir este camino

-Para obtener un software de calidad aplicando metodologías ágiles de desarrollo es importante seguir muy al pie de la letra  los valores y principios ágiles para alcanzar el objetivo deseado.

-Que la metodología sea ágil no significa que sea rápida, sino que el proceso se vuelve ágil con el tiempo







Registros foro ChileAgil




Activación Lucas Campos:




viernes, 5 de junio de 2015

Top 3 Frameworks que utilizan Java

Introducción



Existen diferentes tipos de herramientas para poder trabajar aplicaciones, tanto web como móviles, de escritorio, etc...
En este trabajo nos enfocaremos en los llamados frameworks, profundizando en los que utilizan java específicamente. Para esto primero necesitamos saber que es un framework, en que consiste y de que forma se emplea.





¿Qué es un framework?



El concepto framework se emplea un muchos ámbitos del desarrollo de sistemas software, no solo en el ámbito de aplicaciones Web. Podemos encontrar frameworks para el desarrollo de aplicaciones médicas, de visión por computador, para el desarrollo de juegos, y para cualquier ámbito que pueda ocurrírsenos.
En general, con el término framework, nos estamos refiriendo a una estructura software compuesta de componentes personalizables e intercambiables para el desarrollo de una aplicación. En otras palabras, un framework se puede considerar como una aplicación genérica incompleta y configurable a la que podemos añadirle las últimas piezas para construir una aplicación concreta.

Los objetivos principales que persigue un framework son: acelerar el proceso de desarrollo, reutilizar código ya existente y promover buenas prácticas de desarrollo como el uso de patrones.
Un framework Web, por tanto, podemos definirlo como un conjunto de componentes (por ejemplo clases en java y descriptores y archivos de configuración en XML) que componen un diseño reutilizable que facilita y agiliza el desarrollo de sistemas Web.




Top 10 Frameworks que utilizan java 

El siguiente top 10 está basado en la lista publicada por Veracode el 2012. Esta lista está basada en 5400 aplicaciones desarrolladas por clientes. El porcentaje de cada uno refleja el numero de aplicaciones Java en las cuales fue observado el framework.

  1. Spring MVC (23%)
  2. Struts 1.x (15%)
  3. Apache Axis (15%)
  4. Apache Xerces (14%)
  5. Hibernate (12%)
  6. JDOM (12%)
  7. Java Applet (8.1%)
  8. Apache Velocity (7.9%)
  9. Apache ORO (7.0%)
  10. JAX-WS (6.5%)
ahora en base a este top 10 escogeremos 3, los cuales explicaremos uno a uno.



Spring MVC:

Spring es un framework para el desarrollo de aplicaciones y contenedor de inversión de control, de código abierto para la plataforma Java.
Si bien las características fundamentales de Spring Framework pueden ser usadas en cualquier aplicación desarrollada en Java, existen variadas extensiones para la construcción de aplicaciones web sobre la plataforma Java EE. A pesar de que no impone ningún modelo de programación en particular, este framework se ha vuelto popular en la comunidad al ser considerado una alternativa, sustituto, e incluso un complemento al modelo EJB (Enterprise JavaBean).
Spring Framework comprende diversos módulos que proveen un rango de servicios:
  • Contenedor de inversión de control: permite la configuración de los componentes de aplicación y la administración del ciclo de vida de los objetos Java, se lleva a cabo principalmente a través de la inyección de dependencias.
  • Programación orientada a aspectos: habilita la implementación de rutinas transversales.
  • Acceso a datos: se trabaja con RDBMS en la plataforma java, usando Java Database Connectivity y herramientas de Mapeo objeto racional con bases de datos NoSQL.
  • Gestión de transacciones: unifica distintas APIs de gestión y coordina las transacciones para los objetos Java.
  • Modelo Vista Controlador: Un framework basado en HTTP y servlets, que provee herramientas para la extensión y personalización de aplicaciones web y servicios web REST.
  • Framework de acceso remoto: Permite la importación y exportación estilo RPC, de objetos Java a través de redes que soporten RMI, CORBA y protocolos basados en HTTP incluyendo servicios web (SOAP).
  • Convención sobre Configuración: el módulo Spring Roo ofrece una solución rápida para el desarrollo de aplicaciones basadas en Spring Framework, privilegiando la simplicidad sin perder flexibilidad.
  • Procesamiento por lotes: un framework para procesamiento de mucho volumen que como características incluye funciones de registro/trazado, manejo de transacciones, estadísticas de procesamiento de tareas, reinicio de tareas, y manejo de recursos.
  • Autenticación y Autorización procesos de seguridad configurables que soportan un rango de estándares, protocolos, herramientas y prácticas a través del subproyecto Spring Security (antiguamente Acegi).
  • Administración Remota: Configuración de visibilidad y gestión de objetos Java para la configuración local o remota vía JMX.
  • Mensajes: Registro configurable de objetos receptores de mensajes, para el consumo transparente desde la a través de JMS, una mejora del envío de mensajes sobre las API JMS estándar.
  • Testing: Soporte de clases para desarrollo de unidades de prueba e integración.



Apache Struts:

Apache Struts 1 es un framework de código libre para aplicaciones, para el desarrollo de aplicaciones web en Java EE. Este está descontinuado a causa de su sucesor Apache Struts 2. Trabaja con MVC gracias a la API Java Servlet.

El punto a favor en este Framework es que separa el modelo (aplicación lógica que interactúa con la base de datos) de la vista (páginas HTML presentadas al cliente) y el controlador (instancia en la que se pasa información entre vista y modelo). Struts provee el el control y las facilita la escritura de plantillas para la capa de presentación o de vista. El programador de la aplicación web es el responsable de escribir el código del modelo, y también de crear el archivo de configuración central "struts-config.xml" que brinda al mismo tiempo tanto el modelo, como la vista y el controlador.
Las peticiones hechas por el cliente son enviadas al controlador en la forma de Acciones definidas en el archivo de configuración.



Apache Axis:

Apache Axis es un framework de código abierto, basado en XML para servicios web. Consiste en una implementación en Java y otra en C++ del servidor SOAP, así como diversos utilitarios y APIs para generar y desplegar aplicaciones de servicios web. Por medio de Apache Axis, los desarrolladores pueden crear aplicaciones computacionales interoperables y distribuidas. 

Al emplear la variante Java de Axis, existen dos maneras de exponer código Java como servicio web. Lo más fácil es usar los archivos JWS (Java Web Service), nativos de Axis. La otra manera consiste en usar despliegues a la medida. Los despliegues a la medida permiten adaptar los recursos que se desea exponer como servicios web.



IEEE Std 830-1998





IEEE Std 830-1998

Software Requirements Specification (SRS)


Introduccion:

El SRS es una especificación para un producto software determinado, programa o conjunto de 
programas que realiza ciertas funciones en un entorno específico. El SRS puede escribirse por uno o 
más representantes del proveedor, uno o más representantes del cliente, o por ambos.



El IEEE 830 describe los criterios recomendados para la especificación de requisitos de 
software. Se basa en un modelo en el que el resultado del proceso de especificación de requisitos de
software es un documento de especificación inequívoca y completa. Se espera que ayude a:

a) Los clientes de Software para describir con precisión lo que desean obtener;
b) Los proveedores de software para entender exactamente lo que quiere el cliente;
c) Las personas para lograr los siguientes objetivos:
           1) Desarrollar una especificación de requisitos software estándar (SRS) para sus propias 
               organizaciones.
           2) Definir el formato y el contenido de sus especificaciones de requisitos de software                                específicos.
           3) Desarrollar elementos de apoyo locales adicionales, tales como una lista de comprobación                 de la calidad de SRS, o un manual de SRS.

Las caracteristicas de una buena ERS son definidas por el estándar IEEE 830. Una buena ERS debe ser:

  • Completa. Todos los requerimientos deben estar reflejados en ella y todas las referencias deben estar definidas.
  • Consistente. Debe ser coherente con los propios requerimientos y también con otros documentos de especificación.
  • Inequívoca. La redacción debe ser clara de modo que no se pueda mal interpretar.
  • Correcta. El software debe cumplir con los requisitos de la especificación.
  • Trazable. Se refiere a la posibilidad de verificar la historia, ubicación o aplicación de un ítem a través de su identificación almacenada y documentada.
  • Priorizable. Los requisitos deben poder organizarse jerárquicamente según su relevancia para el negocio y clasificándolos en esenciales, condicionales y opcionales.
  • Modificable. Aunque todo requerimiento es modificable, se refiere a que debe ser fácilmente modificable.
  • Verificable. Debe existir un método finito sin costo para poder probarlo.