Evolutionary Anatomy of Test Automation Code
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.
Outline/Structure of the Workshop
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
Video
Links
https://www.youtube.com/watch?v=5R1FHDuZhGs is an interview about the initial presentation on this topic at the Agile Alliance Technical Conference in Raleigh, NC in May 2016.
schedule Submitted 6 years ago
People who liked this proposal, also liked:
-
keyboard_arrow_down
Joshua Kerievsky - Modern Agile
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.
-
keyboard_arrow_down
Joshua Kerievsky - The Art of Refactoring
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.
-
keyboard_arrow_down
Alexandra West - A Visual Thinking Warmup
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.
-
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.
-
keyboard_arrow_down
Jez Humble - Why Scaling Agile Doesn't Work
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.
-
keyboard_arrow_down
David Laribee - Testing Strategy: New Model, Better Outcome
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.
-
keyboard_arrow_down
David Laribee - Container-driven Continuous Deployment with Docker, Git, and Jenkins
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.
-
keyboard_arrow_down
Diane Zajac / Doc Norton - Making Sense of Sense-Making
Diane ZajacCo-Founder and Agile EnablerOnBelayDoc NortonCo-Founder and Change CatalystOnBelayschedule 6 years ago
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.
-
keyboard_arrow_down
David Laribee - Full Stack, Hands-on TDD with JavaScript
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.
-
keyboard_arrow_down
David Laribee - Effecting Change as a Developer
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.
-
keyboard_arrow_down
Salah Elleithy - Can Design Thinking accelerate an Agile Transformation?
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.