How we did it:
For any feedback, any questions, any notes or just for chat - feel free to follow us on social networks
Michael C. Feathers
The average book on Agile software development describes a fairyland of greenfield projects, with wall-to-wall tests that run after every few edits, and clean & simple source code.
The average software project, in our industry, was written under some aspect of code-and-fix, and without automated unit tests. And we can't just throw this code away; it represents a significant effort debugging and maintaining. It contains many latent requirements decisions. Just as Agile processes are incremental, Agile adoption must be incremental too. No more throwing away code just because it looked at us funny.
Mike begins his book with a very diplomatic definition of "Legacy". I'l skip ahead to the undiplomatic version: Legacy code is code without unit tests.
Before cleaning that code up, and before adding new features and removing bugs, such code must be de-legacified. It needs unit tests.
To add unit tests, you must change the code. To change the code, you need unit tests to show how safe your change was.
The core of the book is a cookbook of recipes to conduct various careful attacks. Each presents a particular problem, and a relatively safe way to migrate the code towards tests.
Code undergoing this migration will begin to experience the benefits of unit tests, and these benefits will incrementally make new tests easier to write. These efforts will make aspects of a legacy codebase easy to change.
It's an unfortunate commentary on the state of our programming industry how much we need this book.
Martin Fowler, Kent Beck
Users can dramatically improve the design, performance, and manageability of object-oriented code without altering its interfaces or behavior. "Refactoring" shows users exactly how to spot the best opportunities for refactoring and exactly how to do it, step by step.
David Chelimsky, Dave Astels
Behaviour Driven Development is about writing software that matters. It is an approach to agile software development that takes cues from Test Driven Development, Domain Driven Design, and Acceptance Test Driven Planning. RSpec and Cucumber are the leading Behaviour Driven Development tools in Ruby. RSpec supports Test Driven Development in Ruby through the BDD lens, keeping your focus on design and documentation while also supporting thorough testing and quick fault isolation. Cucumber, RSpec's steadfast companion, supports Acceptance Test Driven Planning with business-facing, executable requirements documentation that helps to ensure that you are writing relevant software targeted at real business needs. The RSpec Book will introduce you to RSpec, Cucumber, and a number of other tools that make up the Ruby BDD family. Replete with tutorials and practical examples, the RSpec Book will help you get your BDD on, taking you from executable requirements to working software that is clean, well tested, well documented, flexible and highly maintainable.
Take Ruby development to the next level: leverage Ruby's full power to write more maintainable, manageable, and pleasing applications * *Master object-oriented Ruby techniques for building applications that are as easy to maintain and upgrade as they were to write! *Discover concrete solutions for common issues associated with poorly designed, hard-to-change Ruby applications. *Solves painful problems now facing many of the world's 1+ million Ruby developers, including programmers at all levels of experience. Years after the initial release of Ruby on Rails, the chickens are coming home to roost. Suddenly, anyone could write a web application -- and it seems like everyone did. The web is now awash in Ruby applications that were easy to write but are now virtually impossible to change, extend, or grow. This book solves that problem by teaching developers real-world object oriented design techniques specifically focused on Ruby. Writing for more than 1,000,000 Ruby developers at all levels of experience, Sandi Metz shares knowledge and concrete solutions for creating more extensible, more maintainable applications - and for fixing many of the poorly designed applications they must now manage. The first book to focus squarely on object-oriented Ruby application design, Practical Object Oriented Design in Ruby will guide developers to superior outcomes, even if their previous experience has been strictly limited to 'procedural' techniques. Metz distills a lifetime of conversations about object-oriented design and many years of whiteboard drawings into a set of specific Ruby practices and patterns that lead to more manageable and pleasing code. Novice Ruby programmers will find specific 'rules to live by'; intermediate Ruby programmers will find valuable principles they can flexibly interpret and apply; and advanced Ruby programmers will find a common language they can use to lead development and guide their colleagues.
Lisa Crispin, Janet Gregory
Get past the myths of testing in agile environments - and implement agile testing the RIGHT way. * * For everyone concerned with agile testing: developers, testers, managers, customers, and other stakeholders. * Covers every key issue: Values, practices, organizational and cultural challenges, collaboration, metrics, infrastructure, documentation, tools, and more. * By two of the world's most experienced agile testing practitioners and consultants. Software testing has always been crucial, but it may be even more crucial in agile environments that rely heavily on repeated iterations of software capable of passing tests. There are, however, many myths associated with testing in agile environments. This book helps agile team members overcome those myths -- and implement testing that truly maximizes software quality and value. Long-time agile testers Lisa Crispin and Janet Gregory offer powerful insights for three large, diverse groups of readers: experienced testers who are new to agile; members of newly-created agile teams who aren't sure how to perform testing or work with testers; and test/QA managers whose development teams are implementing agile. Readers will learn specific agile testing practices and techniques that can mean the difference between success and failure; discover how to transition 'traditional' test teams to agile; and learn how to integrate testers smoothly into agile teams. Drawing on extensive experience, the authors illuminate topics ranging from culture to test planning to automated tools. They cover every form of testing: business-facing tests, technology-facing tests, exploratory tests, context-driven and scenario tests, load, stability, and endurance tests, and more. Using this book's techniques, readers can improve the effectiveness and reduce the risks of any agile project or initiative.
Scott Millett, Jerrel Blankenship, Matthew Bussa
Pro Agile .NET Development with SCRUM guides you through a real-world ASP.NET project and shows how agile methodology is put into practice. There is plenty of literature on the theory behind agile methodologies, but no book on the market takes the concepts of agile practices and applies these in a practical manner to an end-to-end ASP.NET project, especially the estimating, requirements and management aspects of a project. Pro Agile .NET Development with SCRUM takes you through the initial stages of a project—gathering requirements and setting up an environment—through to the development and deployment stages using an agile iterative approach: namely, Scrum. In the book, you'll focus on delivering an enterprise-level ASP.NET project. Each chapter is in iterations or sprints, putting into practice the features of agile—user stories, test-driven development (TDD), behavior-driven development (BDD), continuous integration, user acceptance testing, extreme programming, Scrum, design patterns and principles, inside-out development, lean developent, KanBan boards, and more. An appendix features code katas designed for the reader to get up-to-speed with some of the features of extreme programming, while also showcasing popular open-source frameworks to assist in automated testing and mocking. In addition, popular open-source architectural foundation projects such as S#arp and NCommons are demonstrated to allow you to base future projects on these frameworks, which already have many best-practice design patterns and principles built in. What you’ll learn Gain practical knowledge on employing the Scrum project methodology using a real-world ASP.NET project See how extreme programming features in real world .NET projects Experience best practice-infused open-source frameworks that can be used to form the foundations of agile projects such as S#arp and NCommons Learn best-practice tools for user interface and user acceptance testing, such as Selenium and Fitnesse Discover details on how to capture requirements and drive development using user stories Learn how to estimate and plan agile projects and work with business stakeholders through a practical example Uncover tips for developing using the outside-in, TDD and BDD methodologies Gain information on tracking the progress of a project through burn down charts, iterations and retrospectives Who this book is for Experienced .NET developers who are looking to see how the Scrum agile project methodology and extreme programming features are employed in a real-world .NET application. Table of Contents The Art of Agile Development Managing Agile Projects with SCRUM Extreme Programming Sprint 0: Generating the Product Backlog Sprint 1: Starting a Game Sprint 2: Playing a Basic Game Sprint 3: Changing the Game Sprint 4: The Release Code Review What's Ahead for You and Scrum? Appendix A: TDD Primer with NUnit Appendix B: BDD Primer with SpecFlow Appendix C: Mocking with Moq Appendix D: Managing a Product Backlog with Pivotal Tracker Appendix E: Web Testing with WaitiN Appendix F: Source Control with SVN Appendix G: Continuous Integration wih Cruise Control .NET