SlideShare a Scribd company logo
ICPC08b.ppt
Motivation
□ >50% of maintenance time spent trying to
  understand the program




Marc Eaddy           ICPC 2008               2
Motivation
□ >50% of maintenance time spent trying to
  understand the program
       □ Where are the features,
         reqs, etc. in the code?




Marc Eaddy                  ICPC 2008        3
Motivation
□ >50% of maintenance time spent trying to
  understand the program
       □ Where are the features,
         reqs, etc. in the code?
       □ What is this code for?




Marc Eaddy                  ICPC 2008        4
Motivation
□ >50% of maintenance time spent trying to
  understand the program
       □ Where are the features,
         reqs, etc. in the code?
       □ What is this code for?
       □ Why is it hard to
         understand and change
         the program?


Marc Eaddy                  ICPC 2008        5
What is a “concern?”
             Anything that affects the implementation of a program

□ Feature, requirement, design pattern,
  coding idiom, etc.
□ Raison d'être for code
       □ Every line of code exists to satisfy some concern




Marc Eaddy                          ICPC 2008                        6
Concern location problem
             Concern–code relationship hard to obtain

                                         Program
              Concerns                   Elements




Marc Eaddy                   ICPC 2008                  7
Concern location problem
             Concern–code relationship hard to obtain

                                         Program
              Concerns                   Elements




□ Concern–code relationship undocumented


Marc Eaddy                   ICPC 2008                  8
Concern location problem
                Concern–code relationship hard to obtain

                                            Program
                 Concerns                   Elements




□ Concern–code relationship undocumented
□ Reverse engineer the relationship
       □ (but, which one?)
Marc Eaddy                      ICPC 2008                  9
Software pruning
□ Remove code that supports certain features,
  reqs, etc.
       □ Reduce program’s footprint
       □ Support different platforms
       □ Simplify program




Marc Eaddy                  ICPC 2008       10
Prune dependency rule [ACOM’07]
□ Code is prune dependent on concern if
       □ Pruning the concern requires removing or
         altering the code
□ Must alter code that depends on removed
  code
       □ Prevent compile errors
       □ Eliminate “dead code”
□ Easy to determine/approximate
Marc Eaddy                  ICPC 2008               11
Automated concern location
             Concern–code relationship predicted by an “expert”

□ Experts mine clues in code, docs, etc.
□ Existing techniques use 1 or 2 experts only
□ Our solution: Cerberus
       1. Information retrieval
       2. Execution tracing
       3. Prune dependency analysis



Marc Eaddy                        ICPC 2008                       12
IR-based concern location
□ i.e., Google for code
□ Program entities are documents
□ Requirements are queries
             Requirement                Source
             “Array.join”                Code

                                        Id_joi
                 join                      n
                                        js_join(
                                             )
Marc Eaddy                  ICPC 2008              13
Vector space model [Salton]
□ Parse code and reqs doc to extract term vectors
       □ NativeArray.js_join() method “native,” “array,” “join”
       □ “Array.join” requirement “array,” “join”
□ Our contributions
       □ Expand abbreviations
             □ numconns   number, connections, numberconnections
       □ Index fields
□ Weigh terms (tf · idf)
       □ Term frequency (tf)
       □ Inverse document frequency (idf)
□ Similarity = cosine distance between document and
  query vectors
Marc Eaddy                         ICPC 2008                       14
Tracing-based concern location
□ Observe elements activated when concern is
  exercised
       □ Unit tests for each concern
       □ e.g., find elements uniquely activated by a concern




Marc Eaddy                      ICPC 2008                      15
Tracing-based concern location
□ Observe elements activated when concern is
  exercised
       □ Unit tests for each concern
       □ e.g., find elements uniquely activated by a concern
                      Unit Test               Call
                  for “Array.join”           Graph
                 var a = new Array(1,
                 2);
                 if (a.join(',') ==
                 "1,2")
                 {
                     print "Test
                 passed";
                 }
Marc Eaddy       else {                                        16
                     print "Test      js_construct js_joi
                 failed";                            n
Tracing-based concern location
□ Observe elements activated when concern is
  exercised
       □ Unit tests for each concern
       □ e.g., find elements uniquely activated by a concern
                      Unit Test               Call
                  for “Array.join”           Graph
                 var a = new Array(1,
                 2);
                 if (a.join(',') ==
                 "1,2")
                 {
                     print "Test
                 passed";
                 }
Marc Eaddy       else {                                        17
                     print "Test      js_construct js_joi
                 failed";                            n
Prune dependency analysis
□ Infer relevant elements based on structural
  relationship to relevant element e (seed)
       □ Assumes we already have some seeds
□ Prune dependency analysis
       □ Determines prune dependency rule using
         program analysis
       □ Find references to e
       □ Find superclasses and subclasses of e

Marc Eaddy                 ICPC 2008              18
PDA example

               Source Code               Program Dependency Graph
             interface A {                                        inherits
                 public void foo();                                         A
             }                               C                B
             public class B implements A {
                 public void foo() { ... }         refs
                 public void bar() { ... }
                                          contains            contains contains
             }
             public class C {                           contains
                 public static void main() {
                     B b = new B();
                     b.bar();                    calls
                 }                         main        bar       foo       foo




Marc Eaddy                                ICPC 2008                               19
PDA example

               Source Code               Program Dependency Graph
             interface A {                                        inherits
                 public void foo();                                         A
             }                               C                B
             public class B implements A {
                 public void foo() { ... }         refs
                 public void bar() { ... }
                                          contains            contains contains
             }
             public class C {                           contains
                 public static void main() {
                     B b = new B();
                     b.bar();                    calls
                 }                         main        bar       foo       foo




Marc Eaddy                                ICPC 2008                               20
PDA example

               Source Code               Program Dependency Graph
             interface A {                                        inherits
                 public void foo();                                         A
             }                               C                B
             public class B implements A {
                 public void foo() { ... }         refs
                 public void bar() { ... }
                                          contains            contains contains
             }
             public class C {                           contains
                 public static void main() {
                     B b = new B();
                     b.bar();                    calls
                 }                         main        bar       foo       foo




Marc Eaddy                                ICPC 2008                               21
PDA example

               Source Code               Program Dependency Graph
             interface A {
                 public void foo();
                                                                  inherits
                                             C                B             A
             }
             public class B implements A {
                 public void foo() { ... }         refs
                 public void bar() { ... }
                                          contains            contains contains
             }
             public class C {                           contains
                 public static void main() {
                     B b = new B();
                     b.bar();                    calls
                 }                         main        bar       foo       foo




Marc Eaddy                                ICPC 2008                               22
PDA example

               Source Code               Program Dependency Graph
             interface A {                                        inherits
                 public void foo();                                         A
             }                               C                B
             public class B implements A {
                 public void foo() { ... }         refs
                 public void bar() { ... }
                                          contains            contains contains
             }
             public class C {                           contains
                 public static void main() {
                     B b = new B();
                     b.bar();                    calls
                 }                         main        bar       foo       foo




Marc Eaddy                                ICPC 2008                               23
Cerberus




Marc Eaddy    ICPC 2008   24
Cerberus ≈ PROMESIR + SNIAFL




Marc Eaddy              ICPC 2008           25
Cerberus effectiveness
               Cerberus




Marc Eaddy                            26
Ignoring “No results found”

                      Cerberus




Marc Eaddy                                 27
Future work
□ Improve PDA
       □ Reimplemented using Soot and Polyglot
       □ Generalize using prune dependency predicates
       □ Improve precision using points-to analysis
       □ Improve accuracy using
             □ Dominator heuristic
             □ Variable liveness analysis
□ Improve accuracy of Cerberus
       □ Combine experts using matrix linear regression

Marc Eaddy                          ICPC 2008             28
Cerberus contributions
□ Effectively combined 3
  concern location techniques



□ PDA boosts performance of         Source Code
                                 interface A {
                                     public void foo();
                                                                    Program Dependency Graph

                                                                     C                   B           A




  other techniques
                                 }
                                 public class B implements A {
                                     public void foo() { ... }                refs
                                     public void bar() { ... }
                                                                   contains              contains contains
                                 }
                                 public class C {                                  contains
                                     public static void main() {
                                         B b = new B();
                                         b.bar();
                                                                           calls
                                     }                              main           bar        foo   foo




Marc Eaddy           ICPC 2008                                                                               29
Questions?


                   Marc Eaddy
               Columbia University
             eaddy@cs.columbia.edu




Marc Eaddy            ICPC 2008      30

More Related Content

PDF
Generating Assertion Code from OCL: A Transformational Approach Based on Simi...
PDF
Sentence-to-Code Traceability Recovery with Domain Ontologies
PDF
Detecting Occurrences of Refactoring with Heuristic Search
PDF
The SOUL Tool Suite for Querying Programs in Symbiosis with Eclipse
PDF
Logic-based program transformation in symbiosis with Eclipse
PDF
A Recommender System for Refining Ekeko/X Transformation
PDF
Ekeko Technology Showdown at SoTeSoLa 2012
PDF
Detecting aspect-specific code smells using Ekeko for AspectJ
Generating Assertion Code from OCL: A Transformational Approach Based on Simi...
Sentence-to-Code Traceability Recovery with Domain Ontologies
Detecting Occurrences of Refactoring with Heuristic Search
The SOUL Tool Suite for Querying Programs in Symbiosis with Eclipse
Logic-based program transformation in symbiosis with Eclipse
A Recommender System for Refining Ekeko/X Transformation
Ekeko Technology Showdown at SoTeSoLa 2012
Detecting aspect-specific code smells using Ekeko for AspectJ

What's hot (19)

PDF
A Logic Meta-Programming Foundation for Example-Driven Pattern Detection in O...
PDF
Extending and scripting PDT
PDF
Accelerated Windows Debugging 3 training public slides
PDF
Accelerated .NET Memory Dump Analysis training public slides
PDF
Learning to Spot and Refactor Inconsistent Method Names
PPTX
A (too) Short Introduction to Scala
PDF
Recording Finer-Grained Software Evolution with IDE: An Annotation-Based Appr...
PPTX
Java - Generic programming
PPT
Introduction to-vhdl
PDF
A recommender system for generalizing and refining code templates
PDF
PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice
PDF
Applicative Logic Meta-Programming as the foundation for Template-based Progr...
PPTX
Java concurrency
PDF
Fnt software solutions placement paper
PDF
Accelerated Linux Core Dump Analysis training public slides
PDF
Multi-dimensional exploration of API usage - ICPC13 - 21-05-13
PDF
Basics of reflection in java
PDF
Lecture1
A Logic Meta-Programming Foundation for Example-Driven Pattern Detection in O...
Extending and scripting PDT
Accelerated Windows Debugging 3 training public slides
Accelerated .NET Memory Dump Analysis training public slides
Learning to Spot and Refactor Inconsistent Method Names
A (too) Short Introduction to Scala
Recording Finer-Grained Software Evolution with IDE: An Annotation-Based Appr...
Java - Generic programming
Introduction to-vhdl
A recommender system for generalizing and refining code templates
PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice
Applicative Logic Meta-Programming as the foundation for Template-based Progr...
Java concurrency
Fnt software solutions placement paper
Accelerated Linux Core Dump Analysis training public slides
Multi-dimensional exploration of API usage - ICPC13 - 21-05-13
Basics of reflection in java
Lecture1
Ad

Viewers also liked (14)

PPT
Soundcloud desktop
DOC
Autocom cdp plus
PDF
Ase07 tooldemo.ppt
PPT
I want more pinterest followers
PPT
I need more followers on pinterest
PPT
Soundcloud buttons
PDF
130321 zephyrin soh - on the effect of exploration strategies on maintenanc...
PPTX
Visita de estudios
PDF
17975 20356-1-pb
PPT
LinkedIn Latest Updates 2014
DOCX
تصريح الناتج القومي المحلي
PPT
Coral erp garment
PDF
Software Design Patterns in Theory
PDF
AsianPLoP'14: How and Why Design Patterns Impact Quality and Future Challenges
Soundcloud desktop
Autocom cdp plus
Ase07 tooldemo.ppt
I want more pinterest followers
I need more followers on pinterest
Soundcloud buttons
130321 zephyrin soh - on the effect of exploration strategies on maintenanc...
Visita de estudios
17975 20356-1-pb
LinkedIn Latest Updates 2014
تصريح الناتج القومي المحلي
Coral erp garment
Software Design Patterns in Theory
AsianPLoP'14: How and Why Design Patterns Impact Quality and Future Challenges
Ad

Similar to ICPC08b.ppt (20)

PDF
PDF
Neal Ford Emergent Design And Evolutionary Architecture
KEY
On the Relationship Between Change Coupling and Software Defects
PPTX
Plagiarism introduction
PPTX
Agile and CMMI - a potential blend
PPTX
A glimpse-of-cbd
PDF
ERA - Clustering and Recommending Collections of Code Relevant to Task
PDF
SCAM 2012 Keynote Slides on Cooperative Testing and Analysis by Tao Xie
PDF
Design Principles Behind PATAGONIA
PDF
The Test Case as Executable Example
PDF
Iswim for testing
PDF
OCCF: A Framework for Developing Test Coverage Measurement Tools Supporting M...
KEY
Technical Debt and Requirements
PDF
Eclipse Indigo DemoCamp Walldorf 2011
PDF
Slide collab com
PDF
Sand Piles and Software - Madison Ruby Conference
PPTX
Software engineering principles in system software design
KEY
Enforcing Behavioral Constraints in Evolving Aspect-Oriented Programs
PDF
Close Encounters in MDD: when models meet code
PDF
Close encounters in MDD: when Models meet Code
Neal Ford Emergent Design And Evolutionary Architecture
On the Relationship Between Change Coupling and Software Defects
Plagiarism introduction
Agile and CMMI - a potential blend
A glimpse-of-cbd
ERA - Clustering and Recommending Collections of Code Relevant to Task
SCAM 2012 Keynote Slides on Cooperative Testing and Analysis by Tao Xie
Design Principles Behind PATAGONIA
The Test Case as Executable Example
Iswim for testing
OCCF: A Framework for Developing Test Coverage Measurement Tools Supporting M...
Technical Debt and Requirements
Eclipse Indigo DemoCamp Walldorf 2011
Slide collab com
Sand Piles and Software - Madison Ruby Conference
Software engineering principles in system software design
Enforcing Behavioral Constraints in Evolving Aspect-Oriented Programs
Close Encounters in MDD: when models meet code
Close encounters in MDD: when Models meet Code

More from Ptidej Team (20)

PDF
From IoT to Software Miniaturisation
PDF
Presentation
PDF
Presentation
PDF
Presentation
PDF
Presentation by Lionel Briand
PDF
Manel Abdellatif
PDF
Azadeh Kermansaravi
PDF
Mouna Abidi
PDF
CSED - Manel Grichi
PDF
Cristiano Politowski
PDF
Will io t trigger the next software crisis
PDF
PDF
Thesis+of+laleh+eshkevari.ppt
PDF
Thesis+of+nesrine+abdelkafi.ppt
PDF
Medicine15.ppt
PDF
Qrs17b.ppt
PDF
Icpc11c.ppt
PDF
Icsme16.ppt
PDF
Msr17a.ppt
PDF
Icsoc15.ppt
From IoT to Software Miniaturisation
Presentation
Presentation
Presentation
Presentation by Lionel Briand
Manel Abdellatif
Azadeh Kermansaravi
Mouna Abidi
CSED - Manel Grichi
Cristiano Politowski
Will io t trigger the next software crisis
Thesis+of+laleh+eshkevari.ppt
Thesis+of+nesrine+abdelkafi.ppt
Medicine15.ppt
Qrs17b.ppt
Icpc11c.ppt
Icsme16.ppt
Msr17a.ppt
Icsoc15.ppt

Recently uploaded (20)

PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PPT
Teaching material agriculture food technology
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PPTX
Big Data Technologies - Introduction.pptx
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
PDF
Approach and Philosophy of On baking technology
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Network Security Unit 5.pdf for BCA BBA.
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
NewMind AI Weekly Chronicles - August'25 Week I
Encapsulation_ Review paper, used for researhc scholars
Diabetes mellitus diagnosis method based random forest with bat algorithm
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Teaching material agriculture food technology
Advanced methodologies resolving dimensionality complications for autism neur...
Big Data Technologies - Introduction.pptx
Building Integrated photovoltaic BIPV_UPV.pdf
Chapter 3 Spatial Domain Image Processing.pdf
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
Approach and Philosophy of On baking technology
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Network Security Unit 5.pdf for BCA BBA.
Digital-Transformation-Roadmap-for-Companies.pptx
The AUB Centre for AI in Media Proposal.docx
Unlocking AI with Model Context Protocol (MCP)
Reach Out and Touch Someone: Haptics and Empathic Computing
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
MIND Revenue Release Quarter 2 2025 Press Release
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
NewMind AI Weekly Chronicles - August'25 Week I

ICPC08b.ppt

  • 2. Motivation □ >50% of maintenance time spent trying to understand the program Marc Eaddy ICPC 2008 2
  • 3. Motivation □ >50% of maintenance time spent trying to understand the program □ Where are the features, reqs, etc. in the code? Marc Eaddy ICPC 2008 3
  • 4. Motivation □ >50% of maintenance time spent trying to understand the program □ Where are the features, reqs, etc. in the code? □ What is this code for? Marc Eaddy ICPC 2008 4
  • 5. Motivation □ >50% of maintenance time spent trying to understand the program □ Where are the features, reqs, etc. in the code? □ What is this code for? □ Why is it hard to understand and change the program? Marc Eaddy ICPC 2008 5
  • 6. What is a “concern?” Anything that affects the implementation of a program □ Feature, requirement, design pattern, coding idiom, etc. □ Raison d'être for code □ Every line of code exists to satisfy some concern Marc Eaddy ICPC 2008 6
  • 7. Concern location problem Concern–code relationship hard to obtain Program Concerns Elements Marc Eaddy ICPC 2008 7
  • 8. Concern location problem Concern–code relationship hard to obtain Program Concerns Elements □ Concern–code relationship undocumented Marc Eaddy ICPC 2008 8
  • 9. Concern location problem Concern–code relationship hard to obtain Program Concerns Elements □ Concern–code relationship undocumented □ Reverse engineer the relationship □ (but, which one?) Marc Eaddy ICPC 2008 9
  • 10. Software pruning □ Remove code that supports certain features, reqs, etc. □ Reduce program’s footprint □ Support different platforms □ Simplify program Marc Eaddy ICPC 2008 10
  • 11. Prune dependency rule [ACOM’07] □ Code is prune dependent on concern if □ Pruning the concern requires removing or altering the code □ Must alter code that depends on removed code □ Prevent compile errors □ Eliminate “dead code” □ Easy to determine/approximate Marc Eaddy ICPC 2008 11
  • 12. Automated concern location Concern–code relationship predicted by an “expert” □ Experts mine clues in code, docs, etc. □ Existing techniques use 1 or 2 experts only □ Our solution: Cerberus 1. Information retrieval 2. Execution tracing 3. Prune dependency analysis Marc Eaddy ICPC 2008 12
  • 13. IR-based concern location □ i.e., Google for code □ Program entities are documents □ Requirements are queries Requirement Source “Array.join” Code Id_joi join n js_join( ) Marc Eaddy ICPC 2008 13
  • 14. Vector space model [Salton] □ Parse code and reqs doc to extract term vectors □ NativeArray.js_join() method “native,” “array,” “join” □ “Array.join” requirement “array,” “join” □ Our contributions □ Expand abbreviations □ numconns number, connections, numberconnections □ Index fields □ Weigh terms (tf · idf) □ Term frequency (tf) □ Inverse document frequency (idf) □ Similarity = cosine distance between document and query vectors Marc Eaddy ICPC 2008 14
  • 15. Tracing-based concern location □ Observe elements activated when concern is exercised □ Unit tests for each concern □ e.g., find elements uniquely activated by a concern Marc Eaddy ICPC 2008 15
  • 16. Tracing-based concern location □ Observe elements activated when concern is exercised □ Unit tests for each concern □ e.g., find elements uniquely activated by a concern Unit Test Call for “Array.join” Graph var a = new Array(1, 2); if (a.join(',') == "1,2") { print "Test passed"; } Marc Eaddy else { 16 print "Test js_construct js_joi failed"; n
  • 17. Tracing-based concern location □ Observe elements activated when concern is exercised □ Unit tests for each concern □ e.g., find elements uniquely activated by a concern Unit Test Call for “Array.join” Graph var a = new Array(1, 2); if (a.join(',') == "1,2") { print "Test passed"; } Marc Eaddy else { 17 print "Test js_construct js_joi failed"; n
  • 18. Prune dependency analysis □ Infer relevant elements based on structural relationship to relevant element e (seed) □ Assumes we already have some seeds □ Prune dependency analysis □ Determines prune dependency rule using program analysis □ Find references to e □ Find superclasses and subclasses of e Marc Eaddy ICPC 2008 18
  • 19. PDA example Source Code Program Dependency Graph interface A { inherits public void foo(); A } C B public class B implements A { public void foo() { ... } refs public void bar() { ... } contains contains contains } public class C { contains public static void main() { B b = new B(); b.bar(); calls } main bar foo foo Marc Eaddy ICPC 2008 19
  • 20. PDA example Source Code Program Dependency Graph interface A { inherits public void foo(); A } C B public class B implements A { public void foo() { ... } refs public void bar() { ... } contains contains contains } public class C { contains public static void main() { B b = new B(); b.bar(); calls } main bar foo foo Marc Eaddy ICPC 2008 20
  • 21. PDA example Source Code Program Dependency Graph interface A { inherits public void foo(); A } C B public class B implements A { public void foo() { ... } refs public void bar() { ... } contains contains contains } public class C { contains public static void main() { B b = new B(); b.bar(); calls } main bar foo foo Marc Eaddy ICPC 2008 21
  • 22. PDA example Source Code Program Dependency Graph interface A { public void foo(); inherits C B A } public class B implements A { public void foo() { ... } refs public void bar() { ... } contains contains contains } public class C { contains public static void main() { B b = new B(); b.bar(); calls } main bar foo foo Marc Eaddy ICPC 2008 22
  • 23. PDA example Source Code Program Dependency Graph interface A { inherits public void foo(); A } C B public class B implements A { public void foo() { ... } refs public void bar() { ... } contains contains contains } public class C { contains public static void main() { B b = new B(); b.bar(); calls } main bar foo foo Marc Eaddy ICPC 2008 23
  • 24. Cerberus Marc Eaddy ICPC 2008 24
  • 25. Cerberus ≈ PROMESIR + SNIAFL Marc Eaddy ICPC 2008 25
  • 26. Cerberus effectiveness Cerberus Marc Eaddy 26
  • 27. Ignoring “No results found” Cerberus Marc Eaddy 27
  • 28. Future work □ Improve PDA □ Reimplemented using Soot and Polyglot □ Generalize using prune dependency predicates □ Improve precision using points-to analysis □ Improve accuracy using □ Dominator heuristic □ Variable liveness analysis □ Improve accuracy of Cerberus □ Combine experts using matrix linear regression Marc Eaddy ICPC 2008 28
  • 29. Cerberus contributions □ Effectively combined 3 concern location techniques □ PDA boosts performance of Source Code interface A { public void foo(); Program Dependency Graph C B A other techniques } public class B implements A { public void foo() { ... } refs public void bar() { ... } contains contains contains } public class C { contains public static void main() { B b = new B(); b.bar(); calls } main bar foo foo Marc Eaddy ICPC 2008 29
  • 30. Questions? Marc Eaddy Columbia University eaddy@cs.columbia.edu Marc Eaddy ICPC 2008 30