Declarative Specification of FSM-Inference Algorithms
Ivan Beschastnikh Yuriy Brun Jenny Abrahamson Michael D. Ernst Arvind Krishnamurthy
University of Washington
- UMass. Amherst
Observations
InvariMint
Model Declarative specification
Declarative Specification of FSM-Inference Algorithms InvariMint - - PowerPoint PPT Presentation
Declarative Specification of FSM-Inference Algorithms InvariMint Observations Model Declarative specification Ivan Beschastnikh Yuriy Brun Jenny Abrahamson Michael D. Ernst University of Washington UMass. Amherst Arvind Krishnamurthy
Declarative Specification of FSM-Inference Algorithms
Ivan Beschastnikh Yuriy Brun Jenny Abrahamson Michael D. Ernst Arvind Krishnamurthy
University of Washington
Observations
InvariMint
Model Declarative specification
University of Washington Ivan Beschastnikh
FSM-inference
Observations
...
FSM Model
2
FSM-inference algorithm
Invalid Write Read Only
University of Washington Ivan Beschastnikh
FSM-inference
Observations
...
Model
3
FSM-inference algorithm
Invalid Write Read Only
Applications:
...
Mariani et al. ICSE 2007 Cook et al. TSE 1998 Dallmeier et al. ASE 2009 Beschastnikh et al. FSE 2011
University of Washington Ivan Beschastnikh
FSM-inference
Observations
...
Model
4
FSM-inference algorithm
Invalid Write Read Only
Applications:
...
Mariani et al. ICSE 2007 Cook et al. TSE 1998 Dallmeier et al. ASE 2009 Beschastnikh et al. FSE 2011
University of Washington Ivan Beschastnikh
FSM-inference
Observations
...
Model
5
FSM-inference algorithm
Invalid Write Read Only
Applications:
...
Mariani et al. ICSE 2007 Cook et al. TSE 1998 Dallmeier et al. ASE 2009 Beschastnikh et al. FSE 2011
...
src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 1, dst : 2, timestamp : 19, type : commitUniversity of Washington Ivan Beschastnikh
FSM-inference in prior work
Observations
...
Model
6
Model inference
Invalid Write Read Only
Prior work:
Mariani et al. ICSE 2007 Cook et al. TSE 1998 Dallmeier et al. ASE 2009 Beschastnikh et al. FSE 2011
Observations
src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 1, dst : 2, timestamp : 19, type : commitUniversity of Washington Ivan Beschastnikh
FSM-inference in prior work
...
7
Inference algorithm
Invalid Write Read Only
...
Prior work:
Mariani et al. ICSE 2007 Cook et al. TSE 1998 Dallmeier et al. ASE 2009 Beschastnikh et al. FSE 2011
Model
University of Washington Ivan Beschastnikh
8
Model
FSM-inference representations
src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commitObservations
Invalid Write Read OnlyInference algorithm
University of Washington Ivan Beschastnikh
9
Model Code
FSM-inference representations
src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commitObservations
Invalid Write Read OnlyUniversity of Washington Ivan Beschastnikh
FSM-inference representations
10
Code Model
src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commitObservations
Invalid Write Read OnlyUniversity of Washington Ivan Beschastnikh
11
Code
Pseudo-code
FSM-inference representations
Model
src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commitObservations
Invalid Write Read OnlyPseudo-code
University of Washington Ivan Beschastnikh
12
...
Code
FSM-inference representations
Model
src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commitObservations
Invalid Write Read OnlyPseudo-code
University of Washington Ivan Beschastnikh
13
...
Code
x Transparency x Extensibility
Limitations:
Model
src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commitObservations
Invalid Write Read OnlySet theory
Pseudo-code
University of Washington Ivan Beschastnikh
15
...
Code
Model
src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commitObservations
Invalid Write Read OnlyObserved trace
Trace admitted by the model?
x Transparency x Extensibility
Limitations:
Set theory
Pseudo-code
University of Washington Ivan Beschastnikh
17
...
Code
Model
src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commitObservations
Invalid Write Read OnlyWhy is this execution admitted?
x Transparency x Extensibility
Limitations:
Set theory
Pseudo-code
University of Washington Ivan Beschastnikh
18
...
Code
FSM-inference representations
Model
src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commitObservations
Invalid Write Read OnlyBase Algorithm Feature A Feature B
How to add features to an algorithm?
x Transparency x Extensibility
Limitations:
Pseudo-code
University of Washington Ivan Beschastnikh
19
Observations Model
...
Code
FSM-inference representations
x Transparency x Extensibility
Limitations:
University of Washington Ivan Beschastnikh
23
Observations Model
Prior work: InvariMint:
Observations Model Property miner Property composition
Property Instances
Declarative specification
InvariMint: modular and declarative
University of Washington Ivan Beschastnikh
24
Observations Model
Prior work: InvariMint:
Observations Model Property miner Property composition
Property Instances
Declarative specification
InvariMint: modular and declarative
✓ Transparent ✓ Extensible
University of Washington Ivan Beschastnikh
25
Observations Model
Prior work: InvariMint:
Observations Model Property miner
Property Instances
Property types
InvariMint: modular and declarative
✓ Transparent ✓ Extensible
University of Washington Ivan Beschastnikh
Outline
26
University of Washington Ivan Beschastnikh
kTails and Synoptic overview
Observations
...
Model
27
kTails
propose commit tx-commit tx-abort abort commit abortBeschastnikh et al.
ESEC/FSE 2011
Synoptic
Biermann et al.
IEEE TC 2011
University of Washington Ivan Beschastnikh
28
propose propose abort commit tx-abort tx-abort propose propose commit abort tx-abort tx-abort propose propose commit commit tx-commit tx-commit propose propose commit commit tx-commit tx-commit propose propose commit commit tx-commit tx-commit propose propose commit abort tx-abort tx-abort propose propose commit commit tx-commit tx-commit...
kTails and Synoptic overview
c1 c3 B a1 a2 c2 2 3 1,4 a3 a4 5 c1 c3 B a2 c2 3 4 a3 a4 5 2 a1 1 c1 c3 B a2 c2 3 4 a3 5 a1 1 a4 2 c1 c3 B a1 a2 c2 3 1,4 a4 5 a3 2 a1 a3 a2 B C 1 2 3 4 a4 5 a1 a3 a2 B c1 c3 1 2 3 4 a4 5 c2 c1 c3 a1 a3 a2 a4 B c2 2 1 4 3,5 c1 c3 B a2 a4 c2 3,5 4 a1 1 a3 2 a1 B 3 1 C a3 a4 5 2 a2 4 c1 c3 B A c2 2 3,5 1,4 a1 a3 a2 a4 B C 1 2 3,5 4 a1 a2 a4 B C a3 3,5 2 1,4 a1 a2 B 1 2 3 4 a4 5 C a3 a2 a4 B C a1 a3 2 3,5 4 1 a1 a2 a4 B c1 c3 a3 c2 2 1,4 3,5 a1 a2 B C a4 a3 1,4 3 5 2 a1 a2 B C a3 a4 3 5 2 1,4 B C A 1,4 2 3,5Larger models: fewer behaviors Smaller models: more behaviors Observations Smallest model
University of Washington Ivan Beschastnikh
30
propose propose abort commit tx-abort tx-abort propose propose commit abort tx-abort tx-abort propose propose commit commit tx-commit tx-commit propose propose commit commit tx-commit tx-commit propose propose commit commit tx-commit tx-commit propose propose commit abort tx-abort tx-abort propose propose commit commit tx-commit tx-commit...
kTails(k) and Synoptic overview
c1 c3 B a1 a2 c2 2 3 1,4 a3 a4 5 c1 c3 B a2 c2 3 4 a3 a4 5 2 a1 1 c1 c3 B a2 c2 3 4 a3 5 a1 1 a4 2 c1 c3 B a1 a2 c2 3 1,4 a4 5 a3 2 a1 a3 a2 B C 1 2 3 4 a4 5 a1 a3 a2 B c1 c3 1 2 3 4 a4 5 c2 c1 c3 a1 a3 a2 a4 B c2 2 1 4 3,5 c1 c3 B a2 a4 c2 3,5 4 a1 1 a3 2 a1 B 3 1 C a3 a4 5 2 a2 4 c1 c3 B A c2 2 3,5 1,4 a1 a3 a2 a4 B C 1 2 3,5 4 a1 a2 a4 B C a3 3,5 2 1,4 a1 a2 B 1 2 3 4 a4 5 C a3 a2 a4 B C a1 a3 2 3,5 4 1 a1 a2 a4 B c1 c3 a3 c2 2 1,4 3,5 a1 a2 B C a4 a3 1,4 3 5 2 a1 a2 B C a3 a4 3 5 2 1,4 B C A 1,4 2 3,5Larger models: fewer behaviors Smaller models: more behaviors
Merging
Observations end start
Merge states followed by identical k-length execution sequences
University of Washington Ivan Beschastnikh
31
propose propose abort commit tx-abort tx-abort propose propose commit abort tx-abort tx-abort propose propose commit commit tx-commit tx-commit propose propose commit commit tx-commit tx-commit propose propose commit commit tx-commit tx-commit propose propose commit abort tx-abort tx-abort propose propose commit commit tx-commit tx-commit...
kTails(k) and Synoptic overview
c1 c3 B a1 a2 c2 2 3 1,4 a3 a4 5 c1 c3 B a2 c2 3 4 a3 a4 5 2 a1 1 c1 c3 B a2 c2 3 4 a3 5 a1 1 a4 2 c1 c3 B a1 a2 c2 3 1,4 a4 5 a3 2 a1 a3 a2 B C 1 2 3 4 a4 5 a1 a3 a2 B c1 c3 1 2 3 4 a4 5 c2 c1 c3 a1 a3 a2 a4 B c2 2 1 4 3,5 c1 c3 B a2 a4 c2 3,5 4 a1 1 a3 2 a1 B 3 1 C a3 a4 5 2 a2 4 c1 c3 B A c2 2 3,5 1,4 a1 a3 a2 a4 B C 1 2 3,5 4 a1 a2 a4 B C a3 3,5 2 1,4 a1 a2 B 1 2 3 4 a4 5 C a3 a2 a4 B C a1 a3 2 3,5 4 1 a1 a2 a4 B c1 c3 a3 c2 2 1,4 3,5 a1 a2 B C a4 a3 1,4 3 5 2 a1 a2 B C a3 a4 3 5 2 1,4 B C A 1,4 2 3,5Larger models: fewer behaviors Smaller models: more behaviors Observations end start
Merging
University of Washington Ivan Beschastnikh
31
propose propose abort commit tx-abort tx-abort propose propose commit abort tx-abort tx-abort propose propose commit commit tx-commit tx-commit propose propose commit commit tx-commit tx-commit propose propose commit commit tx-commit tx-commit propose propose commit abort tx-abort tx-abort propose propose commit commit tx-commit tx-commit...
kTails(k) and Synoptic overview
c1 c3 B a1 a2 c2 2 3 1,4 a3 a4 5 c1 c3 B a2 c2 3 4 a3 a4 5 2 a1 1 c1 c3 B a2 c2 3 4 a3 5 a1 1 a4 2 c1 c3 B a1 a2 c2 3 1,4 a4 5 a3 2 a1 a3 a2 B C 1 2 3 4 a4 5 a1 a3 a2 B c1 c3 1 2 3 4 a4 5 c2 c1 c3 a1 a3 a2 a4 B c2 2 1 4 3,5 c1 c3 B a2 a4 c2 3,5 4 a1 1 a3 2 a1 B 3 1 C a3 a4 5 2 a2 4 c1 c3 B A c2 2 3,5 1,4 a1 a3 a2 a4 B C 1 2 3,5 4 a1 a2 a4 B C a3 3,5 2 1,4 a1 a2 B 1 2 3 4 a4 5 C a3 a2 a4 B C a1 a3 2 3,5 4 1 a1 a2 a4 B c1 c3 a3 c2 2 1,4 3,5 a1 a2 B C a4 a3 1,4 3 5 2 a1 a2 B C a3 a4 3 5 2 1,4 B C A 1,4 2 3,5Larger models: fewer behaviors Smaller models: more behaviors Observations end start
Merging
can be merged
University of Washington Ivan Beschastnikh
32
propose propose abort commit tx-abort tx-abort propose propose commit abort tx-abort tx-abort propose propose commit commit tx-commit tx-commit propose propose commit commit tx-commit tx-commit propose propose commit commit tx-commit tx-commit propose propose commit abort tx-abort tx-abort propose propose commit commit tx-commit tx-commit...
kTails(k) and Synoptic overview
c1 c3 B a1 a2 c2 2 3 1,4 a3 a4 5 c1 c3 B a2 c2 3 4 a3 a4 5 2 a1 1 c1 c3 B a2 c2 3 4 a3 5 a1 1 a4 2 c1 c3 B a1 a2 c2 3 1,4 a4 5 a3 2 a1 a3 a2 B C 1 2 3 4 a4 5 a1 a3 a2 B c1 c3 1 2 3 4 a4 5 c2 c1 c3 a1 a3 a2 a4 B c2 2 1 4 3,5 c1 c3 B a2 a4 c2 3,5 4 a1 1 a3 2 a1 B 3 1 C a3 a4 5 2 a2 4 c1 c3 B A c2 2 3,5 1,4 a1 a3 a2 a4 B C 1 2 3,5 4 a1 a2 a4 B C a3 3,5 2 1,4 a1 a2 B 1 2 3 4 a4 5 C a3 a2 a4 B C a1 a3 2 3,5 4 1 a1 a2 a4 B c1 c3 a3 c2 2 1,4 3,5 a1 a2 B C a4 a3 1,4 3 5 2 a1 a2 B C a3 a4 3 5 2 1,4 B C A 1,4 2 3,5Larger models: fewer behaviors Smaller models: more behaviors Smallest model Observations end start
Splitting
Split states to eliminate executions that violate a set of mined observation invariants
t
University of Washington Ivan Beschastnikh
33
propose propose abort commit tx-abort tx-abort propose propose commit abort tx-abort tx-abort propose propose commit commit tx-commit tx-commit propose propose commit commit tx-commit tx-commit propose propose commit commit tx-commit tx-commit propose propose commit abort tx-abort tx-abort propose propose commit commit tx-commit tx-commit...
kTails(k) and Synoptic overview
c1 c3 B a1 a2 c2 2 3 1,4 a3 a4 5 c1 c3 B a2 c2 3 4 a3 a4 5 2 a1 1 c1 c3 B a2 c2 3 4 a3 5 a1 1 a4 2 c1 c3 B a1 a2 c2 3 1,4 a4 5 a3 2 a1 a3 a2 B C 1 2 3 4 a4 5 a1 a3 a2 B c1 c3 1 2 3 4 a4 5 c2 c1 c3 a1 a3 a2 a4 B c2 2 1 4 3,5 c1 c3 B a2 a4 c2 3,5 4 a1 1 a3 2 a1 B 3 1 C a3 a4 5 2 a2 4 c1 c3 B A c2 2 3,5 1,4 a1 a3 a2 a4 B C 1 2 3,5 4 a1 a2 a4 B C a3 3,5 2 1,4 a1 a2 B 1 2 3 4 a4 5 C a3 a2 a4 B C a1 a3 2 3,5 4 1 a1 a2 a4 B c1 c3 a3 c2 2 1,4 3,5 a1 a2 B C a4 a3 1,4 3 5 2 a1 a2 B C a3 a4 3 5 2 1,4 B C A 1,4 2 3,5Larger models: fewer behaviors Smaller models: more behaviors Smallest model Observations end start
Splitting
University of Washington Ivan Beschastnikh
34
propose propose abort commit tx-abort tx-abort propose propose commit abort tx-abort tx-abort propose propose commit commit tx-commit tx-commit propose propose commit commit tx-commit tx-commit propose propose commit commit tx-commit tx-commit propose propose commit abort tx-abort tx-abort propose propose commit commit tx-commit tx-commit...
kTails(k) and Synoptic overview
c1 c3 B a1 a2 c2 2 3 1,4 a3 a4 5 c1 c3 B a2 c2 3 4 a3 a4 5 2 a1 1 c1 c3 B a2 c2 3 4 a3 5 a1 1 a4 2 c1 c3 B a1 a2 c2 3 1,4 a4 5 a3 2 a1 a3 a2 B C 1 2 3 4 a4 5 a1 a3 a2 B c1 c3 1 2 3 4 a4 5 c2 c1 c3 a1 a3 a2 a4 B c2 2 1 4 3,5 c1 c3 B a2 a4 c2 3,5 4 a1 1 a3 2 a1 B 3 1 C a3 a4 5 2 a2 4 c1 c3 B A c2 2 3,5 1,4 a1 a3 a2 a4 B C 1 2 3,5 4 a1 a2 a4 B C a3 3,5 2 1,4 a1 a2 B 1 2 3 4 a4 5 C a3 a2 a4 B C a1 a3 2 3,5 4 1 a1 a2 a4 B c1 c3 a3 c2 2 1,4 3,5 a1 a2 B C a4 a3 1,4 3 5 2 a1 a2 B C a3 a4 3 5 2 1,4 B C A 1,4 2 3,5Larger models: fewer behaviors Smaller models: more behaviors Smallest model Observations end start
Splitting
examples to unsatisfied mined invariants:
invariants
S y n
t i c i s n
e t e r m i n i s t i c : F i n a l m
e l d e p e n d s
s p l i t t i n g c h
c e s
University of Washington Ivan Beschastnikh
35
propose propose abort commit tx-abort tx-abort propose propose commit abort tx-abort tx-abort propose propose commit commit tx-commit tx-commit propose propose commit commit tx-commit tx-commit propose propose commit commit tx-commit tx-commit propose propose commit abort tx-abort tx-abort propose propose commit commit tx-commit tx-commit...
Motivating questions
c1 c3 B a1 a2 c2 2 3 1,4 a3 a4 5 c1 c3 B a2 c2 3 4 a3 a4 5 2 a1 1 c1 c3 B a2 c2 3 4 a3 5 a1 1 a4 2 c1 c3 B a1 a2 c2 3 1,4 a4 5 a3 2 a1 a3 a2 B C 1 2 3 4 a4 5 a1 a3 a2 B c1 c3 1 2 3 4 a4 5 c2 c1 c3 a1 a3 a2 a4 B c2 2 1 4 3,5 c1 c3 B a2 a4 c2 3,5 4 a1 1 a3 2 a1 B 3 1 C a3 a4 5 2 a2 4 c1 c3 B A c2 2 3,5 1,4 a1 a3 a2 a4 B C 1 2 3,5 4 a1 a2 a4 B C a3 3,5 2 1,4 a1 a2 B 1 2 3 4 a4 5 C a3 a2 a4 B C a1 a3 2 3,5 4 1 a1 a2 a4 B c1 c3 a3 c2 2 1,4 3,5 a1 a2 B C a4 a3 1,4 3 5 2 a1 a2 B C a3 a4 3 5 2 1,4 B C A 1,4 2 3,5Larger models: fewer behaviors Smaller models: more behaviors Smallest model Observations
Synoptic kTails
University of Washington Ivan Beschastnikh
36
propose propose abort commit tx-abort tx-abort propose propose commit abort tx-abort tx-abort propose propose commit commit tx-commit tx-commit propose propose commit commit tx-commit tx-commit propose propose commit commit tx-commit tx-commit propose propose commit abort tx-abort tx-abort propose propose commit commit tx-commit tx-commit...
Motivating questions
c1 c3 B a1 a2 c2 2 3 1,4 a3 a4 5 c1 c3 B a2 c2 3 4 a3 a4 5 2 a1 1 c1 c3 B a2 c2 3 4 a3 5 a1 1 a4 2 c1 c3 B a1 a2 c2 3 1,4 a4 5 a3 2 a1 a3 a2 B C 1 2 3 4 a4 5 a1 a3 a2 B c1 c3 1 2 3 4 a4 5 c2 c1 c3 a1 a3 a2 a4 B c2 2 1 4 3,5 c1 c3 B a2 a4 c2 3,5 4 a1 1 a3 2 a1 B 3 1 C a3 a4 5 2 a2 4 c1 c3 B A c2 2 3,5 1,4 a1 a3 a2 a4 B C 1 2 3,5 4 a1 a2 a4 B C a3 3,5 2 1,4 a1 a2 B 1 2 3 4 a4 5 C a3 a2 a4 B C a1 a3 2 3,5 4 1 a1 a2 a4 B c1 c3 a3 c2 2 1,4 3,5 a1 a2 B C a4 a3 1,4 3 5 2 a1 a2 B C a3 a4 3 5 2 1,4 B C A 1,4 2 3,5Larger models: fewer behaviors Smaller models: more behaviors Smallest model Observations
How can we easily: ... get kTails to ignore certain k-length sequences? ... add the x AlwaysFollowedBy y invariant to kTails? ... make Synoptic deterministic? ... add a new kind of invariant to Synoptic? ... learn which properties kTails/Synoptic preserve?
We can answer all of these questions by representing these algorithms with InvariMint
University of Washington Ivan Beschastnikh
37
Observations Model Property miner
Property Instances
property types
InvariMint: modular and declarative
University of Washington Ivan Beschastnikh
39
Observations Model Property miner
Property Instances
property types
Expressing kTails(k=1)
kTails
University of Washington Ivan Beschastnikh
41
Observations Model Property miner
Property Instances
A template to express merging of
identical in the first 1 event(s)
Expressing kTails(k=1)
= A property type: “x can be immediately followed by one of Y”
s1
login
s2 s3 s4
check check logout
s6
compose send
s5
logout
login check compose send logout login check check logout trace 2: trace 1:
University of Washington Ivan Beschastnikh
43
Observations kTails output
Expressing kTails(k=1)
Observations Model Property miner
Property Instances
“x can be immediately followed by one of Y”
s1 s2
check login
¬login
s3
check
¬ Σ
University of Washington Ivan Beschastnikh
Expressing kTails(k=1)
45
Observations x=login property instance
Observations Model Property miner
Property Instances
“x can be immediately followed by one of Y”
login check compose send logout login check check logout trace 2: trace 1:
s1 s2
check, logout, compose check
¬check
s3
Σ
send, login
University of Washington Ivan Beschastnikh
Expressing kTails(k=1)
47
Observations
Observations Model Property miner
Property Instances
“x can be immediately followed by one of Y”
x=check property instance
login check compose send logout login check check logout trace 2: trace 1:
University of Washington Ivan Beschastnikh
Expressing kTails(k=1)
50
Observations Model Property miner
Property Instances
s1 s2
Y x
s3
Y
Σ\
Σ
{x}
Σ\
= “x can be immediately followed by one of Y”
FSM template:
+
Eval(Log L, hx=a, Y =Bi) = true : 8t 2 L, 9b 2 B, ♦(a ! b) in t ^ 8b 2 B, 9t 2 L, ♦(a ! b) in t false : otherwise
When to instantiate:
University of Washington Ivan Beschastnikh
Expressing kTails(k=1)
51
Observations Model Property miner
Property Instances
s1 s2
Y x
s3
Y
Σ\
Σ
{x}
Σ\
= “x can be immediately followed by one of Y”
FSM template:
+
Eval(Log L, hx=a, Y =Bi) = true : 8t 2 L, 9b 2 B, ♦(a ! b) in t ^ 8b 2 B, 9t 2 L, ♦(a ! b) in t false : otherwise
When to instantiate:
Complete template
Complete template
University of Washington Ivan Beschastnikh
Expressing kTails(k=1)
52
Observations Model Property miner
Property Instances
s1 s2
Y x
s3
Y
Σ\
Σ
{x}
Σ\
= “x can be immediately followed by one of Y”
FSM template:
+
Eval(Log L, hx=a, Y =Bi) = true : 8t 2 L, 9b 2 B, ♦(a ! b) in t ^ 8b 2 B, 9t 2 L, ♦(a ! b) in t false : otherwise
When to instantiate:
University of Washington Ivan Beschastnikh
Expressing kTails(k=1)
53
Observations Model Property miner
Property Instances
s1 s2
Y x
s3
Y
Σ\
Σ
{x}
Σ\
= “x can be immediately followed by one of Y”
FSM template:
+
Eval(Log L, hx=a, Y =Bi) = true : 8t 2 L, 9b 2 B, ♦(a ! b) in t ^ 8b 2 B, 9t 2 L, ♦(a ! b) in t false : otherwise
When to instantiate:
Complete template
package synoptic.algorithms; import java.util.ArrayList; import java.util.Collections; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.logging.Logger; import synoptic.algorithms.graphops.PartitionMultiMerge; import synoptic.model.ChainsTraceGraph; import synoptic.model.Partition; import synoptic.model.PartitionGraph; import synoptic.model.event.EventType; import synoptic.model.interfaces.INode; import synoptic.model.interfaces.ITransition; import synoptic.util.InternalSynopticException; import synoptic.util.NotImplementedException; /** * Implements the KTails algorithm as defined in Biermann & Feldman '72. */ public class KTails { public static Logger logger; static { logger = Logger.getLogger("KTails"); } /** * Constructs and returns a PartitionGraph generated by applying kTails with * the given k value to the given trace graph */ public static PartitionGraph performKTails(ChainsTraceGraph g, int k) { PartitionGraph pGraph = new PartitionGraph(g, false, null); attemptMerge(pGraph, k); return pGraph; } /** * Finds all possible merges in pGraph. Requires making a new call to * attemptMerge after every merge in case previously un-merge-able pairs * become merge-able. */ private static void attemptMerge(PartitionGraph pGraph, int k) { // Keeps track of the merges that we want to perform.kTails Procedural description
University of Washington Ivan Beschastnikh
Expressing kTails(k=1)
53
Observations Model Property miner
Property Instances
s1 s2
Y x
s3
Y
Σ\
Σ
{x}
Σ\
= “x can be immediately followed by one of Y”
FSM template:
+
Eval(Log L, hx=a, Y =Bi) = true : 8t 2 L, 9b 2 B, ♦(a ! b) in t ^ 8b 2 B, 9t 2 L, ♦(a ! b) in t false : otherwise
When to instantiate:
Complete template
allVisitedMatches.put(n1, n2); for (ITransition<NodeType> t1 : n1Trans) { NodeType c1 = t1.getTarget(); // Skip c1 if it was visited by this method earlier. if (visitedN1Children.contains(c1)) { continue; } boolean kEqual = false; // Make sure to get transitions of the same relation. for (ITransition<NodeType> t2 : n2 .getTransitionsWithExactRelations(t1.getRelation())) { NodeType c2 = t2.getTarget(); // Skip c2 if it was visited by this method earlier. if (visitedN2Children.contains(c2)) { continue; } // Skip c2 if its already been mapped to a c1 previously in the // outer loop. if (childKEquivMatches.contains(c2)) { continue; } if (kEqualsWithoutSubsumption(c1, c2, k - 1, allVisitedMatches)) { kEqual = true; childKEquivMatches.add(c2); break; } } // Could not find any kEqual c2 to match with c1. if (!kEqual) { // Remove the record of visiting n1 and n2. allVisitedMatches.remove(n1); return false; } } return true; } }kTails Procedural description
University of Washington Ivan Beschastnikh
Expressing kTails(k)
54
Observations Model Property miner
Property Instances
“x can be immediately followed by one of Y”
s1 s2
Y x
s3
Y
Σ\
Σ
{x}
Σ\
= +
Eval(Log L, hx=a, Y =Bi) = true : 8t 2 L, 9b 2 B, ♦(a ! b) in t ^ 8b 2 B, 9t 2 L, ♦(a ! b) in t false : otherwise
How can we: ... get kTails to ignore certain k-length sequences? ... add the x AlwaysFollowedBy y invariant to kTails? ... make Synoptic deterministic? ... add a new kind of invariant to Synoptic? ... learn which properties kTails/Synoptic preserve?
University of Washington Ivan Beschastnikh
Expressing kTails(k)
55
Observations Model Property miner
Property Instances
“x can be immediately followed by one of Y”
s1 s2
Y x
s3
Y
Σ\
Σ
{x}
Σ\
= +
Eval(Log L, hx=a, Y =Bi) = true : 8t 2 L, 9b 2 B, ♦(a ! b) in t ^ 8b 2 B, 9t 2 L, ♦(a ! b) in t false : otherwise
How can we: ... get kTails to ignore certain k-length sequences? ... add the x AlwaysFollowedBy y invariant to kTails? ... make Synoptic deterministic? ... add a new kind of invariant to Synoptic? ... learn which properties kTails/Synoptic preserve?
University of Washington Ivan Beschastnikh
Expressing kTails(k)
56
Observations Model Property miner
Property Instances
“x can be immediately followed by one of Y”
s1 s2
Y x
s3
Y
Σ\
Σ
{x}
Σ\
= +
Eval(Log L, hx=a, Y =Bi) = true : 8t 2 L, 9b 2 B, ♦(a ! b) in t ^ 8b 2 B, 9t 2 L, ♦(a ! b) in t false : otherwise
How can we: ... get kTails to ignore certain k-length sequences? ... add the x AlwaysFollowedBy y invariant to kTails? ... make Synoptic deterministic? ... add a new kind of invariant to Synoptic? ... learn which properties kTails/Synoptic preserve?
✓
University of Washington Ivan Beschastnikh
Expressing kTails(k)
57
Observations Model Property miner
Property Instances
“x can be immediately followed by one of Y”
s1 s2
Y x
s3
Y
Σ\
Σ
{x}
Σ\
= +
Eval(Log L, hx=a, Y =Bi) = true : 8t 2 L, 9b 2 B, ♦(a ! b) in t ^ 8b 2 B, 9t 2 L, ♦(a ! b) in t false : otherwise
How can we: ... get kTails to ignore certain k-length sequences? ... add the x AlwaysFollowedBy y invariant to kTails? ... make Synoptic deterministic? ... add a new kind of invariant to Synoptic? ... learn which properties kTails/Synoptic preserve?
✓
University of Washington Ivan Beschastnikh
58
Observations Model Property miner
Property Instances
property types
Expressing Synoptic with InvariMint
Synoptic
University of Washington Ivan Beschastnikh
59
Observations Model Property miner
Property Instances
x AlwaysFollowedBy y x AlwaysPrecedes y x NeverFollowedBy y
Expressing Synoptic with InvariMint
Synoptic invariants
University of Washington Ivan Beschastnikh
60
Observations Model Property miner
Property Instances
x AlwaysPrecedes y x NeverFollowedBy y
Expressing Synoptic with InvariMint
Synoptic invariants
s1 s2
y x {x}
Σ\
{y}
Σ\
x AlwaysFollowedBy y
University of Washington Ivan Beschastnikh
61
Observations Model Property miner
Property Instances
x NeverFollowedBy y
Expressing Synoptic with InvariMint
Synoptic invariants
s1 s2
y x {x}
Σ\
{y}
Σ\
x AlwaysFollowedBy y
s1 s2
y x
s3
{x,y}
Σ\
Σ Σ
x AlwaysPrecedes y
University of Washington Ivan Beschastnikh
62
Observations Model Property miner
Property Instances
Expressing Synoptic with InvariMint
Synoptic invariants
s1 s2
y x {x}
Σ\
{y}
Σ\
s1 s2
y x
s3
{x,y}
Σ\
Σ Σ
s1
y x
s3 s2
Σ
{x}
Σ\
{y}
Σ\
x AlwaysFollowedBy y x AlwaysPrecedes y x NeverFollowedBy y
University of Washington Ivan Beschastnikh
63
Observations Model Property miner
Property Instances
Expressing Synoptic with InvariMint
Synoptic invariants
s1 s2
y x {x}
Σ\
{y}
Σ\
s1 s2
y x
s3
{x,y}
Σ\
Σ Σ
s1
y x
s3 s2
Σ
{x}
Σ\
{y}
Σ\
x AlwaysFollowedBy y x AlwaysPrecedes y x NeverFollowedBy y
This formulation is approximate: InvariMint model superset of Synoptic models
x AlwaysFollowedBy y x AlwaysPrecedes y x NeverFollowedBy y
University of Washington Ivan Beschastnikh
Expressing Synoptic with InvariMint
64
Observations Model Property miner
Property Instances
How can we: ... get kTails to ignore certain k-length sequences? ... add the x AlwaysFollowedBy y invariant to kTails? ... make Synoptic deterministic? ... add a new kind of invariant to Synoptic? ... learn which properties kTails/Synoptic preserve?
✓
x AlwaysFollowedBy y x AlwaysPrecedes y x NeverFollowedBy y
University of Washington Ivan Beschastnikh
Expressing Synoptic with InvariMint
64
Observations Model Property miner
Property Instances
How can we: ... get kTails to ignore certain k-length sequences? ... add the x AlwaysFollowedBy y invariant to kTails? ... make Synoptic deterministic? ... add a new kind of invariant to Synoptic? ... learn which properties kTails/Synoptic preserve?
✓ ✓
x AlwaysFollowedBy y x AlwaysPrecedes y x NeverFollowedBy y
University of Washington Ivan Beschastnikh
Expressing Synoptic with InvariMint
65
Observations Model Property miner
Property Instances
How can we: ... get kTails to ignore certain k-length sequences? ... add the x AlwaysFollowedBy y invariant to kTails? ... make Synoptic deterministic? ... add a new kind of invariant to Synoptic? ... learn which properties kTails/Synoptic preserve?
✓ ✓
x AlwaysFollowedBy y x AlwaysPrecedes y x NeverFollowedBy y
University of Washington Ivan Beschastnikh
Expressing Synoptic with InvariMint
65
Observations Model Property miner
Property Instances
How can we: ... get kTails to ignore certain k-length sequences? ... add the x AlwaysFollowedBy y invariant to kTails? ... make Synoptic deterministic? ... add a new kind of invariant to Synoptic? ... learn which properties kTails/Synoptic preserve?
✓ ✓ ✓
x AlwaysFollowedBy y x AlwaysPrecedes y x NeverFollowedBy y
University of Washington Ivan Beschastnikh
Expressing Synoptic with InvariMint
66
Observations Model Property miner
Property Instances
How can we: ... get kTails to ignore certain k-length sequences? ... add the x AlwaysFollowedBy y invariant to kTails? ... make Synoptic deterministic? ... add a new kind of invariant to Synoptic? ... learn which properties kTails/Synoptic preserve?
✓ ✓ ✓
x AlwaysFollowedBy y x AlwaysPrecedes y x NeverFollowedBy y
University of Washington Ivan Beschastnikh
Expressing Synoptic with InvariMint
66
Observations Model Property miner
Property Instances
How can we: ... get kTails to ignore certain k-length sequences? ... add the x AlwaysFollowedBy y invariant to kTails? ... make Synoptic deterministic? ... add a new kind of invariant to Synoptic? ... learn which properties kTails/Synoptic preserve?
✓ ✓ ✓ ✓
x AlwaysFollowedBy y x AlwaysPrecedes y x NeverFollowedBy y
University of Washington Ivan Beschastnikh
Expressing Synoptic with InvariMint
67
Observations Model Property miner
Property Instances
How can we: ... get kTails to ignore certain k-length sequences? ... add the x AlwaysFollowedBy y invariant to kTails? ... make Synoptic deterministic? ... add a new kind of invariant to Synoptic? ... learn which properties kTails/Synoptic preserve?
✓ ✓ ✓ ✓
x AlwaysFollowedBy y x AlwaysPrecedes y x NeverFollowedBy y
University of Washington Ivan Beschastnikh
Expressing Synoptic with InvariMint
67
Observations Model Property miner
Property Instances
How can we: ... get kTails to ignore certain k-length sequences? ... add the x AlwaysFollowedBy y invariant to kTails? ... make Synoptic deterministic? ... add a new kind of invariant to Synoptic? ... learn which properties kTails/Synoptic preserve?
✓ ✓ ✓ ✓ ✓
x AlwaysFollowedBy y x AlwaysPrecedes y x NeverFollowedBy y
University of Washington Ivan Beschastnikh
Expressing Synoptic with InvariMint
68
Observations Model Property miner
Property Instances
How can we: ... get kTails to ignore certain k-length sequences? ... add the x AlwaysFollowedBy y invariant to kTails? ... make Synoptic deterministic? ... add a new kind of invariant to Synoptic? ... learn which properties kTails/Synoptic preserve?
✓Transparency ✓Extensibility
InvariMint advantages:
University of Washington Ivan Beschastnikh
Outline
69
University of Washington Ivan Beschastnikh
70
Model Property miner
Property instances
InvariMint specifications
Observations Property types
University of Washington Ivan Beschastnikh
71
Model Property miner Property composition
Property instances
InvariMint specifications
Observations Composition function Property types
University of Washington Ivan Beschastnikh
72
Model Property miner Property composition
Property instances
InvariMint specifications
Observations Composition function Property type 1 Property type 2
...
University of Washington Ivan Beschastnikh
73
Model Property miner Property composition
Property instances
InvariMint specifications
Observations Composition function Parameterized FSM Evaluation function
...
Parameterized FSM Evaluation function Property 1: Property 2:
University of Washington Ivan Beschastnikh
74
Model Property miner Property composition
Property instances
InvariMint specifications
Observations Composition function Parameterized FSM Evaluation function
...
Parameterized FSM Evaluation function Property 1: Property 2:
FSMs
University of Washington Ivan Beschastnikh
75
Model Property miner Property composition
Property instances
InvariMint specifications
Observations Composition function
...
Property 1: Property 2:
FSMs An equation over FSMs
Parameterized FSM Evaluation function Parameterized FSM Evaluation function
University of Washington Ivan Beschastnikh
Outline
76
University of Washington Ivan Beschastnikh
InvariMint expressiveness
77
University of Washington Ivan Beschastnikh
InvariMint performance
performance?
78
Xu et al. SLAML 2010
University of Washington Ivan Beschastnikh
Performance: kTails
79
200 400 600 800 1000 5 10 15 20 25 30 35 40 45 50 Time (s) Log length (thousands of events) kTails InvariMint kTails
Observations
Procedural kTails (thousands of events)
100 200 300 400 500 600 700 5 10 15 20 25 30 35 40 45 Time (s) Property instances Synoptic InvariMint Synoptic
University of Washington Ivan Beschastnikh
Performance: Synoptic
80
Property Instances
Procedural Synoptic
University of Washington Ivan Beschastnikh
Contributions
81
synoptic.googlecode.com
FSM-inference algorithms are not transparent/extensible
Open source
InvariMint
src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit s1 s2¬x ¬y
y x
t1 t3¬y
y x t2* *
∩
propose commit tx-commit tx-abort abort commit abortUniversity of Washington Ivan Beschastnikh
Contributions
82
FSM-inference algorithms are not transparent/extensible
Open source
InvariMint
Declarative specification of FSM-inference algorithms
synoptic.googlecode.com