Nenad Medvidovic University of Southern California, Los Angeles, CA, - - PowerPoint PPT Presentation

nenad medvidovic
SMART_READER_LITE
LIVE PREVIEW

Nenad Medvidovic University of Southern California, Los Angeles, CA, - - PowerPoint PPT Presentation

Joshua Garcia Daniel Popescu Gholamreza Safi William G.J. Halfond Nenad Medvidovic University of Southern California, Los Angeles, CA, USA 1 Distributed Event-Based (DEB) Systems Financial systems, sensor networks, enterprise software,


slide-1
SLIDE 1

Joshua Garcia Daniel Popescu Gholamreza Safi William G.J. Halfond Nenad Medvidovic University of Southern California, Los Angeles, CA, USA

1

slide-2
SLIDE 2
  • Financial systems, sensor networks,

enterprise software, etc.

  • Implemented using Message-

Oriented Middleware (MOM) + Highly decoupled + Non-functional properties

  • Scalability, Adaptability,

Heterogeneity

  • Obfuscate control and data flow
  • Hamper system maintenance

Distributed Event-Based (DEB) Systems

2

DEB Application Message-Oriented Middleware Operating System

slide-3
SLIDE 3
  • 1. Reliance on ambiguous interfaces
  • 2. Use of attribute-based message types
  • 3. Unclear message flow

Three Sources of Maintenance Difficulties

3

slide-4
SLIDE 4

public class Adder extends Component{ … public void consume(Message m) { String nameAttr = (String)m.getAttr("name"); if ("add".equals(nameAttr)) { Message sumMsg = this.add(m); this.publish(sumMsg);} else if ("result".equals(nameAttr)){ …}} private Message add(Message m3){ Integer n1 = m3.getAttr("num1"); Integer n2 = m3.getAttr("num2"); sum = n1 + n2; Message m4 = new Message(); m4.setAttribute("name", "sum"); m4.setAttribute("val", sum); return m4;}

  • 1. Ambiguity of Interfaces

Adder

consume

Maintenance Challenges:

  • 1. Ambiguous

interfaces

  • 2. Attribute-based

message types

  • 3. Message flow

4

slide-5
SLIDE 5

public class Adder extends Component{ … public void consume(Message m) { String nameAttr = (String)m.getAttr("name"); if ("add".equals(nameAttr)) { Message sumMsg = this.add(m); this.publish(sumMsg);} else if ("result".equals(nameAttr)){ …}} private Message add(Message m3){ Integer n1 = m3.getAttr("num1"); Integer n2 = m3.getAttr("num2"); sum = n1 + n2; Message m4 = new Message(); m4.setAttribute("name", "sum"); m4.setAttribute("val", sum); return m4;}

  • 1. Ambiguity of Interfaces

Message Dispatching

Adder

add result

Maintenance Challenges:

  • 1. Ambiguous

interfaces

  • 2. Attribute-based

message types

  • 3. Message flow

5

slide-6
SLIDE 6
  • 2. Attribute-Based Message Types

Message type is scattered public class Adder extends Component{ … public void consume(Message m) { String nameAttr = (String)m.getAttr("name"); if ("add".equals(nameAttr)) { Message sumMsg = this.add(m); this.publish(sumMsg);} else if ("result".equals(nameAttr)){ …}} private Message add(Message m3){ Integer n1 = m3.getAttr("num1"); Integer n2 = m3.getAttr("num2"); sum = n1 + n2; Message m4 = new Message(); m4.setAttribute("name", "sum"); m4.setAttribute("val", sum); return m4;}

Adder

add result Consumed Message “name” : “add” “num1” “num2”

Maintenance Challenges:

  • 1. Ambiguous

interfaces

  • 2. Attribute-based

message types

  • 3. Message flow

6

slide-7
SLIDE 7

public class Adder extends Component{ … public void consume(Message m) { String nameAttr = (String)m.getAttr("name"); if ("add".equals(nameAttr)) { Message sumMsg = this.add(m); this.publish(sumMsg);} else if ("result".equals(nameAttr)){ …}} private Message add(Message m3){ Integer n1 = m3.getAttr("num1"); Integer n2 = m3.getAttr("num2"); sum = n1 + n2; Message m4 = new Message(); m4.setAttribute("name", "sum"); m4.setAttribute("val", sum); return m4;}

  • 3. Message Flow

Consumed Message “name” : “add” “num1” “num2” Published Message “name” : “sum” “val” add result sum

Maintenance Challenges:

  • 1. Ambiguous

interfaces

  • 2. Attribute-based

message types

  • 3. Message flow

7

slide-8
SLIDE 8

Eos

MOM Specification DEB System Implementation Eos Consumed Attribute-Based Message Types Published Attribute-Based Message Types Message Flow

8

Goal - Determine message flow for attribute-based systems

Insight – Message Revealing statements

slide-9
SLIDE 9
  • For each method m

– Identify the message object that is consumed – Determine attributes extracted from the message

  • bject along program paths

– Define message types based on sets of attributes

Identifying Consumed Message Types (CMTs)

9

slide-10
SLIDE 10

Consumed Message “name” public class Adder extends Component{ … public void consume(Message m) { String nameAttr = (String)m.getAttr("name"); if ("add".equals(nameAttr)) { Message sumMsg = this.add(m); this.publish(sumMsg);} else if ("result".equals(nameAttr)){ …}} private Message add(Message m3){ Integer n1 = m3.getAttr("num1"); Integer n2 = m3.getAttr("num2"); sum = n1 + n2; Message m4 = new Message(); m4.setAttribute("name", "sum"); m4.setAttribute("val", sum); return m4;}

CMT Example

“name” : “add” “num1” “num2”

Adder

add result sum 10

slide-11
SLIDE 11
  • For each method m

– Identify creation of message objects – Determine attributes added to message objects – Track if message objects reach publish statement

Identifying Published Message Types (PMTs)

11

slide-12
SLIDE 12

public class Adder extends Component{ … public void consume(Message m) { String nameAttr = (String)m.getAttr("name"); if ("add".equals(nameAttr)) { Message sumMsg = this.add(m); this.publish(sumMsg);} else if ("result".equals(nameAttr)){ …}} private Message add(Message m3){ Integer n1 = m3.getAttr("num1"); Integer n2 = m3.getAttr("num2"); sum = n1 + n2; Message m4 = new Message(); m4.setAttribute("name", "sum"); m4.setAttribute("val", sum); return m4;}

PMT Example

Message “name” : “sum” “val”

Adder

add result sum Must reach publish statement 12

slide-13
SLIDE 13
  • Message flow represented by message

dependencies

– Intra-flow dependencies – Inter-flow dependencies

Identifying Message Flow

13 add result sum

Adder

sum

Printer

sum

slide-14
SLIDE 14
  • Goal: Within a component, identify types

published as a result of types consumed

  • For each published message type

– Identify the statement at which the type is published – Determine the consumed types that flow into the statement – Create dependencies between the consumed types and the published types

Identifying Intra-Flow Dependencies

14

slide-15
SLIDE 15

public class Adder extends Component{ … public void consume(Message m) { String nameAttr = (String)m.getAttr("name"); if ("add".equals(nameAttr)) { Message sumMsg = this.add(m); this.publish(sumMsg);} else if ("result".equals(nameAttr)){ …}} private Message add(Message m3){ Integer n1 = m3.getAttr("num1"); Integer n2 = m3.getAttr("num2"); sum = n1 + n2; Message m4 = new Message(); m4.setAttribute("name", "sum"); m4.setAttribute("val", sum); return m4;}

Intra-Flow Dependency Example

Consumed Message “name” : “add” “num1” “num2” Published Message “name” : “sum” “val” add result sum tadd tadd tadd tadd tadd tadd tadd intra 15

slide-16
SLIDE 16
  • Goal: Identify pairs of components that

communicate with each other

  • How: Match published and consumed types of

the components

  • Definition of “match”: Published type provides

superset of a consumed type’s attributes

Identifying Inter-Flow Dependencies

16

slide-17
SLIDE 17

Simple Inter-Flow Dependency Example

17

Adder

sum Adder’s Published Message “name” : “sum” “val”

Printer

Printer’s Consumed Message “name” : “sum” sum inter “val”

slide-18
SLIDE 18

Subtle Inter-Flow Dependency Example

18

Adder

sum Adder’s Published Message “name” : “sum” “val”

Printer

Printer’s Consumed Message “name” : “sum” sum inter

slide-19
SLIDE 19

Adder

All Information Identified for Example

19 Consumed Message “name” : “add” “num1” “num2” Published Message “name” : “sum” “val” intra Consumed Message “name” : “result” Published Message “name” : “lastResult” “val” intra

Printer

Published Message “name” : “sum” “val” inter

slide-20
SLIDE 20
  • Accuracy in identifying message information
  • Execution time for Eos
  • Effectiveness for maintenance

Empirical Evaluation

20

slide-21
SLIDE 21
  • Written in Java
  • Leverages Soot
  • Implementation is available online:

http://softarch.usc.edu/wiki/doku.php?id=mfa:start

Eos Implementation

21

slide-22
SLIDE 22

App Name App Type SLOC Comps Msg Type MOM KLAX Arcade Game 4.5K 14 attr-based c2.fw DRADEL Architectural Analysis 10.8K 8 attr-based c2.fw ERS Emergency Response 7.1K 11 attr-based Prism-MW Stoxx Stock Ticker Notification 6.2K 4 nominal REBECA jms2009-PS JMS Benchmark 18.6K 4 attr-based JMS Spark Chat Client 85K 59 nominal Smack

Subject Systems

22

slide-23
SLIDE 23
  • Check for false positives and false negatives
  • “Ground truth” prepared by three graduate

students

– Ground truth is available online:

http://softarch.usc.edu/wiki/doku.php?id=mfa:start

Accuracy - Setup

23

slide-24
SLIDE 24

Accuracy - Results

24

0.00% 20.00% 40.00% 60.00% 80.00% 100.00% PMT Precision PMT Recall 0.00% 20.00% 40.00% 60.00% 80.00% 100.00% CMT Precision CMT Recall 0.00% 20.00% 40.00% 60.00% 80.00% 100.00% Intra-Flow Dependencies Precision Intra-Flow Dependencies Recall

Over 95% average precision and recall Over 95% average precision and recall Over 93% average precision and recall

slide-25
SLIDE 25

Execution Time - Results

25

200 400 600 800 1000 1200 1400 1600 1800 2000 KLAX DRADEL ERS Stoxx jms2009-PS Spark Time (ms)

  • Eos without Soot: < 2s
  • Eos with Soot: < 2 minutes
slide-26
SLIDE 26
  • Showed via change impact analysis

– For a maintenance task, what software elements must be changed?

  • Selected Approaches
  • 1. Eos
  • 2. Lexical Source Model Extraction
  • 3. Traditional Approach

Effectiveness

26

slide-27
SLIDE 27
  • Selected systems: KLAX, jms2009-PS, and Stoxx

– Three MOMs – Accuracy of Eos varies

  • Three maintenance tasks per system

Effectiveness - Systems and Tasks

27

slide-28
SLIDE 28

Effectiveness - Results

28

0% 20% 40% 60% 80% 100% Average Precision Average Recall

Message Types and Dependencies

Eos LSME 0% 20% 40% 60% 80% 100% Average Precision Average Recall

Statements

Eos LSME Traditional

  • 20% better precision
  • 50% better recall
  • 30% better precision
  • 60% better recall
slide-29
SLIDE 29
  • Eos: an approach for determining message flow

in attribute-based DEB systems

  • Fast, accurate, and effective
  • Message Revealing statements
  • Eos for other maintenance tasks
  • Future work

– State-based dependencies

Summary and Future Work

29