jueves, 20 de diciembre de 2018

CARATULA

UNIVERSIDAD PRIVADA TELESUP

FACULTAD DE INGENIERIA Y ARQUITECTURA
INGENIERIA DE SISTEMAS E INFORMATICA


CONTROL DE CALIDAD
Pruebas de rendimiento con JMETER
ALUMNOS:       FLORES NOLE, YESSICA
                              HERNANDEZ RENGIDO, FREDDY

                               MARTINEZ LUQUE, LUIS

                               MACHACA SAAVEDRA, PIER

                               RIVERA CHUNGA, JOSÉ
  


PROFESOR:      JIMMY MONTALVO ÑAUPARI

LIMA – PERU

2018

INCIO DE TRABAJO







Contenido


INTRODUCCIÓN.. II
RESUMEN.. III
OBJETIVOS.. IV
1.      MARCO TEÓRICO.. 1
1.1 CALIDAD DEL SOFTWARE.. 1
·       1.1.1 ¿Qué es calidad de software?. 1
·       1.1.2 Factores que determinan la calidad del software. 2
·       1.1.3 Aseguramiento de la calidad del software. 4
1.2 ESTRATEGIAS DE PRUEBA DE SOFTWARE.. 9
·       1.2.1 Estrategias de pruebas: enfoque de R. Pressman.. 10
·       1.2.2 Estrategias de pruebas: Enfoque de Rick Craig y Stefan Jaskiel 15
2. PRUEBAS DE RENDIMIENTO.. 29
2.1 Tipos de pruebas. 29
·       2.1.1 Pruebas de carga: 29
·       2.1.2 Pruebas de stress: 29
·       2.1.3 Pruebas de resistencia: 30
2.2 ¿Cuándo debemos ejecutar este tipo de pruebas?. 30
2.3 ¿Cómo debemos ejecutarlas?. 30
2.4 ¿Qué etapas debemos seguir?. 30
3. HERRAMIENTA JMETER.. 33
3.1 Introducción a JMETER.. 33
3.2 ¿Qué puedo hacer con eso?. 33
3.3 ¿Cómo lo hago?. 35
3.4 JMeter Wiki 35
3.5       Ejecución de JMETER en Windows 7/8/10. 35
3.5.1 Requisitos: 35
3.5.2       Instalación: 36
3.6 PRUEBAS DE CARGA CON JMETER.. 39
4. CONCLUSIONES.. 40



INTRODUCCIÓN


La presente investigación se refiere al tema de las pruebas de rendimiento, centrándonos con la ayuda de la herramienta JMETER para realizar dichas pruebas a unas páginas web.
La característica principal de la herramienta JMETER, es que permite realizar Pruebas de Rendimiento y Pruebas Funcionales sobre Aplicaciones Web
Este trabajo de investigación está dividido en tres grandes secciones. La primera sección describe detalladamente los principales fundamentos teóricos sobre pruebas de software, incluyendo temas como: Calidad de Software, Estrategias de prueba de software, Niveles de prueba y Técnicas de Prueba. Con base a los fundamentos teóricos presentados se desarrollan las dos secciones restantes del proyecto, una de ellas, es la herramienta de pruebas de rendimiento y asignación de las técnicas del JMETER que realiza para suplir la imperiosa necesidad de realizar procesos de tiempo y carga y mejorar la calidad de los productos desarrollados. La segunda, propone una metodología sencilla.


RESUMEN


Este trabajo de investigación se basa en explicar lo que es calidad de software, sus factores y sus aseguramientos, además de explicar las estrategias de pruebas de algunos autores.
Para finalizar con la explicación de la herramienta de testeo JMETER, su instalación, ejecución y pruebas a algunas páginas web.




OBJETIVOS


Analizar: Las pruebas de rendimiento (carga) con la herramienta JMETER en 2 páginas web diferentes.
Comparar: Los tiempos de respuesta de ambas páginas web con sus respectivos reportes y gráficos de resultados.
Estudiar: La funcionabilidad de la herramienta para el test de cargar a páginas web.




MARCO TEORICO


1.1 CALIDAD DEL SOFTWARE

·         1.1.1 ¿Qué es calidad de software?


Desde los inicios de la ingeniería del software se ha intentado formalizar una definición de calidad que esté enmarcada dentro del contexto del desarrollo de software. Muchos autores están de acuerdo con la importancia que tiene la calidad del software para obtener aplicaciones con un rendimiento óptimo que cumplan con todos los requisitos establecidos por el cliente.

Tomando como base una definición genérica de calidad, desarrollada en el estándar ISO 9000,"grado en el que un conjunto de características inherentes cumple con los requisitos", se puede empezar a concebir calidad aplicada al desarrollo de software. Algunos autores han enmarcado la definición de calidad dentro de este contexto. Autores como William E. Lewis en su libro Software "Testing And Continuous Quality Improvement" definen calidad de software desde dos puntos de vista2. El primero, hace alusión al cumplimiento de requerimientos; de acuerdo a eso, obtener un producto de calidad implica tener requerimientos medibles, y que se cumplan. Con este significado la calidad de un producto pasa a ser un estado binario en donde se tiene o no calidad. El segundo, tiene en cuenta al cliente; el cual define calidad de un producto o servicio como el cumplimiento de las necesidades presentadas por el mismo. Otra forma de expresar lo mencionado anteriormente es la capacidad del producto de "ajustarse para el uso".

Una definición más concreta de calidad de software, propuesta por Roger S. Pressman3, sugiere que "la calidad de software es el cumplimiento de los requisitos de funcionalidad y desempeño explícitamente establecidos, de los estándares de desarrollo explícitamente documentados y de las características implícitas que se esperan de todo software desarrollado profesionalmente". Se puede ver que los dos autores exponen versiones similares de la definición de calidad de software y en general en el mundo la definición puede variar o extenderse dependiendo del autor, y no es el objetivo de este proyecto decidir cuál es la definición correcta, sin embargo, se puede concluir que la calidad de software es una compleja combinación de factores que varían entre las diferentes aplicaciones y los clientes que las solicitan.

·         1.1.2 Factores que determinan la calidad del software

En el año de 1970, McCall propuso unos factores de calidad que siguen vigentes en la actualidad, lo que quiere decir que los factores que afectan la calidad del software no cambian en el tiempo. Estos factores se dividen en dos grandes grupos; aquellos que pueden ser medidos directamente, es decir aquellos defectos descubiertos en las pruebas; y factores que pueden ser medidos únicamente de manera indirecta, como por ejemplo el mantenimiento y la facilidad de uso.
McCall y su equipo de trabajo plantearon una clasificación basada en tres aspectos importantes de todo producto de software: operación, que incluye corrección, confiabilidad, usabilidad, integridad y eficiencia; transición, compuesta por portabilidad, reutilización y compatibilidad; y por último revisión de un producto, donde se encuentran factores como facilidad de mantenimiento, flexibilidad y facilidad de prueba. A continuación, se proporcionará una breve descripción de cada factor previamente citado:
ü  CORRECCIÓN: está compuesto por dos aspectos; cumplimiento por parte del software de las especificaciones técnicas, y satisfacción de objetivos del cliente.

ü  CONFIABILIDAD: Expectativa que un programa desempeñe la función para la cual está hecho.

ü  USABILIDAD: Esfuerzo necesario para aprender, operar y preparar los datos de entrada de un programa e interpretar la salida.

ü  INTEGRIDAD: Grado de control sobre el acceso al software o la manipulación de los datos por parte de personas no autorizadas.

ü  EFICIENCIA: Cantidad de recursos necesarios para que un programa realice su función.

ü  PORTABILIDAD: Esfuerzo necesario para transferir el programa de un entorno de hardware o software a otro.

ü  REUTILIZACIÓN: Grado en que un programa o parte de él puede usarse en otras aplicaciones.

ü  COMPATIBILIDAD: Esfuerzo necesario para acoplar un sistema con otro.

ü  FACILIDAD DE MANTENIMIENTO: Esfuerzo necesario para localizar y corregir errores en un programa.

ü  FLEXIBILIDAD: Esfuerzo necesario para modificar un programa en operación.

ü  FACILIDAD DE PRUEBA: Esfuerzo que demanda un programa con el fin de asegurar que cumpla su función.
ü  Se puede observar que muchos de los factores previamente mencionados se convierten en grupo de factores cuantitativos y por tanto, desarrollar medidas que permitan realizar una adecuada medición se convierte en una actividad frustrante debido a la naturaleza subjetiva de la misma.



·         1.1.3 Aseguramiento de la calidad del software

Se puede definir    el aseguramiento de la calidad del software como "las actividades sistemáticas que proveen evidencia del uso apropiado de la capacidad total del software"4. En otras palabras, el aseguramiento de la calidad del software es una colección de actividades y funciones usadas para monitorear y controlar un proyecto de software desde su concepción hasta la salida en vivo, con el fin de que los objetivos específicos se cumplan con un nivel deseado de confianza.
El aseguramiento de la calidad es un esfuerzo planeado para asegurar que el producto (software) cumpla con los criterios y los factores de calidad mencionados en el numeral anterior. Estas actividades y funciones no solo son responsabilidad del equipo asegurador de calidad, sino que incluyen también al gerente/líder del proyecto, el personal del proyecto y los usuarios.
La definición de aseguramiento plantea, que sí los procesos planteados dentro del plan de calidad   son seguidos de acuerdo a los lineamientos pactados, asegurarán la gestión de la calidad del producto.
Los objetivos de la calidad del software se logran siguiendo el plan de aseguramiento de calidad de software, el cual establece los métodos que el proyecto debe emplear para asegurar que los documentos y/o productos generados y revisados en cada etapa, sean de alta de calidad.

El aseguramiento de la calidad del software es una estrategia adoptada por la gestión del riesgo. Considerar la calidad de software dentro de la gestión del riesgo es importante porque en muchas ocasiones la calidad tiene un alto costo en los proyectos de software. A continuación, se mostrarán algunos ejemplos de mala calidad en materia de software:
ü  Fallas frecuentes en la funcionalidad del software.
ü  Consecuencias secundarias de fallas en el software, como problemas
financieros.
ü  Sistemas no disponibles cuando se requiere.
ü  Costosas mejoras en el software.
ü  Altos costos en la detección y corrección de errores.
Parte de los riesgos con respecto a la calidad están relacionados a los defectos del producto. Un defecto es una falla o falta de cumplimiento con un determinando requisito. Si dicho requisito está planteado de una forma incorrecta, generará una mayor posibilidad de que ocurran riesgos, teniendo como resultado la aparición de posibles defectos posteriores en la aplicación y productos poco verificables. Algunas de las técnicas y estrategias de gestión de riesgos incluyen Testing de software, revisiones técnicas, revisión de pares (peers) y verificación de conformidad.
El aseguramiento de la calidad de software posee tres componentes expuestos a continuación:
ü  TESTING DE SOFTWARE: Componente usado para verificar que los requisitos funcionales de una aplicación se cumplan. El Testing de software tiene limitaciones en cuanto al aseguramiento de la calidad se requiere, ya que una vez hecho el Testing, se dejarán descubiertos posibles defectos que cuestionan la calidad del producto evaluado, con poco o nada de tiempo para mitigar dicha falta de calidad.
ü  CONTROL DE CALIDAD: Compuesta por métodos y procesos usados para monitorear el trabajo y observar si los requisitos son cumplidos. Se enfoca en la revisión y posterior eliminación de defectos antes de la entrega del producto final. El control de calidad debe ser responsabilidad de la unidad organizacional que está encargada de generar el producto. En general el control de calidad consiste en una serie de revisiones (incluida en el plan de aseguramiento de la calidad) realizadas a un producto. Para el caso de los productos de software, el control de calidad generalmente incluye revisión de las especificaciones, inspecciones de código y documentación, y revisiones para los entregables. Usualmente las inspecciones del producto y de la documentación son llevadas a cabo en cada etapa del ciclo de vida de software, para demostrar que los ítems producidos cumplen con los criterios especificados en el plan de aseguramiento de la calidad. Estos criterios están determinados por las especificaciones de los requisitos, por la documentación del diseño, y por los planes de prueba. Dependiendo del tamaño del proyecto, el control de calidad puede estar cargo bien sea, del personal del departamento de calidad de software del proyecto, en caso de que el proyecto sea pequeño, o de una junta de control de configuración si el proyecto es grande. Dicha junta debe incluir un representante por parte del usuario, un miembro del departamento de calidad de software, y el líder del proyecto.
ü  GESTIÓN DE LA CONFIGURACIÓN DEL SOFTWARE: Tiene que ver con el seguimiento y control de cambios de los elementos de software en un sistema. Controla la evolución de un sistema software por medio del manejo de versiones de los componentes de software y sus relaciones. El propósito de la gestión de la configuración del software es el de identificar todos los componentes de software interrelacionados y controlar su evolución a través de los diferentes ciclos de vida. La gestión de la configuración del software es una disciplina que puede ser aplicada a actividades como el desarrollo de software, el control de la documentación, control de cambios y mantenimiento. Puede proveer un alto ahorro de costos en la reutilización del software porque cada componente de software y su relación con otros componentes de software ya han sido previamente definidas. Cabe mencionar también que la gestión de la configuración del software consta de actividades que aseguran que el diseño y el código estén definidos previamente, y por tanto no se puedan cambiar sin antes hacer una revisión del efecto de tal cambio. A continuación, se mencionarán los elementos que hacen parte de la gestión de la configuración del software: Identificación de componentes, control de versiones, construcción de la configuración, control del cambio.
La ilustración 1 muestra que no solo es necesario tener en cuenta los tres componentes del aseguramiento de la calidad antes mencionados, sino también una serie de estándares, mejores prácticas, convenciones, y especificaciones para de cierto modo asegurar la calidad en cuanto a software se refiere.


  
Ilustración 1. Software Quality Assurance

Cuando se habla de aseguramiento de calidad de software es de vital importancia tener un plan que garantice que todos los procesos y/o procedimientos llevados a cabo dentro del aseguramiento de la calidad se cumplan de una manera eficiente. El plan de aseguramiento de la calidad de software (SQA, por sus siglas en inglés) es un conjunto de medidas con la finalidad de asegurar ciertos niveles de calidad dentro de las fases del desarrollo de software. El plan es usado como base para comparar los niveles actuales de calidad durante el desarrollo con los niveles planeados. Dicho plan sugiere un marco de trabajo y unos lineamientos para el desarrollo de código entendible y de fácil mantenimiento. El plan de SQA determinará si los procedimientos para asegurar la calidad del software serán desarrollados dentro del equipo de desarrollo o estarán a cargo de terceros. Para desarrollar e implementar un plan de aseguramiento de calidad          de software (SQA), es necesario tener en cuenta ciertos pasos mencionados a continuación:
ü  DOCUMENTAR EL PLAN: Todo plan debe estar documentado para su posterior aprobación y ejecución.

ü  OBTENER APROBACIÓN DE LA GERENCIA DEL PROYECTO: La participación de la gerencia del proyecto es necesaria para poder implementar de manera exitosa un plan de SQA. La gerencia del proyecto es responsable tanto de asegurar la calidad en un proyecto de software, como de proveer los recursos necesarios para el desarrollo del mismo.

ü  OBTENER APROBACIÓN DEL EQUIPO DE DESARROLLO: Los principales usuarios de un plan de SQA son los miembros del equipo de desarrollo, por lo tanto, es de vital importancia su aprobación y cooperación en el plan.

ü  PLANEAR LA IMPLEMENTACIÓN DEL SQA: El proceso de planear, formular y esbozar un plan de SQA requiere de personal y acceso a recursos tecnológicos. La persona responsable de implementar el plan de SQA debe tener acceso a estos recursos y adicionalmente, necesita aprobación y soporte constante del gerente del proyecto para garantizar la disponibilidad de los mismos. El gerente del proyecto debe considerar todos los riesgos que puedan impedir que el proceso se lleva a cabo, como por ejemplo la disponibilidad de personal o equipos. Es necesario también desarrollar un cronograma que incluya revisiones y aprobaciones para el plan de SQA.

ü  EJECUTAR EL PLAN DE SQA: El actual proceso de ejecutar un plan de SQA involucra puntos de auditoría que permiten monitorear dicho plan. La auditoría debe ser programada durante la fase de implementación del software, para que así el plan de SQA no se vea afectado por un mal monitoreo del proyecto de software. Las auditorias deben darse periódicamente durante el desarrollo o en las etapas especificas del proyecto.

1.2 ESTRATEGIAS DE PRUEBA DE SOFTWARE


Aclarar el concepto de estrategia dentro del contexto de pruebas de software es sumamente difícil ya que los autores usan el término "estrategia" para exponer diferentes ideas todas ellas relacionadas con proyectos de prueba de software. Para algunos5 la estrategia son las técnicas y metodologías que deben aplicarse al momento de realizar las pruebas; otros como William Perry y Roger Pressman, recurren a la palabra estrategia dentro de dos enfoques. El primero se refiere a estrategia como el plan general que guía y permite el seguimiento del proyecto de pruebas, e integra los métodos de diseño de casos de pruebas en una serie bien planeada de pasos; y el segundo, estrategia como las técnicas y metodologías que deben aplicarse en cada uno de los tipos de pruebas que se consideran dentro de las etapas del plan general. Autores más especializados en el tema como Rick D. Craig y Stefan P. Jaskiel, consideran el concepto de estrategia mencionada por Pressman como una planeación maestra de pruebas a lo que denominan "Master Test Planning".
A pesar de las diferencias conceptuales con las que se refieren al termino estrategia, los autores coinciden que antes de empezar a realizar cualquier actividad relacionada con pruebas de software, debe existir un plan de pruebas (De ahora en adelante plan) que soporte y considere todas las decisiones administrativas que se toman a partir de las condiciones que rodean el proyecto, como: riesgos, recursos (tanto humanos como materiales) y tiempo, para lograr el buen desarrollo del mismo. Además de lo anterior, el plan debe tener objetivos medibles y alcanzables que conlleven al desarrollo de software de calidad.
El nivel de detalle a alcanzar por el plan debe permitir al desarrollador basar su trabajo diario de acuerdo a lo estipulado en el mismo y sobre todo, servir de guía para que el gerente realice control sobre el proyecto.

·         1.2.1 Estrategias de pruebas: enfoque de R. Pressman


Pressman, como se mencionó anteriormente, describe la estrategia general de software "como un aspecto que reúne todos los métodos de diseño de caso de prueba en una serie bien planteada de pasos; proporcionando un mapa que describe los pasos que se darán como parte de la prueba e indica cuándo se planean y cuándo se dan estos pasos, además de cuánto esfuerzo, tiempo y recursos consumirán. Por lo tanto, cualquier estrategia de prueba debe incorporar la planeación de pruebas, el diseño de casos de pruebas, la ejecución de pruebas y la evaluación de los datos resultantes." Al mismo tiempo el autor menciona cuatro estrategias por cada una de las etapas en las que divide las pruebas de software, asegurando también, que por cada proyecto de desarrollo de software debe existir una estrategia de pruebas diferente manteniendo una estructura básica general, ya que cada proyecto tiene tanto necesidades particulares como generales (Estrategia). De esta forma se asegura que la gestión administrativa del proyecto pueda ser llevada a cabo con facilidad.
En la actualidad existen tantas estrategias de pruebas de software como enfoques de desarrollo, pero como se mencionó anteriormente, todas ellas mantienen en común unas          características generales. A continuación, se nombran las características que se encuentran frecuentemente en las plantillas de pruebas.
Ø   Para realizar testing efectivo el equipo desarrollador de software debe realizar revisiones técnicas formales (RTF) con el fin de eliminar errores antes del inicio de la etapa de pruebas.

Ø   El testing empieza en un nivel bajo (de componentes) y trabaja "hacia afuera" con el fin de integrar todo el sistema. De lo menos hacia lo más. Toda estrategia de pruebas de software debe incluir pruebas de bajo nivel, necesarias para verificar que pequeños segmentos de código estén correctamente implementados (unidades lógicas), como también debe incluir pruebas de alto nivel que validen la funcionalidad general del sistema.

Ø   Se deben aplicar diferentes técnicas de prueba en diferentes puntos del testing.

Ø   Las pruebas son dirigidas por el grupo desarrollador del software, y en caso de que sea un gran proyecto, dichas pruebas son desarrolladas por un grupo de pruebas independiente (GPI).

Ø   El testing y la depuración son actividades diferentes, pero la depuración debe ocupar un lugar dentro de cualquier estrategia de prueba de software. El punto de vista de R. Pressman respecto a cómo deben realizarse las pruebas es bastante interesante en la medida que sugiere como el mejor método, el realizar pruebas constantemente desde el momento de codificación del software hasta las pruebas del sistema, repitiendo el proceso por cada cambio realizado al código a partir de un error localizado por el equipo en pruebas anteriores.

Si se considera el proceso de prueba de software desde un punto de vista procedimental, las pruebas consisten en una serie de pasos que se implementan de manera secuencial. Estos pasos empiezan desde la prueba de unidad, asegurando que funciona de manera apropiada como unidad; continúan con prueba de integración, que se realizan cuando se integran los paquetes y que considera problemas como doble verificación y construcción del programa; prueba de validación, primera prueba de alto nivel y se realiza cuando se ha integrado y probado el programa, en ella se debe evaluar los criterios de validación establecidos en la etapa de análisis de requisitos incluyendo requisitos funcionales, de comportamiento y de desempeño; y por último se realiza la prueba de sistema, la cual queda por fuera de todos los límites del ingeniero de software, ya que cuando el producto está listo debe combinarse con otros elementos del sistema como hardware, personas, bases de datos, etc. En esta prueba se verifica que todos los elementos encajen apropiadamente y que se logre la función y el desempeño generales del sistema.
Las cuatro etapas mencionadas anteriormente son descritas para lo que el Autor denomina "software convencional", manifestando que se pueden realizar estas mismas pruebas en arquitecturas orientadas a objetos considerando como unidad a las clases.
Muchas organizaciones desarrolladoras de software pueden aplicar diferentes estrategias para probar sus productos. En un extremo, el equipo desarrollador podría esperar a que el sistema esté terminado para realizar las pruebas y esperar encontrar los errores que no se encontraron o no se preocuparon por encontrar durante todo el proceso de desarrollo. Este enfoque puede resultar muy atractivo para el equipo de pruebas, pero según la experiencia de Pressman no funciona. El resultado de realizar pruebas basadas en este enfoque es un software lleno de errores y que seguramente generará en el cliente y el usuario final una experiencia molesta. En el otro extremo, el ingeniero de software puede optar por el enfoque, mencionado anteriormente, realizando pruebas diariamente sin importar que parte del programa se haya desarrollado. El enfoque, aunque asegurará una aplicación de calidad, no es muy atractivo por el tiempo y recursos que consume. Resultado que puede obtenerse siguiendo lo descrito en la estrategia general de manera puntual y aplicando una estrategia (método) de prueba adecuada para cada una de las etapas sugeridas.
Para Tom Gilb, citado por Pressman en su libro, las cuatro etapas de toda estrategia de pruebas deben tener unas directrices o que llevan a que la estrategia de prueba de software tenga éxito. Dichas directrices fueron publicadas en el articulo "What we fail to do in our current testing culture", y continuación serán expuestas:
Ø  Especificar los requerimientos del software de manera cuantificable, previa a la ejecución de las pruebas. Aunque el objetivo primordial de la prueba es encontrar errores, una buena estrategia de prueba también evalúa otras características de la calidad, como las opciones de llevarla a otra plataforma, además de la facilidad de mantenimiento y uso. Esto debe especificarse de manera tal que permita medirlo para que los resultados de la prueba no resulten ambiguos.

Ø  Establecer explícitamente los objetivos de la prueba. Los objetivos específicos de la prueba se deben establecer en términos cuantificables. Por ejemplo, dentro del plan de prueba deben establecerse la efectividad y la cobertura de la prueba, el tiempo medio de falla, el costo de encontrar y corregir defectos, la densidad o la frecuencia de las fallas restantes, y las horas de trabajo por prueba de regresión.

Ø  Entender las necesidades del usuario del software, y crear un perfil por cada categoría de usuarios. Los casos de uso que describan el escenario de interacción para cada clase de usuario reducen el esfuerzo general de prueba, ya que concentran la prueba en la utilización real del producto.

Ø  Desarrollar un plan de pruebas enfocado en "ciclos rápidos de pruebas". Se recomienda que un equipo de ingeniería de software "aprenda a probar en ciclos rápidos (2% del esfuerzo del proyecto) los incrementos en el mejoramiento de la funcionalidad, la calidad, o ambas, de manera que sean útiles para el cliente y se puedan probar en el campo". La retroalimentación que generan estas pruebas de ciclo rápido se utilizan para controlar los grados de calidad y las correspondientes estrategias de prueba.

Ø  Construir software "robusto" diseñado para probarse a sí mismo. El software debe diseñarse de manera tal que use técnicas anti error. Es decir, el software debe tener la capacidad de diagnosticar ciertas clases de errores. Además, el diseño debe incluir pruebas autorizadas y de regresión.

Ø  Utilizar las revisiones técnicas formales como filtro antes de comenzar las pruebas. Las revisiones técnicas formales posibilitan descubrir inconsistencias, omisiones y errores evidentes en el enfoque de la prueba. Esto ahorra tiempo y también mejora la calidad del producto.

Ø  Desarrollar un enfoque de mejora continua para el proceso de prueba. Es necesario medir la estrategia de prueba. Las medidas reunidas durante la prueba deben usarse como parte de un enfoque estadístico de control del proceso para la prueba de software.

Ø  Siguiendo el orden de ejecución de un proyecto y con todas las estrategias propuestas para concluir de forma eficaz un proyecto de pruebas de software, Pressman toca un punto muy importante relacionado con esto último. Comúnmente se da por sentado          que las pruebas tienen una duración o terminación conocida pero es común que surjan muchas dificultades a la hora de conocer realmente cuando se deben dar por terminadas las pruebas. Existen varias aproximaciones que tratan de resolver dicha problemática. Una de ellas sugiere que en realidad las pruebas nunca terminan, sino más bien se transfiere la responsabilidad de hacerlas, ya que una vez terminado el producto el encargado de seguir haciendo las pruebas es el usuario. Otra de las aproximaciones propuestas, pero muy poco aceptada, dice que las pruebas acaban cuando se agota el tiempo y/o el dinero. En general, uno de los criterios más utilizados para determinar cuándo acabar las pruebas es la experiencia adquirida en proyectos anteriores. Son también de gran ayuda modelos estadísticos que recopilan ciertas métricas de software.

·         1.2.2 Estrategias de pruebas: Enfoque de Rick Craig y Stefan Jaskiel


Craig y Jaskiel, autores del libro "Systematic Software Testing", aseguran que una de las claves para alcanzar el éxito en las pruebas de software es la planeación de pruebas de software. Es común que en la mayoría de los proyectos informáticos no se dé la debida importancia a la planeación debido a la falta de tiempo, recursos, entrenamiento o vías culturales generando productos que en gran medida no cumplen las expectativas de los clientes. Las pruebas de software no son ajenas a error y de ahí la necesidad de crear un plan que determine los lineamientos para un buen desarrollo de pruebas.

1.2.2.1 Niveles de planeación de pruebas.      


Según el estándar 829-1998 propuesto por la IEEE para la documentación de pruebas de software existen 4 niveles: pruebas de unidad, pruebas de integración, pruebas de sistema, y pruebas de aceptación (o validación). Para cada uno de estos niveles debe existir un plan correspondiente, definido de acuerdo al nivel de complejidad y la duración del proyecto. Se debe considerar entonces un plan maestro de pruebas (MTP por sus siglas en ingles) que orqueste las pruebas en todos los niveles.

Adicionalmente al MTP, es común que sea necesario crear planes de pruebas detallados. En un proyecto largo y complejo, a menudo vale la pena crear un plan de pruebas de aceptación, sistema, integración, de unidad, y muchos otros planes, dependiendo del alcance del proyecto en cuestión. Proyectos pequeños, es decir, proyectos con alcances cortos, menos número de participantes, y organizaciones de menor tamaño, puede que solo necesiten un solo plan para abarcar todos los niveles de las pruebas. Decidir el número y alcance de los planes de prueba debe ser la primera estrategia de decisión desarrollada dentro del plan de pruebas. Mientras la complejidad del proceso de pruebas se incrementa, se incrementa exponencialmente la necesidad de tener un buen MTP.
El ingeniero encargado del plan de pruebas debe ver el MTP como su máximo canal de comunicación con todos los participantes del proyecto. El proceso de prueba tiene como objetivo generar un documento que permita a todas las partes involucradas en las pruebas a decidir proactivamente cuales son los aspectos que se presentan en cualquier proyecto de testing como: la utilización de los recursos, responsabilidades, roles, riesgos y prioridades. Al comparar este enfoque con el enfoque de Pressman, se    puede observar que ambos usan el MTP o la estrategia, según sea el caso, como guía para los miembros del equipo y posibilitarles herramientas que faciliten terminar el proyecto de prueba. Dos aspectos importantes a tener en cuenta a la hora de diseñar un plan de pruebas son:
Ø  La planeación de pruebas debe ser un complemento de la planeación general del proyecto, ya que lo que se defina en el plan de pruebas debe estar reflejado en el plan general del proyecto.

Ø  La planeación de pruebas debe ir separada del diseño de pruebas.

1.2.2.2 Tiempos de actividad.

Ø  La planeación de prueba debe empezar tan pronto como sea posible. Generalmente es deseable empezar el MTP casi en el mismo tiempo que se desarrolla el plan del proyecto y la especificación de requisitos.  Si la planeación se      empieza tempranamente,     puede y debe afectar significativamente el impacto del contenido del plan del proyecto. El plan de pruebas de aceptación puede empezar tan pronto como el proceso de definición de requisitos ha empezado. Igualmente, las pruebas de sistema, integración y unidad deben empezar tan pronto como sea posible.
Ø  En la siguiente figura se muestran los tiempos aconsejados para iniciar los planes de cada etapa.











Ilustración 2. Tiempos de planeación de pruebas

1.2.2.3 Componentes del plan.

A pesar que la IEEE propone un formato que contiene varios aspectos que deben tenerse en cuenta al momento del desarrollo del plan de pruebas no es una exigencia considerarlos todos siempre que se realice un plan de prueba, es decir, la propuesta es flexible y puede ser modificada agregando o eliminando secciones dentro del mismo. A continuación, se mencionaran cada uno de los componentes propuestos por la IEEE, incluyendo además algunas secciones propuestas por Craig y Jaskiel (identificadas con un asterisco) que pueden ser usadas al momento de crear cualquier clase de plan, ya sea el plan maestro, aceptación, sistema, integración, unidad o cómo haya nombrado los niveles del plan prueba dentro del proyecto.
v  IDENTIFICADOR DEL PLAN. El objetivo del identificador del plan es brindar la posibilidad de seguimiento de las versiones del plan de prueba. Es por eso que a cada una de las versiones debe asignárseles un número de identificación. Cuando la organización que desarrolle el proyecto tenga algún estándar para control de documentación, debe implementarlo para las versiones del plan. El identificador del plan es un número único generado por la organización que gestiona el proyecto y este se usa, como se mencionó antes para identificar la versión del plan, el nivel, y la versión de software a la que pertenece dicho plan. No puede olvidarse que el plan de pruebas es como cualquier otra documentación de desarrollo de software, es dinámico y por lo tanto debe mantenerse actualizado.

vTABLA DE CONTENIDOS*. Debe incluir todos los temas que se trabajen en el plan, así como también referencias, glosarios, y apéndices. Si es posible, es aconsejable desarrollar la tabla de contenidos hasta dos o más niveles de profundidad para que el lector pueda ver en detalle el contenido del plan.
vREFERENCIAS. Según el estándar 829-1998 de la IEEE para la documentación de pruebas, las referencias están incluidas dentro de la Introducción, pero Craig y Jaskiel consideran que debe ser dividido cada ítem en una sección para hacer énfasis en su importancia, los ítems son: Autorización del proyecto, plan del proyecto, plan de aseguramiento de calidad, plan del manejo de la configuración, políticas relevantes y estándares relevantes. La IEEE también sugiere que, para planes multinivel, cada nivel inferior debe referenciar al siguiente nivel superior.

v GLOSARIO. El glosario es usado para definir algunas de las palabras y términos utilizados en el documento del plan. Es conveniente que cuando se realice el glosario se tenga en cuenta el público que recibirá el documento, recuerde que pueden existir diferentes perfiles de personas dentro de proyecto y que cada uno tiene conocimientos técnicos diferentes.

v INTRODUCCIÓN. Según la plantilla sugerida por la IEEE la introducción está compuesta por dos componentes principales: una descripción del alcance del proyecto, que incluye las características, historia, entre otros.; y una introducción que describa el alcance del plan.

v ÍTEMS A PROBAR. La sección describe de una manera secuencial, que elementos se van a "testear" de acuerdo al alcance del proyecto y debe realizarse con la colaboración del gerente y el equipo de desarrollo. Este componente del plan puede variar entre niveles; para niveles superiores los ítems se deben organizar por versiones o aplicaciones, mientras que para los niveles inferiores dichos ítems se pueden organizar en módulos, unidades o programas. Los ítems o elementos que vayan a ser excluidos de las pruebas deben ser especificados en esta sección.

v RIESGOS. Craig y Jaskiel sugieren que el propósito de incluir los riesgos de software dentro de un plan de software es el de determinar el enfoque que deben tener las pruebas. Explican qué determinar los riesgos de software ayuda a los ingenieros a establecer una prioridad entre las pruebas y a concentrarse en aquellas áreas donde puede presentarse mayor riesgo a fallas o que tengan alto impacto para el cliente en caso de fallas. Algunos de los riesgos más comunes pueden ser: Interfaces con otros sistemas, alta complejidad del software, módulos que históricamente han presentado fallas o con muchos cambios, aspectos relacionados con la seguridad, desempeño, fiabilidad.

Para determinar las áreas que sean propensas a falla dentro del proyecto en el que está trabajando es aconsejable realizar una lluvia de ideas, preguntando a los miembros del equipo "¿Qué los preocupa?", sin usar la palabra riesgo dentro de la pregunta, ya que por experiencia de los Craig y Jaskie dicha palabra puede intimidar a los participantes.

v  CARACTERÍSTICAS A PROBAR. A diferencia de la sección "ítems a probar", donde se tienen en cuenta los ítems que se deben probar desde el punto de vista del equipo desarrollador, esta sección del plan contiene una lista de los elementos que serán probados desde la vista del usuario o el cliente. Por cada característica mencionada dentro de la lista debe haber una columna por cada uno de los siguientes aspectos: tipo de requisito al que pertenece el ítem, frecuencia de ocurrencia, impacto y prioridad. Para definir la escala por cada característica de la lista, pueden usar las concepciones definidas, para el proyecto en general, respecto a los riesgos.

v  CARACTERÍSTICAS NO PROBADAS. En esta sección del plan debe enunciar todas las características o elementos que no serán tenidos en cuenta dentro de las pruebas, explicando el motivo para descartarlas dentro del plan. Existen varias razones por las cuales no se prueba una característica. Puede que la característica no haya cambiado, no esté disponible para el uso, etc. Pero por la razón que sea la característica debe aparecer en esta lista, generalmente la razón principal es un riesgo bajo dentro del proyecto.

v  ESTRATEGIA. La estrategia es considerada por Jaskiel y Craig, el corazón del plan de pruebas. Esta sección contiene una descripción detallada de cómo serán desarrolladas las pruebas y también una explicación de los temas que tengan un alto impacto tanto para las pruebas, como para el proyecto en general. La estrategia incluye una serie de secciones o componentes explicados en detalles en el siguiente numeral.

v  CRITERIO DE ACEPTACIÓN/RECHAZO DE LOS ÍTEMS. Esta sección describe los criterios de aceptación y rechazo sobre los ítems expuestos en la sección "Ítems a probar". Generalmente dichos criterios se aplican a los casos de pruebas y están expresados por: número, tipo, severidad y ubicación del error, usabilidad, fiabilidad y/o estabilidad. Dependiendo del nivel, y del proyecto, los criterios de aceptación/rechazo pueden variar. Algunos ejemplos de criterios incluyen: porcentaje de casos de pruebas aprobados, cantidad, severidad y distribución de defectos, alcance de los casos de pruebas.

v  CRITERIOS DE SUSPENSIÓN Y REQUISITOS DE REANUDACIÓN. En esta sección se identifican las condiciones que obligan una suspensión temporal de las pruebas y los criterios de reanudación de las pruebas. Los criterios de suspensión pueden incluir: tareas incompletas en la ruta crítica del proyecto, muchos errores encontrados, errores críticos. Ambientes de pruebas incompletos, faltas de recursos.

v  ENTREGABLES DE PRUEBAS. En esta sección se define una lista de entregables que incluye documentos, herramientas y otros componentes a desarrollarse y mantenerse bajo los esfuerzos de las pruebas. Ejemplos de entregables de pruebas pueden ser: plan de pruebas, especificaciones de diseño, casos de pruebas, procedimientos, lo es, reporte de incidentes, resumen, entre otras. Es importante aclarar que no es válido incluir dentro de la lista de entregables el software que está siendo puesto a prueba. Los elementos que hayan servido de soporte para las pruebas deben ser identificados en el plan general del proyecto como entregables y deben tener una asignación adecuada de recursos en el sistema de seguimiento del proyecto. Esto garantizará que el proceso de pruebas tenga una visibilidad importante dentro del proceso de seguimiento del proyecto y que las tareas resultantes de las pruebas para generar los entregables sean iniciadas a tiempo. Las dependencias entre los entregables de las pruebas y las entregables del producto de software deben ser plasmadas en un diagrama de Gantt (se exponen en la sección "Cronograma").

v  TAREAS. Definida por la IEEE para identificar el conjunto de tareas necesarias para llevar a cabo las pruebas. También se listan todas las dependencias entre tareas y cualquier habilidad especial requerida.

v  NECESIDAD DEL ENTORNO. Las necesidades del entorno incluyen, hardware, software, datos, lugares apropiados, accesos, y otros requisitos que permitan el normal desarrollo de las pruebas. Se debe entonces crear un entorno lo más cercano a la realidad del sistema que va a ser sometido a pruebas. En caso de que el sistema este diseñado para ser ejecutado con múltiples configuraciones (bien sea de hardware o de software), se debe decidir si bien se replican todos los escenarios los mas riesgosos o las más comunes. Una vez se hayan determinado los escenarios se deben listar, tantos las configuraciones de hardware como las de software. Adicional a esto es necesario identificar de donde vendrán los datos para generar una base de datos referentes a las pruebas. Dicha base de datos puede contener: datos de producción, de compra y los suministrados por el usuario.

v  RESPONSABILIDADES. Craig y Jeskiel formularon una matriz que muestra como está distribuida las responsabilidades de las diferentes actividades que requieren las pruebas frente a los diferentes miembros del equipo encargado de realizar el Testing. La matriz contiene responsables, y tareas o actividades a realizar. Los responsables se pueden categorizar en: Director de desarrollo, director de pruebas, ejecutores de pruebas, coordinador del entorno de pruebas y director de librerías. Y algunos ejemplos de tareas a realizar pueden incluir: coordinar el desarrollo del MTP (plan general de pruebas), desarrollar el plan para la prueba de sistema, de unidad e integración, mantener el entorno de pruebas, entre otros.

v  NECESIDADES DE PERSONAL Y ENTRENAMIENTO. Dependiendo del alcance, los objetivos y otros factores influyentes en el proyecto, se determina la cantidad de personas y las cualidades necesarias que deben tener para llevar a cabo el Testing. Algunos ejemplos de capacitaciones pueden incluir: usos de cierta herramienta en particular, metodologías de pruebas, interfaces, entre otras. Las capacitaciones pueden variar de acuerdo al proyecto.

v   CRONOGRAMA. El cronograma de pruebas debe ser generado a partir de las fases existentes en el plan del proyecto como las fechas de entrega de varios documentos y módulos, la disponibilidad de recursos, interfaces, etc. Después añadir las fases de las pruebas. Estas fases serán diferentes para cada nivel de planificación existente dependiendo del nivel del plan de pruebas creado. En un MTP, las fases se construirán alrededor de los eventos importantes, como las revisiones de requerimientos y diseño, entrega de código, terminación del manual de usuario y disponibilidad de interfaces. Inicialmente es de mucha ayuda construir un cronograma genérico sin fechas; esto es, identificar el tiempo requerido para las tareas, las dependencias, etc. Todo esto sin especificar tiempos de inicio o entrega. Normalmente este cronograma debe ser una grafica de un diagrama de Gantt en orden de mostrar las dependencias entre tareas.

v   RIESGOS DE PLANEACIÓN. Jaskiel y Craig argumentan que cualquier actividad que suponga en un obstáculo para el cronograma de las pruebas se considera un riesgo de planeación. Dentro de los riesgos de planeación más comunes se encuentran: fechas de entregas imposibles de cumplir, disponibilidad del personal, presupuesto, insuficiencia de inventario de herramientas, alcance de las pruebas mal propuesto, entre otras. Por otra parte esta sección debe mencionar las contingencias que se deben tener en cuenta para mitigar los riesgos antes mencionados. Algunas de dichas contingencias pueden ser: reducción del alcance de la aplicación, retrasar la implementación, añadir recursos adicionales, reducir procesos de calidad.

v   APROBACIONES. Las aprobaciones deben ser firmadas o aceptadas por miembros del equipo de pruebas que estén en capacidad de determinar si el software está listo para avanzar hacia el siguiente paso. Para cada uno de los niveles de pruebas, existirán aprobaciones que estarán a cargo de los directores de dichos niveles, por ejemplo, para el plan de prueba de unidad la persona que autoriza debe ser el gerente de desarrollo. Las personas que firman deben incluir la fecha en el que realizan la aprobación para que exista un registro dentro del proyecto.

1.2.2.4 Componentes de la estrategia


v  SELECCIÓN DE METODOLOGÍAS. Para definir la metodología a utilizar en una estrategia de pruebas es necesario tener en cuenta una serie consideraciones básicas como: el número de miembros del equipo de pruebas designados para la planeación el diseño y las pruebas, el inicio de las pruebas, la utilización de pruebas piloto, las técnicas y niveles de pruebas (Unidad, Integración, Aceptación o de Sistema) a utilizar, entre otras. Por ejemplo, para la selección de los niveles de pruebas que se van a aplicar en un determinado proyecto se deben tener en cuenta factores que influyen en la decisión como lo son las políticas, los riesgos, la complejidad del sistema, los recursos y el tiempo disponible entre otros.

v  RECURSOS. Se necesita tener una estrategia solida frente al manejo de los recursos, sobre todo humanos, ya que estos son escasos y son la clave del éxito en cualquier tipo de proyectos incluyendo proyectos de software.

En casos donde no se tenga un equipo de pruebas o se tenga uno pero con poco personal o dedicados a otras actividades diferentes a las de pruebas, se deberá acudir a la contratación de personal adicional lo cual retrasaría todo el proceso debido a la curva de aprendizaje. También incrementaría costos. Por otro lado, se puede conformar un equipo de pruebas desde el inicio del proyecto, pero aumentaría costos al tener sin hacer nada a consultores que por lo general devengan un buen salario. Por lo cual se hace necesario encontrar un equilibrio entre los dos puntos.

v    DETERMINACIÓN DEL ALCANCE. Actualmente existen diferentes medidas para el alcance de las pruebas, entre las cuales se encuentran las coberturas de requisitos, diseño e interfaces. Pero una de las más conocidas y usadas, la cobertura de código, se encarga de medir el Porcentaje de condiciones, ramificaciones o rutas de código ejecutadas por un grupo específico de casos de pruebas. Para determinar que partes del código fuente han sido ejecutadas es necesaria la ayuda de herramientas especializadas que faciliten dicha labor. Otra de las medidas utilizadas para el reconocimiento del alcance en las pruebas, el cubrimiento de los requisitos, mide el porcentaje de los requisitos de negocio cubiertos por los casos de prueba. De forma similar se mide el cubrimiento de la interface al considerar las interfaces que están siendo intervenidas por las pruebas. Y en lo concerniente a la medición del alcance que puedan tener las pruebas en el diseño, se determina que partes del mismo son cubiertas por las pruebas.

v    RECORRIDOS E INSPECCIONES. Las revisiones, junto con el Testing y el análisis, hacen parte del proceso de evaluación del software (ver Ilustración 2). En las revisiones se encuentran técnicas de verificación, como revisiones formales de código, requisitos y diseño, que no hacen parte de actividades de Testing como tal, pero afectan de manera significativa la estrategia, por lo que se deben considerar en el plan general de pruebas (MTP). Dos de los tipos de revisiones más comunes se encuentran los recorridos y las inspecciones. Un recorrido, hablando en términos de pruebas de software, se conoce como la revisión de pares a un producto de software en específico, que consiste en recorrer de manera secuencial el software para determinar la calidad que posee el producto y descubrir posibles defectos. Y en el caso de las inspecciones, tienen la misma razón de ser de los recorridos, pero son pruebas mucho más rigurosas y emplean procesos de control estadístico con el fin de medir la efectividad de la inspección e identificar oportunidades de mejoramiento en el proceso de desarrollo de software. La IEEE define la inspección como "la técnica de evaluación formal de software, en la cual los requisitos, el diseño o el código son examinados en detalle por una persona o un grupo, diferente al autor, con el objetivo de detectar fallas, violaciones de estándares de desarrollo y otros problemas". Según Craig y Jaskiel, la inspección        se      rige  por las          siguientes         observaciones a    continuación Mencionadas: Verificar que los elementos del software satisfagan las especificaciones, verificar que los elementos del software se ajustan a los estándares aplicables, identificar las desviaciones de los estándares y especificaciones anteriormente mencionados, recolectar datos provenientes de la ingeniería de software (como por ejemplo datos de defectos o esfuerzos), y por ultimo no examinar aspectos alternativos o estilísticos.



Ilustración 3. Proceso evaluación de software

Dentro de las diferencias entre recorrido e inspección, planteadas por Craig y Jaskiel, se puede citar la informalidad del recorrido frente a la formalidad de la inspección, resaltando los propósitos de cada una de ellas, siendo el de la primera muy subjetivo dependiendo de la persona encargada, mientras que en la segunda se utilizan técnicas de medición para la mejora de determinados procesos.  Debido a que tanto el proceso de recorrido como el de inspección requieren tanto de esfuerzo humano como de muchos recursos para llevarse a cabo, es que existe la necesidad de priorizar la inspección y recorrido de ciertos elementos, ya que resultaría casi imposible evaluar todos los componentes de un producto de software. Por otro lado, se debe tener en cuenta el tipo de personal que se necesitará para realizar bien sea la inspección o los recorridos. Para realizar dichas actividades, es ideal tener personal de prueba que esté involucrado con las pruebas del nivel de sistema y tengan habilidades en la revisión de código.

v  GESTIÓN DE LA CONFIGURACIÓN. En esta sección de la estrategia incluida en el plan general de pruebas (MTP), es necesario considerar el manejo que se le dará a la gestión de la configuración dentro del marco de las pruebas. Dicha gestión de la configuración incluirá la gestión de cambios, de vital importancia para el proyecto en general, llevando a cabo un control de versiones del software y sus respectivas documentaciones que vayan siendo "testeadas", así como también para un generar un proceso que permita tomar decisiones útiles para la priorización de errores. De los niveles de pruebas expuestos en el numeral anterior, Craig y Jaskiel sugieren utilizar el nivel de aceptación para validar el proceso de la gestión de la configuración.

v  RECOLECCIÓN Y VALIDACIÓN DE MÉTRICAS. Es necesario discutir e incluir las métricas a utilizar en el proyecto dentro de la estrategia del plan general de pruebas, debido a que todo esfuerzo en cuanto a pruebas de software se refiere, debe medirse en términos de efectividad, calidad, cumplimiento al cronograma, entre otros.



vHERRAMIENTAS Y AUTOMATIZACIÓN. Otra de las consideraciones a tener en cuenta en la estrategia es el uso de herramientas de automatización útiles para el buen desarrollo del proyecto. Es necesario entonces generar un buen plan sobre el empleo de dichas herramientas, que incluya las respectivas capacitaciones de estas hacia los miembros del equipo.   Cambios al plan de pruebas. En esta sección se debe abordar el manejo de cambios en el plan general de pruebas, así como también en los planes de los niveles existentes, debido a los constantes cambios que se presentan a lo largo del proyecto. Por eso es necesario que el encargado de coordinar la estrategia de prueba tenga en cuenta las siguientes consideraciones: determinar qué cambios deberán ir al proceso de aprobación nuevamente (por más pequeño que sean), precisar la frecuencia de actualización del plan de pruebas, determinar si el plan debe pasar por el proceso de gestión de configuración, como publicar el plan, entre otras consideraciones.

vREUNIONES Y COMUNICACIONES. Resulta conveniente incluir dentro del plan general de pruebas (MTP) los reportes, comunicaciones y reuniones que se llevaran a cabo durante la duración del proyecto. Debe existir entonces unos métodos preestablecidos de comunicación como reuniones y reportes acerca del estatus de las pruebas, mesa de control de cambios, presentación a usuarios y/o gerentes, entre otros métodos.

v OTRAS CONSIDERACIONES SOBRE LA ESTRATEGIA. Durante la ejecución del proyecto pueden ocurrir una serie de consideraciones acerca de la estrategia no incluidas en el plan general de pruebas. A continuación, mencionaran dichas consideraciones: múltiples entornos de producción, seguridad multinivel, beta Testing, mantenimiento y configuración de entornos de prueba, uso del soporte contractual, calidad de software desconocidas, entre otras más.