Técnicas de testeo para detectar fallas en Android

En el área de Ingeniería de Software del ICC existe una línea de trabajo denominada “Testing”, que mediante pruebas planificadas es la primera medida para asegurar un determinado umbral de calidad en el software que se construye.

Cuando un programador “testea” lo que hace es ejercitar un programa para comparar el resultado obtenido contra el resultado que espera.

Actualmente es posible no sólo automatizar la ejecución de los casos de prueba, sino también su creación, logrando cubrir automáticamente gran cantidad de líneas de un programa. “El principal desafío consiste en cómo integrar estos enfoques en los procesos actuales de desarrollo, de forma que estas herramientas sean útiles para incrementar la calidad de los programas y la eficiencia de los programadores”, puntualiza Juan Pablo Galeotti, Investigador del ICC, Doctor en Ciencias de la Computación y Profesor del Departamento de Computación de Exactas-UBA.

El principal desafío consiste en cómo integrar estos enfoques en los procesos actuales de desarrollo, de forma que estas herramientas sean útiles para incrementar la calidad de los programas y la eficiencia de los programadores.

En este contexto, el investigador explica que  junto a Iván Arcuschin (Tesista de Licenciatura del DC) están trabajando en la Generación de casos de test basados en búsquedas (Search based software testing). Con esta técnica pueden aplicar algoritmos de optimización combinatoria al problema de generación automática de casos de test para diferentes programas. “Es como si uno quisiera escalar una colina y al tener sólo una representación del terreno como si fuera un tablero, va probando cada celda vecina para ver por cuál sube y cuál es el camino para llegar más alto. Este procedimiento (al que llamamos Hill Climbing) resulta útil para encontrar una solución local óptima cuando existe un conjunto muy grande de soluciones posibles”, puntualiza Galeotti.

Una iniciativa innovadora con aplicaciones Android

El proyecto “Evolutiz: Multi-objective Test Generation for Testing Evolving Android Applications» tiene como objetivo desarrollar una herramienta de código abierto para probar nuevas aplicaciones de Android, ayudando a los desarrolladores y a empresas de software a identificar rápidamente errores o fallas de funcionalidad. Además, tiene el propósito de crear una base de datos de defectos en las aplicaciones de Android, que esté disponible en forma pública.

Para desarrollar esta herramienta, los investigadores prueban el comportamiento de la app para monitorear si funciona de la forma esperada.  Por ejemplo, que no se cuelgue o que no se interrumpa sorpresivamente. En esta instancia, se simulan las interacciones posibles del usuario con el dispositivo (hacer click, doble click, drag & drop, etc.) y las interacciones del dispositivo con el ambiente (eventos del sistema, señal de que llegó un mensaje importante, señal de baja de batería, señal de que se desconectó de wi-fi, etc.).

Apuntamos a generar algoritmos de búsqueda para generación de casos de Test. En el caso de Android lo probamos de varias maneras: sobre emuladores (una computadora que simula ser un teléfono Android) o sobre dispositivos reales (un dispositivo Android que efectivamente está corriendo la aplicación), detalla Galeotti.

Volviendo a la analogía de las colinas, podemos pensar en una secuencia fija de interacciones con un dispositivo Android como si fuera una celda en el tablero. En este punto, el algoritmo de búsqueda sabe que hay un lugar donde está el error pero a priori no sabe dónde puede estar. Como se cuenta con una cantidad limitada de tiempo y no es posible ver semejante cantidad de posibilidades (equivalente a la cantidad de moléculas que hay en el universo), el investigador cuenta con dos opciones: A) ver una cantidad reducida de posibilidades, traducida en el vecindario o las 8 celdas alrededor de donde se está situado. B) tomar 8 celdas al azar y determinar cuál es la mejor; transitar esa celda, empezar a buscar errores en la aplicación y probar con otras celdas posibles, tomar distintos máximos locales y finalmente optar por la mejor solución.

Cabe recalcar que utilizando la optimización combinatoria se puede maximizar la detección de fallas y maximizar la ejecución de líneas de programa (una característica deseable de un conjunto de casos de prueba). Esto tiene como consecuencia que los casos de test evalúen al menos una vez las líneas de código del programa para chequear que funcionen de la manera esperada.

A mediano plazo el proyecto también se orienta a analizar fallas de seguridad y encontrar problemas de vulnerabilidad que podrían perjudicar al usuario”, complementa el investigador del ICC.

Los investigadores se encuentran en la etapa inicial del proyecto: relevar el Estado del Arte en la temática. “Estamos  estudiando todas las soluciones anteriores, que tienen asociadas muchísimas características, buscando determinar si alguna de las características es dominante frente a la otra, es decir, cómo funciona cada algoritmo con una determinada optimización o sin ella”, concluye Galeotti.

 Técnicas de testeo para detectar fallas en Android_iccPremio Google LARA

Juan Pablo Galeotti e Iván Arcuschin fueron distinguidos con el premio Google Latin American Research Awards (LARA 2017), por su proyecto de detección de fallas en Android, en la categoría «master thesis». Es el único proyecto de Argentina premiado en dicha edición y uno de los 27 que fueron seleccionados entre 281 envíos. Más información: https://noticias.dc.uba.ar/2017/08/24/premio-google-galeotti/

2018-09-20T10:11:09-03:00 18/abril/2018|Noticias|