Técnicas Avanzadas de Automatización de Pruebas I
Introducción
El objetivo de estos artículos es asentar los conocimientos acerca de la calidad del software sobre unas bases fundamentales.
¡El aprendizaje es algo imprescindible durante toda la vida, y más especialmente en el sector de las TI!
Fundamentos del proceso de testing funcional – Conceptos y definiciones
Fallos, defectos, errores …
Error:
Desviación entre el comportamiento real y el comportamiento esperado, no cumplimiento de un requisito establecido
Defecto (defect, fault):
Anomalía en un componente o sistema que puede dar lugar a que no se lleve a cabo correctamente una función determinada. El término “bug” se aplica históricamente a los defectos en informática
Fallo (failure). Efecto del error
Manifestación de un defecto
Equivocación (mistake):
Acción humana que da lugar a un resultado incorrecto
Enmascaramiento del error:
Varios estados de error se compensan mutuamente – no aparece el efecto del error
El software es elaborado por seres humanos que pueden cometer errores que dan lugar a defectos. Estos defectos pueden generar un fallo.
Prueba y Caso de Prueba
Depuración:
Localización y corrección de errores internos
Prueba:
Búsqueda dirigida y sistemática de los efectos del error, para demostrar defectos
Prueba de Software:
Cada ejecución de un objeto de prueba que sirva para su comprobación
Caso de Prueba:
Unión de una prueba y unas condiciones de entorno establecidas – p.ej. Requisitos de ejecución, datos de entrada
Explosión de casos de prueba:
Significa que debido a las numerosas posibilidades de combinación, el número de los posibles casos de prueba crece tanto que pude llevar a un conjunto de cientos o miles de casos de prueba
Calidad de Software
Definición según:
ISO / IEC 9126:
La calidad de software es la totalidad de las propiedades y características de un producto de software referidas a su aptitud para satisfacer necesidades explícitas o implícitas.
IEEE Std 610:
El grado en el que un componente, sistema o proceso alcanza los requisitos especificados y/o las necesidades y expectativas del usuario o cliente
La calidad de Software según ISO / IEC 9126 abarca:
- Funcionalidad
- Fiabilidad
- Usabilidad
- Eficiencia
- Mantenibilidad
- Portabilidad
El aseguramiento de la calidad diferencia entre:
- Medidas constructivas para evitar errores (QS)
- Medidas analíticas para la detección de errores (QA)
Medidas analíticas para el aseguramiento de la calidad (QA)
Calidad de Software
Una Funcionalidad de buena calidad debe circunscribirse a las características funcionales requeridas (corrección) y cubrir todos los requisitos funcionales definidos (completitud)
Características que debe cumplir una funcionalidad:
Idoneidad (suitability)
¿Son adecuadas las funciones disponibles para la utilización prevista?
Precisión (accuracy)
¿Se ejecutan las funciones correctamente (como estaba acordado)?
Conformidad (compliance)
¿Se cumplieron las normas y preceptos?
Interoperatividad
¿Se proporciona una interrelación libre de errores con el entorno del sistema?
Seguridad
¿Están protegidos los datos / programas frente a accesos / pérdidas?
Calidad de Software. Atributos no funcionales
Fiabilidad :
Capacidad de un software / un sistema de mantener un rendimiento / funcionalidad bajo condiciones predeterminadas durante un periodo de tiempo definido. Da una idea del comportamiento de la calidad a lo largo del tiempo. Factores asociados: tolerancia a fallos, capacidad de recuperación ante fallos
Usabilidad:
Un software es usable si es fácil de entender (uso intuitivo), fácil de aprender o si existe normativa especifica (ver ISO / IEC 9241)
Eficiencia:
Utilización de recursos lo más reducida posible (p.ej. Tiempo de CPU) para la consecución de una tarea
Mantenibilidad:
Esfuerzo necesario para realizar una serie de modificaciones definidas de antemano. Factores asociados: estabilidad, facilidad de cambio
Portabilidad:
Posibilidad de trasladar un software a otro entorno (hardware, software, organizativo)
Factores asociados: facilidad de sustitución, facilidad de instalación, cumplimiento de estándares
¿Por qué es necesario probar?
El software como factor económico
El software contribuye de manera definitiva al funcionamiento de aparatos e instalaciones de uso cotidiano (banca, automoción, …). De hecho, existen sistemas que serían inviables sin un software que los apoyara.
Calidad de Software
La calidad del software es un factor decisivo para el éxito de determinados productos o de las propias empresas. Desgraciadamente todos tenemos experiencias negativas …
- Movimientos incorrectos en la cuenta del banco, en la factura del teléfono, …
- Problemas con la “centralita” del automóvil
- No disponibilidad de páginas web
- No poder sacar dinero de la cuenta
- No poder realizar una gestión administrativa
- No poder devolver o recoger un libro
Que la calidad del software sea un factor decisivo de éxito es difícil de ver, pero que la falta de calidad es un factor decisivo de fracaso, es un tema bastante claro
Ejemplo: Fallo en la unidad de coma flotante del Pentium
En 1994 se descubrió que algunas operaciones de división devolvían siempre un valor erróneo por exceso.
Estas comprobaciones crearon una gran polémica. Intel negó inicialmente la existencia del problema, después lo minimizó negándose a una sustitución sistemática. Si bien evaluaciones independientes mostraron la poca importancia del error llego a haber demandas (incluyendo entre otros los demandantes empresas como IBM). Por último, Intel se vio forzada a aceptar sustituir todos los microprocesadores defectuosos, lo que representó un coste enorme
Ejemplo: Phobos 1
La Phobos 1 despegó y tuvo un funcionamiento correcto hasta que dos meses después de su lanzamiento se perdió la señal. La fuente del problema fue una orden errónea (concretamente se transmitió un “+” en vez de un ”-”). Incapaz de controlar su orientación, la Phobos 1 dejó de orientar sus paneles solares hacia nuestra estrella. Sin energía, no pudo restablecerse contacto con ella y quedó en órbita alrededor del Sol.
Al margen del error, parecería lógico haber “asegurado” una orden tan crítica como demostró ser la que se envió. Estaba previsto, pero la versión definitiva del código que la contenía no se implantó a causas de las prisas en la finalización de los trabajos.
Otros errores software famosos
- Apolo 11 (fallo de aterrizaje)
- Mariner 1 (faltaba una coma)
- Ariedne 5 (basado en una versión anterior de sw, el equipo físico no pudo responder a la mayor aceleración). Importancia de las condiciones de entorno
- Therac-25 (Dosis masivas de radiación. Generó, al menos, 5 muertes). Importancia del control de los sistemas software.
- Amazon (26/06/2009) Por un error Amazon permitió descargar álbumes completos por 50 centavos
- Orange (31/07/2008) Orange retira los Nokia 6555 por un error de software
- Renfe (7/03/2009) Un error en el software mantiene sin servicio las máquinas de autoventa de Renfe
Causas de los defectos
El software es elaborado por seres humanos que pueden cometer errores que dan lugar a defectos. Estos defectos pueden generar un fallo
Las causas de los errores (al margen de la falibilidad del ser humano) pueden ser: presión en los tiempos, complejidad de la aplicación o la arquitectura, tecnologías cambiantes, existencia de un gran número de interfaces …
Al margen de la existencia de un defecto, pueden producirse fallos por condiciones ambientales (radiación, magnetismo, campos eléctricos, etc)
Las Pruebas como medio de mejora de la calidad
Un medio para conseguir la mejora de la calidad tanto de los sistemas de software como del propio proceso de desarrollo son la comprobación y prueba sistemática del software desarrollado.
Los errores que se detecten antes del uso del software pueden ser corregidos antes de que generen fallos
Puede exigirse por contrato un nivel mínimo de prueba
Las pruebas pueden requerirse también para satisfacer requisitos contractuales o legales, o estándares específicos de la industria.
Tanto si estás buscando trabajar full time, como suplementar tus actuales ingresos con desarrollos adicionales a los que estás haciendo en tu actual trabajo, o quieres implicarte en el desarrollo de proyectos opensource y apoyar a la comunidad, rellena el formulario que hay a continuación y nos pondremos en contacto contigo para ver los proyectos en los que podemos colaborar.