Calidad de Software
Calidad de Software
Calidad de Software
La calidad no debe ser el fin, sino un medio para obtener una mejora en la
satisfacción para un bien o producto.
¿Por qué es importante?
Reduce costos por repetición y mejora la entrada al mercado.
Mientras más tarde se detecten los defectos o errores, mayores pueden ser las
consecuencias.
● Análisis equivocados
Los principales beneficios que proporciona el cumplimiento de las normas ISO son:
● Mejoran los procesos y aumentan la productividad.
● Mejoran el reconocimiento de la marca y la reputación de la empresa.
● Asegura las mejores prácticas a nivel internacional.
● Dan acceso a licitaciones públicas que exigen cumplir normativas ISO.
● Facilita la colaboración y el comercio entre empresas certificadas.
Normativa ISO 9000
La certificación del software es consecuencia del proceso de aseguramiento de la calidad, pero nunca es
el objetivo final. La calidad de software no se certifica, lo que se certifica, son los procedimientos para
construir un software de calidad. Los procedimientos deben ser correctos y estar en función de la
normalización (ISO 9000, CMMI, Moprosoft, etc.).
La Normativa ISO 9000 Pone a disposición de un auditor o certificador los procesos internos, de forma
que este indique si cumple o no la normativa al 100%, se audita el sistema. Si los resultados son positivos,
se emite la certificación, y cada cierto tiempo se tiene que renovar. La certificación es costosa, como
consecuencia de los costes que ocasionan la lejanía y el tiempo de duración de proceso (aprox. 6 meses).
Finalmente se certifican la empresa, y la metodología para el desarrollo de la aplicación.
Modelos de Calidad
Intentan cuantificar la calidad del software
Se descompone la calidad en niveles estructurados
Los distintos modelos se diferencian por:
● la relación entre los niveles
● la cantidad de niveles
● los conceptos de cada nivel
El modelo de calidad establecido en la primera parte del estándar, ISO 9126-1, clasifica la calidad del software en un
conjunto estructurado de características y subcaracterísticas. Cada subcaracterística está dividida en atributos. Un atributo
es una entidad la cual puede ser verificada o medida en el producto software. Los atributos no están definidos en el
estándar, ya que varían entre diferentes productos software. Las características se organizan de la siguiente manera:
Usabilidad - Un conjunto de atributos relacionados con el esfuerzo necesario para su uso, y en la valoración individual de tal
uso, por un establecido o implicado conjunto de usuarios.
● Aprendizaje
● Comprensión
● Operatividad
● Atractividad
Modelos a nivel de proceso
La calidad de un sistema software debe ser programada desde el inicio del proyecto, y posteriormente en cada
etapa del proceso de desarrollo se debe llevar a cabo el control y seguimiento de los aspectos de calidad, para
minimizar los riesgos y ofrecer soporte continuo, se garantiza así un óptimo nivel de cumplimiento de los
factores de calidad, teniendo en cuenta que si en alguna de las etapas se deja de lado la verificación de los
factores y criterios es posible que se presente deficiencia en alguno de éstos y disminuirá el nivel de calidad no
solo del proceso, sino también del producto en desarrollo.
GQM o Goal Question Metric: Se enfoca a proporcionar una forma que permita definir métricas para medir el avance
como los resultados de algún proyecto.
GILB: Modelo de calidad que orienta la evaluación de software a partir de los atributos: Capacidad de trabajo,
adaptabilidad, disponibilidad y utilizabilidad.
ISO 9126: Estándar basado en el modelo de McCall, dirigido a desarrolladores, aseguradores de calidad, evaluadores,
analistas y cualquier otro involucrado en el proceso de construcción de software. Está dividido en cuatro partes: modelo
de calidad, métricas externas, métricas internas y calidad de métricas en uso.
SQAE o Software Quality Assessment Exercise: orientado principalmente a realizar evaluación por terceros que no
están directamente involucrados con el desarrollo, siguiendo tres capas: área, factor y atributo de calidad.
Modelos a nivel de producto
WebQEM: es una metodología de evaluación de calidad de sitios Web (Web-site Quality Evaluation method), diseñada
para la evaluación siguiendo seis fases: planificación y programación de la evaluación de calidad, definición y
especificación de requerimientos de calidad, definición e implementación de la evaluación elemental, definición e
implementación de la evaluación global, análisis de resultados, conclusión y documentación, validación de métricas.
ISO 25000: También llamadas como SQuaRE, cuyo propósito es guiar el desarrollo con los requisitos y la evaluación de
atributos de calidad, principalmente: la adecuación funcional, eficiencia de desempeño, compatibilidad , capacidad de uso,
Habilidad, seguridad, mantenibilidad y portabilidad.
Atributos de Calidad
Un atributo de calidad es una propiedad medible de un sistema, que indica qué tan
bien el sistema satisface las necesidades de las partes interesadas.
Hay dos categorías de atributos de calidad en los que nos centramos. La primera es
la que describe alguna propiedad del sistema en tiempo de ejecución, como la
disponibilidad, el rendimiento o la facilidad de uso. El segundo es el que describe
alguna propiedad del desarrollo del sistema, como la modificabilidad o la capacidad
de prueba.
Atributos de Calidad
Arquitectura y Requisitos
1. Requisitos funcionales. Estos requisitos establecen qué debe hacer el sistema y cómo debe comportarse o
reaccionar ante los estímulos de tiempo de ejecución.
2. Requisitos de atributos de calidad. Estos requisitos son las calificaciones de los requisitos funcionales o del
producto en general. Una calificación de un requisito funcional es un elemento tal como qué tan rápido se debe
realizar la función, o qué tan resistente debe ser a una entrada errónea. Una calificación del producto general es
un elemento como el tiempo para implementar el producto o una limitación de los costos operativos.
3. Restricciones. Una restricción es una decisión de diseño con cero grados de libertad. Es decir, es una
decisión de diseño que ya se ha tomado.
Funcionalidad
Functionality
La funcionalidad es la capacidad del sistema para realizar el trabajo para el cual fue diseñado. De todos
los requisitos, la funcionalidad tiene la relación más extraña con la arquitectura.
¿hay operaciones que el software podría realizar internamente y sin embargo hay que hacerlas “a mano”
o en otras aplicaciones?
¿son muy limitadas o incompletas las funciones que realiza el software?
¿resuelve casi todos los problemas de operatividad y gestión de la información?
Funcionalidad
La funcionalidad y los atributos de calidad son ortogonales.
La disponibilidad se refiere a una propiedad de software que está allí y lista para llevar a cabo su tarea
cuando la necesita. Esta es una perspectiva amplia y abarca lo que normalmente se llama confiabilidad,
la cual es la capacidad de evitar fallas que son más frecuentes y más graves de lo que es aceptable.
• Fuente de estímulo . Diferenciamos entre orígenes internos y externos de fallas o fallas porque la respuesta
deseada del sistema puede ser diferente.
• Artefacto. Esto especifica el recurso que se requiere que esté altamente disponible, como un procesador, canal
de comunicación, proceso o almacenamiento.
• Medio ambiente . El estado del sistema cuando ocurre la falla o falla también puede afectar la respuesta del
sistema deseada.
Disponibilidad
Escenario general
• Respuesta . Hay una serie de posibles reacciones a una falla del sistema. Primero, la falla debe ser detectada
y aislada (correlacionada) antes de que cualquier otra respuesta sea posible. Después de que se detecte la falla,
el sistema debe recuperarse de ella.
La interoperabilidad se refiere a la capacidad de los sistemas para intercambiar información de manera útil. Es
posible que estos sistemas se hayan construido con la intención de intercambiar información, pueden ser
sistemas existentes que se desean intercambiar información o pueden proporcionar servicios generales sin
conocer los detalles de los sistemas que desean utilizar esos servicios.
Estas son algunas de las razones por las que podría querer que los sistemas interoperen:
• Su sistema proporciona un servicio para ser utilizado por una colección de sistemas desconocidos. Estos
sistemas necesitan interoperar con su sistema aunque no sepa nada sobre ellos.
• Estás construyendo capacidades a partir de sistemas existentes. Por ejemplo, uno de los sistemas existentes
es responsable de detectar su entorno, otro es responsable de procesar los datos sin procesar, un tercero es
responsable de interpretar los datos y el último es responsable de producir y distribuir una representación de lo
que se detectó.
Interoperabilidad
Escenario general
• Fuente de estímulo . Un sistema inicia una solicitud para interoperar con otro sistema.
• Estímulo . Una solicitud para intercambiar información entre sistemas.
• Artefactos . Los sistemas que deseen interoperar.
• Medio ambiente . Los sistemas que desean interoperar se descubren en tiempo de ejecución o se conocen
antes del tiempo de ejecución.
• Respuesta . La solicitud de interoperar resulta en el intercambio de información. La información es entendida
por la parte receptora de manera sintáctica y semántica. Alternativamente, la solicitud es rechazada y las
entidades apropiadas son notificadas. En cualquier caso, la solicitud puede ser registrada.
• Medida de respuesta . El porcentaje de intercambios de información procesados correctamente o el porcentaje
de intercambios de información rechazados correctamente.
Interoperabilidad
Escenario general
Modificabilidad
Modifiability
La modificabilidad tiene que ver con el cambio, y nuestro interés en él se centra en el costo y el riesgo
de realizar cambios. Para planificar la modificabilidad, un arquitecto debe considerar cuatro preguntas:
• ¿Qué puede cambiar?
• ¿Cuál es la probabilidad del cambio?
• ¿ Cuándo se hace el cambio y quién lo hace?
• ¿Cuál es el costo del cambio?
Modificabilidad
Escenario general
• Fuente de estímulo. Esta parte especifica quién realiza el cambio: el desarrollador, un administrador del
sistema o un usuario final.
• Estímulo . Esta parte especifica el cambio a realizar. Un cambio puede ser la adición de una función, la
modificación de una función existente o la eliminación de una función. (Para esta categorización, consideramos
que corregir un defecto es cambiar una función, que presumiblemente no funcionó correctamente como
resultado del defecto). También se puede hacer un cambio en las cualidades del sistema: hacerlo más sensible,
aumentar su capacidad de respuesta. disponibilidad, y así sucesivamente. La capacidad del sistema también
puede cambiar. Acomodar a un número creciente de usuarios simultáneos es un requisito frecuente. Finalmente,
pueden ocurrir cambios para adaptarse a nuevas tecnologías de algún tipo, la más común de las cuales es la de
trasladar el sistema a un tipo diferente de computadora o red de comunicación.
• Artefacto . Esta parte especifica qué se va a cambiar: componentes o módulos específicos, la plataforma del
sistema, su interfaz de usuario, su entorno u otro sistema con el que interactúa
Modificabilidad
Escenario general
• Artefacto . Esta parte especifica qué se va a cambiar: componentes o módulos específicos, la plataforma del
sistema, su interfaz de usuario, su entorno u otro sistema con el que interactúa.
• Medio ambiente . Esta parte especifica cuándo se puede realizar el cambio: tiempo de diseño, tiempo de
compilación, tiempo de compilación, tiempo de inicio o tiempo de ejecución.
• Respuesta . Realice el cambio, pruébelo y desplácelo.
• Medida de respuesta. Todas las respuestas posibles toman tiempo y cuestan dinero;
Rendimiento
Performance
Rendimiento, es decir: se trata del tiempo y la capacidad del sistema de software para cumplir con los
requisitos de tiempo. Cuando ocurren eventos (interrupciones, mensajes, solicitudes de usuarios u otros
sistemas, o eventos de reloj que marcan el paso del tiempo), el sistema, o algún elemento del sistema,
debe responder a ellos a tiempo. La esencia de la discusión del rendimiento es caracterizar los eventos
que pueden ocurrir (y cuándo pueden ocurrir) y la respuesta basada en el tiempo del sistema o elemento
a esos eventos.
• Fuente de estímulo. Los estímulos llegan de fuentes externas (posiblemente múltiples) o internas.
• Estímulo . Los estímulos son las llegadas del evento. El patrón de llegada puede ser periódico,
estocástico o esporádico, caracterizado por parámetros numéricos.
• Artefacto . El artefacto es el sistema o uno o más de sus componentes.
• Medio ambiente . El sistema puede estar en varios modos operativos, como normal, emergencia, carga
máxima o sobrecarga.
• Respuesta . El sistema debe procesar los eventos que llegan. Esto puede causar un cambio en el
entorno del sistema (por ejemplo, del modo normal al modo de sobrecarga).
• Medida de respuesta. Las medidas de respuesta son el tiempo que lleva procesar los eventos que
llegan (latencia o fecha límite), la variación en este tiempo (jitter), la cantidad de eventos que se pueden
procesar dentro de un intervalo de tiempo particular (rendimiento) o una caracterización de los eventos
que no pueden ser procesados (tasa de error).
Rendimiento
Performance
Seguridad
Security
La seguridad es una medida de la capacidad del sistema para proteger los datos y la información de
accesos no autorizados a la vez que proporciona acceso a personas y sistemas autorizados.
El enfoque más simple para caracterizar la seguridad tiene tres características: confidencialidad,
integridad y disponibilidad (CIA):
1. Confidencialidad es la propiedad de que los datos o servicios están protegidos contra el acceso no
autorizado. Por ejemplo, un pirata informático no puede acceder a sus declaraciones de impuestos
sobre la renta en una computadora del gobierno.
2. La integridad es la propiedad de que los datos o servicios no están sujetos a manipulación no
autorizada. Por ejemplo, su calificación no ha cambiado desde que su instructor la asignó.
3. La disponibilidad es la propiedad de que el sistema estará disponible para uso legítimo. Por ejemplo,
un ataque de denegación de servicio no le impedirá pedir un libro de una librería en línea.
Seguridad
Entorno General
• Fuente de estímulo . La fuente del ataque puede ser un humano u otro sistema.
• Estímulo. El estímulo es un ataque. Caracterizamos esto como un intento no autorizado de mostrar
datos, cambiar o eliminar datos, acceder a servicios del sistema, cambiar el comportamiento del sistema
o reducir la disponibilidad.
• Artefacto . El objetivo del ataque puede ser los servicios del sistema, los datos que contiene o los datos
producidos o consumidos por el sistema.
• Medio ambiente . El ataque puede ocurrir cuando el sistema está en línea o fuera de línea, ya sea
conectado o desconectado de una red, ya sea detrás de un firewall o abierto a una red, completamente
operativo, parcialmente operativo o no operativo.
Seguridad
Entorno General
• Respuesta. El sistema debe garantizar que las transacciones se realicen de manera tal que los datos o
servicios estén protegidos contra el acceso no autorizado; los datos o servicios no están siendo
manipulados sin autorización; las partes en una transacción son identificadas con seguridad; las partes
en la transacción no pueden repudiar sus implicaciones; y los datos, recursos y servicios del sistema
estarán disponibles para uso legítimo.
El sistema también debe realizar un seguimiento de las actividades dentro de él mediante el registro de
acceso o modificación; intentos de acceso a datos, recursos o servicios; y notificar a las entidades
apropiadas (personas o sistemas) cuando se está produciendo un ataque aparente.
• Medida de respuesta . Las medidas de la respuesta de un sistema incluyen cuánto se compromete un
sistema cuando se compromete un componente o un valor de datos en particular, cuánto tiempo pasó
antes de que se detectara un ataque, cuántos ataques se resistieron, cuánto tiempo tomó recuperarse
de un ataque exitoso, y cuánta información fue vulnerable a un ataque en particular.
Seguridad
Testabilidad
Testability
La capacidad de prueba del software se refiere a la facilidad con la que se puede hacer que el software
demuestre sus fallas a través de pruebas (típicamente basadas en la ejecución). Específicamente, la
capacidad de prueba se refiere a la probabilidad, asumiendo que el software tiene al menos una falla,
que fallará en su próxima ejecución de prueba.
Intuitivamente, un sistema es comprobable si "abandona" sus fallas fácilmente. Si una falla está
presente en un sistema, queremos que falle durante la prueba lo más rápido posible.
Testabilidad
Entorno General
• Fuente de estímulo. Las pruebas son realizadas por probadores de unidades, probadores de
integración o probadores de sistemas (en el lado de la organización en desarrollo), o probadores de
aceptación y usuarios finales (por el lado del cliente). La fuente podría ser humana o un probador
automatizado.
• Estímulo . Se ejecuta un conjunto de pruebas debido a la finalización de un incremento de codificación
como una capa de clase o un servicio, la integración completa de un subsistema, la implementación
completa de todo el sistema o la entrega del sistema al cliente.
• Artefacto . Una unidad de código (correspondiente a un módulo en la arquitectura), un subsistema o
todo el sistema es el artefacto que se está probando.
• Medio ambiente . La prueba puede realizarse en el momento del desarrollo, en el momento de la
compilación, en el momento del despliegue o mientras el sistema se está ejecutando (tal vez en uso de
rutina). El entorno también puede incluir el arnés de prueba o los entornos de prueba en uso.
Testabilidad
Entorno General
• Respuesta . El sistema se puede controlar para realizar las pruebas deseadas y se pueden observar
los resultados de la prueba.
• Medida de respuesta . Las medidas de respuesta están destinadas a representar la facilidad con la que
un sistema en prueba "abandona" sus fallas.
Usabilidad
Usability
La usabilidad se relaciona con lo fácil que es para el usuario realizar una tarea deseada y el tipo de
asistencia al usuario que proporciona el sistema. A lo largo de los años, un enfoque en la facilidad de
uso se ha revelado como una de las formas más económicas y sencillas de mejorar la calidad de un
sistema (o, más precisamente, la percepción de calidad del usuario).
• Fuente de estímulo. El usuario final (que puede estar en un rol especializado, como un administrador del
sistema o de la red) es siempre la fuente del estímulo para la usabilidad.
• Estímulo . El estímulo es que el usuario final desea utilizar un sistema de manera eficiente, aprender a usarlo,
minimizar el impacto de los errores, adaptar el sistema o configurar el sistema.
• Medio ambiente. Las acciones del usuario que conciernen a la facilidad de uso siempre ocurren en el tiempo
de ejecución o en el tiempo de configuración del sistema.
• Artefacto . El artefacto es el sistema o la parte específica del sistema con el que el usuario está interactuando.
• Respuesta . El sistema debe proporcionar al usuario las funciones necesarias o anticiparse a las necesidades
del usuario.
• Medida de respuesta. La respuesta se mide por el tiempo de la tarea, la cantidad de errores, la cantidad de
tareas realizadas, la satisfacción del usuario, el conocimiento del usuario, la relación entre las operaciones
exitosas y las operaciones totales, o la cantidad de tiempo o datos perdidos cuando se produce un error.
Usabilidad
Variabilidad
Variability
La distribución del desarrollo es la calidad del diseño del software para soportar el desarrollo de software
distribuido. Muchos sistemas en estos días se desarrollan utilizando equipos distribuidos globalmente.
Un problema que debe superarse cuando se desarrolla con equipos distribuidos es coordinar sus
actividades. El sistema debe diseñarse de modo que se minimice la coordinación entre los equipos. Esta
coordinación mínima debe lograrse tanto para el código como para el modelo de datos. Los equipos que
trabajan en módulos que se comunican entre sí pueden necesitar negociar las interfaces de esos
módulos. Cuando un módulo es utilizado por muchos otros módulos, cada uno desarrollado por un
equipo diferente, la comunicación y la negociación se vuelven más complejas y onerosas. Se aplican
consideraciones similares para el modelo de datos.
Escalabilidad
Scalability
La implementación se refiere a cómo llega un ejecutable a una plataforma de host y cómo se invoca
posteriormente. Algunos de los problemas involucrados en la implementación del software son: ¿Cómo llega
a su host (push, donde las actualizaciones se envían a los usuarios de forma no deseada, o pull, donde los
usuarios deben solicitar actualizaciones de forma explícita)? ¿Cómo se integra en un sistema existente?
¿Se puede hacer esto mientras se está ejecutando el sistema existente? Los sistemas móviles tienen sus
propios problemas en cuanto a cómo se actualizan, debido a las preocupaciones sobre el ancho de banda.
Los escenarios de implementación tratarán con el tipo de actualización (push o pull), la forma de la
actualización (medio, como la descarga de DVD o Internet, y el empaquetado, como ejecutable, aplicación o
complemento), la integración resultante en un Sistema existente, la eficiencia de ejecución del proceso y el
riesgo asociado.
Movilidad
Mobility
La movilidad se ocupa de los problemas de movimiento y los costos de una plataforma (por ejemplo,
tamaño, tipo de pantalla, tipo de dispositivos de entrada, disponibilidad y volumen de ancho de banda y
duración de la batería). Los problemas de movilidad incluyen la administración de la batería, la
reconexión después de un período de desconexión y la cantidad de diferentes interfaces de usuario
necesarias para soportar múltiples plataformas.
Los escenarios tratarán con la especificación de los efectos deseados de la movilidad o las diferentes
posibilidades. Los escenarios también pueden lidiar con la variabilidad, donde el mismo software se
implementa en múltiples plataformas .
Fiabilidad
Reliability
La seguridad no es lo mismo que la fiabilidad. Un sistema puede ser confiable (consistente con su
especificación) pero aún inseguro (por ejemplo, cuando la especificación ignora las condiciones que
conducen a una acción insegura).
Eficiencia
Efficiency
Capacidad de un sistema de software para cumplir su propósito con la mejor utilización posible de todos
los recursos necesarios (tiempo, almacenamiento, canales de transmisión y periféricos).
Conjunto de atributos que influyen en la relación entre el nivel de rendimiento del software y la cantidad
de recursos utilizados en las condiciones establecidas.
Mantenibilidad
Maintainability
La mantenibilidad es la capacidad del sistema para soportar cambios. Los cambios pueden estar
relacionados con nuevos requisitos comerciales o la corrección de errores antiguos y afectar los
componentes del sistema o métodos separados. Además, la capacidad de mantenimiento afecta el
tiempo necesario para restaurar el sistema después de una falla. Las dependencias excesivas entre
componentes tienen un efecto muy negativo en la mantenibilidad. Este atributo afecta no solo a los
procesos de desarrollo, sino también a los procesos de gestión (por ejemplo, dividir los equipos en
partes relacionadas con el producto).