Análisis estático de programas .NET.

En esta tesis presentamos el diseño e implementación de una amplia gama de análisis estáticos para la plataforma .NET, con foco en la escalabilidad. Nos concentramos en .NET dada su gran popularidad en la industria y el amplio conjunto de características que provee, pertenecientes a los paradigmas o...

Descripción completa

Guardado en:
Detalles Bibliográficos
Autor principal: Zoppi, Edgardo Julio
Otros Autores: Garbervetsky, Diego David
Formato: Tesis doctoral publishedVersion
Lenguaje:Inglés
Publicado: Universidad de Buenos Aires. Facultad de Ciencias Exactas y Naturales 2019
Materias:
Acceso en línea:https://hdl.handle.net/20.500.12110/tesis_n6970_Zoppi
Aporte de:
id tesis:tesis_n6970_Zoppi
record_format dspace
institution Universidad de Buenos Aires
institution_str I-28
repository_str R-134
collection Biblioteca Digital - Facultad de Ciencias Exactas y Naturales (UBA)
language Inglés
orig_language_str_mv eng
topic ANALISIS
PROGRAMA
ESTATICO
DISTRIBUIDO
INCREMENTAL
CALL GRAPH
.NET
FRAMEWORK
BYTECODE
CODIGO DE TRES DIRECCIONES
CONTROL-FLOW
DATA-FLOW
NUBE
BIG DATA
ANALYSIS
PROGRAM
STATIC
DISTRIBUTED
INCREMENTAL
CALL GRAPH
.NET
FRAMEWORK
BYTECODE
THREE-ADDRESS CODE
CONTROL-FLOW
DATA-FLOW
CLOUD
BIGDATA
spellingShingle ANALISIS
PROGRAMA
ESTATICO
DISTRIBUIDO
INCREMENTAL
CALL GRAPH
.NET
FRAMEWORK
BYTECODE
CODIGO DE TRES DIRECCIONES
CONTROL-FLOW
DATA-FLOW
NUBE
BIG DATA
ANALYSIS
PROGRAM
STATIC
DISTRIBUTED
INCREMENTAL
CALL GRAPH
.NET
FRAMEWORK
BYTECODE
THREE-ADDRESS CODE
CONTROL-FLOW
DATA-FLOW
CLOUD
BIGDATA
Zoppi, Edgardo Julio
Análisis estático de programas .NET.
topic_facet ANALISIS
PROGRAMA
ESTATICO
DISTRIBUIDO
INCREMENTAL
CALL GRAPH
.NET
FRAMEWORK
BYTECODE
CODIGO DE TRES DIRECCIONES
CONTROL-FLOW
DATA-FLOW
NUBE
BIG DATA
ANALYSIS
PROGRAM
STATIC
DISTRIBUTED
INCREMENTAL
CALL GRAPH
.NET
FRAMEWORK
BYTECODE
THREE-ADDRESS CODE
CONTROL-FLOW
DATA-FLOW
CLOUD
BIGDATA
description En esta tesis presentamos el diseño e implementación de una amplia gama de análisis estáticos para la plataforma .NET, con foco en la escalabilidad. Nos concentramos en .NET dada su gran popularidad en la industria y el amplio conjunto de características que provee, pertenecientes a los paradigmas orientado a objetos y funcional, incluyendo programación concurrente y la manipulación de bajo nivel de punteros. La combinación de todas estas características hacen del análisis estático un desafío. Por un lado, presentamos un framework de análisis estático distribuido de programa completo, diseñado para escalar con el tamaño de la entrada. Nuestro enfoque está basado en el modelo de programación con actores para ser ejecutado en la nube. Nuestra decisión de utilizar una red de computadoras en la nube provee un grado de elasticidad para recursos de CPU, memoria y almacenamiento. Para demostrar el potencial de nuestra técnica, mostramos cómo puede ser implementado un análisis de call graph típico en una configuración distribuida. Además, extendemos nuestro análisis para soportar actualizaciones incrementales del código fuente y mostramos cómo los resultados computados previamente pueden ser actualizados sin tener que volver a calcularlos de cero. Por otro lado, presentamos un framework de análisis estático de programas y herramientas específicamente diseñado para la plataforma .NET. Este framework provee muchas funcionalidades, incluyendo algunas representaciones intermedias como el código de tres direcciones, adecuado para la implementación de un análisis estático, así como también provee una amplia gama de análisis y transformaciones como son la inferencia de tipos, los análisis de control-flow y data-flow, y la construcción de call graph y points-to graph, entre otros. No sabemos de ningún otro framework de análisis estático de código públicamente disponible para la comunidad .NET que provea este tipo de funcionalidades. Para demostrar las capacidades de nuestro framework, presentamos también algunas aplicaciones cliente que aprovechan sus funcionalidades, como un análisis de optimización de consultas Big Data para detectar automáticamente columnas no utilizadas y dependencias entre tablas de entrada y salida de operadores definidos por el usuario desarrollados en algún lenguaje de la plataforma .NET como C#.
author2 Garbervetsky, Diego David
author_facet Garbervetsky, Diego David
Zoppi, Edgardo Julio
format Tesis doctoral
Tesis doctoral
publishedVersion
author Zoppi, Edgardo Julio
author_sort Zoppi, Edgardo Julio
title Análisis estático de programas .NET.
title_short Análisis estático de programas .NET.
title_full Análisis estático de programas .NET.
title_fullStr Análisis estático de programas .NET.
title_full_unstemmed Análisis estático de programas .NET.
title_sort análisis estático de programas .net.
publisher Universidad de Buenos Aires. Facultad de Ciencias Exactas y Naturales
publishDate 2019
url https://hdl.handle.net/20.500.12110/tesis_n6970_Zoppi
work_keys_str_mv AT zoppiedgardojulio analisisestaticodeprogramasnet
AT zoppiedgardojulio staticanalysisofnetprograms
_version_ 1782022475589091328
spelling tesis:tesis_n6970_Zoppi2023-10-02T20:23:53Z Análisis estático de programas .NET. Static analysis of .NET programs. Zoppi, Edgardo Julio Garbervetsky, Diego David ANALISIS PROGRAMA ESTATICO DISTRIBUIDO INCREMENTAL CALL GRAPH .NET FRAMEWORK BYTECODE CODIGO DE TRES DIRECCIONES CONTROL-FLOW DATA-FLOW NUBE BIG DATA ANALYSIS PROGRAM STATIC DISTRIBUTED INCREMENTAL CALL GRAPH .NET FRAMEWORK BYTECODE THREE-ADDRESS CODE CONTROL-FLOW DATA-FLOW CLOUD BIGDATA En esta tesis presentamos el diseño e implementación de una amplia gama de análisis estáticos para la plataforma .NET, con foco en la escalabilidad. Nos concentramos en .NET dada su gran popularidad en la industria y el amplio conjunto de características que provee, pertenecientes a los paradigmas orientado a objetos y funcional, incluyendo programación concurrente y la manipulación de bajo nivel de punteros. La combinación de todas estas características hacen del análisis estático un desafío. Por un lado, presentamos un framework de análisis estático distribuido de programa completo, diseñado para escalar con el tamaño de la entrada. Nuestro enfoque está basado en el modelo de programación con actores para ser ejecutado en la nube. Nuestra decisión de utilizar una red de computadoras en la nube provee un grado de elasticidad para recursos de CPU, memoria y almacenamiento. Para demostrar el potencial de nuestra técnica, mostramos cómo puede ser implementado un análisis de call graph típico en una configuración distribuida. Además, extendemos nuestro análisis para soportar actualizaciones incrementales del código fuente y mostramos cómo los resultados computados previamente pueden ser actualizados sin tener que volver a calcularlos de cero. Por otro lado, presentamos un framework de análisis estático de programas y herramientas específicamente diseñado para la plataforma .NET. Este framework provee muchas funcionalidades, incluyendo algunas representaciones intermedias como el código de tres direcciones, adecuado para la implementación de un análisis estático, así como también provee una amplia gama de análisis y transformaciones como son la inferencia de tipos, los análisis de control-flow y data-flow, y la construcción de call graph y points-to graph, entre otros. No sabemos de ningún otro framework de análisis estático de código públicamente disponible para la comunidad .NET que provea este tipo de funcionalidades. Para demostrar las capacidades de nuestro framework, presentamos también algunas aplicaciones cliente que aprovechan sus funcionalidades, como un análisis de optimización de consultas Big Data para detectar automáticamente columnas no utilizadas y dependencias entre tablas de entrada y salida de operadores definidos por el usuario desarrollados en algún lenguaje de la plataforma .NET como C#. In this thesis we present the design and implementation of a wide range of static analyses for the .NET platform, with focus in scalability. We target .NET given its popularity in the industry and the rich set of features it provides, ranging from object-oriented to functional paradigms, including concurrent programming and low-level pointer manipulation. The combination of all these features make static analysis very challenging. On the one hand, we present a distributed, whole-program static analysis framework that is designed to scale with the size of the input. Our approach is based on the actor programming model and is deployed in the cloud. Our reliance on a cloud cluster provides a degree of elasticity for CPU, memory and storage resources. To demonstrate the potential of our technique, we show how a typical call graph analysis can be implemented in a distributed setting. In addition, we extend our analysis to support incremental source code updates and show how the previously computed results can be updated without having to recompute them from scratch. On the other hand, we present a static program analysis framework and tools specifically designed for the .NET platform. It provides many features, including a few intermediate code representations such as a three-address code suitable for implementing a static analysis on top of it, and a rich set of analyses and transformations such as type inference, control-flow and data-flow analyses, and call graph and points-to graph construction, among others. We don’t know of any other static analysis framework publicly available to the .NET community providing these kind of features. To demonstrate the capabilities of our framework, we also present a few client applications that take advantage of its features, such as a Big Data query optimization analysis to automatically detect unused columns and dependencies between input and output tables of user-defined operators written in a .NET-based programming language like C#. Fil: Zoppi, Edgardo Julio. Universidad de Buenos Aires. Facultad de Ciencias Exactas y Naturales; Argentina. Universidad de Buenos Aires. Facultad de Ciencias Exactas y Naturales 2019-05-22 info:eu-repo/semantics/doctoralThesis info:ar-repo/semantics/tesis doctoral info:eu-repo/semantics/publishedVersion application/pdf eng info:eu-repo/semantics/openAccess https://creativecommons.org/licenses/by-nc-sa/2.5/ar https://hdl.handle.net/20.500.12110/tesis_n6970_Zoppi