SlideShare une entreprise Scribd logo
1  sur  25
Télécharger pour lire hors ligne
Delving (Smalltalk) Source Code
Dr. Tom Tourwé
SEN / CWI
Pr. Kim Mens
INGI / UCL
Monday, September 6, 2004
with Formal Concept Analysis
September 6, 2004 ESUG 2004 Research Track 2
Overview
 Research goal
 A crash course on formal concept analysis
 Delving Smalltalk source code with FCA
 Experiments
 Results
 Conclusion
September 6, 2004 ESUG 2004 Research Track 3
Research Goal
 A lightweight source-code mining tool
– get “initial understanding” of structure of software system
– detect recurring patterns in the source code
 Formal concept analysis (FCA)
– A mathematical technique
– Known applications in data analysis and knowledge processing
 Can we use FCA to delve code for indications of patterns?
– Coding conventions
– Programming idioms and design patterns
– Opportunities for refactoring
– Relevant domain concepts
September 6, 2004 ESUG 2004 Research Track 4
object-
oriented
functional logic
static
typing
dynamic
typing
C++
Find relevant taxonomy of
programming languages
based on their common properties
Java
Smalltalk
Scheme
Prolog
A crash course on FCA — example
September 6, 2004 ESUG 2004 Research Track 5
A crash course on FCA — theory
A. Starts from
– a set of elements
– a set of properties of those elements
– incidence table
B. Determines concepts
– Maximal groups of elements and properties
– Group:
• Every element of the concept has those properties
• Every property of the concept holds for those elements
– Maximal
• No other element (outside the concept) has those same properties
• No other property (outside the concept) is shared by all elements
C. Organizes these concepts in a lattice structure
September 6, 2004 ESUG 2004 Research Track 6
object-
oriented
functional logic
static
typing
dynamic
typing
C++ X - - X -
Java X - - X -
Smalltalk X - - - X
Scheme - X - - X
Prolog - - X - X
A. Incidence table
September 6, 2004 ESUG 2004 Research Track 7
object-
oriented
functional logic
static
typing
dynamic
typing
C++ X - - X -
Java X - - X -
Smalltalk X - - - X
Scheme - X - - X
Prolog - - X - X
B. Concept 1
September 6, 2004 ESUG 2004 Research Track 8
object-
oriented
functional logic
static
typing
dynamic
typing
C++ X - - X -
Java X - - X -
Smalltalk X - - - X
Scheme - X - - X
Prolog - - X - X
B. Concept 2
September 6, 2004 ESUG 2004 Research Track 9
object-
oriented
functional logic
static
typing
dynamic
typing
C++ X - - X -
Java X - - X -
Smalltalk X - - - X
Scheme - X - - X
Prolog - - X - X
B. Concept 3
September 6, 2004 ESUG 2004 Research Track 10
object-
oriented
functional logic
static
typing
dynamic
typing
C++ X - - X -
Java X - - X -
Smalltalk X - - - X
Scheme - X - - X
Prolog - - X - X
B. More concepts …
September 6, 2004 ESUG 2004 Research Track 11
object-
oriented
functional logic
static
typing
dynamic
typing
C++ X - - X -
Java X - - X -
Smalltalk X - - - X
Scheme - X - - X
Prolog - - X - X
B. More concepts …
September 6, 2004 ESUG 2004 Research Track 12
object-
oriented
functional logic
static
typing
dynamic
typing
C++ X - - X -
Java X - - X -
Smalltalk X - - - X
Scheme - X - - X
Prolog - - X - X
B. More concepts …
September 6, 2004 ESUG 2004 Research Track 13
object-
oriented
functional logic
static
typing
dynamic
typing
C++ X - - X -
Java X - - X -
Smalltalk X - - - X
Scheme - X - - X
Prolog - - X - X
B. Concepts
September 6, 2004 ESUG 2004 Research Track 14
C. Concept Lattice
September 6, 2004 ESUG 2004 Research Track 15
Delving ST source code with FCA
 Elements : classes, methods, argument names
 Properties : substrings of classes, methods, …
Foo Zork
import: aFoo
Bar
asFoo: anObject
The “Foo” concept
September 6, 2004 ESUG 2004 Research Track 16
Delving source code
1. Generate the formal context
• Elements, properties & incidence relation
2. Concept Analysis
• Calculate the formal concepts
• Organize them into a concept lattice
3. Filtering
• Remove irrelevant concepts (false positives, noise,
useless, …)
4. Classify, combine and annotate concepts
• In a way that is more easy for a software engineer to
interpret
Foo Zork
import: aFoo
Bar
asFoo: anObject
September 6, 2004 ESUG 2004 Research Track 17
DelfSTof, our Code Delving Tool
September 6, 2004 ESUG 2004 Research Track 18
1. Generate formal context
 We want to group elements that share a substring
 As elements we collect
– all classes, methods and parameters
– in some package(s) of interest
 As properties : “relevant” substrings of element names
– Normalisation :
• extract terms based on where uppercases occur
• convert to lower case and remove special characters like ‘:’
• QuotedCodeConstant → { quoted, code, constant }
– Elimination of stopwords : with, do, object
– Stemming : reduce words to their root
 Incidence relation : An element has a certain property if
– It has the substring in its name
Foo Zork
import: aFoo
Bar
asFoo: anObject
September 6, 2004 ESUG 2004 Research Track 19
…
X
-
-
-
variable
…
X
-
X
functor
…
-
-
X
-
messageunify index env source …
Object>>unifyWithObject: inEnv:
myIndex: hisIndex: inSource:
X X X X …
Variable>>unifyWithMessageFunctor:
inEnv: myIndex: hisIndex: inSource:
X X X X …
AbstractTerm>>unifyWith: inEnv:
myIndex: hisIndex: inSource:
X X X X …
AbstractTerm>>unifyWithVariable:
inEnv: myIndex: hisIndex: inSource:
X X X X …
… X X X X …
2. Concept Analysis
Foo Zork
import: aFoo
Bar
asFoo: anObject
September 6, 2004 ESUG 2004 Research Track 20
…
X
-
-
-
variable
…
X
-
X
functor
…
-
-
X
-
messageunify index env source …
Object>>unifyWithObject: inEnv:
myIndex: hisIndex: inSource:
X X X X …
Variable>>unifyWithMessageFunctor:
inEnv: myIndex: hisIndex: inSource:
X X X X …
AbstractTerm>>unifyWith: inEnv:
myIndex: hisIndex: inSource:
X X X X …
AbstractTerm>>unifyWithVariable:
inEnv: myIndex: hisIndex: inSource:
X X X X …
… X X X X …
2. Concept Analysis
Foo Zork
import: aFoo
Bar
asFoo: anObject
September 6, 2004 ESUG 2004 Research Track 21
3. Filtering
 Preprocessing to filter irrelevant properties :
– with little meaning : “do”, “with”, “for”, “from”, “the”, “ifTrue”, …
– too small (< 3 chars)
– ignore plurals, uppercase and colons
 Extra filtering
– Drop top & bottom concept when empty
– Drop concepts with two elements are less
– Drop concepts that group only classes
 More filtering needed (ongoing work)
– Recombine substrings belonging together
– Require some minimal coverage of element name by properties
– Concepts higher in the lattice may be more relevant (more properties)
– Avoid redundancy in discovered concepts
• Make better use of the lattice structure (Now it is “flattened”)
Foo Zork
import: aFoo
Bar
asFoo: anObject
September 6, 2004 ESUG 2004 Research Track 22
4. Classification,
Combination & Annotation
 Annotate concepts with their properties
– i.e. with the substring(s) shared by their elements
 Classification
– Single class concepts
• Elements are methods (or their parameters) in that class
– Hierarchy concepts
• Group classes, methods and parameters in same class hierarchy
• Annotate concept with root of hierarchy
• Annotate methods with implementing class
– Crosscutting concepts
• When two different class hierarchies are involved
 Combine concepts
– that belong together (subconcept relationship)
 Group methods
– belonging to the same class
Foo Zork
import: aFoo
Bar
asFoo: anObject
September 6, 2004 ESUG 2004 Research Track 23
Quantitative results
 Time to compute = a few seconds / minutes
  properties  <  elements  is a good sign
 Still too much concepts remain after filtering
Upperlimit: theoretical < 2min(#elements, #properties); experimental < #elements
7115740352731 (52)StarBrowser
5131650247802 (135)DelfSTof
447124342287364834 (271)Ref.Browser
327
284
#filtered
1419
1206
#raw
24
22
time (sec)
4771370 (93)CodeCrawler
4381488 (111)Soul
#properties#elementsCase study
Foo Zork
import: aFoo
Bar
asFoo: anObject
September 6, 2004 ESUG 2004 Research Track 24
 Code duplication
 Design patterns
– Visitor, Abstract Factory, Builder, Observer
 Programming idioms
– Accessing methods, chained messages, delegating methods,
polymorphism
 Relevant domain concepts
– Correspond to frequently occurring properties
– “Unification”, “Bindings”, “Horn clauses”, “resolution”
 Opportunities for refactoring
 Some crosscutting concerns
Discovered “indications”
of patterns
Foo Zork
import: aFoo
Bar
asFoo: anObject
September 6, 2004 ESUG 2004 Research Track 25
Conclusion
 Current status : feasibility study
– Approach produced relevant results
– Efficiency is acceptable
– Tool needs refinement
• More advanced filtering ; extra checking a posteriori
 Future work : applying FCA to delve source code for
– aspects and crosscutting concerns
• based on “generic parse trees”
• by using an incidence relation that represents “message sends”
– refactoring opportunities
– Both Smalltalk and Java source code

Contenu connexe

Tendances

Large-scale Reasoning with a Complex Cultural Heritage Ontology (CIDOC CRM) ...
 Large-scale Reasoning with a Complex Cultural Heritage Ontology (CIDOC CRM) ... Large-scale Reasoning with a Complex Cultural Heritage Ontology (CIDOC CRM) ...
Large-scale Reasoning with a Complex Cultural Heritage Ontology (CIDOC CRM) ...Vladimir Alexiev, PhD, PMP
 
Improving Top-K Retrieval Algorithms Using Dynamic Programming and Longer Ski...
Improving Top-K Retrieval Algorithms Using Dynamic Programming and Longer Ski...Improving Top-K Retrieval Algorithms Using Dynamic Programming and Longer Ski...
Improving Top-K Retrieval Algorithms Using Dynamic Programming and Longer Ski...Sease
 
Python 3 Programming Language
Python 3 Programming LanguagePython 3 Programming Language
Python 3 Programming LanguageTahani Al-Manie
 
Under the hood of scala implicits (Scala eXchange 2014)
Under the hood of scala implicits (Scala eXchange 2014)Under the hood of scala implicits (Scala eXchange 2014)
Under the hood of scala implicits (Scala eXchange 2014)Alexander Podkhalyuzin
 
Semantic web meetup – sparql tutorial
Semantic web meetup – sparql tutorialSemantic web meetup – sparql tutorial
Semantic web meetup – sparql tutorialAdonisDamian
 
Text Classification in Python – using Pandas, scikit-learn, IPython Notebook ...
Text Classification in Python – using Pandas, scikit-learn, IPython Notebook ...Text Classification in Python – using Pandas, scikit-learn, IPython Notebook ...
Text Classification in Python – using Pandas, scikit-learn, IPython Notebook ...Jimmy Lai
 
Data translation with SPARQL 1.1
Data translation with SPARQL 1.1Data translation with SPARQL 1.1
Data translation with SPARQL 1.1andreas_schultz
 
How to write a TableGen backend
How to write a TableGen backendHow to write a TableGen backend
How to write a TableGen backendMin-Yih Hsu
 
Integrating a Domain Ontology Development Environment and an Ontology Search ...
Integrating a Domain Ontology Development Environment and an Ontology Search ...Integrating a Domain Ontology Development Environment and an Ontology Search ...
Integrating a Domain Ontology Development Environment and an Ontology Search ...Takeshi Morita
 
Binary Studio Academy PRO: ANTLR course by Alexander Vasiltsov (lesson 1)
Binary Studio Academy PRO: ANTLR course by Alexander Vasiltsov (lesson 1)Binary Studio Academy PRO: ANTLR course by Alexander Vasiltsov (lesson 1)
Binary Studio Academy PRO: ANTLR course by Alexander Vasiltsov (lesson 1)Binary Studio
 
WebTech Tutorial Querying DBPedia
WebTech Tutorial Querying DBPediaWebTech Tutorial Querying DBPedia
WebTech Tutorial Querying DBPediaKatrien Verbert
 
Twinkle: A SPARQL Query Tool
Twinkle: A SPARQL Query ToolTwinkle: A SPARQL Query Tool
Twinkle: A SPARQL Query ToolLeigh Dodds
 
Input/Output Exploring java.io
Input/Output Exploring java.ioInput/Output Exploring java.io
Input/Output Exploring java.ioNilaNila16
 

Tendances (19)

SPARQL 1.1 Status
SPARQL 1.1 StatusSPARQL 1.1 Status
SPARQL 1.1 Status
 
Substituting HDF5 tools with Python/H5py scripts
Substituting HDF5 tools with Python/H5py scriptsSubstituting HDF5 tools with Python/H5py scripts
Substituting HDF5 tools with Python/H5py scripts
 
Large-scale Reasoning with a Complex Cultural Heritage Ontology (CIDOC CRM) ...
 Large-scale Reasoning with a Complex Cultural Heritage Ontology (CIDOC CRM) ... Large-scale Reasoning with a Complex Cultural Heritage Ontology (CIDOC CRM) ...
Large-scale Reasoning with a Complex Cultural Heritage Ontology (CIDOC CRM) ...
 
Improving Top-K Retrieval Algorithms Using Dynamic Programming and Longer Ski...
Improving Top-K Retrieval Algorithms Using Dynamic Programming and Longer Ski...Improving Top-K Retrieval Algorithms Using Dynamic Programming and Longer Ski...
Improving Top-K Retrieval Algorithms Using Dynamic Programming and Longer Ski...
 
SPARQL Cheat Sheet
SPARQL Cheat SheetSPARQL Cheat Sheet
SPARQL Cheat Sheet
 
Python 3 Programming Language
Python 3 Programming LanguagePython 3 Programming Language
Python 3 Programming Language
 
Under the hood of scala implicits (Scala eXchange 2014)
Under the hood of scala implicits (Scala eXchange 2014)Under the hood of scala implicits (Scala eXchange 2014)
Under the hood of scala implicits (Scala eXchange 2014)
 
Semantic web meetup – sparql tutorial
Semantic web meetup – sparql tutorialSemantic web meetup – sparql tutorial
Semantic web meetup – sparql tutorial
 
Text Classification in Python – using Pandas, scikit-learn, IPython Notebook ...
Text Classification in Python – using Pandas, scikit-learn, IPython Notebook ...Text Classification in Python – using Pandas, scikit-learn, IPython Notebook ...
Text Classification in Python – using Pandas, scikit-learn, IPython Notebook ...
 
Data translation with SPARQL 1.1
Data translation with SPARQL 1.1Data translation with SPARQL 1.1
Data translation with SPARQL 1.1
 
How to write a TableGen backend
How to write a TableGen backendHow to write a TableGen backend
How to write a TableGen backend
 
Using HDF5 and Python: The H5py module
Using HDF5 and Python: The H5py moduleUsing HDF5 and Python: The H5py module
Using HDF5 and Python: The H5py module
 
Integrating a Domain Ontology Development Environment and an Ontology Search ...
Integrating a Domain Ontology Development Environment and an Ontology Search ...Integrating a Domain Ontology Development Environment and an Ontology Search ...
Integrating a Domain Ontology Development Environment and an Ontology Search ...
 
Binary Studio Academy PRO: ANTLR course by Alexander Vasiltsov (lesson 1)
Binary Studio Academy PRO: ANTLR course by Alexander Vasiltsov (lesson 1)Binary Studio Academy PRO: ANTLR course by Alexander Vasiltsov (lesson 1)
Binary Studio Academy PRO: ANTLR course by Alexander Vasiltsov (lesson 1)
 
Clonedigger-Python
Clonedigger-PythonClonedigger-Python
Clonedigger-Python
 
Python Tutorial Part 1
Python Tutorial Part 1Python Tutorial Part 1
Python Tutorial Part 1
 
WebTech Tutorial Querying DBPedia
WebTech Tutorial Querying DBPediaWebTech Tutorial Querying DBPedia
WebTech Tutorial Querying DBPedia
 
Twinkle: A SPARQL Query Tool
Twinkle: A SPARQL Query ToolTwinkle: A SPARQL Query Tool
Twinkle: A SPARQL Query Tool
 
Input/Output Exploring java.io
Input/Output Exploring java.ioInput/Output Exploring java.io
Input/Output Exploring java.io
 

En vedette

Classboxes
ClassboxesClassboxes
ClassboxesESUG
 
Co-evolving Code and Design with Intensional Views
Co-evolving Code and Design with Intensional ViewsCo-evolving Code and Design with Intensional Views
Co-evolving Code and Design with Intensional ViewsESUG
 
A Glimpse at Pomodoro
A Glimpse at PomodoroA Glimpse at Pomodoro
A Glimpse at PomodoroESUG
 
LOOP
LOOPLOOP
LOOPESUG
 
Change-Oriented Software Engineering
Change-Oriented Software EngineeringChange-Oriented Software Engineering
Change-Oriented Software EngineeringESUG
 
VA Smalltalk Going Forward
VA Smalltalk Going ForwardVA Smalltalk Going Forward
VA Smalltalk Going ForwardESUG
 
Xtreams
XtreamsXtreams
XtreamsESUG
 
Unanticipated Partial Behavioral Reflection
Unanticipated Partial Behavioral ReflectionUnanticipated Partial Behavioral Reflection
Unanticipated Partial Behavioral ReflectionESUG
 
How to find the Bach House in Cöthen
How to find the Bach House in CöthenHow to find the Bach House in Cöthen
How to find the Bach House in CöthenESUG
 
The Object Repository - Pulling Objects out of the Ecosystem
The Object Repository - Pulling Objects out of the EcosystemThe Object Repository - Pulling Objects out of the Ecosystem
The Object Repository - Pulling Objects out of the EcosystemESUG
 

En vedette (10)

Classboxes
ClassboxesClassboxes
Classboxes
 
Co-evolving Code and Design with Intensional Views
Co-evolving Code and Design with Intensional ViewsCo-evolving Code and Design with Intensional Views
Co-evolving Code and Design with Intensional Views
 
A Glimpse at Pomodoro
A Glimpse at PomodoroA Glimpse at Pomodoro
A Glimpse at Pomodoro
 
LOOP
LOOPLOOP
LOOP
 
Change-Oriented Software Engineering
Change-Oriented Software EngineeringChange-Oriented Software Engineering
Change-Oriented Software Engineering
 
VA Smalltalk Going Forward
VA Smalltalk Going ForwardVA Smalltalk Going Forward
VA Smalltalk Going Forward
 
Xtreams
XtreamsXtreams
Xtreams
 
Unanticipated Partial Behavioral Reflection
Unanticipated Partial Behavioral ReflectionUnanticipated Partial Behavioral Reflection
Unanticipated Partial Behavioral Reflection
 
How to find the Bach House in Cöthen
How to find the Bach House in CöthenHow to find the Bach House in Cöthen
How to find the Bach House in Cöthen
 
The Object Repository - Pulling Objects out of the Ecosystem
The Object Repository - Pulling Objects out of the EcosystemThe Object Repository - Pulling Objects out of the Ecosystem
The Object Repository - Pulling Objects out of the Ecosystem
 

Similaire à Delving (Smalltalk) Source Code

fREX: fUML-based Reverse Engineering of Executable Behavior for Software Dyna...
fREX: fUML-based Reverse Engineering of Executable Behavior for Software Dyna...fREX: fUML-based Reverse Engineering of Executable Behavior for Software Dyna...
fREX: fUML-based Reverse Engineering of Executable Behavior for Software Dyna...Hugo Bruneliere
 
Towards Computational Research Objects
Towards Computational Research ObjectsTowards Computational Research Objects
Towards Computational Research ObjectsDavid De Roure
 
OW2con'14 - erOCCI, a scalable, model-based REST API framework
OW2con'14 - erOCCI, a scalable, model-based REST API frameworkOW2con'14 - erOCCI, a scalable, model-based REST API framework
OW2con'14 - erOCCI, a scalable, model-based REST API frameworkOW2
 
erocci, a scalable model-driven REST framework
erocci, a scalable model-driven REST frameworkerocci, a scalable model-driven REST framework
erocci, a scalable model-driven REST frameworkJean Parpaillon
 
Concept lattices: a representation space to structure software variability
Concept lattices: a representation space to structure software variabilityConcept lattices: a representation space to structure software variability
Concept lattices: a representation space to structure software variabilityRa'Fat Al-Msie'deen
 
Report on the CLEF-IP 2012 Experiments: Search of Topically Organized Patents
Report on the CLEF-IP 2012 Experiments: Search of Topically Organized PatentsReport on the CLEF-IP 2012 Experiments: Search of Topically Organized Patents
Report on the CLEF-IP 2012 Experiments: Search of Topically Organized PatentsMike Salampasis
 
The Landscape of Ontology Reuse in Linked Data - OEDW2012
The Landscape of Ontology Reuse in Linked Data - OEDW2012The Landscape of Ontology Reuse in Linked Data - OEDW2012
The Landscape of Ontology Reuse in Linked Data - OEDW2012María Poveda Villalón
 
Reverse Engineering Feature Models From Software Variants to Build Software P...
Reverse Engineering Feature Models From Software Variants to Build Software P...Reverse Engineering Feature Models From Software Variants to Build Software P...
Reverse Engineering Feature Models From Software Variants to Build Software P...Ra'Fat Al-Msie'deen
 
Clojure beasts-euroclj-2014
Clojure beasts-euroclj-2014Clojure beasts-euroclj-2014
Clojure beasts-euroclj-2014Renzo Borgatti
 
From Java to Kotlin - The first month in practice
From Java to Kotlin - The first month in practiceFrom Java to Kotlin - The first month in practice
From Java to Kotlin - The first month in practiceStefanTomm
 
Object Detection with Tensorflow
Object Detection with TensorflowObject Detection with Tensorflow
Object Detection with TensorflowElifTech
 
Programming the Semantic Web
Programming the Semantic WebProgramming the Semantic Web
Programming the Semantic WebLuigi De Russis
 
Delving Source Code with Formal Concept Analysis
Delving Source Code with Formal Concept Analysis Delving Source Code with Formal Concept Analysis
Delving Source Code with Formal Concept Analysis kim.mens
 
WISE2017 - Factorization Machines Leveraging Lightweight Linked Open Data-ena...
WISE2017 - Factorization Machines Leveraging Lightweight Linked Open Data-ena...WISE2017 - Factorization Machines Leveraging Lightweight Linked Open Data-ena...
WISE2017 - Factorization Machines Leveraging Lightweight Linked Open Data-ena...GUANGYUAN PIAO
 
SoDA v2 - Named Entity Recognition from streaming text
SoDA v2 - Named Entity Recognition from streaming textSoDA v2 - Named Entity Recognition from streaming text
SoDA v2 - Named Entity Recognition from streaming textSujit Pal
 
OpenCon2014 - Sumatra as an Open Science tool
OpenCon2014 - Sumatra as an Open Science toolOpenCon2014 - Sumatra as an Open Science tool
OpenCon2014 - Sumatra as an Open Science toolFelix Z. Hoffmann
 
Search Me: Using Lucene.Net
Search Me: Using Lucene.NetSearch Me: Using Lucene.Net
Search Me: Using Lucene.Netgramana
 
Eclipse Memory Analyzer
Eclipse Memory AnalyzerEclipse Memory Analyzer
Eclipse Memory Analyzernayashkova
 
Ios fundamentals with ObjectiveC
Ios fundamentals with ObjectiveCIos fundamentals with ObjectiveC
Ios fundamentals with ObjectiveCMadusha Perera
 
Aidan's PhD Viva
Aidan's PhD VivaAidan's PhD Viva
Aidan's PhD VivaAidan Hogan
 

Similaire à Delving (Smalltalk) Source Code (20)

fREX: fUML-based Reverse Engineering of Executable Behavior for Software Dyna...
fREX: fUML-based Reverse Engineering of Executable Behavior for Software Dyna...fREX: fUML-based Reverse Engineering of Executable Behavior for Software Dyna...
fREX: fUML-based Reverse Engineering of Executable Behavior for Software Dyna...
 
Towards Computational Research Objects
Towards Computational Research ObjectsTowards Computational Research Objects
Towards Computational Research Objects
 
OW2con'14 - erOCCI, a scalable, model-based REST API framework
OW2con'14 - erOCCI, a scalable, model-based REST API frameworkOW2con'14 - erOCCI, a scalable, model-based REST API framework
OW2con'14 - erOCCI, a scalable, model-based REST API framework
 
erocci, a scalable model-driven REST framework
erocci, a scalable model-driven REST frameworkerocci, a scalable model-driven REST framework
erocci, a scalable model-driven REST framework
 
Concept lattices: a representation space to structure software variability
Concept lattices: a representation space to structure software variabilityConcept lattices: a representation space to structure software variability
Concept lattices: a representation space to structure software variability
 
Report on the CLEF-IP 2012 Experiments: Search of Topically Organized Patents
Report on the CLEF-IP 2012 Experiments: Search of Topically Organized PatentsReport on the CLEF-IP 2012 Experiments: Search of Topically Organized Patents
Report on the CLEF-IP 2012 Experiments: Search of Topically Organized Patents
 
The Landscape of Ontology Reuse in Linked Data - OEDW2012
The Landscape of Ontology Reuse in Linked Data - OEDW2012The Landscape of Ontology Reuse in Linked Data - OEDW2012
The Landscape of Ontology Reuse in Linked Data - OEDW2012
 
Reverse Engineering Feature Models From Software Variants to Build Software P...
Reverse Engineering Feature Models From Software Variants to Build Software P...Reverse Engineering Feature Models From Software Variants to Build Software P...
Reverse Engineering Feature Models From Software Variants to Build Software P...
 
Clojure beasts-euroclj-2014
Clojure beasts-euroclj-2014Clojure beasts-euroclj-2014
Clojure beasts-euroclj-2014
 
From Java to Kotlin - The first month in practice
From Java to Kotlin - The first month in practiceFrom Java to Kotlin - The first month in practice
From Java to Kotlin - The first month in practice
 
Object Detection with Tensorflow
Object Detection with TensorflowObject Detection with Tensorflow
Object Detection with Tensorflow
 
Programming the Semantic Web
Programming the Semantic WebProgramming the Semantic Web
Programming the Semantic Web
 
Delving Source Code with Formal Concept Analysis
Delving Source Code with Formal Concept Analysis Delving Source Code with Formal Concept Analysis
Delving Source Code with Formal Concept Analysis
 
WISE2017 - Factorization Machines Leveraging Lightweight Linked Open Data-ena...
WISE2017 - Factorization Machines Leveraging Lightweight Linked Open Data-ena...WISE2017 - Factorization Machines Leveraging Lightweight Linked Open Data-ena...
WISE2017 - Factorization Machines Leveraging Lightweight Linked Open Data-ena...
 
SoDA v2 - Named Entity Recognition from streaming text
SoDA v2 - Named Entity Recognition from streaming textSoDA v2 - Named Entity Recognition from streaming text
SoDA v2 - Named Entity Recognition from streaming text
 
OpenCon2014 - Sumatra as an Open Science tool
OpenCon2014 - Sumatra as an Open Science toolOpenCon2014 - Sumatra as an Open Science tool
OpenCon2014 - Sumatra as an Open Science tool
 
Search Me: Using Lucene.Net
Search Me: Using Lucene.NetSearch Me: Using Lucene.Net
Search Me: Using Lucene.Net
 
Eclipse Memory Analyzer
Eclipse Memory AnalyzerEclipse Memory Analyzer
Eclipse Memory Analyzer
 
Ios fundamentals with ObjectiveC
Ios fundamentals with ObjectiveCIos fundamentals with ObjectiveC
Ios fundamentals with ObjectiveC
 
Aidan's PhD Viva
Aidan's PhD VivaAidan's PhD Viva
Aidan's PhD Viva
 

Plus de ESUG

Workshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingESUG
 
Technical documentation support in Pharo
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in PharoESUG
 
The Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapThe Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapESUG
 
Sequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoSequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoESUG
 
Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...ESUG
 
Analyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsAnalyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsESUG
 
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6ESUG
 
A Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationA Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationESUG
 
Creating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingCreating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingESUG
 
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesThreaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesESUG
 
Exploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportExploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportESUG
 
Pharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsPharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsESUG
 
Garbage Collector Tuning
Garbage Collector TuningGarbage Collector Tuning
Garbage Collector TuningESUG
 
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseImproving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseESUG
 
Pharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FuturePharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FutureESUG
 
thisContext in the Debugger
thisContext in the DebuggerthisContext in the Debugger
thisContext in the DebuggerESUG
 
Websockets for Fencing Score
Websockets for Fencing ScoreWebsockets for Fencing Score
Websockets for Fencing ScoreESUG
 
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptESUG
 
Advanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocAdvanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocESUG
 
A New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsA New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsESUG
 

Plus de ESUG (20)

Workshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programming
 
Technical documentation support in Pharo
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in Pharo
 
The Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapThe Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and Roadmap
 
Sequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoSequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in Pharo
 
Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...
 
Analyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsAnalyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early results
 
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
 
A Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationA Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test Generation
 
Creating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingCreating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic Programming
 
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesThreaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
 
Exploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportExploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience Report
 
Pharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsPharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIs
 
Garbage Collector Tuning
Garbage Collector TuningGarbage Collector Tuning
Garbage Collector Tuning
 
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseImproving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
 
Pharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FuturePharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and Future
 
thisContext in the Debugger
thisContext in the DebuggerthisContext in the Debugger
thisContext in the Debugger
 
Websockets for Fencing Score
Websockets for Fencing ScoreWebsockets for Fencing Score
Websockets for Fencing Score
 
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
 
Advanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocAdvanced Object- Oriented Design Mooc
Advanced Object- Oriented Design Mooc
 
A New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsA New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and Transformations
 

Dernier

FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024The Digital Insurer
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusZilliz
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfOverkill Security
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Zilliz
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...apidays
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...apidays
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 

Dernier (20)

FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source Milvus
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 

Delving (Smalltalk) Source Code

  • 1. Delving (Smalltalk) Source Code Dr. Tom Tourwé SEN / CWI Pr. Kim Mens INGI / UCL Monday, September 6, 2004 with Formal Concept Analysis
  • 2. September 6, 2004 ESUG 2004 Research Track 2 Overview  Research goal  A crash course on formal concept analysis  Delving Smalltalk source code with FCA  Experiments  Results  Conclusion
  • 3. September 6, 2004 ESUG 2004 Research Track 3 Research Goal  A lightweight source-code mining tool – get “initial understanding” of structure of software system – detect recurring patterns in the source code  Formal concept analysis (FCA) – A mathematical technique – Known applications in data analysis and knowledge processing  Can we use FCA to delve code for indications of patterns? – Coding conventions – Programming idioms and design patterns – Opportunities for refactoring – Relevant domain concepts
  • 4. September 6, 2004 ESUG 2004 Research Track 4 object- oriented functional logic static typing dynamic typing C++ Find relevant taxonomy of programming languages based on their common properties Java Smalltalk Scheme Prolog A crash course on FCA — example
  • 5. September 6, 2004 ESUG 2004 Research Track 5 A crash course on FCA — theory A. Starts from – a set of elements – a set of properties of those elements – incidence table B. Determines concepts – Maximal groups of elements and properties – Group: • Every element of the concept has those properties • Every property of the concept holds for those elements – Maximal • No other element (outside the concept) has those same properties • No other property (outside the concept) is shared by all elements C. Organizes these concepts in a lattice structure
  • 6. September 6, 2004 ESUG 2004 Research Track 6 object- oriented functional logic static typing dynamic typing C++ X - - X - Java X - - X - Smalltalk X - - - X Scheme - X - - X Prolog - - X - X A. Incidence table
  • 7. September 6, 2004 ESUG 2004 Research Track 7 object- oriented functional logic static typing dynamic typing C++ X - - X - Java X - - X - Smalltalk X - - - X Scheme - X - - X Prolog - - X - X B. Concept 1
  • 8. September 6, 2004 ESUG 2004 Research Track 8 object- oriented functional logic static typing dynamic typing C++ X - - X - Java X - - X - Smalltalk X - - - X Scheme - X - - X Prolog - - X - X B. Concept 2
  • 9. September 6, 2004 ESUG 2004 Research Track 9 object- oriented functional logic static typing dynamic typing C++ X - - X - Java X - - X - Smalltalk X - - - X Scheme - X - - X Prolog - - X - X B. Concept 3
  • 10. September 6, 2004 ESUG 2004 Research Track 10 object- oriented functional logic static typing dynamic typing C++ X - - X - Java X - - X - Smalltalk X - - - X Scheme - X - - X Prolog - - X - X B. More concepts …
  • 11. September 6, 2004 ESUG 2004 Research Track 11 object- oriented functional logic static typing dynamic typing C++ X - - X - Java X - - X - Smalltalk X - - - X Scheme - X - - X Prolog - - X - X B. More concepts …
  • 12. September 6, 2004 ESUG 2004 Research Track 12 object- oriented functional logic static typing dynamic typing C++ X - - X - Java X - - X - Smalltalk X - - - X Scheme - X - - X Prolog - - X - X B. More concepts …
  • 13. September 6, 2004 ESUG 2004 Research Track 13 object- oriented functional logic static typing dynamic typing C++ X - - X - Java X - - X - Smalltalk X - - - X Scheme - X - - X Prolog - - X - X B. Concepts
  • 14. September 6, 2004 ESUG 2004 Research Track 14 C. Concept Lattice
  • 15. September 6, 2004 ESUG 2004 Research Track 15 Delving ST source code with FCA  Elements : classes, methods, argument names  Properties : substrings of classes, methods, … Foo Zork import: aFoo Bar asFoo: anObject The “Foo” concept
  • 16. September 6, 2004 ESUG 2004 Research Track 16 Delving source code 1. Generate the formal context • Elements, properties & incidence relation 2. Concept Analysis • Calculate the formal concepts • Organize them into a concept lattice 3. Filtering • Remove irrelevant concepts (false positives, noise, useless, …) 4. Classify, combine and annotate concepts • In a way that is more easy for a software engineer to interpret Foo Zork import: aFoo Bar asFoo: anObject
  • 17. September 6, 2004 ESUG 2004 Research Track 17 DelfSTof, our Code Delving Tool
  • 18. September 6, 2004 ESUG 2004 Research Track 18 1. Generate formal context  We want to group elements that share a substring  As elements we collect – all classes, methods and parameters – in some package(s) of interest  As properties : “relevant” substrings of element names – Normalisation : • extract terms based on where uppercases occur • convert to lower case and remove special characters like ‘:’ • QuotedCodeConstant → { quoted, code, constant } – Elimination of stopwords : with, do, object – Stemming : reduce words to their root  Incidence relation : An element has a certain property if – It has the substring in its name Foo Zork import: aFoo Bar asFoo: anObject
  • 19. September 6, 2004 ESUG 2004 Research Track 19 … X - - - variable … X - X functor … - - X - messageunify index env source … Object>>unifyWithObject: inEnv: myIndex: hisIndex: inSource: X X X X … Variable>>unifyWithMessageFunctor: inEnv: myIndex: hisIndex: inSource: X X X X … AbstractTerm>>unifyWith: inEnv: myIndex: hisIndex: inSource: X X X X … AbstractTerm>>unifyWithVariable: inEnv: myIndex: hisIndex: inSource: X X X X … … X X X X … 2. Concept Analysis Foo Zork import: aFoo Bar asFoo: anObject
  • 20. September 6, 2004 ESUG 2004 Research Track 20 … X - - - variable … X - X functor … - - X - messageunify index env source … Object>>unifyWithObject: inEnv: myIndex: hisIndex: inSource: X X X X … Variable>>unifyWithMessageFunctor: inEnv: myIndex: hisIndex: inSource: X X X X … AbstractTerm>>unifyWith: inEnv: myIndex: hisIndex: inSource: X X X X … AbstractTerm>>unifyWithVariable: inEnv: myIndex: hisIndex: inSource: X X X X … … X X X X … 2. Concept Analysis Foo Zork import: aFoo Bar asFoo: anObject
  • 21. September 6, 2004 ESUG 2004 Research Track 21 3. Filtering  Preprocessing to filter irrelevant properties : – with little meaning : “do”, “with”, “for”, “from”, “the”, “ifTrue”, … – too small (< 3 chars) – ignore plurals, uppercase and colons  Extra filtering – Drop top & bottom concept when empty – Drop concepts with two elements are less – Drop concepts that group only classes  More filtering needed (ongoing work) – Recombine substrings belonging together – Require some minimal coverage of element name by properties – Concepts higher in the lattice may be more relevant (more properties) – Avoid redundancy in discovered concepts • Make better use of the lattice structure (Now it is “flattened”) Foo Zork import: aFoo Bar asFoo: anObject
  • 22. September 6, 2004 ESUG 2004 Research Track 22 4. Classification, Combination & Annotation  Annotate concepts with their properties – i.e. with the substring(s) shared by their elements  Classification – Single class concepts • Elements are methods (or their parameters) in that class – Hierarchy concepts • Group classes, methods and parameters in same class hierarchy • Annotate concept with root of hierarchy • Annotate methods with implementing class – Crosscutting concepts • When two different class hierarchies are involved  Combine concepts – that belong together (subconcept relationship)  Group methods – belonging to the same class Foo Zork import: aFoo Bar asFoo: anObject
  • 23. September 6, 2004 ESUG 2004 Research Track 23 Quantitative results  Time to compute = a few seconds / minutes   properties  <  elements  is a good sign  Still too much concepts remain after filtering Upperlimit: theoretical < 2min(#elements, #properties); experimental < #elements 7115740352731 (52)StarBrowser 5131650247802 (135)DelfSTof 447124342287364834 (271)Ref.Browser 327 284 #filtered 1419 1206 #raw 24 22 time (sec) 4771370 (93)CodeCrawler 4381488 (111)Soul #properties#elementsCase study Foo Zork import: aFoo Bar asFoo: anObject
  • 24. September 6, 2004 ESUG 2004 Research Track 24  Code duplication  Design patterns – Visitor, Abstract Factory, Builder, Observer  Programming idioms – Accessing methods, chained messages, delegating methods, polymorphism  Relevant domain concepts – Correspond to frequently occurring properties – “Unification”, “Bindings”, “Horn clauses”, “resolution”  Opportunities for refactoring  Some crosscutting concerns Discovered “indications” of patterns Foo Zork import: aFoo Bar asFoo: anObject
  • 25. September 6, 2004 ESUG 2004 Research Track 25 Conclusion  Current status : feasibility study – Approach produced relevant results – Efficiency is acceptable – Tool needs refinement • More advanced filtering ; extra checking a posteriori  Future work : applying FCA to delve source code for – aspects and crosscutting concerns • based on “generic parse trees” • by using an incidence relation that represents “message sends” – refactoring opportunities – Both Smalltalk and Java source code