SlideShare ist ein Scribd-Unternehmen logo
1 von 4
Downloaden Sie, um offline zu lesen
Refactoring for Software Architecture Smells
Ganesh Samarthyam
CodeOps Technologies LLP
C V Raman Nagar,
Bangalore, India
ganesh@codeops.tech
Girish Suryanarayana
Siemens Corporate Research
& Technologies,
No. 84, Electronics City,
Bangalore, India
girish.suryanarayana@
siemens.com
Tushar Sharma
Dept of Management Science
and Technology,
Athens University of
Economics and Business,
Athens, Greece
tushar@aueb.gr
ABSTRACT
Code smells and refactoring have received considerable in-
terest from the academia as well as from the industry in
the past two decades. The interest has given birth to var-
ious tools, processes, techniques, and practices to identify
smells and refactor them. Despite the high interest, architec-
ture smells and corresponding refactorings haven’t received
as much focus and adoption from the software engineering
community. In this paper, we motivate the need of archi-
tecture refactoring, discuss the current related research, and
present a few potential research directions for architecture
refactoring.
CCS Concepts
•Software and its engineering → Software architec-
tures; Software maintenance tools; Designing soft-
ware;
Keywords
Architecture smells; Architecture refactoring; Software ar-
chitecture
1. INTRODUCTION
Cities grow, cities evolve, cities have parts that
simply die while other parts flourish; each city
has to be renewed in order to meet the needs of
its populace [. . . ] Software-intensive systems are
like that.
Grady Booch uses the evolution of a city as a metaphor
to emphasize the need for refactoring software systems (in
the forward of the book by Girish et al. [27]). Some of
the indicators of an ailing city include congested roads and
traffic jams, pollution of water bodies and air, and piles of
garbage. Such a city requires “renewing” at multiple levels
and scale. When a city fails to address the growing needs of
its populace, it can lead to a“crisis”situation and ultimately
to its abandonment.
The evolution of software systems is akin to evolution of
a city. With evolution of a software system, complexity of
the system increases unless efforts are made to maintain and
reduce it [16]. Refactoring is a well-known technique defined
as“behavior preserving program transformations”[8] to cope
up with increasing complexity and keep the software main-
tainable. Failure to perform periodic refactoring leads to
accumulation of technical debt [4] and ultimately to “tech-
nical bankruptcy”. Hence, periodic refactoring is essential
for long-lived software to improve and maintain structural
quality of the software.
In general, smells and their corresponding refactorings are
applied at various granularity levels. Smells could be cat-
egorized as implementation smells [8], design smells [27],
and architecture smells [9]. The categorization of a smell
depends on factors such as their scope and the impact on
the rest of the system. Implementation smells have lim-
ited scope (typically confined to a class or file) and have
a limited local impact. On the other hand, architecture
smells span multiple components and have a system level
impact. Since smells differ in their scope, impact, and effort
required for refactoring, it is pragmatic to classify the smells
into implementation, design, and architecture smells. Simi-
lar to smells, refactoring techniques applied to refactor these
smells can also be classified as implementation refactoring,
design refactoring, and architecture refactoring.
Due to a wide adoption of agile and lean methods of soft-
ware development, refactoring has received considerable fo-
cus from the academia and the industry. Several excellent
tools, processes, techniques and practices have been devel-
oped to adopt refactoring as an integral part of the devel-
opment lifecycle [3,6,30]. However, architecture refactoring
hasn’t received as much focus from the software engineering
community. In this paper, we summarize the state of the art
on refactoring for architecture smells and provide a research
outline for the road ahead.
2. MOTIVATION
Industrial software systems are typically complex and long-
lived. Consider Windows operating system for example. It
has grown to more than 50 million loc over the last 25 years.
Evolution at such a scale of time and size poses a threat to
the structural quality of the software. Hence, periodic ar-
chitecture refactoring is required to maintain the structural
quality of such a complex and evolving software system. In
addition, such refactorings are mandatory for the success of
This is the author’s version of the work. It is posted here for your personal use. Not for
redistribution. The definitive version was published in the following publication:
IWoR’16, September 4, 2016, Singapore, Singapore
c 2016 ACM. 978-1-4503-4509-5/16/09...
http://dx.doi.org/10.1145/2975945.2975946
1
Figure 1: Tangle in Java core library depicting “dependency cycles between packages” smell
the software product as they facilitate an easier integration
of new features. For instance, a major refactoring effort was
carried out for Windows while evolving from Vista to Win-
dows 7 version [12]. The primary goal of this refactoring
was to remove undesirable dependencies among modules so
that layering violations can be addressed and dependency
structure can be improved.
In this case study, the authors refer to architecture refac-
toring without using the terms “architecture refactoring” or
“architecture smell” anywhere in their paper; instead they
use other related terms such as “system-wide refactoring”.
We argue that, this work (among numerous others) illus-
trate that “architecture refactoring” is an emerging domain
that is yet to find its place in common vocabulary used by
researchers and practitioners working in the area of software
engineering in general and refactoring in particular.
Now, let us consider the Java core library (jdk). jdk
has evolved considerably in size and complexity since the
release of its first version in 1995. For instance, consider
the “tangle” (i.e., a part of a dependency graph in which all
the items are directly or indirectly dependent on all other
items) in the Java 8 core library (refer Figure 1; the fig-
ure is generated by using Structure 101 tool). The packages
involved in the cycle have to be used, reused, tested, and de-
ployed together leading to various maintenance woes. It is
referred as “dependency cycles between packages” architec-
ture smell [17]. This smell negatively affects maintainability,
reusability, testability, reliability, and deployability of the
software. With changes being performed in Java 9 (project
Jigsaw) [11], it is expected that the modularity concerns will
be addressed, including the removal of considerable number
of such cyclic dependencies between packages in the jdk.
From these case studies, it is evident that architecture
smells (such as “large module” and “dependency cycles be-
tween packages” smells) are distinct from smells arising at
other granularities such as implementation smells (for in-
stance, “large method” [8]) and design smells (for instance,
“cyclically-dependent modularization” smells [27]). As dis-
cussed earlier, the scope and impact of architecture refactor-
ings is relatively higher when compared to refactoring at im-
plementation and design granularities. Additionally, archi-
tecture refactoring require significant amount of effort and
time compared to with implementation and design refactor-
ings. Refactoring in these two case studies has taken many
years with considerable planning and team co-ordination in-
volved. At the same time, the benefits of architecture refac-
toring are also significantly high and serve relatively longer
than other types of refactorings.
3. RELATED WORK
Garcia et al. [9] defined architecture smell as“a commonly
(although not always intentionally) used architectural deci-
sion that negatively impacts system quality”.
Researchers use various terms for architectural smells, in-
cluding “architectural bad smells” [9], “architecture smells”
[17],“anti-patterns”[2],“architecturally-relevant code smells”
[1], “contra-indicated patterns” [15], “architectural defects”
[23], “[accidental] architectural anti-patterns” [14]. Further,
researchers have explored specific categories of architecture
smells; for example, Rama et al. discusses“modularity smells”
2
[22], and Ouni et al. outlines “web service antipatterns” [21]
in the context of Service Oriented Architectures (soa).
On the other hand, architecture refactoring is defined as
“a coordinated set of deliberate architectural activities that
remove a particular architectural smell and improve at least
one quality attribute without changing the system’s scope
and functionality” [32]. Architectural refactorings are also
referred to as “high-impact refactorings” [7], “architecture
transformation” [10], and “large refactorings” [17]. We have
observed practitioners using other terms such as“architecture-
oriented refactorings”.
In our earlier work on design smells [24,27], we focused our
study on the vast literature on object-oriented design smells.
We cataloged and classified a number of recurring structural
design smells based on how they violate key object oriented
design principles.
There have been a few attempts to catalog architecture
smells or refactorings [9,26]. A few architecture refactoring
case studies performed on industrial projects also have been
reported. For example, Kumar et al. [13] presents an archi-
tecture refactoring case study performed on a mission criti-
cal application. There are exploratory studies on emerging
topics in architecture refactoring, such as architecture refac-
toring in software product lines [5] and architecture technical
debt [20].
4. POTENTIAL RESEARCH DIRECTIONS
Despite many attempts to explore architecture smells and
corresponding refactorings in diverse dimensions, the do-
main is far from maturity. Based on the related work in
this area (described in the previous section) and our experi-
ence as practicing architects, we envision the following areas
for further research on this topic:
• Catalog of architectural smells: A comprehensive
catalog of architecture smells and refactorings with an
appropriate classification would better guide a soft-
ware developer in understanding and addressing po-
tential issues in the architecture of his/her software
system. As discussed above, there has been a few
attempts to catalog architecture smells and refactor-
ings. However, a comprehensive catalog of architec-
tural smells with detailed explanation, examples, con-
text, their technical and economic impacts on the soft-
ware product, and refactoring suggestions is still miss-
ing. We envision a taxonomy of architecture smells
and corresponding refactorings, classified based on di-
mensions such as Structure and Behavior.
• Tool support: Although, there are a few tools such as
Sonargraph [25] that may help us detect architecture
smells. However, currently available tools are insuffi-
cient from various aspects:
– The present set of tools does not detect a com-
prehensive number of architecture smells.
– Architecture smells are contextual in nature. The
present set of tools does not consider the contex-
tual information for smell detection.
– Common IDEs (Integrated Development Environ-
ments) such as Eclipse, Visual Studio, IntelliJ
IDEA, and Netbeans allow developers to perform-
ing code refactoring automatically. However, IDEs
lack support for detecting architecture smells and
do not help perform architecture refactorings ef-
fectively.
An ecosystem of tools for detecting architectural smells,
providing refactoring recommendations, and helping
perform the architecture refactorings is sorely lack-
ing [29].
• Economics of architecture refactoring (quanti-
fying architecture technical debt): Architecture
debt is a significant component of technical debt for a
software system. It is not trivial to quantify architec-
ture debt given the challenges associated with it. Ma-
jor challenges include detecting architecture smells au-
tomatically with associated severity, defining a quan-
tification model which can be customizable and ad-
justable based on the project properties and mapping
the detected smells to the model, and quantifying the
interest aspect of the debt correctly. Researchers have
proposed a few solutions, such as the one by Xiao et
al. [31]; despite this, more focused research is required
to develop a comprehensive yet practical quantification
method for architecture debt. In general, more studies
on evaluating the benefits of architecture refactoring
(from software engineering economics perspective) is
needed.
• Empirical studies: Though there are a few case
studies reported on architecture smells or refactoring
(such as Kumar et al. [13]), there is a huge potential for
empirical studies on architectural smells or refactoring
and their impact on various aspects of software de-
velopment. Such an empirical study on large software
systems may reveal many interesting insights about the
characteristics of architecture smells and their impact
on the software and the development efforts.
• Refactoring and emerging architecture styles
and patterns: In the last few years, new architec-
ture styles and patterns (such as Microservices [19]
and Containerization [28]) have received considerable
attention in the software industry. For example, refac-
toring from monolithic to microservices is a topic often
discussed by practitioners [19]. However, architecture
smells and refactoring in the context of these new ar-
chitecture styles and patterns is yet to be explored by
the software engineering researchers.
5. CONCLUSIONS
Practices such as refactoring are key to overcome or avoid
the negative effects of software aging because they place
change and evolution in the center of the software devel-
opment process [18]. Knowing architecture smells for a soft-
ware system and performing associated refactorings could
avoid architecture erosion. However, architecture smells and
refactoring are yet to receive extensive focus. In this paper,
we have discussed related research and outlined a few poten-
tial areas for further research in the domain of architecture
smells and refactoring. We hope that this work will spark
more ideas and research in this domain and ultimately their
wider adoption in industry.
3
6. REFERENCES
[1] I. M. Bertran. Detecting architecturally-relevant code
smells in evolving software systems. In 33rd
International Conference on Software Engineering
(ICSE), pages 1090–1093, May 2011.
[2] W. H. Brown, R. C. Malveau, H. W. S. McCormick,
and T. J. Mowbray. AntiPatterns: Refactoring
Software, Architectures, and Projects in Crisis. John
Wiley & Sons, Inc., 1st edition, 1998.
[3] Y. Cai and R. Kazman. Software architecture health
monitor. In Proceedings of the 1st International
Workshop on Bringing Architectural Design Thinking
into Developers’ Daily Activities, BRIDGE ’16, pages
18–21, New York, NY, USA, 2016. ACM.
[4] W. Cunningham. The wycash portfolio management
system. SIGPLAN OOPS Mess., 4(2):29–30, 1992.
[5] H. S. de Andrade, E. Almeida, and I. Crnkovic.
Architectural bad smells in software product lines: An
exploratory study. In Proceedings of the WICSA 2014
Companion Volume, WICSA ’14 Companion, pages
12:1–12:6, New York, NY, USA, 2014. ACM.
[6] S. Demeyer, S. Ducasse, and O. Nierstrasz. Object
Oriented Reengineering Patterns. Morgan Kaufmann
Publishers Inc., San Francisco, CA, USA, 2002.
[7] J. Dietrich, C. McCartin, E. D. Tempero, and
S. M. A. Shah. On the detection of high-impact
refactoring opportunities in programs. CoRR, 2010.
[8] M. Fowler. Refactoring: Improving the Design of
Existing Programs. Addison-Wesley Professional, 1
edition, 1999.
[9] J. Garcia, D. Popescu, G. Edwards, and
N. Medvidovic. Toward a Catalogue of Architectural
Bad Smells. In Proceedings of the 5th International
Conference on the Quality of Software Architectures:
Architectures for Adaptive Software Systems, pages
146–162. Springer-Verlag, 2009.
[10] L. Grunske. Identifying ”good” architectural design
alternatives with multi-objective optimization
strategies. In Proceedings of the 28th International
Conference on Software Engineering, pages 849–852.
ACM, 2006.
[11] Project Jigsaw.
http://openjdk.java.net/projects/jigsaw/, 2016.
[Online; accessed 11-Jun-2016].
[12] M. Kim, T. Zimmermann, and N. Nagappan. An
empirical study of refactoring challenges and benefits
at microsoft. IEEE Transactions of Software
Engineering, 40(7):633–649, July 2014.
[13] M. R. Kumar and R. H. Kumar. Architectural
refactoring of a mission critical integration application:
A case study. In Proceedings of the 4th India Software
Engineering Conference, pages 77–83. ACM, 2011.
[14] A. Lauder and S. Kent. Legacy System Anti-Patterns
and a Pattern-Oriented Migration Response, pages
239–250. Springer London, 2000.
[15] A. Lauder and S. Kent. Systems engineering for
business process change. pages 225–240.
Springer-Verlag New York, Inc., 2002.
[16] M. M. Lehman. Laws of software evolution revisited.
In Proceedings of the 5th European Workshop on
Software Process Technology, pages 108–124.
Springer-Verlag, 1996.
[17] M. Lippert and S. Roock. Refactoring in large
software projects: performing complex restructurings
successfully. John Wiley & Sons, 2006.
[18] T. Mens, M. Wermelinger, S. Ducasse, S. Demeyer,
R. Hirschfeld, and M. Jazayeri. Challenges in software
evolution. In Proceedings of the Eighth International
Workshop on Principles of Software Evolution,
IWPSE ’05, pages 13–22, Washington, DC, USA, 2005.
[19] S. Newman. Building Microservices. O’Reilly, 2015.
[20] R. L. Nord, I. Ozkaya, P. Kruchten, and
M. Gonzalez-Rojas. In search of a metric for managing
architectural technical debt. In Joint Working
IEEE/IFIP Conference on Software Architecture
(WICSA) and European Conference on Software
Architecture (ECSA), pages 91–100, Aug 2012.
[21] A. Ouni, M. Kessentini, K. Inoue, and M. O.
Cinneide. Search-based web service antipatterns
detection. IEEE Transactions on Services Computing,
PP(99):1–1, 2015.
[22] G. M. Rama. A desiderata for refactoring-based
software modularity improvement. In Proceedings of
the 3rd India Software Engineering Conference, pages
93–102. ACM, 2010.
[23] R. Roshandel, B. Schmerl, N. Medvidovic, D. Garlan,
and D. Zhang. Using multiple views to model and
analyze software architecture: An experience report.
Technical Report USC-CSE-2003-508, University of
Southern California (CSE), 2003.
[24] G. Samarthyam, G. Suryanarayana, T. Sharma, and
S. Gupta. Midas: A design quality assessment method
for industrial software. In Proceedings of the 2013
International Conference on Software Engineering,
ICSE ’13, pages 911–920, 2013.
[25] Sonargraph.
https://www.hello2morrow.com/products/sonargraph,
2016. [Online; accessed 11-Jun-2016].
[26] M. Stal. Software architecture refactoring. In Tutorial
in The International Conference on Object Oriented
Programming, Systems, Languages and Applications,
2007.
[27] G. Suryanarayana, G. Samarthyam, and T. Sharma.
Refactoring for Software Design Smells: Managing
Technical Debt. Morgan Kaufmann, 1 edition, 2014.
[28] M. H. Syed and E. B. Fernandez. The software
container pattern. In 22nd Conference on Pattern
Languages of Programs, PLoP, 2015.
[29] R. Terra, M. T. Valente, K. Czarnecki, and R. S.
Bigonha. Recommending refactorings to reverse
software architecture erosion. In 16th European
Conference on Software Maintenance and
Reengineering (CSMR), pages 335–340. IEEE, 2012.
[30] L. Tokuda and D. Batory. Evolving object-oriented
designs with refactorings. Automated Software Engg.,
8(1):89–120, Jan. 2001.
[31] L. Xiao, Y. Cai, R. Kazman, R. Mo, and Q. Feng.
Identifying and quantifying architectural debt. In
Proceedings of the 38th International Conference on
Software Engineering, pages 488–498. ACM, 2016.
[32] O. Zimmermann. Architectural refactoring: A
task-centric view on software evolution. IEEE
Software, 32(2):26–29, Mar 2015.
4

Weitere ähnliche Inhalte

Was ist angesagt?

Continuous testing & devops with @petemar5hall
Continuous testing & devops with @petemar5hallContinuous testing & devops with @petemar5hall
Continuous testing & devops with @petemar5hallPeter Marshall
 
Resource Adaptive Systems
Resource Adaptive SystemsResource Adaptive Systems
Resource Adaptive SystemsTom Mueck
 
Java Script recruiting
Java Script recruitingJava Script recruiting
Java Script recruitingIhor Odynets
 
Stc 2016 regional-round-ppt-automation testing with devops in agile methodolgy
Stc 2016 regional-round-ppt-automation testing with devops in agile methodolgyStc 2016 regional-round-ppt-automation testing with devops in agile methodolgy
Stc 2016 regional-round-ppt-automation testing with devops in agile methodolgyArchana Krushnan
 
Integrated Building Design
Integrated Building DesignIntegrated Building Design
Integrated Building DesignKareem Sherif
 
Principles and Techniques of Evolutionary Architecture with Dr. Rebecca Parsons
Principles and Techniques of Evolutionary Architecture with Dr. Rebecca ParsonsPrinciples and Techniques of Evolutionary Architecture with Dr. Rebecca Parsons
Principles and Techniques of Evolutionary Architecture with Dr. Rebecca ParsonsBamdad Dashtban
 
Dev ops tutorial for beginners what is devops & devops tools
Dev ops tutorial for beginners what is devops & devops toolsDev ops tutorial for beginners what is devops & devops tools
Dev ops tutorial for beginners what is devops & devops toolsJanBask Training
 
DevOps Practices in a Nutshell
DevOps Practices in a NutshellDevOps Practices in a Nutshell
DevOps Practices in a NutshellFibonalabs
 
SE2018_Lec-22_-Continuous-Integration-Tools
SE2018_Lec-22_-Continuous-Integration-ToolsSE2018_Lec-22_-Continuous-Integration-Tools
SE2018_Lec-22_-Continuous-Integration-ToolsAmr E. Mohamed
 
Continuous Integration to Shift Left Testing Across the Enterprise Stack
Continuous Integration to Shift Left Testing Across the Enterprise StackContinuous Integration to Shift Left Testing Across the Enterprise Stack
Continuous Integration to Shift Left Testing Across the Enterprise StackDevOps.com
 
You got a couple Microservices, now what? - Adding SRE to DevOps
You got a couple Microservices, now what?  - Adding SRE to DevOpsYou got a couple Microservices, now what?  - Adding SRE to DevOps
You got a couple Microservices, now what? - Adding SRE to DevOpsGonzalo Maldonado
 
Kubernetes: A Top Notch Automation Solution
Kubernetes: A Top Notch Automation SolutionKubernetes: A Top Notch Automation Solution
Kubernetes: A Top Notch Automation SolutionFibonalabs
 
Antifragile Software Design
Antifragile Software DesignAntifragile Software Design
Antifragile Software DesignHayim Makabee
 
software project management
software project managementsoftware project management
software project managementdeep sharma
 
Optimize your CI/CD with GitLab and AWS
Optimize your CI/CD with GitLab and AWSOptimize your CI/CD with GitLab and AWS
Optimize your CI/CD with GitLab and AWSDevOps.com
 
Software engineering note
Software engineering noteSoftware engineering note
Software engineering noteNeelamani Samal
 
ADC 2017 - DevOps by examples part II – feedback loop
ADC 2017 - DevOps by examples part II – feedback loopADC 2017 - DevOps by examples part II – feedback loop
ADC 2017 - DevOps by examples part II – feedback loopGiulio Vian
 

Was ist angesagt? (20)

Continuous testing & devops with @petemar5hall
Continuous testing & devops with @petemar5hallContinuous testing & devops with @petemar5hall
Continuous testing & devops with @petemar5hall
 
Resource Adaptive Systems
Resource Adaptive SystemsResource Adaptive Systems
Resource Adaptive Systems
 
Java Script recruiting
Java Script recruitingJava Script recruiting
Java Script recruiting
 
Stc 2016 regional-round-ppt-automation testing with devops in agile methodolgy
Stc 2016 regional-round-ppt-automation testing with devops in agile methodolgyStc 2016 regional-round-ppt-automation testing with devops in agile methodolgy
Stc 2016 regional-round-ppt-automation testing with devops in agile methodolgy
 
Integrated Building Design
Integrated Building DesignIntegrated Building Design
Integrated Building Design
 
Principles and Techniques of Evolutionary Architecture with Dr. Rebecca Parsons
Principles and Techniques of Evolutionary Architecture with Dr. Rebecca ParsonsPrinciples and Techniques of Evolutionary Architecture with Dr. Rebecca Parsons
Principles and Techniques of Evolutionary Architecture with Dr. Rebecca Parsons
 
Dev ops tutorial for beginners what is devops & devops tools
Dev ops tutorial for beginners what is devops & devops toolsDev ops tutorial for beginners what is devops & devops tools
Dev ops tutorial for beginners what is devops & devops tools
 
DevOps Practices in a Nutshell
DevOps Practices in a NutshellDevOps Practices in a Nutshell
DevOps Practices in a Nutshell
 
SE2018_Lec-22_-Continuous-Integration-Tools
SE2018_Lec-22_-Continuous-Integration-ToolsSE2018_Lec-22_-Continuous-Integration-Tools
SE2018_Lec-22_-Continuous-Integration-Tools
 
Continuous Integration to Shift Left Testing Across the Enterprise Stack
Continuous Integration to Shift Left Testing Across the Enterprise StackContinuous Integration to Shift Left Testing Across the Enterprise Stack
Continuous Integration to Shift Left Testing Across the Enterprise Stack
 
Unit1
Unit1Unit1
Unit1
 
You got a couple Microservices, now what? - Adding SRE to DevOps
You got a couple Microservices, now what?  - Adding SRE to DevOpsYou got a couple Microservices, now what?  - Adding SRE to DevOps
You got a couple Microservices, now what? - Adding SRE to DevOps
 
What is DevOps?
What is DevOps?What is DevOps?
What is DevOps?
 
Kubernetes: A Top Notch Automation Solution
Kubernetes: A Top Notch Automation SolutionKubernetes: A Top Notch Automation Solution
Kubernetes: A Top Notch Automation Solution
 
Antifragile Software Design
Antifragile Software DesignAntifragile Software Design
Antifragile Software Design
 
software project management
software project managementsoftware project management
software project management
 
Optimize your CI/CD with GitLab and AWS
Optimize your CI/CD with GitLab and AWSOptimize your CI/CD with GitLab and AWS
Optimize your CI/CD with GitLab and AWS
 
Component based software engineering
Component based software engineeringComponent based software engineering
Component based software engineering
 
Software engineering note
Software engineering noteSoftware engineering note
Software engineering note
 
ADC 2017 - DevOps by examples part II – feedback loop
ADC 2017 - DevOps by examples part II – feedback loopADC 2017 - DevOps by examples part II – feedback loop
ADC 2017 - DevOps by examples part II – feedback loop
 

Andere mochten auch

Let's Go: Introduction to Google's Go Programming Language
Let's Go: Introduction to Google's Go Programming LanguageLet's Go: Introduction to Google's Go Programming Language
Let's Go: Introduction to Google's Go Programming LanguageGanesh Samarthyam
 
Bangalore Container Conference 2017 - Poster
Bangalore Container Conference 2017 - PosterBangalore Container Conference 2017 - Poster
Bangalore Container Conference 2017 - PosterGanesh Samarthyam
 
Refactoring guided by design principles driven by technical debt
Refactoring   guided by design principles driven by technical debtRefactoring   guided by design principles driven by technical debt
Refactoring guided by design principles driven by technical debtGanesh Samarthyam
 
Writing an Abstract - Template (for research papers)
Writing an Abstract - Template (for research papers) Writing an Abstract - Template (for research papers)
Writing an Abstract - Template (for research papers) Ganesh Samarthyam
 
Design Smell Descriptions - Summary Sheet
Design Smell Descriptions - Summary SheetDesign Smell Descriptions - Summary Sheet
Design Smell Descriptions - Summary SheetGanesh Samarthyam
 
Dev ops and safety critical systems
Dev ops and safety critical systemsDev ops and safety critical systems
Dev ops and safety critical systemsLen Bass
 
Cloud Security At Netflix, October 2013
Cloud Security At Netflix, October 2013Cloud Security At Netflix, October 2013
Cloud Security At Netflix, October 2013Jay Zarfoss
 
From Code to the Monkeys: Continuous Delivery at Netflix
From Code to the Monkeys: Continuous Delivery at NetflixFrom Code to the Monkeys: Continuous Delivery at Netflix
From Code to the Monkeys: Continuous Delivery at NetflixDianne Marsh
 
Practical Security Automation
Practical Security AutomationPractical Security Automation
Practical Security AutomationJason Chan
 
Release the Monkeys ! Testing in the Wild at Netflix
Release the Monkeys !  Testing in the Wild at NetflixRelease the Monkeys !  Testing in the Wild at Netflix
Release the Monkeys ! Testing in the Wild at NetflixGareth Bowles
 
Netflix: A State of Xen - Chaos Monkey & Cassandra
Netflix: A State of Xen - Chaos Monkey & CassandraNetflix: A State of Xen - Chaos Monkey & Cassandra
Netflix: A State of Xen - Chaos Monkey & CassandraDataStax Academy
 
Netflix security monkey overview
Netflix security monkey overviewNetflix security monkey overview
Netflix security monkey overviewRyan Hodgin
 
Devops at Netflix (re:Invent)
Devops at Netflix (re:Invent)Devops at Netflix (re:Invent)
Devops at Netflix (re:Invent)Jeremy Edberg
 
Antifragile, Microservices and DevOps - A Study
Antifragile, Microservices and DevOps - A StudyAntifragile, Microservices and DevOps - A Study
Antifragile, Microservices and DevOps - A StudyWilliam Yang
 
Productive Programming in Java 8 - with Lambdas and Streams
Productive Programming in Java 8 - with Lambdas and Streams Productive Programming in Java 8 - with Lambdas and Streams
Productive Programming in Java 8 - with Lambdas and Streams Ganesh Samarthyam
 
ARC301 Intro to Chaos Monkey & the Simian Army - AWS re: Invent 2012
ARC301 Intro to Chaos Monkey & the Simian Army - AWS re: Invent 2012ARC301 Intro to Chaos Monkey & the Simian Army - AWS re: Invent 2012
ARC301 Intro to Chaos Monkey & the Simian Army - AWS re: Invent 2012Amazon Web Services
 

Andere mochten auch (20)

Let's Go: Introduction to Google's Go Programming Language
Let's Go: Introduction to Google's Go Programming LanguageLet's Go: Introduction to Google's Go Programming Language
Let's Go: Introduction to Google's Go Programming Language
 
Bangalore Container Conference 2017 - Poster
Bangalore Container Conference 2017 - PosterBangalore Container Conference 2017 - Poster
Bangalore Container Conference 2017 - Poster
 
Refactoring guided by design principles driven by technical debt
Refactoring   guided by design principles driven by technical debtRefactoring   guided by design principles driven by technical debt
Refactoring guided by design principles driven by technical debt
 
Writing an Abstract - Template (for research papers)
Writing an Abstract - Template (for research papers) Writing an Abstract - Template (for research papers)
Writing an Abstract - Template (for research papers)
 
Tools for Refactoring
Tools for RefactoringTools for Refactoring
Tools for Refactoring
 
Design Smell Descriptions - Summary Sheet
Design Smell Descriptions - Summary SheetDesign Smell Descriptions - Summary Sheet
Design Smell Descriptions - Summary Sheet
 
Java Generics - by Example
Java Generics - by ExampleJava Generics - by Example
Java Generics - by Example
 
Dev ops and safety critical systems
Dev ops and safety critical systemsDev ops and safety critical systems
Dev ops and safety critical systems
 
presentation-chaos-monkey
presentation-chaos-monkeypresentation-chaos-monkey
presentation-chaos-monkey
 
Cloud Security At Netflix, October 2013
Cloud Security At Netflix, October 2013Cloud Security At Netflix, October 2013
Cloud Security At Netflix, October 2013
 
From Code to the Monkeys: Continuous Delivery at Netflix
From Code to the Monkeys: Continuous Delivery at NetflixFrom Code to the Monkeys: Continuous Delivery at Netflix
From Code to the Monkeys: Continuous Delivery at Netflix
 
Practical Security Automation
Practical Security AutomationPractical Security Automation
Practical Security Automation
 
Release the Monkeys ! Testing in the Wild at Netflix
Release the Monkeys !  Testing in the Wild at NetflixRelease the Monkeys !  Testing in the Wild at Netflix
Release the Monkeys ! Testing in the Wild at Netflix
 
Netflix: A State of Xen - Chaos Monkey & Cassandra
Netflix: A State of Xen - Chaos Monkey & CassandraNetflix: A State of Xen - Chaos Monkey & Cassandra
Netflix: A State of Xen - Chaos Monkey & Cassandra
 
Netflix security monkey overview
Netflix security monkey overviewNetflix security monkey overview
Netflix security monkey overview
 
Mini-Training: Netflix Simian Army
Mini-Training: Netflix Simian ArmyMini-Training: Netflix Simian Army
Mini-Training: Netflix Simian Army
 
Devops at Netflix (re:Invent)
Devops at Netflix (re:Invent)Devops at Netflix (re:Invent)
Devops at Netflix (re:Invent)
 
Antifragile, Microservices and DevOps - A Study
Antifragile, Microservices and DevOps - A StudyAntifragile, Microservices and DevOps - A Study
Antifragile, Microservices and DevOps - A Study
 
Productive Programming in Java 8 - with Lambdas and Streams
Productive Programming in Java 8 - with Lambdas and Streams Productive Programming in Java 8 - with Lambdas and Streams
Productive Programming in Java 8 - with Lambdas and Streams
 
ARC301 Intro to Chaos Monkey & the Simian Army - AWS re: Invent 2012
ARC301 Intro to Chaos Monkey & the Simian Army - AWS re: Invent 2012ARC301 Intro to Chaos Monkey & the Simian Army - AWS re: Invent 2012
ARC301 Intro to Chaos Monkey & the Simian Army - AWS re: Invent 2012
 

Ähnlich wie Refactoring for Software Architecture Smells - International Workshop on Refactoring - September 2016

Refactoring for architecture smells an introduction
Refactoring for architecture smells   an introductionRefactoring for architecture smells   an introduction
Refactoring for architecture smells an introductionGanesh Samarthyam
 
ARCHITECTING IN THE CONTEXT OF AGILE SOFTWARE DEVELOPMENT: FRAGILITY VERSUS F...
ARCHITECTING IN THE CONTEXT OF AGILE SOFTWARE DEVELOPMENT: FRAGILITY VERSUS F...ARCHITECTING IN THE CONTEXT OF AGILE SOFTWARE DEVELOPMENT: FRAGILITY VERSUS F...
ARCHITECTING IN THE CONTEXT OF AGILE SOFTWARE DEVELOPMENT: FRAGILITY VERSUS F...IJCSEA Journal
 
ARCHITECTING IN THE CONTEXT OF AGILE SOFTWARE DEVELOPMENT: FRAGILITY VERSUS F...
ARCHITECTING IN THE CONTEXT OF AGILE SOFTWARE DEVELOPMENT: FRAGILITY VERSUS F...ARCHITECTING IN THE CONTEXT OF AGILE SOFTWARE DEVELOPMENT: FRAGILITY VERSUS F...
ARCHITECTING IN THE CONTEXT OF AGILE SOFTWARE DEVELOPMENT: FRAGILITY VERSUS F...IJCSEA Journal
 
Software architecture
Software architectureSoftware architecture
Software architectureUdayna
 
Reusability Framework for Cloud Computing
Reusability Framework for Cloud ComputingReusability Framework for Cloud Computing
Reusability Framework for Cloud ComputingDr Sukhpal Singh Gill
 
International Journal of Computational Engineering Research(IJCER)
 International Journal of Computational Engineering Research(IJCER)  International Journal of Computational Engineering Research(IJCER)
International Journal of Computational Engineering Research(IJCER) ijceronline
 
Lectura 2.1 architectural integrationstylesfor largescale-editable_pdf
Lectura 2.1   architectural integrationstylesfor largescale-editable_pdfLectura 2.1   architectural integrationstylesfor largescale-editable_pdf
Lectura 2.1 architectural integrationstylesfor largescale-editable_pdfMatias Menendez
 
Reverse Engineering for Documenting Software Architectures, a Literature Review
Reverse Engineering for Documenting Software Architectures, a Literature ReviewReverse Engineering for Documenting Software Architectures, a Literature Review
Reverse Engineering for Documenting Software Architectures, a Literature ReviewEditor IJCATR
 
Software Architecture
Software ArchitectureSoftware Architecture
Software ArchitectureVikas Dhyani
 
Software Refactoring Under Uncertainty: A Robust Multi-Objective Approach
Software Refactoring Under Uncertainty:  A Robust Multi-Objective ApproachSoftware Refactoring Under Uncertainty:  A Robust Multi-Objective Approach
Software Refactoring Under Uncertainty: A Robust Multi-Objective ApproachWiem Mkaouer
 
Developing reusable software components for distributed embedded systems
Developing reusable software components for distributed embedded systemsDeveloping reusable software components for distributed embedded systems
Developing reusable software components for distributed embedded systemseSAT Publishing House
 
Paper_19-Software_Architecture_Reconstruction_Method_a_Survey
Paper_19-Software_Architecture_Reconstruction_Method_a_SurveyPaper_19-Software_Architecture_Reconstruction_Method_a_Survey
Paper_19-Software_Architecture_Reconstruction_Method_a_SurveyZainab Nayyar
 
Advanced Software Engineering.ppt
Advanced Software Engineering.pptAdvanced Software Engineering.ppt
Advanced Software Engineering.pptRvishnupriya2
 
SERVICE ORIENTED CONFIGURATION MANAGEMENT OF SOFTWARE ARCHITECTURE
SERVICE ORIENTED CONFIGURATION MANAGEMENT OF SOFTWARE ARCHITECTURESERVICE ORIENTED CONFIGURATION MANAGEMENT OF SOFTWARE ARCHITECTURE
SERVICE ORIENTED CONFIGURATION MANAGEMENT OF SOFTWARE ARCHITECTUREIJNSA Journal
 
Service oriented configuration management of ‎software ‎architecture
Service oriented configuration management of ‎software ‎architectureService oriented configuration management of ‎software ‎architecture
Service oriented configuration management of ‎software ‎architectureIJNSA Journal
 
The critical need for software architecture practices in software development...
The critical need for software architecture practices in software development...The critical need for software architecture practices in software development...
The critical need for software architecture practices in software development...Alexander Decker
 
PLA and the SC 2002-04-15
PLA and the SC 2002-04-15PLA and the SC 2002-04-15
PLA and the SC 2002-04-15Jay van Zyl
 

Ähnlich wie Refactoring for Software Architecture Smells - International Workshop on Refactoring - September 2016 (20)

Refactoring for architecture smells an introduction
Refactoring for architecture smells   an introductionRefactoring for architecture smells   an introduction
Refactoring for architecture smells an introduction
 
ARCHITECTING IN THE CONTEXT OF AGILE SOFTWARE DEVELOPMENT: FRAGILITY VERSUS F...
ARCHITECTING IN THE CONTEXT OF AGILE SOFTWARE DEVELOPMENT: FRAGILITY VERSUS F...ARCHITECTING IN THE CONTEXT OF AGILE SOFTWARE DEVELOPMENT: FRAGILITY VERSUS F...
ARCHITECTING IN THE CONTEXT OF AGILE SOFTWARE DEVELOPMENT: FRAGILITY VERSUS F...
 
ARCHITECTING IN THE CONTEXT OF AGILE SOFTWARE DEVELOPMENT: FRAGILITY VERSUS F...
ARCHITECTING IN THE CONTEXT OF AGILE SOFTWARE DEVELOPMENT: FRAGILITY VERSUS F...ARCHITECTING IN THE CONTEXT OF AGILE SOFTWARE DEVELOPMENT: FRAGILITY VERSUS F...
ARCHITECTING IN THE CONTEXT OF AGILE SOFTWARE DEVELOPMENT: FRAGILITY VERSUS F...
 
Software architecture
Software architectureSoftware architecture
Software architecture
 
Reusability Framework for Cloud Computing
Reusability Framework for Cloud ComputingReusability Framework for Cloud Computing
Reusability Framework for Cloud Computing
 
International Journal of Computational Engineering Research(IJCER)
 International Journal of Computational Engineering Research(IJCER)  International Journal of Computational Engineering Research(IJCER)
International Journal of Computational Engineering Research(IJCER)
 
Lectura 2.1 architectural integrationstylesfor largescale-editable_pdf
Lectura 2.1   architectural integrationstylesfor largescale-editable_pdfLectura 2.1   architectural integrationstylesfor largescale-editable_pdf
Lectura 2.1 architectural integrationstylesfor largescale-editable_pdf
 
Reverse Engineering for Documenting Software Architectures, a Literature Review
Reverse Engineering for Documenting Software Architectures, a Literature ReviewReverse Engineering for Documenting Software Architectures, a Literature Review
Reverse Engineering for Documenting Software Architectures, a Literature Review
 
Software Architecture
Software ArchitectureSoftware Architecture
Software Architecture
 
Full Paper
Full PaperFull Paper
Full Paper
 
Software Refactoring Under Uncertainty: A Robust Multi-Objective Approach
Software Refactoring Under Uncertainty:  A Robust Multi-Objective ApproachSoftware Refactoring Under Uncertainty:  A Robust Multi-Objective Approach
Software Refactoring Under Uncertainty: A Robust Multi-Objective Approach
 
Developing reusable software components for distributed embedded systems
Developing reusable software components for distributed embedded systemsDeveloping reusable software components for distributed embedded systems
Developing reusable software components for distributed embedded systems
 
Paper_19-Software_Architecture_Reconstruction_Method_a_Survey
Paper_19-Software_Architecture_Reconstruction_Method_a_SurveyPaper_19-Software_Architecture_Reconstruction_Method_a_Survey
Paper_19-Software_Architecture_Reconstruction_Method_a_Survey
 
Advanced Software Engineering.ppt
Advanced Software Engineering.pptAdvanced Software Engineering.ppt
Advanced Software Engineering.ppt
 
SA_UNIT_1.pptx
SA_UNIT_1.pptxSA_UNIT_1.pptx
SA_UNIT_1.pptx
 
SERVICE ORIENTED CONFIGURATION MANAGEMENT OF SOFTWARE ARCHITECTURE
SERVICE ORIENTED CONFIGURATION MANAGEMENT OF SOFTWARE ARCHITECTURESERVICE ORIENTED CONFIGURATION MANAGEMENT OF SOFTWARE ARCHITECTURE
SERVICE ORIENTED CONFIGURATION MANAGEMENT OF SOFTWARE ARCHITECTURE
 
Service oriented configuration management of ‎software ‎architecture
Service oriented configuration management of ‎software ‎architectureService oriented configuration management of ‎software ‎architecture
Service oriented configuration management of ‎software ‎architecture
 
10.1.1.107.2618
10.1.1.107.261810.1.1.107.2618
10.1.1.107.2618
 
The critical need for software architecture practices in software development...
The critical need for software architecture practices in software development...The critical need for software architecture practices in software development...
The critical need for software architecture practices in software development...
 
PLA and the SC 2002-04-15
PLA and the SC 2002-04-15PLA and the SC 2002-04-15
PLA and the SC 2002-04-15
 

Mehr von Ganesh Samarthyam

Applying Refactoring Tools in Practice
Applying Refactoring Tools in PracticeApplying Refactoring Tools in Practice
Applying Refactoring Tools in PracticeGanesh Samarthyam
 
CFP - 1st Workshop on “AI Meets Blockchain”
CFP - 1st Workshop on “AI Meets Blockchain”CFP - 1st Workshop on “AI Meets Blockchain”
CFP - 1st Workshop on “AI Meets Blockchain”Ganesh Samarthyam
 
Great Coding Skills Aren't Enough
Great Coding Skills Aren't EnoughGreat Coding Skills Aren't Enough
Great Coding Skills Aren't EnoughGanesh Samarthyam
 
College Project - Java Disassembler - Description
College Project - Java Disassembler - DescriptionCollege Project - Java Disassembler - Description
College Project - Java Disassembler - DescriptionGanesh Samarthyam
 
Coding Guidelines - Crafting Clean Code
Coding Guidelines - Crafting Clean CodeCoding Guidelines - Crafting Clean Code
Coding Guidelines - Crafting Clean CodeGanesh Samarthyam
 
Design Patterns - Compiler Case Study - Hands-on Examples
Design Patterns - Compiler Case Study - Hands-on ExamplesDesign Patterns - Compiler Case Study - Hands-on Examples
Design Patterns - Compiler Case Study - Hands-on ExamplesGanesh Samarthyam
 
Bangalore Container Conference 2017 - Brief Presentation
Bangalore Container Conference 2017 - Brief PresentationBangalore Container Conference 2017 - Brief Presentation
Bangalore Container Conference 2017 - Brief PresentationGanesh Samarthyam
 
Software Design in Practice (with Java examples)
Software Design in Practice (with Java examples)Software Design in Practice (with Java examples)
Software Design in Practice (with Java examples)Ganesh Samarthyam
 
OO Design and Design Patterns in C++
OO Design and Design Patterns in C++ OO Design and Design Patterns in C++
OO Design and Design Patterns in C++ Ganesh Samarthyam
 
Bangalore Container Conference 2017 - Sponsorship Deck
Bangalore Container Conference 2017 - Sponsorship DeckBangalore Container Conference 2017 - Sponsorship Deck
Bangalore Container Conference 2017 - Sponsorship DeckGanesh Samarthyam
 
Google's Go Programming Language - Introduction
Google's Go Programming Language - Introduction Google's Go Programming Language - Introduction
Google's Go Programming Language - Introduction Ganesh Samarthyam
 
Java Generics - Quiz Questions
Java Generics - Quiz QuestionsJava Generics - Quiz Questions
Java Generics - Quiz QuestionsGanesh Samarthyam
 
Software Architecture - Quiz Questions
Software Architecture - Quiz QuestionsSoftware Architecture - Quiz Questions
Software Architecture - Quiz QuestionsGanesh Samarthyam
 
Core Java: Best practices and bytecodes quiz
Core Java: Best practices and bytecodes quizCore Java: Best practices and bytecodes quiz
Core Java: Best practices and bytecodes quizGanesh Samarthyam
 
Advanced Debugging Using Java Bytecodes
Advanced Debugging Using Java BytecodesAdvanced Debugging Using Java Bytecodes
Advanced Debugging Using Java BytecodesGanesh Samarthyam
 
Refactoring for Software Architecture Smells - International Workshop on Refa...
Refactoring for Software Architecture Smells - International Workshop on Refa...Refactoring for Software Architecture Smells - International Workshop on Refa...
Refactoring for Software Architecture Smells - International Workshop on Refa...Ganesh Samarthyam
 

Mehr von Ganesh Samarthyam (20)

Wonders of the Sea
Wonders of the SeaWonders of the Sea
Wonders of the Sea
 
Animals - for kids
Animals - for kids Animals - for kids
Animals - for kids
 
Applying Refactoring Tools in Practice
Applying Refactoring Tools in PracticeApplying Refactoring Tools in Practice
Applying Refactoring Tools in Practice
 
CFP - 1st Workshop on “AI Meets Blockchain”
CFP - 1st Workshop on “AI Meets Blockchain”CFP - 1st Workshop on “AI Meets Blockchain”
CFP - 1st Workshop on “AI Meets Blockchain”
 
Great Coding Skills Aren't Enough
Great Coding Skills Aren't EnoughGreat Coding Skills Aren't Enough
Great Coding Skills Aren't Enough
 
College Project - Java Disassembler - Description
College Project - Java Disassembler - DescriptionCollege Project - Java Disassembler - Description
College Project - Java Disassembler - Description
 
Coding Guidelines - Crafting Clean Code
Coding Guidelines - Crafting Clean CodeCoding Guidelines - Crafting Clean Code
Coding Guidelines - Crafting Clean Code
 
Design Patterns - Compiler Case Study - Hands-on Examples
Design Patterns - Compiler Case Study - Hands-on ExamplesDesign Patterns - Compiler Case Study - Hands-on Examples
Design Patterns - Compiler Case Study - Hands-on Examples
 
Bangalore Container Conference 2017 - Brief Presentation
Bangalore Container Conference 2017 - Brief PresentationBangalore Container Conference 2017 - Brief Presentation
Bangalore Container Conference 2017 - Brief Presentation
 
Software Design in Practice (with Java examples)
Software Design in Practice (with Java examples)Software Design in Practice (with Java examples)
Software Design in Practice (with Java examples)
 
OO Design and Design Patterns in C++
OO Design and Design Patterns in C++ OO Design and Design Patterns in C++
OO Design and Design Patterns in C++
 
Bangalore Container Conference 2017 - Sponsorship Deck
Bangalore Container Conference 2017 - Sponsorship DeckBangalore Container Conference 2017 - Sponsorship Deck
Bangalore Container Conference 2017 - Sponsorship Deck
 
Google's Go Programming Language - Introduction
Google's Go Programming Language - Introduction Google's Go Programming Language - Introduction
Google's Go Programming Language - Introduction
 
Java Generics - Quiz Questions
Java Generics - Quiz QuestionsJava Generics - Quiz Questions
Java Generics - Quiz Questions
 
Software Architecture - Quiz Questions
Software Architecture - Quiz QuestionsSoftware Architecture - Quiz Questions
Software Architecture - Quiz Questions
 
Docker by Example - Quiz
Docker by Example - QuizDocker by Example - Quiz
Docker by Example - Quiz
 
Core Java: Best practices and bytecodes quiz
Core Java: Best practices and bytecodes quizCore Java: Best practices and bytecodes quiz
Core Java: Best practices and bytecodes quiz
 
Advanced Debugging Using Java Bytecodes
Advanced Debugging Using Java BytecodesAdvanced Debugging Using Java Bytecodes
Advanced Debugging Using Java Bytecodes
 
Java Class Design
Java Class DesignJava Class Design
Java Class Design
 
Refactoring for Software Architecture Smells - International Workshop on Refa...
Refactoring for Software Architecture Smells - International Workshop on Refa...Refactoring for Software Architecture Smells - International Workshop on Refa...
Refactoring for Software Architecture Smells - International Workshop on Refa...
 

Kürzlich hochgeladen

How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdfPearlKirahMaeRagusta1
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnAmarnathKambale
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...Jittipong Loespradit
 
LEVEL 5 - SESSION 1 2023 (1).pptx - PDF 123456
LEVEL 5   - SESSION 1 2023 (1).pptx - PDF 123456LEVEL 5   - SESSION 1 2023 (1).pptx - PDF 123456
LEVEL 5 - SESSION 1 2023 (1).pptx - PDF 123456KiaraTiradoMicha
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrainmasabamasaba
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension AidPhilip Schwarz
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is insideshinachiaurasa2
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...Nitya salvi
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfVishalKumarJha10
 
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfAzure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfryanfarris8
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfkalichargn70th171
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 

Kürzlich hochgeladen (20)

How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 
LEVEL 5 - SESSION 1 2023 (1).pptx - PDF 123456
LEVEL 5   - SESSION 1 2023 (1).pptx - PDF 123456LEVEL 5   - SESSION 1 2023 (1).pptx - PDF 123456
LEVEL 5 - SESSION 1 2023 (1).pptx - PDF 123456
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
 
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfAzure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 

Refactoring for Software Architecture Smells - International Workshop on Refactoring - September 2016

  • 1. Refactoring for Software Architecture Smells Ganesh Samarthyam CodeOps Technologies LLP C V Raman Nagar, Bangalore, India ganesh@codeops.tech Girish Suryanarayana Siemens Corporate Research & Technologies, No. 84, Electronics City, Bangalore, India girish.suryanarayana@ siemens.com Tushar Sharma Dept of Management Science and Technology, Athens University of Economics and Business, Athens, Greece tushar@aueb.gr ABSTRACT Code smells and refactoring have received considerable in- terest from the academia as well as from the industry in the past two decades. The interest has given birth to var- ious tools, processes, techniques, and practices to identify smells and refactor them. Despite the high interest, architec- ture smells and corresponding refactorings haven’t received as much focus and adoption from the software engineering community. In this paper, we motivate the need of archi- tecture refactoring, discuss the current related research, and present a few potential research directions for architecture refactoring. CCS Concepts •Software and its engineering → Software architec- tures; Software maintenance tools; Designing soft- ware; Keywords Architecture smells; Architecture refactoring; Software ar- chitecture 1. INTRODUCTION Cities grow, cities evolve, cities have parts that simply die while other parts flourish; each city has to be renewed in order to meet the needs of its populace [. . . ] Software-intensive systems are like that. Grady Booch uses the evolution of a city as a metaphor to emphasize the need for refactoring software systems (in the forward of the book by Girish et al. [27]). Some of the indicators of an ailing city include congested roads and traffic jams, pollution of water bodies and air, and piles of garbage. Such a city requires “renewing” at multiple levels and scale. When a city fails to address the growing needs of its populace, it can lead to a“crisis”situation and ultimately to its abandonment. The evolution of software systems is akin to evolution of a city. With evolution of a software system, complexity of the system increases unless efforts are made to maintain and reduce it [16]. Refactoring is a well-known technique defined as“behavior preserving program transformations”[8] to cope up with increasing complexity and keep the software main- tainable. Failure to perform periodic refactoring leads to accumulation of technical debt [4] and ultimately to “tech- nical bankruptcy”. Hence, periodic refactoring is essential for long-lived software to improve and maintain structural quality of the software. In general, smells and their corresponding refactorings are applied at various granularity levels. Smells could be cat- egorized as implementation smells [8], design smells [27], and architecture smells [9]. The categorization of a smell depends on factors such as their scope and the impact on the rest of the system. Implementation smells have lim- ited scope (typically confined to a class or file) and have a limited local impact. On the other hand, architecture smells span multiple components and have a system level impact. Since smells differ in their scope, impact, and effort required for refactoring, it is pragmatic to classify the smells into implementation, design, and architecture smells. Simi- lar to smells, refactoring techniques applied to refactor these smells can also be classified as implementation refactoring, design refactoring, and architecture refactoring. Due to a wide adoption of agile and lean methods of soft- ware development, refactoring has received considerable fo- cus from the academia and the industry. Several excellent tools, processes, techniques and practices have been devel- oped to adopt refactoring as an integral part of the devel- opment lifecycle [3,6,30]. However, architecture refactoring hasn’t received as much focus from the software engineering community. In this paper, we summarize the state of the art on refactoring for architecture smells and provide a research outline for the road ahead. 2. MOTIVATION Industrial software systems are typically complex and long- lived. Consider Windows operating system for example. It has grown to more than 50 million loc over the last 25 years. Evolution at such a scale of time and size poses a threat to the structural quality of the software. Hence, periodic ar- chitecture refactoring is required to maintain the structural quality of such a complex and evolving software system. In addition, such refactorings are mandatory for the success of This is the author’s version of the work. It is posted here for your personal use. Not for redistribution. The definitive version was published in the following publication: IWoR’16, September 4, 2016, Singapore, Singapore c 2016 ACM. 978-1-4503-4509-5/16/09... http://dx.doi.org/10.1145/2975945.2975946 1
  • 2. Figure 1: Tangle in Java core library depicting “dependency cycles between packages” smell the software product as they facilitate an easier integration of new features. For instance, a major refactoring effort was carried out for Windows while evolving from Vista to Win- dows 7 version [12]. The primary goal of this refactoring was to remove undesirable dependencies among modules so that layering violations can be addressed and dependency structure can be improved. In this case study, the authors refer to architecture refac- toring without using the terms “architecture refactoring” or “architecture smell” anywhere in their paper; instead they use other related terms such as “system-wide refactoring”. We argue that, this work (among numerous others) illus- trate that “architecture refactoring” is an emerging domain that is yet to find its place in common vocabulary used by researchers and practitioners working in the area of software engineering in general and refactoring in particular. Now, let us consider the Java core library (jdk). jdk has evolved considerably in size and complexity since the release of its first version in 1995. For instance, consider the “tangle” (i.e., a part of a dependency graph in which all the items are directly or indirectly dependent on all other items) in the Java 8 core library (refer Figure 1; the fig- ure is generated by using Structure 101 tool). The packages involved in the cycle have to be used, reused, tested, and de- ployed together leading to various maintenance woes. It is referred as “dependency cycles between packages” architec- ture smell [17]. This smell negatively affects maintainability, reusability, testability, reliability, and deployability of the software. With changes being performed in Java 9 (project Jigsaw) [11], it is expected that the modularity concerns will be addressed, including the removal of considerable number of such cyclic dependencies between packages in the jdk. From these case studies, it is evident that architecture smells (such as “large module” and “dependency cycles be- tween packages” smells) are distinct from smells arising at other granularities such as implementation smells (for in- stance, “large method” [8]) and design smells (for instance, “cyclically-dependent modularization” smells [27]). As dis- cussed earlier, the scope and impact of architecture refactor- ings is relatively higher when compared to refactoring at im- plementation and design granularities. Additionally, archi- tecture refactoring require significant amount of effort and time compared to with implementation and design refactor- ings. Refactoring in these two case studies has taken many years with considerable planning and team co-ordination in- volved. At the same time, the benefits of architecture refac- toring are also significantly high and serve relatively longer than other types of refactorings. 3. RELATED WORK Garcia et al. [9] defined architecture smell as“a commonly (although not always intentionally) used architectural deci- sion that negatively impacts system quality”. Researchers use various terms for architectural smells, in- cluding “architectural bad smells” [9], “architecture smells” [17],“anti-patterns”[2],“architecturally-relevant code smells” [1], “contra-indicated patterns” [15], “architectural defects” [23], “[accidental] architectural anti-patterns” [14]. Further, researchers have explored specific categories of architecture smells; for example, Rama et al. discusses“modularity smells” 2
  • 3. [22], and Ouni et al. outlines “web service antipatterns” [21] in the context of Service Oriented Architectures (soa). On the other hand, architecture refactoring is defined as “a coordinated set of deliberate architectural activities that remove a particular architectural smell and improve at least one quality attribute without changing the system’s scope and functionality” [32]. Architectural refactorings are also referred to as “high-impact refactorings” [7], “architecture transformation” [10], and “large refactorings” [17]. We have observed practitioners using other terms such as“architecture- oriented refactorings”. In our earlier work on design smells [24,27], we focused our study on the vast literature on object-oriented design smells. We cataloged and classified a number of recurring structural design smells based on how they violate key object oriented design principles. There have been a few attempts to catalog architecture smells or refactorings [9,26]. A few architecture refactoring case studies performed on industrial projects also have been reported. For example, Kumar et al. [13] presents an archi- tecture refactoring case study performed on a mission criti- cal application. There are exploratory studies on emerging topics in architecture refactoring, such as architecture refac- toring in software product lines [5] and architecture technical debt [20]. 4. POTENTIAL RESEARCH DIRECTIONS Despite many attempts to explore architecture smells and corresponding refactorings in diverse dimensions, the do- main is far from maturity. Based on the related work in this area (described in the previous section) and our experi- ence as practicing architects, we envision the following areas for further research on this topic: • Catalog of architectural smells: A comprehensive catalog of architecture smells and refactorings with an appropriate classification would better guide a soft- ware developer in understanding and addressing po- tential issues in the architecture of his/her software system. As discussed above, there has been a few attempts to catalog architecture smells and refactor- ings. However, a comprehensive catalog of architec- tural smells with detailed explanation, examples, con- text, their technical and economic impacts on the soft- ware product, and refactoring suggestions is still miss- ing. We envision a taxonomy of architecture smells and corresponding refactorings, classified based on di- mensions such as Structure and Behavior. • Tool support: Although, there are a few tools such as Sonargraph [25] that may help us detect architecture smells. However, currently available tools are insuffi- cient from various aspects: – The present set of tools does not detect a com- prehensive number of architecture smells. – Architecture smells are contextual in nature. The present set of tools does not consider the contex- tual information for smell detection. – Common IDEs (Integrated Development Environ- ments) such as Eclipse, Visual Studio, IntelliJ IDEA, and Netbeans allow developers to perform- ing code refactoring automatically. However, IDEs lack support for detecting architecture smells and do not help perform architecture refactorings ef- fectively. An ecosystem of tools for detecting architectural smells, providing refactoring recommendations, and helping perform the architecture refactorings is sorely lack- ing [29]. • Economics of architecture refactoring (quanti- fying architecture technical debt): Architecture debt is a significant component of technical debt for a software system. It is not trivial to quantify architec- ture debt given the challenges associated with it. Ma- jor challenges include detecting architecture smells au- tomatically with associated severity, defining a quan- tification model which can be customizable and ad- justable based on the project properties and mapping the detected smells to the model, and quantifying the interest aspect of the debt correctly. Researchers have proposed a few solutions, such as the one by Xiao et al. [31]; despite this, more focused research is required to develop a comprehensive yet practical quantification method for architecture debt. In general, more studies on evaluating the benefits of architecture refactoring (from software engineering economics perspective) is needed. • Empirical studies: Though there are a few case studies reported on architecture smells or refactoring (such as Kumar et al. [13]), there is a huge potential for empirical studies on architectural smells or refactoring and their impact on various aspects of software de- velopment. Such an empirical study on large software systems may reveal many interesting insights about the characteristics of architecture smells and their impact on the software and the development efforts. • Refactoring and emerging architecture styles and patterns: In the last few years, new architec- ture styles and patterns (such as Microservices [19] and Containerization [28]) have received considerable attention in the software industry. For example, refac- toring from monolithic to microservices is a topic often discussed by practitioners [19]. However, architecture smells and refactoring in the context of these new ar- chitecture styles and patterns is yet to be explored by the software engineering researchers. 5. CONCLUSIONS Practices such as refactoring are key to overcome or avoid the negative effects of software aging because they place change and evolution in the center of the software devel- opment process [18]. Knowing architecture smells for a soft- ware system and performing associated refactorings could avoid architecture erosion. However, architecture smells and refactoring are yet to receive extensive focus. In this paper, we have discussed related research and outlined a few poten- tial areas for further research in the domain of architecture smells and refactoring. We hope that this work will spark more ideas and research in this domain and ultimately their wider adoption in industry. 3
  • 4. 6. REFERENCES [1] I. M. Bertran. Detecting architecturally-relevant code smells in evolving software systems. In 33rd International Conference on Software Engineering (ICSE), pages 1090–1093, May 2011. [2] W. H. Brown, R. C. Malveau, H. W. S. McCormick, and T. J. Mowbray. AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis. John Wiley & Sons, Inc., 1st edition, 1998. [3] Y. Cai and R. Kazman. Software architecture health monitor. In Proceedings of the 1st International Workshop on Bringing Architectural Design Thinking into Developers’ Daily Activities, BRIDGE ’16, pages 18–21, New York, NY, USA, 2016. ACM. [4] W. Cunningham. The wycash portfolio management system. SIGPLAN OOPS Mess., 4(2):29–30, 1992. [5] H. S. de Andrade, E. Almeida, and I. Crnkovic. Architectural bad smells in software product lines: An exploratory study. In Proceedings of the WICSA 2014 Companion Volume, WICSA ’14 Companion, pages 12:1–12:6, New York, NY, USA, 2014. ACM. [6] S. Demeyer, S. Ducasse, and O. Nierstrasz. Object Oriented Reengineering Patterns. Morgan Kaufmann Publishers Inc., San Francisco, CA, USA, 2002. [7] J. Dietrich, C. McCartin, E. D. Tempero, and S. M. A. Shah. On the detection of high-impact refactoring opportunities in programs. CoRR, 2010. [8] M. Fowler. Refactoring: Improving the Design of Existing Programs. Addison-Wesley Professional, 1 edition, 1999. [9] J. Garcia, D. Popescu, G. Edwards, and N. Medvidovic. Toward a Catalogue of Architectural Bad Smells. In Proceedings of the 5th International Conference on the Quality of Software Architectures: Architectures for Adaptive Software Systems, pages 146–162. Springer-Verlag, 2009. [10] L. Grunske. Identifying ”good” architectural design alternatives with multi-objective optimization strategies. In Proceedings of the 28th International Conference on Software Engineering, pages 849–852. ACM, 2006. [11] Project Jigsaw. http://openjdk.java.net/projects/jigsaw/, 2016. [Online; accessed 11-Jun-2016]. [12] M. Kim, T. Zimmermann, and N. Nagappan. An empirical study of refactoring challenges and benefits at microsoft. IEEE Transactions of Software Engineering, 40(7):633–649, July 2014. [13] M. R. Kumar and R. H. Kumar. Architectural refactoring of a mission critical integration application: A case study. In Proceedings of the 4th India Software Engineering Conference, pages 77–83. ACM, 2011. [14] A. Lauder and S. Kent. Legacy System Anti-Patterns and a Pattern-Oriented Migration Response, pages 239–250. Springer London, 2000. [15] A. Lauder and S. Kent. Systems engineering for business process change. pages 225–240. Springer-Verlag New York, Inc., 2002. [16] M. M. Lehman. Laws of software evolution revisited. In Proceedings of the 5th European Workshop on Software Process Technology, pages 108–124. Springer-Verlag, 1996. [17] M. Lippert and S. Roock. Refactoring in large software projects: performing complex restructurings successfully. John Wiley & Sons, 2006. [18] T. Mens, M. Wermelinger, S. Ducasse, S. Demeyer, R. Hirschfeld, and M. Jazayeri. Challenges in software evolution. In Proceedings of the Eighth International Workshop on Principles of Software Evolution, IWPSE ’05, pages 13–22, Washington, DC, USA, 2005. [19] S. Newman. Building Microservices. O’Reilly, 2015. [20] R. L. Nord, I. Ozkaya, P. Kruchten, and M. Gonzalez-Rojas. In search of a metric for managing architectural technical debt. In Joint Working IEEE/IFIP Conference on Software Architecture (WICSA) and European Conference on Software Architecture (ECSA), pages 91–100, Aug 2012. [21] A. Ouni, M. Kessentini, K. Inoue, and M. O. Cinneide. Search-based web service antipatterns detection. IEEE Transactions on Services Computing, PP(99):1–1, 2015. [22] G. M. Rama. A desiderata for refactoring-based software modularity improvement. In Proceedings of the 3rd India Software Engineering Conference, pages 93–102. ACM, 2010. [23] R. Roshandel, B. Schmerl, N. Medvidovic, D. Garlan, and D. Zhang. Using multiple views to model and analyze software architecture: An experience report. Technical Report USC-CSE-2003-508, University of Southern California (CSE), 2003. [24] G. Samarthyam, G. Suryanarayana, T. Sharma, and S. Gupta. Midas: A design quality assessment method for industrial software. In Proceedings of the 2013 International Conference on Software Engineering, ICSE ’13, pages 911–920, 2013. [25] Sonargraph. https://www.hello2morrow.com/products/sonargraph, 2016. [Online; accessed 11-Jun-2016]. [26] M. Stal. Software architecture refactoring. In Tutorial in The International Conference on Object Oriented Programming, Systems, Languages and Applications, 2007. [27] G. Suryanarayana, G. Samarthyam, and T. Sharma. Refactoring for Software Design Smells: Managing Technical Debt. Morgan Kaufmann, 1 edition, 2014. [28] M. H. Syed and E. B. Fernandez. The software container pattern. In 22nd Conference on Pattern Languages of Programs, PLoP, 2015. [29] R. Terra, M. T. Valente, K. Czarnecki, and R. S. Bigonha. Recommending refactorings to reverse software architecture erosion. In 16th European Conference on Software Maintenance and Reengineering (CSMR), pages 335–340. IEEE, 2012. [30] L. Tokuda and D. Batory. Evolving object-oriented designs with refactorings. Automated Software Engg., 8(1):89–120, Jan. 2001. [31] L. Xiao, Y. Cai, R. Kazman, R. Mo, and Q. Feng. Identifying and quantifying architectural debt. In Proceedings of the 38th International Conference on Software Engineering, pages 488–498. ACM, 2016. [32] O. Zimmermann. Architectural refactoring: A task-centric view on software evolution. IEEE Software, 32(2):26–29, Mar 2015. 4