¿Deberían los desarrolladores ser responsables de otras pruebas además de las pruebas unitarias? De ser así, ¿cuáles son las más comunes?

35

Actualmente estoy trabajando en un proyecto bastante grande, y he usado JUnit y EasyMock para unir bastante ampliamente la funcionalidad de prueba. Ahora estoy interesado en qué otros tipos de pruebas debería preocuparme. Como desarrollador, ¿es mi responsabilidad preocuparme por cosas como pruebas funcionales o de regresión? ¿Hay una buena manera de integrarlos de manera útil en herramientas como Maven / Ant / Gradle? ¿Son estos más adecuados para un Tester o BA? ¿Hay otros tipos útiles de pruebas que me faltan?

Jackie
fuente
2
Si bien es simple en la práctica, escale hacia afuera tanto como sea posible en su entorno, mientras se mantiene conversacional en la práctica versus aislado, que es lo que generalmente existe. Piense en el equipo de extremo a extremo como algo más que la segregación y más sobre el conjunto de habilidades, cada equipo representa un conjunto de habilidades variable que debe aprovecharse para el éxito de extremo a extremo. El equipo debe ser responsable del éxito de las pruebas que se necesitan para lograr. La forma en que se abordan con respecto a la implementación es solo eso, un detalle de implementación basado en el conjunto de habilidades.
Aaron McIver
1
La respuesta a esta pregunta también dependerá del nivel de habilidad de los otros miembros del equipo. Por ejemplo, en un equipo donde el control de calidad no tiene fuertes habilidades de programación, los desarrolladores pueden encontrarse haciendo más que en un equipo donde el control de calidad puede escribir sus propios arneses de prueba.
neontapir
Un buen criterio es qué tan automatizables son las pruebas. Los programadores son buenos para automatizar cosas con código.
rwong

Respuestas:

44

Es su responsabilidad esforzarse por entregar un código libre de defectos. Debe escribir, ayudar a escribir o asegurarse de que las pruebas se escriban o realicen para darle confianza en el código que está entregando.

Nota: no digo que deba entregar un código sin defectos. Por el contrario, debe intentar escribir el mejor código que pueda para los requisitos que se le dieron. Parte de poder hacer eso significa que el código debe ser probado.

Si eso significa que usted es personalmente responsable de las pruebas funcionales y de regresión, depende principalmente de cómo está organizada su empresa. Todos los programadores más calificados que conozco no se preguntan "¿es mi responsabilidad escribir pruebas de tipo X?". En cambio, se preguntan "¿qué debo hacer para asegurarme de que mi código se pruebe correctamente?". La respuesta podría ser escribir pruebas unitarias, o agregar pruebas a la regresión, o podría significar hablar con un profesional de control de calidad y ayudarlo a comprender qué pruebas deben escribirse. En todos los casos, sin embargo, significa que se preocupan lo suficiente por el código que están escribiendo para asegurarse de que se pruebe correctamente.

En pocas palabras: debe ser responsable de entregar un código de alta calidad. Si eso significa que necesita escribir algunas pruebas funcionales o de regresión, hágalo.

Bryan Oakley
fuente
Estoy totalmente de acuerdo con la entrega de código de alta calidad. Me refería más al código bueno "más allá". Por ejemplo, los cambios que se consideran "libres de errores" dentro de su perspectiva tienen un rendimiento negativo en otro lugar. El mejor ejemplo que se me ocurre es que un requisito no se ha investigado adecuadamente para la carga. Por lo tanto, mi código causa problemas de carga en el servidor a pesar de que está "libre de errores" (está bien, por lo que se puede argumentar que no es solo humor). PD: Creo que tu parte de confianza es clave aquí.
Jackie
10
Es su responsabilidad entregar un código libre de defectos Es responsabilidad del desarrollador construir lo que se le solicitó . Los defectos pueden surgir y surgen de requisitos mal reunidos / interpretados, problemas ambientales en una implementación determinada, conflictos dentro de un sistema operativo, etc. A menos que se realice un análisis de causa raíz en todos y cada uno de los defectos, el código libre de defectos para la empresa significa que esperan hacer lo que el usuario espera y cualquier otra cosa es un defecto. No es realista suponer que un desarrollador puede permanecer involucrado en todo el SDLC para simplemente aumentar la confianza; eso no escalará.
Aaron McIver
2
"Las pruebas de programa pueden ser una forma muy efectiva de mostrar la presencia de errores, pero es irremediablemente inadecuado para mostrar su ausencia". - Edsger W. Dijkstra, "El programador humilde" (conferencia del Premio Turing), 1972.
John R. Strohm
1
"Es su responsabilidad entregar un código sin defectos". es tierra de hadas Puede entregar lo que el alcance requiere, pero los casos extremos y las interpretaciones de la lógica de negocios hacen que su declaración sea imposible de cumplir. ¿Por qué crees que cada versión principal de software tiene versiones y parches, etc.? Porque todos somos imperfectos, incluida la lógica empresarial.
Jason Sebring
44
¿Todos los que están en desacuerdo con la primera oración de esta respuesta estarían más felices si Bryan lo hubiera redactado como "Es su objetivo entregar un código libre de defectos"?
Carson63000
13

Esto podría ayudarte:

Los cuadrantes de prueba ágiles

Q1 están escritos por los desarrolladores.

Q2 son automatizados por los desarrolladores y escritos en colaboración con el negocio y / o evaluadores.

código de barras
fuente
Los desarrolladores también suelen participar en las pruebas del cuarto trimestre.
neontapir
El archivo vinculado ya no se puede encontrar.
Dušan Rychnovský
3

¿Hay otros tipos útiles de pruebas que me faltan?

Hay pruebas de aceptación para las que recomendaría marcos de estilo BDD que usan el lenguaje Gherkin : JBehave (Java), Cucumber (Ruby), Behat (PHP), etc. Este tipo de prueba tiene algunas ventajas sobre las pruebas unitarias:

  • Las pruebas son fácilmente legibles por los no desarrolladores, por lo que puede mostrarlas a los clientes
  • Las pruebas describen claramente los procesos comerciales sin entrar en detalles de implementación (no quiero decir que la implementación no sea importante, seguro que lo es, pero es mejor cuando separa los requisitos comerciales del propio código)
  • Las pruebas hacen cosas que los usuarios harán con su aplicación
  • Son más fáciles de escribir (en mi humilde opinión, puede depender del idioma y el marco): sin burlas, menos detalles técnicos
scriptin
fuente
3

Las pruebas funcionales se pueden automatizar al igual que las pruebas unitarias, y son muy útiles para probar cómo los diferentes componentes de su proyecto trabajan juntos y qué tan bien su sistema refleja las reglas de negocio.

Además, esta prueba automatizada sirve como un conjunto de pruebas de regresión y aceptación para cualquier cambio importante (o menor) que tenga que hacer al software (corrección de errores, refactorización, cambio comercial, nueva funcionalidad, etc.). Esto les da a los desarrolladores mucha más confianza para hacerlo.

Hay varios marcos para este tipo de pruebas, estamos usando fitnesse con muy buenos resultados. Tiene una biblioteca muy buena para probar páginas web (la usamos para probar nuestra aplicación web y nuestros servicios web) y se integra muy bien con Maven y Jenkins .

También solíamos hacer "pruebas funcionales cruzadas", entre desarrolladores, pero este tipo de pruebas no es "repetible", por lo que su utilidad es limitada ...

Pablo Lascano
fuente
2

Como desarrollador, me considero responsable de las pruebas unitarias de todo mi código y garantizo lo mejor de mis posibilidades que no tiene ningún defecto. Es por eso que tenemos tantas herramientas a nuestra disposición, como burlas. El objetivo de crear objetos burlones en sus pruebas es exactamente tratar de aislar su código del mundo "exterior" y garantizar que funcione bien y, si algo falla, "no es su culpa".

Dicho esto, a pesar de que no es tu culpa y que tu código funciona como debería, eso no significa que no puedas ayudar en el resto de las pruebas. Creo que también es su responsabilidad ayudar e integrar su trabajo en el trabajo realizado por otros. Los equipos de desarrollo de TI deben trabajar siempre como una máquina bien engrasada, trabajando junto con otros departamentos (como QA) como un equipo más grande para proporcionar software confiable.

Pero ese es el trabajo de un equipo, no solo tuyo.

nunomvbarreiro
fuente
1

Obviamente pruebas de integración ; son más importantes y más difíciles de escribir que las pruebas unitarias. Es como construir una casa; Con las pruebas unitarias solo se asegura el hecho de que los ladrillos son sólidos y resisten la presión, temperatura, humedad y otras condiciones. Pero no tiene idea de cómo se ve y se comporta la casa con los ladrillos juntos.

El problema con los proyectos grandes, especialmente los Java que residen en un contenedor es que las pruebas de integración son difíciles. Por lo tanto, para facilitar las pruebas de integración del sistema en grandes proyectos, se necesita un marco de prueba, hecho especialmente para el proyecto, que es el trabajo del desarrollador para codificarlo. Recientemente se han realizado grandes mejoras en esta área y plataformas como Arquillian simplifican en gran medida la redacción de un marco de prueba (o incluso lo sustituye).

m3th0dman
fuente
1

En el mundo real, usted es tan responsable como su equipo / jefe lo responsabiliza. Si le pagan o contratan para trabajar sin parar para encontrar todos los rincones y saltar al capricho de la interpretación de su jefe (o peor comercialización) de errores de lógica de negocios, entonces, por todos los medios, usted es responsable de todos.

En otras palabras, haga lo que requiera el alcance que se le haya otorgado. Es un buen extra agregar algo de sentido común o ver a otros usar el producto que está construyendo para tener una idea de los casos de uso y posibles problemas para solucionar, pero mencione esto a su equipo o jefe antes de "arreglarlo". Esto incluye las herramientas de su elección. Todos sus esfuerzos deberían ser algo con lo que todos estén de acuerdo.

Si su pregunta es útil para el seguimiento de errores, me gusta bugzilla, google docs, zendesk o basecamp en términos de sistemas de comunicación.

Jason Sebring
fuente
1

No creo que esto ya haya sido cubierto, perdón si me lo perdí.

Un problema es el uso eficiente del tiempo de los desarrolladores.

Los desarrolladores a menudo carecen de las habilidades para ser buenos en ciertos tipos de pruebas. En parte, esto es simplemente natural. Es la misma razón por la cual los autores tienen editores. Es muy difícil ver las deficiencias en algo si estás demasiado cerca de eso. Pero también se trata de diferentes conjuntos de habilidades y diferentes especialidades.

Siendo ese el caso, un desarrollador que pasa tiempo probando es pobre en costo: términos de beneficios. Ese desarrollador sería más productivo haciendo otras cosas, y un probador especializado sería más productivo haciendo las pruebas.

Por supuesto, está haciendo varias suposiciones que no son necesariamente válidas. En una empresa pequeña, por ejemplo, puede que no tenga sentido contratar a personas especializadas en pruebas. Aunque puede tener más sentido emplear personal de soporte adicional y hacer que hagan algunas pruebas, o al menos hacer que las personas prueben el código que no escribieron ellos mismos.

Steve314
fuente
0

Creo que es nuestra responsabilidad (también del desarrollador) abarcar todos los escenarios de prueba posibles antes de que se lance para QA. El propósito de QA es validar el software. Además, martillar su propio código para detectar errores siempre lo hará verse bien cuando llegue el momento del control de calidad.

Honus Wagner
fuente
Creo que estoy tratando de llegar a lo que se considera "martilleo" efectivo.
Jackie
Eso es definitivamente subjetivo. Diría que cualquier tipo de prueba que se aplique a su proyecto (no todos los tipos de prueba se aplican a todos los proyectos, por supuesto). Aquí hay una lista decente: softwaretestinghelp.com/types-of-software-testing . Lo que haces tú mismo y lo que eliges renunciar, por supuesto, depende de tu propio tiempo, recursos y habilidades. Por ejemplo, es posible que no pueda realizar la Prueba de aceptación porque hay ciertas reglas que solo un usuario sabía que debía seguir. En resumen, haga todo lo que pueda en el tiempo que tenga.
Honus Wagner
Para mis proyectos que son principalmente web, generalmente trato de abarcar Unidad, Funcionalidad, Usabilidad, Regresión, Rendimiento sin importar qué. Si tengo tiempo, voy por White Box, Stress, Compatibility, incluso Acceptance si sé lo suficiente. Mi estilo general de codificación es extremadamente orientado al rendimiento, por lo que disminuyo mi prioridad en eso. Nada de esto significa que el control de calidad no encuentre algo incorrecto en ninguno de esos tipos de prueba, solo significa que encontrarán menos y harán una ronda mucho más fácil 2.
Honus Wagner
0

Quién mejor que un desarrollador para saber qué casos de prueba son los más relevantes. El desarrollador debe ser responsable de hacer todas las pruebas unitarias, donde sea posible, el desarrollador debe ayudar a escribir y ejecutar los scripts de prueba. Dado que esto rara vez es posible en proyectos grandes, se debe dar tiempo al desarrollador para que revise todos los casos de prueba. Además, el desarrollador debe tener conocimiento y utilizar la amplia variedad de herramientas de prueba automatizadas disponibles.

En mi carrera de desarrollo, encuentro que los proyectos terminan con mejores resultados donde hay una estrecha integración entre los equipos de desarrollo y los equipos de prueba.

al menos un miembro de cada equipo debe participar en las otras reuniones de planificación e implementación también.

Michelle Cannon
fuente
1
El único problema que tengo con esto es que debería haber un cierto grado de aislamiento entre los desarrolladores y el equipo de prueba, de lo contrario, el equipo de prueba se contaminará con la opinión del desarrollador "el código funciona". El control de calidad y los desarrolladores tienen objetivos opuestos; el desarrollador está tratando de hacerlo funcionar, mientras que el equipo de control de calidad está tratando de hacer que se rompa, y el desarrollador no siempre tiene la mejor perspectiva sobre la relevancia de la prueba.
Robert Harvey
No estoy de acuerdo con el cien por ciento, pero de nuevo últimamente he estado involucrado con aplicaciones móviles y creo que requieren un nivel de integración un poco más allá de lo tradicional. Tenga en cuenta que uso el término integración. puede haber aislamiento, pero ambos equipos deben revisar y contribuir a los casos de prueba. Es poco probable que los desarrolladores tengan acceso a todos los recursos de prueba necesarios para realizar las pruebas adecuadas, también es poco probable que los evaluadores tengan el conocimiento para desarrollar casos de prueba para algo tan avanzado como la transmisión de video a través de redes celulares. demasiado aislamiento = problemas.
Michelle Cannon
Además, creo que cuanto más vertical sea el mercado y más especializados estén, se necesitará más integración entre los equipos. En realidad, todos deberían pasar a la fase de prueba con la idea de que el código funciona bajo algunas condiciones probadas, pero es más probable que tenga fallas, entonces no
Michelle Cannon
Esto parece funcionar, el equipo de prueba produce un documento de caso de uso utilizando la especificación funcional. El equipo de desarrollo revisa el documento del caso de uso basado en especificaciones técnicas y funcionales y agrega casos según sea necesario. El equipo de prueba desarrolla escenarios de prueba a partir de casos de uso. Desarrollo de pruebas de revisión de casos de prueba. Seguramente requiere mucho tiempo, pero es mejor que probar más tarde en la fase de implementación o producción.
Michelle Cannon