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óvilEl 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 GartnerWeb-Scale IT
Smart Machines
3D PrintingThe Era of Personal Cloud
Software-Defined Anything
Tendencias 2014 GartnerMobile Device Diversity and Management
(BYOD)Mobile Apps and Applications
The Internet of Everything
Hybrid Cloud & IT as a Services BrokerCloud/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
SoftwareLa 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íaMito: los programadores de ahora ya no programan como los de antes.
Herramientas más fáciles y productivasEl 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 no están peleados con la innovación.
Problemática
“Casas de Perros”Proyectos EscolaresSIN ARQUITECTURAPoco $
CasasProyecto de PyMESARQUITECTURAS SIMPLESRentable $
EdificiosGrandes CorporativosARQUITECTURAS COMPLEJASMucho $$$$
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 OloresBAD SMELL REFACTORING PROPUESTO
CODIGO DUPLICADO EXTRAER EL MÉTODOSUBIR VARIABLESSUSTITUIR EL ALGORITMO
MÉTODOS LARGOS EXTRAER EL MÉTODOINTRODUCIR OBJETOS COMO PARÁMETROSREEMPLAZAR EL MÉTODO CON UN OBJETO MÉTODO
CLASES GRANDES EXTRAER CLASESEXTRAER SUBCLASES
CARACTERÍSTICA DE LA “ENVIDIA” MOVER MÉTODO
CLASES “PEREZOSAS” COLAPSAR JERARQUÍAS
MetodologíasHistorias de Usuario Criterios de pruebas de aceptación Plan de Iteraciones
Diseño simpleTarjetas CRC
Spikes Prototipos
Programación en paresPruebas de Unidad
Entregas deSoftwareIncrementales
Velocidad delProyectoMedible
Planeación Diseño
Pruebas
Pruebas de Aceptación
Codificación
Refactoring
Integración Contínua
Consideraciones del Entorno
HerramientasNativas
Híbridas
Web
DiseñoEl diseño no es cómo se ve…
es como funciona
Algoritmos Estructura de Datos
Programas9. Las estructuras de datos inteligentes y el código burdo funcionan mucho mejor que el caso inverso.
Pruebas de Software
Especificación Formal
Código
Mundo Real
Validación
Verificación
8.Ley de Linus
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 PatronesPatrón
ArquitectónicoMVC (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
RetosSistemas 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.
Consciencia del
dispositivo
Consciencia del
dispositivo
Sistemas Conscientes del Contexto
¿Donde? WHERE¿Donde? WHERE
¿Quién? WHO¿Quién? WHO
Realizar servicios solosRealizar servicios solos
Realizar servicios coordinados
Realizar servicios coordinados
¿Cuándo? WHEN¿Cuándo? WHEN
¿Qué? WHAT¿Qué? WHAT
¿Cómo? HOW¿Cómo? HOW
RETO
S
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!!!
ConclusionesSe 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?
[email protected]: [email protected]
/juancarlosolivaresrojas@jcolivares
http://dsc.itmorelia.edu.mx/~jcolivares
Top Related