Refactoring for Software Design Smells: Managing Technical Debt

Free sample

Awareness of design smells – indicators of common design problems – helps developers or software engineers understand mistakes made while designing, what design principles were overlooked or misapplied, and what principles need to be applied properly to address those smells through refactoring. Developers and software engineers may "know" principles and patterns, but are not aware of the "smells" that exist in their design because of wrong or mis-application of principles or patterns. These smells tend to contribute heavily to technical debt – further time owed to fix projects thought to be complete – and need to be addressed via proper refactoring.

Refactoring for Software Design Smells 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.
  • Contains a comprehensive catalog of 25 structural design smells (organized around four fundamental design principles) that contribute to technical debt in software projects
  • Presents a unique naming scheme for smells that helps understand the cause of a smell as well as points toward its potential refactoring
  • Includes illustrative examples that showcase the poor design practices underlying a smell and the problems that result
  • Covers pragmatic techniques for refactoring design smells to manage technical debt and to create and maintain high-quality software in practice
  • Presents insightful anecdotes and case studies drawn from the trenches of real-world projects
Read more
Collapse

About the author

Girish Suryanarayana is currently a Senior Research Scientist at Research and Technology Center, Siemens Technology and Services Pvt. Ltd. Bangalore, India. At Siemens, he is involved in providing architectural guidance to software development teams, pursuing research in topics related to software architecture and cloud computing, and conducting internal software design and architecture training. Girish is a member of the IEEE Software Advisory Board and is the General Chair for the IEEE Software Experts Summit 2014 conference. He actively contributes to software engineering conferences. In 2013, he was on the program committee for the Software Engineering In Practice (SEIP) track at the 35th International Conference on Software Engineering (ICSE). Girish received a PhD in Information and Computer Science from the University of California, Irvine, in 2007. His research interests include software architecture, design patterns, design smells, refactoring, cloud computing, and reputation-based trust management systems. He is an IEEE-certified Software Engineering Certified Instructor (SECI) and regularly conducts training for the IEEE SWEBOK Certificate Program (SCP) and IEEE Certified Software Development Associate (CSDA) programs. He has also helped contribute course material for the IEEE’s SWEBOK Certificate Program (SCP). He is regularly invited by local universities to deliver guest lectures on software architecture and design topics. Additionally, he is the General Chair for IEEE SES (Software Expert Summit) 2014 which is being organized by IEEE Software.

Ganesh Samarthyam has more than 11 years of experience in the IT industry. He is an independent consultant and corporate trainer based in Bangalore, India. Earlier, he worked for the Software Architecture and Development team in Siemens Corporate Research & Technologies in Bangalore. His work involved providing consultancy to development teams on code and design quality, pursuing applied research in the areas of software design, and conducting trainings on topics related to software design and refactoring and quality-driven development. Prior to Siemens, he worked in Hewlett-Packard's C++ compiler team for 5 years where he also represented HP in the ANSI/ISO C++ standardization committee. He is an IEEE-certified Software Engineering Certified Instructor (SECI) and regularly conducts training for the IEEE SWEBOK Certificate Program (SCP) and IEEE Certified Software Development Associate (CSDA) program. He has also helped contribute course material for the IEEE’s SWEBOK Certificate Program (SCP). Ganesh has authored/co-authored several books on programming. His latest book titled "Oracle Certified Professional Java SE 7 Programmer Exams 1Z0-804 and 1Z0-805" (co-authored with Tushar Sharma) has been published by Apress in 2013. In his free time, he also regularly contributes to a column on software programming and design in “Open Source For You magazine. His areas of interest include design smells and refactoring, bug patterns, software quality assessment methods, and programming languages. He can be reached at sgganesh@gmail.com.

Tushar Sharma is currently a Technical Expert in the Software Architecture and Development group at the Research and Technology Center, Siemens Technology and Services Pvt. Ltd., Bangalore, India. His work at Siemens involves researching and providing consultation on topics related to software design, refactoring, testability, design patterns, and change impact analysis. He has a Masters degree in Computer Science from the Indian Institute of Technology-Madras (IIT-M), Chennai, India, where he specialized in design patterns and refactoring. Tushar conducts several internal training sessions on topics related to software design and refactoring. He has been actively pursuing his research interests that resulted in several patents, research papers, and tools related to software design and refactoring. He is also the co-author of the book “Oracle Certified Professional Java SE 7 Programmer Exams 1Z0-804 and 1Z0-805" published by Apress in 2013. Additionally, he is the Local Publicity Chair for IEEE SES (Software Expert Summit) 2014.

Read more
Collapse
4.0
2 total
Loading...

Additional Information

Publisher
Morgan Kaufmann
Read more
Collapse
Published on
Nov 11, 2014
Read more
Collapse
Pages
258
Read more
Collapse
ISBN
9780128016466
Read more
Collapse
Read more
Collapse
Read more
Collapse
Language
English
Read more
Collapse
Genres
Computers / Interactive & Multimedia
Computers / Programming Languages / General
Computers / Software Development & Engineering / General
Read more
Collapse
Content Protection
This content is DRM protected.
Read more
Collapse
Read Aloud
Available on Android devices
Read more
Collapse
Eligible for Family Library

Reading information

Smartphones and Tablets

Install the Google Play Books app for Android and iPad/iPhone. It syncs automatically with your account and allows you to read online or offline wherever you are.

Laptops and Computers

You can read books purchased on Google Play using your computer's web browser.

eReaders and other devices

To read on e-ink devices like the Sony eReader or Barnes & Noble Nook, you'll need to download a file and transfer it to your device. Please follow the detailed Help center instructions to transfer the files to supported eReaders.
This book is a comprehensive, step-by-step and one-stop guide for the Java SE 8 Programmer II exam (IZ0-809). Salient features of this book include: 100% coverage of the exam topics, a full-length mock exam, practice exam questions, exam notes and tips.
Oracle Certified Professional Java SE 8 Programmer II Guide (Exam IZ0-809) is a comprehensive guide for the OCPJP 8 exam.
The book starts by answering frequently asked questions about the OCPJP 8 exam (Chapter 1). The book maps each exam topic into a chapter and covers 100% of the exam topics (next 12 Chapters). Exam topics are discussed using numerous programming and real-world examples. Each chapter ends with practice exam questions and a quick summary that revises key concepts covered in the chapter from exam perspective.
After reading the main chapters, you can take the full-length mock exam to ensure that you have enough practice before actually taking the exam (Chapter 14). If you are an OCPJP 8 exam aspirant, this book is certainly for you. This book assumes that you are already familiar with Java fundamentals (that is in line with the prerequisite of having a OCAJP 8 certification before you take up the OCPJP 8 exam).
This book will be a delectable read to you because of its simple language, example driven approach, easy-to-read style, and complete focus towards the exam. Salient Features • In-depth and 100% coverage of all 12 exam topics for the certification • Numerous illustrative programming and real-world examples• Hundreds of practice exam questions (including a full-length mock exam)
What you will learn: • Have the necessary knowledge to clear the exam since 100% of the exam topics are covered to the required depth • clearly understand the scope and objectives of the exam, the technical topics covered in the exam, and type and level-of-difficulty of the exam questions (in short, you will clearly know what’s exactly required for passing the exam) • get into an “exam mindset” by trying out hundreds of practice exam questions.
In 1994, Design Patterns changed the landscape of object-oriented development by introducing classic solutions to recurring design problems. In 1999, Refactoring revolutionized design by introducing an effective process for improving code. With the highly anticipated Refactoring to Patterns , Joshua Kerievsky has changed our approach to design by forever uniting patterns with the evolutionary process of refactoring.

This book introduces the theory and practice of pattern-directed refactorings: sequences of low-level refactorings that allow designers to safely move designs to, towards, or away from pattern implementations. Using code from real-world projects, Kerievsky documents the thinking and steps underlying over two dozen pattern-based design transformations. Along the way he offers insights into pattern differences and how to implement patterns in the simplest possible ways.

Coverage includes:

A catalog of twenty-seven pattern-directed refactorings, featuring real-world code examples Descriptions of twelve design smells that indicate the need for this book’s refactorings General information and new insights about patterns and refactoring Detailed implementation mechanics: how low-level refactorings are combined to implement high-level patterns Multiple ways to implement the same pattern–and when to use each Practical ways to get started even if you have little experience with patterns or refactoring

Refactoring to Patterns reflects three years of refinement and the insights of more than sixty software engineering thought leaders in the global patterns, refactoring, and agile development communities. Whether you’re focused on legacy or “greenfield” development, this book will make you a better software designer by helping you learn how to make important design changes safely and effectively.

Master the essential skills needed to recognize and solve complex problems with machine learning and deep learning. Using real-world examples that leverage the popular Python machine learning ecosystem, this book is your perfect companion for learning the art and science of machine learning to become a successful practitioner. The concepts, techniques, tools, frameworks, and methodologies used in this book will teach you how to think, design, build, and execute machine learning systems and projects successfully.Practical Machine Learning with Python follows a structured and comprehensive three-tiered approach packed with hands-on examples and code.

Part 1 focuses on understanding machine learning concepts and tools. This includes machine learning basics with a broad overview of algorithms, techniques, concepts and applications, followed by a tour of the entire Python machine learning ecosystem. Brief guides for useful machine learning tools, libraries and frameworks are also covered.

Part 2 details standard machine learning pipelines, with an emphasis on data processing analysis, feature engineering, and modeling. You will learn how to process, wrangle, summarize and visualize data in its various forms. Feature engineering and selection methodologies will be covered in detail with real-world datasets followed by model building, tuning, interpretation and deployment.

Part 3 explores multiple real-world case studies spanning diverse domains and industries like retail, transportation, movies, music, marketing, computer vision and finance. For each case study, you will learn the application of various machine learning techniques and methods. The hands-on examples will help you become familiar with state-of-the-art machine learning tools and techniques and understand what algorithms are best suited for any problem.

Practical Machine Learning with Python will empower you to start solving your own problems with machine learning today!

What You'll Learn

Execute end-to-end machine learning projects and systems
Implement hands-on examples with industry standard, open source, robust machine learning tools and frameworks
Review case studies depicting applications of machine learning and deep learning on diverse domains and industriesApply a wide range of machine learning models including regression, classification, and clustering.Understand and apply the latest models and methodologies from deep learning including CNNs, RNNs, LSTMs and transfer learning.

Who This Book Is For
IT professionals, analysts, developers, data scientists, engineers, graduate students
©2018 GoogleSite Terms of ServicePrivacyDevelopersArtistsAbout Google|Location: United StatesLanguage: English (United States)
By purchasing this item, you are transacting with Google Payments and agreeing to the Google Payments Terms of Service and Privacy Notice.