INTRODUCCIÓN
La calidad de software en una empresa constituye un elemento diferenciador de competitividad y de imagen frente a sus clientes (Piattini, y otros, 2008; Irrazábal, 2015). Tanto la calidad del producto como la del proceso, son los aspectos más importantes actualmente en el desarrollo de software (Ebert, 2009; Irrazábal, 2015; Mendoza, 2018). Por este motivo los proyectos centran esfuerzos en gestionar la calidad del software usando modelos, normas, métricas, herramientas y estándares de referencia. La Norma Cubana ISO/IEC 25010: 2016 propone el modelo de calidad del producto con ocho características: adecuación funcional, eficiencia de desempeño, compatibilidad, usabilidad, fiabilidad, seguridad, mantenibilidad y portabilidad (NC ISO/ IEC 25010, 2016). La mantenibilidad se define como: la facilidad con la que un sistema o componente de software puede ser trasformado para corregir fallos, obtener un mejor rendimiento o adaptarse a un entorno cambiante (IEEE, 1990; Arya, 2014; Soni, 2015; Abdullah, 2015; Dohmen, y otros, 2016; Pardo, 2018).
La mantenibilidad es el grado de efectividad, eficacia o eficiencia con la que un producto puede ser modificado (NC ISO/ IEC 25010, 2016; Calabrese, 2018; Pardo, 2018). Se considera un atributo de calidad particularmente interesante, ya que las actividades de mantenimiento representan el mayor costo en el desarrollo del software (Sommerville, 2001; Erazo, y otros, 2015; NC ISO/ IEC 25010, 2016). Realizar más esfuerzo durante el ciclo de vida para hacer que el software sea mantenible, puede reducir significativamente el total de los costos (Erazo, y otros, 2016). Por tanto, se puede afirmar que el aumento de la mantenibilidad es un requisito económico importante para las empresas con grandes sistemas de información (English, y otros, 2016). La falta de mantenibilidad del producto, está identificada por la escasa atención a los principales factores: complejidad, malas prácticas en la codificación, estructura no estandarizada y documentación no disponible (I. Gonzalez, y otros, 2019).
Para obtener evidencias empíricas sobre el impacto de la mantenibilidad, se realizó una encuesta en dos entidades desarrolladoras de software. Los resultados obtenidos mostraron que el 37% reconoce que en los proyectos en los que ha trabajado, no se definen los requisitos de mantenibilidad. El 60% afirma que la mantenibilidad debe gestionarse desde etapas tempranas en el ciclo de vida del software, para evitar consecuencias negativas. Un 50% de los encuestados asegura que si no se gestiona aumenta la dificultad para encontrar los fallos en el software, mientras que el 43% reconoce costos elevados de mantención y software poco reusable. Los problemas observados durante la investigación se deben en gran medida a la falta de buenas prácticas, por ejemplo: el 70% de los encuestados expresó la necesidad de capacitar a los equipos de desarrollo en temas de mantenibilidad, un 60% planteó que se debe incluir esta característica durante todo el ciclo de desarrollo y para realizar las tareas, disponer de la persona que creó originalmente el software.
Los problemas constatados a partir de la revisión de la literatura, así como evidencias empíricas, llevaron a elaborar un proceso para la gestión de la mantenibilidad desde etapas tempranas en el ciclo de vida de desarrollo de software. Describiendo las actividades que se deben realizar en las disciplinas ingenieriles: Modelado de negocio, Requisitos, Análisis y diseño, Implementación y Pruebas. Estas actividades están asociadas a los factores que influyen en cada una de las sub-características de mantenibilidad planteadas por la Norma Cubana ISO/IEC 25010: 2016 (NC ISO/ IEC 25010, 2016).
MÉTODOS O METODOLOGÍA COMPUTACIONAL
Luego de realizada la encuesta para la evaluación del comportamiento de la mantenibilidad, se continuó la investigación con una revisión de la literatura. La bibliografía analizada abordaba los temas referentes a la gestión de la mantenibilidad, con el objetivo de identificar cómo diferentes investigadores trabajan la temática. El análisis bibliográfico confirmó que varios autores abordaban el aseguramiento y control de la mantenibilidad, lo que se pudo constatar por la abundante bibliografía encontrada, evidenciando la relevancia de la temática tratada en el presente artículo. Se identificaron 46 publicaciones cuyos temas especificaban la mantenibilidad, de ellas se consideraron relevantes para la presente investigación 15. De los trabajos seleccionados siete son publicaciones en revistas referenciadas, dos son libros pertenecientes a la literatura clásica relacionada con la materia y seis son tesis.
De la revisión bibliográfica resaltaron cinco artículos de los autores Irrazábal, Erazo y Rodríguez, que presentaban diferentes propuestas para evaluar, certificar y gestionar la mantenibilidad. En estas publicaciones se examinaban las sub-características de mantenibilidad planteadas por la ISO/IEC 25010: 2011, los factores y las buenas prácticas para el proceso de desarrollo de software, teniendo en cuenta el aumento de la mantenibilidad. Después de identificados los factores que influyen en las sub-características, se procedió a clasificarlos por disciplinas ingenieriles, teniendo en cuenta las propuestas por la metodología de desarrollo AUP-UCI (Informáticas, 2015). Esta metodología es la encargada de estandarizar las actividades de desarrollo en la Universidad de las Ciencias Informáticas.
RESULTADOS Y DISCUSIÓN
Reconociendo el impacto que tienen los factores de mantenibilidad sobre la calidad del producto de software. Se realizó una clasificación de estos, teniendo como referencia los modelos presentados por los autores (Rodríguez, 2015; Erazo, 2015; Irrazábal, 2015; Erazo, 2016). Primeramente, los factores se relacionaron de acuerdo a su influencia en las sub-características de mantenibilidad planteadas por la Norma Cubana ISO/IEC 25010: 2016 (NC ISO/ IEC 25010, 2016). Tomando como referencia las definiciones tanto de los factores como de las sub-características a las que afectan. La segunda parte de la clasificación se efectuó vinculando los factores con las disciplinas ingenieriles: Modelado de negocio, Requisitos, Análisis y diseño, Implementación y Pruebas, como se puede observar en la Tabla 1.
La clasificación constituyó un aporte significativo para la creación de las actividades correspondientes al proceso para la gestión de la mantenibilidad. También se utilizó como base para la elaboración de la propuesta de requisitos no funcionales de mantenibilidad que seguidamente se presenta.
Propuesta de requisitos no funcionales de mantenibilidad
Para facilitar la identificación de los requisitos no funcionales de mantenibilidad (RNFM), se tuvo como premisa la clasificación realizada y los umbrales propuestos por la herramienta SonarQube. Esta herramienta se usa para medir la mantenibilidad del código fuente (SonarQube, 2019). Los resultados de otras investigaciones muestran que al incorporar SonarQube al desarrollo se mejora la mantenibilidad (González-Carvajal, y otros, 2019). Los requistos propuestos se agrupan de acuerdo a las sub-características:
Modularidad
RNFM 1: Garantizar una baja complejidad entre las clases y los módulos.
RNFM 2: Lograr un acoplamiento bajo entre los módulos en las disciplinas de diseño e implementación.
RNFM 3: Mantener un alto grado de cohesión entre las clases del sistema.
Reusabilidad
RNFM 4: Usar excepciones en el código.
RNFM 5: Aplicar reglas de programación y optimización de código.
RNFM 6: Descomponer el sistema en pequeñas partes de funcionalidades.
Analizabilidad
RNFM 7: Mantener el porciento de código duplicado por debajo del 5%.
RNFM 8: Garantizar que la densidad de comentarios esté entre el 30% y el 40%.
Modificabilidad
RNFM 9: Garantizar la documentación actualizada.
RNFM 10: Asignar nombres a las variables consecuentes con la función que realizan.
Testabilidad
RNFM 11: Utilizar herramientas automatizadas como SonarQube.
RNFM 12: Mantener disponibles y actualizados los diseños de casos de prueba.
RNFM 13: Utilizar sentencias de código de fácil lectura.
Después de identificados los requisitos surgieron las actividades encaminadas al cumplimiento de estos. Las actividades junto a los roles, los artefactos de entrada y salida, forman en su conjunto el proceso para la gestión de la mantenibilidad que se describen a continuación.
Descripción del proceso para la gestión de la mantenibilidad
El proceso para gestionar la mantenibilidad desde etapas tempranas incluye los factores que influyen en las sub-características planteadas por la Norma Cubana ISO/IEC 25010: 2016. Describe las actividades en las fases: Inicio, Ejecución y Cierre; y las disciplinas ingenieriles propuestas por la metodología AUP-UCI (Informáticas, 2015). En las Figura 1 y Figura 2 se presentan las actividades correspondientes a la Fase de Inicio y a las disciplinas: Modelado de negocio, Análisis y diseño e Implementación, pertenecientes a la fase de Ejecución.
En las Figura 3 y Figura 4 se observan las actividades de las disciplinas: Pruebas internas, Pruebas de liberación y Pruebas de aceptación, así como la actividad de la fase de Cierre.
En la Tabla 2 se definen los roles, así como los artefactos de entrada y salida para las actividades presentadas anteriormente.
La correcta gestión de la mantenibilidad incrementa las facilidades de modificación, al obtener productos de software con documentación actualizada y suficientes comentarios en el código. Provee beneficios en la reducción de los costos y recursos destinados a los cambios que se producen durante la fase de mantenimiento. El proceso para gestionar la mantenibilidad desde las fases tempranas, aumenta el valor de los proyectos y propicia la adaptación del producto a los cambios propios de la evolución en el desarrollo de software.
Descripción de los roles
Para la realización de las actividades del proceso y como propuesta del estudio de la problemática, surgió la idea de definir un conjunto de roles. Primeramente, se analizaron los definidos en el grupo Ingenieril y se detallaron sus responsabilidades durante el desarrollo de software. Se brindó especial atención a la definición de las tareas correspondientes a la gestión de la mantenibilidad. Algunas de las responsabilidades se modificaron, con el objetivo de garantizar que las actividades planteadas tuvieran un responsable para su ejecución (Blanco, 2013; Informáticas, 2015; UCI, 2017; Benítez, 2018; González, 2019):
Jefe de proyecto:
Participa en la definición del plan de mantenibilidad con las actividades y tareas concernientes a su gestión.
Revisa los elementos del negocio con el cliente, analizando los factores que se tendrían presente para la gestión de la mantenibilidad.
Analista:
Captura las necesidades de los clientes y las transforma en requisitos.
Realiza el modelado del negocio, diseña las pruebas, modela las vistas de la arquitectura y el diseño teniendo en cuenta los RNFM.
Participa en la capacitación con respecto a los temas de mantenibilidad.
Arquitecto de software:
Elabora el documento de arquitectura de software, participa en la RTF y gestiona los cambios en la arquitectura.
Participa en la capacitación de mantenibilidad, modela las vistas de la arquitectura y el diseño teniendo en cuenta los RNFM.
Prepara el entorno tecnológico para la gestión de los RNFM y las pruebas de mantenibilidad.
Administrador de la calidad:
Guía el diseño y la ejecución de las pruebas, monitorea la solución de las no conformidades y solicitudes de cambio.
Planifica la gestión de los RNFM y organiza la capacitación de mantenibilidad.
Participa en las pruebas de mantenibilidad y evalúa el cumplimiento de los RNFM.
Administrador de la configuración:
Planea el proceso de administración de la configuración y crea las líneas base.
Participa en la capacitación con respecto a los temas de mantenibilidad.
Prepara el entorno tecnológico para la gestión de los RNFM y las pruebas de mantenibilidad.
Equipo de Desarrollo:
Participa en la capacitación de mantenibilidad y realiza seguimiento de los RNFM.
Implementa los componentes del producto teniendo en cuenta los RNFM.
Comité de Control de Cambios (CCC):
CONCLUSIONES
La clasificación de los factores por sub-características de mantenibilidad, favoreció la identificación de los requisitos no funcionales y la elaboración del proceso propuesta. Se elaboró un proceso para la gestión de la mantenibilidad desde etapas tempranas, teniendo en cuenta las fases del ciclo de vida del software, con las entradas y salidas para cada una de las actividades definidas por roles. La identificación de las actividades del proceso logró incluir los factores a las fases y disciplinas ingenieriles, así como a las sub-características de mantenibilidad. Se recomienda para trabajos futuros ampliar en el estudio de los factores que influyen en la mantenibilidad, así como identificar técnicas y herramientas para evaluarlos en las disciplinas de requisitos, análisis y diseño del software.