Está en la página 1de 8

TRACER: una herramienta de ejecución simbólica para la verificación ∗

1, Vijayaraghavan Murali 1, Jorge A. Navas 2, y Andrew E. Santosa 3


Joxan Jaffar

1 Universidad Nacional de Singapur


2 La universidad de melbourne
3 Universidad de sydney

Resumen. Presentamos TRACER, un verificador para las propiedades de seguridad de los programas C secuenciales. Se
basa en la ejecución simbólica ( SE) y sus características únicas están en

cómo hace SE finito en presencia de bucles ilimitados y su uso de interpolantes de caminos inviables para
abordar el explosión de camino problema.

1. Introducción
Recientemente ejecución simbólica SE) [ 15] se ha demostrado con éxito que es una alternativa
a CEGAR para la verificación del programa que ofrece los siguientes beneficios amo ng otros [12,
18]: (1) no explora caminos inviables evitando gastar refinamientos sive, (2) evita
costoso imagen predicada cálculos (por ejemplo, cartesiano y Booleano abstracciones [2]),
y (3) puede recuperarse de demasiado específico abstracciones en oposición a los esquemas de refinamiento monótonos de uso
frecuente. Desafortunadamente, plantea su propio cha llenges: (C1) exponencial
número de rutas y (C2) en rutas de longitud infinita en presencia o f bucles sin límites.
Nosotros presentamos TRAZADOR, un SE- herramienta de verificación basada para estado finito propiedades de seguridad

de programas secuenciales en C. Informalmente TRAZADOR intentos de construir un simbólico finito


árbol de ejecución que se aproxima al conjunto de todos los concretos Te estados alcanzables. Si el
la ubicación del error no se puede alcanzar desde ninguna ruta simbólica se informa el programa
como seguro De lo contrario, el programa puede contener un error o no puede terminar los
características más innovadoras de TRAZADOR provienen de cómo aborda (C1) y (C2).
En este artículo, describimos las ideas principales detrás de TRAZADOR y su implementación como
así como nuestra experiencia en la ejecución de puntos de referencia reales.

1.1 Herramientas de verificación basadas en interpolación de vanguardia

La figura 1 muestra una posible vista de las herramientas de verificación


más fuerte
pereza
CPA YOGI
IMPACTO II actuales basadas en dos dimensiones:
KRATOS
ARMC y fuerza de interpolación . Perezoso significa que el
BLAST HSF /
SATABS
SLAM FSOFT
la herramienta comienza a partir de un modelo abstraído y luego lo refina
TRAZADOR
CHEQUEADOR DE mientras ansioso es su doble, comenzando con el modelo concreto y luego
Más débil
eliminando hechos irrelevantes. CEGAR Las herramientas basadas [1, 4, 7,

Perezoso Ansioso 10, 21] son ​los mejores ejemplos de enfoques vagos mientras
SE- establecido
Figura 1. Verificadores de vanguardia
Las herramientas [12, 18] son ​para métodos entusiastas. Hombres especiales

Se requiere una acción para enfoques híbridos como YOGI [ 20] CONTROLADOR DE CPA [ 3], y
KRATOS [ 5] YOGUI calcula las precondiciones más débiles de la ejecución simbólica de rutas

∗ Este artículo amplía las ideas publicadas en [12, 13] al describir un método
para la informática

precondiciones más débiles como interpolantes, así como una descripción detallada de th e arquitectura de la
herramienta y una nueva evaluación experimental.
como un refinamiento barato para CEGAR Una desventaja es que no puede recuperarse demasiado
refinamientos específicos (ver programa diamante en [18]). CONTROLADOR DE CPA y KRATOS en-
codifique bloques libres de bucles en fórmulas booleanas que luego son su expulsado a un SMT solucionador en

para explotar sus capacidades (de aprendizaje) y evitar redefinir elementos debido a abstracciones más gruesas

a menudo se utilizan en CEGAR Por otro lado, el rendimiento de los verificadores basados ​en interpolación depende
de la fuerza lógica del interpolante. s 1) En enfoques perezosos, un débil
el interpolante puede contener errores espurios y causar refinamiento ts con demasiada frecuencia. Más fuerte en

los terpolantes pueden retrasar la convergencia a un punto fijo. En un ap ansioso Proaches, más débil inter-
los polants pueden ser mejores (p. ej., para fragmentos sin bucle) que s más fuertes ya que permiten
eliminando hechos más irrelevantes del modelo concreto.
TRAZADOR realiza SE cálculo eficiente aproximado precondiciones más débiles como

interpolantes A lo mejor de nuestro conocimiento, TRAZADOR es el primero disponible públicamente ( paella.


d1.comp.nus.edu.sg/tracer) veri fi cador con estas características.

2 cómo TRAZADOR Trabajos

Esencialmente, TRAZADOR implementa ejecución simbólica clásica [15] con algunos nov el
características que describiremos a lo largo de esta sección. Se necesita sy entradas mbólicas en lugar de
datos reales y ejecuta el programa teniendo en cuenta esos symb entradas olicas. Durante el ex
En la ecuación de un camino, todas sus limitaciones se acumulan en un fuego. fórmula de lógica de orden t (FOL)
llamado condición de ruta (PC) . Siempre que el código del formulario Si( C) luego S1 más S2 se alcanza
la ejecución bifurca el estado simbólico actual y actualiza p condiciones atléticas a lo largo de ambos

los caminos: ordenador personal 1 ≡ ordenador personal ∧ C y ordenador personal 2 ≡ ordenador personal ∧¬ C. Luego, verifica
ordenadorsi personal 1 o ordenador personal 2

Es insatisfactorio. Si es así, entonces el camino es inviable y la ejecución detiene el retroceso a


El último punto de elección. De lo contrario, sigue el camino. El ve problema de ri fi cación consiste en
construyendo un finito árbol de ejecución simbólico que sobrepasa todo el concreto e accesible
declara y prueba para cada ruta simbólica la ubicación del error n es inalcanzable.
El primer aspecto clave de TRAZADOR, propuesto originalmente en [13] para ejecución simbólica
es evitar la enumeración completa de caminos simbólicos por aprendizaje de inviable
computación de caminos interpolantes [ 8]. Versiones preliminares de RASTREADOR [ 12, 13] calculado
interpolantes basados ​en postcondiciones más fuertes (sp) . Dadas dos fórmulas UN ( simbólico
camino) y B ( último guardia donde se detecta la inviabilidad) de modo que UN ∧ si es unsat, un
el interpolante fue obtenido por ∃ X · UN dónde X son UN- variables locales (es decir, las variables ocurren-

sonar solo en UN). Sin embargo, a diferencia de CIGARRO, RASTREADOR comienza desde el modelo concreto del programa y luego
elimina hechos irrelevantes. Por lo tanto, la w eaker el interpolante es el
más probable es para TRAZADOR para evitar explorar otras rutas simbólicas "similares". Esta es la motivación detrás de
un método de interpolación basado en precondiciones más débiles (wp) .
Ejemplo 1. La verificación del programa ideado en la Fig. 2 (a) ilust califica la necesidad

para wp, así como la esencia de nuestro enfoque para mitigar la "p problema de "explosión atómica".

La figura 2 (b) muestra el primer camino simbólico explorado por TRAZADOR lo cual es inviable. (*)
significa que la evaluación de la guardia puede ser cierto o falso. Después de renombrar obtenemos
las restricciones insatisfactorias s 0 = 0 0 ∧ s 1 = s 0 + 1 ∧ s 2 = s 1 + 1 ∧ s 2> 10) Estado-
Las técnicas de interpolación más avanzadas anotarán cada l ubicación con su correspondiente

1 Fórmulas dadas UN y si tal que UN ∧ si es insatisfactorio, un Craig interpolante [ 8] yo satisface: (1) A | = YO, ( 2) yo ∧ si es

insatisfactorio y (3) sus variables son comunes a UN y SI. Decimos un


interpolante yo es más fuerte (más débil) que yo ′ Si I | = I ′ ( yo ′ | = YO).
〈 0 0 〉 s = 0;

〈 1 〉 Si(*)
cierto cierto cierto

〈 2 〉 s ++; s=0 s=0 =0

s <= 0
más 1
s <= 0
1
s <= 0
1
(*)
s <= 0 (*) (*) (*)
〈 3 〉 s + = 2; 2
s <= 0
2
s <= 0
2 3

s ++ s ++ s ++
〈 4 4 〉 Si(*) s+=2s

s <= 1 44 s <= 1 44 s <= 1 44 4


〈 5 5 〉 s ++; (*) (*) (*) (*)
<= 1 (*) <= 1 (*) <= 1 (*)

más 55 55 66 55 66 55 66

s ++ s ++ s+=2 s ++ s+=2 s ++ s+=2

〈 6 6 〉 s + = 2; <= 2 s <= 2 s <= 2 s


77 77 77 77 77 77 77
s <= 10 s> 10 s> 10
〈 7 7 〉 Si( s> 10)
s> 10 s <= 10 s> 10 s> 10 s> 10 s> 10 s <= 10

falso s falso s falso 99 falso s 99 falso 99 falso falso 99


99 99 99

〈 8 〉 error();

〈99〉

(un) (si) (C) (re)

Figura 2. Árboles simbólicos con postcondiciones más fuertes o CLP-PROVER (ejecutando TRACER en pro-
gramo en la Fig. 2 (a) con opciones - intp sp o - intp clp)

cierto cierto cierto

s=0 s=0 s=0

s <= 8
1 s <= 8 s <= 8
1 1
(*)
s <= 8 (*) s <= 8 (*) (*)
s <= 8
2 2 2 2

s ++ s ++ s ++ s+=2

s <= 9 subsumido
44 s <= 9 44 s <= 9 44 4
(*) (*)
<= 9 (*) <= 9 (*) (*)
<= 9
55 55 66 55 66

s ++ s ++ s+=2 s ++ s+=2

<= 10 s subsumido subsumido


<= 10 s <= 10 s
77 77 77 77 77
s> 10 s <= 10
s> 10 s <= 10 s> 10 s <= 10

falso s 99 falso s falso s


99 99

(un) (si) (C)

Fig. 3. Árboles simbólicos con precondiciones más débiles (en ejecución RASTREADOR con - intp wp)

interpolante: ι 1: s 0 0 ≤ 0, ι 2: s 0 0 ≤ 0, ι 4: s 1 ≤ 1, ι 5: s 1 ≤ 1, y ι 7: s 2 ≤ 2 dónde
ι k se refiere al interpolante en la ubicación k. En todas las figuras, los interpolantes están encerrados en (rojo)

cajas La figura 2 (c) muestra el árbol después de la segunda palmada simbólica. h ha sido explorado. A
ubicación 7 7 del segundo camino TRAZADOR prueba si el estado simbólico actual s0= 0 0 ∧ s1=
2 por ι 7: s 2 ≤ 2, el interpolante en
s 0 + 1 ∧ s 2 = s 1 + 2 está subsumido 7) Sin embargo, esto

las pruebas fallan desde s 0 = 0 0 ∧ s 1 = s 0 + 1 ∧ s 2 = s 1 + 2 6 | = s 2 ≤ 2) Similar, TRAZADOR


intenta nuevamente en el lugar 4 4 del tercer camino en la Fig. 2 (d) si el nuevo camino simbólico puede
estar subsumido por una ruta explorada anterior. Aquí, prueba si s 0 = 0 0 ∧ s 1 = s 0 + 2 implica
ι 4: s 1 ≤ 1 pero de nuevo falla. TRAZADOR puede probar que el programa es seguro, pero el árbol de ejecución simbólico construido
es exponencial en la cantidad de programas ramas ⊓⊔

Por eficiencia, TRAZADOR sub-aproxima la precondición más débil por una mezcla de eliminación existencial de
cuantificadores, núcleos insatisfactorios, un y algunas heurísticas. Cuando
se detecta un camino inviable calculamos ¬ (∃ y · SOL), el postcondición que queremos
mapear en un condición previa, dónde sol es el guardia donde se detecta la inviabilidad y y
son SOL- variables locales Las dos reglas principales para propagar wp's ar mi:
2 Un estado simbólico σ es subsumido o cubierto por otro estado simbólico
σ ′ si se refieren a lo mismo
ubicación y el conjunto de estados representados por σ es un subconjunto de los representados por σ ′. Alternativamente,
Si σ y σ ′ son vistos como fórmulas entonces σ está subsumido por σ ′ Si σ | = σ ′.
(UN) wp (x: = mi, Q) = Q [e / x]
(SI) wp ( Si( C) S 1 más S 2, Q) = (C ⇒ wp (S 1, Q)) ∧ (¬ C ⇒ wp (S 2, Q))

La regla (A) reemplaza todas las ocurrencias de X con mi en la fórmula Q. El desafío es cómo
producir fórmulas eficientes (conjuntivas) a partir de la regla (B) a medida que ak como sea posible para aumentar

La probabilidad de subsunción. Durante el delantero SE cuando se desvía un camino inviable


3a
tected descartamos irrelevante guardias mediante el uso del concepto de núcleos insatisfactorios (UC)
evite cultivar la fórmula wp innecesariamente. Por ejemplo, t el formula C ⇒ wp (S 1, Q)
puede ser reemplazado con wp (S 1, Q) Si C 6∈ C dónde C es una UC (no necesariamente mínima). De lo contrario,
subestimamos C ⇒ wp (S 1, Q) como sigue. Dejar re 1 ∨. . . ∨ re norte ser
¬ wp (S 1, Q) entonces calculamos ∧ 1 ≤ yo ≤ norte( ¬ (∃ X ′ · ( C ∧ re yo))), donde quan existencial
la eliminación del tigre elimina las variables de estado posterior X ′. Una heurística muy efectiva si el
la fórmula resultante es disyuntiva es eliminar esas conjunciones ts que no están implicados por C
porque es más probable que sean irrelevantes para el infeasib razón de ility.

Ejemplo 2 Volviendo al programa en la Fig. 2 (a). La figura 3 (a) muestra el sam primero

camino simbólico explorado por TRAZADOR pero anotado con precondiciones más débiles: ι 1:
s 0 0 ≤ 8, ι 2: s 0 0 ≤ 8, ι 4: s 1 ≤ 9, ι 5: s 1 ≤ 9, y ι 7: s 2 ≤ 10) En este ejemplo, los cálculos de wp se simplifican notablemente ya
que los guardias son c irrelevante para el
inviabilidad de la ruta, y por lo tanto, solo la regla (A) es trigge rojo. Por ejemplo, ι 7: s 2 ≤ 10
se obtiene por ¬ (∃V \ { s 2} · s 2> 10) ≡ s 2 ≤ 10 dónde V es el conjunto de todas las variables del programa (incluidas las
variables renombradas) y ι 6: s 1 ≤ 9 9 se obtiene por wp (s 2 = s 1+ 1,
s 2 ≤ 10) = s 1 ≤ 9) La figura 3 (b) muestra la segunda ruta simbólica, pero tenga en cuenta que la pa th
ahora se puede incluir en la ubicación 7 7 desde el estado simbólico s0= 0 0 ∧ s1= s0+ 1 ∧
s 2 = s 1 + 2 | = s 2 ≤ 10) Los bordes discontinuos representan caminos subsumidos y están etiquetados con "subsumido".
Finalmente, la Fig. 3 (c) ilustra cómo el thi rd ruta simbólica puede ser también
subsumido en la ubicación 4 4 ya que s 0 = 0 0 ∧ s 1 = s 0 + 2 | = s 1 ≤ 9) TRAZADOR demuestra seguridad
de nuevo, pero el tamaño del árbol simbólico ahora es lineal en el número ber de ramas. ⊓⊔

Con bucles ilimitados, la única esperanza de producir una prueba es abstracción. En una palabra,
al encontrar un ciclo TRAZADOR calcula el mas fuerte posibles invariantes de asa Ψ
mediante el uso de técnicas de ampliación para hacer que el SE finito. Si un error abstracto espurio
se encuentra entonces un fase de refinamiento (Similar a CEGAR) descubre un interpolante yo que gobierna

el error espurio fuera. Después de reiniciar, TRAZADOR fortalece Ψ uniéndolo con yo y


las verificaciones simbólicas de ejecución camino por camino si la nueva fórmula fortalecida es loop
invariante. Si esta prueba falla para una ruta π, luego TRAZADOR desenrolla π una iteración más y
continúa con el proceso. Tenga en cuenta que la generación de en variantes es dinámica en el
Siente que el desenrollamiento del bucle expondrá nuevas restricciones. ng nuevos candidatos invariantes.
Por falta de espacio, remitimos a los lectores a [12] para detalles técnicos ils. Aquí, ilustramos cómo
TRAZADOR maneja bucles ilimitados a través del ejemplo clásico desc acanalado en la Fig. 4 (a).

Ejemplo 3 TRAZADOR ejecuta el programa hasta que se encuentra un ciclo y comprueba cuándo r
cierto conjunto de candidatos de bucle se mantiene después de la ejecución de el ciclo. Obtenemos el
camino simbólico π 1 ≡ bloquear 0 = 0 0 ∧ nuevo 0 = antiguo 0 + 1 ∧ ( nuevo 0 0 6 = antiguo 0) ∧ bloquear 1 =

1 ∧ antiguo 1 = nuevo 0 0 de ejecutar el más rama, que se muestra en la Fig. 4 (b). Asumir un ensanchamiento ∇ definido como C ∇
C ′, C Si C ′
| = C de otra manera cierto, dónde C y C ′ son los

3 Dado un conjunto de restricciones


S cuya conjunción es insatisfactorio, un núcleo insatisfactorio (UC) S ′ es
cualquier subconjunto insatisfactorio de S. Una UC S ′ es mínimo si hay algún subconjunto estricto de S ′ Es satisfactorio.
00 00

bloqueo = 0, nuevo = antiguo + 1 bloqueo = 0, nuevo = antiguo + 1


〈 0 0 〉 bloqueo = 0; nuevo = antiguo + 1;
{lock = 0, new = old + 1} cierto (después de ensanchar)
1 1
〈 1 〉 mientras( nuevo 6 = antiguo) { Viejo) Viejo)

〈2〉 bloqueo = 1; viejo = nuevo; 2 2

〈3〉 Si(*) lock = 1, new = old lock = 1, new = old

〈44〉 bloqueo = 0; nuevo ++; (*) 3 (*) 3


subsumido
〈 5 5 〉} 〈 6 6 〉 Si( bloqueo

== 0)

〈77〉 error();
55 55
〈8〉

{lock
1 (nuevo! = = 1, new = old} {lock
1 (nuevo! = = 1, new = old}

(un) (si) (C)


00

00 bloqueo = 0, nuevo = antiguo + 1 bloqueo = 0, nuevo = antiguo + 1

UN
{lock = 0, new = old + 1} UN
{lock = 0, new = old + 1}
bloqueo = 0, nuevo = antiguo + 1 (nuevo! = viejo) 1 (¡Ampliación fallida!) (nuevo! = viejo) 1 (nuevo == viejo)

cierto (después de ensanchar) falso


1 2 2
Viejo) antiguo)

lock = 1, new = old lock = 1, new = old


66 {nuevo = antiguo}
2
3 3 (*)
(*) (*)
lock = 1, new = old (bloqueo == 0) subsumido

44

3 7 (nuevo ==
(*) (*) bloqueo = 0, nuevo ++ 0

subsumido ERROR es accesible!


55 55 55
44

C
subsumido si
{lock = 1, new = old} 1 {lock = 0, new = old + 1}
1B {lock = 1, new = old} 1
55 55
(nuevo! = viejo) (nuevo! = viejo)

falso falso
6 (nuevo == viejo) 6 (nuevo == viejo)

{lock
1 (nuevo! = = 1, new = old} (bloqueo == 0) (bloqueo! = 0) (bloqueo == 0) (bloqueo! = 0)

falso 8 falso 8

(re) (mi) (F)

Fig.4. TRAZADOR ejecución de un extracto de un controlador de Windows NT

versiones de restricción antes y después de la ejecución del cy cle correspondiente a uno


candidato. Luego, ampliando nuestros candidatos de bucle (mostrados entre en llaves en el
primera aparición de ubicación 1) { bloquear 0 = 0, nuevo 0 = antiguo 0 + 1} produce un estado simbólico abstracto cierto (( bloquear
0= 0) ∇ ( bloquear 1 = 1) ≡ cierto y ( nuevo 0 = antiguo 0 +
1) ∇ ( antiguo 1 = nuevo 0) ≡ cierto). El camino π 1 después del ensanchamiento se muestra en la Fig. 4 (c). Tenga en cuenta que el estado simbólico en

el encabezado del bucle es cierto, y como resultado, podemos dejar de ejecutar


y evitar desenrollar el camino π 1 para siempre desde el niño (segunda aparición de ubicación
1) está subsumido por su padre (primera aparición de 1) Luego retrocedemos a un segundo
camino π 2 de ejecutar el luego rama. por π 2, los candidatos son invariantes, pero esto es irrelevante ya que la
ejecución de π 1 ya determinado que no eran
invariante. Como resultado de la pérdida de precisión de nuestra abstracción ción, la condición de salida de
el lazo( nuevo 0 = antiguo 0) ( La Fig. 4 (d)) ahora está satisfecha y la ubicación del error es reachab le
por el camino π 3 ≡ ( nuevo 0 = antiguo 0) ∧ ( bloquear 0 = 0). Entonces, se activa un refinamiento. Primero, verificamos que
π 3 es de hecho espurio debido a la abstracción del bucle (es decir, bloquear 0 =

0 0 ∧ nuevo 0 = antiguo 0 + 1 ∧ ( nuevo 0 = antiguo 0) ∧ ( bloquear 0 = 0) es insatisfactorio). Segundo, por precondiciones más débiles
inferimos un interpolante yo ≡ nuevo 0 0 6 = antiguo 0 0 eso es suficiente para gobernar

fuera del contraejemplo. Tercero, fortalecemos nuestro resumen de bucle acción cierto con YO, grabar
ese yo no se puede abstraer más y reiniciar.
Después de reiniciar, la ejecución de π 1 que se muestra en la Fig. 4 (e) no se puede detener en la ubicación

etiquetado con si ya que( nuevo 0 = antiguo 0 + 1) ∇ ( antiguo 1 = nuevo 0) es todavía cierto pero esta abstracción no
conserva nuevo 0 0 6 = antiguo 0, el interpolante de la fase de refinamiento.
Como resultado, no podemos abstraer al candidato nuevo 0 = antiguo 0 + 1 en el lugar UN
y, por lo tanto, la ruta debe desenrollarse una iteración más. Howeve r, la ruta desenrollada
ya no tome el cuerpo del bucle sino que siga la condición de salida p disimular las limitaciones
bloquear 1 = 1 ∧ nuevo 1 = antiguo 0. Por lo tanto, el camino desenrollado es seguro. Finalmente exploramos π 2 de
el luego rama mostrada en la Fig. 4 (f). Afortunadamente, podemos detenernos con seguridad e ejecución de
π 2 ( como antes) ya que no se necesita abstracción para este camino yh ence, nuevo 0 0 6 = antiguo 0 0 es

Preservado. Como resultado, el estado del niño C está subsumido por su antepasado A. ⊓⊔

Observaciones Se sabe que wp puede no generalizarse con algunos bucles como J hala y col.
señalado en [14]. TRAZADOR se puede alimentar con otros métodos de interpolación y / o con invariantes inductivos de
herramientas externas (ver Sec. 3). también , nuestra técnica de camino invariante
a través de la ampliación está estrechamente relacionado con la ampliación "hasta" S ( ∇ S) utilizado en [9], donde S estafa-
contiene las restricciones inferidas por la fase de refinamiento. Howe ver, lo usan para mejorar
CEGAR mientras SE plantea diferentes desafíos (ver [12] Sec.1, Ex.3). Finalmente , lo haríamos
quisiera enfatizar esa abstracción en TRAZADOR difiere de CEGAR en un fundamental
camino. TRAZADOR intentos de inferir el mas fuerte loop invariants modulo las limitaciones
de técnicas de ampliación mientras CEGAR así como herramientas híbridas como CONTROLADOR DE CPA y
KRATOS a menudo propagará abstracciones más gruesas. Aunque stro nger abstracciones pueden
ser más caros pueden converger más rápido en presencia de loo ps (ver [12] Sec.1, Ex.4).

3 Uso e implementación
Entrada. TRAZADOR toma como entrada un programa C con aserciones
Programa C

de la forma TRACER abortar ( Cond),


intérprete
​Analysis dónde Cond es una fórmula FOL libre de cuantificadores. Luego,
cada ruta que encuentra la aserción prueba si Cond tiene o no. En
InterProc

caso afirmativo, la ejecución simbólica ha alcanzado un nodo de


frontend Alias

error y, por lo tanto, informa el error y aborta si el error es real, o


refina si es falso. De lo contrario, la ejecución simbólica continúa
Frontend
Error
abstracto

normalmente.
Refinamiento
SE Interprete C
Loop Inv.
Error Safe

Loop Inv. Gen

Restricción de resolución Salida. Si la ejecución simbólica termina y todo RASTREADOR


Interpolación
abortar las aserciones fallaron, el programa se informa como
seguro y se muestra el árbol de ejecución simbólico
Fig.5. Implementación de TRAZADOR correspondiente
como el objeto de prueba. Si el programa no es seguro, entonces un contraeje se muestra amplio.

Implementación. La figura 5 describe la implementación de TRAZADOR. Se divide en


Dos componentes. Primero, una interfaz C basada en CIL [ 19] traduce el programa en un
programa lógico basado en restricciones. Tanto punteros como matrices a re modelado utilizando la teoría
de matrices. Se utiliza un análisis de alias para producir un sonido Diner granulado independiente
particiones abolladas (es decir, separación) así como inferir qué direcciones escalares pueden haber sido
tomado. Opcionalmente, yo NTER PAGS ROC [ 16] (opción- loop-inv) se puede usar para proporcionar bucle
invariantes El segundo componente es un intérprete que sy ejecuta mbolicamente el
programa lógico basado en restricciones y su objetivo es demostrar g que las ubicaciones de error no están

accesible. Este intérprete se implementa en un Programación Lógica de Restricciones (CLP)


sistema llamado CLP ( R) [ 11] Sus principales subcomponentes son:

• Restricción de resolución se basa en el CLP ( R) solucionador para razonar rápido sobre aritmética lineal

sobre reales aumentados con un procedimiento de decisión para matrices (o ption- mccarthy)
• Interpolación implementa dos métodos con diferente fuerza lógica. Th primero
método utiliza postcondiciones más fuertes [12, 13] (- intp sp). El segundo computa
precondiciones más débiles (- intp wp) pero actualmente solo admite aritmética lineal
sobre reales. TRAZADOR también proporciona interfaces a otros métodos de interpolación su ch as
PROBADOR CLP (- intp clp).
• Refinamiento invariante de bucle . Similar a CEGAR la efectividad del refinamiento
la fase generalmente depende de la heurística ( - h opción). Pero a diferencia CEGAR herramientas, SE solamente

realiza abstracciones en los encabezados de bucle. Por lo tanto, dado un camino th en alcanza un error lo-
catión TRAZADOR solo necesita visitar esos puntos de abstracción en el camino yc diablos si

uno de ellos causó la posibilidad de alcanzar el error. Si es así, yo t utiliza la interpolación para
elija qué restricciones pueden descartar el error. De otra manera, El error debe ser real.
• Generación Invariante de Bucle . Si se encuentra un encabezado de bucle TRAZADOR graba un conjunto de lazo
invariante candidatos proyectando sobre la estadística simbólica propagada mi. Cuando un cy-
cle π se encuentra ensancha el estado en el encabezado por C ∇ C ′ dónde C ′ es el candidato C
después de la ejecución de π. La implementación actual de la ampliación es C ∇ C ′, C Si C ′ | = C
de otra manera cierto. Muy importante si ∇ intenta abstraer una restricción necesaria para excluir un error, luego
falla y la ruta se desenrolla al menos t una iteración más. Alabama-
aunque nuestros experimentos muestran que nuestro método para descubrir los invariantes de bucle son rápidos

y efectivo, es incompleto( en el sentido de que puede causar la no terminación) por varias razones. Primero, la
generación de candidatos consi ders solo restricciones restricciones

acotado por SE a pesar de que TRAZADOR permite enriquecer este conjunto con invariantes inductivos proporcionados por I NTER PAGS
ROC. En segundo lugar, la implementación de ∇ Es bastante ingenuo. Tercero,

∇ se aplica a cada candidato individualmente. Aplicando ∇ a todos los subconjuntos candidatos


podríamos producir invariantes más ricos, aunque este proceso w Debería ser exponencial.

4 Experiencia con puntos de referencia

Nosotros corrimos TRAZADOR sobre el ntdrivers-simpli fi cado y ssh-simpli fi cado puntos de referencia de SVCOMP ( sv-comp.sosy-lab.org)
y comparado con dos herramientas de última generación: CONTROLADOR DE CPA [ 3]

y HSF [ 21]. La figura 6 muestra los resultados de esta comparación incluyendo t él impacta en
TRAZADOR utilizando las condiciones posteriores más fuertes ( SP) y precondiciones más débiles ( WP) como en-

terpolantes Las columnas 2 y 3 comparan el número de estados de th e ejecución simbólica


árbol (# S) explorado por TRAZADOR utilizando SP y WP y las columnas 4 y 5 comparan el número de refinamientos
invariantes de bucle realizados ( # #R) utilizando SP y WP. El resto de
las columnas muestran el tiempo total en segundos T ( incluido el tiempo de compilación) de TRAZADOR( SP y
WP), CPA-CHECKER ( CPA), y HSF ( HSF). Para una comparación justa, TRAZADOR No lo usé
invariantes de I NTER PAGS ROC. ∞ indica TRAZADOR no terminó dentro 900 segundos.
Nuestros resultados indican que el uso de WP vale la pena con mayores ganancias en programas donde

TRAZADOR se ajusta en gran medida, principalmente porque los desenrollamientos de bucles son caros f o SE y por lo tanto
subsumir más a menudo es vital. por ssh-simpli fi cado puntos de referencia ( s3 clnt y s3 srvr)
TRAZADOR, con SP, no pudo finalizar todos los programas excepto uno, donde # #S, #R y T
#S #R T
Programa SP WP SP WP SP WP CPA HSF cdaudio 4663 2138 0 0 12
10 3 529
diskperf 4565 2829 0 0 14 11 3 513
fl oppy 1758 1357 0 0 4 4 2 568
kb fi ltr 319 230 0 0 2 2 2 55

s3 clnt 1 ∞ 6940 ∞ 33 ∞ 61 7 8
s3 clnt 2 ∞ 9871 ∞ 74 ∞ 115 12 5
s3 clnt 3 ∞ 17617 ∞ 114 ∞ 338 8 99

s3 clnt 4 ∞ 6990 ∞ 46 ∞ 80 5 8
s3 srvr 1 ∞ 5496 ∞ 12 ∞ 33 18 5
s3 srvr 2 ∞ 7295 ∞ 29 ∞ 120 98 11
s3 srvr 3 ∞ 5950 ∞ 14 ∞ 37 13 39
s3 srvr 4 47988 4349 143 12 372 27 25 10

Fig.6. Comparación entre TRAZADOR y veri fi cadores de última generación en Intel 2.33Ghz 3.2GB.

fueron alrededor de 10-15 veces más en comparación con WP. Comparado con HSF, un puro" CEGAR
veri fi cador TRAZADOR superado en el ntdrivers-simpli fi cado puntos de referencia (primeras 4 filas) y se superó en
el resto. Esto sugiere que CEGAR puede comportarse mejor cuando
Se necesitan numerosos desenrollamientos de bucle y SE puede ser más adecuado cuando la mayoría de las infecciones

los caminos sensibles afectan la seguridad (donde CEGAR realizaría muchos refinamientos). Comparando
con CPA un verificador híbrido y ganador de SV-COMP '12, TRAZADOR tarifas casi iguales
en el ntdrivers-simpli fi cado puntos de referencia y s3 srvr programas, pero se supera en el
s3 clnt puntos de referencia Sin embargo, nuestra evaluación demuestra que a TRAZADOR es competencia

itive con veri fi cadores de vanguardia.

Referencias

1. T. Ball, B. Cook, V. Levin y SK Rajamani. GOLPE. En IFM'2004.


2. T. Ball y col. Integridad relativa del refinamiento de abstracción para So Comprobación del modelo de software TACAS'02.

3. D. Beyer y col. Verificación del modelo de software mediante codificación de bloque grande . En FMCAD'09.
4. D. Beyer, TA Henzinger, R. Jhala y R. Majumdar. EXPLOSIÓN. En t. J. STTT, 2007
5. A. Cimatti y col. Kratos: un verificador de modelos de software para SystemC. En CAV'11.
6. A. Cimatti y col. Generación interpolante eficiente en SMT. En TACAS'08.
7. E. Clarke y col. Satabs: Abstracción de predicados basada en sat para Ansi-C. En TACAS'05.
8. W. Craig. Tres usos del teorema de Herbrand-Gentzen en Mod relacionado El y la teoría de la prueba. JSC'55.
9. BS Gulavani y col. Refinar interpretaciones abstractas. Inf. Proceso. Letón. , 2010
10. F. Ivancic y col. F-Soft: Plataforma de Verificación de Software. En CAV'05.
11. J. Jaffar, S. Michaylov, P. Stuckey y R. Yap. El CLP ( R) Sistema. TOPLAS 1992
12. J. Jaffar, JA Navas y AE Santosa. Simbólico ilimitado Ejecución para el programa Veri-
fi cación. En RV'11.
13. J. Jaffar, AE Santosa y R. Voicu. Un método de interpolación para r Recorrido CLP. En CP'09.
14. R. Jhala y col. Un enfoque práctico y completo para predecir el refinado ment. En TACAS'06.
15. J. Rey. La ejecución simbólica y las pruebas del programa. Com. ACM '76.
16. G. Lalire, M. Argoud y B. Jeannet. El analizador Interproc http: // pop-
art.inrialpes.fr/people/bjeannet/bjeannet-forge/interproc.
17. KL McMillan. Un teorema interpolador Prover. TCS 2005
18. KL McMillan. Anotación perezosa para pruebas de programa y verificación. En CAV'10.
19. GC Necula, S. McPeak, SP Rahul y W. Weimer. CIL. En CC'02.
20. AV Nori, SK Rajamani, S. Tetali, AV Thakur. El proyecto yogui t. En TACAS'09.
21. S.Grebenshchikov et.al. Verificadores de software de síntesis de Pr de las Reglas. En PLDI'12.
22. A. Rybalchenko y V. Sofronie. Solución de restricciones para interpola ción En VMCAI'07.

También podría gustarte