Encapsulation and inheritance in object-oriented programming languages
OOPLSA '86 Conference proceedings on Object-oriented programming systems, languages and applications
Smalltalk: subclassing subtyping is-a
Journal of Object-Oriented Programming
An introduction to object-oriented programming
An introduction to object-oriented programming
Interfaces and specifications for the Smalltalk-80 collection classes
OOPSLA '92 conference proceedings on Object-oriented programming systems, languages, and applications
Maintenance Support for Object-Oriented Programs
IEEE Transactions on Software Engineering - Special issue on software maintenance
Building and maintaining analysis-level class hierarchies using Galois Lattices
OOPSLA '93 Proceedings of the eighth annual conference on Object-oriented programming systems, languages, and applications
Smalltalk with style
Interactive visualization of design patterns can help in framework understanding
Proceedings of the tenth annual conference on Object-oriented programming systems, languages, and applications
Reusability through self-encapsulation
Pattern languages of program design
Managing class evolution in object-oriented systems
Object-oriented software composition
Automatic inheritance hierarchy restructuring and method refactoring
Proceedings of the 11th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Reuse contracts: managing the evolution of reusable assets
Proceedings of the 11th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
On automatic class insertion with overloading
Proceedings of the 11th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Smalltalk: best practice patterns
Smalltalk: best practice patterns
ACM Computing Surveys (CSUR)
The design patterns Smalltalk companion
The design patterns Smalltalk companion
Concept analysis—a new framework for program understanding
Proceedings of the 1998 ACM SIGPLAN-SIGSOFT workshop on Program analysis for software tools and engineering
Pattern-based design recovery of Java software
SIGSOFT '98/FSE-6 Proceedings of the 6th ACM SIGSOFT international symposium on Foundations of software engineering
Design of class hierarchies based on concept (Galois) lattices
Theory and Practice of Object Systems - Special issue high availability in CORBA
Pattern-based reverse-engineering of design components
Proceedings of the 21st international conference on Software engineering
Object-oriented inspection in the face of delocalisation
Proceedings of the 22nd international conference on Software engineering
OOPSLA '01 Proceedings of the 16th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Formal Concept Analysis: Mathematical Foundations
Formal Concept Analysis: Mathematical Foundations
Object Oriented Reengineering Patterns
Object Oriented Reengineering Patterns
Towards pattern-based design recovery
Proceedings of the 24th International Conference on Software Engineering
A New Definition of the Subtype Relation
ECOOP '93 Proceedings of the 7th European Conference on Object-Oriented Programming
A Study of The Fragile Base Class Problem
ECCOP '98 Proceedings of the 12th European Conference on Object-Oriented Programming
Patterns Generate Architectures
ECOOP '94 Proceedings of the 8th European Conference on Object-Oriented Programming
A New Approach to Factorization - Introducing Metrics
METRICS '02 Proceedings of the 8th International Symposium on Software Metrics
Declarative Reasoning about the Structure of Object-Oriented Systems
TOOLS '98 Proceedings of the Technology of Object-Oriented Languages and Systems
Automatic Detection of Design Problems in Object-Oriented Reengineering
TOOLS '99 Proceedings of the Technology of Object-Oriented Languages and Systems
Design Recovery by Automated Search for Structural Design Patterns in Object-Oriented Software
WCRE '96 Proceedings of the 3rd Working Conference on Reverse Engineering (WCRE '96)
Hot Spot Recovery in Object-Oriented Software with Inheritance and Composition Template Methods
ICSM '99 Proceedings of the IEEE International Conference on Software Maintenance
Automatic Design Pattern Detection
IWPC '03 Proceedings of the 11th IEEE International Workshop on Program Comprehension
Design Pattern Recovery in Object-Oriented Software
IWPC '98 Proceedings of the 6th International Workshop on Program Comprehension
Instantiating and Detecting Design Patterns: Putting Bits and Pieces Together
Proceedings of the 16th IEEE international conference on Automated software engineering
TOOLS '01 Proceedings of the 39th International Conference and Exhibition on Technology of Object-Oriented Languages and Systems (TOOLS39)
Design reverse-engineering and automated design-pattern detection in Smalltalk
Design reverse-engineering and automated design-pattern detection in Smalltalk
Applying traits to the smalltalk collection classes
OOPSLA '03 Proceedings of the 18th annual ACM SIGPLAN conference on Object-oriented programing, systems, languages, and applications
Refactoring class hierarchies with KABA
OOPSLA '04 Proceedings of the 19th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Fingerprinting Design Patterns
WCRE '04 Proceedings of the 11th Working Conference on Reverse Engineering
The Class Blueprint: Visually Supporting the Understanding of Classes
IEEE Transactions on Software Engineering
The story of moose: an agile reengineering environment
Proceedings of the 10th European software engineering conference held jointly with 13th ACM SIGSOFT international symposium on Foundations of software engineering
OOPSLA '05 Proceedings of the 20th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Identifying traits with formal concept analysis
Proceedings of the 20th IEEE/ACM international Conference on Automated software engineering
Object-Oriented Legacy System Trace-based Logic Testing
CSMR '06 Proceedings of the Conference on Software Maintenance and Reengineering
A Comparative Framework for Design Recovery Tools
CSMR '06 Proceedings of the Conference on Software Maintenance and Reengineering
Modeling history to analyze software evolution: Research Articles
Journal of Software Maintenance and Evolution: Research and Practice
Towards a Client Driven Characterization of Class Hierarchies
ICPC '06 Proceedings of the 14th IEEE International Conference on Program Comprehension
Analyzing software evolution through feature views: Research Articles
Journal of Software Maintenance and Evolution: Research and Practice
Discovering Comprehension Pitfalls in Class Hierarchies
CSMR '09 Proceedings of the 2009 European Conference on Software Maintenance and Reengineering
A Generic Approach for Class Model Normalization
ASE '08 Proceedings of the 2008 23rd IEEE/ACM International Conference on Automated Software Engineering
Understanding the use of inheritance with visual patterns
ESEM '09 Proceedings of the 2009 3rd International Symposium on Empirical Software Engineering and Measurement
Building abstractions in class models: formal concept analysis in a model-driven approach
MoDELS'06 Proceedings of the 9th international conference on Model Driven Engineering Languages and Systems
Relating attribute reduction in formal, object-oriented and property-oriented concept lattices
Computers & Mathematics with Applications
On multi-adjoint concept lattices based on heterogeneous conjunctors
Fuzzy Sets and Systems
Combining concept lattice with call graph for impact analysis
Advances in Engineering Software
Hi-index | 0.00 |
Context: Inheritance is the cornerstone of object-oriented development, supporting conceptual modeling, subtype polymorphism and software reuse. But inheritance can be used in subtle ways that make complex systems hard to understand and extend, due to the presence of implicit dependencies in the inheritance hierarchy. Objective: Although these dependencies often specify well-known schemas (i.e., recurrent design or coding patterns, such as hook and template methods), new unanticipated dependency schemas arise in practice, and can consequently be hard to recognize and detect. Thus, a developer making changes or extensions to an object-oriented system needs to understand these implicit contracts defined by the dependencies between a class and its subclasses, or risk that seemingly innocuous changes break them. Method: To tackle this problem, we have developed an approach based on Formal Concept Analysis. Our Formal Concept Analysis based-Reverse Engineering methodology (FoCARE) identifies undocumented hierarchical dependencies in a hierarchy by taking into account the existing structure and behavior of classes and subclasses. Results: We validate our approach by applying it to a large and non-trivial case study, yielding a catalog of hierarchy schemas, each one composed of a set of dependencies over methods and attributes in a class hierarchy. We show how the discovered dependency schemas can be used not only to identify good design practices, but also to expose bad smells in design, thereby helping developers in initial reengineering phases to develop a first mental model of a system. Although some of the identified schemas are already documented in existing literature, with our approach based on Formal Concept Analysis (FCA), we are also able to identify previously unidentified schemas. Conclusions: FCA is an effective tool because it is an ideal classification mining tool to identify commonalities between software artifacts, and usually these commonalities reveal known and unknown characteristics of the software artifacts. We also show that once a catalog of useful schemas stabilizes after several runs of FoCARE, the added cost of FCA is no longer needed.