Durante mi presentación en Valencia, expuse en una slide que era importante que los testers tuvieran programing o coding skills. Esta frase provoco una serie de murmuros, y note que decenas de ojos empezaban descuartizarme en su cabeza…

Efectivamente en cuanto acabe la presentación, todas las preguntas fueron hacia esa slide, ya que la mayoría de gente no estaba de acuerdo en que realmente un tester deba saber de programación. La pregunta abierta a debate es… Realmente un tester debe saber de programación? Porque existe tanto miedo a aprender a programar?

Aquí expongo mi opinión, pero no es más que eso, una opinión al respecto y por supuesto puede diferir de la de mucha gente:


PROGRAMAR O NO PROGRAMAR, ESA ES LA CUESTIÓN:

Parece ser que existe una gran reticencia de mucha gente que se dedica a la calidad de software y al testing (sobretodo estos últimos) a no tener que saber nada sobre programación. Esto en parte se debe a dos motivos (entre otros muchos): El primero de ellos es que mucha gente se ha dedicado al software testing por casualidad, y es gente reciclada de otros trabajos como soporte, o gente de la capa de negocio o más funcional. El segundo motivo es que otro gran porcentaje de testers son gente que se metieron en este sector porque justamente no querían programar y les pareció una alternativa sencilla para seguir dentro de las IT sin tener que saber programar.

Pero realmente sirve para algo saber de programación para ser tester?

 

Testing triangle

A mi siempre me ha gustado mostrar una pequeña figura como la siguiente donde localizo el testing entre dos mundos que casi están separados, la capa de negocio y la parte de desarrollo o parte técnica.

Para mi el tester ha de ser comunicador entre ambas partes (junto otros roles implicados en el desarrollo), ya que entre ellas la comunicación puede llegar a ser muy complicada.

Como podéis observar el tester toca tanto la parte de negocio como de desarrollo. Todo el mundo tiene muy claro que el tester ha de saber sobre la capa de negocio para hacer bien su trabajo, sin embargo poca gente tiene en cuenta que también es importante el trabajo con los programadores. Por lo tanto para mi un tester ha de tener parte de negocio, parte técnico y añadirle otras skills intermediaria.

Entonces, para que le puede servir programar a un tester? Principalmente por varios motivos:

  1. Para entender los problemas que puede tener una aplicación. Desde la capa de negocio se pueden encontrar muchos defectos, pero si realmente sabemos como esta construido el software, si sabemos como esta diseñado y creamos un modelo mental de este, sabremos como toma las decisiones, de donde obtiene los recursos, que partes del código son más susceptibles de tener más errores.  Obtenemos una gran fuente de información para mejorar en la realización de las pruebas!
  2. Automatización! Si lo se… existen maravillosas herramientas que haciendo clicks puedes automatizar… pero lo que realmente aporta valor es atacar sobre la lógica de la aplicación (a nivel funcional). Que seamos capaces de automatizar una API sin interfaz gráfica, capaces de regenerar datos mediante scripts, crear scripts para configurar la aplicación…
  3. La más importante para mi… para comunicarse con los programadores… aprendemos la capa de negocio para hablar con los clientes, para discutir con ellos, para proponerles cosas, informes etc. Sin embargo no somos capaces de comunicarnos con la gente técnica porque no hablamos su idioma… como queremos entonces que nos respeten??? Si queremos captar su atención tenemos que saber ayudarles, darles apoyo, hablar con ellos, mejorar su día a día, y esto solo lo podemos conseguir si sabemos como trabajan.

Gente que se dedica al testing y al QA, debemos recordar una cosa… nuestra disciplina se encuentra dentro de la Ingeniería de Software! Si queremos sacar todo el potencial de nuestra profesión tenemos que trabajar desde su base.

Con esto no quiero decir que tengas que tener un nivel de programación excelente, ni mucho menos, si yo soy tester y el de mi lado es programador es principalmente por dos motivos… el primero porque el trabaja 8 horas programando y yo no. El segundo es porque a el le motiva programar, a mi probar y hacer de QA. Pero si que es necesario que si me enseña un diagrama UML lo entienda, que si me muestra una arquitectura, podamos discutirla, que si me da un trozo de código (bien programado) pueda decirle que hace y proponer seguramente alguna mejora y si no lo entiendo pedirle que me lo explique. De esta forma, la otra persona ve que aporto valor a su trabajo, que realmente puedo serle de utilidad, en lugar de ser alguien que lo único que le dice es que ha hecho algo mal. A partir de ese momento, me podré integrar mejor con ellos e intentar internamente que mejoren la calidad de su código ayudandoles a hacerlo y ofrenciendoles todo el soporte necesario para ello ya que el objetivo de ambos es el mismo.

Esta condenado el tester funcional a desaparecer?

A mi parecer no. Hay una gran herencia en los últimos años, aunque creo que con la entrada del agilismo esta tendencia esta cambiando. Igualmente existe una gran cantidad de testers que son muy buenos realizando su trabajo, gracias al knowhow que tienen de la capa de negocio, y gracias a que se ha ido autoformando dentro del mundo del tester teniendo un gran background de heurisiticas que puede utilizar.

Conozco grandes testers exploratorios, y de testing manual, mucho mejor que algunos que sepan programar, gente a la que admiro, pero también creo que aprender un poco de programación no les hará daño. Insisto, ambas formaciones no son contradictorias, sino al contrario, son complementarias y nos ayudaran a realizar mejor nuestra profesión.

Al final nuestro objetivo es el mismo que el resto del equipo, entregar un software de calidad a nuestro cliente, por lo que hemos de aportar un valor diferencial respecto a nuestros clientes, y respecto a los programadores, ese es el status quo del tester.

Ahora ya podéis uniros al grupo de facebook de “quiero despellejar al que dice que los testers necesitan programar!”

Tagged with:  

Porque existen los errores?

On 12 octubre, 2010, in Articulos, Prácticas desarrollo, by twiindan

Una tarde de viernes, despues de una semana de trabajo y de vispera de puente, con una cerveza, unos cacahuetes y los compañeros del trabajo, que mejor escenario para tener una típica discusión entre developers y testers!

Aunque esta vez de la discusión aprendi un par de cosas que me han hecho reflexionar durante estos dias. En la discusión me comentaba un compañero de desarrollo que efectivamente a medida que un developer va ganando experiencia y aprendiendo, seguramente no necesite un tester para encontrar errores porque casi no los cometera. Como no, a mi me parece un razonamiento imposible ya que un developer como persona humana que es (al igual que un tester) siempre comenterá algún error en su código por muy bueno que sea.

Pero esto me hizo pensar en algo curioso… realmente el único motivo por el cual existimos los testers es porque el departamento de desarrollo hace mal ( o no óptimo)  su trabajo? Es culpable el departamento de desarrollo de todos los errores que encontramos?

Si para ti la respuesta es NO, entonces coincidimos perfectamente y por ese motivo me gustaria hacer una pequeña lista de las razones por las que pueden haber errores en el sistema:

  1. Errores al programar: Es el primero que nos viene a la cabeza y el inicio de la discusión con mis compañeros. Los humanos no somos perfectos y por lo tanto cualquier persona (developers o testers) cometeremos errores dentro del ciclo de vida del software.
  2. Cambios de última hora: Siempre existen, son como una lacra que sabes que tarde o temprano llegarán, son los temidos cambios a dos semanas de entregar una aplicación, unos cambios que en principio no afectan a “nada” y al final afectan a “todo”.  En todos los proyectos existen cambios, y generalmente no se le dan la importancia que merecen ya que muchos de ellos ni siquiera estan planificados.
  3. Errores de terceros: Siempre que utilicemos software de terceras partes como los entornos de desarollo o librerias externas a nuestro proyecto existe la posibilidad de que existan errores no contemplados. Estos errores son heredados por nuestro software y generalmente son dificiles de detectar en las fases de desarrollo.
  4. Errores de comunicación: Para mi la principal fuente de errores ya que esto conduce en parte al punto 2 (cambios de última hora). La comunicación es una de las partes más imporantes dentro del desarrollo del producto y de ella deriivan los requisitos, especificaciones, diseño… Por lo tanto un error de comunicación en algunas fases de proyecto pueden resultar fatales derivando en especificaciones incompletas o erroneas.
  5. Control de versiones: Generalmente otra fuente de problemas provienen del control de versiones de cada uno de los módulos de desarrollo. Aunque existen una gran variedad de aplicaciones o herramientas para realizar esta tarea es fácil que las malas prácticas dentro de desarrollo acaben con una versión antigua de algún módulo o algún componente erróneo.
  6. Malas prácticas de diseño: Otro de los grandes focos de errores, sobretodo en sistemas que son muy complejos o donde se utilizan nuevas tecnologías o nuevas arquitecturas. Generalmente se designa a un solo analista o arquitecto para realizar el diseño de los componentes de software, en lugar de realizar un brainstorming o realizar revisiones de diseño entre arquitectos para detectar errores tempranos.
  7. Malas practicas de codificación: Aun recuerdo el dia que se instauraron en los departamento de desarrollo las guias de buenas prácticas, un poco más y nos cortan el cuello!!! Pero un tiempo despues se ha comprabado que los errores detectados por las malas practicas han disminuido considerablemente, y ahora la gente de desarrollo se han acostumbrado llegando incluso dejar de lado todas sus manias a la hora de codificar o utilizar herramientas de debugging, analizadores, validarores… un buen programador no solo escribe líneas de código si no que las realiza de las mejor manera posible!
  8. Tiempo de desarrollo imposible: He querido dejar este para el último ya que creo que es de los pocos que estamos de acuerdo todos los departamentos. Cuando se planifica un proyecto de software, nunca he visto que se tenga en cuenta realmente el esfuerzo de este ya que generalmente quien lo planifica no sabe lo dificil que es realizar software. Esto se traduce en presión y stress sobre los departamentos de desarrollo, que incomodan a los programadores y les inducen a producir más errores. A parte como hemos comentado anteriormente (en el punto 2) los cambios que se piden desde el cliente en cualquier punto del proyecto muchas veces no se contemplan en la planificación al igual que la resolución de errores.

He nombrado ocho posibles factores a la hora de introducir errores, pero existen una infinidad más ya que miles de factores influyen en el ciclo de vida del software, aun así remarcar que no toda la responsabilidad de la introducción de errores es por parte de desarrollo ni mucho menos, si no que los errores se introducen en todas las fases desde los requerimientos, diseño… hasta los propios testers que como el resto del mundo, tambien somos humanos!(con nuestro corazoncito, y nuestra alma)

Conoceís algunos factores más que puedan influir en la introducción de errores¿?

Testing Jokes

On 1 julio, 2010, in Jokes, by twiindan

El poder reirse de nuestro trabajo es esencial en algunos casos para no acabar subiendote por las paredes, por eso os dejo una serie de diferencias entre los puntos de vista de un desarrollador y de un tester.

Optimistic Developer: The glass is half full
Pessimistic Tester: The glass is twice as big as required

Optimistic Developer: This code hasn’t yet been tested. It’s not known if it has any bugs.
Pessimistic Tester: This code hasn’t yet been tested. It’s not known if it works.

Optimistic Developer: We are 90% done.
Pessimistic Tester: We don’t know when we’ll be done, if ever

Optimistic Developer: We will refactor the code to make it better
Pessimistic Tester: They are throwing out the working code and replacing it with an unknown quantity

Optimistic Developer: I only changed one line of code
Pessimistic Tester: The entire system must be retested

Optimistic Developer: The code is the design
Pessimistic Tester: There is no design

Optimistic Developer: We’ll fix those bugs later, when we have time
Pessimistic Tester: We never have enough time to fix the bugs

Optimistic Developer: This build is feature complete
Pessimistic Tester: The features exist; some are completely broken

Optimistic Developer: Anything is possible, given enough time
Pessimistic Tester: Everything has flaws, and given enough time I can prove it

Optimistic Developer: Of course it will work
Pessimistic Tester: It might work, but probably won’t

Optimistic Developer: One last bug fix, and we can ship tomorrow
Pessimistic Tester: Fixing this one bug will likely lead to two more

Optimistic Developer: Stop finding bugs, or we’ll never be done
Pessimistic Tester: Stop creating bugs, so I can find them all

Optimistic Developer: There’s no need for more tests
Pessimistic Tester: Let’s just run a few more tests to be sure

Optimistic Developer: There is no I in TEAM
Pessimistic Tester: We can’t spell BUGS without U

Optimistic Developer: That’s an “undocumented feature”
Pessimistic Tester: That’s a bug

Optimistic Developer: I like to build things
Pessimistic Tester: I like to break things

Optimistic Developer: Sure, we can use the Beta version of this component in Production
Pessimistic Tester: We should wait until version 2.1

Sabéis de alguno más?

Fuente original by Joe Strazzere.

Tagged with: