Documentos de Académico
Documentos de Profesional
Documentos de Cultura
UdmmI - Calidad del Diseño
UdmmI - Calidad del Diseño
Calidad de Software
“La calidad del producto software se puede interpretar como el grado en que dicho producto
satisface los requisitos de sus usuarios aportando de esta manera un valor. Son precisamente estos
requisitos (funcionalidad, rendimiento, seguridad, mantenibilidad, etc.) los que se encuentran
representados en el modelo de calidad, el cual categoriza la calidad del producto en características
y subcaracterísticas.”
2
Calidad de Software – ISO 25000
El modelo de calidad del producto definido por la ISO 25010 se encuentra compuesto por
las siguientes ocho características…
3
Calidad de Software – ISO 25000
Calidad del
Producto
Software
Adecuación Eficiencia de
Compatibilidad Usabilidad Fiabilidad Seguridad Mantenibilidad Portabilidad
funcional Desempeño
4
Calidad de Software – ISO 25000
Adecuación Eficiencia de
Compatibilidad Usabilidad Fiabilidad Seguridad Mantenibilidad Portabilidad
funcional Desempeño
Completitud Comportamiento
Coexistencia Inteligibilidad Madurez Confidencialidad Modularidad Adaptabilidad
funcional temporal
Capacidad de ser
Estética Responsabilidad
probado
Accesibilidad
5
Adecuación funcional (Funcionalidad)
La capacidad del producto software para proveer las funciones que satisfacen las
necesidades explícitas e implícitas cuando el software se utiliza bajo condiciones
específicas.
6
Adecuación funcional (Funcionalidad)
Completitud funcional
• Grado en el cual el conjunto de funcionalidades cubre todas las tareas y
los objetivos del usuario especificados.
Corrección funcional
• Capacidad del producto o sistema para proveer resultados correctos
con el nivel de precisión requerido.
Pertinencia funcional
• Capacidad del producto software para proporcionar un conjunto
apropiado de funciones para tareas y objetivos de usuario
especificados.
Cátedra Diseño de Sistemas – UTN BA 7
Eficiencia de desempeño
8
Eficiencia de desempeño
Comportamiento temporal
• Los tiempos de respuesta y procesamiento y los ratios de throughput de un
sistema cuando lleva a cabo sus funciones bajo condiciones determinadas en
relación con un banco de pruebas (benchmark) establecido.
Utilización de recursos
• Las cantidades y tipos de recursos utilizados cuando el software lleva a cabo su
función bajo condiciones determinadas.
Capacidad
• Grado en que los límites máximos de un parámetro de un producto o sistema
software cumplen con los requisitos.
Capacidad de dos o más sistemas o componentes para intercambiar información y/o llevar a cabo sus
funciones requeridas cuando comparten el mismo entorno hardware o software.
10
Compatibilidad
Coexistencia
• Capacidad del producto para coexistir con otro
software independiente, en un entorno común,
compartiendo recursos comunes sin detrimento.
Interoperabilidad
• Capacidad de dos o más sistemas o
componentes para intercambiar información y
utilizar la información intercambiada.
Cátedra Diseño de Sistemas – UTN BA 11
Usabilidad
La capacidad del producto software de ser entendido, aprendido, usado y atractivo al usuario, cuando
es usado bajo las condiciones especificadas.
12
Usabilidad
Adecuación
•Capacidad del producto que permite al usuario entender si el software es adecuado para sus necesidades.
Capacidad de aprendizaje
•Capacidad del producto que permite al usuario aprender su aplicación.
Estética de la interfaz
•Capacidad de la interfaz de usuario de agradar y satisfacer la interacción con el usuario.
Accesibilidad
•Capacidad del producto que permite que sea utilizado por usuarios con determinadas características y discapacidades.
Cátedra Diseño de Sistemas – UTN BA 13
Fiabilidad
Capacidad de un sistema o componente para desempeñar las funciones especificadas, cuando se usa
bajo unas condiciones y periodo de tiempo determinados
14
Fiabilidad
Madurez
• Es la capacidad del producto software para evitar fallas como resultado de errores en el software.
Disponibilidad
• Capacidad del sistema o componente de estar operativo y accesible para su uso cuando se
requiere
Tolerancia a fallos
• Es la capacidad del producto software para mantener un nivel especificado de funcionamiento en
caso de errores del software o de incumplimiento de su interfaz especificada.
Recuperabilidad
• Es la capacidad del producto software para reestablecer un nivel especificado de funcionamiento y
recuperar los datos afectados directamente en el caso de una falla.
Cátedra Diseño de Sistemas – UTN BA 15
Seguridad
16
Seguridad
Confidencialidad
• Capacidad de protección contra el acceso de datos e información no autorizados, ya sea accidental o
deliberadamente.
Integridad
• Capacidad del sistema o componente para prevenir accesos o modificaciones no autorizados a datos o
programas de ordenador.
No repudio
• Capacidad de demostrar las acciones o eventos que han tenido lugar, de manera que dichas acciones o
eventos no puedan ser repudiados posteriormente.
Responsabilidad
• Capacidad de rastrear de forma inequívoca las acciones de una entidad.
Autenticidad
• Capacidad de demostrar la identidad de un sujeto o un recurso.
Cátedra Diseño de Sistemas – UTN BA 17
Mantenibilidad
Esta característica representa la capacidad del producto software para ser modificado efectiva y
eficientemente, debido a necesidades evolutivas, correctivas o perfectivas.
18
Mantenibilidad
Modularidad
• Capacidad de un que permite que un cambio en un componente tenga un impacto mínimo en los demás.
Reusabilidad
• Capacidad de un activo que permite que sea utilizado en más de un sistema software o en la construcción
de otros activos.
Analizabilidad
• Facilidad con la que se puede evaluar el impacto de un determinado cambio sobre el resto del software,
diagnosticar las deficiencias o causas de fallos en el software, o identificar las partes a modificar.
Capacidad del producto o componente de ser transferido de forma efectiva y eficiente de un entorno
hardware, software, operacional o de utilización a otro.
20
Portabilidad
Adaptabilidad
• La capacidad del producto software para ser adaptado a diferentes entornos
definidos sin aplicar acciones o medios diferentes de los previstos para el
propósito del software considerado.
22
Cualidades de Diseño (Principales)
Cualidades de
Diseño
Extensibilidad
Mantenibilidad
23
Acoplamiento
El acoplamiento se define como el grado de dependencia entre dos componentes, es decir, el grado
de conocimiento que un componente tiene sobre el otro.
Cuanto mayor sea el acoplamiento entre dos componentes, los cambios o errores de uno de ellos
impactarán en mayor medida sobre el otro componente.
24
Acoplamiento
• Mejorar la mantenibilidad
• Aumentar la reutilización
• Evitar tener que inspeccionar y/o modificar múltiples componentes ante una modificación en uno
solo de ellos
25
Cohesión
• Un componente cohesivo tiende a tener todos sus elementos abocados a resolver el mismo
problema.
26
Simplicidad
27
Simplicidad
28
Simplicidad
29
Robustez
Nos dice que ante un uso inadecuado por parte del usuario, sistemas externos o ante fallas internas:
• El sistema debe facilitar tanto como sea posible la detección de la causa del problema
30
Flexibilidad
• Mantenibilidad: capacidad de modificar las características existentes con “el menor” esfuerzo
posible.
31
Más sobre Cualidades de Diseño…
Link
32
METRICAS de DISEÑO
33
¿Que es una metrica ?
Una métrica de diseño de software es una medida cuantitativa o cualitativa que se utiliza para evaluar
aspectos específicos del diseño de un sistema de software. Estas métricas son herramientas
importantes para evaluar la calidad, la eficiencia y la mantenibilidad del diseño de un software, así
como para identificar áreas de mejora y seguir el progreso del proyecto.
34
EJEMPLOS DE MÉTRICAS
REFERENTE A ATRIBUTOS DE CALIDAD ISO 25000
Mantenibilidad: Fiabilidad: Portabilidad:
● Índice de Cohesión: ● Tasa de Fallas: ● Cantidad de Plataformas
Mide qué tan Número de veces que el Soportadas:
relacionadas están las software falla durante un Cuantas más plataformas
partes de un módulo. período de tiempo soporte el software, mayor
determinado. será su portabilidad.
● Índice de Acoplamiento: ● Adherencia a Estándares:
● Tiempo Medio entre
Evalúa las dependencias Evalúa qué tan bien el
Fallas (MTBF):
entre módulos. Cuanto software se adhiere a
Tiempo promedio entre
menor sea el estándares de la industria
dos fallas consecutivas.
acoplamiento, mejor será para garantizar su
la mantenibilidad. portabilidad.
35
EJEMPLOS DE MÉTRICAS
REFERENTE A ATRIBUTOS DE CALIDAD ISO 25000
Eficiencia: Usabilidad: Funcionalidad:
● Consumo de Recursos: ● Tiempo de Aprendizaje: ● Cobertura de Requisitos:
Puede ser memoria, CPU, Cuánto tiempo lleva a los Qué tan bien el software
o ancho de banda. Se mide usuarios aprender a utilizar el cubre los requisitos
en relación a la software. especificados.
funcionalidad ofrecida.
● Tasa de Error del Usuario: ● Complejidad Funcional:M
● Tiempo de Respuesta: La cantidad de errores Mide la complejidad de las
El tiempo que tarda el cometidos por los usuarios funciones del software
software en responder a mientras interactúan con el
una solicitud. software.
36
Herramientas para Evaluar y medir el SW
SonarQube: Es una plataforma de código abierto que Travis CI: Similar a Jenkins, Travis CI es una plataforma de
proporciona una amplia gama de métricas de calidad de integración continua que puede ser utilizada para ejecutar
código, incluyendo mantenibilidad, fiabilidad, seguridad, pruebas automáticas y analizar métricas de calidad de
y cobertura de código. código.
JUnit y Mockito: Para pruebas unitarias y de integración Coverity: Es una herramienta de análisis estático que detecta
en Java, JUnit es una herramienta popular. Mockito es defectos de software y vulnerabilidades de seguridad en el
una biblioteca de mock para pruebas unitarias. código fuente.
JUnit y PyTest: Para pruebas unitarias y de integración FindBugs y SpotBugs: Herramientas de análisis estático para
en Python, PyTest es una opción popular y poderosa. Java que identifican errores potenciales en el código fuente.
CodeClimate: Proporciona métricas de calidad de ESLint: Para proyectos JavaScript, ESLint es una herramienta
código y análisis estático para varios lenguajes de de análisis estático que ayuda a identificar problemas de
programación. estilo, errores y prácticas peligrosas.
Jenkins: Una herramienta de integración continua que Checkstyle: Herramienta de análisis estático para proyectos
puede ser configurada para ejecutar pruebas Java que ayuda a garantizar que el código cumpla con las
automáticas y analizar métricas de calidad de código. convenciones de codificación y los estándares de calidad.
37