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=aGqvEE-oxkA
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 3D 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 PyMES 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
CLASES “PEREZOSAS”
COLAPSAR JERARQUÍAS
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
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) <<invariant>> numElements >= 0 HashTable <<precondition>> !containsKey(key) <<precondition>> containsKey(key) <<precondition>> containsKey(key)
numElements:int put(key,entry:Object) get(key):Object remove(key:Object) containsKey(key:Object):boolean size():int
<<postcondition>> get(key) == entry
<<postcondition>> !containsKey(key)
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 (ModeloVistaControlador) 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, â&#x20AC;Ś
多Preguntas? jcolivares@itmorelia.edu.mx MSN: juancarlosolivares@hotmail.com /juancarlosolivaresrojas @jcolivares http://dsc.itmorelia.edu.mx/~jcolivares