Documentos de Académico
Documentos de Profesional
Documentos de Cultura
En Ingeniería de
software: un enfoque práctico ( pp. 339 - 355 ) ( 671p. )(9a ed). Ciudad de México : McGraw Hill
Interamericana. (C100522)
CAPÍTULO
ASEGURAMIENTO
DE LA CALIDAD DEL SOFTWARE 17
El enfoque de ingeniería de software descrito en este libro busca un solo objetivo: producir
software de alta calidad a tiempo. Aun así, muchos lectores se cuestionarán lo siguiente:
"¿Qué es la calidad del software?".
ANÁLISIS BREVE
¿Qué es? No basta con decir que la calidad del soft- ware (ACS), es importante definir el significado en
ware es importante; es necesario (1) definir de manera diversos niveles de abstracción. Una vez que en-
explícita lo que queremos decir con "calidad del tienda lo que es la calidad, un equipo de software
software", (2) crear un conjunto de actividades que debe identificar un conjunto de actividades de ACS
ayuden a garantizar que todo producto de trabajo de que filtren los errores de los productos de trabajo an-
ingeniería de software exhiba una alta calidad, (3) rea- tes de aprobarlos.
lizar actividades de control y aseguramiento de cali- ¿Qué es el producto de trabajo? Se crea un plan de
dad en todos los proyectos de software, (4) usar aseguramiento de la calidad del software para definir
métricas para desarrollar estrategias que mejoren la estrategia de ACS del equipo de software. Durante
nuestro proceso del software y, como consecuencia, el modelado y la codificación, el producto de trabajo
la calidad del producto final. de ACS es el resultado de las revisiones técnicas (ca-
¿Quién lo hace? Todos los involucrados en el proceso pítulo 16). Durante las pruebas (capítulos 19 al 21), se
de ingeniería de software son responsables de la producen los planes y procedimientos de prueba.
calidad. También pueden generarse otros productos de tra-
¿Por qué es importante? Podemos hacerlo bien, o bajo asociados con la mejora del proceso.
hacerlo de nuevo. Si un equipo de software hace hin- ¿Cómo me aseguro de que lo hice bien? ¡Encuen-
capié en la calidad en todas las actividades de inge- tre los errores antes de que se conviertan en defec-
niería de software, reduce la cantidad de reelaboración tos! Esto es, trabaje para mejorar su eficiencia en la
que puede existir. Esto da como resultado menores eliminación de defectos (capítulo 23), reduciendo por
costos y, lo que es más importante, una mejora en el lo tanto la cantidad de reelaboración que su equipo
tiempo de comercialización. de software debe realizar.
¿Cuáles son los pasos? Antes de poder iniciar las ac-
tividades de aseguramiento de la calidad del soft-
339
340 PARTE TRES CALIDAD Y SEGURrDAD
Sin duda, la calidad es un concepto desafiante, que analizamos con cierto detalle en el ca-
pítulo 15. 1
Algunos desarrolladores de software siguen creyendo que la calidad es algo por lo que
comenzamos a preocuparnos después de haber generado el código. ¡Nada podría estar más
lejos de la verdad! El aseguramiento de la calidad del software (que a menudo se conoce
como gestión de calidad) es una actividad sombrilla (capítulo 2) que se aplica en todo el
proceso del software.
El aseguramiento de la calidad del software (ACS) comprende (figura 17.1): (1) un
proceso de ACS, (2) tareas específicas de aseguramiento y control de la calidad (inclui-
das las revisiones técnicas y una estrategia de pruebas multinivel), (3) una práctica efectiva
de ingeniería de software (métodos y herramientas), ( 4) el control de todos los productos de
trabajo de software y los cambios realizados en ellos (capítulo 22), (5) un procedimiento
para asegurar el cumplimiento con los estándares de desarrollo de software (cuando se
aplique) y (6) mecanismos de medición y generación de informes.
En este capítulo nos enfocamos en los aspectos de gestión y las actividades específicas
del proceso que permiten a una organización de software asegurar que haga "las cosas co-
rrectas en el momento adecuado y de la forma apropiada".
•Uh'M·1D•
Aseguramiento
de la calidad del Revisiones Métodos y
software y pruebas herramientas
Control Auditorías y
del cambio cumplimiento
Definir Medición y
generación
proceso
de informes
(capítulo 16). Su intención es descubrir errores. Las auditorías son un tipo de revisión
que el personal de ACS realiza con el propósito de asegurar que se sigan los linea-
mientos de calidad para el trabajo de ingeniería de software. Por ejemplo, podría reali-
zarse una auditoría del proceso de revisión para asegurar que las revisiones se realicen
de tal forma que exista la máxima probabilidad de descubrir errores.
Gestión del cambio. El cambio es uno de los aspectos más molestos de cualquier
proyecto de software. Si no se gestiona de manera adecuada, puede provocar confusión
y esto casi siempre conduce a una mala calidad. El ACS se asegura de que se hayan
instituido las prácticas de gestión del cambio adecuadas (capítulo 22).
Gestión del riesgo. Aunque el análisis y la mitigación del riesgo (capítulo 26) son
del interés de los ingenieros de software, la organización de ACS se asegura de que
las actividades de gestión del riesgo se realicen de manera apropiada y que se hayan
establecido planes de contingencia relacionados con el riesgo.
CAPÍTULO 17 AS E G U RAMIENTO DE LA CALIDAD DEL SOFTWARE 343
Además de cada uno de estos intereses y actividades, el ACS trabaja para asegurar que las
actividades de soporte del software (como mantenimiento, líneas de ayuda, documentación
y manuales) se realicen o produzcan con calidad como preocupación dominante.
•Ui'M·1t1 •
Aseguramiento de la Adoptar
medidas
calidad del software
para mejorar
un área de
problema
Analizar
la evaluación Proceso de
aseguramiento
de la calidad
del software Identificar
indicadores
Comparar
resultados
criterios
Se asegura de que las desviaciones en el trabajo del software y los productos de trabajo
se documenten y manipulen de acuerdo con un procedimiento documentado. Pueden
encontrarse desviaciones en el plan del proyecto, la descripción del proceso, los están-
dares aplicables o los productos de trabajo de ingeniería de software.
Además de estas actividades, el grupo de ACS coordina el control y la gestión del cambio
(capítulo 22); también ayuda a recolectar y analizar las métricas de software.
CAPÍTULO 17 ASEGURAMIENTO DE LA CALIDAD DEL SOFTWARE 345
CASASEGURA
Calidad del diseño. El equipo de software debe evaluar cada elemento del modelo
de diseño para asegurarse de que exhiba una alta calidad y que el diseño en sí se
conforme a los requerimientos. El ACS busca atributos del diseño que sean indica-
dores de calidad.
Calidad del código. El código fuente y los productos de trabajo relacionados (por
ejemplo, otra información descriptiva) deben conformarse a los estándares de codi-
ficación locales y exhibir características que faciliten la capacidad de mantenimiento.
El ACS debe aislar esos atributos que permitan un análisis razonable de la calidad
del código.
346 PARTE TRES CALl DA D Y SE GURIDAD
Efectividad del control de calidad. Un equipo de software debe aplicar los recursos
limitados de tal forma que tenga la mayor probabilidad de obtener un resultado de
alta calidad. El ACS analiza la asignación de recursos para las revisiones y pruebas,
de modo que se pueda evaluar si se están asignando de la manera más efectiva.
La tabla 17.1 (adaptada de [Hya96]) identifica los atributos que son indicadores de la exis-
tencia de la calidad para cada una de las metas antes descritas. También se muestran las
métricas que se pueden usar para indicar la fuerza relativa de un atributo.
•t.Hf.1 t&•
Metas, atributos y métricas Meta Atributo Métrica
de la calidad del software Calidad del Ambigüedad Número de modificadores ambiguos (como
Fuente: Adaptado de Hyatt, requerimiento varios, grande, amigable para el humano)
L. y Rosenberg, L., "A
Integridad Número de TBA, TBD
Software Quality Model and
Metrics for Identifying Facilidad de entendimiento Número de secciones/subsecciones
Project Risks and Assessing Volatilidad Número de cambios por requerimiento
Software Quality", NASA
SATC, 1996. Tiempo (por actividad) cuando se solicita
un cambio
Facilidad de rastreo Número de requerimientos que no se
pueden rastrear hasta el diseño/código
Claridad del modelo Número de modelos de UML
Número de páginas descriptivas por
modelo
Número de errores de UML
Calidad del diseño Integridad de arquitectura Existencia de un modelo arquitectónico
Integridad del componente Número de componentes que se rastrean
hasta el modelo de arquitectura
Complejidad del diseño procedimental
Complejidad de la interfaz Número promedio de selecciones para
llegar a una función o contenido típicos
Adecuación del esquema
Patrones Número de patrones utilizados
Calidad del código Complej idad Complejidad ciclomática
Facilidad de mantenimiento Factores de diseño
Facilidad de entendimiento Porcentaje de comentarios internos
Convenciones de nomenclatura variables
Porcentaje de componentes reutilizados
Reutilización Porcentaje reutilizado del componente
Documentación Índice de legibilidad
Efectividad del CC Asignación de recursos Porcentaje en horas de personal por
actividad
Tasa de terminación Tiempo de terminación actual vs.
presupuestado
Efectividad de la revisión Vea las métricas de revisión
Prueba de efectividad Número de errores encontrados y su
criticidad
Esfuerzo requerido para corregir un error
Origen del error
CAPÍTULO 17 ASEGURAMIENTO DE LA CALIDAD DEL SOFTWARE 347
En las secciones anteriores hemos planteado que la calidad del software es trabajo de todos
y que puede lograrse mediante una práctica de ingeniería de software competente, así como a
través de la aplicación de revisiones técnicas, una estrategia de pruebas multinivel, un mejor
control de los productos de trabajo de software y los cambios que se realizan en ellos, y la
aplicación de estándares y marcos de trabajo del proceso de ingeniería de software aceptados.
Además, la calidad puede definirse en términos de una amplia gama de atributos de calidad y
medirse (de manera indirecta) mediante el uso de una variedad de indices y métricas.
En las últimas tres décadas, un pequeño (pero expresivo) segmento de la comunidad
de ingeniería de software ha argumentado que se requiere un enfoque más formal para el
aseguramiento de la calidad del software. Es posible decir que un programa de computadora
es un objeto matemático. Pueden definirse una sintaxis y una semántica estricta para cada
lenguaje de programación; además está disponible un enfoque riguroso para la especificación
de los requerimientos del software. Si el modelo de requerimientos (especificación) y el
lenguaje de programación pueden representarse de una manera rigurosa, debería ser posible
aplicar una prueba de exactitud matemática para demostrar que un programa se conforma
exactamente a sus especificaciones.
Los intentos por demostrar que los programas son correctos no son nuevos. Dijkstra
[Dij76a] y Linger, Mills y Witt [Lin79], entre otros, defendieron las pruebas de exactitud
de los programas y las relacionaron con el uso de conceptos de programación estructurada.
Aunque los métodos formales son interesantes para algunos investigadores de ingeniería de
software, los desarrolladores comerciales raras veces usaron métodos formales en 2018.
El aseguramiento estadístico de la calidad refleja una tendencia cada vez mayor en la indus-
tria para volverse más cuantitativo en cuanto a la calidad. Para el software, el aseguramiento
estadístico de la calidad implica los siguientes pasos:
por un periodo de 1 año. Algunos de los errores se descubren a medida que se desarrolla el
software. Otros defectos se encuentran una vez que el software se libera a sus usuarios finales.
Aunque se descubren cientos de problemas distintos, todos pueden rastrearse de una
(o más) de las siguientes causas:
• Especificaciones incompletas o erróneas (EIE)
• Mala interpretación de la comunicación con el cliente (MCC)
• Desviación intencional de las especificaciones (DIE)
• Violación de los estándares de programación (VES)
• Error en la representación de los datos (ERD)
• Interfaz de componentes inconsistente (ICI)
• Error en la lógica de diseño (ELD)
• Prueba incompleta o errónea (PIE)
• Documentación imprecisa o incompleta (DII)
• Error en la traducción a lenguaje de programación del diseño (TLP)
• Interfaz humano/computadora (IHC) ambigua o inconsistente
• Misceláneos (MIS)
Para aplicar el ACS estadístico, se crea una tabla (vea la tabla 17.2) que indica que EIE,
MCC y ERD son las causas esenciales que representan el 53 % de todos los errores. Sin
embargo, es importante señalar que EIE, ERD, TLP y ELD se seleccionarían como las
causas esenciales si solo se consideraran los errores graves. Una vez determinadas las causas
esenciales, la organización de ingeniería de software puede comenzar la acción correctiva.
Por ejemplo, para corregir las causas tipo MCC podríamos implementar técnicas de reco-
pilación de requerimientos (capítulo 7) para mejorar la calidad de la comunicación con el
cliente y las especificaciones. Para mejorar las causas tipo ERD, podríamos adquirir herra-
mientas de modelado de datos y realizar revisiones de diseño de datos más estrictas.
•r.Hf.'ff•
Recolección de datos Total Graves Moderados Menores
para el ACS estadístico Error Núm. % Núm. % Núm. % Núm. %
• De.finir los requerimientos del cliente, los entregables y las metas del proyecto mediante
métodos bien definidos de comunicación con el cliente.
Si está implementado un proceso de software existente, pero se requiere una mejora, Seis
Sigma sugiere dos pasos adicionales:
• Controlar el proceso para asegurar que el trabajo en el futuro no vuelva a introducir las
causas de los defectos.
Estos pasos básicos y adicionales se conocen algunas veces como el método DMAIC (definir,
medir, analizar, mejorar y controlar).
Si una organización va a desarrollar un proceso de software (en vez de mejorar un
proceso existente), los pasos básicos se aumentan de la siguiente manera:
• Diseñar el proceso para (1) evitar las causas raíz de los defectos y (2) cumplir los re-
querimientos del cliente.
• Verificar que el modelo del proceso realmente evite los defectos y cumpla con los re-
querimientos del cliente.
A esta variación se le conoce comúnmente como el método DMADV (definir, medir, ana-
lizar, diseñar y verificar).
Es mejor dejar un análisis detallado de Seis Sigma a los recursos dedicados a este tema.
Si le interesa obtener más información al respecto, consulte [Voel8], [Pyzl4] y [Snel8].
350 PARTE TRES CALIDAD Y SEGURIDAD
en donde los acrónimos MITF y MTTR son tiempo medio para la falla y tiempo medio para
repararse, 4 respectivamente.
3 Es importante señalar que el MTBF y las medidas relacionadas se basan en el tiempo de CPU, no en
el de un reloj de pared.
4 Aunque tal vez se requiera depuración (y correcciones relacionadas) después de una falla, en muchos
casos el software funcionará de manera apropiada después de un reinicio sin ningún otro cambio.
CAPÍTULO 17 ASEGURAMIENTO DE LA CALIDAD DEL SOFTWARE 351
Muchos investigadores argumentan que el MTBF es una medida mucho más útil que
otras métricas de software relacionadas con la calidad que se analizan en el capítulo 23.
Dicho de manera simple, un usuario final se preocupa por las fallas, no por la cuenta total
de defectos. Puesto que cada defecto contenido en un programa no tiene la misma tasa de
fallas, la cuenta total de defectos indica muy poco acerca de la confiabilidad de un sistema.
Por ejemplo, considere un programa que ha estado funcionando por 3000 horas de proce-
sador sin fallas. Muchos defectos en este programa pueden permanecer sin ser detectados
durante decenas de miles de horas antes de que los descubran. El MTBF de dichos errores
misteriosos podría ser de 30,000 o incluso de 60,000 horas de procesador. Otros defectos,
que no se hayan descubierto aún, podrían tener una tasa de fallas de 4000 o 5000 horas.
Incluso si se eliminan cada uno de los errores de la primera categoría (los que tienen un
MTBF largo), el impacto sobre la confiabilidad del software es insignificante.
Sin embargo, el MTBF puede ser problemático por dos razones: ( 1) proyecta un periodo
entre fallas, pero no nos proporciona una tasa de fallas proyectada, y (2) el MTBF puede
mal interpretarse como la vida útil promedio, aun cuando esto no es lo que implica.
Una medida alternativa de confiabilidad es la de fallas en el tiempo (FIT, por sus siglas
en inglés): una medición estadística de cuántas fallas tendrá un componente durante un
mil millones de horas de operación. Por lo tanto, 1 FIT equivale a una falla por cada mil millones
de horas de operación.
Además de una medida de confiabilidad, también debemos desarrollar una medida de
disponibilidad. La disponibilidad del software es la probabilidad de que un programa funcione
de acuerdo con los requerimientos en un punto determinado en el tiempo y se define
como:
MTTF
Disponibilidad = - - - - - - - x 100%
MTTF+MTTR
s El teorema de Bayes para probabilidades condicionales es P(A 1B) = (P(B 1A) * P(A)) / P(B). Si desea
más detalles, consulte http://www.statisticshowto.com/bayes-theorem-problems/.
352 PARTE TRES CALIDAD Y SEGURIDAD
6 Este enfoque es similar a los métodos de análisis de riesgos descritos en el capítulo 26. La principal
diferencia es el énfasis en las cuestiones de tecnología en vez de temas relacionados con el proyecto.
CAPÍTULO 17 ASEGURAMIENTO DE LA CALIDAD DEL SOFTWARE 353
la cadena de eventos que pueden provocar peligros y la probabilidad de que ocurra cada
uno de los eventos para crear la cadena.
Una vez identificados y analizados los riesgos, pueden especificarse requerimientos
relacionados con la seguridad para el software. Esto es, la especificación puede contener
una lista de eventos indeseables y el sistema deseado responde a dichos eventos. Entonces
se indica el rol del software en la gestión de eventos indeseables.
Aunque la confiabilidad y la seguridad del software están relacionadas entre sí, es im-
portante entender la sutil diferencia entre ellas. La confiabilidad del software usa el análisis
estadístico para determinar la probabilidad de que ocurra una falla de software. Sin embargo,
la ocurrencia de una falla no necesariamente produce un riesgo o accidente. La seguridad
del software estudia las formas en que las fallas provocan condiciones que puedan conducir a
un accidente. Esto es, las fallas no se consideran en un vacío, sino que se evalúan en el
contexto de un sistema completo basado en computadora y su entorno.
Un análisis detallado de la seguridad del software queda más allá del alcance de este
libro. Si le interesa obtener más información sobre la seguridad del software y aspectos
relacionadas con el sistema, consulte [Fir13], [Har12a] y [Levl2].
1 Esta sección, escrita por Michael Stovsky, se adaptó de Fundamentals of ISO 9000, un libro de trabajo
desarrollado para Essential Software Engineering, un plan de estudios en video desarrollado por R. S.
Pressman & Associates, Inc. Se reimprimió con permiso.
354 PARTE TRES CA LIDAD Y SEGURIDAD
Definir una política que haga énfasis en la impor- Establecer mecan ismos de control.
tancia del sistema. Para planeación .
Documentar el sistema de calidad. Para los requerimientos del cliente.
Describir el proceso. Para actividades técnicas (como análisis, diseño,
Producir un manual operacional. pruebas).
17.10 RESUMEN
El aseguramiento de la calidad del software es una actividad sombrilla de ingeniería de
software que se aplica en cada paso del proceso del software. El ACS incorpora procedi-
mientos para la aplicación efectiva de métodos y herramientas, la supervisión de actividades
de control de calidad tales como revisiones técnicas y pruebas de software, procedimientos
para la gestión del cambio, procedimientos para asegurar el cumplimiento de los estándares,
y mecanismos de medición y generación de informes.
Para realizar el aseguramiento de la calidad del software de manera correcta, es nece-
sario recolectar, evaluar y diseminar datos acerca del proceso de ingeniería de software.
El ACS estadístico ayuda a mejorar la calidad del producto y el proceso de software en sí.
Los modelos de confiabilidad del software extienden las mediciones, lo que permite extra-
polar los datos recolectados de los defectos en tasas de falla proyectadas y predicciones de
confiabilidad.
En resumen, es importante tener en cuenta las palabras de Dunn y Ullman [Dun82]:
"El aseguramiento de la calidad del software es el mapeo de los preceptos gerenciales y las
disciplinas de diseño del aseguramiento de la calidad en el espacio gerencial y tecnológico
aplicable de la ingeniería de software". La habilidad de asegurar la calidad es la medida de
una disciplina de ingeniería madura. Cuando el mapeo se completa con éxito, el resultado
es la ingeniería de software madura.
17.3. Calidad y confiabilidad son conceptos relacionados, pero son fundamentalmente distintos en
varias formas. Comente sobre esas diferencias.
17.4. ¿Puede un programa ser correcto y de todas formas no ser confiable? Explique.
17.5. ¿Puede un programa ser correcto y de todas formas no exhibir una buena calidad? Explique.
17.6. ¿Por qué hay tensión con frecuencia entre un grupo de ingeniería de software y un grupo inde-
pendiente de aseguramiento de la calidad del software? ¿Es esto saludable?
17. 7. Le asignaron la responsabilidad de mejorar la calidad del software en su organización. ¿Qué es
lo primero que debería hacer? ¿Qué sigue después?
17.8. Además de contar errores y defectos, ¿hay otras características cuantificables del software
que impliquen calidad? ¿Cuáles son y cómo pueden medirse directamente?
17.9. El concepto de confiabilidad (tiempo medio entre fallas) MTBF está abierto a críticas. Explique
por qué.
17.10. Considere dos sistemas críticos para la seguridad que estén controlados por computadora.
Enumere al menos tres peligros para cada uno que puedan vincularse directamente con fallas de
software.