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
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
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)
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 Descripción funcional Tareas Datos Algoritmos Tipos y estructuras de datos Diseño informático Cliente Analista Programador Analista: Buen programador Conocimientos sólidos Capacidad de: análisis, síntesis, organización y comunicación (verbal y escrita)
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
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
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: Programas pequeños Poco críticos Profesional: Programas grandes Críticos (no pueden fallar) Análisis y diseño individual Poco uso (programador y profesor) Requiere ECI Análisis y diseño en grupo Uso intenso, por terceros Requiere ECI + metodología + buenos hábitos +
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
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
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)
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
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
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
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
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
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,? SÍ NO... Algoritmos Prog. estructurada Programación estructurada: Sólo se usan estos 3 elementos (secuencias, selecciones, repeticiones), posiblemente anidados No se usa go to
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
Algoritmos Diagrama de flujo Diagrama de flujo algoritmo de Euclides (inicio) b>a? SÍ NO intercambiar (a, b) r = a % b r>0? NO SÍ 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