Ingeniera de Software Libre para Ambientes Mviles M
Ingeniería de Software Libre para Ambientes Móviles M. C. Juan Carlos Olivares Rojas Pátzcuaro, Michoacán, 29 de abril de 2014
Agenda Introducción Aplicación de Ingeniería de Software Cierre
Tecnología Móvil El mundo jamás se quedará quieto… Tecnología Disruptiva
Computación… Vivimos en la era Post-PC…
¿Qué es esto?
Drones https: //www. youtube. com/watch? v=a. Gqv. EE-oxk. A
Ambientes Móviles
¿Ambiente Móvil?
Ambientes Móviles Los dispositivos móviles son una extensión más de nosotros
Ambientes Móviles Dispositivos “Smart” e Interconectados Siempre
Cómputo Ubicuo
Cómputo en todo
Cómputo “Vestible”
Ambientes Dinámicos
Software is Eating the World
Tendencias Tecnológicas “En los próximos 10 años habrá muchos mas cambios que en los últimos 100 años” Bill Gates
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
Crecimiento de 2010 a 2020 Fuente: U. S. Bureau of Labor Statistics’ 2012 -2013 Occupational Outlook Handbook
Tendencias 2014 Gartner Web-Scale IT Smart Machines 3 D Printing The Era of Personal Cloud Software-Defined Anything
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
Tendencias Tecnológicas
Evolución de las Interfaces de Usuario
Innovación… 1999 Blackberry Pager 2000 Primer Smartphone En 2010 tenía el 43% del mercado… El año pasado (2013) solo el 4%
Adaptación
Agenda Introducción Aplicación de Ingeniería de Software Cierre
Ing. de Software • Herramientas Métodos • Procesos Enfoque de Calidad
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].
¿Cómo es nuestro Software?
Ing. de Software
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
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.
¿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
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 innovación. no están peleados con la
Problemática Casas Proyecto de Py. MES ARQUITECTURAS SIMPLES Rentable $ “Casas de Perros” Proyectos Escolares SIN ARQUITECTURA Poco $ Edificios Grandes Corporativos ARQUITECTURAS COMPLEJAS Mucho $$$$
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.
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
Malas Prácticas Ventanas Rotas “Código mutante” “Diseño roto”
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
Metodologías Diseño simple Tarjetas CRC Historias de Usuario Criterios de pruebas de aceptación Plan de Iteraciones Entregas de Software Incrementales Velocidad del Proyecto Medible Spikes Prototipos Planeación Diseño Refactoring Codificación Pruebas de Unidad Pruebas de Aceptación Programación en pares Integración Contínua
Consideraciones del Entorno
Herramientas Nativas Híbridas Web
Diseño El diseño no es cómo se ve… es como funciona Estructura de Datos Algoritmos Programas 9. Las estructuras de datos inteligentes y el código burdo funcionan mucho mejor que el caso inverso.
Pruebas de Software Mundo Real Validación Especificación Formal Verificación 8. Ley de Linus Código
Pruebas de Software Utilizar la nube. Usar datos de prueba reales. Utilizar dispositivos reales
Especificación Formal OCL (Lenguaje de Restricción de Objetos)
Mejores Prácticas Entornos de Desarrollo Integrados Control de Versiones Pruebas Automatizadas Documentación Funcional
Agilidad Documentación rápida
Modelado 13. “La perfección (en diseño) se alcanza cuando ya no hay nada que agregar, sino cuando ya no hay nada que quitar”.
Arquitecturas y Patrones Patrón Arquitectónico MVC (Modelo. Vista. Controlador) 2. Los buenos programadores saben que escribir. Los mejores, qué reescribir (y reutilizar).
Mejores Prácticas Diseño de la Experiencia del Usuario (UX) Utilización de Lenguajes de Modelado y especificaciones formales Código Limpio
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.
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
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
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
Agenda Introducción Aplicación de Ingeniería de Software Cierre
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.
Sistemas Conscientes del Contexto ¿Qué? WHAT ¿Donde? WHERE Realizar servicios solos Consciencia del dispositivo Realizar servicios coordinados ¿Quién? WHO ¿Cuándo? WHEN ¿Cómo? HOW
RETOS
LBS Sistemas Basados en Localización ¿Dónde estoy? ¿Qué está cerca de? ¿Cómo puedo ir a?
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
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
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!!!
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, …
¿Preguntas? jcolivares@itmorelia. edu. mx MSN: juancarlosolivares@hotmail. com /juancarlosolivaresrojas @jcolivares http: //dsc. itmorelia. edu. mx/~jcolivares
- Slides: 64