Thursday, 18 September 2014

PHAME - Principles of Hierarchy, Abstraction, Modularization, and Encapsulation

We coin a new term "PHAME" (Principles of Hierarchy, Abstraction, Modularization, and Encapsulation) and define enabling techniques for each principle (refer the figure below).

Friday, 4 July 2014

Refactoring for Software Design Smells: Managing Technical Debt

"Refactoring for Software Design Smells: Managing Technical Debt" presents 25 structural design smells, their role in identifying design issues, and potential refactoring solutions. Organized across common areas of software design, each smell is presented with diagrams and examples illustrating the poor design practices and the problems that result, creating a catalog of nuggets of readily usable information that developers or engineers can apply in their projects. The authors distill their research and experience as consultants and trainers, providing insights that have been used to improve refactoring and reduce the time and costs of managing software projects. Along the way they recount anecdotes from actual projects on which the relevant smell helped address a design issue.

Salient features:
  • A comprehensive catalogue of structural design smells and their refactoring solutions to solve problems occurring in design
  • Explains the importance of smells in managing technical debt, an area of increased concern at software engineering conferences
  • Each smell includes examples, source code, and visualization diagrams to facilitate understanding
  • Describes solutions across common software design concepts and smells that cross multiple domains

Tuesday, 3 June 2014

Tuesday, 4 February 2014

Our Tutorial in ICSE2014 - "Refactoring for Design Smells"

Tutorial title: Software Design Quality in Practice: Refactoring for Design Smells
To be presented in ICSE 2014 (Hyderabad, India) on 3rd June 2014

We will be presenting the tutorial in ICSE (International Conference on Software Engineering) 2014 - the most prestigious software engineering conference on the planet. 
 The details of the tutorial are provided below:

Fred Brooks in his book “The Mythical Man Month” describes how the inherent properties of software (i.e. complexity, conformity, changeability, and invisibility) make its design an “essential” difficulty. Good design practices are fundamental requisites to address this difficulty. One such good design practice is identifying and addressing ‘smells’. Most practitioners know about identifying and refactoring code smells. However, there is a lack of awareness on refactoring design smells and architecture smells, which are also equally important for creating high quality software. In this tutorial, we introduce a comprehensive catalog, classification, and naming scheme for design smells to the participants. We discuss important structural design smells based on how they violate the four key object oriented design principles (abstraction, encapsulation, modularization, and hierarchy). Each of these smells are illustrated through design smells found in OpenJDK  (Open source Java Development Kit) code base, with detailed discussions on refactoring strategies for addressing them. By attending this session, the participants will get a good understanding on design smells and how to refactor them in real-world projects.

Tutorial structure
The tutorial is structured as follows:
1.       Introduction
1.1.    Fundamental principles of software construction
1.2.    What are ‘design smells’?
1.3.    Why care about smells?
1.4.    Common causes of smells
1.5.    The scope of smells
1.6.    The effect of smells
2.       A Classification of Design Smells
2.1.    A design principle based classification of smells
2.2.    A naming scheme for smells
2.3.    A template for documenting smells
3.       Refactoring Design Smells
3.1.    Refactoring for abstraction smells
3.2.    Refactoring for encapsulation smells
3.3.    Refactoring for modularization smells
3.4.    Refactoring for hierarchy smells
4.       Conclusion and Key Takeaways
4.1.    Tools for detecting design smells
4.2.    Refactoring considerations in industrial projects
4.3.    Relationship between smells
4.4.    Relationship between design smells and design patterns
4.5.    Research directions for the community

Key takeaways
The tutorial provides many insights on design smells and the refactoring strategies for addressing the smells in real-world software. The key takeaways of this tutorial are:
a.  The comprehensive catalog presented in this tutorial will help practitioners understand the kind of problems that could be occurring in their design.
b.  The detailed description of smells included in the tutorial will help the practitioner understand via suitable examples how those smells manifest, how they are caused, their impact on quality attributes, and the potential refactoring that can address those smells.
c.  The tutorial provides a simple and intuitive naming scheme for smells which will be easy for practitioners to remember.
d.  The catalog of is a readily-usable guide for use in design reviews or for identifying refactoring opportunities.