Document Details

SweetCerberus5050

Uploaded by SweetCerberus5050

Tags

software maintenance software types software evolution software engineering

Summary

This document reviews different types of software maintenance, including corrective, adaptive, perfective, and preventive maintenance. It also discusses the different categories of software, like static, pragmatic, and evolutionary software, and the laws of software evolution by Lehman and Belady.

Full Transcript

Mantenimiento: cualquier trabajo hecho al sistema después de que está en operación. El mantenimiento del software se refiere al proceso de realizar cambios y actualizaciones en un sistema de software después de su entrega inicial. Objetivo: corregir defectos mejorar el rendimiento...

Mantenimiento: cualquier trabajo hecho al sistema después de que está en operación. El mantenimiento del software se refiere al proceso de realizar cambios y actualizaciones en un sistema de software después de su entrega inicial. Objetivo: corregir defectos mejorar el rendimiento adaptar el software a nuevos requisitos o entornos garantizar su correcta operación a lo largo del tiempo. es esencial para prolongar la vida útil de una aplicación y garantizar su relevancia y utilidad. Tipos de mantenimiento del software: 1. Mantenimiento correctivo: Se enfoca en corregir errores o fallos que se han descubierto después de la entrega del software. 2. Mantenimiento adaptativo: Implica realizar cambios en el software para que se ajuste a nuevos entornos, como actualizaciones de hardware, software o cambios en los requisitos del sistema operativo. 3. Mantenimiento perfectivo: Se trata de mejorar la funcionalidad o el rendimiento del software, añadiendo nuevas características u optimizando las existentes. 4. Mantenimiento preventivo: Se realiza para prevenir problemas futuros, asegurando que el software funcione de manera eficiente y evitando fallos (??????). Según Meir "Manny" Lehman, el software se clasifica en tres categorías: Software S (Software Estático o Simple): Este tipo de software tiene requisitos y especificaciones bien definidas que no cambian una vez que el software ha sido implementado. El comportamiento del software es predecible y el entorno en el que opera es estable. Por ejemplo, programas matemáticos con algoritmos fijos. Características: o No requiere mantenimiento evolutivo. o Su comportamiento es determinista y completamente entendible desde el diseño inicial. Software P (Software Pragmático o Practicable): este tipo de software también se conoce como software problemático o "problem-solving". Está diseñado para resolver un conjunto específico de problemas dentro de un entorno controlado. Aunque los problemas que resuelve están bien definidos, el software puede necesitar ajustes debido a cambios en los requisitos o en el entorno operativo. Por ejemplo, sistemas de gestión empresarial donde se puede requerir ajustes por cambios en los procesos de negocio. Características: o Puede requerir mantenimiento correctivo o adaptativo. o La evolución se centra en la adaptación a nuevas condiciones operativas o en la resolución de nuevos problemas. Software E (Software Evolutivo): Este tipo de software está en constante evolución. Se desarrolla en un entorno donde los requisitos cambian con el tiempo, y el software debe adaptarse continuamente a estos cambios. Es común en sistemas grandes, interactivos y a largo plazo, como los sistemas empresariales y los sistemas de gestión pública. Por ejemplo, sistemas de información de empresas que deben evolucionar con el negocio. Características: o Necesita un mantenimiento continuo, tanto correctivo como perfectivo y adaptativo. o Su evolución es inevitable debido a la naturaleza cambiante de sus requisitos y del entorno en el que opera. Cada tipo de software requiere un enfoque diferente para su desarrollo y mantenimiento, influenciado por la naturaleza de sus requisitos y el entorno operativo en el que se utiliza. Leyes de Lehman y Belady sobre la evolución del SW Mejorar la calidad y la sostenibilidad de los sistemas de software. Ley 1: El software se debe evolucionar. Todo software se desarrolla para satisfacer las necesidades de los usuarios, las cuales cambian con el tiempo. Por lo tanto, el software debe evolucionar para seguir siendo útil. Ley 2: El costo de cambiar el software aumenta con el tiempo. A medida que un software envejece, el costo de realizar cambios y mantenimiento tiende a aumentar debido a su complejidad y a la acumulación de errores. Mientras mas antiguo mas costoso es cambiarlo Ley 3: El software debe ser continuamente adaptado al entorno operativo. A medida que cambian los requisitos y el entorno operativo (hardware, sistemas operativos, etc.), el software también debe adaptarse para seguir siendo efectivo. Adaptativo al entorno operativo Ley 4: La funcionalidad del software aumenta, pero la estructura del software tiende a degradarse. A pesar de que se añaden nuevas funciones, la calidad de la estructura del software puede deteriorarse, lo que puede dificultar su mantenimiento. Mas funcionalidad pero degradación de la estructura Ley 5: La complejidad del software tiende a aumentar. Con el tiempo, el software se vuelve más complejo debido a la adición de nuevas características y la necesidad de interacciones con otros sistemas. Cambios igual a mas complejidad Ley 6: El sistema debe ser continuamente adaptado a los cambios en la tecnología. A medida que surgen nuevas tecnologías, el software debe adaptarse para aprovechar estas mejoras y seguir siendo competitivo. Adaptativo a la tecnología Ley 7: La organización y los usuarios cambian, y el software debe evolucionar en consecuencia. Los cambios en la organización y las necesidades de los usuarios también requieren que el software evolucione. Evolutivo por cambios en los usuarios u organización Cuando un sistema requiere cambios continuos y significativos, debemos decidir si resulta mejor crear un nuevo sistema. El costo asociado al desarrollo y mantenimiento de un sistema es denominado costo del ciclo de vida. Problemas de Mantenimiento Problemas Administrativos: 1. Alineación con las Prioridades del Cliente: Asegurar que el mantenimiento del software se alinee con las necesidades y expectativas del cliente. 2. Dotación de Personal: Contar con el personal adecuado y con las habilidades necesarias para llevar a cabo el mantenimiento. 3. Organización del Mantenimiento: Decidir qué organización o departamento se encargará del mantenimiento del software. 4. Estimación de Costos: Prever y presupuestar los costos asociados con el mantenimiento del software. Problemas Técnicos: 1. Comprensión Limitada: Falta de comprensión completa del software debido a la documentación inadecuada o la complejidad del código. 2. Análisis de Impacto: Dificultad para prever el impacto de los cambios en el software, especialmente en sistemas grandes y complejos. 3. Pruebas: Asegurar que las modificaciones no introduzcan nuevos errores y que el software siga funcionando como se espera. 4. Medición de la Mantenibilidad: Evaluar y mejorar la facilidad con la que el software puede ser mantenido y actualizado. ¿Cuáles son los 3 tipos de trabajo que hace un ingeniero de software? Desarrollo de Software. Mantenimiento de Software. Operación de Sistemas de Software. Técnicas de Mantenimiento de Software: 1. Refactorización: Mejora la estructura del código sin cambiar su comportamiento externo para hacerlo más comprensible y mantenible. 2. Reingeniería: Rediseño y reestructuración del software para actualizarlo y mejorar su mantenibilidad. 3. Reversión de Código: Proceso de analizar el software para identificar y entender sus componentes y dependencias. 4. Pruebas de Regresión: Verificar que los cambios recientes no hayan introducido nuevos errores en partes existentes del software. Herramientas de Mantenimiento de Software: 1. Sistemas de Control de Versiones: Como Git, que ayudan a gestionar los cambios en el código fuente. 2. Herramientas de Integración Continua: Como Jenkins, que automatizan la compilación y las pruebas del software. 3. Herramientas de Análisis Estático: Como SonarQube, que examinan el código fuente para detectar posibles problemas. 4. Sistemas de Seguimiento de Errores: Como JIRA, que permiten a los equipos registrar, rastrear y gestionar problemas y errores. El envejecimiento del software puede manifestarse de varias maneras, como la fragmentación del código, la obsolescencia de las tecnologías utilizadas, y la acumulación de errores y deudas técnicas que no se han resuelto a lo largo del tiempo. Como resultado, el software puede volverse menos eficiente, más difícil de mantener y actualizar, y puede no cumplir con los estándares actuales de seguridad y rendimiento. El proceso de rejuvenecimiento del software incluye técnicas como: Redocumentación: Actualizar o crear nueva documentación para reflejar el estado actual del software y facilitar su comprensión y mantenimiento. Reestructuración: Modificar la estructura interna del código para mejorar su legibilidad y mantenibilidad sin cambiar su comportamiento externo. Refactorización: Revisar y mejorar el código existente para reducir la complejidad y eliminar redundancias. Reingeniería: Rediseñar y reconstruir el software para actualizarlo y mejorar su mantenibilidad y adaptabilidad a las nuevas tecnologías. El objetivo del rejuvenecimiento del software es devolver el software a una condición más “joven”, mejorando su calidad, rendimiento y capacidad para adaptarse a los cambios futuros. Sin embargo, es importante tener en cuenta que el rejuvenecimiento del software ofrece una solución limitada y no puede corregir todos los errores. En algunos casos, puede ser más práctico y económico reemplazar el software obsoleto con uno nuevo. La redocumentación en el contexto del rejuvenecimiento del software se refiere al proceso de actualizar o crear nueva documentación para un sistema de software existente. La redocumentación puede incluir: Actualizar manuales de usuario y técnicos: Asegurarse de que reflejen las funcionalidades y operaciones actuales del software. Revisar comentarios en el código fuente: Mejorar la comprensión y mantenibilidad del código para los desarrolladores actuales y futuros. Documentar nuevas características: Incluir información sobre las adiciones y mejoras realizadas durante el proceso de mantenimiento perfectivo. Clarificar procesos de instalación y configuración: Proporcionar instrucciones claras y actualizadas para la implementación del software. La reestructuración en el contexto del rejuvenecimiento del software se refiere al proceso de modificar la estructura interna de un sistema de software sin cambiar su comportamiento externo. Este proceso tiene como objetivo mejorar atributos no funcionales del software, como su legibilidad, mantenibilidad y escalabilidad. La reestructuración puede incluir: Reestructuración de Código: Mejorar la calidad del código fuente, eliminando redundancias, simplificando estructuras de control y mejorando la modularidad. Reestructuración de Datos: Optimizar la organización de las estructuras de datos para mejorar el rendimiento y la eficiencia del acceso a los datos. Las mejores prácticas para la reestructuración de código: 1. Escribir código limpio y bien organizado: Mantén una estructura clara con sangría y espaciado adecuados. 2. Utilizar nombres significativos: Elige nombres de variables y funciones que sean descriptivos y claros. 3. Comentar y documentar: Asegúrate de que el código esté bien comentado para explicar su propósito y funcionamiento. 4. Mantener las funciones enfocadas: Cada función debe ser corta y centrarse en una única tarea. 5. Refactorizar y reutilizar: Minimiza la redundancia refactorizando y reutilizando el código siempre que sea posible. La ingeniería inversa, desde el punto de vista del rejuvenecimiento del software, es un proceso que implica descomponer un sistema de software para entender su construcción y diseño. Este proceso es fundamental para poder mejorar, corregir errores, analizar programas de la competencia y desarrollar nuevos productos. En el contexto del rejuvenecimiento del software, la ingeniería inversa se utiliza para: Recuperar el código fuente perdido o desactualizado: Esto es especialmente útil cuando no se dispone del código fuente original o está obsoleto. Entender mejor el funcionamiento del software: Al analizar cómo están construidos los componentes y cómo interactúan entre sí, se pueden identificar áreas de mejora. Facilitar la refactorización y la reestructuración: Con un conocimiento profundo del código existente, es más fácil realizar cambios que mejoren la calidad y la mantenibilidad del software. Desde el punto de vista del rejuvenecimiento del software, aplicar reingeniería al software significa realizar un proceso exhaustivo que implica analizar, modificar y mejorar un sistema de software existente con el objetivo de aumentar su funcionalidad, eficiencia y seguridad. Este proceso no se trata de crear un nuevo sistema desde cero, sino de aprovechar el conocimiento y la experiencia acumulados en el sistema original y aplicar las mejores prácticas y metodologías para optimizarlo. La reingeniería de software puede involucrar: Ingeniería inversa: Comprender el funcionamiento de un programa para identificar sus componentes y dependencias. Reestructuración de código: Mejorar la estructura interna del código para hacerlo más mantenible y comprensible. Reestructuración de datos: Optimizar la organización de las estructuras de datos para mejorar el rendimiento y la eficiencia. Ingeniería directa: Aplicar cambios y mejoras basados en el conocimiento obtenido a través de la ingeniería inversa y la reestructuración. El objetivo final es otorgar al software nuevas finalidades y características que mejoren los servicios que previamente ofrecía, asegurando que continúe siendo efectivo y evitando problemas de rendimiento que pueden surgir con el tiempo. La gestión de calidad del software se enfoca en garantizar que el software tenga un número menor de defectos y que alcance los estándares requeridos de mantenibilidad, fiabilidad, portabilidad, etcétera. Incluye definir estándares para procesos y productos, y establecer procesos para comprobar que se siguieron dichos estándares. Intereses fundamentales: Establece un marco de proceso y estándares de organización que conducirán a software de mejor calidad. Implica la aplicación de procesos específicos de calidad y la verificación de que continúen dichos procesos planeados. Garantiza que los resultados del proyecto estén en conformidad con los estándares aplicables a dicho proyecto. Establece un plan de calidad para un proyecto. El aseguramiento de calidad (QA, por las siglas de quality assurance) es la definición de procesos y estándares que deben conducir a la obtención de productos de alta calidad y, en el proceso de fabricación, a la introducción de procesos de calidad. Se usa el término aseguramiento de calidad para incluir verificación y validación, y los procesos de que la comprobación de procedimientos de calidad se aplicó de manera adecuada. El control de calidad es la aplicación de dichos procesos de calidad para eliminar aquellos productos que no cuentan con el nivel requerido de calidad. Se evita usar este término. En la mayoría de las compañías, el equipo QA es el responsable de administrar el proceso de pruebas de liberación. El equipo debe ser independiente y reportarse ante la administración ubicada sobre el nivel del administrador del proyecto. ESTANDARES DE SOFTWARE CMMI (Capability Maturity Model Integration): es un modelo de madurez para el desarrollo y mantenimiento de software y otros procesos organizacionales. CMMI se enfoca en mejorar la calidad de los procesos en cinco niveles de madurez: inicial, gestionado, definido, cuantitativamente gestionado y optimizado. Ayuda a las organizaciones a desarrollar productos y servicios más eficaces y eficientes, reduciendo defectos y mejorando la satisfacción del cliente. Bootstrap: este término también se asocia a métodos y técnicas estadísticas o a un framework de diseño web. En el contexto de la evaluación de software, Bootstrap fue un proyecto europeo de evaluación de madurez de software en pequeñas y medianas empresas. Su objetivo fue ayudar a estas empresas a mejorar sus procesos de software, desarrollando un conjunto de criterios para evaluar y mejorar sus capacidades. PSP (Personal Software Process): es una metodología desarrollada por Watts Humphrey que se enfoca en mejorar las habilidades individuales de los ingenieros de software para aumentar su productividad y reducir defectos en su trabajo. PSP enfatiza la planificación, la medición de tiempos, la revisión de código y la calidad individual, ayudando a los desarrolladores a gestionar y mejorar su propio rendimiento y la calidad de su trabajo. GQM (Goal Question Metric): es un enfoque estructurado para definir y evaluar métricas de software a través de metas específicas. Consiste en tres niveles: Goal (meta), Question (pregunta) y Metric (métrica). Este método ayuda a vincular las metas organizacionales con preguntas concretas que luego se convierten en métricas medibles, facilitando el análisis y la mejora continua. SPICE (ISO/IEC 15504): Conocido como ISO/IEC 15504, SPICE (Software Process Improvement and Capability dEtermination) es un marco para la mejora y evaluación de procesos de software. Define un conjunto de requisitos de evaluación y una escala de madurez similar a CMMI, pero más orientada a los estándares ISO. SPICE permite a las organizaciones evaluar y mejorar sus procesos en varias áreas, no solo en desarrollo de software. COBIT (Control Objectives for Information and Related Technologies): es un marco para la gobernanza y gestión de las tecnologías de la información. Desarrollado por ISACA, COBIT proporciona prácticas y controles para que las empresas gestionen su información y sus sistemas de TI, alineándolos con los objetivos organizacionales. Es ampliamente usado para asegurar el cumplimiento normativo y mejorar la eficiencia de TI. ITIL (Information Technology Infrastructure Library): es un conjunto de buenas prácticas para la gestión de servicios de TI. Su objetivo es ayudar a las organizaciones a ofrecer servicios de TI de alta calidad y alinear los servicios con las necesidades del negocio. ITIL se compone de cinco etapas: estrategia, diseño, transición, operación y mejora continua, y cada una de ellas incluye procesos específicos para la gestión efectiva de los servicios. MOPROSOFT: es un modelo de procesos de software desarrollado en México, diseñado específicamente para pequeñas y medianas empresas (PyMES) de desarrollo de software. Se basa en normas internacionales y busca mejorar los procesos organizacionales y técnicos en este tipo de empresas. MOPROSOFT estructura los procesos en tres niveles (dirección, gestión y operación) y proporciona un enfoque accesible para mejorar la calidad y competitividad. Las revisiones de los entregables del proceso de software incluyen a un equipo de personas que verifican que se siguieron los estándares de calidad. Las revisiones son la técnica usada más ampliamente para valorar la calidad. En una inspección de programa o revisión de pares, un reducido equipo comprueba sistemáticamente el código. Ellos leen el código a detalle y buscan posibles errores y omisiones. Entonces los problemas detectados se discuten en una reunión de revisión del código. La medición del software puede usarse para recopilar datos cuantitativos tanto del software como del proceso de software. Se usan los valores de las métricas de software recopilados para hacer inferencias referentes a la calidad del producto y el proceso. Las métricas de calidad del producto son particularmente útiles para resaltar los componentes anómalos que pudieran tener problemas de calidad. Dichos componentes deben entonces analizarse con más detalle. La meta a largo plazo de la medición del software es usar la medición en lugar de revisiones para realizar juicios de la calidad del software. Al usar medición de software, un sistema podría valorarse preferentemente mediante un rango de métricas y, a partir de dichas mediciones, se podría inferir un valor de calidad del sistema. Es difícil hacer mediciones directas de muchos de los atributos de calidad del software que se muestran en la figura

Use Quizgecko on...
Browser
Browser