stringtranslate.com

Automatización de pruebas

En las pruebas de software , la automatización de pruebas es el uso de software independiente del software que se está probando para controlar la ejecución de las pruebas y la comparación de los resultados reales con los resultados previstos. [1] La automatización de pruebas puede automatizar algunas tareas repetitivas pero necesarias en un proceso de prueba formalizado que ya existe, o realizar pruebas adicionales que serían difíciles de realizar manualmente. La automatización de pruebas es fundamental para la entrega y las pruebas continuas . [2]

Enfoques generales

Existen muchos enfoques para la automatización de pruebas; sin embargo, a continuación se detallan los enfoques generales que se utilizan ampliamente:

Otros enfoques

Pruebas basadas en modelos

Una forma de generar casos de prueba automáticamente es la prueba basada en modelos mediante el uso de un modelo del sistema para la generación de casos de prueba, pero continúa la investigación sobre una variedad de metodologías alternativas para hacerlo. [ cita necesaria ] En algunos casos, el enfoque basado en modelos permite a los usuarios no técnicos crear casos de prueba comerciales automatizados en inglés sencillo, de modo que no se necesita programación de ningún tipo para configurarlos para múltiples sistemas operativos, navegadores e inteligentes. dispositivos. [3]

Pruebas de regresión

Algunas tareas de prueba de software (como las pruebas exhaustivas de regresión de interfaz de bajo nivel ) pueden resultar laboriosas y llevar mucho tiempo si se realizan manualmente. Además, es posible que un enfoque manual no siempre sea eficaz para encontrar determinadas clases de defectos. La automatización de pruebas ofrece la posibilidad de realizar este tipo de pruebas de forma eficaz.

Una vez que se han desarrollado las pruebas automatizadas, se pueden ejecutar rápida y repetidamente muchas veces. Este puede ser un método rentable para pruebas de regresión de productos de software que tienen una larga vida útil. Incluso los parches menores durante la vida útil de la aplicación pueden provocar que se rompan las funciones existentes que funcionaban en un momento anterior.

Pruebas API

Los probadores de software también utilizan ampliamente las pruebas de API, ya que les permiten verificar los requisitos independientemente de su implementación de GUI, comúnmente para probarlos en una fase más temprana del desarrollo y para asegurarse de que la prueba en sí se adhiera a los principios del código limpio, especialmente el principio de responsabilidad única. Implica probar directamente las API como parte de las pruebas de integración , para determinar si cumplen con las expectativas de funcionalidad, confiabilidad, rendimiento y seguridad. [4] Dado que las API carecen de GUI , las pruebas de API se realizan en la capa de mensajes . [5] Las pruebas de API se consideran críticas cuando una API sirve como interfaz principal para la lógica de la aplicación . [6]

Pruebas de interfaz gráfica de usuario (GUI)

Muchas herramientas de automatización de pruebas proporcionan funciones de grabación y reproducción que permiten a los usuarios grabar de forma interactiva las acciones del usuario y reproducirlas tantas veces como desee, comparando los resultados reales con los esperados. La ventaja de este enfoque es que requiere poco o ningún desarrollo de software . Este enfoque se puede aplicar a cualquier aplicación que tenga una interfaz gráfica de usuario . Sin embargo, la dependencia de estas características plantea importantes problemas de confiabilidad y mantenibilidad. Volver a etiquetar un botón o moverlo a otra parte de la ventana puede requerir que se vuelva a grabar la prueba. La grabación y reproducción también suelen agregar actividades irrelevantes o registrar incorrectamente algunas actividades. [ cita necesaria ]

Una variación de este tipo de herramienta es para probar sitios web. Aquí, la "interfaz" es la página web. Sin embargo, dicho marco utiliza técnicas completamente diferentes porque procesa HTML y escucha eventos DOM en lugar de eventos del sistema operativo. Para este fin se suelen utilizar navegadores headless o soluciones basadas en Selenium Web Driver . [7] [8] [9]

Otra variación de este tipo de herramienta de automatización de pruebas es para probar aplicaciones móviles. Esto es muy útil dada la cantidad de diferentes tamaños, resoluciones y sistemas operativos que se utilizan en los teléfonos móviles. Para esta variación, se utiliza un marco para crear instancias de acciones en el dispositivo móvil y recopilar resultados de las acciones.

Otra variación es la automatización de pruebas sin secuencias de comandos que no utiliza grabación ni reproducción, sino que crea un modelo [ se necesita aclaración ] de la aplicación y luego permite al evaluador crear casos de prueba simplemente insertando parámetros y condiciones de prueba, lo que no requiere habilidades de secuencias de comandos. .

Metodologías

Desarrollo basado en pruebas

La automatización de pruebas, que utiliza principalmente pruebas unitarias, es una característica clave de la programación extrema y el desarrollo ágil de software , donde se conoce como desarrollo basado en pruebas (TDD) o desarrollo basado en pruebas. Se pueden escribir pruebas unitarias para definir la funcionalidad antes de escribir el código. Sin embargo, estas pruebas unitarias evolucionan y se amplían a medida que avanza la codificación, se descubren problemas y el código se somete a refactorización. [10] Solo cuando pasan todas las pruebas para todas las características demandadas se considera que el código está completo. Sus defensores argumentan que produce software que es más confiable y menos costoso que el código que se prueba mediante exploración manual. [ cita necesaria ] Se considera más confiable porque la cobertura del código es mejor y porque se ejecuta constantemente durante el desarrollo en lugar de una vez al final de un ciclo de desarrollo en cascada . El desarrollador descubre los defectos inmediatamente después de realizar un cambio, cuando es menos costoso solucionarlo. Finalmente, la refactorización de código es más segura cuando se utilizan pruebas unitarias; Es mucho menos probable que transformar el código en una forma más simple con menos duplicación de código , pero con un comportamiento equivalente, introduzca nuevos defectos cuando el código refactorizado está cubierto por pruebas unitarias.

Pruebas continuas

Las pruebas continuas son el proceso de ejecutar pruebas automatizadas como parte del proceso de entrega de software para obtener comentarios inmediatos sobre los riesgos comerciales asociados con una versión candidata de software. [11] [12] Para las pruebas continuas, el alcance de las pruebas se extiende desde la validación de requisitos ascendentes o historias de usuarios hasta la evaluación de los requisitos del sistema asociados con los objetivos comerciales generales. [13]

Consideraciones

Factores a considerar para la decisión de implementar la automatización de pruebas

Qué automatizar, cuándo automatizar o incluso si realmente se necesita automatización son decisiones cruciales que debe tomar el equipo de pruebas (o desarrollo). [14] Una revisión de la literatura multivocal de 52 profesionales y 26 fuentes académicas encontró que cinco factores principales a considerar en la decisión de automatización de pruebas son: 1) Sistema bajo prueba (SUT), 2) los tipos y números de pruebas, 3) prueba -herramienta, 4) temas humanos y organizacionales, y 5) factores transversales. Los factores individuales más frecuentes identificados en el estudio fueron: necesidad de pruebas de regresión, factores económicos y madurez del IVU. [15]

efecto meseta

Si bien las empresas de desarrollo de software valoran la reutilización de las pruebas automatizadas, esta propiedad también puede verse como una desventaja. Esto conduce a la llamada "Paradoja de los pesticidas" , donde los scripts ejecutados repetidamente dejan de detectar errores que van más allá de sus marcos. En tales casos, las pruebas manuales pueden ser una mejor inversión. Esta ambigüedad lleva una vez más a la conclusión de que la decisión sobre la automatización de pruebas debe tomarse individualmente, teniendo en cuenta los requisitos y peculiaridades del proyecto.

que probar

Las herramientas de prueba pueden ayudar a automatizar tareas como la instalación de productos, la creación de datos de prueba, la interacción con la GUI, la detección de problemas (considere agentes de análisis o sondeo equipados con oráculos de prueba ), registro de defectos, etc., sin necesariamente automatizar las pruebas de un extremo a otro. .

Hay que seguir satisfaciendo los requisitos populares cuando se piensa en la automatización de pruebas:

Roles

Herramientas de automatización de pruebas

Las herramientas de automatización de pruebas pueden ser costosas y generalmente se emplean en combinación con pruebas manuales. La automatización de pruebas puede resultar rentable a largo plazo, especialmente cuando se utiliza repetidamente en pruebas de regresión . Un buen candidato para la automatización de pruebas es un caso de prueba para el flujo común de una aplicación, ya que debe ejecutarse (prueba de regresión) cada vez que se realiza una mejora en la aplicación. La automatización de pruebas reduce el esfuerzo asociado con las pruebas manuales. Se necesita un esfuerzo manual para desarrollar y mantener controles automatizados, así como para revisar los resultados de las pruebas.

Ingeniero de pruebas

En las pruebas automatizadas, el ingeniero de pruebas o la persona de control de calidad del software debe tener capacidad de codificación de software, ya que los casos de prueba están escritos en forma de código fuente que, cuando se ejecuta, produce resultados de acuerdo con las afirmaciones que forman parte del mismo. Algunas herramientas de automatización de pruebas permiten que la creación de pruebas se realice mediante palabras clave en lugar de codificación, lo que no requiere programación.

Pruebas en diferentes niveles.

Una estrategia para decidir la cantidad de pruebas a automatizar es la pirámide de automatización de pruebas. Esta estrategia sugiere escribir tres tipos de pruebas con diferente granularidad. Cuanto mayor sea el nivel, menor será la cantidad de pruebas a escribir. [dieciséis]

Niveles de unidad, servicio e interfaz de usuario

La pirámide de automatización de pruebas propuesta por Mike Cohn [16]

Niveles de unidad, integración y de extremo a extremo

Un diagrama triangular que representa la "pirámide de pruebas" de Google. Progresa desde la sección más pequeña "E2E" en la parte superior, a "Integración" en el medio y a la sección más grande "Unidad" en la parte inferior.
Pirámide de pruebas de Google [19]

Una concepción de la pirámide de pruebas contiene pruebas unitarias, de integración y de un extremo a otro. Según el blog de pruebas de Google , las pruebas unitarias deberían constituir la mayor parte de su estrategia de prueba, con menos pruebas de integración y solo una pequeña cantidad de pruebas de un extremo a otro. [19]

Enfoque marco en la automatización.

Un marco de automatización de pruebas es un sistema integrado que establece las reglas de automatización de un producto específico. Este sistema integra bibliotecas de funciones, fuentes de datos de prueba, detalles de objetos y varios módulos reutilizables. Estos componentes actúan como pequeños bloques de construcción que deben ensamblarse para representar un proceso de negocio. El marco proporciona la base para la automatización de pruebas y simplifica el esfuerzo de automatización.

La principal ventaja de un marco de supuestos, conceptos y herramientas que brindan soporte para las pruebas de software automatizadas es el bajo costo de mantenimiento . Si hay cambios en cualquier caso de prueba , solo es necesario actualizar el archivo del caso de prueba y el script del controlador y el script de inicio seguirán siendo los mismos. Idealmente, no es necesario actualizar los scripts en caso de cambios en la aplicación.

Elegir el marco/técnica de scripting adecuado ayuda a mantener costos más bajos. Los costos asociados con los scripts de prueba se deben a los esfuerzos de desarrollo y mantenimiento. El enfoque de secuencias de comandos utilizado durante la automatización de pruebas tiene un efecto sobre los costos.

Generalmente se utilizan varias técnicas de marco/scripting:

  1. Lineal (código de procedimiento, posiblemente generado por herramientas como las que utilizan grabación y reproducción)
  2. Estructurado (utiliza estructuras de control, normalmente condiciones/declaraciones 'if-else', 'switch', 'for', ' while')
  3. Basado en datos (los datos persisten fuera de las pruebas en una base de datos, hoja de cálculo u otro mecanismo)
  4. Basado en palabras clave
  5. Híbrido (se utilizan dos o más de los patrones anteriores)
  6. Marco de automatización ágil

El marco de pruebas es responsable de: [20]

  1. definir el formato en el que expresar expectativas
  2. Crear un mecanismo para conectarse o controlar la aplicación bajo prueba.
  3. ejecutando las pruebas
  4. informar resultados

Marcos de pruebas unitarias

Una tendencia creciente en el desarrollo de software es el uso de marcos de pruebas unitarias como los marcos xUnit (por ejemplo, JUnit y NUnit ) que permiten la ejecución de pruebas unitarias para determinar si varias secciones del código actúan como se espera en diversas circunstancias. Los casos de prueba describen pruebas que deben ejecutarse en el programa para verificar que se ejecute como se esperaba.

Interfaz de automatización de pruebas

Las interfaces de automatización de pruebas son plataformas que proporcionan un espacio de trabajo único para incorporar múltiples herramientas y marcos de prueba para las pruebas de integración/sistema de la aplicación bajo prueba. El objetivo de Test Automation Interface es simplificar el proceso de asignar pruebas a criterios comerciales sin que la codificación se interponga en el proceso. Se espera que la interfaz de automatización de pruebas mejore la eficiencia y flexibilidad del mantenimiento de scripts de prueba. [21]

Modelo de interfaz de automatización de pruebas

La interfaz de automatización de pruebas consta de los siguientes módulos principales:

Motor de interfaz

Los motores de interfaz se construyen sobre Interface Environment. El motor de interfaz consta de un analizador y un ejecutor de pruebas. El analizador está presente para analizar los archivos de objetos provenientes del repositorio de objetos en el lenguaje de secuencias de comandos específico de la prueba. El ejecutor de pruebas ejecuta los scripts de prueba utilizando un arnés de prueba . [21]

Repositorio de objetos

Los repositorios de objetos son una colección de datos de objetos de aplicación/UI registrados por la herramienta de prueba mientras explora la aplicación bajo prueba. [21]

Definición de límites entre el marco de automatización y una herramienta de prueba

Las herramientas están diseñadas específicamente para apuntar a algún entorno de prueba particular, como Windows y herramientas de automatización web, etc. Las herramientas sirven como agente impulsor de un proceso de automatización. Sin embargo, un marco de automatización no es una herramienta para realizar una tarea específica, sino una infraestructura que proporciona la solución donde diferentes herramientas pueden hacer su trabajo de manera unificada. Esto proporciona una plataforma común para el ingeniero de automatización.

Hay varios tipos de marcos. Se clasifican según el componente de automatización que aprovechan. Estos son:

  1. Pruebas basadas en datos
  2. Pruebas basadas en modularidad
  3. Pruebas basadas en palabras clave
  4. Pruebas híbridas
  5. Pruebas basadas en modelos
  6. Pruebas basadas en código
  7. Desarrollo impulsado por el comportamiento

Pruebas basadas en datos

Las pruebas basadas en datos (DDT), también conocidas como pruebas basadas en tablas o pruebas parametrizadas, son una metodología de prueba de software que se utiliza en las pruebas de software informático para describir las pruebas realizadas utilizando una tabla de condiciones directamente como entradas de prueba y salidas verificables como así como el proceso en el que la configuración y el control del entorno de prueba no están codificados. [22] [23] En la forma más simple, el probador proporciona las entradas de una fila de la tabla y espera las salidas que ocurren en la misma fila. La tabla normalmente contiene valores que corresponden a espacios de entrada de límite o partición. En la metodología de control, la configuración de la prueba se "lee" desde una base de datos.

Pruebas basadas en modularidad

Las pruebas basadas en modularidad son un término utilizado en las pruebas de software . El marco de modularidad del script de prueba requiere la creación de scripts pequeños e independientes que representen módulos, secciones y funciones de la aplicación bajo prueba. Estos pequeños scripts luego se utilizan de forma jerárquica para construir pruebas más grandes, realizando un caso de prueba particular. [24]

Pruebas basadas en palabras clave

Las pruebas basadas en palabras clave , también conocidas como pruebas basadas en palabras de acción (que no deben confundirse con las pruebas impulsadas por acciones), son una metodología de prueba de software adecuada tanto para pruebas manuales como automatizadas . Este método separa la documentación de los casos de prueba  (incluidos tanto los datos como la funcionalidad a utilizar) de la prescripción de la forma en que se ejecutan los casos de prueba. Como resultado, separa el proceso de creación de pruebas en dos etapas distintas: una etapa de diseño y desarrollo, y una etapa de ejecución. La subetapa de diseño cubre el análisis y evaluación de requisitos y el análisis, definición y población de datos.

Pruebas híbridas

Las pruebas híbridas es en lo que la mayoría de los marcos evolucionan/se desarrollan con el tiempo y en múltiples proyectos. Los marcos de automatización más exitosos generalmente se adaptan tanto a la gramática como a la ortografía, así como al ingreso de información. Esto permite cotejar la información proporcionada con la información existente y confirmada. Esto ayuda a evitar que se publique información falsa o engañosa. Sin embargo, todavía permite que otros publiquen información nueva y relevante en publicaciones existentes, y así aumenta la utilidad y relevancia del sitio. Dicho esto, ningún sistema es perfecto y es posible que no funcione según este estándar en todos los temas todo el tiempo, pero mejorará a medida que aumenten los aportes y el uso.

Pruebas basadas en modelos

Configuración de prueba general basada en modelos
Las pruebas basadas en modelos son una aplicación de diseño basado en modelos para diseñar y, opcionalmente, también ejecutar artefactos para realizar pruebas de software o pruebas de sistemas . Los modelos se pueden utilizar para representar el comportamiento deseado de un sistema bajo prueba (SUT), o para representar estrategias de prueba y un entorno de prueba. La imagen de la derecha muestra el enfoque anterior.

Desarrollo impulsado por el comportamiento

El desarrollo basado en el comportamiento (BDD) implica nombrar pruebas de software utilizando un lenguaje de dominio para describir el comportamiento del código .

Ver también

Referencias

  1. ^ Kolawa, Adán; Huizinga, Dorota (2007). Prevención automatizada de defectos: mejores prácticas en la gestión de software . Prensa de la Sociedad de Computación Wiley-IEEE. pag. 74.ISBN​ 978-0-470-04212-0.
  2. ^ O'Connor, Rory V.; Akkaya, Mariye Umay; Kemaneci, Kerem; Yilmaz, Murat; Poth, Alejandro; Messnarz, Richard (15 de octubre de 2015). Mejora de procesos de sistemas, software y servicios: 22ª Conferencia Europea, EuroSPI 2015, Ankara, Turquía, 30 de septiembre - 2 de octubre de 2015. Actas. Saltador. ISBN 978-3-319-24647-5.
  3. ^ Actas de la V Conferencia Internacional sobre Pruebas y Validación de Software (ICST). Centro de competencia de software Hagenberg. "Diseño de pruebas: lecciones aprendidas e implicaciones prácticas . doi :10.1109/IEEESTD.2008.4578383. ISBN 978-0-7381-5746-7.
  4. ^ Las pruebas de API protegen las aplicaciones y la reputación, por Amy Reichert, SearchSoftwareQuality, marzo de 2015
  5. ^ Todo sobre las pruebas de API: una entrevista con Jonathan Cooper, por Cameron Philipp-Edmonds, Stickyminds 19 de agosto de 2014
  6. ^ Produzca un mejor software mediante el uso de una estrategia de prueba en capas, por Sean Kenefick, Gartner 7 de enero de 2014
  7. ^ Pruebas sin cabeza con navegadores; https://docs.travis-ci.com/user/gui-and-headless-browsers/
  8. ^ Pruebas sin cabeza con PhantomJS; http://phantomjs.org/headless-testing.html
  9. ^ Pruebas automatizadas de interfaz de usuario; https://www.devbridge.com/articles/automated-user-interface-testing/
  10. ^ Vodde, Bas; Koskela, Lasse (2007). "Aprendizaje del desarrollo basado en pruebas mediante el conteo de líneas". Software IEEE . 24 (3): 74–79. doi :10.1109/ms.2007.80. S2CID  30671391.
  11. ^ Parte del proceso: por qué las pruebas continuas son esenciales, por Adam Auerbach, TechWell Insights, agosto de 2015
  12. ^ La relación entre riesgo y pruebas continuas: una entrevista con Wayne Ariola, por Cameron Philipp-Edmonds, Stickyminds diciembre de 2015
  13. ^ DevOps: ¿Está enviando errores a los clientes más rápido?, por Wayne Ariola y Cynthia Dunlop, PNSQC, octubre de 2015
  14. ^ Brian Marick. "¿Cuándo debería automatizarse una prueba?". StickyMinds.com . Consultado el 20 de agosto de 2009 .
  15. ^ Garusi, Vahid; Mäntylä, Mika V. (1 de agosto de 2016). "¿Cuándo y qué automatizar en las pruebas de software? Una revisión de la literatura multivocal". Tecnología de la información y software . 76 : 92-117. doi :10.1016/j.infsof.2016.04.015.
  16. ^ a b C Mike Cohn (2010). Triunfando con Agile . Raina Chrobak. ISBN 978-0-321-57936-2.
  17. ^ "Pruebas de pila completa por Gayathri Mohan". www.thinkworks.com . Consultado el 13 de septiembre de 2022 .
  18. ^ La pirámide de pruebas prácticas, de Ham Vocke
  19. ^ ab "Simplemente diga no a más pruebas de un extremo a otro". Blog de pruebas de Google . Consultado el 11 de febrero de 2023 .
  20. ^ "Selenium Meet-Up 20/04/2010 Elisabeth Hendrickson sobre Robot Framework 1 de 2". YouTube . 28 de abril de 2010 . Consultado el 26 de septiembre de 2010 .
  21. ^ abc "Conquest: interfaz para el diseño de automatización de pruebas" (PDF) . Archivado desde el original (PDF) el 26 de abril de 2012 . Consultado el 11 de diciembre de 2011 .
  22. ^ "golang/go TableDrivenTests". GitHub .
  23. ^ "Guía del usuario de JUnit 5". junit.org .
  24. ^ DESAI, SANDEEP; SRIVASTAVA, ABHISHEK (30 de enero de 2016). PRUEBAS DE SOFTWARE: un enfoque práctico (en árabe). PHI Aprendizaje Pvt. Limitado. ISBN limitado 978-81-203-5226-1.

Referencias generales