L'anàlisi dinàmica de programes és l'acte d' analitzar programari que implica l'execució d'un programa a diferència de l'anàlisi estàtica de programes, que no l'executa.

L'anàlisi es pot centrar en diferents aspectes del programari, incloent-hi, entre d'altres: el comportament, la cobertura de proves, el rendiment i la seguretat.

Perquè sigui efectiu, el programa de destinació s'ha d'executar amb prou entrades de prova per abordar els rangs de possibles entrades i sortides. Les mesures de prova de programari, com ara la cobertura de codi i eines com ara les proves de mutacions, s'utilitzen per identificar on les proves són inadequades.

Tipus Proves funcionals Les proves funcionals inclouen tècniques de programació relativament comunes com ara les proves unitàries, les proves d'integració i les proves de sistemes.

Cobertura de codi El càlcul de la cobertura del codi de prova identifica el codi que no s'ha provat.

Tot i que aquesta anàlisi identifica codi que no s'ha provat, no determina si el codi provat s'ha provat adequadament. El codi es pot executar fins i tot si les proves no verifiquen realment el comportament correcte.

Insereix un paràgraf

Gcov és el programa de cobertura del codi font de GNU. VB Watch injecta codi d'anàlisi dinàmica als programes de Visual Basic per supervisar la cobertura del codi, la pila de crides, el rastreig d'execució, els objectes instanciats i les variables.

Proves dinàmiques Les proves dinàmiques consisteixen en executar un programa sobre un conjunt de casos de prova.

Detecció d'errors de memòria AddressSanitizer: Detecció d'errors de memòria per a Linux, macOS, Windows i més. Part de LLVM. BoundsChecker: Detecció d'errors de memòria per a aplicacions basades en Windows. Part de Micro Focus DevPartner. Dmalloc : Biblioteca per comprovar l'assignació de memòria i les fuites. Cal recompilar el programari i tots els fitxers han d'incloure el fitxer de capçalera C especial dmalloc.h. Intel Inspector: Depurador d'errors de memòria dinàmica per a aplicacions C, C++ i Fortran que s'executen a Windows i Linux. Purifica: Principalment detecció de corrupció de memòria i detecció de fuites de memòria. Valgrind: Executa programes en un processador virtual i pot detectar errors de memòria (per exemple, mal ús de malloc i free) i condicions de carrera en programes multifil.

Fuzzing El fuzzing és una tècnica de prova que consisteix a executar un programa amb una àmplia varietat d'entrades; sovint, aquestes entrades es generen aleatòriament (almenys en part). Els fuzzers de caixa grisa utilitzen la cobertura de codi per guiar la generació d'entrada.

Execució simbòlica dinàmica L'execució simbòlica dinàmica (també coneguda com a DSE o execució còncola) implica executar un programa de prova sobre una entrada concreta, recollir les restriccions de camí associades a l'execució i utilitzar un solucionador de restriccions (generalment, un solucionador SMT) per generar noves entrades que farien que el programa prengués un camí de flux de control diferent, augmentant així la cobertura del codi del conjunt de proves. L'DSE es pot considerar un tipus de fuzzing (fuzzing "de caixa blanca").

Anàlisi dinàmica del flux de dades L'anàlisi dinàmica del flux de dades rastreja el flux d'informació des de les fonts fins als receptors. Les formes d'anàlisi dinàmica del flux de dades inclouen l'anàlisi dinàmica de taint i fins i tot l'execució simbòlica dinàmica.

Inferència invariant Daikon és una implementació de la detecció dinàmica d'invariants. Daikon executa un programa, observa els valors que calcula el programa i, a continuació, informa de les propietats que eren certes durant les execucions observades i, per tant, probablement són certes en totes les execucions.

Anàlisi de seguretat L'anàlisi dinàmica es pot utilitzar per detectar problemes de seguretat.

IBM Rational AppScan és un conjunt de solucions de seguretat d'aplicacions dirigides a diferents etapes del cicle de vida del desenvolupament. El paquet inclou dos productes principals d'anàlisi dinàmica: IBM Rational AppScan Standard Edition i IBM Rational AppScan Enterprise Edition. A més, el paquet inclou IBM Rational AppScan Source Edition, una eina d'anàlisi estàtica.

Errors de concurrència Parasoft Jtest utilitza la detecció d'errors en temps d'execució per exposar defectes com ara condicions de carrera, excepcions, fuites de recursos i memòria, i vulnerabilitats d'atacs de seguretat. Intel Inspector realitza anàlisis d'errors de memòria i de subprocessament en temps d'execució a Windows. Parasoft Insure++ és una eina d'anàlisi de memòria en temps d'execució i detecció d'errors. El seu component Inuse proporciona una vista gràfica de les assignacions de memòria al llarg del temps, amb una visibilitat específica de l'ús general del heap, les assignacions de blocs, les possibles fuites pendents, etc. Thread Sanitizer de Google és una eina de detecció de la cursa de dades. Instrumenta LLVM IR per capturar accessos a memòria agressius.

Programa tallat a trossos Per a un subconjunt determinat del comportament d'un programa, el "program slicing" consisteix a reduir el programa a la forma mínima que encara produeix el comportament seleccionat. El programa reduït s'anomena "porció" i és una representació fidel del programa original dins del domini del subconjunt de comportament especificat. Generalment, trobar una porció és un problema irresoluble, però especificant el subconjunt de comportament objectiu basant-se en els valors d'un conjunt de variables, és possible obtenir porcions aproximades mitjançant un algorisme de flux de dades. Aquests segments solen ser utilitzats pels desenvolupadors durant la depuració per localitzar l'origen dels errors.

Anàlisi del rendiment La majoria d'eines d'anàlisi de rendiment utilitzen tècniques d'anàlisi dinàmica de programes.

Tècniques La majoria de les anàlisis dinàmiques impliquen instrumentació o transformació.

Com que la instrumentació pot afectar el rendiment en temps d'execució, la interpretació dels resultats de les proves ha de tenir-ho en compte per evitar identificar erròniament un problema de rendiment.

Exemples DynInst és una biblioteca d'aplicació de codi en temps d'execució útil per desenvolupar sondes d'anàlisi dinàmica de programes i aplicar-les a executables compilats. Dyninst no requereix codi font ni recompilació en general; tanmateix, els executables sense codi despullat i els executables amb símbols de depuració són més fàcils d'instrumentar.

Iroh.js és una biblioteca d'anàlisi de codi en temps d'execució per a JavaScript. Fa un seguiment de la ruta d'execució del codi, proporciona escoltes en temps d'execució per detectar patrons específics de codi executat i permet la intercepció i manipulació del comportament d'execució del programa.

Referències

Categoria:Programari Categoria:Llenguatges de programació