{"id":1417,"date":"2018-12-13T11:10:00","date_gmt":"2018-12-13T14:10:00","guid":{"rendered":"https:\/\/icc.fcen.uba.ar\/?p=1417"},"modified":"2022-03-29T10:39:40","modified_gmt":"2022-03-29T13:39:40","slug":"desafios-en-el-analisis-estatico-de-software","status":"publish","type":"post","link":"https:\/\/icc.fcen.uba.ar\/en\/desafios-en-el-analisis-estatico-de-software\/","title":{"rendered":"Desaf\u00edos en el an\u00e1lisis est\u00e1tico de software"},"content":{"rendered":"<p><em><strong>En esta nota, se exploran las oportunidades de realizar el an\u00e1lisis est\u00e1tico y autom\u00e1tico de c\u00f3digo en un set de m\u00e1quinas distribuidas en la nube, con la posibilidad de utilizar algoritmos el\u00e1sticos en memoria.<\/strong><\/em><!--more--><\/p>\n<p>Actualmente una actividad muy relevante dentro de la ingenier\u00eda de software es el <b>an\u00e1lisis autom\u00e1tico de programas<\/b>. Estos tipos de an\u00e1lisis permiten que el software que se usa diariamente tenga menos errores y, a su vez, poder ayudar a los desarrolladores de software \u00a0a tener una mejor comprensi\u00f3n del c\u00f3digo de cada programa. A diferencia del an\u00e1lisis din\u00e1mico de software que involucra la ejecuci\u00f3n real del programa, el an\u00e1lisis est\u00e1tico es una suerte de <b>\u201cinspecci\u00f3n de c\u00f3digo\u201d<\/b> que permite simular que el programa se ejecuta con todos los datos posibles.<\/p>\n<p>Este es uno de los problemas en que se enfoca <b>Diego Garbervetsky<\/b>, integrante del Grupo de Fundamentos de la Ingenier\u00eda de Software e investigador del ICC. \u201c<i>Nuestra investigaci\u00f3n apunta a hacer programas que entiendan diferentes propiedades de un programa. Puede ser desde un Bug (error de software), un acceso sin permiso a un recurso, o un acceso a una porci\u00f3n de memoria incorrecta. Incluso aparecen propiedades m\u00e1s sutiles: el programa corre m\u00e1s lento de lo esperado, consume m\u00e1s memoria o aparecen relaciones directas entre los datos de entrada y de salida<\/i>\u201d, puntualiza Garbervetsky.<\/p>\n<p>En la pr\u00e1ctica el investigador se ocupa del an\u00e1lisis est\u00e1tico que se sit\u00faa sobre el c\u00f3digo fuente original y busca entenderlo pero sin necesidad de ejecutar realmente el programa. Se trata de una simulaci\u00f3n abstracta de lo que luego se ejecutar\u00e1 en la realidad en la computadora, la \u201cnube\u201d o el tel\u00e9fono m\u00f3vil.<\/p>\n<p>Una de las bases te\u00f3ricas de los an\u00e1lisis est\u00e1ticos es la idea de Interpretaci\u00f3n Abstracta. Esta da un marco para la ejecuci\u00f3n &#8220;virtual&#8221; del c\u00f3digo donde se simula su ejecuci\u00f3n con datos aproximados (en realidad cada dato representa muchos datos), reduciendo la cantidad de operaciones totales \u00a0que el programa necesita para completar. Como estos an\u00e1lisis logran la exhaustividad para todas las entradas o datos posibles mediante la aproximaci\u00f3n del c\u00f3mputo, es frecuente que en ese proceso aparezcan \u201cfalsos positivos\u201d: errores del programa que en realidad no lo son. Ante la pregunta sobre c\u00f3mo lidiar con este aspecto del an\u00e1lisis, el investigador del ICC aclara, \u201c<i>una posibilidad es ejecutar realmente el programa y ver qu\u00e9 sucede, otra es refinar el an\u00e1lisis en el lugar preciso donde aparece el supuesto error, lo cual es un poco m\u00e1s costoso pero puede eliminar ese dato falso<\/i>\u201d.<\/p>\n<p>Otro de los usos que presenta este tipo de t\u00e9cnicas es que ayudan al entendimiento del programa, como brindar a los desarrolladores de software herramientas para que puedan navegar el c\u00f3digo u obtener visualizaciones de diferentes aspectos de su sem\u00e1ntica, optimizando tiempos y recursos.<\/p>\n<p>En general para poder analizar el programa es necesario dise\u00f1ar un mapa (o grafo) que permita seguir el camino que transita durante la ejecuci\u00f3n, ya que habitualmente en un programa se salta de una funci\u00f3n a otra y se lee no secuencialmente (como si fuera una red de caminos que no sigue un recorrido predefinido). \u201c<i>Calcular ese mapa es complejo y depende del tama\u00f1o del programa, la cantidad de llamadas que tiene y un \u00faltimo factor, que aparece generalmente en la programaci\u00f3n orientada a objetos, es la cantidad de destinos posibles en funci\u00f3n del objeto receptor de un mensaje. Por ejemplo, si en el programa Corel Draw est\u00e1 la funci\u00f3n \u2018figura.dibujar\u2019, esa figura puede ser un cuadrado, c\u00edrculo, tri\u00e1ngulo, etc. Puede haber miles de figuras asociadas a una misma funci\u00f3n, y hay que adivinar en tiempo de an\u00e1lisis a qu\u00e9 figura real se estar\u00eda refiriendo cuando el programa realmente se ejecute. Un an\u00e1lisis aproximado elegir\u00e1 siempre el tipo de figura correcto pero si es aproximado puede elegir algunas adicionales (falsos positivos)<\/i>\u201d, precisa el investigador y doctor en ciencias de la computaci\u00f3n.<\/p>\n<p>La complejidad de esta tarea converge en el an\u00e1lisis de referencias o an\u00e1lisis de punteros, que es uno de los an\u00e1lisis est\u00e1ticos cl\u00e1sicos y sirve de base para muchos otros an\u00e1lisis, ya que ayuda a construir el mapa de la aplicaci\u00f3n. Es por ello que frecuentemente se investiga c\u00f3mo realizar versiones de estas t\u00e9cnicas para que permitan escalar a programas grandes (millones de l\u00edneas de c\u00f3digo) y mantener una precisi\u00f3n razonable. Mantener este equilibrio es dif\u00edcil, porque un an\u00e1lisis preciso suele ser muy costoso, en t\u00e9rminos de tiempo y sobre todo consumo de memoria. Entonces uno tiene que decidir de acuerdo a los recursos que disponibles.<\/p>\n<p>Ahora bien, <b>\u00bfc\u00f3mo ayuda al an\u00e1lisis autom\u00e1tico estar en un entorno Cloud donde se pueda realizar en diferentes computadoras distribuidas en lugar de en una sola computadora?<\/b> Para encarar esta cuesti\u00f3n en profundidad, Garbervetsky viene desarrollando una colaboraci\u00f3n con <b>Microsoft Research<\/b> junto a <b>Edgardo Zoppi<\/b> (Investigador en formaci\u00f3n del ICC), <b>Tom Ball<\/b> (Investigador principal de Microsoft Research) y <b>Benjamin Livshits <\/b>(Profesor Asociado del Imperial College de Londr\u00e9s). Con el prop\u00f3sito de difundir el trabajo ya han publicado el art\u00edculo cient\u00edfico \u201c<a href=\"https:\/\/dl.acm.org\/citation.cfm?id=3106261\">Toward Full Elasticity in Distributed Static Analysis: The case of Callgraph Analysis<\/a>\u201d.<\/p>\n<p>El investigador del ICC explica que el proyecto surgi\u00f3 de un contexto muy favorable. \u201c<i>A diferencia de hace algunos a\u00f1os donde todos los an\u00e1lisis se hac\u00edan en una sola m\u00e1quina y localmente, hoy vemos que muchos de las herramienta para edici\u00f3n de \u00a0de c\u00f3digo son online, permitiendo que la visualizaci\u00f3n se haga en la m\u00e1quina del programador pero la compilaci\u00f3n suceda en otras m\u00e1quinas. Adem\u00e1s la mayor\u00eda de los repositorios de c\u00f3digo open source brindan la posibilidad de compilar proyectos. Encontramos una enorme oportunidad de poder generar un algoritmo distribuido para el an\u00e1lisis en la nube, con muchas m\u00e1quinas conectadas al mismo tiempo y aprovechando recursos libres de c\u00f3mputo a un menor costo<\/i>\u201d, comenta con entusiasmo Garbervetsky.<\/p>\n<p><img decoding=\"async\" class=\"lazyload alignleft wp-image-1419\" src=\"https:\/\/icc.fcen.uba.ar\/wp-content\/uploads\/2018\/12\/DiegoGarbervetskybOK-600x576.jpg\" data-orig-src=\"https:\/\/icc.fcen.uba.ar\/wp-content\/uploads\/2018\/12\/DiegoGarbervetskybOK-600x576.jpg\" alt=\"\" width=\"221\" height=\"212\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27221%27%20height%3D%27212%27%20viewBox%3D%270%200%20221%20212%27%3E%3Crect%20width%3D%27221%27%20height%3D%27212%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/icc.fcen.uba.ar\/wp-content\/uploads\/2018\/12\/DiegoGarbervetskybOK-200x192.jpg 200w, https:\/\/icc.fcen.uba.ar\/wp-content\/uploads\/2018\/12\/DiegoGarbervetskybOK-300x288.jpg 300w, https:\/\/icc.fcen.uba.ar\/wp-content\/uploads\/2018\/12\/DiegoGarbervetskybOK-400x384.jpg 400w, https:\/\/icc.fcen.uba.ar\/wp-content\/uploads\/2018\/12\/DiegoGarbervetskybOK-600x576.jpg 600w, https:\/\/icc.fcen.uba.ar\/wp-content\/uploads\/2018\/12\/DiegoGarbervetskybOK-768x737.jpg 768w, https:\/\/icc.fcen.uba.ar\/wp-content\/uploads\/2018\/12\/DiegoGarbervetskybOK-800x768.jpg 800w, https:\/\/icc.fcen.uba.ar\/wp-content\/uploads\/2018\/12\/DiegoGarbervetskybOK-1024x983.jpg 1024w, https:\/\/icc.fcen.uba.ar\/wp-content\/uploads\/2018\/12\/DiegoGarbervetskybOK-1200x1152.jpg 1200w, https:\/\/icc.fcen.uba.ar\/wp-content\/uploads\/2018\/12\/DiegoGarbervetskybOK.jpg 1203w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 221px) 100vw, 221px\" \/>Poder dise\u00f1ar el an\u00e1lisis para que sea distribuible en la nube fue una ventaja sustancial para los investigadores en cuanto a poder de c\u00f3mputo y memoria disponible. Si bien muchos de los algoritmos actuales est\u00e1n pensados para correr en una sola m\u00e1quina, este algoritmo distribuido deb\u00eda ser completamente el\u00e1stico para dividir el an\u00e1lisis en diferentes m\u00e1quinas. No obstante, a partir de estos avances aparecieron diferentes problemas 1) Aunque se pudo dise\u00f1ar un algoritmo que sea el\u00e1stico en el uso de memoria porque cada vez que se necesitaba m\u00e1s memoria se agregaba una computadora m\u00e1s, a medida que aumenta la necesidad de comunicaci\u00f3n entre m\u00e1quinas llega un punto en que la comunicaci\u00f3n de los procesos genera demasiado <i>overhead<\/i>; 2) Con esa instancia en que no se produce una mejora en velocidad de procesamiento (aunque s\u00ed en memoria), es necesario mover una porci\u00f3n del grafo de proceso a una m\u00e1quina que est\u00e9 m\u00e1s cercana para mejorar la performance \u00a03) Un \u00faltimo desaf\u00edo del trabajo es poder escalar el proceso utilizando un \u201calgoritmo incremental\u201d: si el programa tiene 100 millones de l\u00edneas de c\u00f3digo, se hace un an\u00e1lisis que tenga en cuenta s\u00f3lo la modificaci\u00f3n en cada punto que se propaga del c\u00f3digo (por ej. cambiar la variable figura para que en lugar de apuntar a un c\u00edrculo apunte a un cuadrado). \u201c<i>De ese modo no hace falta repetir el an\u00e1lisis de esos millones de l\u00edneas sino s\u00f3lo de la parte afectada, lo cual ayuda a escalar el proyecto logrando un an\u00e1lisis m\u00e1s r\u00e1pido y eficiente<\/i>\u201d, concluye Garbervetsky.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En esta nota, se exploran las oportunidades de realizar el an\u00e1lisis est\u00e1tico y autom\u00e1tico de c\u00f3digo en un set de m\u00e1quinas distribuidas en la nube, con la posibilidad de utilizar algoritmos el\u00e1sticos en memoria.<\/p>\n","protected":false},"author":3,"featured_media":1418,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[71,12],"tags":[65,34,72,63],"class_list":["post-1417","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-actualidad","category-noticias","tag-bugs","tag-ingenieria-software","tag-programacion","tag-testing"],"_links":{"self":[{"href":"https:\/\/icc.fcen.uba.ar\/en\/wp-json\/wp\/v2\/posts\/1417","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/icc.fcen.uba.ar\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/icc.fcen.uba.ar\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/icc.fcen.uba.ar\/en\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/icc.fcen.uba.ar\/en\/wp-json\/wp\/v2\/comments?post=1417"}],"version-history":[{"count":5,"href":"https:\/\/icc.fcen.uba.ar\/en\/wp-json\/wp\/v2\/posts\/1417\/revisions"}],"predecessor-version":[{"id":2270,"href":"https:\/\/icc.fcen.uba.ar\/en\/wp-json\/wp\/v2\/posts\/1417\/revisions\/2270"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/icc.fcen.uba.ar\/en\/wp-json\/wp\/v2\/media\/1418"}],"wp:attachment":[{"href":"https:\/\/icc.fcen.uba.ar\/en\/wp-json\/wp\/v2\/media?parent=1417"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/icc.fcen.uba.ar\/en\/wp-json\/wp\/v2\/categories?post=1417"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/icc.fcen.uba.ar\/en\/wp-json\/wp\/v2\/tags?post=1417"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}