29 septiembre 2023

Niveles de pruebas, ¿qué es eso?

La importancia de reconocer los niveles a donde aplicar pruebas.

Los niveles de prueba son grupos de actividades de prueba que se organizan y gestionan conjuntamente. Cada nivel de prueba es una instancia del proceso de prueba, realizadas en relación con el software en un nivel de desarrollo determinado, desde unidades o componentes individuales hasta sistemas completos o, en su caso, sistemas de sistemas. 

Los niveles de prueba están relacionados con otras actividades dentro del ciclo de vida de desarrollo de software.

Los niveles de prueba reconocidos son:
  • Prueba de componente: La prueba de componente es una forma de prueba de software que se centra en probar unidades individuales de software, como funciones o métodos. El objetivo de la prueba de componente es asegurarse de que cada unidad de software funciona correctamente y cumple con sus requisitos.
  • Prueba de integración: La prueba de integración es una forma de prueba de software que se centra en probar cómo las diferentes unidades de software interactúan entre sí. El objetivo de la prueba de integración es asegurarse de que las diferentes unidades de software se integran correctamente y funcionan juntas como un sistema.
  • Prueba de sistema: La prueba de sistema es una forma de prueba de software que se centra en probar el sistema en su conjunto. El objetivo de la prueba de sistema es asegurarse de que el sistema cumple con todos sus requisitos, tanto funcionales como no funcionales.
  • Prueba de aceptación: La prueba de aceptación es una forma de prueba de software que se realiza para verificar si el software cumple con los requisitos del cliente. El objetivo de la prueba de aceptación es asegurarse de que el software satisface las necesidades del cliente y está listo para ser utilizado.
Los niveles de prueba se caracterizan por los siguientes atributos:
  • Objetivos específicos: Cada nivel de prueba tiene un conjunto de objetivos específicos que se deben cumplir. Por ejemplo, el objetivo de la prueba de componente es asegurarse de que cada unidad de software funciona correctamente, mientras que el objetivo de la prueba de integración es asegurarse de que las diferentes unidades de software se integran correctamente.
  • Bases de prueba: Cada nivel de prueba utiliza una base de prueba, que es una colección de casos de prueba que se utilizan para probar el software. Los casos de prueba se crean en función de los requisitos del software y los objetivos específicos de cada nivel de prueba.
  • Objeto de prueba: El objeto de prueba es el software que se está probando. El objeto de prueba puede variar en función del nivel de prueba. Por ejemplo, el objeto de prueba para la prueba de componente es una unidad de software, mientras que el objeto de prueba para la prueba de integración es el sistema en su conjunto.
  • Defectos y fallos característicos: Cada nivel de prueba tiene un conjunto de defectos y fallos característicos que se deben buscar. Los defectos y fallos característicos se derivan de los requisitos del software y de los objetivos específicos de cada nivel de prueba.
  • Enfoques y responsabilidades específicas: Cada nivel de prueba tiene un enfoque y un conjunto de responsabilidades específicos. Por ejemplo, la prueba de componente suele ser realizada por los desarrolladores, mientras que la prueba de integración suele ser realizada por los testers de integración.
Se requiere un entorno de prueba adecuado para cada nivel de prueba. Por ejemplo, un entorno de prueba similar al de producción es ideal para la prueba de aceptación, mientras que los desarrolladores suelen utilizar su propio entorno de desarrollo para la prueba de componente.

22 septiembre 2023

La importancia de los CVDS

 Modelos de ciclo de vida

El modelo de ciclo de vida de desarrollo de software que se utiliza depende de las necesidades del proyecto de desarrollo de software. Por ejemplo, si el proyecto es complejo y tiene muchos requisitos, es posible que se utilice un modelo en cascada. Si el proyecto es más pequeño y tiene requisitos menos complejos, es posible que se utilice un modelo iterativo o ágil.

Dependiendo del contexto del proyecto, puede ser necesario combinar o reorganizar los niveles de prueba y/o las actividades de prueba. Por ejemplo, para la integración de un producto de software comercial de distribución masiva (COTS por sus siglas en inglés) en un sistema más amplio, el comprador puede realizar pruebas de interoperabilidad a nivel de prueba de integración de sistemas (por ejemplo, integración en la infraestructura y otros sistemas) y a nivel de prueba de aceptación (funcional y no funcional, junto con la prueba de aceptación del usuario y la prueba de aceptación operativa). 

Además, se pueden combinar los propios modelos de ciclo de vida de desarrollo de software. Por ejemplo, un modelo en V puede ser usado para el desarrollo y prueba de los sistemas backend y sus integraciones, mientras que un modelo de desarrollo ágil puede ser usado para desarrollar y probar la interfaz de usuario (UI) y funcionalidad del front-end. El prototipado puede ser utilizado en las primeras etapas de un proyecto, adoptando un modelo de desarrollo incremental una vez finalizada la fase experimental.

Los sistemas de Internet de las Cosas (IoT por sus siglas en inglés), que consisten en muchos objetos diferentes, tales como dispositivos, productos y servicios, suelen aplicar modelos de ciclo de vida de desarrollo de software separados para cada objeto. Esto supone un reto especial para el desarrollo de las versiones de sistemas de Internet de las Cosas. Además, el ciclo de vida de desarrollo de software de dichos objetos pone un mayor énfasis en las fases posteriores del ciclo de vida de desarrollo de software después de que se hayan introducido para su uso operativo (por ejemplo, las fases de operación, actualización y retirada).

15 septiembre 2023

¿Cómo desarrollar software?

Modelos de ciclo de vida de desarrollo de software

El desarrollo de software es el proceso de crear software, que es un conjunto de instrucciones que permiten a una computadora hacer algo. El proceso de desarrollo de software generalmente implica las siguientes etapas:

  • Requisitos: En esta etapa, el equipo de desarrollo recopila los requisitos del software, que son las necesidades del usuario.
  • Diseño: En esta etapa, el equipo de desarrollo crea un diseño para el software, que es un plan de cómo el software se verá y funcionará.
  • Desarrollo: En esta etapa, el equipo de desarrollo escribe el código para el software.
  • Pruebas: En esta etapa, el equipo de desarrollo prueba el software para asegurarse de que funcione correctamente.
  • Implementación: En esta etapa, el software se implementa en producción, que es donde se usa por primera vez por los usuarios.
Las pruebas de software es el proceso de encontrar y corregir errores en el software. Los probadores de software utilizan una variedad de métodos para encontrar errores, como ejecutar pruebas unitarias, pruebas de integración y pruebas de sistema.

Hay muchos tipos diferentes de modelos de ciclo de vida de desarrollo de software, cada uno con sus propias ventajas y desventajas. Algunos modelos de ciclo de vida de desarrollo de software comunes incluyen:
  • Modelo en cascada: En el modelo en cascada, las etapas del desarrollo de software se realizan en un orden secuencial.
  • Modelo iterativo: En el modelo iterativo, las etapas del desarrollo de software se repiten varias veces.
  • Modelo ágil: En el modelo ágil, el desarrollo de software se realiza en pequeñas iteraciones.
El modelo de ciclo de vida de desarrollo de software que se utiliza depende de las necesidades del proyecto de desarrollo de software. Por ejemplo, si el proyecto es complejo y tiene muchos requisitos, es posible que se utilice un modelo en cascada. Si el proyecto es más pequeño y tiene requisitos menos complejos, es posible que se utilice un modelo iterativo o ágil.


08 septiembre 2023

Formas de pensar

 Desarrollo versus Pruebas

¿Sabes?, los desarrolladores y los probadores a menudo piensan de forma diferente. Los desarrolladores se enfocan principalmente en diseñar y construir un producto genial, mientras que los probadores se dedican a verificar y validar ese producto, buscando defectos y problemas antes de lanzarlo. Son dos enfoques distintos que requieren mentalidades diferentes, o formas de pensar. Pero cuando se combinan estas mentalidades, ¡se logra un nivel de calidad aún mayor!

La mentalidad de un probador incluye cosas como curiosidad, ser un poco pesimista (pero de manera profesional), tener un espíritu crítico, prestar atención a los detalles y ser bueno en la comunicación y las relaciones positivas. A medida que ganan experiencia, los probadores van ampliando y madurando su mentalidad. Por otro lado, la mentalidad de un desarrollador puede tener algunos elementos similares a la del probador, pero los desarrolladores exitosos están más interesados en el diseño y la construcción de soluciones, y no tanto en pensar en qué podría salir mal. Además, a veces les cuesta encontrar errores en su propio trabajo debido a algo llamado "sesgo de confirmación".

Pero, con la mentalidad adecuada, los desarrolladores también pueden probar su propio código. En diferentes modelos de ciclo de vida de desarrollo de software, suelen organizarse a los probadores y las actividades de prueba de diferentes maneras. A veces, tener probadores independientes realizando algunas de las pruebas aumenta la eficacia para detectar defectos, especialmente en sistemas grandes, complejos o críticos para la seguridad. Los probadores independientes ofrecen una perspectiva diferente a la de los creadores del software, como analistas de negocio, dueños del producto, diseñadores y programadores. Y eso es genial, porque tienen diferentes formas de pensar y abordan las cosas desde distintos ángulos.

¡Así que recuerda, la combinación de mentalidades de desarrolladores y probadores es clave para lograr productos de alta calidad!


01 septiembre 2023

Psicología de las Pruebas

 ¿Ahora en que tema nos metimos?

¡Vamos a hablar de algo interesante: la psicología en las pruebas de software! Resulta que los seres humanos están involucrados en el desarrollo de software, incluyendo las pruebas, ¡y eso tiene un gran impacto!

Cuando encontramos defectos durante una revisión de requisitos o durante la ejecución de una prueba, a veces puede parecer una crítica al producto o al autor. Esto tiene que ver con algo llamado "sesgo de confirmación", que hace que sea difícil aceptar información que contradiga nuestras creencias actuales. Por ejemplo, los desarrolladores suelen esperar que su código sea perfecto, por lo que les cuesta aceptar que haya errores.

Además del sesgo de confirmación, hay otros sesgos cognitivos que dificultan la comprensión y aceptación de la información que obtenemos de las pruebas. Y como somos humanos, a menudo tendemos a culpar a quien nos trae malas noticias, ¡y a veces las pruebas nos muestran cosas negativas!

Estos factores psicológicos pueden hacer que algunas personas vean las pruebas como algo destructivo, aunque en realidad son fundamentales para el avance del proyecto y la calidad del producto (ya hablamos de eso en otras secciones). Para tratar de reducir estas percepciones, es importante comunicar la información sobre defectos y fallos de manera constructiva. Así se pueden evitar tensiones entre los probadores y los demás involucrados, como analistas, dueños de producto, diseñadores y desarrolladores. Esto aplica tanto a las pruebas estáticas como a las pruebas en ejecución.

Para comunicarnos de manera efectiva sobre defectos, fallos, resultados de las pruebas y riesgos, y para construir relaciones positivas con las personas de nuestro entorno de trabajo, aquí te dejo algunos ejemplos de cómo hacerlo:
  • Empezar colaborando en lugar de pelear. Recuerda que el objetivo común es lograr sistemas de mejor calidad.
  • Destacar los beneficios de las pruebas. Por ejemplo, para los desarrolladores, la información sobre los defectos puede ayudarles a mejorar sus productos y habilidades. Y para la organización, corregir los defectos encontrados durante las pruebas ahorra tiempo, dinero y reduce el riesgo para la calidad del producto.
  • Comunicar los resultados y hallazgos de las pruebas de manera neutral y basada en los hechos, sin criticar a la persona que creó el elemento defectuoso. Redacta informes objetivos y fundamentados en hechos, y revisa los hallazgos.
  • Trata de entender cómo se siente la otra persona y las razones por las que puede reaccionar negativamente a la información.
  • Confirma que la otra persona ha entendido lo que le has dicho, y viceversa.
Ya hablamos antes sobre los objetivos de las pruebas (lo puedes ver en otra sección). Es importante definir claramente los objetivos correctos de las pruebas, porque eso también tiene implicaciones psicológicas. La mayoría de las personas tiende a alinear sus planes y comportamientos con los objetivos establecidos por el equipo, la dirección y los demás involucrados. Y también es importante que los probadores se adhieran a estos objetivos sin dejarse llevar por sesgos personales.

¡Así que recuerda tener en cuenta la psicología humana en las pruebas de software! Es fundamental para lograr un ambiente de trabajo positivo y obtener resultados exitosos.


Retrospectivas: ¡Aprendiendo de nuestros errores!

Imagina que estás construyendo una red social para probadores de software. Al final de cada sprint (un periodo corto de desarrollo), te reún...