UNIVERSIDAD NACIONAL TECNOLÓGICA DE LIMA SUR
FACULTAD DE INGENIERÍA Y GESTIÓN
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMAS
Curso: Testing y Calidad de Software
Profesor: Chavez Herrera Carlos Hernesto
Tema: SWEBOK V4
Presentado por:
Arroyo Parado, Victor Alex
Navarro Chacon, Miluska
Ramos Felix, Bruno Jesus
Pariona Trujillo, Kevin
Quispe Poma, Gloria María
LIMA – PERÚ
2022
1) Capítulo 7: Software Maintenance (Mantenimiento de Software)
El desarrollo exitoso de software resulta en un producto que cumple con los requisitos
del usuario. Sin embargo, el software debe evolucionar debido a cambios en los
requisitos, defectos descubiertos y nuevos entornos operativos. El mantenimiento del
software es una parte integral del ciclo de vida del software, pero históricamente ha
recibido menos atención que el desarrollo. Sin embargo, esto está cambiando con la
adopción de prácticas de DevOps. El mantenimiento del software se define como las
actividades necesarias para brindar soporte económico al software en operación, y se
realiza durante la etapa de pre-entrega y post-entrega. Las actividades incluyen
planificación, mantenibilidad, vigilancia, modificación, capacitación y operación. El
Área de Conocimiento de Mantenimiento de Software está relacionada con otros
aspectos de la ingeniería de software y está vinculada a todas las demás áreas de
conocimiento en la Guía SWEBOK.
- Conceptos principales del mantenimiento de software:
Se puede describir los conceptos principales del mantenimiento de software y cómo se
relacionan entre sí:
El mantenimiento de software se refiere a las actividades realizadas para mantener un
programa de computadora después de su lanzamiento. El mantenimiento puede
dividirse en tres categorías principales:
- Mantenimiento correctivo: se enfoca en corregir errores y fallas en el software
que se han descubierto después de su lanzamiento.
- Mantenimiento adaptativo: se enfoca en hacer cambios en el software para
adaptarlo a nuevas situaciones, como cambios en los requisitos del usuario o
en el entorno en el que se utiliza el software.
- Mantenimiento perfectivo: se enfoca en mejorar la calidad del software sin
cambiar su funcionalidad.
Además, el mantenimiento de software también puede incluir otras actividades, como
la documentación del software, la eliminación de código obsoleto y la optimización
del rendimiento.
Para llevar a cabo estas actividades de mantenimiento, es necesario seguir un proceso
que incluya la identificación de problemas, la evaluación de alternativas de solución,
la implementación de las soluciones y la verificación de que los problemas se han
resuelto correctamente.
1.1. Fundamentos del Mantenimiento de Software
El desglose de temas para el Área de Conocimiento (KA) de Mantenimiento de
Software. Incluye fundamentos del mantenimiento de software, definiciones y
terminología, categorías de mantenimiento, y procesos y técnicas propias del
mantenimiento. El objetivo del mantenimiento de software es modificar el software
existente mientras se preserva su integridad, y se comparte conocimiento y
herramientas con el desarrollo y la operación de software.
1.2. Naturaleza del Mantenimiento de Software
El Mantenimiento de Software asegura la sostenibilidad del producto a lo largo de su
ciclo de vida, incluyendo monitoreo, modificación, pruebas y soporte a los usuarios.
Los mantenedores pueden aprender del conocimiento de los desarrolladores y
operadores para reducir los costos y esfuerzos de mantenimiento. Sin embargo, puede
haber desafíos adicionales cuando los mantenedores se unen al proyecto después de
que los desarrolladores iniciales hayan dejado el proyecto. Es importante que los
mantenedores comprendan y utilicen los artefactos de desarrollo, y los evolucionen y
mantengan a lo largo del tiempo.
1.3. Necesidad de Mantenimiento de Software
El mantenimiento de software es necesario para asegurar que el software continúe
satisfaciendo los requisitos del usuario a lo largo de su ciclo de vida. El
mantenimiento es necesario sin importar el tipo de modelo de ciclo de vida del
software utilizado para desarrollarlo (por ejemplo, cascada o Agile). Los productos de
software cambian como resultado de acciones correctivas y no correctivas. El
mantenimiento de software se realiza típicamente para corregir fallas y defectos
latentes, mejorar el diseño o rendimiento del software en operación, implementar
mejoras, ayudar a los usuarios a comprender la funcionalidad del software, adaptarse
a cambios en sistemas o infraestructura con los que se interfaz, prevenir amenazas de
seguridad, remediar la obsolescencia técnica de elementos del sistema o software, y
retirar el software cuando sea necesario.
1.4. Costos de mantenimiento de software
Existen varios costos asociados al mantenimiento de un software, que incluyen:
● Costos de corrección de errores: estos costos surgen cuando se detectan
errores en el software y se requiere la corrección de los mismos. Estos costos
pueden incluir el tiempo de los desarrolladores para identificar y corregir el
error, así como el tiempo de pruebas y validación para asegurarse de que el
error ha sido solucionado correctamente.
● Costos de mejoras y actualizaciones: estos costos surgen cuando se necesita
agregar nuevas características o funcionalidades al software existente o
cuando se deben realizar actualizaciones para mantener el software compatible
con nuevas tecnologías y sistemas operativos.
● Costos de documentación: estos costos surgen cuando se requiere documentar
el software existente para su mantenimiento y futuras actualizaciones. Esto
puede incluir la creación de manuales de usuario, guías de referencia técnica,
documentación de código fuente, entre otros.
● Costos de pruebas: estos costos surgen cuando se requiere probar el software
después de cualquier corrección o actualización para asegurarse de que el
software sigue funcionando correctamente.
● Costos de personal: estos costos surgen por la necesidad de contratar personal
adicional para llevar a cabo las tareas de mantenimiento del software. Esto
puede incluir desarrolladores, analistas de pruebas, documentadores, entre
otros.
● Costos de hardware: estos costos surgen cuando se necesita actualizar o
mejorar el hardware necesario para el funcionamiento del software, como
servidores, sistemas de almacenamiento, entre otros.
En resumen, el costo del mantenimiento de un software puede variar dependiendo del
tipo y complejidad del software, así como de las necesidades y requerimientos de la
organización que lo utiliza.
1.5. Evolución del software
El mantenimiento del software ha evolucionado a lo largo de las últimas décadas.
Inicialmente, el mantenimiento se enfocó en la corrección de errores y el
mantenimiento preventivo para evitar problemas futuros. A medida que el software se
volvió más complejo, se hizo necesario el mantenimiento adaptativo, que implicaba la
adaptación del software a los cambios en el entorno. El mantenimiento perfectivo se
centró en la mejora del software para satisfacer mejor las necesidades de los usuarios.
El mantenimiento evolutivo se centró en la adaptación del software a los cambios en
los requisitos y en la evolución de la tecnología. Con la llegada de Internet, se hizo
necesario el mantenimiento web, que se centraba en el mantenimiento de sitios web y
aplicaciones web. En la actualidad, el mantenimiento del software se ha vuelto más
integral y se enfoca en el ciclo de vida completo del software, desde el diseño hasta la
implementación y el mantenimiento continuo. En general, la evolución del
mantenimiento del software ha estado impulsada por la necesidad de mantener el
software actualizado y relevante para satisfacer las necesidades de los usuarios y el
entorno cambiante.
1.6. Categorías de mantenimiento del software
Existen diferentes categorías de mantenimiento del software, cada una de ellas con
objetivos y enfoques específicos para garantizar que el software se mantenga
actualizado y funcione de manera óptima. A continuación, se describen algunas de las
categorías más comunes:
Mantenimiento correctivo: esta categoría se enfoca en corregir errores o defectos en
el software que afectan su funcionamiento. El objetivo es identificar y solucionar los
problemas lo antes posible para garantizar que el software siga funcionando
correctamente.
Mantenimiento preventivo: esta categoría se enfoca en prevenir problemas futuros
mediante la identificación y solución de posibles problemas antes de que se
conviertan en errores. Esto puede incluir la actualización de software obsoleto, la
limpieza de bases de datos y la optimización del rendimiento.
Mantenimiento adaptativo: esta categoría se enfoca en adaptar el software a
cambios en el entorno, como cambios en el hardware o en las regulaciones
gubernamentales. El objetivo es garantizar que el software siga funcionando
correctamente y se adapte a las condiciones cambiantes.
Mantenimiento perfectivo: esta categoría se enfoca en mejorar el software para
satisfacer mejor las necesidades de los usuarios. Esto puede incluir la mejora de la
interfaz de usuario, la optimización del rendimiento y la actualización de
características.
Mantenimiento evolutivo: esta categoría se enfoca en adaptar el software a los
cambios en los requisitos del usuario o en la tecnología. El objetivo es garantizar que
el software siga siendo relevante y útil para los usuarios en un entorno en constante
evolución.
Mantenimiento de sitios web y aplicaciones web: Esta categoría se enfoca en el
mantenimiento de sitios web y aplicaciones web para garantizar que estén
actualizados y funcionando correctamente. Esto puede incluir la actualización de
contenido, la corrección de errores y la optimización del rendimiento.
En general, estas categorías de mantenimiento del software son esenciales para
garantizar que el software siga siendo funcional y relevante en un entorno en
constante evolución.
2. Procesos del mantenimiento del software
El mantenimiento del software es un proceso continuo que se lleva a cabo para
asegurar que el software se mantenga actualizado y en funcionamiento de manera
efectiva. Los procesos del mantenimiento del software incluyen:
Análisis de los problemas: El primer paso en el mantenimiento del software es
identificar los problemas que se han presentado en el software. Esto puede incluir
problemas de funcionalidad, problemas de rendimiento o errores en el código.
Evaluación de la importancia de los problemas: Una vez que se han identificado
los problemas, es importante evaluar la importancia de cada uno de ellos. Esto se hace
para determinar cuáles son los problemas que deben ser abordados primero y cuáles
pueden ser resueltos más tarde.
Planificación del mantenimiento: Una vez que se han evaluado los problemas, se
debe planificar el mantenimiento del software. Esto puede incluir la asignación de
recursos, la definición de plazos y la selección de las herramientas adecuadas para
realizar las tareas de mantenimiento.
Corrección de errores: El proceso de corrección de errores es uno de los aspectos
más importantes del mantenimiento del software. Esto implica la identificación y
corrección de los errores en el código para asegurarse de que el software funcione
correctamente.
Actualización del software: El software necesita ser actualizado regularmente para
asegurarse de que esté al día con los avances tecnológicos y los cambios en las
necesidades del usuario. La actualización del software puede incluir la introducción
de nuevas características, mejoras de rendimiento y corrección de errores.
Pruebas y verificación: Una vez que se han realizado las correcciones y
actualizaciones, es importante realizar pruebas y verificaciones para asegurarse de que
el software funciona correctamente y no ha introducido nuevos errores.
Documentación: Finalmente, es importante documentar todos los cambios realizados
en el software durante el proceso de mantenimiento. Esto asegura que el software se
pueda mantener de manera efectiva y se pueda comprender su evolución a lo largo del
tiempo.
3. Técnicas del mantenimiento del software
3.1. Comprensión del programa
Los programadores dedican mucho tiempo a leer y comprender programas para poder
implementar cambios. Los navegadores de código son herramientas clave para la
comprensión de programas y se utilizan para organizar y presentar el código fuente.
Además, una documentación clara y concisa también ayuda a la comprensión de
programas.
3.2. Reingeniería de software
La reingeniería de software implica modificar el software para reconstruirlo en una
nueva forma. La refactorización es una técnica que busca reorganizar el programa sin
cambiar su comportamiento para mejorar su estructura y mantenibilidad. En el
desarrollo ágil de software, la refactorización continua ayuda a mantener la calidad y
confiabilidad del código mientras se gestiona la complejidad del sistema y se mejora
la productividad del desarrollador.
3.3. Ingeniería inversa
La ingeniería inversa es el proceso de analizar software para identificar sus
componentes y relaciones, creando representaciones del software en otra forma o
nivel de abstracción. La ingeniería inversa es pasiva y no produce nuevo software,
sino que genera representaciones gráficas de diferentes artefactos de software. Esto
incluye la recuperación de diseños y datos, y la re-documentación de software. Las
herramientas de ingeniería inversa son importantes para estas tareas y la visualización
de software es una técnica común utilizada para explorar, analizar y entender la
estructura de los sistemas de software y su evolución. Estas herramientas también
incluyen características de aseguramiento de calidad, como cálculo de métricas de
calidad, estimación de deuda técnica y detección de malas prácticas de diseño y
codificación.
3.4. Integración continua, entrega, prueba e implementación
Automatizar tareas de desarrollo, operación y mantenimiento ahorra recursos y es más
rápido, fácil y confiable que hacerlas manualmente. La automatización se logra
mediante herramientas y prácticas de DevOps que combinan recursos y
procedimientos de desarrollo, operaciones y mantenimiento para realizar la
integración continua (CI), la entrega continua (CD), la prueba continua y el
despliegue continuo. La CI fusiona continuamente los artefactos, incluidas las
actualizaciones de código fuente, en una línea principal compartida para detectar
errores de integración lo antes posible. La CD permite el lanzamiento frecuente de
nuevos sistemas a través del uso de herramientas automatizadas, y la prueba continua
evalúa la calidad del software en cada etapa del proceso de entrega continua. La
implementación continua es el proceso automatizado de implementar cambios en
producción al verificar las características y validaciones previstas para reducir el
riesgo.
4. Herramientas del mantenimiento del software
Este tema abarca herramientas que son particularmente importantes en el
mantenimiento de software cuando se modifica el software existente. Las
herramientas de mantenimiento están interrelacionadas con las herramientas de
desarrollo y operaciones. Juntos, forman parte del SEE. A continuación, se presentan
algunos ejemplos de herramientas de mantenimiento:
● Herramientas de gestión de configuración, control de versiones y revisión de
código.
● Herramientas de prueba de software.
● Herramientas de evaluación de calidad de software (para evaluar la deuda
técnica y la calidad del código).
● Programas "slicers", que seleccionan solo las partes de un programa afectadas
por un cambio.
● Analizadores estáticos, que permiten ver y resumir el contenido de un
programa de manera general.
● Analizadores dinámicos, que permiten al mantenedor rastrear la trayectoria de
ejecución de un programa.
● Analizadores de flujo de datos, que permiten al mantenedor rastrear todos los
posibles flujos de datos de un programa.
● Cruce de referencias, que generan índices de componentes del programa.
● Analizadores de dependencias, que ayudan a los mantenedores a analizar y
comprender las interrelaciones entre los componentes de un programa.
● Las herramientas de ingeniería inversa apoyan el proceso al trabajar hacia
atrás desde un producto existente para crear artefactos como descripciones de
especificaciones y diseño, que luego se pueden transformar para generar un
nuevo producto a partir de uno antiguo. Los mantenedores también utilizan
pruebas de software, SCM, documentación de software y herramientas de
medición de software.
2) Capítulo 8: Software Configuration Management (Gestión de Configuración de
Software)
La gestión de configuración de software (SCM) es un proceso que se aplica a lo largo
del ciclo de vida del software para asegurar la integridad y corrección de los
elementos de configuración (CIs). SCM se define como una disciplina que aplica
dirección técnica y administrativa y vigilancia para identificar y documentar las
características funcionales y físicas de un elemento de configuración, controlar
cambios en esas características, registrar y reportar el procesamiento de cambios y el
estado de implementación, y verificar el cumplimiento de requisitos especificados.
SCM respalda las actividades de gestión de proyectos, desarrollo y mantenimiento,
actividades de aseguramiento de la calidad (QA) y los clientes y usuarios del producto
final.
2.1. Gestión del Proceso SCM
La Gestión de Configuración del Software (SCM) controla la evolución e integridad
de un producto identificando sus elementos (conocidos como CI); gestionando y
controlando los cambios; y verificando, registrando e informando sobre la
información de configuración. Desde la perspectiva del ingeniero de software, SCM
facilita las actividades de desarrollo e implementación de cambios. Una
implementación exitosa de SCM requiere una planificación y gestión cuidadosas, que
a su vez requieren una sólida comprensión del contexto organizacional y de las
limitaciones impuestas en el diseño e implementación del proceso de SCM. El plan de
SCM puede ser desarrollado una vez para la organización y luego ajustado según sea
necesario para proyectos individuales.
2.2. Identificación de configuración de software
Se encarga de identificar los elementos que deben ser controlados, establecer
esquemas de identificación para los elementos y sus versiones, y establecer las
herramientas y técnicas que se utilizarán para adquirir y gestionar los elementos
controlados. Veamos algunas actividades:
Identificación de elementos a controlar: Esto implica comprender la configuración
de software en el contexto del sistema, seleccionar los elementos de software que se
consideran SCIs y desarrollar una estrategia para etiquetar los elementos de software.
Identificadores y atributos de elementos de configuración: La actividad de
contabilidad de estado recopila información sobre los CIs durante su desarrollo,
incluyendo identificadores únicos y versiones.
Identificación de línea de base: Un "software baseline" es una versión formalmente
aprobada de un CI, que se designa y fija en un momento específico durante el ciclo de
vida del CI. Una "baseline", con todos los cambios aprobados, representa la
configuración aprobada actual.
Atributos de línea base: Los atributos de línea base se utilizan en la actividad de
contabilidad de estado. Incluyen lo siguiente:
Definición del esquema de relaciones: Es necesario el intercambio de información y
la interoperabilidad para soportar los tipos de relaciones aplicables. La actividad de
contabilidad de estado es responsable de recopilar información sobre las relaciones
entre los CI.
Bibliotecas de software: La biblioteca de medios definitiva es crucial en el proceso
de administración de versiones, ya que contiene las líneas base de lanzamiento de los
artefactos que se pueden implementar en diferentes sistemas. La seguridad es un
aspecto clave de la gestión de la biblioteca, ya que debe garantizar el control de
acceso y las instalaciones de respaldo.
2.3. Control de cambios de configuración de software
Se encarga de los cambios necesarios en los elementos de configuración (CI) durante
el ciclo de vida del software. Se cubren el proceso para determinar qué cambios hacer,
la autoridad para aprobar ciertos cambios, el apoyo para implementar esos cambios y
el concepto de desviaciones.
Solicitud, evaluación y aprobación de cambios de software: El primer paso en la
gestión de cambios en elementos controlados es determinar qué cambios hacer. El
proceso de solicitud de cambio de software (SCR) proporciona procedimientos
formales para enviar y registrar CR; evaluar el costo potencial y el impacto de un
cambio propuesto; y aceptar, modificar, diferir o rechazar el cambio propuesto.
Figura 1: Proceso de solicitud de cambio de software
Implementación de cambios de software: Los SCRs aprobados se implementan
siguiendo los procedimientos de software definidos y se rastrea su incorporación a
versiones y líneas de base específicas. Los cambios completados se someten a
auditorías de configuración y verificación de calidad del software para asegurarse de
que solo se hayan realizado cambios aprobados.
Desviaciones y renuncias: Provisiones o especificaciones en un proyecto de
ingeniería de software pueden ser imposibles de cumplir en cierto punto del ciclo de
vida. Las desviaciones y exenciones son autorizaciones escritas para apartarse de
ciertos requisitos de diseño o rendimiento en un número específico de unidades o
periodo de tiempo. Se utiliza un proceso formal para obtener la aprobación de estas
desviaciones o exenciones.
2.4. Contabilidad de estado de configuración de software
La SCSA es una actividad del CM que implica registrar y reportar información
necesaria para gestionar una configuración de manera efectiva en relación a los CI,
líneas base y sus relaciones. Se deben seguir esquemas lógicos definidos para
identificar los CI, líneas base y relaciones y recopilar información.
Información sobre el estado de la configuración del software
La actividad SCSA diseña y opera un sistema para capturar, verificar, validar e
informar la información necesaria a medida que avanza el ciclo de vida. La
información y medidas de SCSA son necesarias para respaldar el proceso de SCM y
satisfacer las necesidades de informes de estado de configuración de la gestión, la
ingeniería de software, la seguridad, el rendimiento y otras actividades relacionadas.
Los tipos de información disponibles incluyen, pero no se limitan a, los siguientes:
• Identificación de configuración continua y aprobada
• Estado actual de implementación de cambios
• CI afectados y sistemas relacionados
• Desviaciones y excepciones
• Actividades de verificación y validación (V&V)
Informes de estado de configuración de software
La información reportada puede ser utilizada por diversos elementos organizacionales
y de proyectos, incluyendo el equipo de desarrollo, operaciones, seguridad, el equipo
de mantenimiento, la gestión de proyectos, los equipos de actividades de calidad de
software y otros. El SCM moderno incluye un alcance más amplio de información,
que incluye, entre otros:
• Indicadores de integridad (por ejemplo, MAC (Código de Autenticación de
Mensajes), SHA1 (Algoritmo de Hash Seguro), MD5 (Resumen de Mensaje))
• Indicadores de estado de seguridad (por ejemplo, riesgo de gobernanza y
cumplimiento)
• Evidencia de actividades de V&V (por ejemplo, cumplimiento de requisitos)
• Estado de la línea base
• El número de CR por SCI
• El tiempo promedio necesario para implementar un CR
2.5. Auditoría de configuración de software
Una auditoría de software es un examen independiente para evaluar la conformidad
técnica, legal y de seguridad de un producto de trabajo. Cada auditoría es
cuidadosamente planificada y puede requerir varias personas para realizar tareas en un
tiempo corto.
Auditoría de Configuración Funcional del Software: La FCA de software asegura
que el elemento de software auditado sea consistente con sus especificaciones
gubernamentales. La salida de las actividades de verificación y validación del
software (consulte la KA de Calidad del Software) es una entrada clave para esta
auditoría.
Auditoría de Configuración Física del Software: La PCA de software asegura que
el diseño y la documentación de referencia sean consistentes con el producto de
software construido.
Auditorías en Proceso de una Línea de Base de Software: Se pueden llevar a cabo
auditorías durante el proceso de desarrollo para investigar el estado de elementos de
configuración específicos.
2.6. Gestión y entrega de versiones de software
Se requiere recrear versiones específicas y empaquetar los materiales correctos para la
entrega de cada versión. La biblioteca de software es clave para realizar tareas de
lanzamiento y entrega.
Construcción de software
La construcción de software construye las versiones correctas de los elementos de
configuración de software (SCIs), utilizando los datos de configuración apropiados,
en un paquete de software para su entrega a un cliente u otro destinatario, como un
equipo que realiza pruebas.
Gestión de la liberación de software
La gestión de lanzamiento de software engloba la identificación, empaquetado y
entrega de los elementos de un producto (por ejemplo, un programa ejecutable,
documentación, notas de lanzamiento o datos de configuración). Dado que los
cambios en el producto pueden ocurrir continuamente, una preocupación para la
gestión de lanzamiento es determinar cuándo emitir un lanzamiento.
2.7. Herramientas de gestión de configuración de software
Existen diversas herramientas para la gestión de configuración de software que tienen
diferentes alcances según su uso y para lograr una gestión eficaz, es importante
integrar la CM con otros procesos y herramientas.
Visión general de herramientas:
● El sistema de gestión de configuración (CMS) proporciona tecnología y lógica
habilitadoras para facilitar las actividades de CM.
● El control de versiones almacena el código fuente, los archivos de
configuración y los artefactos relacionados.
● Se establece la automatización de compilación (canalización) para permitir la
entrega continua.
● Un repositorio almacena archivos binarios que se crean durante el proceso de
compilación para extraer los artefactos de compilación más recientes y volver
a implementarlos según sea necesario, utilizados en el proceso de verificación
de la versión.
● Base de datos de gestión de configuración (CMDB) o almacén de persistencia
similar.
● Herramientas de control de cambios.
● Herramientas de lanzamiento/implementación.