introducción análisis y diseño
DESCRIPTION
Introducción análisis y diseñoTRANSCRIPT
![Page 1: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/1.jpg)
Análisis y Diseño de Software
Departamento de Ingeniería de Sistemas Telemáticoshttp://moodle.dit.upm.es
IntroducciónAnálisis y Diseño
Carlos A. Iglesias <[email protected]>
![Page 2: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/2.jpg)
Introducción. Diseño 2
Temario
● Ciclo de vida software● Análisis y Diseño Software● Técnicas OO de Diseño Descendente – Tarjetas CRC– Identificación de clases y métodos
● Técnicas de Diseño Ascendente– Refactorización y Patrones de Diseño
● Pruebas
![Page 3: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/3.jpg)
Introducción. Diseño 3
Teoría
Ejercicio práctico en el ordenador
Ampliación de conocimientos
Lectura / Vídeo / Podcast
Práctica libre / Experimentación
Leyenda
![Page 4: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/4.jpg)
Introducción. Diseño 4
Objetivos
● Entender el ciclo de vida del software● Conocer qué es el análisis y el diseño software● Aprender técnicas de diseño básicas● Aplicar estas técnicas en el desarrollo de un programa Java
![Page 5: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/5.jpg)
Introducción. Diseño 5
Ciclo de vida sofware
● SDLC – Software Development Life Cycle● Fases de desarrollo software
![Page 6: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/6.jpg)
Introducción. Diseño 6
Fases del ciclo de vida
![Page 7: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/7.jpg)
Introducción. Diseño 7
Secuenciación SDLC
● Clásico o en cascada (waterfall): fases sucesivas● Iterativo o espiral: cascada sucesiva● Ágil: énfasis en código de calidad, e ir haciendo mejoras en el código
![Page 8: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/8.jpg)
Introducción. Diseño 8
Análisis software
![Page 9: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/9.jpg)
Introducción. Diseño 9
Diseño software y programación
![Page 10: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/10.jpg)
Introducción. Diseño 10
Venta e Instalación en el cliente
![Page 11: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/11.jpg)
Introducción. Diseño 11
Operación y facturación
![Page 12: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/12.jpg)
Introducción. Diseño 12
Soporte
![Page 13: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/13.jpg)
Introducción. Diseño 13
SDLC
● ¿Qué diferencias ves entre una secuencia en cascada o en espiral? ●¿Qué contratarías? ●¿Qué seguirías si montas una startup?
![Page 14: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/14.jpg)
Introducción. Diseño 14
Análisis Software = QUÉ
● Determinar qué quiere realmente el usuario● Permitir valorar qué es importante y qué no de entre las cosas que pide
![Page 15: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/15.jpg)
Introducción. Diseño 15
Análisis
●¿Piensas que es difícil entender qué quiere un usuario? ¿Por qué?● ¿Qué sucede si le entendemos mal?
![Page 16: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/16.jpg)
Introducción. Diseño 16
Evaluación de alternativas● Viendo qué quiere el cliente, podemos:– Realizarlo nosotros (y
pasamos a diseño)– Subcontrarlo– Comprar un producto
(COTS, Commercial-Off-TheShelf Software)• Licencia o servicio en la
nube
![Page 17: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/17.jpg)
Introducción. Diseño 17
Evaluar alternativas
● ¿Qué criterios seguirías para diseñar, subcontratar o comprar un producto?● ¿Qué opción es la más habitual?
![Page 18: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/18.jpg)
Introducción. Diseño 18
Diseño Software = CÓMO
● Determinamos qué elementos SW (paquetes, clases, métodos, funciones, …) realizan las funcionalidades que deseamos
![Page 19: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/19.jpg)
Introducción. Diseño 19
Diseño
● ¿Crees que hay un diseño que es 'el bueno'?● ¿Son todos los posibles diseños igual de buenos?● ¿Cómo sabes si un diseño es 'bueno'?
![Page 20: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/20.jpg)
Introducción. Diseño 20
Desarrollo software...
![Page 21: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/21.jpg)
Introducción. Diseño 21
Especificación de requisitos
● Lista de cosas que el proyecto debe cumplir– Normalmente priorizados (obligatorios,
opcionales, deseables)
– Distinguimos entre• Qué debe hacer = requisitos funcionales• Requisitos y preferencias que deseamos que
cumpla (requisitos no funcionales)– Seguridad, Almacenamiento, Compatibilidad con una
plataforma, Velocidad, Eficiencia, ...
![Page 22: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/22.jpg)
Introducción. Diseño 22
Técnicas de especificación
● Casos de uso– Ver cómo el usuario
'usa el sistema'
– Distinguimos casos 'normales' y excepciones (qué pasa si hay un error)
![Page 23: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/23.jpg)
Introducción. Diseño 23
Diseño
● Depende del paradigma de programación (objetos, funciones, …) ●… e incluso del framework (Android, ...)
![Page 24: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/24.jpg)
Introducción. Diseño 24
Paradigmas y lenguajes de programación
![Page 25: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/25.jpg)
Introducción. Diseño 25
Estrategias de Diseño
Diseño
Programación
Ascendente (bottom-up)
Técnicas: refactorización
Descendente (top-down)
Técnicas: especificación diseño
![Page 26: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/26.jpg)
Introducción. Diseño 26
Especificación diseño OO● Identificamos clases principales, sus atributos y relaciones– Tarjetas CRC– Análisis del dominio
(nombres, ...)● Empleamos una notación gráfica– UML (Unified Modeling
Language)
![Page 27: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/27.jpg)
Introducción. Diseño 27
Identificación Clases
● Identifica clases candidatas– Busca nombres y frases nominales (clases),
adjetivos (atributos) y verbos (métodos) en casos de uso o descripción del problema
– Técnica tarjetas CRC (Class-Resonsibility-Collaborator)
![Page 28: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/28.jpg)
Introducción. Diseño 28
Tarjetas CRC
![Page 29: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/29.jpg)
Introducción. Diseño 29
Calidad del diseño
● Acoplamiento– Cambios de código en una clase, implica
cambiar otra(s)● Cohesión– Variedad de funcionalidades
(responsabilidades) que debe realizar una clase
![Page 30: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/30.jpg)
Introducción. Diseño 30
Ejemplo
![Page 31: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/31.jpg)
Introducción. Diseño 31
Ejemplo
![Page 32: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/32.jpg)
Introducción. Diseño 32
Refactorización
● Introducimos buenas prácticas en el código● Normalmente asistidos por el IDE● Ejemplos– Renombrar una variable
– Extraer una interfaz de una clase
– Extraer un método de un trozo de código
– Eliminar variables auxiliares
![Page 33: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/33.jpg)
Introducción. Diseño 33
Ejemplo – Eliminar variables auxiliares
public boolean bisiesto(int año) { return (año % 4 == 0 && (!(año % 100 == 0))) || año % 400 == 0; }
public boolean bisiesto(int año) { boolean multiplo4 = año % 4 == 0; boolean multiplo100 = año % 100 == 0; boolean multiplo400 = año % 400 == 0; return (multiplo4 && (! multiplo100)) || multiplo400; }
![Page 34: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/34.jpg)
Introducción. Diseño 34
Ejemplo. Extraer métodos
// cálculo de la diagonal mayor de un paralepípedo rectangular public double getDiagonalMayor(double a, double b, double c) { return Math.sqrt(Math.sqrt(a * a + b * b) * Math.sqrt(a * a + b * b) + c * c); }
// cáclulo de la diagonal mayor de un paralepípedo rectangular public double getDiagonalMayor(double a, double b, double c) { return hipotenusa(hipotenusa(a, b), c); } // teorema de Pitágoras private double hipotenusa(double x, double y) { return Math.sqrt(x * x + y * y); }
![Page 35: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/35.jpg)
Introducción. Diseño 35
Ejemplo. Extraer métodos
public void testSimetria(String s) { boolean esSimetrica = true; for (int i = 0; i < s.length(); i++) { int j = s.length() - 1 - i; if (j < i) break; char c1 = s.charAt(i); char c2 = s.charAt(j); if (c1 != c2) { esSimetrica = false; break; } } System.out.println(esSimetrica); }
public void testSimetria2(String s) { System.out.println(isSimetrica(s)); } private boolean isSimetrica(String s) { for (int i = 0; i < s.length(); i++) { int j = s.length() - 1 - i; if (j < i) return true; char c1 = s.charAt(i); char c2 = s.charAt(j); if (c1 != c2) return false; } return true; }
![Page 36: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/36.jpg)
Introducción. Diseño 36
Fallos típicos
http://jungla.dit.upm.es/~pepe/doc/adsw/apuntes/fallos.htm
![Page 37: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/37.jpg)
Introducción. Diseño 37
Fallos típicos
![Page 38: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/38.jpg)
Introducción. Diseño 38
Fallos típicos● No hacer "private" los campos de las clases.– Todos los campos deben ser privados, salvo que se indique explícitamente
lo contrario● Usar variables globales (de objeto) para cálculos locales (de método)– Las variables siempre deben tener el ámbito más estrecho posible. Una
variable global es fuente habitual de errores de difícil detección.● Hacer más cosas de las que se piden– No vamos a bajar la nota por hacer de más; pero es seguro que tampoco
vamos a subirla por hacer cosas que no se piden.
– De todas formas, lo frustrante es que el que hace más cosas introduce nuevas posibilidades de fallos, en lo obligatorio y en lo extra; y esos fallos si bajan la nota.
– Por tu interés: haz lo que se pide, ni más, ni menos.
![Page 39: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/39.jpg)
Introducción. Diseño 39
Tufos 'Bad smells'● Campos públicos en una clase● Métodos largos● Malos nombres en clases / atributos / métodos● Clases (o métodos )fuertemente acopladas que hay modificar a la vez● Clases que parecen un cajón de sastre
![Page 40: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/40.jpg)
Introducción. Diseño 40
Patrones de diseño
● Buenas prácticas● Ej. MVC (Model, View, Controller)– Separación de preocupaciones (concerns)– Definición de responsabilidades– Alta cohesión– Bajo acoplamiento
![Page 41: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/41.jpg)
Introducción. Diseño 41
De un vistazo...
¿Qué era cada cosa?
![Page 42: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/42.jpg)
Introducción. Diseño 42
Pruebas
![Page 43: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/43.jpg)
Introducción. Diseño 43
Pruebas...
● Unitarias: de una funcionalidad● De Integración: con otros sistemas● De Usuario (end-to-end): usabilidad con el usuario● No funcionales: de estrés, de carga, ...● Aceptación: pruebas especificadas en los requisitos
![Page 44: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/44.jpg)
Introducción. Diseño 44
Test Driven Development
![Page 45: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/45.jpg)
Introducción. Diseño 45
Pensamientos
● “Probar programas puede ser una forma efectiva de mostrar la presencia de bugs, pero es totalmente inadecuado para mostrar su ausencia” - E. W. Dijkstra
![Page 46: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/46.jpg)
Introducción. Diseño 46
Pensamientos
● “Si hubiese preguntado a mis clientes qué querían, me hubieran dicho que “caballos más rápidos”, Henry Ford
![Page 47: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/47.jpg)
Introducción. Diseño 47
Pensamientos
● “No importa cómo de bueno es un diseño sino si el diseño mejora o empeora. Si mejora, día a día, puedo vivir con él para siempre. Si empeora, estoy muerto”, Kent Beck
![Page 48: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/48.jpg)
Introducción. Diseño 48
Referencias
●Objects First with Java: A Practical Introduction Using BlueJ, D. Barnes and M. Kölling, Prentice Hall, 2011, capítulo 6
![Page 49: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/49.jpg)
Introducción. Diseño 49
Referencias●Head First Object-Oriented Analysis and Design, Brett McLaughlin; Gary Pollice; David West, O'Reilly Media, Inc., 2006●http://proquest.safaribooksonline.com/book/software-engineering-and-development/object/0596008678
![Page 50: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/50.jpg)
Introducción. Diseño 50
●Refactoring: Improving the Design of Existing Code, Martin Fowler; Kent Beck; John Brant; William Opdyke; Don Roberts, Addison-Wesley Professional, 1999●http://proquest.safaribooksonline.com/book/software-engineering-and-development/refactoring/0201485672
Referencias
![Page 51: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/51.jpg)
Introducción. Diseño 51
Referencias
●Objects First with Java: A Practical Introduction Using BlueJ, D. Barnes and M. Kölling, Prentice Hall, 2011, capítulo 6
![Page 52: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/52.jpg)
Introducción. Diseño 52
Enlaces● Glosario– http://www.lab.dit.upm.es/~fprg/curso/temario/glosario.htm
● Pruebas– http://www.dit.upm.es/~pepe/doc/adsw/apuntes/junit.pdf
● Vademécum– http://jungla.dit.upm.es/~pepe/libros/vademecum.pdf– http://jungla.dit.upm.es/~pepe/libros/vademecum/index.html
● Fallos típicos– http://jungla.dit.upm.es/~pepe/doc/adsw/apuntes/fallos.htm
![Page 53: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/53.jpg)
Introducción. Diseño 53
Resumen
● El ciclo de vida software tiene diversas fases para concebir y diseñar el software● Hay varias técnicas, tarjetas CRC, reconocer nombres para realizar identificar clases durante el diseño.
![Page 54: Introducción Análisis y Diseño](https://reader033.vdocuments.net/reader033/viewer/2022052211/55889901d8b42a317d8b46e8/html5/thumbnails/54.jpg)
Introducción. Diseño 54
¿Preguntas?