SlideShare a Scribd company logo
Automatic Generation
of UML Sequence Diagrams
from Test Counterexamples
Daniel Carballa1
, Laura M. Castro1
1Universidade da Coruña (Spain)
ACM SIGPLAN Erlang Workshop
Nara, 23th September 2016
ACM SIGPLAN Erlang Workshop (2016) QC to UML 1 / 27
Erlang ecosystem
ACM SIGPLAN Erlang Workshop (2016) QC to UML 15 / 27
Erlang ecosystem
ACM SIGPLAN Erlang Workshop (2016) QC to UML 15 / 27
Testing with QuickCheck
It’s so great!
ACM SIGPLAN Erlang Workshop (2016) QC to UML 16 / 27
Testing with QuickCheck
It’s so great... when everything works! :)
> eqc:quickcheck(eqc:testing_time(5,module:property())).
...............................................................................
.....................(x10).....................................................
...............................................(x100)..........................
.......................................................................(x1000).
...............................................................................
....................(x10000)...................................................
.............................................(x1000).....(x100)......(x1)..
Time limit reached: 5.0 seconds.
OK, passed 1076702 tests
true
ACM SIGPLAN Erlang Workshop (2016) QC to UML 16 / 27
Testing with QuickCheck
We know the two main challenges are:
1 Writing the right property/s and/or model/s, data generators
ACM SIGPLAN Erlang Workshop (2016) QC to UML 17 / 27
Testing with QuickCheck
We know the two main challenges are:
1 Writing the right property/s and/or model/s, data generators
Graphical editing of models
Automatic inference of data generators
Translation of properties and models into semi-natural language
ACM SIGPLAN Erlang Workshop (2016) QC to UML 17 / 27
Testing with QuickCheck
We know the two main challenges are:
1 Writing the right property/s and/or model/s, data generators
Graphical editing of models
Automatic inference of data generators
Translation of properties and models into semi-natural language
2 Fixing the bug(s)!
ACM SIGPLAN Erlang Workshop (2016) QC to UML 17 / 27
Testing with QuickCheck
We know the two main challenges are:
1 Writing the right property/s and/or model/s, data generators
Graphical editing of models
Automatic inference of data generators
Translation of properties and models into semi-natural language
2 Fixing the bug(s)! (i.e. interpreting counterexamples)
ACM SIGPLAN Erlang Workshop (2016) QC to UML 17 / 27
Testing with QuickCheck
We know the two main challenges are:
1 Writing the right property/s and/or model/s, data generators
Graphical editing of models
Automatic inference of data generators
Translation of properties and models into semi-natural language
2 Fixing the bug(s)! (i.e. interpreting counterexamples)
Shrinking!!
ACM SIGPLAN Erlang Workshop (2016) QC to UML 17 / 27
Example: phone exchange
start() -> ok
activate(PhoneNumber) -> ok
deactivate(PhoneNumber) -> ok
call(CallerPhoneNumber,CalleePhoneNumber) -> ok
list() -> {ok,[PhoneNumbers]}
nsa() -> {ok,[OnGoingPhoneCalls]}
stop() -> ok
ACM SIGPLAN Erlang Workshop (2016) QC to UML 18 / 27
Example: phone exchange
start() -> ok
activate(PhoneNumber) -> ok
deactivate(PhoneNumber) -> ok
call(CallerPhoneNumber,CalleePhoneNumber) -> ok
list() -> {ok,[PhoneNumbers]}
nsa() -> {ok,[OnGoingPhoneCalls]}
stop() -> ok
ACM SIGPLAN Erlang Workshop (2016) QC to UML 19 / 27
Interpreting counterexamples
eqc:quickcheck(eqc:numtests(200,centralita_statem:prop_centralita())).
...........................................................................................
.........(x10).(x1).........Failed! After 120 tests.
[{set,{var,1},{call,centralita,start,[]}},
{set,{var,2},{call,centralita,activate,[-24]}},
{set,{var,3},{call,centralita,deactivate,[9]}},
{set,{var,4},{call,centralita,list,[]}},
{set,{var,5},{call,centralita,nsa,[]}},
{set,{var,6},{call,centralita,nsa,[]}},
{set,{var,7},{call,centralita,activate,[-24]}},
{set,{var,8},{call,centralita,activate,[20]}},
{set,{var,9},{call,centralita,activate,[38]}},
{set,{var,10},{call,centralita,call,[-24,20]}},
{set,{var,11},{call,centralita,list,[]}},
{set,{var,12},{call,centralita,activate,[-27]}},
{set,{var,13},{call,centralita,list,[]}},
{set,{var,14},{call,centralita,nsa,[]}},
{set,{var,15},{call,centralita,call,[38,20]}}]
ACM SIGPLAN Erlang Workshop (2016) QC to UML 20 / 27
Interpreting counterexamples
centralita:start() -> ok
centralita:activate(-24) -> ok
centralita:deactivate(9) -> ok
centralita:list() -> {ok, [-24]}
centralita:nsa() -> {ok, []}
centralita:nsa() -> {ok, []}
centralita:activate(-24) -> ok
centralita:activate(20) -> ok
centralita:activate(38) -> ok
centralita:call(-24, 20) -> ok
centralita:list() -> {ok, [38, 20, -24]}
centralita:activate(-27) -> ok
centralita:list() -> {ok, [-27, 38, 20, -24]}
centralita:nsa() -> {ok, [[]]}
Reason:
Post-condition failed:
false
ACM SIGPLAN Erlang Workshop (2016) QC to UML 21 / 27
Interpreting counterexamples
Shrinking
Shrinking xxxxxxxx..x.x..xx..xxxxxxxxxx(7 times)
[{set,{var,1},{call,centralita,start,[]}},
{set,{var,2},{call,centralita,activate,[-24]}},
{set,{var,3},{call,centralita,activate,[20]}},
{set,{var,4},{call,centralita,call,[-24,20]}},
{set,{var,5},{call,centralita,nsa,[]}}]
centralita:start() -> ok
centralita:activate(-24) -> ok
centralita:activate(20) -> ok
centralita:call(-24, 20) -> ok
centralita:nsa() -> {ok, [[]]}
Reason:
Post-condition failed:
false
false
ACM SIGPLAN Erlang Workshop (2016) QC to UML 22 / 27
Interpreting counterexamples
Graphical representation
ACM SIGPLAN Erlang Workshop (2016) QC to UML 23 / 27
From counterexamples to UML sequences
ACM SIGPLAN Erlang Workshop (2016) QC to UML 24 / 27
Future ideas
Test it with really long failing sequences
(send us your counterexamples!!)
Test it with components, mocks, etc.
Combine info from QC with EVM traces so that UML contains
more info of what happens “behind the scenes”
Translate PlantUML state diagrams into stateful test models
ACM SIGPLAN Erlang Workshop (2016) QC to UML 25 / 27
Questions?
Tool and samples available at: BitBucket git repo.
Extended version of paper: ask me!
Audience ! thanks
@lauramcastro
lcastro@udc.es
ACM SIGPLAN Erlang Workshop (2016) QC to UML 26 / 27
Credits
Image authoring attribution (in order of appearance)
‘Senior couple having fun’, by Be-Younger.com.
‘Nikola Tesla with his equipment’, by Dickenson V. Alley.
‘Pizza guy’, by Nico Kaiser.
‘Servicemen repairing buses in Ubon’, by Ilya Plekhanov.
‘Is lucid dreaming actually real?’, by HowToLucid.com.
‘The Almost Useless Machine’, by tinkerlog.
‘Sailors practice repairing leaks’, by US Navy.
‘Gollum close up’, by mellisea.
‘Blue screen at Portal’s presentation during Game Developers Conference 2010’, by Official GDC.
‘Lilly’s crying’, by Green Smoothies Rock!
‘Child receives ear exam’, by World Bank Photo Collection.
ACM SIGPLAN Erlang Workshop (2016) QC to UML 27 / 27

More Related Content

What's hot

Scilab Modelica conference 20150921
Scilab Modelica conference 20150921Scilab Modelica conference 20150921
Scilab Modelica conference 20150921
Scilab
 
Forelasning4
Forelasning4Forelasning4
Forelasning4
Memo Love
 
working with matrices in r
working with matrices in rworking with matrices in r
working with matrices in r
Kavitha Chandramohan
 
Matlab tut2
Matlab tut2Matlab tut2
Matlab tut2
Vinnu Vinay
 
Massif - the love child of Matlab Simulink and Eclipse
Massif - the love child of Matlab Simulink and EclipseMassif - the love child of Matlab Simulink and Eclipse
Massif - the love child of Matlab Simulink and Eclipse
Ákos Horváth
 
Scilab for very beginners
Scilab for very beginnersScilab for very beginners
Scilab for very beginners
Scilab
 
Working with Simulink
Working with SimulinkWorking with Simulink
Working with Simulink
thesisncode
 
MathWorks and Freescale Cup - Working with MATLAB & Simulink
MathWorks and Freescale Cup - Working with MATLAB & SimulinkMathWorks and Freescale Cup - Working with MATLAB & Simulink
MathWorks and Freescale Cup - Working with MATLAB & Simulink
Joachim Schlosser
 
Scilab vs matlab
Scilab vs matlabScilab vs matlab
Scilab vs matlab
Dadan Bagenda
 
Automated Testing of Hybrid Simulink/Stateflow Controllers
Automated Testing of Hybrid Simulink/Stateflow ControllersAutomated Testing of Hybrid Simulink/Stateflow Controllers
Automated Testing of Hybrid Simulink/Stateflow Controllers
Lionel Briand
 
TMPA-2017: Modeling of PLC-programs by High-level Coloured Petri Nets
TMPA-2017: Modeling of PLC-programs by High-level Coloured Petri NetsTMPA-2017: Modeling of PLC-programs by High-level Coloured Petri Nets
TMPA-2017: Modeling of PLC-programs by High-level Coloured Petri Nets
Iosif Itkin
 
Reactive cocoa 101改
Reactive cocoa 101改Reactive cocoa 101改
Reactive cocoa 101改
Jeff Lee
 

What's hot (12)

Scilab Modelica conference 20150921
Scilab Modelica conference 20150921Scilab Modelica conference 20150921
Scilab Modelica conference 20150921
 
Forelasning4
Forelasning4Forelasning4
Forelasning4
 
working with matrices in r
working with matrices in rworking with matrices in r
working with matrices in r
 
Matlab tut2
Matlab tut2Matlab tut2
Matlab tut2
 
Massif - the love child of Matlab Simulink and Eclipse
Massif - the love child of Matlab Simulink and EclipseMassif - the love child of Matlab Simulink and Eclipse
Massif - the love child of Matlab Simulink and Eclipse
 
Scilab for very beginners
Scilab for very beginnersScilab for very beginners
Scilab for very beginners
 
Working with Simulink
Working with SimulinkWorking with Simulink
Working with Simulink
 
MathWorks and Freescale Cup - Working with MATLAB & Simulink
MathWorks and Freescale Cup - Working with MATLAB & SimulinkMathWorks and Freescale Cup - Working with MATLAB & Simulink
MathWorks and Freescale Cup - Working with MATLAB & Simulink
 
Scilab vs matlab
Scilab vs matlabScilab vs matlab
Scilab vs matlab
 
Automated Testing of Hybrid Simulink/Stateflow Controllers
Automated Testing of Hybrid Simulink/Stateflow ControllersAutomated Testing of Hybrid Simulink/Stateflow Controllers
Automated Testing of Hybrid Simulink/Stateflow Controllers
 
TMPA-2017: Modeling of PLC-programs by High-level Coloured Petri Nets
TMPA-2017: Modeling of PLC-programs by High-level Coloured Petri NetsTMPA-2017: Modeling of PLC-programs by High-level Coloured Petri Nets
TMPA-2017: Modeling of PLC-programs by High-level Coloured Petri Nets
 
Reactive cocoa 101改
Reactive cocoa 101改Reactive cocoa 101改
Reactive cocoa 101改
 

Viewers also liked

Presentacion Corporativa CITIC
Presentacion Corporativa CITICPresentacion Corporativa CITIC
Black book pooja (1)
Black book pooja (1)Black book pooja (1)
Black book pooja (1)
Vishal lakhani
 
Hero bpo
Hero bpoHero bpo
Hero bpo
TOJAIN
 
Gestión de pruebas en desarrollo software
Gestión de pruebas en desarrollo softwareGestión de pruebas en desarrollo software
Gestión de pruebas en desarrollo software
Laura M. Castro
 
Student feedback system
Student feedback systemStudent feedback system
Student feedback system
Akshay Surve
 
INTRODUCTION TO UML DIAGRAMS
INTRODUCTION TO UML DIAGRAMSINTRODUCTION TO UML DIAGRAMS
INTRODUCTION TO UML DIAGRAMS
Ashita Agrawal
 
Project Report of Faculty feedback system
Project Report of Faculty feedback systemProject Report of Faculty feedback system
Project Report of Faculty feedback system
BalajeeSofTech
 
Generate a report using crystal reports in visual studio 2010 code project
Generate a report using crystal reports in visual studio 2010   code projectGenerate a report using crystal reports in visual studio 2010   code project
Generate a report using crystal reports in visual studio 2010 code project
Kaing Menglieng
 
Project report format
Project report formatProject report format
Project report format
Tejal Gavankar
 
Blood Bank Management System (including UML diagrams)
Blood Bank Management System (including UML diagrams)Blood Bank Management System (including UML diagrams)
Blood Bank Management System (including UML diagrams)
Harshil Darji
 
5.state diagrams
5.state diagrams5.state diagrams
5.state diagrams
APU
 
State diagram railway reservation system
State diagram railway reservation systemState diagram railway reservation system
State diagram railway reservation systemmuthumeenakshim
 

Viewers also liked (12)

Presentacion Corporativa CITIC
Presentacion Corporativa CITICPresentacion Corporativa CITIC
Presentacion Corporativa CITIC
 
Black book pooja (1)
Black book pooja (1)Black book pooja (1)
Black book pooja (1)
 
Hero bpo
Hero bpoHero bpo
Hero bpo
 
Gestión de pruebas en desarrollo software
Gestión de pruebas en desarrollo softwareGestión de pruebas en desarrollo software
Gestión de pruebas en desarrollo software
 
Student feedback system
Student feedback systemStudent feedback system
Student feedback system
 
INTRODUCTION TO UML DIAGRAMS
INTRODUCTION TO UML DIAGRAMSINTRODUCTION TO UML DIAGRAMS
INTRODUCTION TO UML DIAGRAMS
 
Project Report of Faculty feedback system
Project Report of Faculty feedback systemProject Report of Faculty feedback system
Project Report of Faculty feedback system
 
Generate a report using crystal reports in visual studio 2010 code project
Generate a report using crystal reports in visual studio 2010   code projectGenerate a report using crystal reports in visual studio 2010   code project
Generate a report using crystal reports in visual studio 2010 code project
 
Project report format
Project report formatProject report format
Project report format
 
Blood Bank Management System (including UML diagrams)
Blood Bank Management System (including UML diagrams)Blood Bank Management System (including UML diagrams)
Blood Bank Management System (including UML diagrams)
 
5.state diagrams
5.state diagrams5.state diagrams
5.state diagrams
 
State diagram railway reservation system
State diagram railway reservation systemState diagram railway reservation system
State diagram railway reservation system
 

Similar to Automatic generation of UML sequence diagrams from test counterexamples

matlab basics and Simulink for beginners
matlab basics and Simulink for beginnersmatlab basics and Simulink for beginners
matlab basics and Simulink for beginners
A Rajendran Jps
 
ADVANCED WORKSHOP IN MATLAB
ADVANCED WORKSHOP IN MATLABADVANCED WORKSHOP IN MATLAB
ADVANCED WORKSHOP IN MATLAB
Saeed J. Almalowi,PhD
 
Overview of RTaW SysML-Companion
Overview of RTaW SysML-Companion Overview of RTaW SysML-Companion
Overview of RTaW SysML-Companion
RealTime-at-Work (RTaW)
 
Seminar on MATLAB
Seminar on MATLABSeminar on MATLAB
Seminar on MATLAB
Dharmesh Tank
 
Summer training matlab
Summer training matlab Summer training matlab
Summer training matlab
Arshit Rai
 
Summer training matlab
Summer training matlab Summer training matlab
Summer training matlab
Arshit Rai
 
Simulation lab
Simulation labSimulation lab
Simulation lab
Ezhilarasi Nagarajan
 
Learning Kafka Streams with Scala
Learning Kafka Streams with ScalaLearning Kafka Streams with Scala
Learning Kafka Streams with Scala
Knoldus Inc.
 
Chrom works introduction
Chrom works   introductionChrom works   introduction
Chrom works introduction
Soo Kim
 
The Next Generation of Data Processing and Open Source
The Next Generation of Data Processing and Open SourceThe Next Generation of Data Processing and Open Source
The Next Generation of Data Processing and Open Source
DataWorks Summit/Hadoop Summit
 
welcometosimscale-companypresentationv2-160420145834 (1)
welcometosimscale-companypresentationv2-160420145834 (1)welcometosimscale-companypresentationv2-160420145834 (1)
welcometosimscale-companypresentationv2-160420145834 (1)
Kristina Lowe
 
Welcome to SimScale
Welcome to SimScaleWelcome to SimScale
Welcome to SimScale
Sijia Ma
 
Efficient and Advanced Omniscient Debugging for xDSMLs (SLE 2015)
Efficient and Advanced Omniscient Debugging for xDSMLs (SLE 2015)Efficient and Advanced Omniscient Debugging for xDSMLs (SLE 2015)
Efficient and Advanced Omniscient Debugging for xDSMLs (SLE 2015)
Benoit Combemale
 
ChromWorks Introduction
ChromWorks IntroductionChromWorks Introduction
ChromWorks Introduction
Soo-il Kim
 
ChromWorks Introduction
ChromWorks IntroductionChromWorks Introduction
ChromWorks Introduction
Soo-il Kim
 
Simple MATLAB Projects for Students Research Assistance
Simple MATLAB Projects for Students Research AssistanceSimple MATLAB Projects for Students Research Assistance
Simple MATLAB Projects for Students Research Assistance
Matlab Simulation
 
Using matlab simulink
Using matlab simulinkUsing matlab simulink
Using matlab simulink
Marilyn Barragán Castañeda
 
Using matlab simulink
Using matlab simulinkUsing matlab simulink
Using matlab simulink
Marilyn Barragán Castañeda
 
An Introduction to MATLAB with Worked Examples
An Introduction to MATLAB with Worked ExamplesAn Introduction to MATLAB with Worked Examples
An Introduction to MATLAB with Worked Examples
eAssessment in Practice Symposium
 
Ch1
Ch1Ch1

Similar to Automatic generation of UML sequence diagrams from test counterexamples (20)

matlab basics and Simulink for beginners
matlab basics and Simulink for beginnersmatlab basics and Simulink for beginners
matlab basics and Simulink for beginners
 
ADVANCED WORKSHOP IN MATLAB
ADVANCED WORKSHOP IN MATLABADVANCED WORKSHOP IN MATLAB
ADVANCED WORKSHOP IN MATLAB
 
Overview of RTaW SysML-Companion
Overview of RTaW SysML-Companion Overview of RTaW SysML-Companion
Overview of RTaW SysML-Companion
 
Seminar on MATLAB
Seminar on MATLABSeminar on MATLAB
Seminar on MATLAB
 
Summer training matlab
Summer training matlab Summer training matlab
Summer training matlab
 
Summer training matlab
Summer training matlab Summer training matlab
Summer training matlab
 
Simulation lab
Simulation labSimulation lab
Simulation lab
 
Learning Kafka Streams with Scala
Learning Kafka Streams with ScalaLearning Kafka Streams with Scala
Learning Kafka Streams with Scala
 
Chrom works introduction
Chrom works   introductionChrom works   introduction
Chrom works introduction
 
The Next Generation of Data Processing and Open Source
The Next Generation of Data Processing and Open SourceThe Next Generation of Data Processing and Open Source
The Next Generation of Data Processing and Open Source
 
welcometosimscale-companypresentationv2-160420145834 (1)
welcometosimscale-companypresentationv2-160420145834 (1)welcometosimscale-companypresentationv2-160420145834 (1)
welcometosimscale-companypresentationv2-160420145834 (1)
 
Welcome to SimScale
Welcome to SimScaleWelcome to SimScale
Welcome to SimScale
 
Efficient and Advanced Omniscient Debugging for xDSMLs (SLE 2015)
Efficient and Advanced Omniscient Debugging for xDSMLs (SLE 2015)Efficient and Advanced Omniscient Debugging for xDSMLs (SLE 2015)
Efficient and Advanced Omniscient Debugging for xDSMLs (SLE 2015)
 
ChromWorks Introduction
ChromWorks IntroductionChromWorks Introduction
ChromWorks Introduction
 
ChromWorks Introduction
ChromWorks IntroductionChromWorks Introduction
ChromWorks Introduction
 
Simple MATLAB Projects for Students Research Assistance
Simple MATLAB Projects for Students Research AssistanceSimple MATLAB Projects for Students Research Assistance
Simple MATLAB Projects for Students Research Assistance
 
Using matlab simulink
Using matlab simulinkUsing matlab simulink
Using matlab simulink
 
Using matlab simulink
Using matlab simulinkUsing matlab simulink
Using matlab simulink
 
An Introduction to MATLAB with Worked Examples
An Introduction to MATLAB with Worked ExamplesAn Introduction to MATLAB with Worked Examples
An Introduction to MATLAB with Worked Examples
 
Ch1
Ch1Ch1
Ch1
 

More from Laura M. Castro

Ola, ChatGPT... que carreira sería boa para min?
Ola, ChatGPT... que carreira sería boa para min?Ola, ChatGPT... que carreira sería boa para min?
Ola, ChatGPT... que carreira sería boa para min?
Laura M. Castro
 
IAs xerativas e nesgos de xénero
IAs xerativas e nesgos de xéneroIAs xerativas e nesgos de xénero
IAs xerativas e nesgos de xénero
Laura M. Castro
 
As intelixencias artificiais como xeradoras de cultura: exploración dos nesgo...
As intelixencias artificiais como xeradoras de cultura: exploración dos nesgo...As intelixencias artificiais como xeradoras de cultura: exploración dos nesgo...
As intelixencias artificiais como xeradoras de cultura: exploración dos nesgo...
Laura M. Castro
 
David vs. Goliat: lecciones aprendidas de una experiencia fallida de adopción...
David vs. Goliat: lecciones aprendidas de una experiencia fallida de adopción...David vs. Goliat: lecciones aprendidas de una experiencia fallida de adopción...
David vs. Goliat: lecciones aprendidas de una experiencia fallida de adopción...
Laura M. Castro
 
Why on Earth would I test if I have to just "Let it crash"?
Why on Earth would I test if I have to just "Let it crash"?Why on Earth would I test if I have to just "Let it crash"?
Why on Earth would I test if I have to just "Let it crash"?
Laura M. Castro
 
How the BEAM will change your mind
How the BEAM will change your mindHow the BEAM will change your mind
How the BEAM will change your mind
Laura M. Castro
 
Elixir vs Java
Elixir vs JavaElixir vs Java
Elixir vs Java
Laura M. Castro
 
So I used Erlang... is my system as scalable as they say it'd be?
So I used Erlang... is my system as scalable as they say it'd be?So I used Erlang... is my system as scalable as they say it'd be?
So I used Erlang... is my system as scalable as they say it'd be?
Laura M. Castro
 
Elixir: the not-so-hidden path to Erlang
Elixir: the not-so-hidden path to ErlangElixir: the not-so-hidden path to Erlang
Elixir: the not-so-hidden path to Erlang
Laura M. Castro
 
Making property-based testing easier to read for humans
Making property-based testing easier to read for humansMaking property-based testing easier to read for humans
Making property-based testing easier to read for humans
Laura M. Castro
 
Erlang as a supporting technology for teaching Software Architecture
Erlang as a supporting technology for teaching Software ArchitectureErlang as a supporting technology for teaching Software Architecture
Erlang as a supporting technology for teaching Software Architecture
Laura M. Castro
 
A Backpack to go the Extra-Functional Mile (a hitched hike by the PROWESS pro...
A Backpack to go the Extra-Functional Mile (a hitched hike by the PROWESS pro...A Backpack to go the Extra-Functional Mile (a hitched hike by the PROWESS pro...
A Backpack to go the Extra-Functional Mile (a hitched hike by the PROWESS pro...
Laura M. Castro
 
Experiencias Industriales con Programación Declarativa
Experiencias Industriales con Programación DeclarativaExperiencias Industriales con Programación Declarativa
Experiencias Industriales con Programación Declarativa
Laura M. Castro
 
Functional programming goes to Hollywood... and around the world!
Functional programming goes to Hollywood... and around the world!Functional programming goes to Hollywood... and around the world!
Functional programming goes to Hollywood... and around the world!
Laura M. Castro
 
Failover and takeover contingency mechanisms for network partition and node f...
Failover and takeover contingency mechanisms for network partition and node f...Failover and takeover contingency mechanisms for network partition and node f...
Failover and takeover contingency mechanisms for network partition and node f...
Laura M. Castro
 
Editing documents with LaTeX
Editing documents with LaTeXEditing documents with LaTeX
Editing documents with LaTeX
Laura M. Castro
 
Introdución á edición de textos con LaTeX
Introdución á edición de textos con LaTeXIntrodución á edición de textos con LaTeX
Introdución á edición de textos con LaTeX
Laura M. Castro
 
Edición de textos con LaTeX
Edición de textos con LaTeXEdición de textos con LaTeX
Edición de textos con LaTeX
Laura M. Castro
 
Edición de textos con LaTeX
Edición de textos con LaTeXEdición de textos con LaTeX
Edición de textos con LaTeX
Laura M. Castro
 
Improving software development using Erlang/OTP
Improving software development using Erlang/OTPImproving software development using Erlang/OTP
Improving software development using Erlang/OTP
Laura M. Castro
 

More from Laura M. Castro (20)

Ola, ChatGPT... que carreira sería boa para min?
Ola, ChatGPT... que carreira sería boa para min?Ola, ChatGPT... que carreira sería boa para min?
Ola, ChatGPT... que carreira sería boa para min?
 
IAs xerativas e nesgos de xénero
IAs xerativas e nesgos de xéneroIAs xerativas e nesgos de xénero
IAs xerativas e nesgos de xénero
 
As intelixencias artificiais como xeradoras de cultura: exploración dos nesgo...
As intelixencias artificiais como xeradoras de cultura: exploración dos nesgo...As intelixencias artificiais como xeradoras de cultura: exploración dos nesgo...
As intelixencias artificiais como xeradoras de cultura: exploración dos nesgo...
 
David vs. Goliat: lecciones aprendidas de una experiencia fallida de adopción...
David vs. Goliat: lecciones aprendidas de una experiencia fallida de adopción...David vs. Goliat: lecciones aprendidas de una experiencia fallida de adopción...
David vs. Goliat: lecciones aprendidas de una experiencia fallida de adopción...
 
Why on Earth would I test if I have to just "Let it crash"?
Why on Earth would I test if I have to just "Let it crash"?Why on Earth would I test if I have to just "Let it crash"?
Why on Earth would I test if I have to just "Let it crash"?
 
How the BEAM will change your mind
How the BEAM will change your mindHow the BEAM will change your mind
How the BEAM will change your mind
 
Elixir vs Java
Elixir vs JavaElixir vs Java
Elixir vs Java
 
So I used Erlang... is my system as scalable as they say it'd be?
So I used Erlang... is my system as scalable as they say it'd be?So I used Erlang... is my system as scalable as they say it'd be?
So I used Erlang... is my system as scalable as they say it'd be?
 
Elixir: the not-so-hidden path to Erlang
Elixir: the not-so-hidden path to ErlangElixir: the not-so-hidden path to Erlang
Elixir: the not-so-hidden path to Erlang
 
Making property-based testing easier to read for humans
Making property-based testing easier to read for humansMaking property-based testing easier to read for humans
Making property-based testing easier to read for humans
 
Erlang as a supporting technology for teaching Software Architecture
Erlang as a supporting technology for teaching Software ArchitectureErlang as a supporting technology for teaching Software Architecture
Erlang as a supporting technology for teaching Software Architecture
 
A Backpack to go the Extra-Functional Mile (a hitched hike by the PROWESS pro...
A Backpack to go the Extra-Functional Mile (a hitched hike by the PROWESS pro...A Backpack to go the Extra-Functional Mile (a hitched hike by the PROWESS pro...
A Backpack to go the Extra-Functional Mile (a hitched hike by the PROWESS pro...
 
Experiencias Industriales con Programación Declarativa
Experiencias Industriales con Programación DeclarativaExperiencias Industriales con Programación Declarativa
Experiencias Industriales con Programación Declarativa
 
Functional programming goes to Hollywood... and around the world!
Functional programming goes to Hollywood... and around the world!Functional programming goes to Hollywood... and around the world!
Functional programming goes to Hollywood... and around the world!
 
Failover and takeover contingency mechanisms for network partition and node f...
Failover and takeover contingency mechanisms for network partition and node f...Failover and takeover contingency mechanisms for network partition and node f...
Failover and takeover contingency mechanisms for network partition and node f...
 
Editing documents with LaTeX
Editing documents with LaTeXEditing documents with LaTeX
Editing documents with LaTeX
 
Introdución á edición de textos con LaTeX
Introdución á edición de textos con LaTeXIntrodución á edición de textos con LaTeX
Introdución á edición de textos con LaTeX
 
Edición de textos con LaTeX
Edición de textos con LaTeXEdición de textos con LaTeX
Edición de textos con LaTeX
 
Edición de textos con LaTeX
Edición de textos con LaTeXEdición de textos con LaTeX
Edición de textos con LaTeX
 
Improving software development using Erlang/OTP
Improving software development using Erlang/OTPImproving software development using Erlang/OTP
Improving software development using Erlang/OTP
 

Recently uploaded

Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Malak Abu Hammad
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
Matthew Sinclair
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
Uni Systems S.M.S.A.
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
innovationoecd
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
Kumud Singh
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
Neo4j
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
Quotidiano Piemontese
 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
James Anderson
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems S.M.S.A.
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
Daiki Mogmet Ito
 
20 Comprehensive Checklist of Designing and Developing a Website
20 Comprehensive Checklist of Designing and Developing a Website20 Comprehensive Checklist of Designing and Developing a Website
20 Comprehensive Checklist of Designing and Developing a Website
Pixlogix Infotech
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
名前 です男
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
mikeeftimakis1
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Speck&Tech
 
Introducing Milvus Lite: Easy-to-Install, Easy-to-Use vector database for you...
Introducing Milvus Lite: Easy-to-Install, Easy-to-Use vector database for you...Introducing Milvus Lite: Easy-to-Install, Easy-to-Use vector database for you...
Introducing Milvus Lite: Easy-to-Install, Easy-to-Use vector database for you...
Zilliz
 
Large Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial ApplicationsLarge Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial Applications
Rohit Gautam
 
Data structures and Algorithms in Python.pdf
Data structures and Algorithms in Python.pdfData structures and Algorithms in Python.pdf
Data structures and Algorithms in Python.pdf
TIPNGVN2
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
Neo4j
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Aggregage
 

Recently uploaded (20)

Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
 
20 Comprehensive Checklist of Designing and Developing a Website
20 Comprehensive Checklist of Designing and Developing a Website20 Comprehensive Checklist of Designing and Developing a Website
20 Comprehensive Checklist of Designing and Developing a Website
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
 
Introducing Milvus Lite: Easy-to-Install, Easy-to-Use vector database for you...
Introducing Milvus Lite: Easy-to-Install, Easy-to-Use vector database for you...Introducing Milvus Lite: Easy-to-Install, Easy-to-Use vector database for you...
Introducing Milvus Lite: Easy-to-Install, Easy-to-Use vector database for you...
 
Large Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial ApplicationsLarge Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial Applications
 
Data structures and Algorithms in Python.pdf
Data structures and Algorithms in Python.pdfData structures and Algorithms in Python.pdf
Data structures and Algorithms in Python.pdf
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
 

Automatic generation of UML sequence diagrams from test counterexamples

  • 1. Automatic Generation of UML Sequence Diagrams from Test Counterexamples Daniel Carballa1 , Laura M. Castro1 1Universidade da Coruña (Spain) ACM SIGPLAN Erlang Workshop Nara, 23th September 2016 ACM SIGPLAN Erlang Workshop (2016) QC to UML 1 / 27
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15. Erlang ecosystem ACM SIGPLAN Erlang Workshop (2016) QC to UML 15 / 27
  • 16. Erlang ecosystem ACM SIGPLAN Erlang Workshop (2016) QC to UML 15 / 27
  • 17. Testing with QuickCheck It’s so great! ACM SIGPLAN Erlang Workshop (2016) QC to UML 16 / 27
  • 18. Testing with QuickCheck It’s so great... when everything works! :) > eqc:quickcheck(eqc:testing_time(5,module:property())). ............................................................................... .....................(x10)..................................................... ...............................................(x100).......................... .......................................................................(x1000). ............................................................................... ....................(x10000)................................................... .............................................(x1000).....(x100)......(x1).. Time limit reached: 5.0 seconds. OK, passed 1076702 tests true ACM SIGPLAN Erlang Workshop (2016) QC to UML 16 / 27
  • 19. Testing with QuickCheck We know the two main challenges are: 1 Writing the right property/s and/or model/s, data generators ACM SIGPLAN Erlang Workshop (2016) QC to UML 17 / 27
  • 20. Testing with QuickCheck We know the two main challenges are: 1 Writing the right property/s and/or model/s, data generators Graphical editing of models Automatic inference of data generators Translation of properties and models into semi-natural language ACM SIGPLAN Erlang Workshop (2016) QC to UML 17 / 27
  • 21. Testing with QuickCheck We know the two main challenges are: 1 Writing the right property/s and/or model/s, data generators Graphical editing of models Automatic inference of data generators Translation of properties and models into semi-natural language 2 Fixing the bug(s)! ACM SIGPLAN Erlang Workshop (2016) QC to UML 17 / 27
  • 22. Testing with QuickCheck We know the two main challenges are: 1 Writing the right property/s and/or model/s, data generators Graphical editing of models Automatic inference of data generators Translation of properties and models into semi-natural language 2 Fixing the bug(s)! (i.e. interpreting counterexamples) ACM SIGPLAN Erlang Workshop (2016) QC to UML 17 / 27
  • 23. Testing with QuickCheck We know the two main challenges are: 1 Writing the right property/s and/or model/s, data generators Graphical editing of models Automatic inference of data generators Translation of properties and models into semi-natural language 2 Fixing the bug(s)! (i.e. interpreting counterexamples) Shrinking!! ACM SIGPLAN Erlang Workshop (2016) QC to UML 17 / 27
  • 24. Example: phone exchange start() -> ok activate(PhoneNumber) -> ok deactivate(PhoneNumber) -> ok call(CallerPhoneNumber,CalleePhoneNumber) -> ok list() -> {ok,[PhoneNumbers]} nsa() -> {ok,[OnGoingPhoneCalls]} stop() -> ok ACM SIGPLAN Erlang Workshop (2016) QC to UML 18 / 27
  • 25. Example: phone exchange start() -> ok activate(PhoneNumber) -> ok deactivate(PhoneNumber) -> ok call(CallerPhoneNumber,CalleePhoneNumber) -> ok list() -> {ok,[PhoneNumbers]} nsa() -> {ok,[OnGoingPhoneCalls]} stop() -> ok ACM SIGPLAN Erlang Workshop (2016) QC to UML 19 / 27
  • 26. Interpreting counterexamples eqc:quickcheck(eqc:numtests(200,centralita_statem:prop_centralita())). ........................................................................................... .........(x10).(x1).........Failed! After 120 tests. [{set,{var,1},{call,centralita,start,[]}}, {set,{var,2},{call,centralita,activate,[-24]}}, {set,{var,3},{call,centralita,deactivate,[9]}}, {set,{var,4},{call,centralita,list,[]}}, {set,{var,5},{call,centralita,nsa,[]}}, {set,{var,6},{call,centralita,nsa,[]}}, {set,{var,7},{call,centralita,activate,[-24]}}, {set,{var,8},{call,centralita,activate,[20]}}, {set,{var,9},{call,centralita,activate,[38]}}, {set,{var,10},{call,centralita,call,[-24,20]}}, {set,{var,11},{call,centralita,list,[]}}, {set,{var,12},{call,centralita,activate,[-27]}}, {set,{var,13},{call,centralita,list,[]}}, {set,{var,14},{call,centralita,nsa,[]}}, {set,{var,15},{call,centralita,call,[38,20]}}] ACM SIGPLAN Erlang Workshop (2016) QC to UML 20 / 27
  • 27. Interpreting counterexamples centralita:start() -> ok centralita:activate(-24) -> ok centralita:deactivate(9) -> ok centralita:list() -> {ok, [-24]} centralita:nsa() -> {ok, []} centralita:nsa() -> {ok, []} centralita:activate(-24) -> ok centralita:activate(20) -> ok centralita:activate(38) -> ok centralita:call(-24, 20) -> ok centralita:list() -> {ok, [38, 20, -24]} centralita:activate(-27) -> ok centralita:list() -> {ok, [-27, 38, 20, -24]} centralita:nsa() -> {ok, [[]]} Reason: Post-condition failed: false ACM SIGPLAN Erlang Workshop (2016) QC to UML 21 / 27
  • 28. Interpreting counterexamples Shrinking Shrinking xxxxxxxx..x.x..xx..xxxxxxxxxx(7 times) [{set,{var,1},{call,centralita,start,[]}}, {set,{var,2},{call,centralita,activate,[-24]}}, {set,{var,3},{call,centralita,activate,[20]}}, {set,{var,4},{call,centralita,call,[-24,20]}}, {set,{var,5},{call,centralita,nsa,[]}}] centralita:start() -> ok centralita:activate(-24) -> ok centralita:activate(20) -> ok centralita:call(-24, 20) -> ok centralita:nsa() -> {ok, [[]]} Reason: Post-condition failed: false false ACM SIGPLAN Erlang Workshop (2016) QC to UML 22 / 27
  • 29. Interpreting counterexamples Graphical representation ACM SIGPLAN Erlang Workshop (2016) QC to UML 23 / 27
  • 30. From counterexamples to UML sequences ACM SIGPLAN Erlang Workshop (2016) QC to UML 24 / 27
  • 31. Future ideas Test it with really long failing sequences (send us your counterexamples!!) Test it with components, mocks, etc. Combine info from QC with EVM traces so that UML contains more info of what happens “behind the scenes” Translate PlantUML state diagrams into stateful test models ACM SIGPLAN Erlang Workshop (2016) QC to UML 25 / 27
  • 32. Questions? Tool and samples available at: BitBucket git repo. Extended version of paper: ask me! Audience ! thanks @lauramcastro lcastro@udc.es ACM SIGPLAN Erlang Workshop (2016) QC to UML 26 / 27
  • 33. Credits Image authoring attribution (in order of appearance) ‘Senior couple having fun’, by Be-Younger.com. ‘Nikola Tesla with his equipment’, by Dickenson V. Alley. ‘Pizza guy’, by Nico Kaiser. ‘Servicemen repairing buses in Ubon’, by Ilya Plekhanov. ‘Is lucid dreaming actually real?’, by HowToLucid.com. ‘The Almost Useless Machine’, by tinkerlog. ‘Sailors practice repairing leaks’, by US Navy. ‘Gollum close up’, by mellisea. ‘Blue screen at Portal’s presentation during Game Developers Conference 2010’, by Official GDC. ‘Lilly’s crying’, by Green Smoothies Rock! ‘Child receives ear exam’, by World Bank Photo Collection. ACM SIGPLAN Erlang Workshop (2016) QC to UML 27 / 27