Buenas prácticas en el desarrollo de Software

Slides:



Advertisements
Presentaciones similares
EL PROCESO DE DESARROLLO DEL SOFTWARE
Advertisements

BizAgi - Business Agility
BizTalk Server 2006 & Test Driven Development Kabel Sistemas S.L.
Exceptions y Assertions Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones.
Curso de Java Capitulo 7: Continuación Poo Profesor:
Sistema de verificación de componentes software
Pruebas de Unidad y Refactorización
Herencia simple y multiple
Arquitectura CLARO-TECNOTREE
DSOO - María Eugenia Valencia
Aplicación del paradigma orientado a objetos
Preguntas tipo test (Tema I)
Administración de Procesos de Pruebas
Herramientas QA Morax.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA CINCO CONSOLE.
 El termino OO, significa que el software es organizado como una colección de objetos. Un objeto es un paquete de software que contiene datos y procedimientos.
Reingeniería del Software
Testing en eXtreme Programming Universidad de la República – Facultad de Ingeniería - InCo 30 de Mayo de 2006 [ Duración aproximada de la presentación:
Test Driven Development TDD
Test Driven Development
(c) P. Gomez-Gil, INAOE DISEÑO DE COMPONENTES DE SOFTWARE * NOTAS DEL CURSO Ingeniería de Software I DRA. MARIA DEL PILAR GÓMEZ GIL INAOEP.
CARRERA ING.DE SISTEMAS INTEGRANTE: DANIEL SORIA MURILLO DOCENTE: ING. ERVIN FLORES MATERIA: INGENIERIA DE SOFTWARE GESTION 2009.
Ingeniería de Software
Introducción a la POO • ¿Qué es la programación orientada a objets (POO)? – Un “paradigma” de programación – Una forma de pensar acerca de los problemas.
Ingenieria de software
Software Testing: “Tres enfoques para un mismo problema”
Material de apoyo Unidad 4 Estructura de datos
Software Testing Juan Carlos Olivares Rojas MSN:
ANALISIS Y DISEÑO DE SISTEMA Ing. Sanchez Castillo Eddye Arturo
Modelos de desarrollo de Software
INTRODUCCIÓN A JAVA. Índice ¿Qué es Java? La plataforma Java 2 La Máquina Virtual de Java Características principales ¿Qué ventajas tengo como desarrollador?
Ingeniería del Software
Programación Extrema Leonardo Ramírez Z.. Contenido Motivación ¿Qué es Programación Extrema? La filosofía detrás de la Programación Extrema El proceso.
Proyecto de Solución de Problemas con Programación
Ingeniería de Requerimiento
Metodología para la construcción de programas
Test-Driven Development Juan Carlos Olivares Rojas MSN:
INGENIERÍA DE SOFTWARE
Introducción a las pruebas del software.
1 Herencia en Java Agustín J. González Diseño y Programación Orientados a Objetos.
Herencia. Introducción La idea básica es poder crear clases basadas en clases ya existentes. Cuando heredamos de una clase existente, estamos re-usando.
Programación orientada a objetos Capítulo 12 Manejo de errores.
INTRODUCCIÓN A LA INGENIERÍA DEL SOFTWARE
VISIÓN GENERAL DE LA IS Con independencia del modelo de proceso hay tres fases genéricas: Fase de definición Fase de desarrollo Fase de mantenimiento Cada.
Code Smells Código que huele mal….
Pruebas y La Vida del Ciclo de Desarrollo del Software
Estructuras de Datos y Algoritmos Introducción. Texto Requerido: Carrano & Prichard: Data Abstraction and Problem Solving with Java; Walls and Mirrors,
Algoritmos y Programación III 9. Diseño micro y refactorización Carlos Fontela, 2006.
Reestructuración de Código M.C. Juan Carlos Olivares Rojas
Juan Carlos Olivares Rojas
INGENIERÍA DEL SOFTWARE GESTIÓN DE PROYECTOS
 Sara Isabel Osorio Alcaraz Ana Isabel Vallejo Grisales 10 Informática 1.
Terminología de proceso del software
TIPOS DE PRUEBAS DEL SOFTWARE
Introducción El Testing es una actividad compleja por múltiples motivos. Las aplicaciones de software en sí son cada vez más flexibles, con diversos propósitos,
Conalep Coacalco Algoritmos Recursivos
Colegio de Bachilleres Plantel 13 Xochimilco - Tepepan
Ciclo de Vida del Software
Ris2K Ingeniería del Software II Click to edit city and date.
Carolina Rangel Felipe Montaño Alexis García
DESARROLLO DE SOFTWARE Cuando se va desarrollar un software intervienen muchas personas como lo es el cliente quien es el que tiene el problema en su.
DISEÑO DE COMPONENTES Y DESARROLLO BASADO EN COMPONENTES
Proceso de desarrollo de Software
Bases de Datos y Sistemas de Gestión de Bases Relacionales.
6.6 Administración de defectos
Título de la Presentación Estado del arte sobre el testeo de software en las Pymes de Aragón 12 de Noviembre de 2015.
Bachillerato Ingeniería en Informática Fundamentos de Computación.
CICLO DE VIDA DE UN SOFTWARE. Es el conjunto de los programas de cómputo, procedimientos, reglas, documentación y datos asociados, que forman parte de.
VERIFICACIÓN Y VALIDACIÓN DE SISTEMAS 3.10 Fase de manejo de requerimientos 4.1 Modelado de pruebas en UML Ponente: ing. Alejandro tapia vazquez.
ALUMNO ALUMNO: DIEGO URES LEGAJO LEGAJO: La prueba unitaria es la herramienta para la Calidad Presentación Trabajo Final de Grado.
Transcripción de la presentación:

Buenas prácticas en el desarrollo de Software Jorge Manrubia Díez jorge_manrubia@yahoo.es www.hci.uniovi.es Diciembre 2004

Estamos aquí… Introducción Buenas prácticas de codificación Código sólido Tests unitarios Buenas actitudes de desarrollo Conclusiones

¿Qué son las buenas prácticas? Costumbres, hábitos, prácticas que utilizamos cuando desarrollamos SW Al alcance de todos No ligadas a tecnologías concretas ¿Cuál es su finalidad? Mejorar el desarrollo de software

Estamos aquí… Introducción Buenas prácticas de codificación Código sólido Tests unitarios Buenas actitudes de desarrollo Conclusiones

Código ofuscado Si nunca pensaríamos leer un titular como el siguiente…

Código ofuscado (II) Porque codificamos del siguiente modo: Fuente: New Language Features for Ease of Development in the Java 2 Platform, Standard Edition 1.5 http://java.sun.com/features/2003/05/bloch_qa.html

Código ofuscado (III) ¿Por ahorrar tiempo? El tiempo tecleando código es insignificante frente al tiempo depurando Buscamos un código fácil de leer Los nombres deben de ser descriptivos Se debe emplear tiempo Escogiendo buenos nombres Tecleándolos  Renombrando los existentes

“The candy machine interface” 61 65

Interfaces de los métodos Apliquemos esta metáfora a las interfaces que ofrecen las funciones/métodos Ejemplo: Función realloc() de ANSI C Cambia el tamaño del objeto apuntado por ptr al tamaño especificado por tamanyo Si ptr es un puntero nulo, la función realloc se comporta a igual que la función malloc para el tamaño especificado. Si el espacio no puede ser desadjudicado, el objeto apuntado por ptr no varía. Si tamanyo es cero y ptr no es nulo, el objeto al que apunta es liberado.

Interfaces de los métodos (II) Los métodos deben presentar un interfaz extremadamente nítido Debe poder entenderse, sin consultar su especificación Lo que el método hace Su Entrada/Salida

Interfaces de los métodos (III) Evitar parámetros que determinen el funcionamiento del método Mejor hacer varios métodos. Ejemplo (clase String de Java) Evitar códigos de error Usar excepciones Evitar que null: Sea un parámetro “con significado” Sea un retorno “con significado” (salvo excepciones)

Código factorizado

Estamos aquí… Introducción Buenas prácticas de codificación Código sólido Tests unitarios Buenas actitudes de desarrollo Conclusiones

Código sólido Es el código preparado para detectar errores No errores de usuario, sino errores que introducimos al programar Cuando programamos codificaremos: Lo que el programa tiene que hacer Código “extra” para detectar errores Un ejemplo:

Asertos Pero lo anterior no es práctico: asertos Un aserto es un mecanismo Que permite hacer asunciones sobre el funcionamiento de nuestro código Indican el error cuando no se validen Que puede activarse (desarrollo) y desactivarse (lanzamiento) El código de comprobación puede y debe ser tan complejo como sea necesario

Tipos de verificaciones Precondiciones Condiciones que debe cumplir el cliente para poder invocar un método Sun no recomienda el uso de asertos: excepciones de usuario específicas. Pero esto no es práctico. Invariantes Condiciones que deben validarse para considerar el estado del objeto como legal Postcondiciones Condiciones que deben cumplirse después de la invocación a un método Verifican que el método se ha comportado correctamente

Asertos en Java Usar sentencia assert (a partir de 1.4) Se habilita/deshabilita al ejecutar la aplicación Parámetro –ea de la VM Usar librería propia Permite sobrecargar los asertos para adaptarlos a las comprobaciones más habituales Referencias no nulas Cadenas no vacías

Estamos aquí… Introducción Buenas prácticas de codificación Código sólido Tests unitarios Buenas actitudes de desarrollo Conclusiones

Tests unitarios Un test unitario es un test que valida un módulo de un programa Valida que funcione como es de esperar El testing debe ser sistemático Pruebas “bajo demanda” Implican asumir la corrección de lo que no probemos (ceguera) No se pueden repetir (trabajo tirado a la basura) No tiene nada que ver con los asertos del código sólido Pero se complementan

Tests unitarios (II) Los tests unitarios Deben ser auto comprobables Deben ser almacenados Para crecer a la vez que nuestros componentes Para poder ser ejecutados en el futuro Veremos un sencillo ejemplo en Java con Junit Pero es mucho más importante la práctica en sí que la tecnología

Un ejemplo sencillo (I)

Un ejemplo sencillo (II)

Estamos aquí… Introducción Buenas prácticas de codificación Código sólido Tests unitarios Buenas actitudes de desarrollo Conclusiones

¿Cómo afrontar el cambio? Anticipándonos a él Desarrollo en cascada Abrazándolo Desarrollo iterativo Manteniendo el código en su estado más sencillo posible “Sencillo” distinto de “cutre” Se debe de volver continuamente sobre el código para mejorar su diseño: refactoring

Refactoring Refactoring es cambiar la estructura interna del código Mejorar su diseño Eliminar la duplicación Se presenta un catálogo de refactorings Replace error code with exception, Rename field, Extract interface... Pero más importante es adoptar la actitud Mejorar el código siempre que se detecte la necesidad

Composición mejor que herencia La herencia puede resultar tentadora como mecanismo de reutilización de código Pero la herencia define una relación “es-un” entre padre e hija La clase hija queda ligada a la clase padre: difícil combinar funcionalidades La composición es una aproximación más natural, por regla general Objetos que colaboran para lograr un fin

Estamos aquí… Introducción Buenas prácticas de codificación Código sólido Tests unitarios Buenas actitudes de desarrollo Conclusiones

Conclusiones Todo el tiempo empleado en escribir Código fácil de leer Código robusto Tests unitarios Mejoras sobre el código existente Lo ganaremos con creces en calidad y velocidad de desarrollo Las buenas prácticas están al alcance de cualquiera “I’m not an excellent programmer, I’m only a good programmer with excellent habits”

Referencias Writing solid code. Steve Maguire. Microsoft Press, 1993. Refactoring: improving the design of existing code. Martin Fowler. Addison Wesley, 1999. Extreme Programming explained: embrace change. Kent Beck. Addison Wesley Professional, 2000. JUnit www.junit.org Catálogo de buenas prácticas en Java http://www.javapractices.com/index.cjp

Buenas prácticas en el desarrollo de Software Fin de la presentación Jorge Manrubia Díez jorge_manrubia@yahoo.es www.hci.uniovi.es