Case Studies for Evaluating Programming Languages Jonathan Aldrich - - PowerPoint PPT Presentation

case studies for evaluating programming languages
SMART_READER_LITE
LIVE PREVIEW

Case Studies for Evaluating Programming Languages Jonathan Aldrich - - PowerPoint PPT Presentation

Case Studies for Evaluating Programming Languages Jonathan Aldrich 17-396/17-696/17-960: Language Design and Prototyping Carnegie Mellon University Thought Question What can we learn from trying out a language? Can this be done


slide-1
SLIDE 1

Case Studies for Evaluating Programming Languages

Jonathan Aldrich 17-396/17-696/17-960: Language Design and Prototyping Carnegie Mellon University

slide-2
SLIDE 2

Thought Question

  • What can we learn from trying out a

language? Can this be done scientifically?

PL Design & Proto. Jonathan Aldrich - Case Studies 2

slide-3
SLIDE 3

Case Study

  • A research method that deeply examines a

particular situation to gain understanding

  • Used for

– Generating hypotheses – Answering how and why questions – Evaluating hypotheses in a real-world setting

  • Limitation: no statistical generalization

– But does support analytical generalization

PL Design & Proto. Jonathan Aldrich - Case Studies 3

slide-4
SLIDE 4

Why Use a Case Study?

  • You want to gain a deep understanding of

your language in a real world context

– Does it have the effect you expect? – What surprising effects does it have? – How and why does it have those effects? – How does it stand up to the complexities of the real world?

PL Design & Proto. Jonathan Aldrich - Case Studies 4

slide-5
SLIDE 5

Data Gathering

  • Case studies typically a mixed method

– Count things – how big, how many, how long? – Observe things – the process, artifact… – Use triangulation: multiple sources and kinds of evidence that point to the same facts

  • Case studies exist in a context

– Beneficial for external validity – realistic

  • Results likely meaningful real world

– Challenge for internal validity – hard to control

  • Hard to be sure in identifying causes

PL Design & Proto. Jonathan Aldrich - Case Studies 5

slide-6
SLIDE 6

Case Studies with PLs

  • Example case: writing a program in a new PL
  • Data that could be gathered

– How long did it take? – How many lines of code? – How were particular new constructs used? What were the benefits/limitations of those constructs in context? – Did the PL affect the design? Help find bugs?

  • Compare to the same program in another PL

PL Design & Proto. Jonathan Aldrich - Case Studies 6

slide-7
SLIDE 7

Discussion: Is This Science?

PL Design & Proto. Jonathan Aldrich - Case Studies 7

slide-8
SLIDE 8

What Makes It Science?

(vs. an experience report or illustrative example)

  • Research questions identified
  • Data is collected consistently, according to a plan
  • Inferences connect data to research questions
  • Explores, explains, describes, or (causally)

analyzes a phenomenon

  • Systematically addresses threats to validity

PL Design & Proto. Jonathan Aldrich - Case Studies 8

[adapted from Easterbrook et al.]

slide-9
SLIDE 9

How to Design a Case Study (1)

  • Identify research questions precisely

– Draw on relevant theory

  • Identify hypotheses

– Sometimes called “propositions” for case studies – Alternatively, your goal may be to form hypotheses

  • Exploratory studies – still need purpose (what kind of

hypotheses?) and criteria for success

  • Identify the unit of analysis

– Precisely define the case – what is the study’s scope?

PL Design & Proto. Jonathan Aldrich - Case Studies 9

[adapted from Easterbrook et al.]

slide-10
SLIDE 10

How to Design a Case Study (2)

  • Data collection

– What information will you collect? How will you do it? – How will you decide what to include/exclude?

  • Linking logic

– Logic that relates data to hypotheses – Example: pattern matching

  • Describe several patterns, e.g. that represent alternative explanations
  • Compare case study to patterns: which one fits best?
  • Interpretation criteria

– How will you analyze the data and interpret findings?

PL Design & Proto. Jonathan Aldrich - Case Studies 10

[adapted from Easterbrook et al.]

slide-11
SLIDE 11

Analytical Generalization

  • Compare qualitative findings to a theory

– Does the data support or refute the theory?

  • Note: in the case of partial support, may motivate possible changes to the

theory

– Is one theory better supported than another?

  • Empirical induction

– Evidence builds when several case studies all support a theory (compared to rival theories)

  • Power comes from detail

– Looks at underlying mechanism; tries to explain – Many pieces of data come together to support (or refute) a theory

  • Compare: statistical generalization

– Sample from, generalize to a population

PL Design & Proto. Jonathan Aldrich - Case Studies 11

[adapted from Easterbrook et al.]

slide-12
SLIDE 12

Case Study Replication

  • Replicating case studies can

– Add confidence to conclusions – Help broaden a theory and its support

  • Selection guided by theory

– Predict similar results – Predict contrasting results but for predictable reasons

  • Not random sampling from a pool!

PL Design & Proto. Jonathan Aldrich - Case Studies 12

[adapted from Easterbrook et al.]

slide-13
SLIDE 13

Case Study Analysis Principles

  • Rely on theory

– Tells you what data is relevant and how to test it – Alternatively, derive possible theories from data (in an exploratory study)

  • Consider rival explanations

– Can you gather evidence to confirm/reject alternatives to the theory under investigation?

PL Design & Proto. Jonathan Aldrich - Case Studies 13

[adapted from Easterbrook et al.]

slide-14
SLIDE 14

Questions?

  • Let’s look at an example…
  • This example is from a long time ago, when

I was a graduate student

– It was well-respected at the time, and the paper even won a 10-year retrospective award – But this was early in the world of applying case studies in PLs—so there are also things to criticize!

PL Design & Proto. Jonathan Aldrich - Case Studies 14

slide-15
SLIDE 15

ArchJava

Connecting Software Architecture to Implementation

Jonathan Aldrich Craig Chambers David Notkin University of Washington

ICSE ‘02, May 22, 2002

slide-16
SLIDE 16

PL Design & Proto. Jonathan Aldrich - Case Studies 16

Software Architecture

  • High-level system structure

– Components and connections

  • Automated analysis
  • Support program evolution

– Source of defect – Effect of change – Invariants to preserve

parser codegen scanner

Compiler

slide-17
SLIDE 17

PL Design & Proto. Jonathan Aldrich - Case Studies 17 parser codegen scanner

Compiler

Architecture and Implementation

  • Inconsistency caused by evolution

– Architecture documentation becomes obsolete

  • Problems

– Surprises – Misunderstandings lead to defects – Untrusted architecture won’t be used

slide-18
SLIDE 18

PL Design & Proto. Jonathan Aldrich - Case Studies 18 parser codegen scanner

Compiler

Architecture and Implementation

  • Does code conform to architecture?
  • Communication integrity [LV95,MQR95]

– All communication is documented

  • Interfaces and connectivity

– Enables effective architectural reasoning

  • Quickly learn how components fit together
  • Local information is sufficient
slide-19
SLIDE 19

PL Design & Proto. Jonathan Aldrich - Case Studies 19

Architectural Approaches:

Checking vs. Flexibility

Partial Dynamic Static General Purpose Restricted Language Communication Integrity None Flexibility

Note: only two dimensions

  • f the design space
slide-20
SLIDE 20

PL Design & Proto. Jonathan Aldrich - Case Studies 20

Architectural Approaches:

Checking vs. Flexibility

Partial Dynamic Static

Knit, ACOEL, ML, Rose RealTime

General Purpose Restricted Language

Rapide

Communication Integrity None

SDL Wright, SADL

Flexibility

slide-21
SLIDE 21

PL Design & Proto. Jonathan Aldrich - Case Studies 21

Architectural Approaches:

Checking vs. Flexibility

Partial Dynamic Static

Knit, ACOEL, ML, Rose RealTime

General Purpose Restricted Language

Rapide

Communication Integrity None

SDL Wright, SADL

Flexibility

ArchJava

slide-22
SLIDE 22

PL Design & Proto. Jonathan Aldrich - Case Studies 22

ArchJava

  • Approach: add architecture to language

– Control-flow communication integrity

  • Enforced by type system

– Architecture updated as code evolves – Flexible

  • Dynamically changing architectures
  • Common implementation techniques
  • Case study: is it practical and useful?
slide-23
SLIDE 23

PL Design & Proto. Jonathan Aldrich - Case Studies 23

A Parser Component

public component class Parser {

Component class

  • Defines architectural object
  • Must obey architectural constraints

Parser

slide-24
SLIDE 24

PL Design & Proto. Jonathan Aldrich - Case Studies 24

A Parser Component

public component class Parser { public port in { requires Token nextToken(); } public port out { provides AST parse(); }

Components communicate through Ports

  • A two-way interface
  • Define provided and required methods

Parser

  • ut

in

slide-25
SLIDE 25

PL Design & Proto. Jonathan Aldrich - Case Studies 25

A Parser Component

public component class Parser { public port in { requires Token nextToken(); } public port out { provides AST parse(); }

Ordinary (non-component) objects

  • Passed between components
  • Sharing is permitted
  • Can use just as in Java

Parser

  • ut

in

slide-26
SLIDE 26

PL Design & Proto. Jonathan Aldrich - Case Studies 26

A Parser Component

public component class Parser { public port in { requires Token nextToken(); } public port out { provides AST parse(); } AST parse() { Token tok=in.nextToken(); return parseExpr(tok); } AST parseExpr(Token tok) { ... } ... }

Can fill in architecture with ordinary Java code

Parser

  • ut

in

slide-27
SLIDE 27

PL Design & Proto. Jonathan Aldrich - Case Studies 27

Hierarchical Composition

public component class Compiler { private final Scanner scanner = new Scanner(); private final Parser parser = new Parser(); private final CodeGen codegen = new CodeGen();

Subcomponents

– Component instances inside another component – Communicate through connected ports

parser codegen scanner

Compiler

  • ut in
  • ut in
slide-28
SLIDE 28

PL Design & Proto. Jonathan Aldrich - Case Studies 28

Hierarchical Composition

public component class Compiler { private final Scanner scanner = new Scanner(); private final Parser parser = new Parser(); private final CodeGen codegen = new CodeGen(); connect scanner.out, parser.in; connect parser.out, codegen.in;

Connections

– Bind required methods to provided methods

parser codegen scanner

Compiler

  • ut in
  • ut in
slide-29
SLIDE 29

PL Design & Proto. Jonathan Aldrich - Case Studies 29

Evaluation Questions

  • Does ArchJava guarantee communication integrity?
  • Is ArchJava expressive enough for real systems?
  • Can ArchJava aid software evolution tasks?
slide-30
SLIDE 30

PL Design & Proto. Jonathan Aldrich - Case Studies 30

A component may only communicate with the components it is connected to in the architecture ArchJava enforces integrity for control flow

  • No method calls permitted from one component to

another except

– From a parent to its nested subcomponents – Through connections in the architecture

Communication Integrity

parser codegen scanner

Compiler

slide-31
SLIDE 31

PL Design & Proto. Jonathan Aldrich - Case Studies 31

A component may only communicate with the components it is connected to in the architecture ArchJava enforces integrity for control flow

  • No method calls permitted from one component to

another except

– From a parent to its immediate subcomponents – Through connections in the architecture

Communication Integrity

parser codegen scanner

Compiler

slide-32
SLIDE 32

PL Design & Proto. Jonathan Aldrich - Case Studies 32

A component may only communicate with the components it is connected to in the architecture ArchJava enforces integrity for control flow Other communication paths

– Shared data (current work) – Run-time system

Communication Integrity

parser codegen scanner

Compiler

slide-33
SLIDE 33

PL Design & Proto. Jonathan Aldrich - Case Studies 33

  • Architecture allows

– Calls between connected components

Control Communication Integrity

parser codegen scanner

Compiler

slide-34
SLIDE 34

PL Design & Proto. Jonathan Aldrich - Case Studies 34

parser codegen scanner

Compiler

  • Architecture allows

– Calls between connected components – Calls from a parent to its immediate subcomponents

Control Communication Integrity

slide-35
SLIDE 35

PL Design & Proto. Jonathan Aldrich - Case Studies 35

parser codegen scanner

Compiler

symbol

  • Architecture allows

– Calls between connected components – Calls from a parent to its immediate subcomponents – Calls to shared objects

Control Communication Integrity

slide-36
SLIDE 36

PL Design & Proto. Jonathan Aldrich - Case Studies 36

parser codegen scanner

Compiler

  • Architecture allows

– Calls between connected components – Calls from a parent to its immediate subcomponents – Calls to shared objects

  • Architecture forbids

– External calls to subcomponents

Control Communication Integrity

slide-37
SLIDE 37

PL Design & Proto. Jonathan Aldrich - Case Studies 37

parser codegen scanner

Compiler

  • Architecture allows

– Calls between connected components – Calls from a parent to its immediate subcomponents – Calls to shared objects

  • Architecture forbids

– External calls to subcomponents – Calls between unconnected subcomponents

Control Communication Integrity

slide-38
SLIDE 38

PL Design & Proto. Jonathan Aldrich - Case Studies 38

  • Architecture allows

– Calls between connected components – Calls from a parent to its immediate subcomponents – Calls to shared objects

  • Architecture forbids

– External calls to subcomponents – Calls between unconnected subcomponents – Calls through shared objects

Control Communication Integrity

parser codegen scanner

Compiler

symbol

slide-39
SLIDE 39

PL Design & Proto. Jonathan Aldrich - Case Studies 39

parser codegen scanner

Compiler

  • Architecture allows

– Calls between connected components – Calls from a parent to its immediate subcomponents – Calls to shared objects

  • Architecture forbids

– External calls to subcomponents – Calls between unconnected subcomponents – Calls through shared objects

  • Benefit: local reasoning about control flow

Control Communication Integrity

slide-40
SLIDE 40

PL Design & Proto. Jonathan Aldrich - Case Studies 40

Enforcing Control-flow Integrity

  • Type system invariant

– Components can only get a typed reference to subcomponents and connected components – Prohibits illegal calls

  • Informal description in ICSE paper

– Formalization and proof to appear in ECOOP ‘02

slide-41
SLIDE 41

PL Design & Proto. Jonathan Aldrich - Case Studies 41

Evaluation Questions

  • Does ArchJava guarantee control communication

integrity?

– Yes, using the type system

  • Is ArchJava expressive enough for real systems?
  • Can ArchJava aid software evolution tasks?
  • Two case studies

– 12,000 lines of Java code each – Asked developer to draw architecture – Tried to specify architecture in ArchJava

slide-42
SLIDE 42

PL Design & Proto. Jonathan Aldrich - Case Studies 42

Evaluation Questions

  • Does ArchJava guarantee control communication

integrity?

– Yes, using the type system

  • Is ArchJava expressive enough for real systems?
  • Can ArchJava aid software evolution tasks?
  • Case study: Aphyds

– 12,000 lines of Java code

– Original developer drew architecture for us – Our task: express the architecture in ArchJava

slide-43
SLIDE 43

PL Design & Proto. Jonathan Aldrich - Case Studies 43

Aphyds Architecture

  • UI above

– Main window – 3 secondary windows

  • Circuit DB below

– Central DB – 5 comput. modules

  • Arrows

– Data & control flow

slide-44
SLIDE 44

PL Design & Proto. Jonathan Aldrich - Case Studies 44

Aphyds Architecture

  • Informal drawing

– Common in practice

  • Leaves out details

– What’s inside the components, connections? – CircuitViewer has internal structure

  • Some surprises

– Missing paths – Component lifetimes Hypothesis: Developers have a conceptual model of their architecture that is mostly accurate, but this model may be a simplification of reality, and it is often not explicit in the code.

slide-45
SLIDE 45

45

UI Architecture Comparison

PL Design & Proto. Jonathan Aldrich - Case Studies

slide-46
SLIDE 46

46

UI Architecture Comparison

PL Design & Proto. Jonathan Aldrich - Case Studies

slide-47
SLIDE 47

PL Design & Proto. Jonathan Aldrich - Case Studies 47

Advantages of ArchJava

  • Complete

– Can “zoom in” on details

  • Consistency checking

– Original architecture had minor flaws

  • Evolves with program
  • Low cost

– 30 hours, or 2.5 hours/KLOC – Includes substantial refactoring – 12.1 KLOC => 12.6 KLOC Hypothesis: Applications can be translated into ArchJava without excessive effort or code bloat.

slide-48
SLIDE 48

PL Design & Proto. Jonathan Aldrich - Case Studies 48

Evaluation Questions

  • Does ArchJava guarantee control communication

integrity?

– Yes

  • Is ArchJava expressive enough for real systems?

– Yes (further validated other case studies)

  • Three experiments

– Understanding Aphyds communication – Refactoring Aphdys – Reparing a defect

slide-49
SLIDE 49

PL Design & Proto. Jonathan Aldrich - Case Studies 49

Evaluation Questions

  • Does ArchJava guarantee control communication

integrity?

– Yes

  • Is ArchJava expressive enough for real systems?

– Yes (validated by 2 other case studies)

  • Can ArchJava aid software evolution tasks?
  • Three experiments

– Understanding Aphyds communication – Reengineering Aphyds’ architecture – Repairing a defect

slide-50
SLIDE 50

PL Design & Proto. Jonathan Aldrich - Case Studies 50

Program Understanding

Communication between the main structures is awkward, especially the change propagation messages – Aphyds developer, initial interview

  • Communication analysis aided by ArchJava

– Ports group related methods

  • provided and required interfaces

– Connections show relationships

  • Discovered refactoring opportunities

Hypothesis: Expressing software architecture in ArchJava highlights refactoring opportunities by making communication protocols explicit.

slide-51
SLIDE 51

PL Design & Proto. Jonathan Aldrich - Case Studies 51

Program Understanding

Communication between the main structures is awkward, especially the change propagation messages – Aphyds developer, initial interview

  • Communication analysis aided by ArchJava

– Ports group related methods

  • provided and required interfaces

– Connections show relationships

  • Discovered refactoring opportunities

Hypothesis: Expressing software architecture in ArchJava highlights refactoring opportunities by making communication protocols explicit.

slide-52
SLIDE 52

PL Design & Proto. Jonathan Aldrich - Case Studies 52

Reengineering Aphyds

getDisplayer().getViewer().ChannelRouterMenuItem.setEnabled(b);

  • Highly coupled code

– Depends on every link in chain – Programs are fragile, change is difficult

  • Law of Demeter [Lieberherr et al.]

– Design guideline – “Only talk with your neighbors”

RouterDialog CircuitDisplayer CircuitViewer MenuItem

slide-53
SLIDE 53

PL Design & Proto. Jonathan Aldrich - Case Studies 53

Reengineering Aphyds

getDisplayer().getViewer().ChannelRouterMenuItem.setEnabled(b);

  • Control communication integrity

– Components only talk with connected components

  • Compile-time error in ArchJava

– RouterDialog can only reference local connections – Instead, call a method through a new port Hypothesis: Enforcing communication integrity helps to reduce system coupling

CircuitViewer MenuItem RouterDialog CircuitDisplayer

slide-54
SLIDE 54

PL Design & Proto. Jonathan Aldrich - Case Studies 54

Reengineering Aphyds

getDisplayer().getViewer().ChannelRouterMenuItem.setEnabled(b);

  • Control communication integrity

– Components only talk with connected components

  • Compile-time error in ArchJava

– RouterDialog can only reference local connections – Call through architecture, reducing coupling Hypothesis: Enforcing communication integrity helps to reduce system coupling

CircuitViewer MenuItem RouterDialog CircuitDisplayer

slide-55
SLIDE 55

PL Design & Proto. Jonathan Aldrich - Case Studies 55

Reengineering Aphyds

getDisplayer().getViewer().ChannelRouterMenuItem.setEnabled(b);

  • Control communication integrity

– Components only talk with connected components

  • Compile-time error in ArchJava

– RouterDialog can only reference local connections – Call through architecture, reducing coupling Hypothesis: Enforcing communication integrity helps to reduce system coupling

CircuitViewer MenuItem RouterDialog CircuitDisplayer

slide-56
SLIDE 56

PL Design & Proto. Jonathan Aldrich - Case Studies 56

Reengineering Aphyds

getDisplayer().getViewer().ChannelRouterMenuItem.setEnabled(b);

  • Control communication integrity

– Components only talk with connected components

  • Compile-time error in ArchJava

– RouterDialog can only reference local connections – Call through architecture, reducing coupling Hypothesis: Enforcing communication integrity helps to reduce system coupling

CircuitViewer MenuItem RouterDialog CircuitDisplayer

slide-57
SLIDE 57

PL Design & Proto. Jonathan Aldrich - Case Studies 57

Defect Repair

  • Fix same Aphyds bug

– First in ArchJava, then Java

  • ArchJava version required more coding

– Had to add new ports & connections

  • Java took longer

– Difficult to find object involved in fix – Even though I’d already fixed the bug in ArchJava!

getDisplayer().placeroutedialog1.placeRouteDisplayer1 .getCircuitGlobalRouter().doGlobalRouting();

Hypothesis: An explicit software architecture makes it easier to identify and evolve the components involved in a change.

slide-58
SLIDE 58

PL Design & Proto. Jonathan Aldrich - Case Studies 58

Defect Repair

  • Fix same Aphyds bug

– First in ArchJava, then Java

  • ArchJava version required more coding

– Had to add new ports & connections

  • Java version took longer

– Difficult to find object involved in fix

  • Had to traverse a sequence of hard-to-find field links

– Even though we had already fixed the bug in ArchJava Hypothesis: An explicit software architecture makes it easier to identify and evolve the components involved in a change.

slide-59
SLIDE 59

PL Design & Proto. Jonathan Aldrich - Case Studies 59

Defect Repair

  • Fix same Aphyds bug

– First in ArchJava, then Java

  • ArchJava version required more coding

– Had to add new ports & connections

  • Java version took longer

– Difficult to find object involved in fix

  • Had to traverse a sequence of hard-to-find field links

– Even though we had already fixed the bug in ArchJava Hypothesis: An explicit software architecture makes it easier to identify and evolve the components involved in a change.

slide-60
SLIDE 60

PL Design & Proto. Jonathan Aldrich - Case Studies 60

Evaluation Questions

  • Is ArchJava expressive enough for real systems?

– Yes

  • Can ArchJava aid software evolution tasks?

– Potential benefits observed

  • Highlights refactoring opportunities
  • Encourages loose coupling
  • May aid defect repair
slide-61
SLIDE 61

PL Design & Proto. Jonathan Aldrich - Case Studies 61

Conclusion

  • ArchJava integrates architecture with Java code
  • Control communication integrity

– Keeps architecture and code synchronized

  • Initial experience

– ArchJava can express real program architectures – ArchJava may aid in software evolution tasks

  • Download the ArchJava compiler and tools

http://www.archjava.org/

slide-62
SLIDE 62

Discussion

  • Consider the ArchJava case study?
  • What did it accomplish?
  • How would you criticize it?
  • Forms of validity

– Construct: are concepts operationalized and measured correctly? – Internal: properly establishing causal relationships? – External: to what domain can the findings be generalized? – Reliability: is the study repeatable with the same results?

PL Design & Proto. Jonathan Aldrich - Case Studies 62

slide-63
SLIDE 63

Sources/References

  • ArchJava: Connecting Software Architecture to Implementation.

Jonathan Aldrich, Craig Chambers, and David Notkin. Proc. International Conference on Software Engineering (ICSE '02), May

  • 2002. http://www.cs.cmu.edu/~aldrich/papers/icse02.pdf
  • Case Studies for Software Engineers. Steve Easterbrook and Jorge
  • Aranda. Tutorial at ICSE 2006. http://www.cs.toronto.edu/~sme/case-

studies/case_study_tutorial_slides.pdf

  • Case Study Research: Design and Methods. Robert K. Yin. SAGE

Publications, 2017.

PL Design & Proto. Jonathan Aldrich - Case Studies 63