C贸mo Facebook Project Infer ayuda a encontrar errores en las aplicaciones m贸viles antes de la implementaci贸n



Hace unos d铆as, el equipo de ingenier铆a de Facebook se destac贸: recibi贸 el Premio POPL Paper m谩s influyente . Entre los especialistas en aprendizaje autom谩tico, esto es muy honorable. El premio fue presentado por el trabajo de An谩lisis de forma compositiva por medios de bi-abducci贸n , que revela los matices del Proyecto Infer. El proyecto en s铆 est谩 dise帽ado para detectar y eliminar errores en el c贸digo de una aplicaci贸n m贸vil antes de su implementaci贸n.

Los errores en el software para dispositivos m贸viles son muy caros tanto para los desarrolladores como para los usuarios. En cuanto al primero, la detecci贸n de un problema en una aplicaci贸n que ya est谩 en directorios es una pesadilla para cualquier especialista. Por supuesto, el software se prueba, el trabajo de los programas se verifica de acuerdo con ciertas plantillas. Pero con mayor frecuencia, los desarrolladores no pueden prever todo, y se detectan errores en la aplicaci贸n despu茅s de la implementaci贸n.

Le recordamos: para todos los lectores de "Habr": un descuento de 10.000 rublos al registrarse en cualquier curso de Skillbox con el c贸digo de promoci贸n "Habr".

Skillbox recomienda: El curso en l铆nea de Python Data Analyst .
Project Infer escanea el c贸digo de las aplicaciones m贸viles y le permite encontrar todo tipo de problemas, cuyos patrones se almacenan en la base de datos (y se actualiza todo el tiempo). El proyecto en s铆 fue presentado hace tres a帽os. Casi inmediatamente despu茅s del anuncio, Facebook abri贸 el c贸digo, despu茅s de lo cual comenz贸 a usarse en empresas como Amazon Web Services, Spotify y Uber.

Como funciona


Project Infer utiliza un conjunto especializado de algoritmos para analizar el funcionamiento del c贸digo. Puede haber millones de combinaciones en el c贸digo fuente de cualquier aplicaci贸n grande que pueda conducir a errores. Los procedimientos tradicionales de an谩lisis de c贸digo no pueden ayudar a detectar todo. Inferir desde Facebook, el autoaprendizaje, est谩 expandiendo su base, por lo que el proyecto le permite detectar muchos problemas en el c贸digo.

En un sentido general, el proceso de Inferencia de Facebook se puede dividir en dos etapas: recopilaci贸n y an谩lisis de datos. El ciclo de vida tambi茅n se divide en dos partes: global y diferencial.

En la fase de recopilaci贸n de datos, Infer traduce el c贸digo fuente a su propio idioma. La fase de an谩lisis se dedica al estudio de los detalles m谩s peque帽os de la estructura del c贸digo, lo que puede conducir a la aparici贸n de un error. Si Infer encuentra una combinaci贸n ya familiar de factores identificados como un patr贸n de error, el an谩lisis se detiene para un m茅todo o funci贸n en particular, pero otros m茅todos y funciones contin煤an siendo analizados. Aqu铆 hay un ejemplo de Infer.



Desde el punto de vista de la ejecuci贸n, Infer puede trabajar en dos modalidades: Global y Diferencial, como se mencion贸 anteriormente. En el primer caso, Infer analiza todos los archivos. Para un proyecto que se compila con Gradle, Infer se inicia con el comando

infer run -- gradle build 

El proceso diferencial se utiliza en sistemas de compilaci贸n incrementales espec铆ficos para aplicaciones m贸viles. En este caso, primero debe iniciar la recopilaci贸n de datos de Inferir para obtener todos los comandos de compilaci贸n y luego analizar solo los cambios. Para hacer esto, use el siguiente conjunto de comandos:

 gradle clean infer capture -- gradle build edit some/File.java # make some changes to some/File.java infer run --reactive -- gradle build 

Los informes inferidos se pueden ver con el comando InferTraceBugs.

 infer run -- gradle build inferTraceBugs 

Proyecto Infer Foundation


Infer de Facebook se basa en dos nuevos m茅todos matem谩ticos: l贸gica de separaci贸n y bi-abducci贸n .



Una caracter铆stica clave de la l贸gica de separaci贸n es la posibilidad de razonamiento local. Apareci贸 debido a la presencia en las declaraciones de conectivos espaciales entre las partes del mont贸n. En este caso, no es necesario considerar la cantidad total de memoria en cada etapa.

El elemento principal de la l贸gica de separaci贸n es el operador * (y por separado), que se denomina conexi贸n de divisi贸n. La f贸rmula X鈫 鈭 Y鈫 puede leerse como "X apunta a Y, y por separado Y apunta a X", que es muy similar a c贸mo funcionan los punteros de memoria.

En el contexto de Infer Bi-abduction, puede verse como un m茅todo de inferencia l贸gica que permite a la plataforma detectar propiedades con respecto al comportamiento de partes independientes del c贸digo de la aplicaci贸n. Bi-abduction juntos muestra antiframes (partes faltantes del estado) y marcos (aquellas partes que no se ven afectadas por la operaci贸n). Matem谩ticamente, el problema de la bi-abducci贸n se expresa usando la siguiente sintaxis: A 鈭? Antiframe鈯 鈭? Marco.

En Infer from Facebook, el m茅todo permite derivar las especificaciones previas / posteriores del c贸digo limpio, siempre que conozcamos las especificaciones para primitivas en un nivel b谩sico de c贸digo.

La creaci贸n de FI fue posible gracias al an谩lisis del trabajo de especialistas en aprendizaje autom谩tico, que se llev贸 a cabo durante muchos a帽os. En el curso del trabajo en Infer, se publicaron los siguientes art铆culos clave para todo el campo:


Hasta ahora, Infer solo se puede utilizar para aplicaciones m贸viles. Pero algunos de sus principios se aplican a aplicaciones de prop贸sito general. Quiz谩s en el futuro las posibilidades de Infer se ampl铆en, y con su ayuda los desarrolladores podr谩n analizar aplicaciones de escritorio o de servidor.

Skillbox recomienda:

Source: https://habr.com/ru/post/440536/


All Articles