Many people agree that one important outcome of Behavior Driven Development is a set of regression tests to demonstrate the desired behavior and ensure that it is maintained over time. Then they often struggle to do so in a manner that remains maintainable as the system and the test code grows larger. Sometimes they even abandon their tests and start over, repeatedly.

In this session we'll examine the evolutionary history of an application and its test suite. We'll stop at various stages in its life to consider the choices we might make to address growing complexity.

We'll work using Cucumber-JVM and Java in order to be accessible to a large audience. You can apply these concepts in other languages and test frameworks. Rather than depending on having enough laptops set up, we'll use mob programming to enable everyone's participation.

If you'd prefer exploring on your own machine, bring your laptop loaded and ready to go.  Clone the code repository from https://github.com/gdinwiddie/EquineHoroscope to get the code and its history.  Unzip http://idiacomputing.com/pub/EquineHoroscopeJars.zip in the same directory for the dependencies.  (Download sample at https://leanpub.com/EvolutionaryAnatomy/ for even more detailed instructions.) I'll be using Eclipse, and the instructions are tuned for that, but you can use any Java IDE.

Bonus: Participants will receive a coupon for a free e-book on the material.

 
3 favorite thumb_down thumb_up 2 comments visibility_off  Remove from Watchlist visibility  Add to Watchlist
 

Outline/structure of the Session

This session is about the ways in which test automation needs change as the codebase and the tests gain size and complexity. It explores a codebase that's large enough to demonstrate some of the issues that arise beyond the typical tutorial. At the end, it shows that the Agile Testing Pyramid is a result of good test design decisions rather than a driver of decisions.

 - Starting
    - It starts with an Idea
    - From one brain to another
    - Example Mapping
    - Rules and Examples

 - Developing From Nothing
    - The Simplest Scenario
    - What have we accomplished?
    - Dropping down to “Programmer Tests”

 - External Dependencies
    - The Problem with External Dependencies
    - Isolating our Code
    - Breaking the Problem in Half
    - Remaining Risks

 - Simplifying Scenarios
    - Permutations tested sufficiently at a lower level
    - Cases covered by more advanced tests might be obsolete
    - Cases that better identify a problem might be worth keeping
    - Non-deterministic tests ‘might’ be useful

 - Refactoring Tests

 - Evolving Structure
    - Two Layer Tests
    - Cohesive Feature Files
    - Three Layer Tests
    - Utility classes
    - System adapters
    - Four Layer Tests

 - Writing For The Future
    - Readable Code
    - Naming Tests
    - Organizing Scenarios into Features

Learning Outcome

How to evolve the design of your test code
How and when to shift focus between business and programmer levels
Extracting "helper" code out of test scenarios
Giving meaningful shape to "helper" code
Articulating layers of test code

Target Audience

Programmers and Testers interested in test automation

schedule Submitted 7 months ago

Comments Subscribe to Comments

comment Comment on this Proposal
  • Joel Tosi
    By Joel Tosi  ~  7 months ago
    reply Reply

    Hi George,

       This looks like a great workshop, well thought out, and the approach (mob + independent if requested) seems like it would work well.

    Is it a safe assumption that you have delivered this workshop before or just the one time at the agile alliance tech conference?  Are there any constraints on the number of people to this session?

     

    Best,

    Joel

    • George Dinwiddie
      By George Dinwiddie  ~  7 months ago
      reply Reply

      Joel,

      I've delivered this only the one time at AATC2016, but am delivering the second revision next week at Agile Testing Days 2016 in Potsdam, Germany. At AATC, I'd intended to have participants work in pairs, but there weren't enough laptops in the room to do that. I ended up walking through the code with the room. That's why I'm switching to a mobbing approach.

      With a mobbing approach, I think the session could easily handle a hundred participants. There will be some diminishing returns, of course, as the room gets larger, but no hard limit. I've put in information on setting up for the session in the description for those who want to interact with the code on their own.


  • Liked Joshua Kerievsky
    keyboard_arrow_down

    Joshua Kerievsky - The Art of Refactoring

    Joshua Kerievsky
    Joshua Kerievsky
    CEO
    Industrial Logic Inc.
    schedule 7 months ago
    Sold Out!
    480 mins
    Workshop
    Intermediate

    Code that is difficult to understand, hard to modify and challenging to extend is hazardous to developers, users and organizations. Refactoring, or improving the design of existing code, is one of our greatest defenses against such code. Yet many programmers lack formal training in refactoring. Furthermore, management tends to lack knowledge about the value of refactoring. This one-day workshop is designed to address these needs. You’ll learn the art of refactoring safely, when, why and how to refactor hazardous code, strategies and tactics for refactoring, as well as refactoring to patterns. You’ll also learn how refactoring impacts business concerns and vice-versa. Come to this class prepared to code with a pair and a mob as we refactor example code and help you learn the art of refactoring.

  • Liked Woody Zuill
    keyboard_arrow_down

    Woody Zuill - Mob Programming: A Whole Team Approach

    45 mins
    Talk
    Intermediate

    Mob Programming is a development practice where the whole team works on the same thing, at the same time, in the same space, and on the same computer. It is a whole-team approach to doing all the work the team does including designing, coding, testing, and working with the customers, users and other stakeholders. This is an evolutionary step beyond pair programming and accentuates face-to-face communication, team alignment, collaboration, and self-organizing team concepts of the Agile approach to software development.

    Mob Programming can be a highly effective approach to software development. There are numerous teams doing Mob Programming all over the world, including distributed teams, and there has been a great deal of positive reports of success. Please join me as I share how the concept got started, the benefits, techniques we use, and some of the problems we've faced.

  • Liked Jez Humble
    keyboard_arrow_down

    Jez Humble - Why Scaling Agile Doesn't Work

    Jez Humble
    Jez Humble
    Owner
    Jez Humble & Associates LLC
    schedule 7 months ago
    Sold Out!
    45 mins
    Talk
    Executive

    There are now several frameworks designed to address the demand for “big agile.”

    In this talk Jez will explain the flaws in such frameworks, why they so often fail to produce the desired effects, and what we should do instead. He will also address some common organizational obstacles to moving fast at scale: governance, budgeting, and the project paradigm - and discuss how to address them. Warning: this talk will include liberal use of real, statistically sound data.

  • Alexandra West
    Alexandra West
    Creative Director
    Nerd/Noir
    schedule 7 months ago
    Sold Out!
    90 mins
    Workshop
    Beginner

    Do strong personalities dominate your development team? Are code reviews painful? Are you blindly following orders from a backlog, or are you learning from observation?

    Visual Thinking Strategies, or VTS, is a cross-disciplinary technique applicable to anyone working in a collaborative setting where observation is key. VTS develops critical thinking skills by viewing and discussing works of art in a group. It is backed by over 30 years of field research showing its effectiveness and accessibility. By allowing individuals to talk about art - without needing a background in the field - VTS advances skills you can use to create more relevant products and stronger teams: Observing, Brainstorming, Speculating, Reasoning with Evidence, Cultivating a Point of View, and Revision & Elaboration.

    During this interactive exercise, we’ll discuss selected works of art as a group. There are no right answers or group consensus being sought. We’re creating an environment and process for looking, thinking, reasoning and revision - skills that are mission-critical to anyone working in a software design or development role. After our group discussion, participants will learn the basics of image selection and facilitating VTS sessions within their own organizations. In addition to the above, we'll cover how VTS can help you and your team with the following: Comfort with Ambiguity, Openness to the Unfamiliar, Civil Debate, and Willingness to Participate in Group Thinking.

  • Liked David Laribee
    keyboard_arrow_down

    David Laribee - Testing Strategy: New Model, Better Outcome

    David Laribee
    David Laribee
    CEO
    Nerd/Noir LLC
    schedule 7 months ago
    Sold Out!
    45 mins
    Talk
    Beginner

    Pyramids? Quadrants? Cupcakes?! There are a wide array of models that describe approaches to test automation strategy and their possible positive (or negative) outcomes.

    In this talk, we’ll survey the landscape of testing models: models that range from technical to product to cultural mindsets, including best practices and anti-patterns. I’ll add detail and nuance to each of these models in the form of professional experience, real world example, and case study. 

    With a new lens, focusing on testing strategy as an act of curation, I'll share a new approach to evolving a testing strategy appropriate for your product development team's specific context.

  • Liked Joshua Kerievsky
    keyboard_arrow_down

    Joshua Kerievsky - Modern Agile

    Joshua Kerievsky
    Joshua Kerievsky
    CEO
    Industrial Logic Inc.
    schedule 8 months ago
    Sold Out!
    45 mins
    Keynote
    Executive

    Genuine agility is enormously effective in helping us achieve our dreams. The trouble is, Agile has grown into a complex tangle of roles and rituals, frameworks and tools, processes and certifications. We need a return to simplicity. Modern Agile is here to help.

    Designed for people in many domains (not just IT), Modern Agile is defined by four guiding principles:

    • Make People Awesome,
    • Make Safety a Prerequisite,
    • Experiment & Learn Rapidly and
    • Deliver Value Continuously.

    Understanding and deeply practicing these four principles will help you get better results faster.

    In this talk I’ll share how these four principles power world-famous companies and how they can help you work with greater speed, simplicity, safety and success.

  • Liked David Laribee
    keyboard_arrow_down

    David Laribee - Container-driven Continuous Deployment with Docker, Git, and Jenkins

    David Laribee
    David Laribee
    CEO
    Nerd/Noir LLC
    schedule 7 months ago
    Sold Out!
    480 mins
    Workshop
    Intermediate

    In the early 2000s, eXtreme Programming (XP) introduced agility to software engineers. Contemporary cultural and technical innovations - container technology, distributed version control systems, the proliferation of free and open source software, and the DevOps movement - have significantly expanded our possibilities.

    In this one day, hands-on workshop, we’ll build a modern continuous deployment pipeline based on Git, Jenkins, and Docker. Starting with continuous integration, we’ll practice Git workflows enabling parallel development with pull requests and explicit dependency management through the use of forked repositories. We’ll then extend the ecosystem to support ad-hoc testing environments, multi-versioned deployments, and build promotion. We’ll survey tools and techniques for production deployments touching on Docker Swarm, Google Kubernetes, ChatOps, and emerging tools used in serverless architectures such as Amazon Lambda.

    While technologies change, values and principles continue to guide our choices. We’ll end with reflection and a guided discussion on how core XP values - simplicity, feedback, communication, courage - can serve as a compass for environmental and workflow decisions that impact our customers and teammates.

  • Liked Diane Zajac-Woodie
    keyboard_arrow_down

    Diane Zajac-Woodie - Making Sense of Sense-Making

    90 mins
    Workshop
    Intermediate

    The world as we know it is growing more complex. As we automate away those things that can be easily repeated, we leave ourselves with ever more challenging work. The way we’ve worked in the past won’t necessarily work for today’s problems… or will it? Join Diane and Doc as they explore dimensions of complexity in software development and look at how teams and leaders might adjust their behaviors (and the software they create) based on the complexity of the problem at hand.

    This hands-on, interactive workshop will provide a practical introduction to Cynefin (a sense-making framework for complexity) and show how it applies to the work we do every day as creators of software. You’ll map your own work to Cynefin and learn about applicable management styles and optimal team interactions for each of the Cynefin contexts.

  • Liked David Laribee
    keyboard_arrow_down

    David Laribee - Full Stack, Hands-on TDD with JavaScript

    David Laribee
    David Laribee
    CEO
    Nerd/Noir LLC
    schedule 7 months ago
    Sold Out!
    960 mins
    Workshop
    Intermediate

    This workshop readies developers for success with Test-Driven Development. Together we’ll take small steps toward working a full, double loop TDD workflow. Over the course of two days attendees gain comfort with the TDD workflow, integrating it with other important practices such as pair programming, source control, emergent design, domain-driven design and lightweight modeling.

    It’s two solid days of intense work — over 60% hands-on, iterative exercises. The rest of the time is a mix of fast, dense lightning talks, case study reviews, chalk-talks and facilitated group discussions.

  • Liked David Laribee
    keyboard_arrow_down

    David Laribee - Effecting Change as a Developer

    David Laribee
    David Laribee
    CEO
    Nerd/Noir LLC
    schedule 7 months ago
    Sold Out!
    45 mins
    Talk
    Beginner

    As an independent agile coach, I encounter a lot of developers frustrated by their home team culture. The same questions come up time and again: "how do I get my team to adopt XYZ?" This question assumes a solution instead of framing a problem and involving a group in conceiving and developing an answer. With a little conscious work, we can hone our skills as influencers and stop operating from unconscious, unexamined motivations. When we reframe effecting change in this way, our efficacy improves dramatically.

    In this talk, I'll share a mindset for improving effecting change through ethical influence and group involvement. I'll end by sharing a toolbox of simple change tools you can apply to your teams the very next day.

  • Liked Salah Elleithy
    keyboard_arrow_down

    Salah Elleithy - Can Design Thinking accelerate an Agile Transformation?

    Salah Elleithy
    Salah Elleithy
    Agile Coach
    Verizon Enterprise
    schedule 7 months ago
    Sold Out!
    45 mins
    Talk
    Intermediate

    “Give a man a fish and you feed him for a day; teach a man to fish and you feed him for a lifetime.” ~Proverb

    You might have heard of IDEO. IDEO is known as a pioneer of human-centered design or putting people at the center of their work. This approach has come to be known as Design Thinking. Design Thinking in a nutshell is about empathy, experimentation and learning fast.

    When we think of an agile transformation, we don’t necessarily think of human-centered design. Most agile transformation I have seen begins with an enthusiastic leader (most likely in Technology) who is trying to change the culture and shift the mindset to improve product delivery and time to market. In the quest to do this, the leader might mandate certain practices for the organization to start doing. This can cause a lot of pain and heartache in the process and usually lead to mere results and disengagement.

    What if there was a way to unlock creativity and critical thinking across the organization? This is where design thinking can help in accelerating an agile transformation.