Michael Feathers

Share

Founder & Director of R7K Research & Conveyance, author of Working Effectively with Legacy Code
 michaelfeathers.silvrback.com
 @mfeathers

Michael Feathers is the Founder and Director of R7K Research & Conveyance, a company specializing in software and organization design. Prior to forming R7K, Michael was the Chief Scientist of Obtiva and a consultant with Object Mentor International. Over the past 20 years he has consulted with hundreds of organizations, supporting them with general software design issues, process change and code revitalization. A frequent presenter at national and international conferences, Michael is also the author of the book Working Effectively with Legacy Code (Prentice Hall, 2004).

YOW! West 2016 Perth

Testing Patience

KEYNOTE – VIEW SLIDES WATCH VIDEO

Automated testing is widely considered a best practice. After considerable effort, the industry now agrees that unit testing, system testing, usability, and performance testing are essential in most serious development efforts, but we know that they are hard work. In this keynote, Michael Feathers will discuss challenges to the testing orthodoxy presented by micro-services, transient code, and functional programming, and reflect on where we might find ourselves in 10 years.


Working Effectively with Legacy Code

YOW! DEPTHFIRST WORKSHOP

Test Driven Development and Refactoring are powerful tools. With them, you can add new code to systems and make existing code more maintainable. However, refactoring code without having tests in place can be hazardous. This class presents a collection of dependency breaking and test writing techniques that can be used to get existing code safely under test for refactoring. These techniques can be used in conjunction with Test Driven Development to breathe new life into large existing code bases. This class is structured as a set of lectures, discussions, and hands-­on exercises.

WHAT YOU WILL LEARN

  • Understand what legacy code is
  • Understand how to break dependencies in legacy code
  • Learn a variety of techniques for breaking external dependencies
  • Learn a variety of techniques for breaking internal dependencies
  • Understand when to employ each of the techniques
  • Learn a variety of strategies for code refactoring
  • Learn how to identify change points
  • Learn how to find an inflection point
  • Understand the concept of test coverage for inflection points
  • Understand how to write effective tests for legacy code

BRIEF OUTLINE OF THE COURSE

  • Introduction / Testing as a Programmer’s tool
  • Seam Identification
  • Breaking Dependencies – Sensing and Separation
  • Breaking Hidden and Manifest Dependencies
  • Characterization Testing
  • Refactoring Toward Understandability
  • Strategies for Getting Large Methods under Test
  • Dealing with Deeply Nested Conditionals
  • Planning Large­Scale Refactoring and Technical Debt Reduction

Beyond Error Handling

YOW! DEPTHFIRST WORKSHOP

It would be easy to say that error handling is a black art in software development but that implies that there is some secret stash of knowledge out there. The truth is that we tend to think of error handling as a “lesser concern.” If we know how to throw and catch exceptions, we feel that we are okay. The fact of the matter is ­ we aren’t okay. Error handling in applications is often a symptom of incomplete design. This course will focus on techniques you can use to systematically increase the robustness of code by rooting out potential errors and designing them away.

WHAT YOU WILL LEARN

  • Survey of Error Handling Mechanisms
  • A Model for Robustness
  • Trusted Cores and Type Tunneling
  • Reducing Variation
  • Dealing with Concurrency and Distribution
  • Guidance for Exceptions/Null Objects/Options
  • Design Inversion

BRIEF OUTLINE OF THE COURSE

This course is for developers. There will be extensive coding exercises.The format of the course is lecture, with team exercises and discussion.