Mitos Falsos sobre el Software
El hardware es mucho más importante que el software. El software es fácil de desarrollar. El software consiste exclusivamente en programas ejecutables. El desarrollo del software es solo una labor de programación. Es natural que el software contenga errores.
El Ciclo de Vida del Software. Modelos Clásicos
El Modelo en Cascada
Cada resultado de una fase es el elemento de entrada de la fase siguiente. Antes de comenzar una fase se establece un proceso de revisión para detectar errores que serían muy costosos de resolver si se pasase a la fase siguiente con ese lastre. Las diferentes variantes del modelo se diferencian en el reconocimiento o no como fases separadas de ciertas actividades.
Las fases de un ciclo de vida en cascada son:
- Análisis: analizar las necesidades de los usuarios potenciales para determinar qué debe hacer el sistema a desarrollar, se genera el SRD (Documento de especificación de requisitos). Especificación precisa y completa sin detalles internos.
- Diseño: Descomponer y organizar el sistema para hacer desarrollo en equipo, se genera el SDD (Documento de diseño del software). Describe la estructura global, especifica qué debe hacer cada parte y cómo se combinan unas con otras.
- Codificación: Se escribe y prueba el código fuente para cada elemento, se genera el código fuente en el lenguaje de programación elegido, con comentarios para que esté claro.
- Integración: Combinar todos los componentes y hacer pruebas exhaustivas, se genera el sistema software, ejecutable junto con la documentación de las pruebas.
- Mantenimiento: Durante la explotación habrá cambios, bien por defectos no detectados, bien por mejoras, se generan documentos de cambios que tendrán información del problema, descripción de la solución y modificaciones realizadas.
El Modelo en V
Se basa en una secuencia de fases análoga a la del modelo en cascada. Se representa con un diagrama bidimensional nivel-desarrollo. En las actividades situadas en un nivel determinado se trabaja sobre una unidad del nivel de detalle superior, que se organiza en varias unidades del nivel de detalle inferior. Así, durante la codificación se trabaja con un módulo que se construye con sentencias, en el diseño e integración se trabaja con un sistema software que se organiza (durante el diseño) o se construye (durante la integración) con varios módulos.
- Verificación: Comprobación de que una parte del sistema cumple con sus especificaciones, se produce a nivel de módulo.
- Validación: Comprobación de que un elemento satisface las necesidades del usuario identificadas durante el análisis, se produce a nivel de sistema completo.
Uso de Prototipos
Son elementos auxiliares que permiten probar experimentalmente ciertas soluciones parciales a las necesidades del usuario o a los requisitos del sistema. Para limitar el coste del desarrollo del prototipo, debemos limitar sus funciones, su capacidad (permitiendo que procese solo unos pocos datos), su eficiencia, usar un hardware más potente, usar un software más potente.
- Prototipos rápidos: Los que solo sirven para adquirir experiencia, sin aprovecharlos como producto, se utilizan en análisis y diseño.
- Prototipos evolutivos: En los que se intentará aprovechar al máximo su código, complementando el prototipo y creando sucesivamente nuevos prototipos hasta conseguir el sistema final.
- Modelo de ciclo de vida evolutivo: Proceso iterativo en bucle sobre el modelo en cascada, en cada iteración se hace solo una parte del desarrollo. Cada iteración utiliza todo lo que se ha generado en la iteración anterior y produce un nuevo prototipo, que es una nueva versión parcial del sistema, hasta llegar finalmente al sistema completo.
- Herramientas para la realización de prototipos: si el prototipo es evolutivo se usarán las mismas herramientas que en el sistema definitivo, si es rápido se podrán usar diferentes. Las herramientas más idóneas para construir prototipos son:
- Las de 4ª generación: Que se apoyan en bases de datos de uso general, formularios de entradas de datos, y formatos de informes.
- Los lenguajes de 4ª generación: Tiene un estilo declarativo no operacional, esto es, describir el resultado que se desea obtener, en vez de describir las operaciones para conseguirlo, tales como Prolog y SmallTalk.
- Los lenguajes de especificación: Tienen como objetivo formalizar la especificación de requisitos de un sistema software, y disponiendo de un compilador tendremos un prototipo ejecutable.
- El uso extensivo de la reutilización del software: Es otra técnica para la construcción de prototipos, que se basa en la utilización de módulos o subsistemas escritos de antemano, como elemento fundamental para guiar la evolución del proceso de desarrollo. En cada ciclo de la espiral se realiza una parte del desarrollo total, siguiendo la secuencia de las 4 clases de actividades.
Planificación: Sirve para establecer el contexto del desarrollo y decidir qué parte del mismo se abordará en ese ciclo de la espiral.
Análisis de riesgo: Consiste en evaluar diferentes alternativas para la realización de la parte de desarrollo elegida, seleccionando la más ventajosa.
Ingeniería: Son las indicadas en los modelos clásicos: análisis, diseño, codificación, integración y mantenimiento, su resultado será ir obteniendo en cada ciclo una versión más completa del sistema.
Evaluación: Analiza los resultados de la fase de ingeniería con la colaboración del cliente y este resultado se tiene como información de entrada para la planificación del ciclo siguiente. Tendremos diferentes variantes del modelo en espiral, según qué parte del desarrollo se decida hacer en cada ciclo.
Combinación de modelos: A veces puede resultar ventajoso aprovechar las ventajas de varios modelos diferentes, combinándolos en un modelo mixto de ciclo de vida.
Mantenimiento del Software
También llamada etapa de explotación y mantenimiento, consiste en repetir o rehacer parte de las actividades de las fases anteriores para introducir cambios en una aplicación ya entregada al cliente.
Evolución de las aplicaciones: Tenemos tres tipos de mantenimiento que son:
- Correctivo: Corrige errores que no se detectaron durante el desarrollo inicial.
- Adaptativo: Se da en aplicaciones que tienen un tiempo de vigencia elevado y es necesario ir adaptando la interfaz que corre sobre ellas.
- Perfectivo: Se da en aplicaciones en las que existe competencia de mercado, para optimizar las sucesivas versiones.
Gestión de cambios: Se pueden tener 2 enfoques a la hora de hacer cambios en el software.
- Como un nuevo desarrollo: Si afecta a la mayoría de los componentes, aplicando un nuevo ciclo de vida desde el principio.
- Como modificación de algunos elementos si afecta a una parte localizada del producto.
El cambio de código de algunos módulos puede requerir modificar los documentos de diseño o incluso en el caso del mantenimiento perfectivo, modificar el SRD. La realización de cambios se controla mediante el informe de problema y el informe de cambio.
Reingeniería: Las técnicas de ingeniería inversa o reingeniería sirven para ayudar al mantenimiento de aplicaciones antiguas que no fueron desarrolladas siguiendo las técnicas de ingeniería del software, con su respectiva documentación. Se toma el código fuente y a partir de él, se construye de forma automática alguna documentación, en particular, de diseño, con la estructura modular y las dependencias entre módulos y funciones (a veces será necesario reconstruir a mano la documentación y la modificación del código fuente).
Garantía de Calidad de Software
Las actividades del ciclo de vida que inciden sobre la calidad del producto software son las revisiones y pruebas.
Factores de calidad: Por niveles el esquema general de la medición de la calidad, sería:
- Factores de calidad: Nivel superior, es la valoración propiamente dicha.
- Criterios: La valoración se hace en función de unos criterios.
- Métricas: Son mediciones puntuales de determinados atributos del producto.
Como factores de calidad tenemos:
Corrección: El producto realmente hace lo que se espera de él.fiabilidad: Es el grado de ausencia de fallos durante la operación del producto.Eficiencia: Relación entre la cantidad de resultados suministrados y los recursos requeridos durante la operación.Seguridad: Dificultad de acceso a los datos de personal no autorizado.Facilidad de uso: Inversa del esfuerzo requerido para aprender a manejar un producto.Mantenibilidad: Facilidad para corregir el producto en caso necesario.(mantenimiento correctivo).Flexibilidad: Facilidad para modificar el producto ( mantenimiento Adaptativo y perfectivo).Facilidad de prueba: Inversa del esfuerzo requerido para ensayar y comprobar la corrección y fiabilidad de un producto software.Transportabilidad: Facilidad de adaptación de un producto software a una plataforma diferente para la que fue diseñado.Reusabilidad: Facilidad para emplear partes del producto en otros desarrollos posteriores.Interoperatividad: Capacidad del producto de trabajar en combinación con otros productos.Plan de garantía de calidad:SQAP: Es el Plan de Garantía de Calidad del Software, debe contemplar los siguientes aspectos:Organización de los equipos de personas, dirección y seguimiento del desarrollo.Modelo de ciclo de vida a seguir ( fases y actividades).Documentación requerida(con contenido y guión).Revisiones y auditorias que se harán durante el desarrollo.Organización de las pruebas que se harán sobre el producto a diferentes niveles.Organización de la etapa de mantenimiento, especificando como ha de gestionarse la realización de cambios del producto ya en explotación.Revisiones: Consiste en inspeccionar el resultado de una actividad para determinar si es aceptable o tiene defectos que se deben corregir, se suelen aplicar a la documentación generada en cada fase.Las revisiones se deben formalizar siguiendo las siguientes pautas:Se realizaran por un grupo de personas de 3 a 5.No debe ser realizada por los autores del producto.No se debe revisar ni el productor ni el proceso de producción..Se ha de establecer previamente unas lista formal de comprobaciones a realizar.Debe levantarse Acta con los puntos de discusión y las decisiones adoptadas.Pruebas: Consisten en hacer funcionar un producto software bajo unas condiciones determinadas y comprobar si los resultados son los correctos.El objetivo es descubrir los errores contenidos en el software.Si no se descubre ningún error no se garantiza la calidad del producto.Gestión de configuración: La configuración de software es la manera en que diversos elementos se combinan para constituir un producto software bien organizadotanto desde el punto de vista de la explotación por el usuario como de su desarrollo o mantenimiento.Nos apoyaremos para mantener bajo control la configuración del software en:El control de versiones: Consiste en almacenar de forma organizada las sucesivas versiones de cada elemento de la configuración El control de cambios: Consiste en garantizar que las diferentes configuraciones del software se componen de elementos compatibles entre si.Línea base: Es una configuración particular del sistema, cada línea se construye a partir de otra mediante la inclusión deciertos cambios.Línea base congelada: Se le da este nombre a la antigua línea base que se modificó y no se borró.