Introducción a las pruebas de software (Ammann & Offutt) menciona en la p.32 un modelo de madurez de prueba de 5 niveles:
Nivel 0 No hay diferencia entre probar y depurar.
Nivel 1 El propósito de las pruebas es mostrar que el software funciona.
Nivel 2 El propósito de las pruebas es mostrar que el software no funciona.
Nivel 3 El propósito de las pruebas no es probar nada específico, sino reducir el riesgo de usar el software.
Level 4 Testing es una disciplina mental que ayuda a todos los profesionales de TI a desarrollar software de mayor calidad.
Aunque no entran en muchos más detalles. ¿Cuáles son las diferencias entre depuración y prueba?
Respuestas:
Las pruebas están destinadas a encontrar defectos en el código, o desde un ángulo diferente, para demostrar a un nivel adecuado (nunca puede ser del 100%) que el programa hace lo que se supone que debe hacer. Puede ser manual o automatizado, y tiene muchos tipos diferentes, como pruebas de unidad, integración, sistema / aceptación, estrés, carga, remojo, etc.
La depuración es el proceso de encontrar y eliminar un error específico del programa. Siempre es un proceso manual, único, ya que todos los errores son diferentes.
Supongo que el autor quiere decir que, en el Nivel 0, solo se realizan pruebas manuales, de manera ad hoc, sin un plan de prueba ni nada para garantizar que el probador realmente probó a fondo la característica bajo prueba, y que las pruebas pueden ser repetido confiablemente.
fuente
La depuración es un proceso manual paso a paso que está involucrado, no estructurado y no es confiable. Al probar a través de la depuración, crea escenarios que no son repetibles, por lo tanto, inútiles para las pruebas de regresión. Todos los niveles que no sean 0 (en su ejemplo) excluyen la depuración en mi opinión por este motivo exacto.
fuente
La depuración es un intento de solucionar problemas conocidos y desconocidos revisando metódicamente el código. Cuando está depurando, generalmente no está enfocado en el código en su conjunto, y casi siempre está trabajando en el backend, en el código real.
La prueba es un intento de crear un problema a través de varias formas de usar el código que luego se puede depurar. Casi siempre se realiza en el espacio de usuario, donde está ejecutando el código como lo ejecutaría un usuario final e intentando que se rompa.
fuente
En términos simples, se dice que ha ocurrido un "error" cuando su programa, en ejecución, no se comporta como debería. Es decir, no produce la salida o los resultados esperados. Cualquier intento de encontrar el origen de este error, encontrar formas de corregir el comportamiento y realizar cambios en el código o la configuración para corregir el problema puede denominarse depuración.
La prueba es donde se asegura de que el programa o código funciona correctamente y de manera robusta en diferentes condiciones: "prueba" su código al proporcionar entradas, entradas correctas estándar, entradas intencionalmente incorrectas, valores límite, entorno cambiante (SO, archivo de configuración) . Esencialmente, podemos decir que intenta descubrir errores y eventualmente "depurarlos" en el proceso de prueba. Espero que ayude.
fuente
No hay ninguno. Si lo haces bien:
fuente
La prueba es un privilegio que disfruta antes de entregar al cliente.
Los errores son una pesadilla que soportas después de liberar al cliente.
fuente
Otros han mencionado cuáles son las diferencias entre las pruebas y la depuración.
Me gustaría hacer hincapié en una parte común . Cuando un probador encuentra un defecto, debe aislarse. La depuración es una de las técnicas para aislar el problema y encontrar una causa raíz al analizar el estado de la aplicación y su código en tiempo de ejecución. De hecho, los diccionarios Oxford definen la depuración como "el proceso de identificación y eliminación de errores del hardware o software de la computadora".
Quien aislará (o depurará en particular) un defecto, ya sea un probador o un desarrollador, es una pregunta secundaria.
fuente
El modelo de madurez de prueba que ha enumerado son descripciones de la mentalidad del equipo de desarrollo.
Lo que la lista implica, sin decir explícitamente, es cómo el cambio en la mentalidad afecta la forma en que se realizan las pruebas.
A medida que un equipo de desarrollo avanza al siguiente nivel, el alcance de las pruebas se amplía.
En el Nivel 0, no se realizan pruebas, porque el equipo piensa que no es necesario.
En el Nivel 1, las pruebas se realizan para proporcionar una cobertura nominal de funcionalidades básicas.
En el Nivel 2, las pruebas se amplían para incluir todo en el Nivel 1 y agregan pruebas destructivas (un equipo de pruebas dedicado que tiene acceso a toda la información a la que tienen acceso los desarrolladores, incluidos el código fuente y los archivos binarios, e intenta encontrar errores que puedan ser activado desde un rol de usuario)
En el nivel 3, además de todo en los niveles 1-2, se agregan pruebas no funcionales / pruebas basadas en la falta de corrección (como las características de rendimiento).
En el nivel 4, los objetivos de las pruebas de software son bien entendidos por todas las personas, incluido el personal de TI orientado al cliente. Por lo tanto, el personal de TI podrá proporcionar comentarios sobre qué escenarios probar, mejorando la cobertura de riesgos del Nivel 4.
(Descargo de responsabilidad: no tengo acceso al libro de texto, por lo tanto, mi terminología puede ser incorrecta).
fuente
Los errores son errores visibles. La depuración es el proceso iniciado después del diseño del caso de prueba. Es una tarea más difícil que la prueba, porque en el proceso de depuración necesitamos encontrar la fuente del error y eliminarlo, por lo que a veces la depuración frustra al usuario.
fuente
Hablando en términos cotidianos y prácticos, creo que depende totalmente del contexto .
En un equipo med-grande, que trabaja con estándares altos / muy altos (piense en sistemas bancarios, militares, a gran escala, de alto presupuesto o críticos para el negocio), entonces creo claramente que la "depuración" debería ser "el resultado de una prueba" , y claramente Cosas muy diferentes . Idealmente, las pruebas conducen a la depuración (en un entorno de preparación) y en la producción necesitamos cerca de cero.
Las pruebas son amplias, regulares y muy formalizadas, mientras que la depuración es un proceso particular que ocurre ocasionalmente cuando existe la necesidad de corregir una falla particular, lo cual no es obvio y requiere una investigación más profunda del funcionamiento del sistema y los resultados resultantes.
Aquí, en mi mente, las pruebas son algo esencial, mientras que la depuración es una herramienta específica necesaria solo cuando la resolución de una falla es opaca.
Entiendo totalmente la utilidad obvia en TDD para grandes equipos y / o sistemas que simplemente no pueden permitirse el lujo de "tener errores". También tiene mucho sentido para sistemas complejos (a menudo "back-end") o si hay una alta proporción de complejidad en el código en comparación con la salida. Entonces, "probar" tiene una posibilidad realista de informar cuándo y por qué ocurren las fallas. Los sistemas que realizan mucho trabajo complejo y que producen resultados claramente medibles son generalmente fácilmente comprobables, por lo que las pruebas son distintas de la depuración. En estos casos, las pruebas implican un método formalizado basado en procedimientos para confirmar o des-confirmar la coincidencia de expectativas y resultados reales. Las pruebas se realizan todo el tiempo y ocasionalmente nos informan sobre la necesidad de depurar.
Sería encantador si esta fuera una verdad omnipresente, me encantaría si mis ciclos de desarrollo estuvieran delimitados por una salida binaria claramente definida (rojo, verde) pero ...
En mi caso (lo cual es ciertamente particular: trabajar 98% solo en sistemas de administración corporativos centrados en datos y basados en web pequeños, medianos y poco financiados) Realmente no puedo ver cómo TDD podría ayudarme. O mejor dicho, "depuración" y "prueba" son prácticamente lo mismo.
Principalmente, aunque el uso del término "prueba" implica / se relaciona estrechamente con la metodología de TDD.
Sé que esto es totalmente, totalmente no Zeitgeist "rehúye al no creyente, rehúye, rehúye", algo despreciablemente desagradable que decir. Pero pensando en mi contexto, con un sombrero práctico puesto, ni siquiera vagamente, en mi imaginación más salvaje, veo cómo TDD podría ayudarme a entregar más valor por dinero a mis clientes.
O más bien, estoy totalmente en desacuerdo con la suposición común de que "probar" es un proceso formal basado en código.
Mi objeción básica (aplicable en mi * contexto * particular ) es que ...
Si no puedo escribir código que funcione de manera confiable, entonces, ¿cómo diablos se supone que debo escribir código que funcione de manera confiable para probar dicho código presumiblemente por debajo del estándar?
Para mí, nunca he visto ningún ejemplo ni argumento que (en mi contexto particular) me haya entusiasmado lo suficiente como para molestarme en pensar en escribir una sola prueba , podría estar escribiendo un código de prueba ridículamente insustancial en este momento, tal vez "¿mi repositorio devuelve un Usuario? entidad con Nombre == X, cuando lo pido exactamente, ¿y solo eso? ", pero probablemente haya más utilidad en mí al escribir esta transmisión, tal vez-el-internet-realmente-es-solo-puro-tonto-escupir- basura auto-gratificante-salvajemente-bajo-informada-sangrienta-hirviente-derrochadora-tonta, pero solo siento la necesidad de jugar al abogado del diablo aquí. (Espero que alguien me muestre la luz y me convierta, ¿tal vez esto termine dando a mis clientes una mejor relación calidad-precio?).
Podría decirse que "depurar" a veces es lo mismo que "probar". Con esto realmente quiero decir que en mi vida laboral diaria paso al menos un tercio de mi tiempo jugando con la versión local de mi sistema en diferentes navegadores, probando desesperadamente diferentes cosas extrañas en un intento de romper mi trabajo y luego investigando las razones por las cuales falló y corregirlos.
Estoy 100% de acuerdo con la utilidad obvia en el mantra TDD "rojo / verde / refactor", pero para mí (trabajando en un presupuesto bajo, tierra de desarrollo individual de RIA) realmente me encantaría que alguien me muestre cómo podría posiblemente , de manera lógica y vitalmente realista, obtengo cualquier valor adicional al escribir más ( al igual que un código de prueba potencialmente defectuoso ) que al interactuar realmente con el resultado completo (y esencialmente único) de mis esfuerzos que están esencialmente vinculados a la interacción humana real.
Para mí, cuando los desarrolladores hablan de "pruebas", generalmente implica TDD.
Intento codificar como si hubiera pruebas, creo que todos los patrones / prácticas y tendencias que todo este desarrollo centrado en las pruebas ha fomentado son fantásticos y hermosos, pero para mí en mi pequeño mundo "probar" no es escribir más código, en realidad es probarlo en el mundo real lo genera de una manera realista y aproximada, y eso es prácticamente lo mismo que la depuración, o más bien el cambio activo aquí es la "depuración" que es un resultado directo de la "prueba" no automatizada centrada en la producción humana. Esto contrasta con la visión generalmente aceptada de "probar" como algo automatizado y formal, y "depurar" como algo humano y ad-hoc o no estructurado.
Si el objetivo es realmente el valor por el dinero / esfuerzo, y está haciendo aplicaciones interactivas basadas en la web, entonces el resultado del esfuerzo son las páginas web y, esencialmente, cómo reaccionan a la aportación humana , por lo que la mejor manera de "probar" es probar esas páginas web, a través de la interacción humana real. Cuando esta interacción conduce a resultados inesperados o indeseables, se produce la "depuración". La depuración también está estrechamente relacionada con la idea de la inspección en tiempo real del estado del programa. Las pruebas generalmente se asocian con la automatización, que creo que a menudo es una asociación desafortunada.
Si el objetivo es realmente valioso para el esfuerzo, y las pruebas automatizadas son eficientes y altamente beneficiosas, mientras que la depuración es solo una salida de esas pruebas o un mal sustituto de las pruebas automáticas, entonces ¿por qué es el segundo sitio web más visitado del mundo (Facebook ) tan a menudo plagado de errores cegadoramente obvios (para los usuarios, pero claramente no para el equipo de prueba y el código de prueba)?
¿Tal vez es porque se están concentrando en las tranquilizadoras luces verdes y olvidando usar realmente los resultados de su trabajo?
¿Demasiados desarrolladores piensan que las pruebas son algo que haces con el código, y la depuración es algo que haces ocasionalmente con el IDE porque un icono se vuelve rojo y no puedes entender por qué? Creo que estas palabras tienen juicios de valor desafortunados asociados con ellas, que generalmente oscurecen la realidad práctica de lo que debemos enfocar para cerrar las brechas entre las expectativas y los productos.
fuente
Simplemente,
La prueba significa que encontrar las entradas que hacen que un software falle durante la depuración es el proceso de encontrar la falla de una falla determinada.
fuente