SlideShare una empresa de Scribd logo
1 de 203
Descargar para leer sin conexión
¿Cómo ser más productivo en el
desarrollo de aplicaciones?
 ¿Quiénes somos? (15m)
 Introducción (10m)
 Programa mejor
 Patrones de Diseño (25m)
 Mapeo Objeto Relacional (25m)
 Organizate mejor
 Metodologías de Desarrollo (45m)
 ¿Qué herramientas te pueden ayudar? (85m)
 Conclusiones (5m)
¿Cómo ser más productivo en el
desarrollo de aplicaciones?
2
 ¿Quiénes somos?
 Introducción
 Programa mejor
 Patrones de Diseño
 Mapeo Objeto Relacional
 Organizate mejor
 Metodologías de Desarrollo
 ¿Qué herramientas te pueden ayudar?
 Conclusiones
¿Cómo ser más productivo en el
desarrollo de aplicaciones?
3
 Laboratorio de Desarrollo de Software y Entornos de Desarrollo
Integrados
 Experimentamos con:
 Personalizaciones de Eclipse (EclipseGavab)
 Desarrollo web (Java, Drupal)
 Procesos de desarrollo
 Diseño de Algoritmos (Optsicom)
 Orientación a Objetos
 Herramientas educativas
 Lenguajes de Programación
 Creado oficialmente en Mayo 2010 (pero con mucha experiencia
previa)
http://sidelab.wordpress.com http://code.sidelab.es/
 Co-directores / Ponentes
Patxi Gortázar
francisco.gortazar@urjc.es
Doctor en Informática en 2007
Twitter: @fgortazar
Micael Gallego
micael.gallego@urjc.es
Doctor en Informática en 2008
Twitter: @micael_gallego
Blog: http://micaelgallego.blogspot.com
 Profesores de asignaturas
 Bases de Lenguajes de Programación (1º)
 Lenguajes Informáticos (2º)
 Seguridad Informática (5º)
 Ampliación de Ingeniería del Software (3º)
 Software Avanzado (3º)
 Algoritmos Avanzados (Máster)
 Optimización de Sistemas de Comunicación (Máster)
 Arquitecturas Software para Sistemas Complejos (Máster)
 Interfaces de Usuario (3º)
 Procesadores de Lenguajes (4º)
 PFCs Dirigidos
 Más de 30 proyectos…
 Plugins de Eclipse / Herramientas de desarrollo
 Librerías gráficas
 Reproductores de vídeo / transmisión vídeo móvil
 Aplicaciones web con Drupal, Xwiki
 Herramientas Educativas
 Tecnologías
 Java, SWT, Swing, GWT, JPA, JDBC, Java EE, REST, XML,
Eclipse, VLC, Gstreamer, OpenCL, GridGain, Amazon, JNI, RMI,
Excel, FreeChart, MySQL, Derby, SmartGWT, PHP, XULRunner,
Crawling, Maven, Ant, Trac, Redmine, Bugzilla, Mylyn…
 Colaboración con Empresas / Consultoría
 Motorola: Sistemas escalables de monitorización de red
 Solaiemes: Transmisión de vídeo en directo móvil / Internet
 Lokku: Crawling de propiedades inmoviliarias
 M2DA: Crawling de redes sociales
 Ofimat: Tienda virtual con Drupal
 TS Company: Sistema distribuido con múltiples clientes para
la prescripción de programas de actividad física
 ¿Quiénes somos?
 Introducción
 Programa mejor
 Patrones de Diseño
 Mapeo Objeto Relacional
 Organizate mejor
 Metodologías de Desarrollo
 ¿Qué herramientas te pueden ayudar?
 Conclusiones
¿Cómo ser más productivo en el
desarrollo de aplicaciones?
9
 Para ser productivo programando, hay que
programar bien y usando las tecnologías
adecuadas
 Hay veces que todo es mucho más complicado
si se hace bien, la productividad llega en el
medio plazo si la aplicación tiene una buena
arquitectura
 Hay que estar siempre atento a las tecnologías
disponibles (porque van cambiando)
Introducción
10
 ¿Quiénes somos?
 Introducción
 Programa mejor
 Patrones de Diseño
 Mapeo Objeto Relacional
 Organizate mejor
 Metodologías de Desarrollo
 ¿Qué herramientas te pueden ayudar?
 Conclusiones
¿Cómo ser más productivo en el
desarrollo de aplicaciones?
11
 Es una solución bien documentada que los
expertos aplican para solucionar nuevos problemas
porque han sido utilizadas con éxito en el pasado
 Los expertos identifican partes de un problema que
son similares a otros problemas que han
encontrado anteriormente
 Recuerdan la solución aplicada y la generalizan
 Adaptan la solución general al contexto del
problema actual
¿Qué es un patrón de diseño?
13
 Son una forma estandarizada para representar
soluciones generales de problemas que se
encuentran comúnmente en el desarrollo de
software orientado a objetos
 Beneficios
 Catálogos de patrones
 Están documentados los pros y los contras de cada
patrón. Se conocen las implicaciones de su aplicación
 Proporcionan un vocabulario común entre desarrolladores
¿Qué es un patrón de diseño?
¿Qué es un patrón de diseño?
15
 Los patrones suponen una evolución en la
abstracción y reutilización en la
programación
 Abstracción
 Resolución de problemas complejos dividiéndolos
en otros más simples
 Capacidad de ocultar detalles superfluos y
centrarse en lo relevante para reducir la
complejidad
Abstracción y Reutilización
 Reutilización
 Posibilidad de usar de nuevo código ya
desarrollado anteriormente
 Formas de reutilización
 Copiar y Pegar !!PELIGRO¡¡
 Reutilización de algoritmos (búsquedas,
ordenaciones, …)
 Reutilización de funciones (métodos)
 Reutilización de librerías o APIs (métodos, clases, …)
Abstracción y Reutilización
 Abstracción y Reutilización en Programación
Orientada a Objetos
 Abstracción funcional y de datos
 La encapsulación implica mejor reutilización
 La herencia permite formas de reutilización antes
no posibles
 Es posible desarrollar algoritmos de forma genérica y
especializarlos creando clases hijas y redefiniendo o
implementando ciertos métodos
Abstracción y Reutilización
Abstracción y Reutilización
Tipo de
Reutilización
¿Se puede aplicar
de nuevo?
¿Qué se abstrae? Genericidad
Fragmento de
código
Muy Pobre Nada Muy pobre
Estructura de datos Buena Tipos de datos Moderada-Buena
Funcional Buena Método Moderada-Buena
Tipos Genéricos Buena Operación para tipo Buena
Algoritmo Buena Fórmula Buena
Clases (Interfaz,
Polimorfismo, Clase
abstracta)
Buena Datos + Métodos Buena
API (Librería) Buena Clases útiles Buena-Muy Buena
Componente Buena Grupo de Clases Buena-Muy Buena
Patrón de Diseño Excelente Solución a un
problema
Muy Buena
 Existen cuatro grandes tipos de patrones de
diseño
 Patrones de Creación
 Patrones de Comportamiento
 Patrones Estructurales
 Patrones de sistema
Tipos de Patrones
 Patrones de Creación
 Facilitan y simplifican la creación de objetos
 Permiten crear objetos sin definir la clase
concreta, sólo la interfaz que debe implementar
 Permiten reutilizar otros objetos en vez de crear
nuevos debido a restricciones o eficiencia
 Patrones de Comportamiento
 Guían el flujo de control del sistema (para facilitar
la eficiencia y facilitar el mantenimiento)
Tipos de Patrones
 Patrones Estructurales
 Describen formas efectivas de partir y combinar
los elementos de una aplicación
 Permiten la comunicación de sistemas
incompatibles, la introducción de simplificaciones
que mejoren la independencia entre partes,…
 Patrones de sistema
 Se aplican a la arquitectura de la aplicación
 Patrones más generales que los otros tipos
Tipos de Patrones
 Los patrones están especificados siguiendo un
formulario o formato estándar:
 Nombre
 También conocido como – Otros nombres usuales
 Propiedades
 Tipo - Creación, Comportamiento, Estructural o De sistema
 Nivel - Clase única, Componente (Grupo de clases),
Arquitectónico (Coordina sistemas y subsistemas)
 Propósito - ¿Para qué sirve?
 Presentación – Problema que soluciona (con ejemplos)
 Aplicabilidad – Cuando y por qué debería usarse
¿Cómo es un patrón?
 …
 Descripción – Que hace y como se comporta de
forma detallada
 Implementación - ¿Cómo implementarlo?
 Ventajas e Inconvenientes
 Variantes
 Patrones Relacionados
 Ejemplo
¿Cómo es un patrón?
 Facilitan y simplifican la creación de objetos
 Permiten crear objetos sin definir la clase
concreta, sólo el interfaz que debe
implementar
 Permiten reutilizar otros objetos en vez de
crear nuevos debido a restricciones o
eficiencia
Patrones de Creación
 Singleton (Único)
 Restringe la creación de un único objeto de una
clase en todo el sistema y permite acceder a él
 Factory Method (Método Factoría)
 Define un método para la creación de objetos
además del constructor
 Builder (Constructor)
 Simplifica la construcción de objetos complejos
definiendo una clase cuya responsabilidad es
crear objetos de otras clases
Patrones de Creación
 Abstract Factory (Fábrica Abstracta)
 Permite crear objetos de un conjunto de clases
relacionadas pero sin especificar la clase
concreta, solo el interfaz
 Prototype (Prototipo)
 Define clases cuyos objetos pueden clonarse
 Hay muchos mas…
Patrones de Creación
 Propiedades
 Tipo: Creación, Nivel: Objeto
 Propósito
 Permite tener una única instancia de esta clase
en el sistema, y permite que todas las clases
tengan acceso a esa instancia
Patrones de Creación
Singleton (Único)
 Introducción
 Hay veces que se necesita esta funcionalidad
 Por ejemplo: Un histórico de todas las acciones que realiza
el usuario en la aplicación. Desde todas las clases se
necesita usar el mismo objeto HistoryList
 Se podría crear un único objeto y pasar ese objeto como
parámetro a todos los demás objetos. Puede no saberse a
priori quien va a necesitar el objeto y puede ser complejo
estar pasándolo constantemente. Sólo con documentación
se puede obligar a que nadie más cree un objeto
HistoryList
Patrones de Creación
Singleton (Único)
 Introducción…
 Se podría crear el objeto al inicio y colocarlo en
un atributo estático. Pero no se podría
proporcionar ninguna información de inicialización
justo cuando vaya a usarse y no se puede
controlar quien accede al objeto
Patrones de Creación
Singleton (Único)
 Aplicabilidad
 Cuando se requiera una instancia de una clase y accesible
globalmente
 Descripción
 Asegura crear como máximo una instancia de un objeto.
 Ponga el constructor privado
 Ponga un método público estático getInstance() que
devuelva el objeto. Este método crea la instancia si no se
ha creado todavía, la guarda como un atributo estático
privado y la devuelve
 Se puede crear el objeto directamente sobre el atributo
estático
Patrones de Creación
Singleton (Único)
 Implementación
 Clase que tiene privado el
constructor, mantiene una
referencia estática al único
objeto de la clase y
proporciona un método
estático getInstance()
para que otras clases accedan
al único objeto
 El resto de la implementación
es completamente normal
Patrones de Creación
Singleton (Único)
Patrones de Creación
Singleton (Único)
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class HistoryList {
private List history = new ArrayList();
public HistoryList() {
}
public void addCommand(String command) {
history.add(command);
}
public Object undoCommand() {
return history.remove(history.size() - 1);
}
...
}
Clase sin patrón singleton
Patrones de Creación
Singleton (Único)
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class HistoryList {
private static HistoryList instance = new HistoryList();
private List history = new ArrayList();
private HistoryList() {
}
public static HistoryList getInstance() {
return instance;
}
public void addCommand(String command) {
history.add(command);
}
public Object undoCommand() {
return history.remove(history.size() - 1);
}
...
}
Clase con patrón singleton
 Ventajas
 La clase Singleton es la única que puede crear objetos de
la clase, asegurando la unicidad
 No se necesita pasar la referencia a todos los objetos que
la necesiten, simplificando el desarrollo y haciendo la
aplicación más mantenible
 Inconvenientes
 Puede tener problemas en aplicaciones con muchos hilos
de ejecución y con una única instancia
 Si en el sistema evoluciona y se necesitan más instancias
de la clase, habría que cambiar todos los accesos a la
clase Singleton
Patrones de Creación
Singleton (Único)
 Variaciones del patrón
 Mantener varias instancias que pueden ser
obtenidas con versiones con parámetros del
método getInstance(...)
 Cuando existen múltiples instancias, pueden ser
de clases hijas diferentes dependiendo de los
parámetros
Patrones de Creación
Singleton (Único)
 Patrones relacionados
 Abstract Factory (Factoría Abstracta)
 Builder (Constructor)
 Prototype (Prototipo)
Patrones de Creación
Singleton (Único)
 Patrón Singleton en la API de Java
 Clase java.awt.Toolkit
 Variación del patrón porque Toolkit es abstracta y la
instancia devuelta es de una clase hija
 El método es getDefaultToolkit()
 Clase java.lang.Runtime
 El método es getRuntime()
 Clase java.text.DateFormat
 Variación del patrón porque DateFormat es abstracta
 Tiene varios métodos con varias instancias
getDateInstance(), getDateInstance(int
style), getDateTimeInstance(), …
Patrones de Creación
Singleton (Único)
 Existen patrones específicos para diferentes
tipos de aplicaciones
Patrones de Diseño
39
 Páginas con catálogos de patrones
 http://en.wikipedia.org/wiki/Design_pattern_(comp
uter_science)
 http://www.vincehuston.org/dp/
 http://www.oodesign.com/
 http://sourcemaking.com/design_patterns
Patrones de Diseño
40
 ¿Quiénes somos?
 Introducción
 Programa mejor
 Patrones de Diseño
 Mapeo Objeto Relacional
 Organizate mejor
 Metodologías de Desarrollo
 ¿Qué herramientas te pueden ayudar?
 Conclusiones
¿Cómo ser más productivo en el
desarrollo de aplicaciones?
41
 Bases de datos (Database systems)
 Son programas utilizados para almacenar información y
permitir un acceso posterior a ella
 Varios programas (servidor web, aplicación gráfica, …)
pueden acceder a la información de forma concurrente a
través de la red
 La información está centralizada, actualizada y es más
sencillo realizar actualizaciones y copias de seguridad
 La información puede estar en forma de texto, números,
ficheros, XML, etc...
 Existen muchos tipos de bases de datos, pero las más
usadas son las bases de datos relacionales
Mapeo Objeto Relacional
Mapeo Objeto Relacional
 Base de datos relacionales
 Existen muchos productos de bases de datos,
comerciales y software libre
 MySQL (Software Libre) – http://www.mysql.org
 Derby (Software Libre) - http://db.apache.org/derby
 Oracle (Comercial) - http://www.oracle.com
 MS SQL Server (Comercial) - http://www.microsoft.com/sql
Mapeo Objeto Relacional
Bases de datos relacionales
 Una base de datos relacional almacena la
información en tablas* con filas y columnas (campo)
idLibro titulo precio
1 Bambi 3
2 Batman 4
3 Spiderman 2
* A las tablas se las denominaba “relaciones”, de ahí el nombre de base de datos relacional
Tabla Libros idAutor nombre nacionalidad
1 Antonio Español
2 Gerard Frances
Tabla Autores
idLibro idAutor
1 1
2 2
3 2
Tabla RelacionLibroAutor
Mapeo Objeto Relacional
Bases de datos relacionales
 Una base de datos relacional almacena la
información en tablas* con filas y columnas (campo)
idLibro titulo precio
1 Bambi 3
2 Batman 4
3 Spiderman 2
* A las tablas se las denominaba “relaciones”, de ahí el nombre de base de datos relacional
Tabla Libros idAutor nombre nacionalidad
1 Antonio Español
2 Gerard Frances
Tabla Autores
idLibro idAutor
1 1
2 2
3 2
Tabla RelacionLibroAutor
La información se
relaciona mediante
identificadores (id)
 SQL (Standard Query Language): Lenguaje
de consulta estándar que permite:
 Consulta de los datos seleccionando con
diferentes criterios y realizando operaciones
(medias, sumas, …)
 Inserción, Actualización y borrado de la
información
 Creación, alteración y borrado de las tablas y sus
campos
 Gestión de usuarios y sus privilegios de acceso
Mapeo Objeto Relacional
Bases de datos relacionales
Mapeo Objeto Relacional
Bases de datos relacionales
titulo precio
Bambi 3
Batman 4
SELECT titulo, precio
FROM Libros
WHERE precio > 2
Conjunto de resultados (ResultSet)
idLibro titulo precio
1 Bambi 3
2 Batman 4
3 Spiderman 2
Tabla Libros
Situación en la
base de datos Consulta
 JOINS
 Se pueden unir varias tablas en una consulta
idLibro titulo precio
1 Bambi 3
2 Batman 4
3 Spiderman 2
Tabla Libros idAutor nombre nacionalidad
1 Antonio Español
2 Gerard Frances
Tabla Autores
idLibro idAutor
1 1
2 2
3 2
Tabla RelacionLibroAutor
Mapeo Objeto Relacional
Bases de datos relacionales
titulo precio nombre
Bambi 3 Antonio
Batman 4 Gerard
Spiderman 2 Gerard
Mapeo Objeto Relacional
Bases de datos relacionales
 JOINS
 Se pueden unir varias tablas en una consulta
SELECT titulo, precio, nombre
FROM Libros, Autores, RelacionLibroAutor
WHERE Libros.idLibro = RelacionLibroAutor.idLibro
AND Autores.idAutor = RelacionLibroAutor.idAutor
 Almacenamos información en bases de datos
relacionales
 Pero en memoria la información es Orientada a
Objetos y se usan estructuras de datos (Listas,
Mapas..)
Mapeo Objeto Relacional
Orientación a Objetos y BBDD
50
Desajuste por Impedancia (Impedance Mismatch)
51
idAutor nombre nacionalidad
1 Antonio Español
2 Gerard Frances
idLibro titulo precio
1 Bambi 3
2 Batman 4
3 Spiderman 2
Tabla Libros
Tabla Autores
idLibro idAutor
1 1
2 2
3 2
Tabla RelacionLibroAutor
Memoria
Persistencia
52
“La Persistencia de la Memoria” (1931), óleo del pintor Salvador Dalí
 Hay que ajustar los datos de un paradigma
orientado a objetos a un paradigma de base de
datos relacional
 Tipos primitivos ligeramente diferentes
 ¿Cómo se representan las estructuras de datos en
memoria en una base de datos?
 Gestión de los datos ya cargados en memoria (caché)
 ¿Cómo se representan en memoria resultados de
consultas complejas que no devuelven “entidades”?
Mapeo Objeto Relacional
Desajuste por Impedancia
53
 ¿Pero no había por ahí bases de datos
orientadas a objetos?
 Como las meigas… haberlas, haylas
 Db4o, zope object database
 Pero no son mainstream, sólo se utilizan en ciertos
nichos particulares
 En la mayoría de las ocasiones se usan las bases de
datos relacionales
 MySQL, MS SQL Server, Oracle, PostgreSQL, SQLite…
 ¿Entonces tenemos que gestionar manualmente
el desajuste por impedancia?
Mapeo Objeto Relacional
Desajuste por Impedancia
54
 Object Relational Mapping (ORM)
 Son frameworks / librerías que permiten
convertir de objetos en memoria a tuplas en la
base de datos de forma automática
 La transformación (mapeo) es configurable
porque normalmente hay diferentes alternativas
con sus ventajas y desventajas
 Gestionan tipos primitivos, estructuras de datos,
herencia de clases, caché de objetos…
Mapeo Objeto Relacional
55
 ¿Qué fue primero, el huevo o la gallina?
 ¿Generamos la BBDD desde las clases o
generamos las clases desde la BBDD?
 La mayoría de los sistemas permiten la
generación en ambos sentidos
Mapeo Objeto Relacional
56
 Tecnologías
 Hibernate para Java
 NHibernate para .NET
 Doctrine para PHP
 Estándares para Java
 JDO (en desuso)
 JPA (Java Persistence API)
 Hibernate
 EclipseLink
 OpenJPA de Apache
Mapeo Objeto Relacional
57
58
Mapeo Objeto Relacional
@Entity
@Table(name="libros", schema = "sample")
public class Libro implements Serializable {
@Id
private int idlibro;
private int precio;
private String titulo;
@ManyToMany
@JoinTable(schema="sample", name="relacionlibroautor",
joinColumns=@JoinColumn(name="idLibro"),
inverseJoinColumns=@JoinColumn(name="idAutor"))
private Set<Autor> autoresCollection;
private static final long serialVersionUID = 1L;
public Libro() {
super();
}
//Getters and Setters..
}
 Una vez creadas las clases simples (POJOs) y
generada la base de datos, se utilizan los objetos y sus
métodos como si fueran objetos Java normales
Mapeo Objeto Relacional
59
public static void main(String[] args) {
EntityManagerFactory factory;
EntityManager manager;
factory = Persistence.createEntityManagerFactory("PruebaJPA");
manager = factory.createEntityManager();
Query query = manager.createQuery(
"select l from Libro l where l.precio >= 2");
List<Libro> libros = (List<Libro>) query.getResultList();
for (Libro libro : libros) {
System.out.println(libro);
}
manager.close();
factory.close();
}
 En la práctica no es todo tan bonito como parece
 Cada ORM soporta sólo ciertas bases de datos
 Hay veces que el ORM no verifica que las sentencias SQL que él
mismo genera sean válidas (ojo con llamar a una tabla como una
palabra reservada de SQL)
 Los ORMs están especialmente diseñados para aplicaciones
web, por la forma en la que gestionan la caché. Hay que tener
especial cuidado en aplicaciones con GUI
 Rendimiento, rendimiento, rendimiento… Si no se presta
atención, la caída de rendimiento puede ser muy importante
Mapeo Objeto Relacional
60
How to improve JPA performance 18x
http://java-persistence-performance.blogspot.com/2011/06/how-to-improve-jpa-performance-by-1825.html
 Si podemos generar la base de datos
partiendo de modelo orientado a objetos,
¿por qué no generamos el resto de la
aplicación?
Mapeo Objeto Relacional
61
Desarrollo Dirigido por Modelos
Model Driven Development
 Creación de la aplicación completa (o casi)
partiendo de la información que está en el
modelo
 El modelo puede estar en código (Java,
C#,..) o en cualquier otro formato (XML-
Schema, específico, IDL…)
 Enfoques
 Generación de código
 Interpretar el modelo en tiempo de ejecución
Mapeo Objeto Relacional
Model Driven Development
62
 Tecnologías en Java
 EMF de Eclipse
 MDR de NetBeans
 AndroMDA
 OpenMDX
 openArchitectureWare (Xtext en Eclipse)
 OpenXAVA (Español)
Mapeo Objeto Relacional
Model Driven Development
63
 ¿Quiénes somos?
 Introducción
 Programa mejor
 Patrones de Diseño
 Mapeo Objeto Relacional
 Organizate mejor
 Metodologías de Desarrollo
 ¿Qué herramientas te pueden ayudar?
 Conclusiones
¿Cómo ser más productivo en el
desarrollo de aplicaciones?
64
 Introducción
 ¿Qué es la Ingeniería del software?
 ¿Qué es un proceso software?
 Modelos de proceso de desarrollo
 Conclusiones
 Proceso Unificado de Desarrollo
 Metodologías Ágiles
Organizate Mejor
Metodologías de Desarrollo
65
¿Qué es la Ingeniería software?
 ¿Que es ingeniería?
 Estudio y aplicación, por especialistas, de las
diversas ramas de la tecnología.
 Conjunto de teorías y de técnicas que permiten el
aprovechamiento práctico del conocimiento científico.
 Disciplina y profesión que aplica los
conocimientos, métodos o instrumentos de la
ciencia para diseñar, o desarrollar, o construir, u
operar, o mantener: estructuras, máquinas,
aparatos, dispositivos o procesos.
¿Qué es la Ingeniería software?
 ¿Que es software?
 Conjunto de programas, instrucciones y reglas
informáticas para ejecutar ciertas tareas en una
computadora.
 ¿Que es un producto software?
 Software son los programas, la documentación y
la configuración de los datos asociados.
¿Qué es la Ingeniería software?
 “La Ingeniería del Software es la disciplina de
ingeniería encargada de todos los aspectos
relacionados con la producción de software
desde sus etapas más tempranas de la
especificación del sistema hasta el
mantenimiento del sistema tras su puesta en
marcha.”
Ingeniería del Software
Ian Sommerville
¿Qué es la Ingeniería software?
 ¿Que es el ciclo de vida del software?
 Es una sucesión de etapas (procesos) por la que
pasa el software en su desarrollo, desde que se
concibe la idea hasta que el software deja de
utilizarse
 Cada etapa lleva asociada una serie de
actividades y tareas que se deben realizar
 La salida de una etapa, es la entrada de la
siguiente
 Introducción
 ¿Qué es la Ingeniería del software?
 ¿Qué es un proceso software?
 Modelos de proceso de desarrollo
 Conclusiones
 Proceso Unificado de Desarrollo
 Metodologías Ágiles
Organizate Mejor
Metodologías de Desarrollo
70
¿Qué es un proceso software?
 “Un proceso define quién está haciendo qué,
cuándo, y cómo alcanzar un determinado
objetivo. […] el objetivo es construir un
producto software o mejorar uno existente”
El proceso unificado de desarrollo software
Ivar Jacobson, Grady Booch y James
Rumbaugh
¿Qué es un proceso software?
 ¿Que es un modelo de proceso?
 Es una descripción simplificada de un proceso
software:
 Actividades
 Productos
 Roles
 No se describen detalladamente, sólo se indican
los aspectos generales de alto nivel
¿Qué es un proceso software?
 Dependiendo del grado de detalle, a un
modelo de proceso también se le conoce
como:
 Metodología de desarrollo de software
 Modelo de desarrollo de software
 Marco de desarrollo de software
 Proceso de desarrollo de software
 Enfoques de desarrollo de software
 …
 Introducción
 ¿Qué es la Ingeniería del software?
 ¿Qué es un proceso software?
 Modelos de proceso de desarrollo
 Conclusiones
 Proceso Unificado de Desarrollo
 Metodologías Ágiles
Organizate Mejor
Metodologías de Desarrollo
74
Modelos de proceso
 Modelos de proceso sin iteración
 Cascada (1970)
 Separa y distingue las fases de especificación y desarrollo
 No se puede pasar a la siguiente fase hasta haber terminado
la anterior
 Si se detectan nuevos requisitos en la fase de pruebas, hay
que comenzar la aplicación desde el principio
 El término cascada hace referencia al coste que supone
“volver atrás” en el proceso
 Desarrollo formal
 Un modelo matemático del sistema se transforma
formalmente a una implementación
Modelos de proceso
 Cascada
Modelos de proceso
 Cascada
 Inconvenientes
 Inflexibilidad
 Difícil responder ante cambios en los requisitos
 Sólo apropiado si los requisitos se comprenden
muy bien y no hay posibilidad de que cambien
 Esto no ocurre nunca, no refleja la realidad
 Hasta la fase final no se obtiene el producto
Modelos de proceso
 Desarrollo formal
Modelos de proceso
 Desarrollo formal
 Sistemas críticos donde la seguridad o la
fiabilidad debe garantizarse antes de que el
sistema se ponga en explotación
 Inconvenientes
 Se necesitan habilidades y el entrenamiento
especializados para aplicar la técnica
 Es difícil (o imposible) especificar formalmente
algunos aspectos del sistema tales como la interfaz
de usuario
Modelos de proceso
 Modelos de proceso con iteración
 Incremental
 En vez de entregar el sistema de una vez, tanto el
desarrollo como las entregas se dividen en incrementos
 En espiral
 El proceso se representa como una espiral más que
como una secuencia de actividades con vuelta hacia
atrás
Modelos de proceso
 Incremental
Modelos de proceso
 Incremental
 Propuesto por Mills en 1980
 Los requisitos del usuario se priorizan y los
requisitos de prioridad más alta se incluyen en los
incrementos más tempranos
 El proceso unificado de desarrollo es “iterativo e
incremental” y define de forma más detallada las
distintas fases, artefactos, roles…
Modelos de proceso
 Incremental
 Ventajas
 El primer incremento satisface los requisitos más críticos
 Los servicios del sistema con la prioridad más alta tienden a
ser los más probados
 Los primero incrementos sirven como prototipo y ayudan en la
tarea de detectar los posteriores requisitos
 Desventajas
 Puede ser difícil ajustar los requisitos a los incrementos
Modelos de proceso
 En espiral
Modelos de proceso
 En espiral
 Definición de los objetivos: Se identifican los objetivos de
cada fase, las alternativas y las restricciones
 Evaluación y reducción de riesgos: Se determinan los
riesgos de cada fase y se ponen en marcha las actividades que
reduzcan estos riesgos
 Desarrollo y validación: Se elige el modelo de desarrollo
más apropiado para el sistema de entre todos los modelos
genéricos
 Planificación: Se revisa el proyecto y, si se continúa, se
planifica la siguiente fase (nueva vuelta a la espiral)
 Introducción
 ¿Qué es la Ingeniería del software?
 ¿Qué es un proceso software?
 Modelos de proceso de desarrollo
 Conclusiones
 Proceso Unificado de Desarrollo
 Metodologías Ágiles
Organizate Mejor
Metodologías de Desarrollo
86
Conclusiones
 Un proceso de desarrollo define las actividades que
hay que llevar a cabo durante el desarrollo de un
sistema informático (desde la idea hasta la retirada
del software)
 Siempre hay que utilizar un proceso de desarrollo,
más o menos detallado y rígido dependiendo del
caso
 Existen modelos de proceso genéricos y existen
procesos de desarrollo concretos. Incluso existen
procesos de desarrollo específicos para tipos de
aplicaciones
 Introducción
 Proceso Unificado de Desarrollo
 Creadores
 Características del proceso unificado
 Fases, iteraciones y actividades
 Flujos de trabajo
 Metodologías Ágiles
Organizate Mejor
Metodologías de Desarrollo
88
Creadores
Ivar JacobsonGrady Booch James Rumbaugh
 Introducción
 Proceso Unificado de Desarrollo
 Creadores
 Características
 Fases, iteraciones y actividades
 Flujos de trabajo
 Metodologías Ágiles
Organizate Mejor
Metodologías de Desarrollo
90
Características
 Unificación de tres metodologías de
desarrollo basadas en el paradigma
orientado a objetos
 OOSE: Object Oriented Software Engineering
(Casos de Uso) Jacobson, I.
 Booch (Diseño) Booch, G.
 OMT: Object Modeling Technique (Análisis)
Rumbaugh, J.
Características
 Utiliza UML - Unified Modeling Language
 Dirigido por casos de uso
 Centrado en la arquitectura
 Iterativo e incremental
Características
 Utiliza UML - Unified Modeling Language
 Es el lenguaje (gráfico) utilizado para la
construcción de modelos durante las fases del
proceso
 Ofrecen distintas perspectivas de una abstracción
de la realidad
 Un mismo elemento puede aparecer en distintos
diagramas
 En el modelo de un sistema no hay motivo para
que aparezcan obligatoriamente todos los
elementos.
Características
 UML
Diagrama de
Clases UML
Características
 UML
Diagrama de
Actividad UML
Características
 UML
Diagrama de
Secuencia UML
Características
 Dirigido por casos de uso
 Un caso de uso es una interacción del usuario
con la aplicación que le proporciona un resultado
útil
 Los casos de uso capturan los requisitos
funcionales
 Se desarrollan y evolucionan junto a la
arquitectura del sistema
 Técnica desarrollada por Ivar Jacobson en 1986
Características
 Dirigido por casos de
uso
 Modelo de casos de
uso
 Conduce el proceso
de desarrollo
 Responde a la
pregunta: ¿Que debe
hacer el sistema para
cada usuario?
Diagrama de casos de uso
Características
 Centrado en la arquitectura
 Muestra aspectos estructurales y dinámicos
significativos
 Dependiendo del tipo de aplicación, la
arquitectura será de una forma u otra
 Existen “estilos arquitectónicos” que muestran los
principios generales de la arquitectura de la
aplicación
Casos de uso – Función
Arquitectura – Forma
Características
 Iterativo e incremental
 Modelo de ciclo de vida incremental
 Una iteración produce un incremento
 Incremento no siempre es aditivo
 A veces se rehacen cosas con un mejor diseño para
permitir que el sistema pueda crecer y adaptarse
 La iteración trata un grupo de casos de uso que
extienden la funcionalidad
 En las primeras iteraciones se afrontan los
riesgos más importantes
 Introducción
 Proceso Unificado de Desarrollo
 Creadores
 Características del proceso unificado
 Fases, iteraciones y actividades
 Flujos de trabajo
 Metodologías Ágiles
Organizate Mejor
Metodologías de Desarrollo
101
Fases, iteraciones y actividades
Fases, iteraciones y actividades
 Una fase es un intervalo de tiempo entre dos
hitos importantes del proceso
 Al finalizar una fase se producen productos
 Las fases dividen el tiempo total de desarrollo de un
proyecto y marcan las actividades que tienen que
realizarse
 Fases del PUD
 Fase de inicio
 Fase de elaboración
 Fase de construcción
 Fase de transición
Fases, iteraciones y actividades
 Dentro de cada fase hay varias iteraciones
 Una iteración representa un ciclo de
desarrollo completo
 El énfasis en cada flujo de trabajo es
diferente dependiendo de la fase en la que
se encuentre la iteración
Fases, iteraciones y actividades
 Fase de inicio
 El objetivo es desarrollar el análisis del negocio
hasta justificar la puesta en marcha del proyecto
 Delimitando el alcance
 Esbozando una arquitectura
 Mitigando los riesgos
 Poner en marcha el proyecto
Fases, iteraciones y actividades
 Fase de inicio - Productos
 Lista de características
 Versión inicial del modelo de negocio
 1ª versión del modelo de casos de uso, el modelo
de análisis y el de diseño. Requisitos adicionales.
 Descripción de arquitectura candidata
 Prototipo exploratorio
 Lista de riesgos y clasificación de casos de uso
 Esbozo de plan del proyecto
 Borrador del análisis del negocio
Fases, iteraciones y actividades
 Fase de inicio – Responde a ...
 ¿Se ha determinado con claridad el ámbito del
sistema?, ¿qué esta dentro del sistema y qué
esta fuera?
 ¿Hay acuerdo con todas las partes sobre la
funcionalidad básica?
 ¿Se vislumbra una arquitectura que implemente
estas características?
 ¿Se han identificado los riesgos críticos y una
forma de mitigarlos?
Fases, iteraciones y actividades
 Fase de elaboración
 Recopilar la mayor parte de los requisitos
definiéndolos como casos de uso
 Establecer una arquitectura sólida para guiar las
fases posteriores
 Continuar la observación y control de los riesgos
críticos
 Completar el plan de proyecto
Fases, iteraciones y actividades
 Fase de elaboración - Productos
 Modelo completo del negocio
 Nueva versión de los modelos
 Línea base y descripción de la arquitectura
 Lista de riesgos actualizada. Los críticos seguro
que se pueden mitigar
 Plan de proyecto para construcción y transición
 Manual de usuario preliminar
 Análisis del negocio incluida propuesta
económica
Fases, iteraciones y actividades
 Fase de elaboración – Responde a ...
 ¿Se ha creado una línea base de la arquitectura
que sea adaptable, robusta y que pueda
evolucionar a lo largo del ciclo de vida?
 ¿Se han identificado y mitigado los riesgos
graves, asegurando que no se trastocara el plan
de proyecto?
 Otras cuestiones sobre la inversión
Fases, iteraciones y actividades
 Fase de Construcción
 Objetivo: versiones preliminares (prototipos) y
versiones beta
 Línea base de la arquitectura
 Implementación de los casos de uso
Fases, iteraciones y actividades
 Fase de Construcción - Productos
 Plan de proyecto para la fase de transición
 Versión ejecutable
 Modelos completos del sistema
 Descripción de la arquitectura
 Manual de usuario para guiar a los usuarios beta
 Análisis del negocio
Fases, iteraciones y actividades
 Fase de Construcción – Responde a ...
 ¿El producto ha alcanzado un nivel de capacidad
adecuada para su operación inicial en el entorno
del usuario, en particular para realizar las
pruebas beta?
 Tenemos linea base de la arquitectura, lista de
riesgos, plan de proyecto y recursos, por lo tanto
construimos el producto.
 Seguirán apareciendo problemas, pero se
superaran día a día.
Fases, iteraciones y actividades
 Fase de Transición
 Cumplir requisitos
 Gestionar todos los aspectos de despliegue e
implantación
 Pruebas de aceptación
 Incidencias:
 Riesgos inesperados
 Problemas no resueltos
 Fallos
 Lagunas y ambigüedades en la documentación
Fases, iteraciones y actividades
 Fase de Transición - Productos
 Software ejecutable, incluyendo instalación
 Contratos, licencias, garantías
 Todos los modelos del sistema
 Arquitectura
 Manuales y material de formación
 Referencias para la ayuda del cliente
Fases, iteraciones y actividades
 Fase de Transición – Responde a ...
 ¿Es el producto capaz de operar con éxito en
entornos de usuario típicos?
 Después de la construcción hay que realizar
pruebas beta, de aceptación, corrección de
problemas y defectos que surjan en el entorno de
trabajo
 Cuando los usuario estén satisfechos,
distribuiremos el producto
 Introducción
 Proceso Unificado de Desarrollo
 Creadores
 Características del proceso unificado
 Fases, iteraciones y actividades
 Flujos de trabajo
 Metodologías Ágiles
Organizate Mejor
Metodologías de Desarrollo
117
Flujos de trabajo
Flujos de trabajo
 Flujos de trabajo fundamentales
 Requisitos
 Análisis
 Diseño
 Implementación
 Pruebas
Flujos de trabajo
 Requisitos
 La captura de requisitos es complicada
 Creamos código para otros
 Los usuarios no los conocen y les cuesta especificarlos de
forma precisa
 Suelen ser varios usuarios sin una visión global
 Los requisitos cambian
 Las condiciones en las que se especifico un requisito varían
 Objetivo: guiar el desarrollo hacia el sistema
correcto
Flujos de trabajo
 Análisis
 Se trabaja con conceptos
 Especificación más precisa de los requisitos
 Se utiliza un lenguaje orientado a objetos
conceptual
 Facilita comprensión, preparación, modificación y
mantenimiento de requisitos
 Primera aproximación al modelo de diseño
Flujos de trabajo
 Diseño
 Se modela el sistema para que de soporte a los
requisitos funcionales y no funcionales
 El diseño es un refinamiento del análisis
 Es una descripción del sistema con un grado de
detalle entre el Análisis (alto nivel) y la
implementación (bajo nivel)
Flujos de trabajo
 Diseño
 Propósitos
 Profundizar en la requisitos no funcionales y restricciones
dependientes de la plataforma
 Crear una entrada apropiada para la implementación
 Descomponer los trabajos de implementación en partes mas
manejables y que permitan concurrencia
 Es el centro de atención final de la fase de
elaboración e iteraciones iniciales de la fase de
construcción
Flujos de trabajo
 Implementación
 Se implementa el sistema en términos de
componentes: ficheros de código fuente, scripts,
ficheros de código binarios, ejecutables y
similares
 Objetivos
 Distribuir el sistema asignando componentes ejecutables a
nodos en el diagrama de despliegue
 Implementar las clases y subsistemas encontrados durante el
diseño
 Probar los componentes individualmente e integrarlos
Flujos de trabajo
 Pruebas
 Verificamos el resultado de la implementación
probando cada construcción
 Objetivos de la prueba
 Planificar las pruebas necesarias para cada iteración (pruebas
de sistema y pruebas de integración)
 Diseñar e implementar las pruebas con casos de prueba
 Introducción
 Proceso Unificado de Desarrollo
 Metodologías Ágiles
 Metodologías tradicionales vs ágiles
 ¿Que es una metodología ágil?
 Manifiesto de las MAs
 Programación Extrema (XP)
 Scrum
 Conclusiones
Organizate Mejor
Metodologías de Desarrollo
126
Metodologías tradicionales vs ágiles
 “son tratadas principalmente como una ficción
necesaria para presentar una imagen de control o
para proveer un estatus simbólico.” - Nandhakumar
& Avison 1999
 Es posible que los métodos tradicionales sean
“meramente ideales inalcanzables e hipotéticos que
proveen una guía normativa a situaciones de
desarrollo utópicas.” - Truex et al. 2000
Metodologías tradicionales vs ágiles
 “lo que es nuevo en los procesos ágiles no son las
prácticas que usan, sino que reconozcan a las
personas como primeros implicados en el éxito de
un proyecto, además de un intenso foco en la
efectividad y la manejabilidad. Esto genera una
nueva combinación de valores y principios que
definen una visión ágil del mundo.” - Highsmith &
Cockburn 2001
Metodologías tradicionales vs ágiles
 “Una sola metodología no puede funcionar para
todo el espectro de proyectos, en vez de eso el
administrador de cada proyecto debería identificar la
naturaleza especifica de cada proyecto y
seleccionar la mejor metodología de desarrollo
aplicable.” - Hawrysh & Ruprecht 2000
 “Hay una necesidad de ambos métodos [ágiles y
orientados a procesos] ya que no hay un modelo de
desarrollo que se ajuste a todos los propósitos
imaginables.” - McCauley 2001
 Introducción
 Proceso Unificado de Desarrollo
 Metodologías Ágiles
 Metodologías tradicionales vs ágiles
 ¿Que es una metodología ágil?
 Manifiesto de las MAs
 Programación Extrema (XP)
 Scrum
 Conclusiones
Organizate Mejor
Metodologías de Desarrollo
130
¿Que es una metodología ágil?
 Las Metodologías Ágiles (MAs) valoran:
 Al individuo y las interacciones en el equipo de
desarrollo más que a las actividades y las
herramientas
 Desarrollar software que funciona más que conseguir
una documentación exhaustiva Minimalismo
respecto del modelado y la documentación del
sistema
 La colaboración con el cliente más que la negociación
de un contrato
 Responder a los cambios más que seguir
estrictamente una planificación
¿Que es una metodología ágil?
 ¿Por qué surgen las metodologías ágiles?
 Dificultades para implantar metodologías
tradicionales. Procesos ceremoniosos,
herramientas CASE y notaciones de modelado
sofisticadas (UML)
 Una solución a medida para un segmento
importante de proyectos de desarrollo de software
 Pugna entre comunidades/gurús
¿Que es una metodología ágil?
Metodología Ágil
• Pocos Artefactos. El modelado es
prescindible, modelos desechables.
• Pocos Roles, más genéricos y flexibles.
• No existe un contrato tradicional, debe
ser bastante flexible.
• El cliente es parte del equipo de
desarrollo (además in-situ).
• Orientada a proyectos pequeños. Corta
duración (o entregas frecuentes),
equipos pequeños (< 10 integrantes) y
trabajando en el mismo sitio.
• Énfasis en los aspectos humanos: el
individuo y el trabajo en equipo.
• La arquitectura se va definiendo y
mejorando a lo largo del proyecto.
• Basadas en heurísticas provenientes de
prácticas de producción de código
Metodología Tradicional
• Más Artefactos. El modelado es esencial,
mantenimiento de modelos.
• Más Roles, más específicos.
• Existe un contrato prefijado.
• El cliente interactúa con el equipo de
desarrollo mediante reuniones.
• Aplicables a proyectos de cualquier
tamaño, pero suelen ser especialmente
efectivas/usadas en proyectos grandes y
con equipos posiblemente dispersos.
• Énfasis en la definición del proceso:
roles, actividades y artefactos.
• Se promueve que la arquitectura se
defina tempranamente en el proyecto.
• Basadas en normas provenientes de
estándares seguidos por el entorno de
desarrollo
¿Que es una metodología ágil?
 El desarrollo de software es:
 Incremental
 liberaciones pequeñas y ciclos rápidos.
 Cooperativo
 clientes y desarrolladores trabajando juntos.
 Simple y directo
 el método es fácil de aprender y modificar.
 Adaptativo
 es posible realizar cambios de último momento.
 Introducción
 Proceso Unificado de Desarrollo
 Metodologías Ágiles
 Metodologías tradicionales vs ágiles
 ¿Que es una metodología ágil?
 Manifiesto de las MAs
 Programación Extrema (XP)
 Scrum
 Conclusiones
Organizate Mejor
Metodologías de Desarrollo
135
Manifiesto de las MAs
 Principios:
1. La prioridad principal es satisfacer al cliente mediante
tempranas y continuas entregas de software que le reporte un
valor.
2. Dar la bienvenida a los cambios. Los MAs capturan los
cambios para que el cliente tenga una ventaja competitiva.
3. Entregar frecuentemente software que funcione, desde un par
de semanas a un par de meses, con el menor intervalo de
tiempo posible entre una entrega y la siguiente.
Manifiesto de las MAs
4. La gente del negocio y los desarrolladores deben trabajar
juntos a lo largo del proyecto.
5. Construir proyecto en torno a individuos motivados. Darles el
entorno y el apoyo que necesitan y confiar en ellos para
conseguir el trabajo.
6. El diálogo cara a cara es el método más eficiente y efectivo
para comunicar información dentro de un equipo de
desarrollo.
Manifiesto de las MAs
7. El software que funciona es la medida principal de progreso.
8. Los procesos ágiles promueven un desarrollo sostenible. Los
promotores, desarrolladores y usuarios deberían ser capaces
de mantener una paz constante.
9. La atención continua a la calidad técnica y al buen diseño
mejora la agilidad.
10. La simplicidad es esencial.
Manifiesto de las MAs
11. Las mejores arquitecturas, requisitos y diseños surgen de los
equipos organizados por sí mismos.
12. En intervalos regulares, el equipo reflexiona respecto de
cómo llegar a ser más efectivo, y según esto ajusta su
comportamiento.
 Introducción
 Proceso Unificado de Desarrollo
 Metodologías Ágiles
 Metodologías tradicionales vs ágiles
 ¿Que es una metodología ágil?
 Manifiesto de las MAs
 Programación Extrema (XP)
 Scrum
 Conclusiones
Organizate Mejor
Metodologías de Desarrollo
140
Programación Extrema
 Creada por Kent Beck a raíz de su
experiencia en el proyecto C3 en Chrysler.
 Kent fue contratado para dirigir el proyecto.
 Durante el proceso nació una nueva metodología:
eXtreme Programming (XP).
 En 1999 publica el libro Extreme Programming
Explained: Embrace Change (1999)
Programación Extrema
 Valores
 Comunicación
 Construir sistemas software requiere comunicar los distintos
requisitos a los desarrolladores
 El objetivo de XP es que los desarrolladores compartan una
visión del sistema que encaje con la visión que tienen los
usuarios
 Facilitar la comunicación cara a cara
 Simplicidad
 Diseño simple (no sobredimensionar para el futuro)
 Documentación simple, código autodocumentado a través de
los nombres de clases, métodos… (para que esté actualizada)
 Programar para hoy no para mañana
Programación Extrema
 Valores
 Retroalimentación (feedback)
 Del sistema: realizando pruebas unitarias y de integración
 Del cliente: Con las pruebas de aceptación el cliente puede
observar el estado del sistema
 Del equipo: Cada vez que el cliente indica una nueva
funcionalidad el equipo puede estimar su coste
 Valor (courage)
 Para programar para hoy, sin miedo a la refactorización
cuando sea necesaria
 Para desechar código cuando sea necesario
 Para programar en parejas sin pensar que es una pérdida de
tiempo
Programación Extrema
 Prácticas
 Proceso continuo
 Integración continua > Actualizar el repositorio lo más
rápido posible. Construir el proyecto a diario. Pasar los test
unitarios, de integración y de rendimiento a diario.
 Refactorizar > cambiar el código para mejorar la calidad
 Entregas frecuentes para que se construya el sistema
completamente cada vez y se eviten así problemas de
integración
Programación Extrema
 Prácticas
 Conocimiento compartido
 Usar estándares > Reglas de estilo, librerías comunes, etc..
 Código poseído por todos > Todos pueden
programar/arreglar cualquier parte. Todos se preocupan de
que todo el código esté bien
 Diseño simple > KISS (Keep it Simple Stupid). Evitar la
complejidad
 Metáfora del sistema > Si todo el equipo conoce qué hace
el sistema con una metáfora, es más sencilla la
comunicación, la intuición, la documentación…
Programación Extrema
 Prácticas
 Realimentación de grado fino (fine scale
feedback)
 Programación por pares (dos personas en el mismo
ordenador: uno programa y el otro revisa y piensa)
 Juego de la planificación (planificar cada iteración)
 Desarrollo dirigido por pruebas > Codificar las pruebas
primero
 Equipo completo (Whole team). Cliente disponible
 Bienestar del programador
 Paz tangible. Sin horas extra, no mas de 40 horas semanales.
 Eso quiere decir que todo va bien… que no hay “sorpresas”
 Introducción
 Proceso Unificado de Desarrollo
 Metodologías Ágiles
 Metodologías tradicionales vs ágiles
 ¿Que es una metodología ágil?
 Manifiesto de las MAs
 Programación Extrema (XP)
 Scrum
 Conclusiones
Organizate Mejor
Metodologías de Desarrollo
147
Scrum
 Scrum es un término que proviene del rugby y hace
referencia al trabajo del equipo como un todo
 Fue diseñado originalmente para el desarrollo de
productos en la industria
 "The Knowledge Creating Company" Ikujiro Nonaka y Hirotaka
Takeuchi. Universidad de Oxford (1995).
 Posteriormente se adaptó para el desarrollo de software
como un producto más
 “Business object design and implementation” Jeff Sutherland
Ken Schwaber. OOPSLA’95 (1995).
Scrum
Scrum
 Características
 Equipos auto-organizados
 El producto progresa en una serie de sprints
(iteraciones) que duran un mes
 Los requisitos se encuentran en el product backlog
reunidos en una lista
 No contiene prácticas de ingeniería pre-descriptas
 Utiliza reglas generales para crear un ambiente ágil
para la liberación de los proyectos
 Usado para proyectos complejos con requerimientos
cambiantes
 Basado en un control de proceso empírico
Scrum
 Los roles se dividen en dos, siguiendo la
metáfora del cerdo y la gallina
 Un cerdo y una gallina se encuentran en la calle.
La gallina mira al cerdo y dice: "Hey, ¿por qué no
abrimos un restaurante?" El cerdo mira a la
gallina y le dice: "Buena idea, ¿cómo se llamaría
el restaurante?" La gallina piensa un poco y
contesta: "¿Por qué no lo llamamos "Huevos con
jamón?" "Lo siento pero no", dice el cerdo, "Yo
estaría comprometido pero tú solamente estarías
involucrada".
Scrum
 Roles del núcleo (Core roles > Cerdo)
 Propietario del productor (ProductOwner)
 La voz del cliente en el proceso
 Dirige el equipo desde la perspectiva de negocio
 Facilitador (ScrumMaster)
 Asegura que las reglas se cumplan, actúa como administrador
 No es el líder del equipo.
 Equipo (Team)
 Equipo reducido encargado de entregar el producto
 Se autogestiona y organiza
Scrum
 Roles accesorios (Gallina)
 Usuarios
 El software es escrito para ellos
 Stakeholders (Clientes, Proveedores,...).
 A quienes el proyecto les aportara un beneficio
 Solo participan en las revisiones de los sprints
 Manager
 Establece el ambiente/entorno para el desarrollo
Scrum
 Reuniones en Scrum
 Todo el trabajo es realizado en sprints (30 días).
 Durante el sprint se realizan reuniones que
constituyen la inspección empírica de la marcha del
proyecto y permiten la adaptación del proceso en
función de ésta
Scrum
 Reuniones –Diarias < 15 min.
 Características
 Puntualidad, si no, castigo
 Todos bienvenidos pero solo los cerdos hablan
 Mismo lugar y misma hora, todos de pie
 Se debe responder a
 ¿Qué has hecho en este proyecto desde el ultimo Daily
sprint?
 ¿Qué planeas hacer en el proyecto entre hoy y la próxima
reunión diaria (daily scrum)?
 ¿Qué impedimentos se te han presentado para lograr lo
prometido en el sprint y proyecto?
Scrum
 Reuniones – Planificación del sprint
 Características
 Al inicio del sprint
 Seleccionar qué trabajo se hará
 Preparar, con el equipo completo, el sprint backlog que detalla
el tiempo que tomara hacer el trabajo
 Identificar y comunicar cuanto del trabajo es probable que se
realice durante el actual sprint
 Límite de 8 horas
Scrum
 Reuniones – Revisión del sprint
 Características
 Revisar el trabajo terminado y el no acabado
 Presentar el trabajo completo a los stakeholders (prototipo)
 El trabajo incompleto no puede ser mostrado
 Límite de 4 horas
Scrum
 Reuniones – Retrospectiva del sprint
 Características
 Todos los miembros dejan sus impresiones del último sprint
 Realizar mejora continua del proceso
 Límite de 4 horas
 Responde a:
 ¿Qué fue bien en el ultimo sprint?
 ¿Qué puede ser mejorado en el siguiente sprint?
 Introducción
 Proceso Unificado de Desarrollo
 Metodologías Ágiles
 Metodologías tradicionales vs ágiles
 ¿Que es una metodología ágil?
 Manifiesto de las MAs
 Programación Extrema (XP)
 Scrum
 Conclusiones
Organizate Mejor
Metodologías de Desarrollo
160
Conclusiones
• Las metodologías ágiles surgen como una
necesidad de aliviar los burocráticos procesos
“impuestos” por las metodologías tradicionales
• Reconocen que el desarrollo de software es un
trabajo muy creativo y exploratorio y la
planificación a largo plazo no suele ser efectiva
• En vez de centrarse en el proceso de
producción de software en fases, se centran en
lo que el equipo de desarrollo está haciendo en
cada iteración
Conclusiones
• En realidad no hay procesos completamente ágiles o
completamente “tradicionales”
• El grado de burocracia/documentación depende del
proyecto y del tamaño del equipo de desarrollo
• Se están desarrollando nuevas metodologías que
incorporan lo mejor de ambos mundos:
• Agile Unified Process (AUP) es la versión ágil del proceso
unificado de desarrollo
• Incorpora desarrollo guiado por pruebas y otras prácticas propias
de las metodologías ágiles
 ¿Quiénes somos?
 Introducción
 Programa mejor
 Patrones de Diseño
 Mapeo Objeto Relacional
 Organizate mejor
 Metodologías de Desarrollo
 ¿Qué herramientas te pueden ayudar?
 Conclusiones
¿Cómo ser más productivo en el
desarrollo de aplicaciones?
163
 El día a día del desarrollo software…
 Solucionando problemas
 Herramientas y Tecnologías para no desfallecer en el
intento
¿Qué herramientas te pueden ayudar?
164
 Compartición del
código
 Duplicación: en más de
una máquina
 Reutilización
El día a día del desarrollo software…
Programación
165
166
El día a día del desarrollo software…
Gestión de tareas
 Reuniones (informales)
 Apuntar las tareas en
papel
 Asignar responsables
 Compartición de la
información
167
El día a día del desarrollo software…
Documentación
 Formato
 Word
 Bloc de notas
 Ficheros entre el código
 Compartición
 Versiones
168
El día a día del desarrollo software…
Versiones
 Todo listo…
 Código
 Construcción
 Instalador
 Sitio de publicación
 Descarga para cliente
 Arquitecturas para las
que funciona
169
El día a día del desarrollo software…
Soporte
 Cliente con problemas
 Contacto
 Versión del cliente
 Correspondencia con el
código
 Grabación de la
incidencia
170
El día a día del desarrollo software…
Calidad
 Comprobar que la
aplicación implementa
la funcionalidad
requerida
 Comprobar la calidad:
 Código que no se
ejecuta nunca
 Reglas de estilo
 …
 Pruebas
171
El día a día del desarrollo software…
Mantenimiento
 Leyes del cambio
continuo y de la
complejidad creciente
 Proyectos de larga
duración
 El equipo de desarrollo
es dinámico (cambia):
 Documentación
 Decisiones
172
El día a día del desarrollo software…
Seguridad
 Permisos
 Control de acceso
 ¿quiénes?
 ¿qué?
173
El día a día del desarrollo software…
Visibilidad
 Páginas web
 Posicionamiento
 Tutoriales/vídeos de la
aplicación
174
El día a día del desarrollo software…
Estimación
 Estimar tiempos
 Estimar costes
 El día a día del desarrollo software…
 Solucionando problemas
 Herramientas y Tecnologías para no desfallecer en el
intento
¿Qué herramientas te pueden ayudar?
175
 Servidor para compartir el
código
 Preferiblemente versionado
 Dropbox
 Integración en el IDE
 Permite saber cuándo alguien
más ha tocado un fichero y
cuáles son los cambios
 Gestión de descarga y subida
del código al servidor
Solucionando Problemas
Programación
176
177
Solucionando Problemas
Gestión de tareas
 Sistema de gestión de
incidencias
 Fecha de apertura
 Responsable
 Duración estimada
 Detalles sobre la
incidencia y la solución
 Fecha de resolución
178
Solucionando Problemas
Documentación
 Wiki
 Servidor
 Edición colaborativa
 Vía web
 Versionada
 Autoría
179
Solucionando Problemas
Versiones
 Construcción automática
 Especificación clara de
la versión
 Nombre del artefacto
 Semántica de numeración
 Etiquetar el código
correspondiente a la
versión
 Identificación unívoca
 Recuperación rápida
180
Solucionando Problemas
Soporte
 No problem! Tenemos
gestión de
incidencias…
181
Solucionando Problemas
Calidad
 Análisis del código
 Estilo
 Código duplicado
 Posibles errores
 Pruebas
 Unitarias
 De integración
 De interfaz
 Automatizado
182
Solucionando Problemas
Mantenimiento
 Leyes del cambio
continuo y de la
complejidad creciente
 Proyectos de larga
duración
 El equipo de desarrollo
es dinámico (cambia):
 Documentación
 Decisiones
183
Solucionando Problemas
Seguridad
 Perfiles
 Jefes de proyecto
 Desarrolladores
 Personal en pruebas
 Pfcs
 Alumnos
 Políticas de acceso por
perfil
 Unificación en el
acceso a las
herramientas
184
Solucionando Problemas
Visibilidad
 Página web del
proyecto
 Enlaces para descargar
la aplicación
 Tutoriales/vídeos de la
aplicación
 Posicionamiento
185
Solucionando Problemas
Estimación
 Estimar tiempos
 Estimar costes
 El día a día del desarrollo software…
 Solucionando problemas
 Herramientas y Tecnologías para no desfallecer en
el intento
¿Qué herramientas te pueden ayudar?
186
187
Herramientas y Tecnologías…
Programación
 Sistemas de control de
versiones
 Centralizados
 Subversive
 CVS
 Distribuidos
 Git
 Mercurial
 Integración en el IDE
 Subversive/Subclipse
 Egit
 Hg
188
Herramientas y Tecnologías…
Gestión de tareas
 Sistemas
 Trac
 Redmine
 Bugzilla
 Atlassian Jira
 Mantis
 RememberTheMilk
189
Herramientas y Tecnologías…
Gestión de tareas
 Integración con el IDE
 Eclipse Mylyn
190
Herramientas y Tecnologías…
Documentación
 Wiki
 Integrados
 Trac
 Redmine
 No integrados
 XWiki
 MediaWiki
191
Herramientas y Tecnologías…
Versiones
 Construcción automática
 Ant
 Maven
 Especificación clara de
la versión
 Etiquetar el código
Identificación unívoca
 Instaladores
 InstallShield
 Launch4J
 InstallJammer
192
Herramientas y Tecnologías…
Soporte
 No problem! Tenemos
gestión de
incidencias…
 Trac
 Redmine
193
Herramientas y Tecnologías…
Calidad
 Análisis del código
 Checkstyle
 PMD
 FIndBugs
 Sonar
 Pruebas
 JUnit
 SWTBot, Squish
 Automatizado
 Maven
 Hudson/Jenkins
194
Herramientas y Tecnologías…
Mantenimiento
 Se simplifica al utilizar de manera consistente las
herramientas anteriores
195
Herramientas y Tecnologías…
Seguridad
 Gestión integral de
acceso
 Active Directory
 OpenLDAP
 Herramientas
monoproyecto vs.
multiproyecto
 Sidelab Code Admin
Tools
196
Herramientas y Tecnologías…
Seguridad
197
Herramientas y Tecnologías…
Seguridad
198
Herramientas y Tecnologías…
Seguridad
199
Herramientas y Tecnologías…
Visibilidad
 Página web del
proyecto
 Enlaces para descargar
la aplicación
 Tutoriales/vídeos de la
aplicación
 Posicionamiento
 CMS
 Drupal
 Joomla
200
Herramientas y Tecnologías…
Estimación
 ¿Quiénes somos?
 Introducción
 Programa mejor
 Patrones de Diseño
 Mapeo Objeto Relacional
 Organizate mejor
 Metodologías de Desarrollo
 ¿Qué herramientas te pueden ayudar?
 Conclusiones
¿Cómo ser más productivo en el
desarrollo de aplicaciones?
201
 Para ser más productivo hay que programar mejor:
 Encapsulación, Modularidad, Abstracción y Jerarquía
 Patrones de Diseño Orientado a Objetos
 Tecnologías de Desarrollo Dirigido por Modelos y ORMs
 Para ser más productivo hay que organizarse* bien:
 Utiliza procesos de desarrollo
 Utiliza herramientas de gestión del proceso
 Lleva los procesos al servidor:
 Gestión de código, pruebas, construcción, calidad del código…
 Centraliza el estado del proyecto
Conclusiones
202
* Sobre todo si no trabajas solo
Muchas gracias

Más contenido relacionado

La actualidad más candente

Programas y procesos de computación
Programas y procesos de computaciónProgramas y procesos de computación
Programas y procesos de computaciónCelso
 
El proceso de desarrollo con herramientas Open Source
El proceso de desarrollo con herramientas Open SourceEl proceso de desarrollo con herramientas Open Source
El proceso de desarrollo con herramientas Open SourceJose Juan R. Zuñiga
 
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...Miguel Ángel Sánchez Chordi
 
ATDD - Desarrollo Dirigido por Test de Aceptación
ATDD - Desarrollo Dirigido por Test de AceptaciónATDD - Desarrollo Dirigido por Test de Aceptación
ATDD - Desarrollo Dirigido por Test de AceptaciónPaulo Clavijo
 
Zinjai como entorno de programación
Zinjai como entorno de programación Zinjai como entorno de programación
Zinjai como entorno de programación Leonela Yuquilema
 
Presentacion final oop taller
Presentacion final oop tallerPresentacion final oop taller
Presentacion final oop tallerAdán Silva
 
Extreme programming (1)
Extreme programming (1)Extreme programming (1)
Extreme programming (1)Enrique Polo
 
Lp II clase02 - Modelo Vista Controlador
Lp II   clase02 - Modelo Vista ControladorLp II   clase02 - Modelo Vista Controlador
Lp II clase02 - Modelo Vista ControladorAngelDX
 
La priorización de historias de usuario (versión ampliada)
La priorización de historias de usuario (versión ampliada)La priorización de historias de usuario (versión ampliada)
La priorización de historias de usuario (versión ampliada)Micael Gallego
 
Ha2 nm50 eq4-teamfoundationserver
Ha2 nm50 eq4-teamfoundationserverHa2 nm50 eq4-teamfoundationserver
Ha2 nm50 eq4-teamfoundationserverLuis Pérez
 
Extreme Programming
Extreme ProgrammingExtreme Programming
Extreme Programmingjoaquin_win
 
LP II clase05 - SCRUM
LP II clase05 - SCRUMLP II clase05 - SCRUM
LP II clase05 - SCRUMAngelDX
 
METODOLOGIAS XP
METODOLOGIAS XPMETODOLOGIAS XP
METODOLOGIAS XPBiingeSof
 

La actualidad más candente (20)

Programas y procesos de computación
Programas y procesos de computaciónProgramas y procesos de computación
Programas y procesos de computación
 
El proceso de desarrollo con herramientas Open Source
El proceso de desarrollo con herramientas Open SourceEl proceso de desarrollo con herramientas Open Source
El proceso de desarrollo con herramientas Open Source
 
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
 
Zinjai
ZinjaiZinjai
Zinjai
 
ATDD - Desarrollo Dirigido por Test de Aceptación
ATDD - Desarrollo Dirigido por Test de AceptaciónATDD - Desarrollo Dirigido por Test de Aceptación
ATDD - Desarrollo Dirigido por Test de Aceptación
 
Zinjai como entorno de programación
Zinjai como entorno de programación Zinjai como entorno de programación
Zinjai como entorno de programación
 
Presentacion final oop taller
Presentacion final oop tallerPresentacion final oop taller
Presentacion final oop taller
 
Extreme programming (1)
Extreme programming (1)Extreme programming (1)
Extreme programming (1)
 
Lp II clase02 - Modelo Vista Controlador
Lp II   clase02 - Modelo Vista ControladorLp II   clase02 - Modelo Vista Controlador
Lp II clase02 - Modelo Vista Controlador
 
La priorización de historias de usuario (versión ampliada)
La priorización de historias de usuario (versión ampliada)La priorización de historias de usuario (versión ampliada)
La priorización de historias de usuario (versión ampliada)
 
Ha2 nm50 eq4-teamfoundationserver
Ha2 nm50 eq4-teamfoundationserverHa2 nm50 eq4-teamfoundationserver
Ha2 nm50 eq4-teamfoundationserver
 
Crear un nuevo proyecto
Crear un nuevo proyectoCrear un nuevo proyecto
Crear un nuevo proyecto
 
Estructura de datos
Estructura de datosEstructura de datos
Estructura de datos
 
Introduccion programacion en java
Introduccion programacion en javaIntroduccion programacion en java
Introduccion programacion en java
 
Extreme Programming
Extreme ProgrammingExtreme Programming
Extreme Programming
 
Continuous Delivery
Continuous DeliveryContinuous Delivery
Continuous Delivery
 
LP II clase05 - SCRUM
LP II clase05 - SCRUMLP II clase05 - SCRUM
LP II clase05 - SCRUM
 
METODOLOGIAS XP
METODOLOGIAS XPMETODOLOGIAS XP
METODOLOGIAS XP
 
Inf162 diapositiva...
Inf162 diapositiva...Inf162 diapositiva...
Inf162 diapositiva...
 
Diapositivas xp
Diapositivas xpDiapositivas xp
Diapositivas xp
 

Destacado

Angular 2 Campus Madrid Septiembre 2016
Angular 2 Campus Madrid Septiembre 2016Angular 2 Campus Madrid Septiembre 2016
Angular 2 Campus Madrid Septiembre 2016Micael Gallego
 
TypeScript: Un lenguaje aburrido para programadores torpes y tristes
TypeScript: Un lenguaje aburrido para programadores torpes y tristesTypeScript: Un lenguaje aburrido para programadores torpes y tristes
TypeScript: Un lenguaje aburrido para programadores torpes y tristesMicael Gallego
 
Desarrollo web front-end con TypeScript, Angular 2 e Ionic
Desarrollo web front-end con TypeScript, Angular 2 e IonicDesarrollo web front-end con TypeScript, Angular 2 e Ionic
Desarrollo web front-end con TypeScript, Angular 2 e IonicMicael Gallego
 
TypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browser
TypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browserTypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browser
TypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browserMicael Gallego
 
TypeScript - Angular 2 - ionic 2
TypeScript - Angular 2 - ionic 2TypeScript - Angular 2 - ionic 2
TypeScript - Angular 2 - ionic 2Micael Gallego
 
Docker para Data Scientist - Master en Data Science URJC
Docker para Data Scientist - Master en Data Science URJCDocker para Data Scientist - Master en Data Science URJC
Docker para Data Scientist - Master en Data Science URJCMicael Gallego
 
El mundo real en el aula, con la ayuda del profesor
El mundo real en el aula, con la ayuda del profesorEl mundo real en el aula, con la ayuda del profesor
El mundo real en el aula, con la ayuda del profesorMicael Gallego
 
Tema2: Tecnologías de desarrollo web (Desarrollo Aplicaciones Web)
Tema2: Tecnologías de desarrollo web (Desarrollo Aplicaciones Web)Tema2: Tecnologías de desarrollo web (Desarrollo Aplicaciones Web)
Tema2: Tecnologías de desarrollo web (Desarrollo Aplicaciones Web)Micael Gallego
 
Mapeo objeto relacional
Mapeo objeto relacionalMapeo objeto relacional
Mapeo objeto relacionalIsabelAlisson
 
Diagrama de clases
Diagrama de clasesDiagrama de clases
Diagrama de clasesmarvin8826
 
Base de datos orientado a objetos
Base de datos orientado a objetosBase de datos orientado a objetos
Base de datos orientado a objetosManceragonzalez
 
Mapeo de objeto relacional
Mapeo de objeto relacionalMapeo de objeto relacional
Mapeo de objeto relacionalInspirate Unaula
 
TypeScript para Javeros: Cómo programar web front-end y sentirse como en casa
TypeScript para Javeros: Cómo programar web front-end y sentirse como en casaTypeScript para Javeros: Cómo programar web front-end y sentirse como en casa
TypeScript para Javeros: Cómo programar web front-end y sentirse como en casaMicael Gallego
 
Metodología del diseño de db
Metodología del diseño de dbMetodología del diseño de db
Metodología del diseño de dbAngel Pin
 
Consulta y operacion
Consulta y operacionConsulta y operacion
Consulta y operacionCesar Garcia
 
Herramientas Marketing Digital = Prototipado, Programación, Edición y diseño web
Herramientas Marketing Digital = Prototipado, Programación, Edición y diseño webHerramientas Marketing Digital = Prototipado, Programación, Edición y diseño web
Herramientas Marketing Digital = Prototipado, Programación, Edición y diseño webJesús Crespo Fernández
 

Destacado (20)

Angular 2 Campus Madrid Septiembre 2016
Angular 2 Campus Madrid Septiembre 2016Angular 2 Campus Madrid Septiembre 2016
Angular 2 Campus Madrid Septiembre 2016
 
TypeScript: Un lenguaje aburrido para programadores torpes y tristes
TypeScript: Un lenguaje aburrido para programadores torpes y tristesTypeScript: Un lenguaje aburrido para programadores torpes y tristes
TypeScript: Un lenguaje aburrido para programadores torpes y tristes
 
Desarrollo web front-end con TypeScript, Angular 2 e Ionic
Desarrollo web front-end con TypeScript, Angular 2 e IonicDesarrollo web front-end con TypeScript, Angular 2 e Ionic
Desarrollo web front-end con TypeScript, Angular 2 e Ionic
 
TypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browser
TypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browserTypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browser
TypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browser
 
TypeScript - Angular 2 - ionic 2
TypeScript - Angular 2 - ionic 2TypeScript - Angular 2 - ionic 2
TypeScript - Angular 2 - ionic 2
 
Docker para Data Scientist - Master en Data Science URJC
Docker para Data Scientist - Master en Data Science URJCDocker para Data Scientist - Master en Data Science URJC
Docker para Data Scientist - Master en Data Science URJC
 
El mundo real en el aula, con la ayuda del profesor
El mundo real en el aula, con la ayuda del profesorEl mundo real en el aula, con la ayuda del profesor
El mundo real en el aula, con la ayuda del profesor
 
Tema2: Tecnologías de desarrollo web (Desarrollo Aplicaciones Web)
Tema2: Tecnologías de desarrollo web (Desarrollo Aplicaciones Web)Tema2: Tecnologías de desarrollo web (Desarrollo Aplicaciones Web)
Tema2: Tecnologías de desarrollo web (Desarrollo Aplicaciones Web)
 
Mapeo objeto relacional
Mapeo objeto relacionalMapeo objeto relacional
Mapeo objeto relacional
 
Diagrama de clases
Diagrama de clasesDiagrama de clases
Diagrama de clases
 
Base de datos orientado a objetos
Base de datos orientado a objetosBase de datos orientado a objetos
Base de datos orientado a objetos
 
Mapeo de objeto relacional
Mapeo de objeto relacionalMapeo de objeto relacional
Mapeo de objeto relacional
 
TypeScript para Javeros: Cómo programar web front-end y sentirse como en casa
TypeScript para Javeros: Cómo programar web front-end y sentirse como en casaTypeScript para Javeros: Cómo programar web front-end y sentirse como en casa
TypeScript para Javeros: Cómo programar web front-end y sentirse como en casa
 
Metodología del diseño de db
Metodología del diseño de dbMetodología del diseño de db
Metodología del diseño de db
 
centralización
centralización centralización
centralización
 
Recursos y tecnologías web 2.0
Recursos y tecnologías web 2.0Recursos y tecnologías web 2.0
Recursos y tecnologías web 2.0
 
Consulta y operacion
Consulta y operacionConsulta y operacion
Consulta y operacion
 
Javascript + Angular Sesion 2
Javascript + Angular Sesion 2Javascript + Angular Sesion 2
Javascript + Angular Sesion 2
 
Herramientas Marketing Digital = Prototipado, Programación, Edición y diseño web
Herramientas Marketing Digital = Prototipado, Programación, Edición y diseño webHerramientas Marketing Digital = Prototipado, Programación, Edición y diseño web
Herramientas Marketing Digital = Prototipado, Programación, Edición y diseño web
 
Diagrama de uml
Diagrama de umlDiagrama de uml
Diagrama de uml
 

Similar a Como ser mas productivo en el desarrollo de aplicaciones

UML - Lenguaje de Modelamiento Unificado
UML - Lenguaje de Modelamiento UnificadoUML - Lenguaje de Modelamiento Unificado
UML - Lenguaje de Modelamiento UnificadoEliseo Castro
 
Presentacion de-uml-formato-2-1227891304393749-8
Presentacion de-uml-formato-2-1227891304393749-8Presentacion de-uml-formato-2-1227891304393749-8
Presentacion de-uml-formato-2-1227891304393749-8Henry Ayala
 
Patrones de diseño - Andrés Dorado
Patrones de diseño - Andrés DoradoPatrones de diseño - Andrés Dorado
Patrones de diseño - Andrés Dorado2008PA2Info3
 
Analisis Y DiseñO Orientado Objetos
Analisis Y DiseñO Orientado ObjetosAnalisis Y DiseñO Orientado Objetos
Analisis Y DiseñO Orientado ObjetosEliecer Suarez
 
Fundamentos De ProgramacióN Unidad 1
Fundamentos De ProgramacióN Unidad 1Fundamentos De ProgramacióN Unidad 1
Fundamentos De ProgramacióN Unidad 1cesarmrl2
 
Paradigma orientado a objetos,
Paradigma orientado a objetos,Paradigma orientado a objetos,
Paradigma orientado a objetos,iestpaht
 
C:\Documents And Settings\Uleam\Mis Documentos\Exp Sonia Y Nilda
C:\Documents And Settings\Uleam\Mis Documentos\Exp  Sonia Y NildaC:\Documents And Settings\Uleam\Mis Documentos\Exp  Sonia Y Nilda
C:\Documents And Settings\Uleam\Mis Documentos\Exp Sonia Y Nildaaraggg
 
Tecnología Orientada A Objetos
Tecnología Orientada A ObjetosTecnología Orientada A Objetos
Tecnología Orientada A ObjetosAndrés
 
Ingeniería de software y el paradigma orientado a objetos
Ingeniería de software y el paradigma orientado a objetosIngeniería de software y el paradigma orientado a objetos
Ingeniería de software y el paradigma orientado a objetosWilfredo Mogollón
 
Programacion Orientada a Objetos IE
Programacion Orientada a Objetos IEProgramacion Orientada a Objetos IE
Programacion Orientada a Objetos IEKaren Olan
 
Introduccion a la POO
Introduccion a la POOIntroduccion a la POO
Introduccion a la POOLibertad25
 

Similar a Como ser mas productivo en el desarrollo de aplicaciones (20)

UML - Lenguaje de Modelamiento Unificado
UML - Lenguaje de Modelamiento UnificadoUML - Lenguaje de Modelamiento Unificado
UML - Lenguaje de Modelamiento Unificado
 
Presentacion de-uml-formato-2-1227891304393749-8
Presentacion de-uml-formato-2-1227891304393749-8Presentacion de-uml-formato-2-1227891304393749-8
Presentacion de-uml-formato-2-1227891304393749-8
 
Patrones de diseño - Andrés Dorado
Patrones de diseño - Andrés DoradoPatrones de diseño - Andrés Dorado
Patrones de diseño - Andrés Dorado
 
Analisis Y DiseñO Orientado Objetos
Analisis Y DiseñO Orientado ObjetosAnalisis Y DiseñO Orientado Objetos
Analisis Y DiseñO Orientado Objetos
 
Fundamentos De ProgramacióN Unidad 1
Fundamentos De ProgramacióN Unidad 1Fundamentos De ProgramacióN Unidad 1
Fundamentos De ProgramacióN Unidad 1
 
Paradigma orientado a objetos,
Paradigma orientado a objetos,Paradigma orientado a objetos,
Paradigma orientado a objetos,
 
Presentación2
Presentación2Presentación2
Presentación2
 
Transparencias_Patrones.ppt
Transparencias_Patrones.pptTransparencias_Patrones.ppt
Transparencias_Patrones.ppt
 
C:\Documents And Settings\Uleam\Mis Documentos\Exp Sonia Y Nilda
C:\Documents And Settings\Uleam\Mis Documentos\Exp  Sonia Y NildaC:\Documents And Settings\Uleam\Mis Documentos\Exp  Sonia Y Nilda
C:\Documents And Settings\Uleam\Mis Documentos\Exp Sonia Y Nilda
 
Tema nº 1
Tema nº 1Tema nº 1
Tema nº 1
 
Tema nº 1
Tema nº 1Tema nº 1
Tema nº 1
 
Tecnología Orientada A Objetos
Tecnología Orientada A ObjetosTecnología Orientada A Objetos
Tecnología Orientada A Objetos
 
Presentación2
Presentación2Presentación2
Presentación2
 
1 Paradigma Objetos
1 Paradigma Objetos1 Paradigma Objetos
1 Paradigma Objetos
 
Ingeniería de software y el paradigma orientado a objetos
Ingeniería de software y el paradigma orientado a objetosIngeniería de software y el paradigma orientado a objetos
Ingeniería de software y el paradigma orientado a objetos
 
chuy
chuy chuy
chuy
 
Deber analisis
Deber analisisDeber analisis
Deber analisis
 
Poo
PooPoo
Poo
 
Programacion Orientada a Objetos IE
Programacion Orientada a Objetos IEProgramacion Orientada a Objetos IE
Programacion Orientada a Objetos IE
 
Introduccion a la POO
Introduccion a la POOIntroduccion a la POO
Introduccion a la POO
 

Más de Micael Gallego

Software libre para videoconferencias
Software libre para videoconferenciasSoftware libre para videoconferencias
Software libre para videoconferenciasMicael Gallego
 
La evaluación con realimentación y posibilidad de recuperación para evitar el...
La evaluación con realimentación y posibilidad de recuperación para evitar el...La evaluación con realimentación y posibilidad de recuperación para evitar el...
La evaluación con realimentación y posibilidad de recuperación para evitar el...Micael Gallego
 
WebRTC en tu web con OpenVidu
WebRTC en tu web con OpenViduWebRTC en tu web con OpenVidu
WebRTC en tu web con OpenViduMicael Gallego
 
Curso Angular 9 - CodeURJC - Marzo 2020
Curso Angular 9 - CodeURJC - Marzo 2020Curso Angular 9 - CodeURJC - Marzo 2020
Curso Angular 9 - CodeURJC - Marzo 2020Micael Gallego
 
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...Micael Gallego
 
Dev Tools para Kubernetes - Codemotion 2019
Dev Tools para Kubernetes - Codemotion 2019Dev Tools para Kubernetes - Codemotion 2019
Dev Tools para Kubernetes - Codemotion 2019Micael Gallego
 
Testing cloud and kubernetes applications - ElasTest
Testing cloud and kubernetes applications - ElasTestTesting cloud and kubernetes applications - ElasTest
Testing cloud and kubernetes applications - ElasTestMicael Gallego
 
Curso Kubernetes CodeURJC
Curso Kubernetes CodeURJCCurso Kubernetes CodeURJC
Curso Kubernetes CodeURJCMicael Gallego
 
Testeando aplicaciones Kubernetes: escalabilidad y tolerancia a fallos
Testeando aplicaciones Kubernetes: escalabilidad y tolerancia a fallosTesteando aplicaciones Kubernetes: escalabilidad y tolerancia a fallos
Testeando aplicaciones Kubernetes: escalabilidad y tolerancia a fallosMicael Gallego
 
OpenVidu Commitconf 2018
OpenVidu Commitconf 2018 OpenVidu Commitconf 2018
OpenVidu Commitconf 2018 Micael Gallego
 
Introducción a las Pruebas Software
Introducción a las Pruebas SoftwareIntroducción a las Pruebas Software
Introducción a las Pruebas SoftwareMicael Gallego
 
Node para Javeros: Conoce a tu enemigo
Node para Javeros: Conoce a tu enemigoNode para Javeros: Conoce a tu enemigo
Node para Javeros: Conoce a tu enemigoMicael Gallego
 
Testing fácil con Docker: Gestiona dependencias y unifica entornos
Testing fácil con Docker: Gestiona dependencias y unifica entornosTesting fácil con Docker: Gestiona dependencias y unifica entornos
Testing fácil con Docker: Gestiona dependencias y unifica entornosMicael Gallego
 
Using Docker to build and test in your laptop and Jenkins
Using Docker to build and test in your laptop and JenkinsUsing Docker to build and test in your laptop and Jenkins
Using Docker to build and test in your laptop and JenkinsMicael Gallego
 
El Aprendizaje Basado en Proyectos y la Clase Invertida para acercar el mundo...
El Aprendizaje Basado en Proyectos y la Clase Invertida para acercar el mundo...El Aprendizaje Basado en Proyectos y la Clase Invertida para acercar el mundo...
El Aprendizaje Basado en Proyectos y la Clase Invertida para acercar el mundo...Micael Gallego
 
GRASP con PR para el SRFLP en el MAEB 2016
GRASP con PR para el SRFLP en el MAEB 2016GRASP con PR para el SRFLP en el MAEB 2016
GRASP con PR para el SRFLP en el MAEB 2016Micael Gallego
 
WebRTC y Kurento en el T3cgFest 2015
WebRTC y Kurento en el T3cgFest 2015WebRTC y Kurento en el T3cgFest 2015
WebRTC y Kurento en el T3cgFest 2015Micael Gallego
 
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?Micael Gallego
 
Tema 3: Despliegue de aplicaciones web (Desarrollo Aplicaciones Web)
Tema 3: Despliegue de aplicaciones web (Desarrollo Aplicaciones Web)Tema 3: Despliegue de aplicaciones web (Desarrollo Aplicaciones Web)
Tema 3: Despliegue de aplicaciones web (Desarrollo Aplicaciones Web)Micael Gallego
 

Más de Micael Gallego (19)

Software libre para videoconferencias
Software libre para videoconferenciasSoftware libre para videoconferencias
Software libre para videoconferencias
 
La evaluación con realimentación y posibilidad de recuperación para evitar el...
La evaluación con realimentación y posibilidad de recuperación para evitar el...La evaluación con realimentación y posibilidad de recuperación para evitar el...
La evaluación con realimentación y posibilidad de recuperación para evitar el...
 
WebRTC en tu web con OpenVidu
WebRTC en tu web con OpenViduWebRTC en tu web con OpenVidu
WebRTC en tu web con OpenVidu
 
Curso Angular 9 - CodeURJC - Marzo 2020
Curso Angular 9 - CodeURJC - Marzo 2020Curso Angular 9 - CodeURJC - Marzo 2020
Curso Angular 9 - CodeURJC - Marzo 2020
 
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
 
Dev Tools para Kubernetes - Codemotion 2019
Dev Tools para Kubernetes - Codemotion 2019Dev Tools para Kubernetes - Codemotion 2019
Dev Tools para Kubernetes - Codemotion 2019
 
Testing cloud and kubernetes applications - ElasTest
Testing cloud and kubernetes applications - ElasTestTesting cloud and kubernetes applications - ElasTest
Testing cloud and kubernetes applications - ElasTest
 
Curso Kubernetes CodeURJC
Curso Kubernetes CodeURJCCurso Kubernetes CodeURJC
Curso Kubernetes CodeURJC
 
Testeando aplicaciones Kubernetes: escalabilidad y tolerancia a fallos
Testeando aplicaciones Kubernetes: escalabilidad y tolerancia a fallosTesteando aplicaciones Kubernetes: escalabilidad y tolerancia a fallos
Testeando aplicaciones Kubernetes: escalabilidad y tolerancia a fallos
 
OpenVidu Commitconf 2018
OpenVidu Commitconf 2018 OpenVidu Commitconf 2018
OpenVidu Commitconf 2018
 
Introducción a las Pruebas Software
Introducción a las Pruebas SoftwareIntroducción a las Pruebas Software
Introducción a las Pruebas Software
 
Node para Javeros: Conoce a tu enemigo
Node para Javeros: Conoce a tu enemigoNode para Javeros: Conoce a tu enemigo
Node para Javeros: Conoce a tu enemigo
 
Testing fácil con Docker: Gestiona dependencias y unifica entornos
Testing fácil con Docker: Gestiona dependencias y unifica entornosTesting fácil con Docker: Gestiona dependencias y unifica entornos
Testing fácil con Docker: Gestiona dependencias y unifica entornos
 
Using Docker to build and test in your laptop and Jenkins
Using Docker to build and test in your laptop and JenkinsUsing Docker to build and test in your laptop and Jenkins
Using Docker to build and test in your laptop and Jenkins
 
El Aprendizaje Basado en Proyectos y la Clase Invertida para acercar el mundo...
El Aprendizaje Basado en Proyectos y la Clase Invertida para acercar el mundo...El Aprendizaje Basado en Proyectos y la Clase Invertida para acercar el mundo...
El Aprendizaje Basado en Proyectos y la Clase Invertida para acercar el mundo...
 
GRASP con PR para el SRFLP en el MAEB 2016
GRASP con PR para el SRFLP en el MAEB 2016GRASP con PR para el SRFLP en el MAEB 2016
GRASP con PR para el SRFLP en el MAEB 2016
 
WebRTC y Kurento en el T3cgFest 2015
WebRTC y Kurento en el T3cgFest 2015WebRTC y Kurento en el T3cgFest 2015
WebRTC y Kurento en el T3cgFest 2015
 
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?
 
Tema 3: Despliegue de aplicaciones web (Desarrollo Aplicaciones Web)
Tema 3: Despliegue de aplicaciones web (Desarrollo Aplicaciones Web)Tema 3: Despliegue de aplicaciones web (Desarrollo Aplicaciones Web)
Tema 3: Despliegue de aplicaciones web (Desarrollo Aplicaciones Web)
 

Como ser mas productivo en el desarrollo de aplicaciones

  • 1. ¿Cómo ser más productivo en el desarrollo de aplicaciones?
  • 2.  ¿Quiénes somos? (15m)  Introducción (10m)  Programa mejor  Patrones de Diseño (25m)  Mapeo Objeto Relacional (25m)  Organizate mejor  Metodologías de Desarrollo (45m)  ¿Qué herramientas te pueden ayudar? (85m)  Conclusiones (5m) ¿Cómo ser más productivo en el desarrollo de aplicaciones? 2
  • 3.  ¿Quiénes somos?  Introducción  Programa mejor  Patrones de Diseño  Mapeo Objeto Relacional  Organizate mejor  Metodologías de Desarrollo  ¿Qué herramientas te pueden ayudar?  Conclusiones ¿Cómo ser más productivo en el desarrollo de aplicaciones? 3
  • 4.  Laboratorio de Desarrollo de Software y Entornos de Desarrollo Integrados  Experimentamos con:  Personalizaciones de Eclipse (EclipseGavab)  Desarrollo web (Java, Drupal)  Procesos de desarrollo  Diseño de Algoritmos (Optsicom)  Orientación a Objetos  Herramientas educativas  Lenguajes de Programación  Creado oficialmente en Mayo 2010 (pero con mucha experiencia previa) http://sidelab.wordpress.com http://code.sidelab.es/
  • 5.  Co-directores / Ponentes Patxi Gortázar francisco.gortazar@urjc.es Doctor en Informática en 2007 Twitter: @fgortazar Micael Gallego micael.gallego@urjc.es Doctor en Informática en 2008 Twitter: @micael_gallego Blog: http://micaelgallego.blogspot.com
  • 6.  Profesores de asignaturas  Bases de Lenguajes de Programación (1º)  Lenguajes Informáticos (2º)  Seguridad Informática (5º)  Ampliación de Ingeniería del Software (3º)  Software Avanzado (3º)  Algoritmos Avanzados (Máster)  Optimización de Sistemas de Comunicación (Máster)  Arquitecturas Software para Sistemas Complejos (Máster)  Interfaces de Usuario (3º)  Procesadores de Lenguajes (4º)
  • 7.  PFCs Dirigidos  Más de 30 proyectos…  Plugins de Eclipse / Herramientas de desarrollo  Librerías gráficas  Reproductores de vídeo / transmisión vídeo móvil  Aplicaciones web con Drupal, Xwiki  Herramientas Educativas  Tecnologías  Java, SWT, Swing, GWT, JPA, JDBC, Java EE, REST, XML, Eclipse, VLC, Gstreamer, OpenCL, GridGain, Amazon, JNI, RMI, Excel, FreeChart, MySQL, Derby, SmartGWT, PHP, XULRunner, Crawling, Maven, Ant, Trac, Redmine, Bugzilla, Mylyn…
  • 8.  Colaboración con Empresas / Consultoría  Motorola: Sistemas escalables de monitorización de red  Solaiemes: Transmisión de vídeo en directo móvil / Internet  Lokku: Crawling de propiedades inmoviliarias  M2DA: Crawling de redes sociales  Ofimat: Tienda virtual con Drupal  TS Company: Sistema distribuido con múltiples clientes para la prescripción de programas de actividad física
  • 9.  ¿Quiénes somos?  Introducción  Programa mejor  Patrones de Diseño  Mapeo Objeto Relacional  Organizate mejor  Metodologías de Desarrollo  ¿Qué herramientas te pueden ayudar?  Conclusiones ¿Cómo ser más productivo en el desarrollo de aplicaciones? 9
  • 10.  Para ser productivo programando, hay que programar bien y usando las tecnologías adecuadas  Hay veces que todo es mucho más complicado si se hace bien, la productividad llega en el medio plazo si la aplicación tiene una buena arquitectura  Hay que estar siempre atento a las tecnologías disponibles (porque van cambiando) Introducción 10
  • 11.  ¿Quiénes somos?  Introducción  Programa mejor  Patrones de Diseño  Mapeo Objeto Relacional  Organizate mejor  Metodologías de Desarrollo  ¿Qué herramientas te pueden ayudar?  Conclusiones ¿Cómo ser más productivo en el desarrollo de aplicaciones? 11
  • 12.  Es una solución bien documentada que los expertos aplican para solucionar nuevos problemas porque han sido utilizadas con éxito en el pasado  Los expertos identifican partes de un problema que son similares a otros problemas que han encontrado anteriormente  Recuerdan la solución aplicada y la generalizan  Adaptan la solución general al contexto del problema actual ¿Qué es un patrón de diseño?
  • 13. 13
  • 14.  Son una forma estandarizada para representar soluciones generales de problemas que se encuentran comúnmente en el desarrollo de software orientado a objetos  Beneficios  Catálogos de patrones  Están documentados los pros y los contras de cada patrón. Se conocen las implicaciones de su aplicación  Proporcionan un vocabulario común entre desarrolladores ¿Qué es un patrón de diseño?
  • 15. ¿Qué es un patrón de diseño? 15
  • 16.  Los patrones suponen una evolución en la abstracción y reutilización en la programación  Abstracción  Resolución de problemas complejos dividiéndolos en otros más simples  Capacidad de ocultar detalles superfluos y centrarse en lo relevante para reducir la complejidad Abstracción y Reutilización
  • 17.  Reutilización  Posibilidad de usar de nuevo código ya desarrollado anteriormente  Formas de reutilización  Copiar y Pegar !!PELIGRO¡¡  Reutilización de algoritmos (búsquedas, ordenaciones, …)  Reutilización de funciones (métodos)  Reutilización de librerías o APIs (métodos, clases, …) Abstracción y Reutilización
  • 18.  Abstracción y Reutilización en Programación Orientada a Objetos  Abstracción funcional y de datos  La encapsulación implica mejor reutilización  La herencia permite formas de reutilización antes no posibles  Es posible desarrollar algoritmos de forma genérica y especializarlos creando clases hijas y redefiniendo o implementando ciertos métodos Abstracción y Reutilización
  • 19. Abstracción y Reutilización Tipo de Reutilización ¿Se puede aplicar de nuevo? ¿Qué se abstrae? Genericidad Fragmento de código Muy Pobre Nada Muy pobre Estructura de datos Buena Tipos de datos Moderada-Buena Funcional Buena Método Moderada-Buena Tipos Genéricos Buena Operación para tipo Buena Algoritmo Buena Fórmula Buena Clases (Interfaz, Polimorfismo, Clase abstracta) Buena Datos + Métodos Buena API (Librería) Buena Clases útiles Buena-Muy Buena Componente Buena Grupo de Clases Buena-Muy Buena Patrón de Diseño Excelente Solución a un problema Muy Buena
  • 20.  Existen cuatro grandes tipos de patrones de diseño  Patrones de Creación  Patrones de Comportamiento  Patrones Estructurales  Patrones de sistema Tipos de Patrones
  • 21.  Patrones de Creación  Facilitan y simplifican la creación de objetos  Permiten crear objetos sin definir la clase concreta, sólo la interfaz que debe implementar  Permiten reutilizar otros objetos en vez de crear nuevos debido a restricciones o eficiencia  Patrones de Comportamiento  Guían el flujo de control del sistema (para facilitar la eficiencia y facilitar el mantenimiento) Tipos de Patrones
  • 22.  Patrones Estructurales  Describen formas efectivas de partir y combinar los elementos de una aplicación  Permiten la comunicación de sistemas incompatibles, la introducción de simplificaciones que mejoren la independencia entre partes,…  Patrones de sistema  Se aplican a la arquitectura de la aplicación  Patrones más generales que los otros tipos Tipos de Patrones
  • 23.  Los patrones están especificados siguiendo un formulario o formato estándar:  Nombre  También conocido como – Otros nombres usuales  Propiedades  Tipo - Creación, Comportamiento, Estructural o De sistema  Nivel - Clase única, Componente (Grupo de clases), Arquitectónico (Coordina sistemas y subsistemas)  Propósito - ¿Para qué sirve?  Presentación – Problema que soluciona (con ejemplos)  Aplicabilidad – Cuando y por qué debería usarse ¿Cómo es un patrón?
  • 24.  …  Descripción – Que hace y como se comporta de forma detallada  Implementación - ¿Cómo implementarlo?  Ventajas e Inconvenientes  Variantes  Patrones Relacionados  Ejemplo ¿Cómo es un patrón?
  • 25.  Facilitan y simplifican la creación de objetos  Permiten crear objetos sin definir la clase concreta, sólo el interfaz que debe implementar  Permiten reutilizar otros objetos en vez de crear nuevos debido a restricciones o eficiencia Patrones de Creación
  • 26.  Singleton (Único)  Restringe la creación de un único objeto de una clase en todo el sistema y permite acceder a él  Factory Method (Método Factoría)  Define un método para la creación de objetos además del constructor  Builder (Constructor)  Simplifica la construcción de objetos complejos definiendo una clase cuya responsabilidad es crear objetos de otras clases Patrones de Creación
  • 27.  Abstract Factory (Fábrica Abstracta)  Permite crear objetos de un conjunto de clases relacionadas pero sin especificar la clase concreta, solo el interfaz  Prototype (Prototipo)  Define clases cuyos objetos pueden clonarse  Hay muchos mas… Patrones de Creación
  • 28.  Propiedades  Tipo: Creación, Nivel: Objeto  Propósito  Permite tener una única instancia de esta clase en el sistema, y permite que todas las clases tengan acceso a esa instancia Patrones de Creación Singleton (Único)
  • 29.  Introducción  Hay veces que se necesita esta funcionalidad  Por ejemplo: Un histórico de todas las acciones que realiza el usuario en la aplicación. Desde todas las clases se necesita usar el mismo objeto HistoryList  Se podría crear un único objeto y pasar ese objeto como parámetro a todos los demás objetos. Puede no saberse a priori quien va a necesitar el objeto y puede ser complejo estar pasándolo constantemente. Sólo con documentación se puede obligar a que nadie más cree un objeto HistoryList Patrones de Creación Singleton (Único)
  • 30.  Introducción…  Se podría crear el objeto al inicio y colocarlo en un atributo estático. Pero no se podría proporcionar ninguna información de inicialización justo cuando vaya a usarse y no se puede controlar quien accede al objeto Patrones de Creación Singleton (Único)
  • 31.  Aplicabilidad  Cuando se requiera una instancia de una clase y accesible globalmente  Descripción  Asegura crear como máximo una instancia de un objeto.  Ponga el constructor privado  Ponga un método público estático getInstance() que devuelva el objeto. Este método crea la instancia si no se ha creado todavía, la guarda como un atributo estático privado y la devuelve  Se puede crear el objeto directamente sobre el atributo estático Patrones de Creación Singleton (Único)
  • 32.  Implementación  Clase que tiene privado el constructor, mantiene una referencia estática al único objeto de la clase y proporciona un método estático getInstance() para que otras clases accedan al único objeto  El resto de la implementación es completamente normal Patrones de Creación Singleton (Único)
  • 33. Patrones de Creación Singleton (Único) import java.util.ArrayList; import java.util.Collections; import java.util.List; public class HistoryList { private List history = new ArrayList(); public HistoryList() { } public void addCommand(String command) { history.add(command); } public Object undoCommand() { return history.remove(history.size() - 1); } ... } Clase sin patrón singleton
  • 34. Patrones de Creación Singleton (Único) import java.util.ArrayList; import java.util.Collections; import java.util.List; public class HistoryList { private static HistoryList instance = new HistoryList(); private List history = new ArrayList(); private HistoryList() { } public static HistoryList getInstance() { return instance; } public void addCommand(String command) { history.add(command); } public Object undoCommand() { return history.remove(history.size() - 1); } ... } Clase con patrón singleton
  • 35.  Ventajas  La clase Singleton es la única que puede crear objetos de la clase, asegurando la unicidad  No se necesita pasar la referencia a todos los objetos que la necesiten, simplificando el desarrollo y haciendo la aplicación más mantenible  Inconvenientes  Puede tener problemas en aplicaciones con muchos hilos de ejecución y con una única instancia  Si en el sistema evoluciona y se necesitan más instancias de la clase, habría que cambiar todos los accesos a la clase Singleton Patrones de Creación Singleton (Único)
  • 36.  Variaciones del patrón  Mantener varias instancias que pueden ser obtenidas con versiones con parámetros del método getInstance(...)  Cuando existen múltiples instancias, pueden ser de clases hijas diferentes dependiendo de los parámetros Patrones de Creación Singleton (Único)
  • 37.  Patrones relacionados  Abstract Factory (Factoría Abstracta)  Builder (Constructor)  Prototype (Prototipo) Patrones de Creación Singleton (Único)
  • 38.  Patrón Singleton en la API de Java  Clase java.awt.Toolkit  Variación del patrón porque Toolkit es abstracta y la instancia devuelta es de una clase hija  El método es getDefaultToolkit()  Clase java.lang.Runtime  El método es getRuntime()  Clase java.text.DateFormat  Variación del patrón porque DateFormat es abstracta  Tiene varios métodos con varias instancias getDateInstance(), getDateInstance(int style), getDateTimeInstance(), … Patrones de Creación Singleton (Único)
  • 39.  Existen patrones específicos para diferentes tipos de aplicaciones Patrones de Diseño 39
  • 40.  Páginas con catálogos de patrones  http://en.wikipedia.org/wiki/Design_pattern_(comp uter_science)  http://www.vincehuston.org/dp/  http://www.oodesign.com/  http://sourcemaking.com/design_patterns Patrones de Diseño 40
  • 41.  ¿Quiénes somos?  Introducción  Programa mejor  Patrones de Diseño  Mapeo Objeto Relacional  Organizate mejor  Metodologías de Desarrollo  ¿Qué herramientas te pueden ayudar?  Conclusiones ¿Cómo ser más productivo en el desarrollo de aplicaciones? 41
  • 42.  Bases de datos (Database systems)  Son programas utilizados para almacenar información y permitir un acceso posterior a ella  Varios programas (servidor web, aplicación gráfica, …) pueden acceder a la información de forma concurrente a través de la red  La información está centralizada, actualizada y es más sencillo realizar actualizaciones y copias de seguridad  La información puede estar en forma de texto, números, ficheros, XML, etc...  Existen muchos tipos de bases de datos, pero las más usadas son las bases de datos relacionales Mapeo Objeto Relacional
  • 43. Mapeo Objeto Relacional  Base de datos relacionales  Existen muchos productos de bases de datos, comerciales y software libre  MySQL (Software Libre) – http://www.mysql.org  Derby (Software Libre) - http://db.apache.org/derby  Oracle (Comercial) - http://www.oracle.com  MS SQL Server (Comercial) - http://www.microsoft.com/sql
  • 44. Mapeo Objeto Relacional Bases de datos relacionales  Una base de datos relacional almacena la información en tablas* con filas y columnas (campo) idLibro titulo precio 1 Bambi 3 2 Batman 4 3 Spiderman 2 * A las tablas se las denominaba “relaciones”, de ahí el nombre de base de datos relacional Tabla Libros idAutor nombre nacionalidad 1 Antonio Español 2 Gerard Frances Tabla Autores idLibro idAutor 1 1 2 2 3 2 Tabla RelacionLibroAutor
  • 45. Mapeo Objeto Relacional Bases de datos relacionales  Una base de datos relacional almacena la información en tablas* con filas y columnas (campo) idLibro titulo precio 1 Bambi 3 2 Batman 4 3 Spiderman 2 * A las tablas se las denominaba “relaciones”, de ahí el nombre de base de datos relacional Tabla Libros idAutor nombre nacionalidad 1 Antonio Español 2 Gerard Frances Tabla Autores idLibro idAutor 1 1 2 2 3 2 Tabla RelacionLibroAutor La información se relaciona mediante identificadores (id)
  • 46.  SQL (Standard Query Language): Lenguaje de consulta estándar que permite:  Consulta de los datos seleccionando con diferentes criterios y realizando operaciones (medias, sumas, …)  Inserción, Actualización y borrado de la información  Creación, alteración y borrado de las tablas y sus campos  Gestión de usuarios y sus privilegios de acceso Mapeo Objeto Relacional Bases de datos relacionales
  • 47. Mapeo Objeto Relacional Bases de datos relacionales titulo precio Bambi 3 Batman 4 SELECT titulo, precio FROM Libros WHERE precio > 2 Conjunto de resultados (ResultSet) idLibro titulo precio 1 Bambi 3 2 Batman 4 3 Spiderman 2 Tabla Libros Situación en la base de datos Consulta
  • 48.  JOINS  Se pueden unir varias tablas en una consulta idLibro titulo precio 1 Bambi 3 2 Batman 4 3 Spiderman 2 Tabla Libros idAutor nombre nacionalidad 1 Antonio Español 2 Gerard Frances Tabla Autores idLibro idAutor 1 1 2 2 3 2 Tabla RelacionLibroAutor Mapeo Objeto Relacional Bases de datos relacionales
  • 49. titulo precio nombre Bambi 3 Antonio Batman 4 Gerard Spiderman 2 Gerard Mapeo Objeto Relacional Bases de datos relacionales  JOINS  Se pueden unir varias tablas en una consulta SELECT titulo, precio, nombre FROM Libros, Autores, RelacionLibroAutor WHERE Libros.idLibro = RelacionLibroAutor.idLibro AND Autores.idAutor = RelacionLibroAutor.idAutor
  • 50.  Almacenamos información en bases de datos relacionales  Pero en memoria la información es Orientada a Objetos y se usan estructuras de datos (Listas, Mapas..) Mapeo Objeto Relacional Orientación a Objetos y BBDD 50 Desajuste por Impedancia (Impedance Mismatch)
  • 51. 51 idAutor nombre nacionalidad 1 Antonio Español 2 Gerard Frances idLibro titulo precio 1 Bambi 3 2 Batman 4 3 Spiderman 2 Tabla Libros Tabla Autores idLibro idAutor 1 1 2 2 3 2 Tabla RelacionLibroAutor Memoria Persistencia
  • 52. 52 “La Persistencia de la Memoria” (1931), óleo del pintor Salvador Dalí
  • 53.  Hay que ajustar los datos de un paradigma orientado a objetos a un paradigma de base de datos relacional  Tipos primitivos ligeramente diferentes  ¿Cómo se representan las estructuras de datos en memoria en una base de datos?  Gestión de los datos ya cargados en memoria (caché)  ¿Cómo se representan en memoria resultados de consultas complejas que no devuelven “entidades”? Mapeo Objeto Relacional Desajuste por Impedancia 53
  • 54.  ¿Pero no había por ahí bases de datos orientadas a objetos?  Como las meigas… haberlas, haylas  Db4o, zope object database  Pero no son mainstream, sólo se utilizan en ciertos nichos particulares  En la mayoría de las ocasiones se usan las bases de datos relacionales  MySQL, MS SQL Server, Oracle, PostgreSQL, SQLite…  ¿Entonces tenemos que gestionar manualmente el desajuste por impedancia? Mapeo Objeto Relacional Desajuste por Impedancia 54
  • 55.  Object Relational Mapping (ORM)  Son frameworks / librerías que permiten convertir de objetos en memoria a tuplas en la base de datos de forma automática  La transformación (mapeo) es configurable porque normalmente hay diferentes alternativas con sus ventajas y desventajas  Gestionan tipos primitivos, estructuras de datos, herencia de clases, caché de objetos… Mapeo Objeto Relacional 55
  • 56.  ¿Qué fue primero, el huevo o la gallina?  ¿Generamos la BBDD desde las clases o generamos las clases desde la BBDD?  La mayoría de los sistemas permiten la generación en ambos sentidos Mapeo Objeto Relacional 56
  • 57.  Tecnologías  Hibernate para Java  NHibernate para .NET  Doctrine para PHP  Estándares para Java  JDO (en desuso)  JPA (Java Persistence API)  Hibernate  EclipseLink  OpenJPA de Apache Mapeo Objeto Relacional 57
  • 58. 58 Mapeo Objeto Relacional @Entity @Table(name="libros", schema = "sample") public class Libro implements Serializable { @Id private int idlibro; private int precio; private String titulo; @ManyToMany @JoinTable(schema="sample", name="relacionlibroautor", joinColumns=@JoinColumn(name="idLibro"), inverseJoinColumns=@JoinColumn(name="idAutor")) private Set<Autor> autoresCollection; private static final long serialVersionUID = 1L; public Libro() { super(); } //Getters and Setters.. }
  • 59.  Una vez creadas las clases simples (POJOs) y generada la base de datos, se utilizan los objetos y sus métodos como si fueran objetos Java normales Mapeo Objeto Relacional 59 public static void main(String[] args) { EntityManagerFactory factory; EntityManager manager; factory = Persistence.createEntityManagerFactory("PruebaJPA"); manager = factory.createEntityManager(); Query query = manager.createQuery( "select l from Libro l where l.precio >= 2"); List<Libro> libros = (List<Libro>) query.getResultList(); for (Libro libro : libros) { System.out.println(libro); } manager.close(); factory.close(); }
  • 60.  En la práctica no es todo tan bonito como parece  Cada ORM soporta sólo ciertas bases de datos  Hay veces que el ORM no verifica que las sentencias SQL que él mismo genera sean válidas (ojo con llamar a una tabla como una palabra reservada de SQL)  Los ORMs están especialmente diseñados para aplicaciones web, por la forma en la que gestionan la caché. Hay que tener especial cuidado en aplicaciones con GUI  Rendimiento, rendimiento, rendimiento… Si no se presta atención, la caída de rendimiento puede ser muy importante Mapeo Objeto Relacional 60 How to improve JPA performance 18x http://java-persistence-performance.blogspot.com/2011/06/how-to-improve-jpa-performance-by-1825.html
  • 61.  Si podemos generar la base de datos partiendo de modelo orientado a objetos, ¿por qué no generamos el resto de la aplicación? Mapeo Objeto Relacional 61 Desarrollo Dirigido por Modelos Model Driven Development
  • 62.  Creación de la aplicación completa (o casi) partiendo de la información que está en el modelo  El modelo puede estar en código (Java, C#,..) o en cualquier otro formato (XML- Schema, específico, IDL…)  Enfoques  Generación de código  Interpretar el modelo en tiempo de ejecución Mapeo Objeto Relacional Model Driven Development 62
  • 63.  Tecnologías en Java  EMF de Eclipse  MDR de NetBeans  AndroMDA  OpenMDX  openArchitectureWare (Xtext en Eclipse)  OpenXAVA (Español) Mapeo Objeto Relacional Model Driven Development 63
  • 64.  ¿Quiénes somos?  Introducción  Programa mejor  Patrones de Diseño  Mapeo Objeto Relacional  Organizate mejor  Metodologías de Desarrollo  ¿Qué herramientas te pueden ayudar?  Conclusiones ¿Cómo ser más productivo en el desarrollo de aplicaciones? 64
  • 65.  Introducción  ¿Qué es la Ingeniería del software?  ¿Qué es un proceso software?  Modelos de proceso de desarrollo  Conclusiones  Proceso Unificado de Desarrollo  Metodologías Ágiles Organizate Mejor Metodologías de Desarrollo 65
  • 66. ¿Qué es la Ingeniería software?  ¿Que es ingeniería?  Estudio y aplicación, por especialistas, de las diversas ramas de la tecnología.  Conjunto de teorías y de técnicas que permiten el aprovechamiento práctico del conocimiento científico.  Disciplina y profesión que aplica los conocimientos, métodos o instrumentos de la ciencia para diseñar, o desarrollar, o construir, u operar, o mantener: estructuras, máquinas, aparatos, dispositivos o procesos.
  • 67. ¿Qué es la Ingeniería software?  ¿Que es software?  Conjunto de programas, instrucciones y reglas informáticas para ejecutar ciertas tareas en una computadora.  ¿Que es un producto software?  Software son los programas, la documentación y la configuración de los datos asociados.
  • 68. ¿Qué es la Ingeniería software?  “La Ingeniería del Software es la disciplina de ingeniería encargada de todos los aspectos relacionados con la producción de software desde sus etapas más tempranas de la especificación del sistema hasta el mantenimiento del sistema tras su puesta en marcha.” Ingeniería del Software Ian Sommerville
  • 69. ¿Qué es la Ingeniería software?  ¿Que es el ciclo de vida del software?  Es una sucesión de etapas (procesos) por la que pasa el software en su desarrollo, desde que se concibe la idea hasta que el software deja de utilizarse  Cada etapa lleva asociada una serie de actividades y tareas que se deben realizar  La salida de una etapa, es la entrada de la siguiente
  • 70.  Introducción  ¿Qué es la Ingeniería del software?  ¿Qué es un proceso software?  Modelos de proceso de desarrollo  Conclusiones  Proceso Unificado de Desarrollo  Metodologías Ágiles Organizate Mejor Metodologías de Desarrollo 70
  • 71. ¿Qué es un proceso software?  “Un proceso define quién está haciendo qué, cuándo, y cómo alcanzar un determinado objetivo. […] el objetivo es construir un producto software o mejorar uno existente” El proceso unificado de desarrollo software Ivar Jacobson, Grady Booch y James Rumbaugh
  • 72. ¿Qué es un proceso software?  ¿Que es un modelo de proceso?  Es una descripción simplificada de un proceso software:  Actividades  Productos  Roles  No se describen detalladamente, sólo se indican los aspectos generales de alto nivel
  • 73. ¿Qué es un proceso software?  Dependiendo del grado de detalle, a un modelo de proceso también se le conoce como:  Metodología de desarrollo de software  Modelo de desarrollo de software  Marco de desarrollo de software  Proceso de desarrollo de software  Enfoques de desarrollo de software  …
  • 74.  Introducción  ¿Qué es la Ingeniería del software?  ¿Qué es un proceso software?  Modelos de proceso de desarrollo  Conclusiones  Proceso Unificado de Desarrollo  Metodologías Ágiles Organizate Mejor Metodologías de Desarrollo 74
  • 75. Modelos de proceso  Modelos de proceso sin iteración  Cascada (1970)  Separa y distingue las fases de especificación y desarrollo  No se puede pasar a la siguiente fase hasta haber terminado la anterior  Si se detectan nuevos requisitos en la fase de pruebas, hay que comenzar la aplicación desde el principio  El término cascada hace referencia al coste que supone “volver atrás” en el proceso  Desarrollo formal  Un modelo matemático del sistema se transforma formalmente a una implementación
  • 77. Modelos de proceso  Cascada  Inconvenientes  Inflexibilidad  Difícil responder ante cambios en los requisitos  Sólo apropiado si los requisitos se comprenden muy bien y no hay posibilidad de que cambien  Esto no ocurre nunca, no refleja la realidad  Hasta la fase final no se obtiene el producto
  • 78. Modelos de proceso  Desarrollo formal
  • 79. Modelos de proceso  Desarrollo formal  Sistemas críticos donde la seguridad o la fiabilidad debe garantizarse antes de que el sistema se ponga en explotación  Inconvenientes  Se necesitan habilidades y el entrenamiento especializados para aplicar la técnica  Es difícil (o imposible) especificar formalmente algunos aspectos del sistema tales como la interfaz de usuario
  • 80. Modelos de proceso  Modelos de proceso con iteración  Incremental  En vez de entregar el sistema de una vez, tanto el desarrollo como las entregas se dividen en incrementos  En espiral  El proceso se representa como una espiral más que como una secuencia de actividades con vuelta hacia atrás
  • 81. Modelos de proceso  Incremental
  • 82. Modelos de proceso  Incremental  Propuesto por Mills en 1980  Los requisitos del usuario se priorizan y los requisitos de prioridad más alta se incluyen en los incrementos más tempranos  El proceso unificado de desarrollo es “iterativo e incremental” y define de forma más detallada las distintas fases, artefactos, roles…
  • 83. Modelos de proceso  Incremental  Ventajas  El primer incremento satisface los requisitos más críticos  Los servicios del sistema con la prioridad más alta tienden a ser los más probados  Los primero incrementos sirven como prototipo y ayudan en la tarea de detectar los posteriores requisitos  Desventajas  Puede ser difícil ajustar los requisitos a los incrementos
  • 85. Modelos de proceso  En espiral  Definición de los objetivos: Se identifican los objetivos de cada fase, las alternativas y las restricciones  Evaluación y reducción de riesgos: Se determinan los riesgos de cada fase y se ponen en marcha las actividades que reduzcan estos riesgos  Desarrollo y validación: Se elige el modelo de desarrollo más apropiado para el sistema de entre todos los modelos genéricos  Planificación: Se revisa el proyecto y, si se continúa, se planifica la siguiente fase (nueva vuelta a la espiral)
  • 86.  Introducción  ¿Qué es la Ingeniería del software?  ¿Qué es un proceso software?  Modelos de proceso de desarrollo  Conclusiones  Proceso Unificado de Desarrollo  Metodologías Ágiles Organizate Mejor Metodologías de Desarrollo 86
  • 87. Conclusiones  Un proceso de desarrollo define las actividades que hay que llevar a cabo durante el desarrollo de un sistema informático (desde la idea hasta la retirada del software)  Siempre hay que utilizar un proceso de desarrollo, más o menos detallado y rígido dependiendo del caso  Existen modelos de proceso genéricos y existen procesos de desarrollo concretos. Incluso existen procesos de desarrollo específicos para tipos de aplicaciones
  • 88.  Introducción  Proceso Unificado de Desarrollo  Creadores  Características del proceso unificado  Fases, iteraciones y actividades  Flujos de trabajo  Metodologías Ágiles Organizate Mejor Metodologías de Desarrollo 88
  • 90.  Introducción  Proceso Unificado de Desarrollo  Creadores  Características  Fases, iteraciones y actividades  Flujos de trabajo  Metodologías Ágiles Organizate Mejor Metodologías de Desarrollo 90
  • 91. Características  Unificación de tres metodologías de desarrollo basadas en el paradigma orientado a objetos  OOSE: Object Oriented Software Engineering (Casos de Uso) Jacobson, I.  Booch (Diseño) Booch, G.  OMT: Object Modeling Technique (Análisis) Rumbaugh, J.
  • 92. Características  Utiliza UML - Unified Modeling Language  Dirigido por casos de uso  Centrado en la arquitectura  Iterativo e incremental
  • 93. Características  Utiliza UML - Unified Modeling Language  Es el lenguaje (gráfico) utilizado para la construcción de modelos durante las fases del proceso  Ofrecen distintas perspectivas de una abstracción de la realidad  Un mismo elemento puede aparecer en distintos diagramas  En el modelo de un sistema no hay motivo para que aparezcan obligatoriamente todos los elementos.
  • 97. Características  Dirigido por casos de uso  Un caso de uso es una interacción del usuario con la aplicación que le proporciona un resultado útil  Los casos de uso capturan los requisitos funcionales  Se desarrollan y evolucionan junto a la arquitectura del sistema  Técnica desarrollada por Ivar Jacobson en 1986
  • 98. Características  Dirigido por casos de uso  Modelo de casos de uso  Conduce el proceso de desarrollo  Responde a la pregunta: ¿Que debe hacer el sistema para cada usuario? Diagrama de casos de uso
  • 99. Características  Centrado en la arquitectura  Muestra aspectos estructurales y dinámicos significativos  Dependiendo del tipo de aplicación, la arquitectura será de una forma u otra  Existen “estilos arquitectónicos” que muestran los principios generales de la arquitectura de la aplicación Casos de uso – Función Arquitectura – Forma
  • 100. Características  Iterativo e incremental  Modelo de ciclo de vida incremental  Una iteración produce un incremento  Incremento no siempre es aditivo  A veces se rehacen cosas con un mejor diseño para permitir que el sistema pueda crecer y adaptarse  La iteración trata un grupo de casos de uso que extienden la funcionalidad  En las primeras iteraciones se afrontan los riesgos más importantes
  • 101.  Introducción  Proceso Unificado de Desarrollo  Creadores  Características del proceso unificado  Fases, iteraciones y actividades  Flujos de trabajo  Metodologías Ágiles Organizate Mejor Metodologías de Desarrollo 101
  • 102. Fases, iteraciones y actividades
  • 103. Fases, iteraciones y actividades  Una fase es un intervalo de tiempo entre dos hitos importantes del proceso  Al finalizar una fase se producen productos  Las fases dividen el tiempo total de desarrollo de un proyecto y marcan las actividades que tienen que realizarse  Fases del PUD  Fase de inicio  Fase de elaboración  Fase de construcción  Fase de transición
  • 104. Fases, iteraciones y actividades  Dentro de cada fase hay varias iteraciones  Una iteración representa un ciclo de desarrollo completo  El énfasis en cada flujo de trabajo es diferente dependiendo de la fase en la que se encuentre la iteración
  • 105. Fases, iteraciones y actividades  Fase de inicio  El objetivo es desarrollar el análisis del negocio hasta justificar la puesta en marcha del proyecto  Delimitando el alcance  Esbozando una arquitectura  Mitigando los riesgos  Poner en marcha el proyecto
  • 106. Fases, iteraciones y actividades  Fase de inicio - Productos  Lista de características  Versión inicial del modelo de negocio  1ª versión del modelo de casos de uso, el modelo de análisis y el de diseño. Requisitos adicionales.  Descripción de arquitectura candidata  Prototipo exploratorio  Lista de riesgos y clasificación de casos de uso  Esbozo de plan del proyecto  Borrador del análisis del negocio
  • 107. Fases, iteraciones y actividades  Fase de inicio – Responde a ...  ¿Se ha determinado con claridad el ámbito del sistema?, ¿qué esta dentro del sistema y qué esta fuera?  ¿Hay acuerdo con todas las partes sobre la funcionalidad básica?  ¿Se vislumbra una arquitectura que implemente estas características?  ¿Se han identificado los riesgos críticos y una forma de mitigarlos?
  • 108. Fases, iteraciones y actividades  Fase de elaboración  Recopilar la mayor parte de los requisitos definiéndolos como casos de uso  Establecer una arquitectura sólida para guiar las fases posteriores  Continuar la observación y control de los riesgos críticos  Completar el plan de proyecto
  • 109. Fases, iteraciones y actividades  Fase de elaboración - Productos  Modelo completo del negocio  Nueva versión de los modelos  Línea base y descripción de la arquitectura  Lista de riesgos actualizada. Los críticos seguro que se pueden mitigar  Plan de proyecto para construcción y transición  Manual de usuario preliminar  Análisis del negocio incluida propuesta económica
  • 110. Fases, iteraciones y actividades  Fase de elaboración – Responde a ...  ¿Se ha creado una línea base de la arquitectura que sea adaptable, robusta y que pueda evolucionar a lo largo del ciclo de vida?  ¿Se han identificado y mitigado los riesgos graves, asegurando que no se trastocara el plan de proyecto?  Otras cuestiones sobre la inversión
  • 111. Fases, iteraciones y actividades  Fase de Construcción  Objetivo: versiones preliminares (prototipos) y versiones beta  Línea base de la arquitectura  Implementación de los casos de uso
  • 112. Fases, iteraciones y actividades  Fase de Construcción - Productos  Plan de proyecto para la fase de transición  Versión ejecutable  Modelos completos del sistema  Descripción de la arquitectura  Manual de usuario para guiar a los usuarios beta  Análisis del negocio
  • 113. Fases, iteraciones y actividades  Fase de Construcción – Responde a ...  ¿El producto ha alcanzado un nivel de capacidad adecuada para su operación inicial en el entorno del usuario, en particular para realizar las pruebas beta?  Tenemos linea base de la arquitectura, lista de riesgos, plan de proyecto y recursos, por lo tanto construimos el producto.  Seguirán apareciendo problemas, pero se superaran día a día.
  • 114. Fases, iteraciones y actividades  Fase de Transición  Cumplir requisitos  Gestionar todos los aspectos de despliegue e implantación  Pruebas de aceptación  Incidencias:  Riesgos inesperados  Problemas no resueltos  Fallos  Lagunas y ambigüedades en la documentación
  • 115. Fases, iteraciones y actividades  Fase de Transición - Productos  Software ejecutable, incluyendo instalación  Contratos, licencias, garantías  Todos los modelos del sistema  Arquitectura  Manuales y material de formación  Referencias para la ayuda del cliente
  • 116. Fases, iteraciones y actividades  Fase de Transición – Responde a ...  ¿Es el producto capaz de operar con éxito en entornos de usuario típicos?  Después de la construcción hay que realizar pruebas beta, de aceptación, corrección de problemas y defectos que surjan en el entorno de trabajo  Cuando los usuario estén satisfechos, distribuiremos el producto
  • 117.  Introducción  Proceso Unificado de Desarrollo  Creadores  Características del proceso unificado  Fases, iteraciones y actividades  Flujos de trabajo  Metodologías Ágiles Organizate Mejor Metodologías de Desarrollo 117
  • 119. Flujos de trabajo  Flujos de trabajo fundamentales  Requisitos  Análisis  Diseño  Implementación  Pruebas
  • 120. Flujos de trabajo  Requisitos  La captura de requisitos es complicada  Creamos código para otros  Los usuarios no los conocen y les cuesta especificarlos de forma precisa  Suelen ser varios usuarios sin una visión global  Los requisitos cambian  Las condiciones en las que se especifico un requisito varían  Objetivo: guiar el desarrollo hacia el sistema correcto
  • 121. Flujos de trabajo  Análisis  Se trabaja con conceptos  Especificación más precisa de los requisitos  Se utiliza un lenguaje orientado a objetos conceptual  Facilita comprensión, preparación, modificación y mantenimiento de requisitos  Primera aproximación al modelo de diseño
  • 122. Flujos de trabajo  Diseño  Se modela el sistema para que de soporte a los requisitos funcionales y no funcionales  El diseño es un refinamiento del análisis  Es una descripción del sistema con un grado de detalle entre el Análisis (alto nivel) y la implementación (bajo nivel)
  • 123. Flujos de trabajo  Diseño  Propósitos  Profundizar en la requisitos no funcionales y restricciones dependientes de la plataforma  Crear una entrada apropiada para la implementación  Descomponer los trabajos de implementación en partes mas manejables y que permitan concurrencia  Es el centro de atención final de la fase de elaboración e iteraciones iniciales de la fase de construcción
  • 124. Flujos de trabajo  Implementación  Se implementa el sistema en términos de componentes: ficheros de código fuente, scripts, ficheros de código binarios, ejecutables y similares  Objetivos  Distribuir el sistema asignando componentes ejecutables a nodos en el diagrama de despliegue  Implementar las clases y subsistemas encontrados durante el diseño  Probar los componentes individualmente e integrarlos
  • 125. Flujos de trabajo  Pruebas  Verificamos el resultado de la implementación probando cada construcción  Objetivos de la prueba  Planificar las pruebas necesarias para cada iteración (pruebas de sistema y pruebas de integración)  Diseñar e implementar las pruebas con casos de prueba
  • 126.  Introducción  Proceso Unificado de Desarrollo  Metodologías Ágiles  Metodologías tradicionales vs ágiles  ¿Que es una metodología ágil?  Manifiesto de las MAs  Programación Extrema (XP)  Scrum  Conclusiones Organizate Mejor Metodologías de Desarrollo 126
  • 127. Metodologías tradicionales vs ágiles  “son tratadas principalmente como una ficción necesaria para presentar una imagen de control o para proveer un estatus simbólico.” - Nandhakumar & Avison 1999  Es posible que los métodos tradicionales sean “meramente ideales inalcanzables e hipotéticos que proveen una guía normativa a situaciones de desarrollo utópicas.” - Truex et al. 2000
  • 128. Metodologías tradicionales vs ágiles  “lo que es nuevo en los procesos ágiles no son las prácticas que usan, sino que reconozcan a las personas como primeros implicados en el éxito de un proyecto, además de un intenso foco en la efectividad y la manejabilidad. Esto genera una nueva combinación de valores y principios que definen una visión ágil del mundo.” - Highsmith & Cockburn 2001
  • 129. Metodologías tradicionales vs ágiles  “Una sola metodología no puede funcionar para todo el espectro de proyectos, en vez de eso el administrador de cada proyecto debería identificar la naturaleza especifica de cada proyecto y seleccionar la mejor metodología de desarrollo aplicable.” - Hawrysh & Ruprecht 2000  “Hay una necesidad de ambos métodos [ágiles y orientados a procesos] ya que no hay un modelo de desarrollo que se ajuste a todos los propósitos imaginables.” - McCauley 2001
  • 130.  Introducción  Proceso Unificado de Desarrollo  Metodologías Ágiles  Metodologías tradicionales vs ágiles  ¿Que es una metodología ágil?  Manifiesto de las MAs  Programación Extrema (XP)  Scrum  Conclusiones Organizate Mejor Metodologías de Desarrollo 130
  • 131. ¿Que es una metodología ágil?  Las Metodologías Ágiles (MAs) valoran:  Al individuo y las interacciones en el equipo de desarrollo más que a las actividades y las herramientas  Desarrollar software que funciona más que conseguir una documentación exhaustiva Minimalismo respecto del modelado y la documentación del sistema  La colaboración con el cliente más que la negociación de un contrato  Responder a los cambios más que seguir estrictamente una planificación
  • 132. ¿Que es una metodología ágil?  ¿Por qué surgen las metodologías ágiles?  Dificultades para implantar metodologías tradicionales. Procesos ceremoniosos, herramientas CASE y notaciones de modelado sofisticadas (UML)  Una solución a medida para un segmento importante de proyectos de desarrollo de software  Pugna entre comunidades/gurús
  • 133. ¿Que es una metodología ágil? Metodología Ágil • Pocos Artefactos. El modelado es prescindible, modelos desechables. • Pocos Roles, más genéricos y flexibles. • No existe un contrato tradicional, debe ser bastante flexible. • El cliente es parte del equipo de desarrollo (además in-situ). • Orientada a proyectos pequeños. Corta duración (o entregas frecuentes), equipos pequeños (< 10 integrantes) y trabajando en el mismo sitio. • Énfasis en los aspectos humanos: el individuo y el trabajo en equipo. • La arquitectura se va definiendo y mejorando a lo largo del proyecto. • Basadas en heurísticas provenientes de prácticas de producción de código Metodología Tradicional • Más Artefactos. El modelado es esencial, mantenimiento de modelos. • Más Roles, más específicos. • Existe un contrato prefijado. • El cliente interactúa con el equipo de desarrollo mediante reuniones. • Aplicables a proyectos de cualquier tamaño, pero suelen ser especialmente efectivas/usadas en proyectos grandes y con equipos posiblemente dispersos. • Énfasis en la definición del proceso: roles, actividades y artefactos. • Se promueve que la arquitectura se defina tempranamente en el proyecto. • Basadas en normas provenientes de estándares seguidos por el entorno de desarrollo
  • 134. ¿Que es una metodología ágil?  El desarrollo de software es:  Incremental  liberaciones pequeñas y ciclos rápidos.  Cooperativo  clientes y desarrolladores trabajando juntos.  Simple y directo  el método es fácil de aprender y modificar.  Adaptativo  es posible realizar cambios de último momento.
  • 135.  Introducción  Proceso Unificado de Desarrollo  Metodologías Ágiles  Metodologías tradicionales vs ágiles  ¿Que es una metodología ágil?  Manifiesto de las MAs  Programación Extrema (XP)  Scrum  Conclusiones Organizate Mejor Metodologías de Desarrollo 135
  • 136. Manifiesto de las MAs  Principios: 1. La prioridad principal es satisfacer al cliente mediante tempranas y continuas entregas de software que le reporte un valor. 2. Dar la bienvenida a los cambios. Los MAs capturan los cambios para que el cliente tenga una ventaja competitiva. 3. Entregar frecuentemente software que funcione, desde un par de semanas a un par de meses, con el menor intervalo de tiempo posible entre una entrega y la siguiente.
  • 137. Manifiesto de las MAs 4. La gente del negocio y los desarrolladores deben trabajar juntos a lo largo del proyecto. 5. Construir proyecto en torno a individuos motivados. Darles el entorno y el apoyo que necesitan y confiar en ellos para conseguir el trabajo. 6. El diálogo cara a cara es el método más eficiente y efectivo para comunicar información dentro de un equipo de desarrollo.
  • 138. Manifiesto de las MAs 7. El software que funciona es la medida principal de progreso. 8. Los procesos ágiles promueven un desarrollo sostenible. Los promotores, desarrolladores y usuarios deberían ser capaces de mantener una paz constante. 9. La atención continua a la calidad técnica y al buen diseño mejora la agilidad. 10. La simplicidad es esencial.
  • 139. Manifiesto de las MAs 11. Las mejores arquitecturas, requisitos y diseños surgen de los equipos organizados por sí mismos. 12. En intervalos regulares, el equipo reflexiona respecto de cómo llegar a ser más efectivo, y según esto ajusta su comportamiento.
  • 140.  Introducción  Proceso Unificado de Desarrollo  Metodologías Ágiles  Metodologías tradicionales vs ágiles  ¿Que es una metodología ágil?  Manifiesto de las MAs  Programación Extrema (XP)  Scrum  Conclusiones Organizate Mejor Metodologías de Desarrollo 140
  • 141. Programación Extrema  Creada por Kent Beck a raíz de su experiencia en el proyecto C3 en Chrysler.  Kent fue contratado para dirigir el proyecto.  Durante el proceso nació una nueva metodología: eXtreme Programming (XP).  En 1999 publica el libro Extreme Programming Explained: Embrace Change (1999)
  • 142. Programación Extrema  Valores  Comunicación  Construir sistemas software requiere comunicar los distintos requisitos a los desarrolladores  El objetivo de XP es que los desarrolladores compartan una visión del sistema que encaje con la visión que tienen los usuarios  Facilitar la comunicación cara a cara  Simplicidad  Diseño simple (no sobredimensionar para el futuro)  Documentación simple, código autodocumentado a través de los nombres de clases, métodos… (para que esté actualizada)  Programar para hoy no para mañana
  • 143. Programación Extrema  Valores  Retroalimentación (feedback)  Del sistema: realizando pruebas unitarias y de integración  Del cliente: Con las pruebas de aceptación el cliente puede observar el estado del sistema  Del equipo: Cada vez que el cliente indica una nueva funcionalidad el equipo puede estimar su coste  Valor (courage)  Para programar para hoy, sin miedo a la refactorización cuando sea necesaria  Para desechar código cuando sea necesario  Para programar en parejas sin pensar que es una pérdida de tiempo
  • 144. Programación Extrema  Prácticas  Proceso continuo  Integración continua > Actualizar el repositorio lo más rápido posible. Construir el proyecto a diario. Pasar los test unitarios, de integración y de rendimiento a diario.  Refactorizar > cambiar el código para mejorar la calidad  Entregas frecuentes para que se construya el sistema completamente cada vez y se eviten así problemas de integración
  • 145. Programación Extrema  Prácticas  Conocimiento compartido  Usar estándares > Reglas de estilo, librerías comunes, etc..  Código poseído por todos > Todos pueden programar/arreglar cualquier parte. Todos se preocupan de que todo el código esté bien  Diseño simple > KISS (Keep it Simple Stupid). Evitar la complejidad  Metáfora del sistema > Si todo el equipo conoce qué hace el sistema con una metáfora, es más sencilla la comunicación, la intuición, la documentación…
  • 146. Programación Extrema  Prácticas  Realimentación de grado fino (fine scale feedback)  Programación por pares (dos personas en el mismo ordenador: uno programa y el otro revisa y piensa)  Juego de la planificación (planificar cada iteración)  Desarrollo dirigido por pruebas > Codificar las pruebas primero  Equipo completo (Whole team). Cliente disponible  Bienestar del programador  Paz tangible. Sin horas extra, no mas de 40 horas semanales.  Eso quiere decir que todo va bien… que no hay “sorpresas”
  • 147.  Introducción  Proceso Unificado de Desarrollo  Metodologías Ágiles  Metodologías tradicionales vs ágiles  ¿Que es una metodología ágil?  Manifiesto de las MAs  Programación Extrema (XP)  Scrum  Conclusiones Organizate Mejor Metodologías de Desarrollo 147
  • 148. Scrum  Scrum es un término que proviene del rugby y hace referencia al trabajo del equipo como un todo  Fue diseñado originalmente para el desarrollo de productos en la industria  "The Knowledge Creating Company" Ikujiro Nonaka y Hirotaka Takeuchi. Universidad de Oxford (1995).  Posteriormente se adaptó para el desarrollo de software como un producto más  “Business object design and implementation” Jeff Sutherland Ken Schwaber. OOPSLA’95 (1995).
  • 149. Scrum
  • 150. Scrum  Características  Equipos auto-organizados  El producto progresa en una serie de sprints (iteraciones) que duran un mes  Los requisitos se encuentran en el product backlog reunidos en una lista  No contiene prácticas de ingeniería pre-descriptas  Utiliza reglas generales para crear un ambiente ágil para la liberación de los proyectos  Usado para proyectos complejos con requerimientos cambiantes  Basado en un control de proceso empírico
  • 151. Scrum  Los roles se dividen en dos, siguiendo la metáfora del cerdo y la gallina  Un cerdo y una gallina se encuentran en la calle. La gallina mira al cerdo y dice: "Hey, ¿por qué no abrimos un restaurante?" El cerdo mira a la gallina y le dice: "Buena idea, ¿cómo se llamaría el restaurante?" La gallina piensa un poco y contesta: "¿Por qué no lo llamamos "Huevos con jamón?" "Lo siento pero no", dice el cerdo, "Yo estaría comprometido pero tú solamente estarías involucrada".
  • 152. Scrum  Roles del núcleo (Core roles > Cerdo)  Propietario del productor (ProductOwner)  La voz del cliente en el proceso  Dirige el equipo desde la perspectiva de negocio  Facilitador (ScrumMaster)  Asegura que las reglas se cumplan, actúa como administrador  No es el líder del equipo.  Equipo (Team)  Equipo reducido encargado de entregar el producto  Se autogestiona y organiza
  • 153. Scrum  Roles accesorios (Gallina)  Usuarios  El software es escrito para ellos  Stakeholders (Clientes, Proveedores,...).  A quienes el proyecto les aportara un beneficio  Solo participan en las revisiones de los sprints  Manager  Establece el ambiente/entorno para el desarrollo
  • 154. Scrum  Reuniones en Scrum  Todo el trabajo es realizado en sprints (30 días).  Durante el sprint se realizan reuniones que constituyen la inspección empírica de la marcha del proyecto y permiten la adaptación del proceso en función de ésta
  • 155. Scrum  Reuniones –Diarias < 15 min.  Características  Puntualidad, si no, castigo  Todos bienvenidos pero solo los cerdos hablan  Mismo lugar y misma hora, todos de pie  Se debe responder a  ¿Qué has hecho en este proyecto desde el ultimo Daily sprint?  ¿Qué planeas hacer en el proyecto entre hoy y la próxima reunión diaria (daily scrum)?  ¿Qué impedimentos se te han presentado para lograr lo prometido en el sprint y proyecto?
  • 156. Scrum  Reuniones – Planificación del sprint  Características  Al inicio del sprint  Seleccionar qué trabajo se hará  Preparar, con el equipo completo, el sprint backlog que detalla el tiempo que tomara hacer el trabajo  Identificar y comunicar cuanto del trabajo es probable que se realice durante el actual sprint  Límite de 8 horas
  • 157. Scrum  Reuniones – Revisión del sprint  Características  Revisar el trabajo terminado y el no acabado  Presentar el trabajo completo a los stakeholders (prototipo)  El trabajo incompleto no puede ser mostrado  Límite de 4 horas
  • 158. Scrum  Reuniones – Retrospectiva del sprint  Características  Todos los miembros dejan sus impresiones del último sprint  Realizar mejora continua del proceso  Límite de 4 horas  Responde a:  ¿Qué fue bien en el ultimo sprint?  ¿Qué puede ser mejorado en el siguiente sprint?
  • 159.
  • 160.  Introducción  Proceso Unificado de Desarrollo  Metodologías Ágiles  Metodologías tradicionales vs ágiles  ¿Que es una metodología ágil?  Manifiesto de las MAs  Programación Extrema (XP)  Scrum  Conclusiones Organizate Mejor Metodologías de Desarrollo 160
  • 161. Conclusiones • Las metodologías ágiles surgen como una necesidad de aliviar los burocráticos procesos “impuestos” por las metodologías tradicionales • Reconocen que el desarrollo de software es un trabajo muy creativo y exploratorio y la planificación a largo plazo no suele ser efectiva • En vez de centrarse en el proceso de producción de software en fases, se centran en lo que el equipo de desarrollo está haciendo en cada iteración
  • 162. Conclusiones • En realidad no hay procesos completamente ágiles o completamente “tradicionales” • El grado de burocracia/documentación depende del proyecto y del tamaño del equipo de desarrollo • Se están desarrollando nuevas metodologías que incorporan lo mejor de ambos mundos: • Agile Unified Process (AUP) es la versión ágil del proceso unificado de desarrollo • Incorpora desarrollo guiado por pruebas y otras prácticas propias de las metodologías ágiles
  • 163.  ¿Quiénes somos?  Introducción  Programa mejor  Patrones de Diseño  Mapeo Objeto Relacional  Organizate mejor  Metodologías de Desarrollo  ¿Qué herramientas te pueden ayudar?  Conclusiones ¿Cómo ser más productivo en el desarrollo de aplicaciones? 163
  • 164.  El día a día del desarrollo software…  Solucionando problemas  Herramientas y Tecnologías para no desfallecer en el intento ¿Qué herramientas te pueden ayudar? 164
  • 165.  Compartición del código  Duplicación: en más de una máquina  Reutilización El día a día del desarrollo software… Programación 165
  • 166. 166 El día a día del desarrollo software… Gestión de tareas  Reuniones (informales)  Apuntar las tareas en papel  Asignar responsables  Compartición de la información
  • 167. 167 El día a día del desarrollo software… Documentación  Formato  Word  Bloc de notas  Ficheros entre el código  Compartición  Versiones
  • 168. 168 El día a día del desarrollo software… Versiones  Todo listo…  Código  Construcción  Instalador  Sitio de publicación  Descarga para cliente  Arquitecturas para las que funciona
  • 169. 169 El día a día del desarrollo software… Soporte  Cliente con problemas  Contacto  Versión del cliente  Correspondencia con el código  Grabación de la incidencia
  • 170. 170 El día a día del desarrollo software… Calidad  Comprobar que la aplicación implementa la funcionalidad requerida  Comprobar la calidad:  Código que no se ejecuta nunca  Reglas de estilo  …  Pruebas
  • 171. 171 El día a día del desarrollo software… Mantenimiento  Leyes del cambio continuo y de la complejidad creciente  Proyectos de larga duración  El equipo de desarrollo es dinámico (cambia):  Documentación  Decisiones
  • 172. 172 El día a día del desarrollo software… Seguridad  Permisos  Control de acceso  ¿quiénes?  ¿qué?
  • 173. 173 El día a día del desarrollo software… Visibilidad  Páginas web  Posicionamiento  Tutoriales/vídeos de la aplicación
  • 174. 174 El día a día del desarrollo software… Estimación  Estimar tiempos  Estimar costes
  • 175.  El día a día del desarrollo software…  Solucionando problemas  Herramientas y Tecnologías para no desfallecer en el intento ¿Qué herramientas te pueden ayudar? 175
  • 176.  Servidor para compartir el código  Preferiblemente versionado  Dropbox  Integración en el IDE  Permite saber cuándo alguien más ha tocado un fichero y cuáles son los cambios  Gestión de descarga y subida del código al servidor Solucionando Problemas Programación 176
  • 177. 177 Solucionando Problemas Gestión de tareas  Sistema de gestión de incidencias  Fecha de apertura  Responsable  Duración estimada  Detalles sobre la incidencia y la solución  Fecha de resolución
  • 178. 178 Solucionando Problemas Documentación  Wiki  Servidor  Edición colaborativa  Vía web  Versionada  Autoría
  • 179. 179 Solucionando Problemas Versiones  Construcción automática  Especificación clara de la versión  Nombre del artefacto  Semántica de numeración  Etiquetar el código correspondiente a la versión  Identificación unívoca  Recuperación rápida
  • 180. 180 Solucionando Problemas Soporte  No problem! Tenemos gestión de incidencias…
  • 181. 181 Solucionando Problemas Calidad  Análisis del código  Estilo  Código duplicado  Posibles errores  Pruebas  Unitarias  De integración  De interfaz  Automatizado
  • 182. 182 Solucionando Problemas Mantenimiento  Leyes del cambio continuo y de la complejidad creciente  Proyectos de larga duración  El equipo de desarrollo es dinámico (cambia):  Documentación  Decisiones
  • 183. 183 Solucionando Problemas Seguridad  Perfiles  Jefes de proyecto  Desarrolladores  Personal en pruebas  Pfcs  Alumnos  Políticas de acceso por perfil  Unificación en el acceso a las herramientas
  • 184. 184 Solucionando Problemas Visibilidad  Página web del proyecto  Enlaces para descargar la aplicación  Tutoriales/vídeos de la aplicación  Posicionamiento
  • 186.  El día a día del desarrollo software…  Solucionando problemas  Herramientas y Tecnologías para no desfallecer en el intento ¿Qué herramientas te pueden ayudar? 186
  • 187. 187 Herramientas y Tecnologías… Programación  Sistemas de control de versiones  Centralizados  Subversive  CVS  Distribuidos  Git  Mercurial  Integración en el IDE  Subversive/Subclipse  Egit  Hg
  • 188. 188 Herramientas y Tecnologías… Gestión de tareas  Sistemas  Trac  Redmine  Bugzilla  Atlassian Jira  Mantis  RememberTheMilk
  • 189. 189 Herramientas y Tecnologías… Gestión de tareas  Integración con el IDE  Eclipse Mylyn
  • 190. 190 Herramientas y Tecnologías… Documentación  Wiki  Integrados  Trac  Redmine  No integrados  XWiki  MediaWiki
  • 191. 191 Herramientas y Tecnologías… Versiones  Construcción automática  Ant  Maven  Especificación clara de la versión  Etiquetar el código Identificación unívoca  Instaladores  InstallShield  Launch4J  InstallJammer
  • 192. 192 Herramientas y Tecnologías… Soporte  No problem! Tenemos gestión de incidencias…  Trac  Redmine
  • 193. 193 Herramientas y Tecnologías… Calidad  Análisis del código  Checkstyle  PMD  FIndBugs  Sonar  Pruebas  JUnit  SWTBot, Squish  Automatizado  Maven  Hudson/Jenkins
  • 194. 194 Herramientas y Tecnologías… Mantenimiento  Se simplifica al utilizar de manera consistente las herramientas anteriores
  • 195. 195 Herramientas y Tecnologías… Seguridad  Gestión integral de acceso  Active Directory  OpenLDAP  Herramientas monoproyecto vs. multiproyecto  Sidelab Code Admin Tools
  • 199. 199 Herramientas y Tecnologías… Visibilidad  Página web del proyecto  Enlaces para descargar la aplicación  Tutoriales/vídeos de la aplicación  Posicionamiento  CMS  Drupal  Joomla
  • 201.  ¿Quiénes somos?  Introducción  Programa mejor  Patrones de Diseño  Mapeo Objeto Relacional  Organizate mejor  Metodologías de Desarrollo  ¿Qué herramientas te pueden ayudar?  Conclusiones ¿Cómo ser más productivo en el desarrollo de aplicaciones? 201
  • 202.  Para ser más productivo hay que programar mejor:  Encapsulación, Modularidad, Abstracción y Jerarquía  Patrones de Diseño Orientado a Objetos  Tecnologías de Desarrollo Dirigido por Modelos y ORMs  Para ser más productivo hay que organizarse* bien:  Utiliza procesos de desarrollo  Utiliza herramientas de gestión del proceso  Lleva los procesos al servidor:  Gestión de código, pruebas, construcción, calidad del código…  Centraliza el estado del proyecto Conclusiones 202 * Sobre todo si no trabajas solo