TEMA 2: DESARROLLO DEL SOFTWARE EDI I – Curso 2007/08 Escuela Politécnica Superior Universidad Autónoma de Madrid TEMA 2: DESARROLLO DEL SOFTWARE 2.1. Ciclo de vida del Software 2.2. Corrección de errores de programación 2.3. Algoritmos 1 Componentes de una aplicación Informática Hardware (Hw): – Estático – Independiente de la aplicación Software (Sw): – Dinámico, cambiante – Específico del problema que resuelve la aplicación Componentes de una aplicación Informática Sw más necesario, más complejo y más trabajoso que el Hw más caro Desarrollo de Sw requiere ECI: – Esfuerzo – Creatividad – Ingenio Metodología de producción de Sw: Ingeniería del Software 2 Ciclo de Vida del SW Es la base de la Ingeniería del Sofware Actividades sobre el Sw desde su concepción hasta su muerte. Fases: 1. Análisis 2. Diseño 3. Desarrollo (implementación) 4. Pruebas y validación 5. Mantenimiento Ciclo vida SW: Fase 1 Análisis Qué hace la aplicación Tareas a realizar: 1. Descripción general completa del problema a resolver 2. Especificación funcional: qué tiene que hacer la aplicación 3. Análisis de requisitos: condiciones informáticas bajo las que debe funcionar la aplicación 4. Especificación de E/S: qué recibe y qué devuelve la aplicación 5. Criterios de validación: especificar cómo se va a comprobar que la aplicación funciona (que cumple requisitos y especificaciones) 3 Ciclo vida SW: Fase 1 Análisis 6. Análisis de factibilidad: ver si es posible realizar la aplicación. Resultados de la fase de análisis: 1. Conocimiento profundo del problema (por parte de los informáticos) 2. Documento con: – Especificación de requisitos (valor informático + contractual) – Protomanual de usuario – Primeras estimaciones del coste de la aplicación Ciclo vida SW: Fase 2 Diseño Cómo se va a hacer la aplicación ANÁLISIS DISEÑO Algoritmos Tareas Descripción funcional Tipos y estructuras de datos Datos Cliente Analista Diseño informático Programador Analista: – – – Buen programador Conocimientos sólidos Capacidad de: análisis, síntesis, organización y comunicación (verbal y escrita) 4 Ciclo vida SW: Fase 2 Diseño Enfoque modular: TOP-DOWN Jerarquía de: 1. Grandes módulos, semi-independientes, intercomunicados 2. Submódulos … N. Funciones elementales Ciclo vida SW: Fase 2 Diseño Resultados de la fase de diseño: 1. Estructuración de la aplicación según la jerarquía de módulos 2. Documento de diseño con info sobre: 1. Organización de los procesos 2. Datos y sus estructuras de datos 3. E/S generales y de cada submódulo 4. Intercomunicación (a niveles corrrespondientes) 3. Estimaciones económicas finales 5 Ciclo vida SW: Fase 3 Desarrollo Tareas: – programación de la aplicación – pruebas de módulos individuales – pruebas de intercomunicación Módulo de desarrollo + pruebas = espiral creciente de alcance funcional y complejidad Ciclo vida SW: Fase 3 Desarrollo Resultados del desarrollo: 1. Código de la aplicación 2. Documentación de la aplicación 3. Código del Sw de pruebas: genera datos de pruebas, simula entornos de ejecución, etc. 4. Datos de pruebas 5. Documentación de las pruebas 6 Ciclo vida SW: Fase 3 Desarrollo Propiedades del código: 1. Legible: bien estructurado, tanto conceptualmente (funcionalmente) como visualmente 2. Correcto: siempre y frente a cualquier entrada 3. Comprensible: bien documentado Ciclo vida SW: Fase 3 Desarrollo Tipos de código: – Académico: – Profesional: Programas pequeños Poco críticos Análisis y diseño individual Poco uso (programador y profesor) Requiere ECI Programas grandes Críticos (no pueden fallar) Análisis y diseño en grupo Uso intenso, por terceros Requiere ECI + metodología + buenos hábitos +… 7 Ciclo vida SW: Fase 4 Validación Validación: certificación de que el Sw. Cumple los requisitos y especificaciones establecidas en fase 1 (análisis) Objetivos: – Validar el Sw – Detectar/corregir errores “finos” (los gruesos se detectan en la fase 3) Estrategía BOTTOM-UP: funciones individuales => jerarquía de módulos => aplicación completa (Más detalles después) Ciclo vida SW: Fase 5 Mantenimiento Modificación de un producto Sw después de su entrega al cliente, para: – – – – corregir defectos adaptarlo a un cambio de entorno mejorar rendimiento … Suele ser lo más costoso 8 Modelo ciclo vida SW en cascada Análisis Diseño Desarrollo Pruebas Mantenimiento Subidas de 1 escalón + o – frecuentes, debidas a errores, inconsistencias, olvidos en fase anterior Subidas de 2 o más escalones deberían ser poco frecuentes. Suponen esfuerzo, tiempo y coste superiores (perdido) TEMA 2: DESARROLLO DEL SOFTWARE 2.1. Ciclo de vida del Software 2.2. Corrección de errores de programación – Fuentes de errores – Detección de errores. Tipos de pruebas – Datos de prueba – Excepciones 2.3. Algoritmos 9 Corrección de errores de programación Fuentes de errores: 1. Errores “violentos” Ej: divisiones por 0, punteros locos, etc. – Detección fácil, reproducción + o - fácil, resolución fácil – 2. Lógica inconsistente/errónea Resultados a veces correctos, a veces inconsistentes, a veces erróneos – + complicados de detectar => + difíciles de reproducir => + difíciles de corregir – 3. Especificación/diseño incorrectos Detección tardía – Corrección casi imposible (falta de recursos, etc.) – Corrección de errores de programación Detección de errores. Pruebas de 2 tipos: 1. Funcionales: pruebas de alto nivel – El software se ve como una “caja negra” E – SW S Tareas: 1. Definir el conjunto de entradas 2. Calcular (a mano) las salidas esperadas de cada entrada 3. Comprobar que el Sw hace lo mismo 2. Estructurales: pruebas de bajo nivel – Se sigue de cerca la evolución de la ejecución (depuración, debugger) 10 Corrección de errores de programación Datos de prueba: – Antes de probar, definir conjunto de datos de prueba. – Tipos: 1. Datos normales 2. Datos extremos 3. Datos ilegales 3.1. Datos ilegales “normales” 3.2. Datos ilegales absurdos Corrección de errores de programación Datos de prueba: 1. Datos normales: Son legítimos y razonables – Resultado: correcto – Ej: float media (float t [], int dim) dim = 10000 t [i] = razonables dentro de floats, y que la suma no pase del tamaño de un float – 11 Corrección de errores de programación Datos de prueba: 2. Datos extremos: Son “normales”, pero al límite de la procesabilidad – Resultado: correcto ó mensaje de error – Ej: float media (float t [], int dim) dim = INT_MAX t [i] = tales que la suma pasa del tamaño de un float (FLT_MAX) – Corrección de errores de programación Datos de prueba: 3. Datos ilegales: Son NO procesables – Tipos: – 3.1. Ilegales “normales”: P.ej., el tipo se corresponde, pero se pasa del valor permitido. Ej: dim > INT_MAX, t[i] > FLT_MAX 3.2. Ilegales absurdos: Ni siquiera coincide el tipo de dato Ej: dim = “hola” – Resultado: mensaje de error correspondiente 12 Corrección de errores de programación Nunca puede haber fallos/ “cuelgues”, programa debe responder siempre necesario capturar excepciones y gestionarlas adecuadamente Excepción: circunstancia excepcional que se produce durante la ejecución de un programa y que debe ser gestionada Capturar y gestionar excepciones código extra, costoso y caro (aprox. 50% código) TEMA 2: DESARROLLO DEL SOFTWARE 2.1. Ciclo de vida del Software 2.2. Corrección de errores de programación 2.3. Algoritmos – Definición – Elementos básicos – Programación estructurada – Pseudocódigo y diagrama de flujo 13 Algoritmos Algoritmo: conjunto de instrucciones – simples, – de ejecución finita, y – que producen unos resultados concretos y correctos. Algoritmos – Elementos básicos Elementos básicos de un algoritmo: 1. Secuencias (bloques secuenciales) 2. Selecciones 3. Repeticiones 14 Algoritmos – Elementos básicos 1. Secuencias (bloques secuenciales): serie de sentencias simples de ejecución secuencial Flujo de ejecución Algoritmos – Elementos básicos 2. Selecciones: – Bloques secuenciales que se ejecutan o no dependiendo de una condición – Varios bloques, sólo se ejecuta uno – Ej. en C: if, switch, … ? Flujo de ejecución 15 Algoritmos – Elementos básicos 3. Repeticiones: – Bloques secuenciales que se ejecutan repetidamente mientras se cumpla una condición – Ej. en C: for, while, do while, … NO ? SÍ ... Algoritmos – Prog. estructurada Programación estructurada: – Sólo se usan estos 3 elementos (secuencias, selecciones, repeticiones), posiblemente anidados – No se usa “go to” 16 Algoritmos – Pseudocódigo Pseudocódigo: representación genérica (independiente del lenguaje) y concisa del funcionamiento de un algoritmo Algoritmos – Pseudocódigo Pseudocódigo algoritmo de Euclides ent mcd (ent a, ent b) si b > a: intercambia (a, b); r = a mod b; mientras r > 0: a = b; b = r; r = a mod b; devolver b; Selección Repetición Secuencia 17 Algoritmos – Diagrama de flujo Diagrama de flujo algoritmo de Euclides (inicio) SÍ b>a? intercambiar (a, b) NO r=a%b r>0? SÍ NO devolver b a=b; … Algoritmos – Pseudocódigo Observaciones: – No se puede programar sin saber escribir pseudocódigo – Notación pseudocódigo: libre pero cercana a lenguajes, no a lenguaje natural – Elementos implícitos que no se especifican: punteros, declaración variables, etc. – Seguir convenciones de legibilidad: sangrado de sentencias y bloques – Importante: claridad, concreción de ideas 18