17. Estadísticos…
5,200 millones de teléfonos celulares por 6,900
millones de personas.
Más teléfonos móviles que cepillos de dientes.
1,000 millones de personas tienen Internet en casa
1,600 millones de personas tienen Internet en
dispositivos móviles
18. Crecimiento de 2010 a 2020
Fuente: U.S. Bureau of Labor Statistics’ 2012-2013 Occupational Outlook Handbook
20. Tendencias 2014 Gartner
Mobile Device Diversity and Management
(BYOD)
Mobile Apps and Applications
The Internet of Everything
Hybrid Cloud & IT as a Services Broker
Cloud/Client Architecture
27. Software
La suma total de los programas de cómputo,
procedimientos, reglas de documentación y datos
asociados que forman parte de las operaciones
de un sistema de cómputo [IEEE Computer
Society Press, 1993].
30. Software hoy en día
Mito: los
programadores de
ahora ya no
programan como los
de antes.
Herramientas más
fáciles y productivas
El software es cada
día más complejo
31. Negocio del Desarrollo de Software
80% Desarrollo de Software es para
mantenimiento.
90% del Desarrollo de Software es hecho a la
medida.
Por lo tanto se necesita de un código simple,
legible y bien diseñado para que en un futuro
pueda ser extensible.
32. ¿Por qué programamos Objetos?
Permite un mayor reuso
El reuso evita programar de más
Programando menos se cometen menos errores
Teniendo menos errores se logra calidad
33. Los modelos no tienen la culpa…
“Los culpables son los que los eligen sin saber
para qué… pensando en cumplir con la
certificación”
Los procesos no están peleados con la
innovación.
34. Problemática
“Casas de Perros”
Proyectos Escolares
SIN ARQUITECTURA
Poco $
Casas
Proyecto de PyMES
ARQUITECTURAS SIMPLES
Rentable $
Edificios
Grandes Corporativos
ARQUITECTURAS COMPLEJAS
Mucho $$$$
35. Ing. de Software para Ambientes
Móviles
Los bibliografía
especializada apenas
empieza a tratatar este
tópico.
Ya empieza a haber cursos
específicos del tema.
36. Ing. de Software Libre
Mucho del paradigma de
Desarrollo de Software
Libre se ha integrado a las
“mejores prácticas” de la
Ing. de Software
Tradicional
38. Malos Olores
BAD SMELL REFACTORING PROPUESTO
CODIGO DUPLICADO EXTRAER EL MÉTODO
SUBIR VARIABLES
SUSTITUIR EL ALGORITMO
MÉTODOS LARGOS EXTRAER EL MÉTODO
INTRODUCIR OBJETOS COMO PARÁMETROS
REEMPLAZAR EL MÉTODO CON UN OBJETO
MÉTODO
CLASES GRANDES EXTRAER CLASES
EXTRAER SUBCLASES
CARACTERÍSTICA DE LA “ENVIDIA” MOVER MÉTODO
CLASES “PEREZOSAS” COLAPSAR JERARQUÍAS
39. Metodologías
Historias de Usuario
Criterios de pruebas de aceptación
Plan de Iteraciones
Diseño simple
Tarjetas CRC
Spikes
Prototipos
Programación en paresPruebas de Unidad
Entregas de
Software
Incrementales
Velocidad del
Proyecto
Medible
Planeación Diseño
Pruebas
Pruebas de Aceptación
Codificación
Refactoring
Integración Contínua
42. Diseño
El diseño no es cómo se ve…
es como funciona
Algoritmos
Estructura de
Datos
Programas
9. Las estructuras de datos
inteligentes y el código burdo
funcionan mucho mejor que el
caso inverso.
50. Mejores Prácticas
Diseño de la Experiencia del Usuario (UX)
Utilización de Lenguajes de Modelado y
especificaciones formales
Código Limpio
51. Código Limpio
Tomar en consideración
todos los warnigs, de
preferencia tratarlos como
errores.
Codificar con propósito.
Realizar funciones que se
van a ocupar. No realizar
código de más.
52. Código Claro
¿qué hay de malo en el siguiente código?
for(int i=0; i<size(); i++)
a = (b+c) / i;
Eliminar evaluaciones innecesarias:
int tmp = b+c;
int s = size();
for(int i=0; i<s; i++)
a = tmp / i; 52
53. Código Claro
¿Que hay de malo en el siguiente código?
b = Math.abs(a) * c;
d = e / (Math.abs(a) + b);
Eliminar subexpresiones comunes:
int tmp = Math.abs(a);
b = tmp * c;
d = e / (tmp + b); 53
54. Código Claro
¿Qué hay de malo en el siguiente código?
for (int i=0; i <1000; i++)
a = obj.b * i;
Aprovechar las variables locales:
int localb = obj.b;
for (int i=0; i <1000; i++)
a = localb * i; 54
56. Retos
Sistemas Embebidos
Sistemas de Tiempo Real
Sistemas Distribuidos
Sensibles al Contexto
17. Un sistema de seguridad es tan seguro como
secreto. Cuídese de los secretos a medias.
60. Tópicos de Interés
Entornos de Desarrollos de Sw
(PSP/TCP/CMMI/COBIT/ITIL)
Desarrollo de Software Ágil (Metodologías de
Desarrollo Adaptativas)
Patrones de Análisis y Diseño
61. Tópicos de Interés
Reingeniería y Reuso de Software
Pruebas y Mantenimiento de Software
Seguridad en el Desarrollo de Software
Métricas y Estimación de Software
62. Conclusiones
El mercado de TI requiere profesionistas
competentes en el desarrollo de software para
ambientes dinámicos.
¿Estamos preparados para enfrentar los retos
tecnológicos?
La Ingeniería de Software es vital!!!
63. Conclusiones
Se ocupa adaptar el proceso de Desarrollo de
Software a cualquier tipo de ambiente.
Es importante innovar pero también es
importante documentar dichas mejoras.
Se ocupan de habilidades adicionales: lengua
extranjera, liderazgo, relaciones humanas, …