Banner 1

Mostrando entradas con la etiqueta testing. Mostrar todas las entradas
Mostrando entradas con la etiqueta testing. Mostrar todas las entradas

Performance Testing in the Cloud

0 comentarios
This is my presentation on Performance Testing in the Cloud that Chris De Lorenzo and I delivered at the Iqnite Australia 2014 conference on October 16th. The slides from Chris on the state of performance testing at one of the world’s largest online betting companies were excellent. The original presentation can be downloaded from SlideShare.




Presentation abstract:

With an increasing number of applications being deployed in the cloud, this trend will soon touch performance testers within every organisation. This presentation will dispel the hype, tell you what you need to know to embrace this opportunity, and answer the following questions:
  • What are the challenges specifically related to performance testing cloud-based applications?
  • What are some common performance problems seen in cloud-based applications, and how can you test for them?
  • How will cloud-based load generators help your performance testing?
Don’t get left behind! A solid understanding of cloud concepts will be invaluable to your testing ca-
reer.


Fuente: http://www.myloadtest.com/performance-testing-in-the-cloud/

QA: Pruebas para asegurar la calidad del producto software

0 comentarios
Las aplicaciones (en general cualquier mecanismo diseñado e implementado por un humano) son propensas a tener fallos. A veces, pueden contribuir al fracaso de cualquier proyecto de software, e impactar de forma negativa en toda una empresa. No parece "justo" que la imagen de toda una compañía se degrade por errores que pueden ser subsanados, y a los que el código es tan "propenso" en general. Los tiempos de desarrollo, los entornos de programación, las diferencias entre versiones... todo influye para que, incluso con la máxima dedicación, puedan darse fallos que empañen la imagen y a veces la reputación, de una organización. Surge por tanto la necesidad de asegurar en lo posible, la calidad del producto.




Pruebas de software

Principalmente se debe verificar que se cumplan con las especificaciones planteadas desde un inicio por el analista o el propio cliente, y/o eliminar los posibles errores que se hayan cometido en cualquier etapa del desarrollo. Hace años (y todavía en entornos pequeños), estas pruebas se realizaban de manera relativamente informal, como podría ser la generación de informes que pasaban entre departamentos. Pero hoy es, en muchos aspectos, una de las etapas críticas dentro del ciclo de vida del software. Existen, de hecho, diferentes metodologías para llevar a cabo las pruebas de calidad de manera óptima, y que tienen en cuenta la complejidad de trabajar con diferentes lenguajes de programación, sistemas operativos, arquitecturas hardware, etc. Debido a esto último, el proceso de testing debe basarse en metodologías o métricas generales que revisen los aspectos fundamentales del sistema, desde el seguimiento de errores, automatización de pruebas unitarias, etc.

Las pruebas de software son las investigaciones empíricas y técnicas cuyo fin es proporcionar información objetiva e independiente sobre la calidad del producto. Esta actividad forma parte del proceso de control de calidad global. Las pruebas son básicamente un conjunto de actividades dentro del desarrollo de software y dependiendo del tipo de pruebas, estas actividades podrán ser implementadas en cualquier momento del proceso de desarrollo.

Para conseguirlo, en realidad no existen las "mejores prácticas" como tal, debido a que cada práctica puede ser ideal para una situación pero completamente inútil o incluso perjudicial en otra, por lo que las actividades de testeo, técnicas, documentación, enfoques y demás elementos que condicionarán las pruebas a realizar deben ser seleccionados y utilizados de la manera más eficiente según contexto del proyecto.

¿Por qué es necesario hacer pruebas?

La labor de desarrollar software en una empresa (ya sea como producto o herramienta interna) trae consigo la necesidad de asegurar que el trabajo realizado se acerca (en lo posible) a la perfección en cuanto calidad y desarrollo seguro. Evidentemente, esto redunda en la satisfacción del equipo que logra los objetivos como por parte del cliente que obtiene el mayor beneficio de un producto finalizado.

Además, como toda buena inversión, ahorra tiempo a largo plazo. Si trasladamos por ejemplo los conceptos al entorno móvil, para asegurar el correcto funcionamiento de las aplicaciones en cada tipo de terminal y sistema operativo, el equipo de pruebas debe realizar diversos test a diferentes niveles (como veremos en siguientes entregas). Excepto Google Play, las grandes compañías de distribución de apps (AppsStore y Microsoft Marketplace) suelen someter a diversas pruebas las apps candidatas, para comprobar que se encuentran dentro de unos umbrales mínimos de calidad. Este proceso puede ser de varios días antes de recibir el visto bueno o el rechazo, con lo que el proceso debería volver a comenzarse. Esta es una de las razones por las que someter cualquier aplicación a una buena batería de pruebas de forma interna.

¿Cuándo y cómo empezar el proceso de testing?

Siguiendo el proceso de desarrollo software, tras la realización del análisis, diseño y en algún punto del desarrollo de la aplicación debe iniciarse la etapa de pruebas. Para esto es necesario un ambiente aislado del de desarrollo y el de producción, es decir, debería simularse la ejecución de la aplicación en un entorno idéntico a donde se va a ejecutar. Esto incluye la mayor muestra posible de sistemas "estándar" de usuario, en el caso de que se trate de una aplicación destinada al público en general, donde es imposible simular todos los escenarios.

Un aspecto importante para todas las empresas debe ser el tener un buen equipo de testers que cuenten con las herramientas necesarias para realizar las labores de pruebas de una manera eficiente, o bien un conjunto reducido de testers experimentados que lleven la búsqueda de fallos con la metodología con la que están habituados trabajar y en el menor tiempo posible.

Otra práctica habitual (más informal pero bastante difundida) es distribuir una versión beta y que los propios usuarios sean los que encuentren los fallos y los reporten. Aunque esto conlleva desventajas, como la complejidad para que los usuarios reporten de manera adecuada el fallo (descripción del entorno, pruebas de concepto...) o simplemente a la pérdida de profesionalidad de todo el proceso en sí. Además, los betatesters, pueden pasar por alto test importantes como "pruebas de estrés", "test unitarios"..., que detectan fallos a nivel modular.

Una recomendación importante es que los desarrolladores de una aplicación no pueden ser a su vez testers de esa aplicación. Ser juez y parte hace que se pierda objetividad debido a la presunción de que su desarrollo es totalmente fiable, a la consideración de que determinados elementos no son relevantes a verificar, etc. Por ello es necesario que el equipo de testeo se encuentre totalmente desligado del equipo de programación. En este sentido, surge también una alternativa bastante interesante que es la realización de testeo cruzado entre equipos de trabajo, es decir, un equipo de desarrollo se encarga de realizar las pruebas sobre el software creado por otro equipo y viceversa. Aunque según disponibilidad de personal, siempre será mejor un equipo especializado en realizar estas labores.

Para adentrarnos un poco más en las diferentes pruebas que tiene que (o debería) realizar un equipo de QA, vamos a clasificar las pruebas según determinados criterios y luego profundizaremos en su definición y características principales. La tarea de clasificar las distintas pruebas dependerá siempre de los diferentes enfoques que se pueden tener sobre el propósito del software desarrollado, así que vamos a presentar diferentes clasificaciones atendiendo a los criterios que se suelen tener en cuenta a la hora de realizar una evaluación de calidad.

Según la metodología utilizada para verificar y conocer a fondo el funcionamiento de la aplicación disponemos de dos casos:

  • Test basado en un guión de casos de prueba o comúnmente llamado Scripted Testing
  • Test basado en pruebas exploratorias también llamado Exploratory Testing
Según la accesibilidad que se tenga sobre los elementos del sistema a evaluar:
  • Pruebas de Caja Blanca
  • Pruebas de Caja Negra
  • Pruebas de Caja Gris
También podrían clasificarse según el nivel al que llega cada test, y en éste caso se hablaría de:
  • Pruebas unitarias
  • Pruebas de integración
  • Pruebas de sistema

Y por último y no menos importante, si la clasificación se basa en la ejecución del producto también existe la siguiente clasificación:

  • Pruebas funcionales: En estos casos se lanza la ejecución de la aplicación para evaluar las diferentes características del software. En estas pruebas se busca si la solución satisface las necesidades por la que fue creada, si es compatible entre versiones, si realiza el funcionamiento esperado para un grupo de personas, etc. Según las pruebas (más o menos ligeras), podríamos hablar de "pruebas de humo",  de regresión, pruebas de aceptación, de compatibilidad,  de uso a primer nivel o "Alpha testing", pruebas de uso en pre-producción o "Beta testing"..
  • Pruebas no funcionales: en este caso se tratan de pruebas totalmente complementarias a las anteriores, ya que no es necesario la evaluación del funcionamiento de la aplicación sino verificar diferentes aspectos de ella. En este conjunto entrarían pruebas de seguridad, de usabilidad, de rendimiento, de internacionalización y localización, pruebas de escalabilidad,  de mantenimiento, de instalación, de portabilidad...

Llegados a este punto vamos a ir definiendo uno a uno para que se puedan apreciar las similitudes y diferencias de cada tipo de test existente en la actualidad.



Scripted Testing

Cuando hablamos de un test basado en un guión de pruebas (Scripted Testing), nos referimos a un tipo de test cuyo enfoque puede ser entendido como "tradicional". En este escenario se realiza un proceso de creación de documentación relativo a las pruebas que se quieren realizar. El diseño de los casos de prueba se hace al inicio del proyecto, donde se tienen claramente definidos los aspectos que se desean alcanzar, y se van añadiendo casos de prueba en cada nueva fase de desarrollo, de forma que se utilizan los casos previamente definidos y se añaden otros nuevos según haya variado la aplicación con respecto a la fase anterior (nuevas características, soluciones a errores, optimización de recursos, etc.). Finalmente el guión de casos de prueba dará al tester los pasos a seguir para ejecutar la aplicación e interpretar los resultados obtenidos de las pruebas y completar un informe detallado que formará parte de la documentación para la siguiente fase.

Si hablamos del ciclo de vida de un Scripted Test, podemos definir dos fases si tomamos en cuenta una visión temporal del proyecto:
  • Diseño temprano de pruebas.
  • Ejecución de las pruebas (en muchos casos, muy posterior al diseño).
Sin embargo, tras esto se iniciaría un ciclo por cada fase de desarrollo del producto.
  • Refactorización del conjunto de casos de prueba.
  • Ejecución de las pruebas.
Una característica principal es que el Scripted Testing se adapta a contextos poco variables y a situaciones donde se tenga un control estricto sobre los diferentes aspectos del proceso. Nuevas variables que revisar y verificar, o cualquier cúmulo de cambios, harían el control sobre las pruebas de la aplicación se complicara considerablemente y en consecuencia supondría realizar muchos cambios en el guión de pruebas.

En la práctica, el equipo de QA elige un integrante al que llamaremos diseñador. Se encargará de crear los casos de prueba que debería dar como resultado un robusto conjunto. Otros integrantes (o solo uno, dependiendo del volumen de casos), realizarán la función de testers que serán los que busquen lo que el diseñador les diga bajo las condiciones de entorno que el diseñador les imponga.

Es importante que el diseñador no realice funciones de tester ya que su aportación a la búsqueda de errores sería prácticamente nula respecto a las pruebas que él mismo ha pasado por alto. O lo que es lo mismo: los demás pueden encontrar errores para los que el diseñador no ha generado casos de prueba.

Si pretendemos dar un ejemplo sobre esto, tendríamos que definir lo que es una Fábrica de Pruebas, puesto que en este entorno es el proyecto el que se adaptará al proceso de trabajo de la fábrica. En esta situación los proyectos se etiquetarán según sus características y se tratarán según la clasificación que les aplica. En este entorno existen plantillas con un conjunto de pruebas predefinidas y según el tipo de proyecto al que se le quiera aplicar, se aplica una plantilla u otra.

Para desarrollar estas plantillas se presta atención a aspectos generales como:
  • Los riesgos habituales en un determinado escenario.
  • Previsión de errores, así como su ubicación, su tipología, etc.
  • Posibilidad de aplicar la repetición de pruebas, que sería muy ventajoso.
  • Valorar el uso de scripts automatizados (programación de algoritmos de prueba)
Sobre esto, un aspecto que siempre debemos tener en cuenta es la capacidad de las personas a la hora de procesar información. Algunas personas pueden ver lo que otros no ven a simple vista, ya sea por falta de conocimientos o intereses. En contraposición, los ordenadores a su vez se centran únicamente en hacer lo que se les ha programado hacer, es decir, no posee suficiente inteligencia para descubrir errores que pueden estar en el mismo escenario en el que se está ejecutando, ya que solo observará lo que se ha diseñado que se observe.



Pruebas exploratorias

Las pruebas exploratorias o testing exploratorio es un estilo o enfoque a la hora de realizar una evaluación de calidad de un producto software en la que podríamos destacar su capacidad de retroalimentación. Donde aprender el funcionamiento de la aplicación, la labor de diseñar casos de prueba y ejecutarlas son etapas que van de forma conjunta durante casi toda la ejecución del test.

Si quisiéramos decirlo de otra manera, sería un estilo de testing donde se da especial prioridad a la libertad del tester de optimizar continuamente la calidad de su banco de pruebas y la responsabilidad asociada para mantenerlo y realimentarlo según vaya realizándose el diseño o la realización de pruebas. Es decir, no se espera a que se complete un ciclo de desarrollo para regenerar el conjunto de pruebas, sino que el número de pruebas irán incrementando en función de cómo se vaya explorando la aplicación. Cuanto más se use la aplicación más casos de uso se nos ocurrirán y de esta manera tendremos un guion más robusto y podremos realizar un informe mucho más completo que el que conseguiríamos con un Scripted Testing

Muchas personas que se dedican a las pruebas de calidad, consideran que el testing exploratorio tiene características comunes con la técnica de prueba de caja negra (hablaremos de ello más adelante), sin embargo, no queremos dar a entender el testing exploratorio como una técnica, sino más bien como una filosofía o enfoque donde la clave principal está en la responsabilidad y concentración del tester para gestionar tiempo y recursos en la búsqueda de mejorar constante y progresivamente su batería de pruebas sin necesidad de una nueva versión de la aplicación o características.

Y es que el objetivo principal que se persigue, es aprender cómo funciona realmente la aplicación y ser capaz de responder a preguntas sobre cómo se comporta en determinadas circunstancias. Es por esto que la calidad del testing exploratorio depende de las habilidades del tester para desarrollar los casos de prueba iniciales y generar nuevos a la hora de encontrar errores. El tester configura, opera, observa y evalúa el producto y su comportamiento, investigando de forma crítica el resultado y reportando la información de lo que parecen ser defectos (que amenazan el valor del producto) o problemas (que amenazan la continuidad y calidad de las pruebas).

En relación a la documentación, se puede decir que se puede ir desde registrar todas las pruebas realizadas, a documentar únicamente los defectos.

La tarea de documentar los errores no siempre depende del tester que los encuentre, ya que en situaciones comunes como las pruebas por parejas, dos personas crean los casos de pruebas y luego una los ejecuta y la otra documenta. Así se consigue un alto grado de rendimiento y concentración en la labor que se está realizando.

Las pruebas basadas en sesiones es un método específicamente diseñado para el testing exploratorio auditable y medible a gran escala. Es por esto que en algunas empresas, como complemento a la hora de realizar el testing exploratorio, hacen uso de herramientas, (capturas de pantalla o vídeo, por ejemplo), que se usan a modo de registro de la sesión.

Scripted Testing y Exploratory Testing

Combinación Scripted Testing y Exploratory Testing

En realidad, para realizar un test sobre aplicaciones no se tiene por qué optar a uno u otro enfoque. Una buena práctica de evaluación de calidad casi siempre es una combinación de testing exploratorio y testing basado en un guion de pruebas, aunque el equipo de QA siempre se va a tener tendencia hacia uno de los dos, dependiendo del tipo de proyecto, numero características e incremento de las mismas, etc.


Fuente: http://blog.elevenpaths.com/2014/09/qa-pruebas-para-asegurar-la-calidad-del.html

Web Application Protection (testiando las vulnerabilidades de una página antes de producción)

0 comentarios

wap2 Web Application ProtectionEn el proceso de desarrollo de un aplicativo , es necesario contar con ciertos procedimientos antes de subir esa  a producción. Uno de esos pasos es una revisión de para testear que en la fase de desarrollo no se haya cometido ningún fallo.

Es por eso que nacen proyectos como , que se encargará de testear la seguridad de los aplicativos web en PHP.
, es capaz de detectar el siguiente conjunto de vulnerabilidades:
  • SQL injection using MySQL, PostgreSQL and DB2 DBMS
  • Reflected cross-site scripting (XSS)
  • Stored XSS
  • Remote file inclusion
  • Local file inclusion
  • Directory traversal
  • Source code disclosure
  • OS command injection
  • PHP code injection
Además de la particularidad de poder detectar el conjunto de fallos, aplicará una corrección del código fuente.
Lo primero que haremos será descargar la herramienta:
wap Web Application Protection
Una vez que hemos descargado la herramienta lo que tendremos que hacer es escoger aquel proyecto que queramos analizar.

Para la prueba escogeremos el proyecto de DVWA, bajamos el proyecto y lanzamos el análisis:
wap3 Web Application Protection
Lo que hará la herramienta es analizar el proyecto en PHP y buscar por una vulnerabilidad en concreto, yo le he indicado que busque vulnerabilidades del tipo SQL Injection.

Una vez que la herramienta a analizado el código podremos ver los resultados:
wap4 Web Application Protection
Podemos ver que la herramienta a analizado el proyecto que le hemos pasado y, además ha podido sacar la SQL Injection y ha podido subsanarla.

Como os decía, la herramienta es capaz de aplicar la corrección para evitar la inyección detectada.
wap5 Web Application Protection
Aquí tenemos el código que subsanaría el fallo de la aplicación.

Otra de las cosas que es capaz de detectar la aplicación son falsos positivos:
wap6 Web Application Protection
Sin duda, además de pasar los tests oportunos como pasar un QA, tienen que haber tests específicos para pasar los checks de seguridad.

En este caso, WAP, no cubre todos los aspectos, pero por lo menos es una capa de seguridad que podemos automatizar antes de subir la aplicación a producción.

[+]http://sourceforge.net/projects/awap

Fuente: http://www.dragonjar.org/web-application-protection.xhtml

Libro gratis - "Introducción a las Pruebas de Sistemas de Información"

0 comentarios
También se puede adquirir en formato tradicional, impreso, por un precio muy accesible (200 pesos uruguayos). Por ahora, para acceder a la versión impresa, los invitamos a pasar por nuestras nuevas oficinas en Ellauri 1126, esquina Avenida Brasil, en Montevideo, Uruguay.



Agradecimientos a esta página por compartir y liberar información de este tipo, así que no duden en mirar la fuente para mayor información

Fuente: http://blog.abstracta.com.uy/2014/04/testinguy-y-publicacion-del-libro-de.html

Análisis PL/SQL con SonarQube – Evaluar la calidad

0 comentarios
PLSQL_EvaluationQualité1

Un post de síntesis, para esta serie sobre el análisis de código PL / SQL con SonarQube.

Después de configurar nuestro análisis con Jenkins, lo lanzamos y encontramos 17 defectos bloqueantes (Blockers), pero ninguna falta crítica (Criticals) con el perfil de calidad de SonarQube. De hecho, las 5 reglas Criticals eran desactivadas y también algunas otras normas de diferentes criticidades: 58 en un total de 132.

Así que hemos creado nuestro propio Quality Profile para activar todas estas reglas, ejecutado de nuevo un análisis y examinado las reglas que tenemos en las diferentes categorías Blockers, Criticals y Majors.
El objetivo de este trabajo es para mí construir una demo con código PL/SQL para presentar a un cliente los beneficios que se pueden conseguir con SonarQube. Por esta razón, yo decidí subir en Criticals o incluso en Blockers algunas reglas sobre la robustez, la seguridad y el rendimiento, y reducir las normas de legibilidad o de portabilidad del código. Sólo porque quiero destacar las violaciónes que pueden impactar al usuario final:
  • una aplicación que se detiene de repente,
  • una transacción que no se ha completado, con una posible corrupción de datos,
  • un error en un algoritmo que lleva a un error de lógica o de cálculo,
  • un rendimiento menor,
  • etc.
¿A que parece ahora mi dashboard SonarQube? ¿Cuáles son las informaciones útiles que puedo enseñar en una presentación? Aunque el cuadro de mando SonarQube está muy bien organizado, es fácil no saber por dónde empezar.
No voy a explicar aquí cómo hacer una demo, y mucho menos cómo voy a construir una auditoría de la calidad del código. Se necesitaría más de un post, y probablemente será el tema de una otra serie en el futuro. Pero en modo de síntesis de los articulos anteriores de esta serie, voy a presentar lo que hago para cualificar una nueva aplicación.

El tamaño

Cuando encuentras a una persona, la primera cosa que se puede observar, es su talla. ¿Es grande, media, pequeña?
PLSQL_SizeUn primero widget me permite ver que tenemos aquí 16 ficheros o programas de base de datos, que contienen 1 569 ‘functions’ (objetos, componentes de tipo procedimiento, función, trigger, etc.) representando 28 116 instrucciones (statements).
Esta aplicación cuento con un poco más de 95 KLoc (milles de Lines of Code) en un total de 147 KLoc : la diferencia está en las líneas de comentario (o las líneas blancas, o de código en comentario).
Con el widget ‘Custom Measures’, me he customizado mi propio ‘panel’ para ver todas las informaciones de tamaño y de comentario.
PLSQL_Wdiget1
¿Qué podemos deducir ?
Tenemos una aplicación de tamaño entre medo y grande para esta tecnología PL/SQL, con un porcentage de más del 25%, pues correcto (sin llevar a augurar de su calidad).
El número medio de líneas de código por objeto (Funciones ) es inferior a 100: de nuevo, es acceptable. Contamos un promedio de 18 instrucciones (Statements) por objeto, así que de nuevo no es enorme.
Basandonos en estas cifras, se podría pensar que una corrección o un cambio en estos componentes no sería una carga excesiva.
Excepto que todo este código se encuentra en tan sólo 16 archivos, es decir, 16 scripts o programas de base de datos. La granularidad de cada componente puede ser correcta, pero un promedio de 6 000 líneas de código por archivo es enorme, y podemos imaginar que esto va a impactar en la capacidad de mantenimiento.
Añadir o editar código en un componente PL/SQL de 100 líneas es relativamente fácil. Pero cuando tienes que buscar estas 100 líneas o el código de todos los demás componentes que se verán afectados por este cambio, en un programa de 6 000 líneas de código, vas a necesitar tiempo y el riesgo de introducir un error durante esta corrección o esta evolución también será alto.
Por lo tanto, el siguiente paso en el descubrimiento y la evaluación de la calidad de esta aplicación consiste en comprobar la granularidad de sus componentes.

Granularidad de los componentes

En esto, un nuevo widget introducido en la versión 4.1 de SonarQube representa un gran valor. El Project File Bublle Chart muestra la distribución de los diferentes archivos en dos ejes: el número de líneas de Loc en el eje horizontal X, y el número de violaciónes de las buenas prácticas de programación en el eje vertical Y. Tengas en cuenta que he elegido una escala logarítmica para el segundo eje Y. El tamaño de cada burbuja representa la deuda técnica calculada en número de días para cada componente. Todo esto es configurable .
PLSQL_Bubble3
Apuntando a una burbuja, podemos ver sus características. A la izquierda, el program ‘CreatePackage1.sql’ contiene 6 119 líneas de código, más de 4 000 defectos y una deuda técnica de 228 días.
El script ‘Create_Tables.sql’ en el medio del gráfico, contiene 2,5 veces más de líneas de código (16 810 Loc), pero sólo 400 defectos y entonces una deuda técnica muy baja (8 días).
Y en la parte superior derecha de este gráfico, nos encontramos con el archivo ‘CreatePackageBody.sql’ con casi 58 500 líneas de código, cerca de 20.000 defectos y más de 1 400 días de deuda técnica.

Se puede pensar que el equipo del proyecto responsable de esta aplicación es completamente irresponsable por dejar crecer este programa hasta este punto. De hecho, en absoluto. Tenemos aquí un conjunto de scripts y programas de base de datos para una aplicación cliente-servidor muy antigua (más de 20 años de edad ), con los tratamientos de lógica de aplicación deportados en la base de datos. Era eso o codificar estos tratamientos en las pantallas, con los lenguajes de aquella época, lo que no era del todo recomendable.

Pero ¿por qué implementar toda la lógica de negocio en un único archivo? Otra solución sería la de distribuir todos estos tratamientos en diferentes programas, pero eso complica la gestión de todos los enlaces entre ellos, y en diferentes versiones. En estos tiempos, no existían herramientas de gestión de configuración (SCM). También es más complicado reconstruir la base de datos con varios programas que se deben ejecutar en un orden estricto, con las diferentes versiones correctas. Era frecuente ver el equipo de proyecto trabajando durantes semanas en cambiar los procedimientos, para descubrir que no se podia lanzar el programa A porque se necesitaba la presencia en la base de datos de un componente del programa B, y este no se podía tampoco ejecutar sin que existe ya un componente del programa A. Doble enlace mortal.

Una revisión rapida de los otros archivos nos permite verificar que estos programas son responsables de la creación de vistas (Views), triggers, etc. y con pocas líneas de código y entonces pocos defectos. Por ejemplo, el script de creación de tablas presenta muy pocas violaciónes en un alto número de Loc porque no hay tratamientos.

Las medidas de tamaño parecían indicar un código no demasiado complejo hasta que el Bubble Chart nos indica todo lo contrario: más del 60 % del código de la aplicación se encuentra en un componente monstruoso con todos los tratamientos de lógica de aplicación.

Es muy probable que los costes de mantenimiento de esta aplicación se verán afectados por eso. 

¿A que parece ahora nuestro dashboard SonarQube?
Hemos examinado en el post anterior las métricas de tamaño y no dimos cuenta que el número medio de líneas de código por objeto (procedimiento, función, trigger, etc. ) no estaba mal.
Con el nuevo widget File Bubble Chart, descubrimos más de 58.000 líneas de código en un único archivo ‘CreatePackageBody.sql’, con toda la lógica de negocio implementada en la base de datos, lo que sin duda resultará en un coste de mantenimiento alto para esta aplicación.

Complejidad y duplicación

Complejidad


PLSQL_Complexity Si echamos un ojos a la Complejidad Ciclomática (CC), encontramos resultados similares: la complejidad promedio por objeto es relativamente baja con 6.9 puntos de CC, y un máximo de 12 puntos. Pero la complejidad por archivo supera los 600 puntos, y tenemos un total de poco más de 10.000 puntos de CC en toda la aplicación, lo cual no es muy alto.
PLSQ_CCglobale

El esfuerzo de test para esta aplicación no es muy importante. Recordemos que la Complejidad Ciclomática es una medida de la cantidad de diferentes ‘caminos’ en una aplicación. Lo ideal sería hacer pruebas de todos los caminos, por lo que la CC nos da una idea del esfuerzo de pruebas.

Se considera que a partir de 20 000 puntos para una aplicación, es necesario realizar un control de calidad (QA) específico, definir y realizar casos de test y si es posible, automatizar las pruebas. En nuestro caso, podemos dejar el equipo del proyecto realizar estas pruebas de forma interna.
Pero como se puede ver con el siguiente Treemap que he configurado para mostrar la Complejidad Ciclomática …

PLSQL_CCBig
Nuestro fichero ‘CreatePackageBody.sql’ representa 90% de la complejidad y por lo tanto, de la lógica de la aplicación. Así que una vez más, tenemos cifras correctas a nivel de aplicación excepto que la casi toda la aplicación se encuentra en un solo archivo.

Duplicaciones

PLSQL_DuplicationsDespués de la complejidad, voy a interesarme en el nivel de duplicación, bastante alto. Sin sorpresa, el mismo archivo monstruoso que implementa la lógica de negocio se encuentra de nuevo en primera fila.
PLSQL_DuplicHotspot
Sin embargo, nos encontramos con un gran número de Copiado/Pegado en los otros archivos, especialmente en el fichero ‘Create_tables.sql’. Este script se encarga de crear las tablas de la base de datos, lo que significa que se duplican muchas estructuras de datos.
Eso puede indicar que el modelo de datos no está optimizado. Esto sucede por una aplicación de tipo Legacy, porque es más fácil agregar nuevas tablas que hacer evolucionar las existentes. Pero más tablas significa más enlaces, y por consiguiente un rendimiento inferior y más complejidad para mantener estas estructuras de datos.
En el contexto de una auditoría real de la calidad de esta aplicación, yo tomaría el tiempo para investigar este fichero y investigar esta hipótesis y encontrar algunos ejemplos que pueden apoyar un refactoring del ‘data model’.
Por ejemplo, hay 687 sentencias ‘CREATE TABLE’ en este archivo, y entonces 687 tablas en total (sin contar las ‘views’). 8 963 líneas duplicadas en este script significa un promedio de 13 líneas, pues 13 campos similares en cada tabla. Tiene sentido tener algunos campos ‘claves’ para llevar a cabo los ‘join’, pero tal vez no tantos.

Componentes con riesgo

Después de ver los indicadores cuantitativos, ya tenemos una gran cantidad de información con respecto a esta aplicación, sin duda más que por lo general conocen los responsables del proyecto, por no hablar de los stakeholders y los responsables de TI.
La segunda parte de una evaluación de la calidad consiste en identificar las principales amenazas, y esto requiere buscar los componentes de mayor riesgo. Hemos visto en los artículos anteriores:
  • 16 bloqueadores en la regla ‘Use IS NULL and IS NOT NULL instead of direct NULL comparisons’, y además duplicados varias veces: es probable que alguien en el equipo necesita refescarse la memoria acerca de esta regla.
  • 2 ‘Calling COMMIT or ROLLBACK from within a trigger will lead to an ORA-04092 exception’. Y 1 ‘Do not declare a variable more than once in a given scope (PLS-00371)’: errores por falta de atención probablemente, la perfección no es de este mundo. En todos los casos, a corregir urgentamente por el riesgo que estos defectos representan para los usuarios.
He promocionado unas reglas règles Major a la categoria Critical, y entonces ahora tenemos:
  • 320 ‘Sensitive SYS owned functions should not be used’, incluyendo 270 en nuestro fiechero ‘CreatePackageBody.sql’: esto es el problema con el Copy / Paste, se duplican defectos críticos para la seguridad de las aplicaciones.
  • Una serie de nuevos defectos para las reglas principales que hemos puesto en esta categoría Critical.
PLSQL_Criticals2
La mayoría de estas reglas impactan el rendimiento o la fiabilidad de la aplicación, y por lo tanto representan un riesgo para el usuario final.

Entonces se recomienda corregir estos componentes riesgosos, sobre todo si la satisfacción de los usuarios es un objetivo importante para nuestro departamento de TI. 

La evaluación de la calidad de una aplicación no es sólo el análisis de código: eso, cualquiera puede hacerlo. El trabajo del consultor se basa en las siguientes preguntas: qué, por qué, cómo, cuánto.
  • Qué: analizar los resultados. El tamaño, la complejidad y la duplicación de código, esto es lo que hemos visto en los articulos anteriores. Se examinan las cifras globales, el promedio, así como las tendencias en el tiempo, si hay varias versiones. Luego nos fijamos en las principales violaciónes de buenas prácticas, principalmente los Blockers y Criticals.
  • ¿Por qué estos resultados?: investigamos las causas de los datos en el cuadro de mando SonarQube, el origen de los resultados encontrados.
  • ¿Cómo remediar?: proponer un plan de acción. De hecho, varias propuestas de acción. Más adelante veremos que pensamos en diferentes planes en el corto, mediano y largo plazo.
  • ¿Cuánto cuesta?: evaluar el coste de cada plan.
Por ejemplo:
  • Qué: encontramos un defecto crítico para la seguridad.
  • Por qué: es probable que al menos una persona en el equipo de proyecto no conoce esta regla. O esta buena práctica se conoce, pero siempre es posible un error por falta de atención.
  • Cómo: la remediación puede consistir en una simple corrección del defecto en el código o una capacitación en estas buenas prácticas.
  • Cómo : aquí es donde el plugin SQALE será útil.
No voy a explicar en detalle el método SQUALE y el plugin SQALE de SonarQube. Tal vez tendremos la oportunidad de hacerlo en un futuro post, pero ya hay suficiente información sobre el tema. Le aconsejo ver estos enlaces:

Para nuestros cálculos, consideramos que el equipo del proyecto para mantener este código SQL se compone de 3 personas. En general , una aplicación de tipo Legacy no cambia con mucha frecuencia, por lo que consideramos que el equipo produce cuatro versiones por año.
Recordemos que un año-hombre es igual a 52 semanas, menos las vacaciones y otras fiestas (u otro tipo de ausencias. por enfermedad por exjempo), o 45 semanas o 225 días (en Francia). Esta cifra puede variar entre país, pero no tanto.

La deuda técnica en PL/SQL

Plan de corto plazo – Quitar las amenazas

El más importante y prioritario es eliminar todo lo que constituye una amenaza para el usuario final, lo más rápido y lo más ante posible. Este es el nivel mínimo, esencial, en corto plazo entonces.
Hemos centrado nuestro Perfil de Calidad en violaciónes de seguridad, robustez y rendimiento, que tienen impacto con el usuario. Obviamente los bloqueadores y defectos criticos son las amenazas más graves.
El plugin SQALE nos permite comprobar el coste de remediación para ellos: unos 113 días.
BlockersCriticals
El plan a corto plazo será un proyecto de refactorización de 6 meses/hombre, o sea dos meses para las 3 personas de nuestro equipo de proyecto.
Cuándo: tan pronto como sea posible, para la próxima versión dentro de 3 meses. Es perfectamente aceptable presentar a los stakeholders el plan de posponer las evoluciones no esenciales en la versión siguiente, para que el equipo de proyecto pueda realizar los dos meses de refactorización primero, y luego trabajar el último mes en las mayores funcionalidades. Si son demasiadas, es posible jugar con el tiempo, desplazando la próxima versión en 4 meses. O hacer una versión ‘refactorizada’ en 2 meses, y la siguiente en 4 meses.
Beneficios: una aplicación más segura, más robusta y eficiente, gracias a la eliminación de las amenazas más urgentes y más graves.

Plan de mediano plazo – Alinear TI con los objetivos de deuda técnicas

Nunca debemos olvidar que la estrategia de TI, y entonces la gestión del portafolio de aplicaciones, siempre se alinea con la estrategia de negocio. Un mercado puede ser:
  • Maduro, con una estrategia de preservación de la cuota de mercado y de los márgenes financieros, por lo que el cumplimiento de los presupuestos y los costes serán un objetivo esencial de la estrategia de TI. Para el equipo del proyecto, esto significa centrarse en la mantenibilidad y la capacidad de evolución de la aplicación. No deje que se deriva la deuda técnica para estos dos factores.
  • Nuevo, con una estrategia de ganancias de cuotas de mercado, time-to-market de las aplicaciones, robustez y rendimiemto: esta es la orientación que hemos dado a nuestro perfil de calidad y el análisis de la calidad de la aplicación.
Por consiguiente, nuestro plan de mediano plazo tendrá como objetivo corregir todos los defectos que afectan a la seguridad, el rendimiento y la fiabilidad, y no sólo a los Blockers y Criticals. La pirámide SQALE nos permite calcular el coste de este plan de mediano plazo:
TechDebPyramid
Un total de 395,6 días. Con 3 personas, esto es un trabajo de 7 meses completos. Difícil de parar el proyecto durante más de la mitad del año.
Sin embargo , estos 395 días incluyen los 113 del plan a corto plazo, por lo que es en realidad un periodo adicional de 282 días, o 15 meses de una persona o cinco meses para cada una de las tres personas del equipo de el proyecto. Podemos pensar en varias sugerencias:
  • Limitar el número de nuevas funcionalidades en las próximas cinco versiones para liberar un mes en cada versión para cada miembro del equipo y que se concentren en estas remediaciones. Es posible si esta aplicación ya no evoluciona demasiado y si los usuarios requieren mejoras en la fiabilidad y el rendimiento.
  • Si muchas nuevas características son críticas y que la carga de cambio no se puede reducir, entonces los stakeholders deben estar dispuestos a pagar para agregar una cuarta persona en el equipo del proyecto, que se centrará exclusivamente en la corrección de estos defectos en las 5 próximas entregas.
Como se puede ver, este plan es en el horizonte de los próximos 18 meses, incluyendo el plan a corto plazo, pero es posible presentar diferentes hipótesis, más aceptables para las partes interesadas y para un Director de TI preocupado con su presupuesto. Una vez más, el plugin SQALE permite que vayamos a lo esencial.
En el siguiente SQALE Sunburst, podemos ver que, en términos de rendimiento (eficiencia ), se necesitan 104 días para corregir violaciónes de una regla relativa a los tipos de datos.
PLSQLSunburst
Creo que es en la versión Oracle 11g que un nuevo tipo de datos ha mejorado hasta en un 50% el rendimiento de algunos procedimientos almacenados. Si el tiempo de respuesta de la aplicación no es un problema importante para los usuarios, entonces podemos retrasar la remediación de esta regla Major a más largo plazo y ganar 104 días o 21 semanas, alrededor de 7 semanas por cada miembro del equipo de proyecto. Por supuesto, la idea no es de reducir el plan de mediano plazo a corto plazo, sino concentrarse en lo esencial, con la ayuda de este gráfico donde se muestra la distribución de la deuda técnica sobre diferentes tipos de riesgos para la aplicación.

Plan a largo plazo – Alinear la deuda técnica con la estrategia de aplicación

El plan a largo plazo debe tratar de una pregunta obvia : ¿qué hacer con este componente monstruoso que integra toda la lógica de negocio de la aplicación? El plugin SQALE calcula que la deuda técnica para este componente es 1 431,9 días, el 75 % de la deuda técnica total para la aplicación (más de 6 años).
PLSQLSqaleHighest
De hecho , la pregunta es ¿qué hacer con esta aplicación? Todo depende del nivel de criticidad.
Si una aplicación con una deuda técnica muy alta no es crítica, la solución es simple: abandonala. Sigue a costar más mantenerla que sustituirla, ya sea por un software o por una aplicación desarrollada en una nueva tecnología más reciente. Debido a que la aplicación no es crítica, no es esencial mantener el control o el conocimiento, por lo que podemos, o bien externalizar este desarrollo a una empresa de outsourcing, o realizar un RPF para poner en competición editores de software e integradores. En todos los casos, el partner seleccionado mantendrá la solución, normalmente con menor coste, pero con la complejidad añadida de gestionar un proveedor externo.
Si la aplicación es crítica, entonces necesitarás manejar el problema por tí mismo, ya que no quieres dejar a un tercero la gestión del riesgo de negocio que esta aplicación puede representar para la empresa. Hay entonces dos posibilidades: una refactorización de la aplicación o una reescritura completa.
En este caso, corregir todos los defectos encontrados en este componente monstruoso y dejarlo tal como es, eso no tiene mucho sentido. La refactorización debe centrarse con prioridad en un nuevo diseño de la aplicación, que en realidad promueve la solución de reescribirla con una nueva tecnología.
Hemos visto que esta base de datos contiene 687 tablas, sin contar las vistas, pero con una importante duplicación de estructuras de datos. Mi recomendación para un plan a largo plazo será la siguiente:
  • Llevar a cabo una retro-documentación para enumerar los diferentes componentes presentes en esta aplicación y los enlaces entre ellos.
  •  Para llevar a cabo un rediseño conceptual y una mapa de los objetos funcionales, inicialmente en el mismo perímetro, luego tomando en cuenta los cambios funcionales deseados por los usuarios.
Es posible subcontratar este trabajo a un proveedor de servicios, sobre todo si el equipo de proyecto actual ha experimentado un turnover importante durante la vida de esta aplicación y ha perdido un poco el conocimiento de ella.
Sin embargo, este proveedor debe estar equipado con herramienta para automatizar esta retro-documentación: 150.000 líneas de código y de comentarios no es enorme, pero este trabajo no puede ser manual. Se necesita una herramienta que permite rastrear todos componentes y sus relaciones en una cartografía de la aplicación.

Pues esto es estupendo: SonarSource tiene previsto un proyecto para una herramienta de este tipo. Nuestra aplicación PL/SQL será entonces un buen candidato para una prueba de esta futura producción de SonarSource.


Fuente:
http://qualilogy.com/es/analisis-plsql-con-sonarqube-evaluar-la-calidad-1/

Pagespeed: Análisis de performance automático del lado del cliente (desktop y mobile)

0 comentarios
 La performance de las aplicaciones la solemos atacar del lado del servidor, ahí seguramente es donde estén las cosas más importantes a mejorar, los cuellos de botella que marquen la diferencia. De todos modos, existen muchas optimizaciones que podemos hacer considerando el lado del cliente.

Una herramienta muy útil para lograr esta tarea es PageSpeed de Google (existen varias alternativas, como YSlow! de Yahoo! y otras, pero por un tema de practicidad, y otras ventajas que ofrece, terminamos utilizando esta siempre).

Se puede usar como una browser extension del Chrome o directamente en la web. Básicamente se accede a la web a probar, o se ingresa la URL de la misma, y la herramienta hace el análisis mostrando una serie de sugerencias basadas en un conjunto de "best-practices".

Brinda información útil para optimizaciones en performance de aplicaciones web del lado del cliente.

  • Web desktop
  • Mobile (esto es algo bastante nuevo)

Otro aspecto a destacar es que es independiente del tiempo de red o del servidor, basa su análisis exclusivamente en aspectos de desempeño del lado del cliente.
Aquí lo ideal sería hacer el análisis para las páginas más usadas del sitio, para que apuntemos a implementar las mejoras que más impacto tendrán.

Principales reglas o best-practices (aquí para más detalles):

Speed Rules

Usability Rules


Como se puede observar, hay reglas que enfocan el uso de caché, los redirects, comprimir los mensajes, definición y uso de CSS y JavaScripts, etc. Para mobile tiene algunos análisis extra especiales, y algunos relacionados con la usabilidad.

El reporte final será una lista de resultados en base a cada una de estas reglas, y para su interpretación se muestran símbolos de esta forma:


Los escenarios que están marcados en rojo, son los de mayor prioridad. Estas sugerencias representan las que van a dar mayor ganancia en materia de performance a la hora de aplicarlas y además, se sugiere que sean las que se atiendan primero.

Los escenarios que están en amarillo, son los que presentan problemas de prioridad media. Estas sugerencias generalmente representan ganancias no muy altas, o que llevan demasiado trabajo implementarlas y se sugieren atenderlas después de atender las de mayor prioridad.

Los escenarios que están en verde son los que están trabajando de manera adecuada.

A modo de ejemplo, les dejo dos capturas que corresponden a analizar el propio sitio de Google.



No solo da la lista de "findings" o llamémosle "oportunidades de mejora", sino que también da indicaciones de cómo se implementan esas mejoras, dando enlaces para ver dónde sacar más información sobre cada punto.

Sin embargo, no es conveniente considerar esta tool como la respuesta definitiva al testing de performance. Esto sólo considera el lado del cliente, para el lado del servidor existe toda una metodología que venimos mencionando siempre, para lo cual les recomendamos lean lo que ya les hemos contado por ejemplo:



Por otro lado, las sugerencias no deben tomarse siempre al pie de la letra. La herramienta contiene una serie de reglas que no a todos los sitios web le van a servir de la misma manera, incluso, tener el 100% de los test en verde no significa que la página funcione de la forma que deseamos (y al revés, que no te den todas las pruebas en verde no significan que la página funcione mal).

Por lo tanto, se recomienda que se utilice esta tool como una forma de analizar el desempeño de un sitio, siempre y cuando se tenga presente que más allá de los resultados del análisis, el desarrollador es el que sabe bien cómo debe comportarse el sitio y cómo podría tener en cuenta las sugerencias, considerando el costo de implementarlas y el beneficio a obtener.

Fuente: http://blog.abstracta.com.uy/2014/05/pagespeed-analisis-de-performance.html

SoapUI

0 comentarios

SoapUI es una herramienta de Software Libre gráfica, está basada en Java y sirve para el testeo de Web Service y generación de Clientes De Web Service.
SoapUI permite testear web services de forma facil, ver los resultados. Además, permite facilitar el uso de herramientas comunes para la generación de clientes, como Axis.
Trabajando con web services, y sin interfase gráfica en la aplicación, esta herramienta nos permite automatizar fácilmente las pruebas funcionales y así asegurar la calidad en nuestros proyectos.
Las pruebas funcionales de los web services podrían usarse para más de un propósito:
  • Pruebas unitarias: para validar que cada operación de los servicios funciona como se definió.
  • Prueba de aceptación: para validar que el servicio retorna resultados aceptables según los requerimientos.
  • Pruebas de proceso: para validar que una sucesión de invocaciones del servicio cumple con el proceso de negocio definido.
  • Pruebas de manejo de datos: para validar el comportamiento con las entradas de datos externos al sistema (bases de datos, otros sistemas, uso de otros web services).
  • Pruebas de regresión: para validar el comportamiento post cambios.

Contenido

 [ocultar]

Un paso a paso

1. Tener instalada la última versión bajada de la Web oficial de SoapUI.
2. Crear un nuevo proyecto SoapUI para el proyecto a probar. Donde configurar la url que contiene el WSDL del proyecto.
Creacion de un proyecto
3. Por cada operacion del servicio a probar, crear una peticion. Cada peticion requiere el ingreso de valores para los parámetros definidos. Agregar valores en el XML que nos propone el wizard de la herramienta.
Agregar Peticion
Editar Parametros Peticion
4. El proyecto se persiste en un script XML, que podemos resguardar en el repositorio en el que tengamos el código fuente del proyecto. Y así todo el equipo podrá hacer crecer la prueba funcional automática del proyecto, y de un modo ágil.
5. Con los pasos dados hasta acá, logramos obtener una prueba funcional del proyecto y su documentación.
6. Esta herramienta maneja el concepto de TestSuite, TestCase, TestStep, como lo manejan JUnitJMeter, etc. Un TestSuite sirve para contener un número arbitrario de casos de prueba (TestCases) que pueden ejecutarse secuencialmente o en paralelo. Los TestSteps sirven para ejecutar TestCases secuencialmente. Una vez creadas las peticiones, es posible generar una TestSuite y así automatizar las pruebas funcionales, con el valor agregado de tener pruebas de regresión.
Agregar Peticion a un Caso de Prueba
7. Por cada TestCase es posible hacer validaciones automáticas de los resultados. Entonces, por cada petición, verificar si la respuesta es un fault, o no lo es, o contiene determinado valor, o no lo contiene. Es una buena práctica, en el manejo de web services, que los errores inesperado del sistema (Runtime Exception) viajen en un tag “fault”. Distinto a una respuesta normal del servicio.
Agregar una asercion a la respuesta de una peticion
Tipos de Aserciones
Agregar una asercion de contenido
8. Con las peticiones agregadas a los casos de prueba, se puede realizar una ejecución masiva utilizando la opción Launch TestRunner.
Configurar y Ejecutar Casos de Prueba
Mientras se ejecutan los casos de prueba, se pueden visualizar los pasos de ejecución y un resumen global. En el directorio físico configurado, se genera un archivo por cada caso de prueba con la nomenclatura conteniendo el TestSuite que lo ejecutó, el nombre del caso de prueba, y el resultado de la prueba.

Derechos reservados

Transferencia de datos entre peticiones

En un TestSuite podemos tener un TestCase con Steps, donde cada Step puede ser un request de una operación diferente del web service. Y el valor devuelto en un Step puede ser el valor de entrada en el próximo Step. Más en el tutorial de soapUI
Transferencia de datos entre peticiones

Conclusión

  • Es fácil y rápido crear, ejecutar y guardar los casos de prueba funcional que quieras. Se pueden adaptar y expandir en cualquier momento.
  • Es fácil hacer aserciones. También con expresiones regulares.

Algo más

  • Se puede agregar MockService cuando el web service todavía no está listo.
  • Load Tests permite medir performance sobre los tests funcionales creados.
  • Esta nota está basada en una guia y en un video de la página oficial de SoapUI.

Ver también

Powered by Bad Robot
Helped by Blackubay