Desarrollo de Software Sustentable

Page 1

Técnica, P rogreso de México

Desarrollo de Software Sustentable M.C. Juan Carlos Olivares Rojas

Sombrerete, Zacatecas, Octubre 2010


agENDA

• Introducción Software Sustentable • Problemática • Métodos sustentables • Azúcar Sintáctico • BDD • Conclusiones


Software Hoy en Día • Mito: programadores ahora ya programan como de antes.

los de no los

• Herramientas más fáciles y productivas • El software es cada día más complejo


Software de hoy

• ¿Si su software fuera un edificio, se parecería más a uno de la izquierda o de la derecha?


Software de Hoy en Día

• Aplicaciones como el edificio de la derecha padecen de malas prácticas en el desarrollo de software como: • “Código mutante” • “Diseño roto” • El código es antiguo y muy grande • Falta de planeación y documentación


Desarrollo de sw sustentable

• Sustentable: Sustainable, Sostenible. Engloba el concepto de medioambiente, sociedad y economía. La Tecnología es el factor mediador. • El Desarrollo de Software trata de ser una actividad 100% perfectible de mejora. En general es una actividad intelectual muy creativa. • ¿Cómo lograr que sea sustentable?


• Reducir

Software Sustentable

• Reusar • Reciclar • 80% Desarrollo de Software es para mantenimiento. Por lo tanto se necesita de un código simple, legible y bien diseñado para que en un futuro pueda ser extensible.


Reducción de software

• En el pasado las prioridades eran tener un código rápido, pequeño (ocupa poca memoria), optimizado, utilizando los algoritmos mas eficaces etc...

• Hoy en día, se debe tener un código y diseño minimalista. Lo importante es utilizar lo menos posible la computadora siempre y cuando está agilice notablemente el desempeño de las actividades realizadas.


Reuso de Software

• El reuso es una de las técnicas de resolución de problemas que más utilizamos los humanos. De hecho es lo primero que verifica nuestro cerebro. • El reuso en software nos ayuda a mejorar la producción y calidad del software al “no reinventar la rueda”. • Desafortunadamente no todo se puede reutilizar.


Reuso de Software

• La reutilización es la propiedad de utilizar conocimiento, procesos, metodologías o componentes de software ya existente para adaptarlo a una nueva necesidad, incrementando significativamente la calidad y productividad del desarrollo.

• Para que un objeto pueda ser reusable se necesita de un alto nivel de abstracción. Entre mayor es su nivel de abstracción, mayor es su nivel de reuso.


Reuso de software

• Refactoring (Reestructuración) es modificar el comportamiento interno (generalmente código fuente) sin modificar su comportamiento externo (apariencia, funcionalidad).

• El término se creó como analogía con la factorización de números y polinomios. Por ejemplo, x² − 1 puede ser factorizado como (x + 1)(x − 1).


Ejemplo de Refactoring

• Es correcto el siguiente modelo

• ¿Se puede mejorar?¿cómo?


Ejemplo de Refactoring

• Si. Subiendo el método a la clase padre

• ¿En qué casos no sería conveniente esta refactorización? • Cuando los métodos difieren en su implementación. ¿Pero aun así es mala?


Patrón de Diseño

• Par Problema-Solución. Mejores prácticas.

• Patrón Singletón • Problema: se admite exactamente una instancia de una clase. Los objetos necesitan un único punto de acceso global. • Solución: Defina un método estático de la clase que devuelva el Singleton


Singleton


Singleton

public class Singleton { private static Singleton INSTANCE = null; private Singleton() {} private synchronized static Singleton createInstance() { if (INSTANCE == null){ INSTANCE = new Singleton(); } return INSTANCE; }}


Patrón de Diseño de un Menú


Reciclaje de Software

• Es un concepto muy abstracto. En general no se puede utilizar las “materias primas” de un software.

• Generalmente se maneja a nivel de reuso de software o bien a nivel de reingeniería de software, donde una aplicación puede ser mejorada considerablemente a través de varios procesos como la ingeniería inversa así como ingeniería directa.


agENDA

• Introducción Software Sustentable • Problemática • Métodos sustentables: • Azúcar Sintáctico • BDD • Conclusiones


Problemática

• La principal desventaja del software es que es un proceso sociotecnologico que produce cosas abstractas. • La materialización de este producto se ve hasta que está finalizado.

• El desarrollo de software es una actividad consumidora de tiempo donde el 90% se trata de desarrollos a la medida.


Problemática Análisis Requerimientos Diseño del Sistema Diseño de Objetos Codificación

Pruebas

Instalación

Mantenimiento

Modelo Lineal/Cascada


Modelos de Ciclo de Vida Análisis de los Requerimientos Mantenimiento

Diseño del Sistema

Instalación

Diseño de Objetos

Pruebas

Codificacion

Realmente no es tan lineal


¿Por qué odiamos la Ing. Sw?

• Más tardado en planificar y modelar que en construir…

Puede hacerlo una sola persona Requiere: Modelado mínimo Proceso simple Herramientas simples $


¿Por qué odiamos la Ing. Sw?

• Cómo que ya vale la pena...

Construida eficientemente y en un tiempo razonable por un equipo Requiere: Modelado Proceso bien definido Herramientas más sofisticadas $$$


¿Por qué odiamos la Ing. Sw?

• No es que queramos, !Se tiene que hacer Ingeniería de Software!

No cualquier persona o grupo de persona lo realiza. Imposible sin técnicas de Ingeniería $$$$$$$$$$$$


agENDA

• Introducción Software Sustentable • Problemática • Métodos sustentables: • Azúcar Sintáctico • BDD • Conclusiones


Definiciรณn del Problema/Reto

โ ข Cada buen final requiere de un buen inicio


Planteamiento del problema/reto

• La parte más difícil de cualquier proyecto es la definición del mismo. Si se tiene definido el problema se dice que se tiene el 90% de la solución. • El planteamiento del problema surge del análisis y se refleja en el diseño. • Se debe tener una motivación extra para el desarrollo del software (metáforas, valores)


Modelos de Desarrollo

• ¿Qué camino seguiremos?


Modelos de Desarrollo

• Lo primero es plantearse una metodología a seguir.

• Esta metodología puede ser cualquiera. Lo más utilizado hoy en día son esquemas LeanAgile. • Lo importante como toda en la vida es la disciplina y la constancia. Una buena metodología nos ayuda a tener éxito.


AnĂĄlisis de Requerimientos

• El planteamiento es lo importante, no la velocidad


Análisis de Requerimientos

• Lo más difícil para plantear un problema de software son los requerimientos.

• Se sugiere utilizar técnicas de especificación de requerimientos como: casos de uso, historias de usuario, spikes entre otras. • Los requerimientos deben de ser encontrados, especificados, analizados y validados


• ¿Cómo debo de hacerlo?

Diseño del Software


Diseño del Software

• El diseño de software debe especificarse a través de modelos, de preferencia visuales como UML.

• Se pueden utilizar arquitecturas dirigidas por modelos para desarrollar software. • El diseño de software debe de estar libre de cualquier implementación.


Sistemas de Alta Integridad

• Sigamos un mÊtodo confiable y seguro


Software Seguro

• El desarrollo de software debe de hacerse a través de supervisión, no se trata de tirar líneas de código por tirar.

• El software de hoy debe de probarse para que esté libre de errores así como debe de garantizar las premisas básicas de seguridad: confidencialidad, integridad y disponibilidad.


Métodos formales

• Cálculos precisos, especificación matemática.


Métodos Formales

• Entre más formal sea nuestra especificación más claro será el validarlo. • EJEMPLO • Requerimiento: método de ordenamiento de forma ascendente.

• Entradas: dos arreglos de tamaño n: p y q, donde p es el arreglo original y q el resultado.


Especificación Formal

• Salida: q[o] <= q[1] <= q[2] … <= … q[n] • ¿cuál es el problema? • Es válido lo siguiente: public int [] ordenar(int p[]){ int q[] = new int [p.length]; for(int i=0; i<p.length; i++) q[i]=0; Return q;}


Administraciรณn de Proyectos

โ ข Una buena administraciรณn siempre nos llevarรก por el camino adecuado


Administración de proyectos

• La planeación es vital para el desarrollo de proyectos pero aun más es el proceso de organización, control y dirección (coaching). • La planeación se maneja de forma colaborativa como en el Poker Planning • La comunicación grupal es sumamente importante en los equipos de trabajo.


Planificación

GESTION DE PROYECTOS

PLANIFICACIÓ N

Planificación del tiempo (calendarización) Estimación de costos (esfuerzo)

• Propuesta • Planificación • Supervisión • Personal • Informal

Gestión de riesgos y control de calidad Gestión de la configuración de sw


Scrum taskboard


Planeaci贸n de actividades


Aseguramiento Calidad (SQA)

• Se debe tener un buen manejo de calidad


Calidad del Software

• La calidad del software debe de medirse no sólo por el número de defectos encontrados ni por el costo que ello implica sino estar más orientados a la satisfacción del cliente. • La calidad del software debe darse en el proceso para que el producto la tenga.


Ambientes de Desarrollo Sw

• Una buena herramienta de Sw no tiene precio‌


Herramientas de Desarrollo

• Actualmente se deben manejar herramientas integradas que permitan desarrollar todo el proceso.

• Las herramientas de software deben de ser explotadas de acuerdo a la capacitación de las personas. • La experiencia en el desarrollo de software es algo fundamental.


Mantenimiento y EvoluciĂłn

• El modelo de mantenimiento debe de ser preparado


Mantenimiento y Evolución

• El software de hoy debe de estructurarse para que el día de mañana sin ningún problema pueda crecer fácilmente.

• El software de hoy debe de satisfacer al cliente de mañana. • El software debe de arreglarse para que pueda trabajar de forma adecuada después de un tiempo de uso.


Mantener el Éxito

• Cada buen final requiere de un buen inicio…


agENDA

• Introducción Software Sustentable • Problemática • Métodos sustentables: • Azúcar Sintáctico • BDD • Conclusiones


Azúcar Sintáctico

• Es una facilidad dada por los desarrolladores del lenguaje para escribir menos. El ejemplo más sencillo es el operador ++, C++ es equivalente a C=C+1 • Ciclo for (implementación while) • IF como operador ternario ?: • Goto en java, etiquetas:


Azúcar sintáctico

public static void imprimir(String ... cadenas) { for (String cadena : cadenas) System.out.println(cadena); } }

• Boxing automático de Datos Primitivos a Objetos: Integer a int • Anotaciones: @deprecated • Arreglos Triangulares


Azúcar Sintáctico

• El manejo del recolector de basura sólo deberá hacerse cuando la aplicación sea muy compleja.

• Se deberán verificar los métodos finalizadores de los objetos. • Se deberá tener cuidado con estructuras de datos como String y char[] que consumen mucha memoria y tardan en ser liberada dicha memoria.


Azúcar Sintáctico

• El uso de objetos sincronizados hace más lento el desempeño de las aplicaciones. Si la aplicación no maneja concurrencia no hay necesidad de utilizarlas (en java Vector y ArrayList hacen exactamente lo mismo sólo que Vector es sincronizada). • El monitoreo de los recursos es parte fundamental del profiling.


Profile Testing

• El manejo cadenas constantes en Java por ejemplo String cad=“hola” es única a diferencia de cadenas creadas con el operador new.

• Se pueden utilizar reductores de clases como: DashO-Pro, Jax o Jsrink. Muchas de estas herramientas funcionan como ofuscadores al igual que SourceGuard.


agENDA

• Introducción Software Sustentable • Problemática • Métodos sustentables: • Azúcar Sintáctico • BDD • Conclusiones


Conceptos básicos

• FTDD (First-Test Driven Development) • TDD (Test Driven Development) • BDD (Behaviour Driven Development)

• El código se lee más de lo que se escribe, por eso es importante el uso de estilos de codificación • Utiliza sólo espacios en blanco o tabuladores al indentar.


• Utilizar un número máximo de caracteres 80 • Limitar el tamaño de nuestras unidades fundamentales de programación (métodos, funciones, servicios, etc.) a una pantalla de largo (25 líneas) • Design Thinking: pensar en lo que los usuarios quieren de innovación, después se ve la forma de cómo hacerlo.


Conceptos básicos

• BDD recomienda la siguiente estructura para los requerimientos (historias de usuario) – As a, – I want, – so that

• Los requerimientos son comportamientos: Given, When, Then


• Se recomienda utilizar “mocks” pruebas sintéticas • Se pueden utilizar frameworks específicos para BDD, por ejemplo en Java está la herramienta JBehave. • También se pueden utilizar las herramientas básicas de pruebas unitarias como JUnit.


Ejemplo

• Requerimiento 1: Nuevas Listas están vacías • Dada una nueva lista • Entonces la nueva lista debe de estar vacía.

• Requerimiento 2: Listas con elementos dentro no están vacías. • Dada una nueva lista • Cuando agregamos un objeto • Entonces la lista no debe de estar vacía


Ejemplo

• Nótese que los dos ejemplos describen el comportamiento del método isEmpty() del objeto lista.

• Nótese además de que lo que se está comprobando es el comportamiento externo de dicho método. Si se requiere comprobar el comportamiento interno (por ejemplo que se estén agregando en el formato adecuado los datos), se necesita crear otras pruebas.


public class ListTest { @Test public void shouldKnowWhetherItIsEmpty() { List list1 = new List(); assertTrue(list1.isEmpty()); //Test2 List list2 = new List(); list2.add(new Object()); assertFalse(list2.isEmpty()); }}

ejemplo


agENDA

• Introducción Software Sustentable • Problemática • Métodos sustentables: • Azúcar Sintáctico • BDD • Conclusiones


Conclusiones

• El desarrollo de software de hoy en día debe de ser sustentable

• La sustentabilidad va más haya de la calidad • Los desarrollos de software son hoy una necesidad en todas las empresas por lo que su desarrollo debe de ser integral: funcionales, costo-efectivos, satisfacción del cliente y sobre todo mantenibles.


• M.C. Juan Carlos Olivares Rojas • jcolivar@itmorelia.edu.mx

dudas

• MSN: juancarlosolivares@hotmail.com • @jcolivares • Skype: juancarlosolivares • http://antares.itmorelia.edu.mx/jcolivar


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.