%PDF-1.6
%
1 0 obj
<>
endobj
2 0 obj
<>stream
Erlang
Constraint-based testing
Reversible debugging
Concolic testing
Property-based testing
Replay debugging
Term rewriting
[ES] Erlang es un lenguaje de programación funcional con concurrencia mediante paso de mensajes basado en el modelo de actores. Éstas y otras características lo hacen especialmente adecuado para aplicaciones distribuidas en tiempo real acrítico. En los últimos años, la popularidad de Erlang ha aumentado debido a la demanda de servicios concurrentes.
No obstante, desarrollar sistemas Erlang libres de errores es un reto considerable. A pesar de que Erlang evita muchos problemas por diseño (por ejemplo, puntos muertos), algunos otros problemas pueden aparecer. En este contexto, las técnicas de testing y depuración basadas en métodos formales pueden ser útiles para detectar, localizar y arreglar errores de programación en Erlang.
En esta tesis proponemos varios métodos para testing y depuración en Erlang. En particular, estos métodos están basados en modelos semánticos para concolic testing, pruebas basadas en propiedades, depuración reversible con consistencia causal y repetición reversible con consistencia causal de programas Erlang. Además, probamos formalmente las principales propiedades de nuestras propuestas y diseñamos herramientas de código abierto que implementan estos métodos.
[CAT] Erlang és un llenguatge de programació funcional amb concurrència mitjançant pas de missatges basat en el model d'actors. Estes i altres característiques el fan especialment adequat per a aplicacions distribuïdes en temps real acrític. En els últims anys, la popularitat d'Erlang ha augmentat degut a la demanda de servicis concurrents.
No obstant, desenvolupar sistemes Erlang lliures d'errors és un repte considerable. Encara que Erlang evita molts problemes per disseny (per exemple, punts morts), alguns altres problemes poden aparéixer. En este context, les tècniques de testing y depuració basades en mètodes formals poden ser útils per a detectar, localitzar y arreglar errors de programació en Erlang.
En esta tesis proposem diversos mètodes per a testing i depuració en Erlang. En particular, estos mètodes estan basats en models semàntics per a concolic testing, testing basat en propietats, depuració reversible amb consistència causal i repetició reversible amb consistència causal de programes Erlang. A més, provem formalment les principals propietats de les nostres propostes i dissenyem ferramentes de codi obert que implementen estos mètodes.
[EN] Erlang is a message-passing concurrent, functional programming language based on the actor model. These and other features make it especially appropriate for distributed, soft real-time applications. In the recent years, Erlang's popularity has increased due to the demand for concurrent services.
However, developing error-free systems in Erlang is quite a challenge. Although Erlang avoids many problems by design (e.g., deadlocks), some other problems may appear. Here, testing and debugging techniques based on formal methods may be helpful to detect, locate and fix programming errors in Erlang.
In this thesis we propose several methods for testing and debugging in Erlang. In particular, these methods are based on semantics models for concolic testing, property-based testing, causal-consistent reversible debugging and causal-consistent replay debugging of Erlang programs. We formally prove the main properties of our proposals and design open-source tools that implement these methods.
Reserva de todos los derechos
Abierto
Germán Francisco Vidal Oriola
http://hdl.handle.net/10251/139076
Inglés
endstream
endobj
3 0 obj
<>
endobj
38 0 obj
<>stream
x[oH+kdUWZ!ĝ-C_0Đ*Rjג%̀`;3 g 3g(p $Y9r
HNŭE|)p?w=ynTKOtϧ ώɇ0 :FԔ0#8r8vAD+IZHfHKG:ʯq'.WMĘ1}j^L*ͅ O51͚?W*abgp]Õ=_x[H^I|IpIXfZp>Hj4/
yhx]"0m]Ueo"u r@ɭ%wK 3RgNv)^IdH;NC-2OBS* DNҸnGEVUds 3ݛW{M
M~|H?M
ߛZaH$[U*݇3~䤸,:q6K*\HN+ &ތիd7FkD0s:kSGTq1坐;&I_KL=eqaxӳ oo*]_|nuiiīXqG95g'|C^r{z@%08HJ]*mX]\毵]akf*J"8#!\JNs*ܤL "{%Ot5äx9Ąqdcs0hR]Ų5kXB ")'vW*U-*ylwU~B"ϸc?Gz'hSF?/_h_v!: Ih҆~97DEaw1ulvw!s=ɗ֩hz/ D|y\պ>
endobj
72 0 obj
<>stream
xXr0+XcY'qƝ.:)..M\gxWB q ͦ~tc0B{9 3`ݜB@ Ρ,`;T@r+e/sϷr&KGswY63SI}$ʖz6JvGMwe^Yq|j2j w!*
!@_O{_UK
<p\LkƗ*PR"
AR([WZ' ŤUd+xee,:lb5rۯC 4PA!hWЩ`XVEa'ӎ$zCC$ TQ\S|gQ%SUyTnﶹ9]ٕ&69e`y+u4Q'ʓX%|:0&ou}S&[VsPf9Y~Ө=Q"Ax$="GÎ)Ҫu{ !|]*6QI?$m
a~/'gSVY,ij7rnQEl,||N_>XUJjʷ)Y8g.aqӨgzXqTˎCNt1d`z. Hb`[,ڦmut+JK+LHl|M0NBN^kEkk|mw}ji%>OʚK2ZuḈopz$& OPydmƔ`
VPT#ܟI"Ԫtk|Pt%̫}Rϐz
{m˶O%eAgX AM0oP~F>NFAwB^1bl#lD$"wueȝTswex
endstream
endobj
4 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 588.853 173.424 598.624]/Subtype/Link/Type/Annot>>
endobj
5 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[97.151 572.335 198.002 583.878]/Subtype/Link/Type/Annot>>
endobj
6 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[97.151 560.409 176.096 569.656]/Subtype/Link/Type/Annot>>
endobj
7 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[97.151 543.716 368.39 555.958]/Subtype/Link/Type/Annot>>
endobj
8 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 529.495 270.067 541.736]/Subtype/Link/Type/Annot>>
endobj
9 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 517.744 159.58 527.514]/Subtype/Link/Type/Annot>>
endobj
10 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 503.522 225.754 513.292]/Subtype/Link/Type/Annot>>
endobj
11 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[55.697 475.493 251.903 487.686]/Subtype/Link/Type/Annot>>
endobj
12 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 463.721 155.085 473.491]/Subtype/Link/Type/Annot>>
endobj
13 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 447.028 175.693 458.746]/Subtype/Link/Type/Annot>>
endobj
14 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 432.806 209.14 444.824]/Subtype/Link/Type/Annot>>
endobj
15 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[97.151 418.584 224.173 430.826]/Subtype/Link/Type/Annot>>
endobj
16 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 404.362 250.769 416.604]/Subtype/Link/Type/Annot>>
endobj
17 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[97.151 390.184 365.521 402.382]/Subtype/Link/Type/Annot>>
endobj
18 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 378.389 185.162 388.16]/Subtype/Link/Type/Annot>>
endobj
19 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 361.74 372.929 373.938]/Subtype/Link/Type/Annot>>
endobj
20 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 349.946 159.58 359.716]/Subtype/Link/Type/Annot>>
endobj
21 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 335.724 227.98 345.495]/Subtype/Link/Type/Annot>>
endobj
22 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[55.697 307.695 377.9 319.888]/Subtype/Link/Type/Annot>>
endobj
23 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 295.923 155.085 305.693]/Subtype/Link/Type/Annot>>
endobj
24 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 279.23 161.402 291.248]/Subtype/Link/Type/Annot>>
endobj
25 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 265.008 280.583 277.25]/Subtype/Link/Type/Annot>>
endobj
26 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 250.786 326.867 263.028]/Subtype/Link/Type/Annot>>
endobj
27 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[97.151 239.035 235.529 248.806]/Subtype/Link/Type/Annot>>
endobj
28 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[97.151 222.342 314.936 234.584]/Subtype/Link/Type/Annot>>
endobj
29 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 210.591 159.58 220.362]/Subtype/Link/Type/Annot>>
endobj
30 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 196.37 147.34 205.617]/Subtype/Link/Type/Annot>>
endobj
31 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[55.697 168.341 409.284 180.534]/Subtype/Link/Type/Annot>>
endobj
32 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 156.568 155.085 166.339]/Subtype/Link/Type/Annot>>
endobj
33 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 139.876 161.402 151.894]/Subtype/Link/Type/Annot>>
endobj
34 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 125.654 203.882 137.372]/Subtype/Link/Type/Annot>>
endobj
35 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 111.476 271.583 123.674]/Subtype/Link/Type/Annot>>
endobj
36 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 97.254 227.642 109.452]/Subtype/Link/Type/Annot>>
endobj
37 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 85.459 231.874 95.23]/Subtype/Link/Type/Annot>>
endobj
40 0 obj
<>/ProcSet[/PDF/Text]>>
endobj
42 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[55.697 586.404 426.193 598.596]/Subtype/Link/Type/Annot>>
endobj
43 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[55.697 575.32 125.555 584.567]/Subtype/Link/Type/Annot>>
endobj
44 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 561.755 155.085 571.525]/Subtype/Link/Type/Annot>>
endobj
45 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 545.734 161.402 557.752]/Subtype/Link/Type/Annot>>
endobj
46 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 534.656 206.914 544.427]/Subtype/Link/Type/Annot>>
endobj
47 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 518.636 212.718 530.354]/Subtype/Link/Type/Annot>>
endobj
48 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 507.558 185.653 517.328]/Subtype/Link/Type/Annot>>
endobj
49 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 494.009 147.34 503.256]/Subtype/Link/Type/Annot>>
endobj
50 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[55.697 467.101 298.703 479.294]/Subtype/Link/Type/Annot>>
endobj
51 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 456.001 155.085 465.772]/Subtype/Link/Type/Annot>>
endobj
52 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 442.452 158.347 452.223]/Subtype/Link/Type/Annot>>
endobj
53 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 426.432 286.801 438.673]/Subtype/Link/Type/Annot>>
endobj
54 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 412.926 231.613 425.124]/Subtype/Link/Type/Annot>>
endobj
55 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 399.377 250.911 411.575]/Subtype/Link/Type/Annot>>
endobj
56 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 385.784 386.63 398.026]/Subtype/Link/Type/Annot>>
endobj
57 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 372.279 208.322 384.477]/Subtype/Link/Type/Annot>>
endobj
58 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 361.157 159.58 370.927]/Subtype/Link/Type/Annot>>
endobj
59 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 347.607 153.82 357.378]/Subtype/Link/Type/Annot>>
endobj
60 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[55.697 309.519 244.166 319.987]/Subtype/Link/Type/Annot>>
endobj
61 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[55.697 285.071 127.289 294.318]/Subtype/Link/Type/Annot>>
endobj
62 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 269.034 217.933 281.276]/Subtype/Link/Type/Annot>>
endobj
63 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 255.485 196.616 267.727]/Subtype/Link/Type/Annot>>
endobj
64 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 241.936 210.896 254.178]/Subtype/Link/Type/Annot>>
endobj
65 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[55.697 206.318 149.576 216.787]/Subtype/Link/Type/Annot>>
endobj
66 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[55.697 181.87 222.154 191.597]/Subtype/Link/Type/Annot>>
endobj
67 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 168.305 153.82 178.076]/Subtype/Link/Type/Annot>>
endobj
68 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[72.06 154.756 155.685 164.526]/Subtype/Link/Type/Annot>>
endobj
69 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[97.151 138.736 252.842 150.977]/Subtype/Link/Type/Annot>>
endobj
70 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[97.151 125.186 231.525 137.428]/Subtype/Link/Type/Annot>>
endobj
71 0 obj
<>/Border[0 0 0]/C[1 0 0]/H/I/Rect[97.151 111.637 246.842 123.879]/Subtype/Link/Type/Annot>>
endobj
73 0 obj
<>/ProcSet[/PDF/Text]>>
endobj
39 0 obj
<>
endobj
77 0 obj
<>
endobj
76 0 obj
<>
endobj
101 0 obj
<>stream
xڤpݶ5vضm;vN:mvұ߷ާuVzsUKFB'dbgd*ngLD
42ut5Uѳ3Z:[&-`"VD
lv fv 3#77ӟ&vF US[[S[g2;{GKs3`PHi
`oj [S?1m vf ?P;7K[s)@OhcS['S'#(05u4(Y[IptSƦ`hkP U?}
MM/)ٞf;ۚ:Sʟhdd˲m[-ߖ/TYaG 8_!*ߖ&21[;?sabX;L-ma
ao
`] _O1/)AV\JJ^U/;@`g`011~{DEC"r5ppY(5#9i*P?$_zadc?U//72i_yo4_Fg5o1;(?75L vvsOSBK'qKwSEKg?Z;c]Xɠhd7t\jai hXbv&ROMw3?ì.Yu<N.dߪyNBxEy9XEu~d̈
pWk5IZ"]:5%v@Lx%%*&]qmk=Fl \@=m&s2˫ּ҄U3@`ԉjXS
[c1Q/UӽzušO:>"A`g[)a-ڂ[2ܨqB>byl='$5rgm-5F- !VmZ)
X!j6MY=mlk)gTaE8D[okZv*jpیZx:CAƮ}~x2CD}zKӐ"IۛɄcKuf0"0r}f7HK"|d94r]̾ӓfZ.utslKgBN7}M*mrF-X=!4I&?"(߆*\g9ޫfн+#R$ސ!~wN'~)&К=WsقB>/w2&NV,h`.FH3i'N/(LKTcrMr3?1 #ѤI"k(!я
h;dNʱ V>Ͳ fWY O*ݽ33oS.5mk܋Q?La[8\qyQnƸ5p)