Ingenieria de Sofware Libre para Ambientes Moviles

64
Ingeniería de Software Libre para Ambientes Móviles M.C. Juan Carlos Olivares Rojas Pátzcuaro, Michoacán, 29 de abril de 2014

Transcript of Ingenieria de Sofware Libre para Ambientes Moviles

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íaMito: 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 no están peleados con la

innovación.

Problemática

“Casas de Perros”

Proyectos Escolares

SIN ARQUITECTURA

Poco $

Casas

Proyecto de PyMES

ARQUITECTURAS SIMPLES

Rentable $

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 OloresBAD 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íasHistorias 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

Consideraciones del Entorno

Herramientas

Nativas

Híbridas

Web

Diseño

El diseño no es cómo se ve…

es como funciona

AlgoritmosEstructura 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)

HashTable

put(key,entry:Object)get(key):Objectremove(key:Object)containsKey(key:Object):boolean

<<invariant>>numElements >= 0

<<precondition>>!containsKey(key)

<<precondition>>containsKey(key)

<<precondition>>containsKey(key)

<<postcondition>>get(key) == entry

<<postcondition>>!containsKey(key)

size():int

numElements:int

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.

Consciencia

del

dispositivo

Sistemas Conscientes del Contexto

¿Donde? WHERE

¿Quién? WHO

Realizar servicios solos

Realizar servicios coordinados

¿Cuándo? WHEN

¿Qué? WHAT

¿Cómo? HOW

RE

TO

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 profesionistascompetentes en el desarrollo de software paraambientes 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?

[email protected]

MSN: [email protected]

/juancarlosolivaresrojas

@jcolivares

http://dsc.itmorelia.edu.mx/~jcolivares