- [Instructor] Automation helps us keep up.
Let's look at some good ways
to approach automation in agile development.
In traditional projects, we know
when automation is going to happen.
It's going to happen after a whole bunch of other things,
after everything is stable.
And the sole purpose of automation
is usually for regression testing.
In agile development,
automation is not only for regression testing.
It helps us get fast feedback on new features,
on changes, and it's not only functional testing,
we may be testing our infrastructure,
we may be using automation to help
with continuous delivery and appointments.
We need to automate when it makes sense,
and we're going to talk later
about what not to automate.
Automation is hard, right?
We need a diversity of skill sets on the team
to be able to solve problems.
So, having people with different backgrounds
collaborating on automation problems
help us tackle them.
For example, a tester and a developer
can pair to fix so-called flakey tests
that fail some of the time.
Maybe there is a real bug there that the tester can spot.
Or maybe there's just something wrong with the code design
that the developer can spot.
This has to be the priority for the whole team.
Also reach out to other teams,
if you're working at a larger company,
maybe you have a community practice or guild
or even just reach out to the community at large for help.
Share ideas on tools on how different people
have approached different automation obstacles.
Some things are definitely harder to automate than others.
For example, if your user interface
has a lot of business logic built in,
like a Javascript application,
that definitely poses automation challenges
that you don't have if you're testing a server side API,
so discuss up front,
as you're starting to talk about developing a new feature,
how can you design the code to facilitate the automation.
We need reliable, quick feedback loops
via our continuous integration,
and we need to automate not only tests,
but things like automating our deploys
to our test environments,
to our production environments.
There are so many aspects of our infrastructure
that we need to automate.
Let's talk about some things
that testers are particularly good at.
Our whole team works together,
but we each add value with our deep skills
out of our T-shaped skills.
And testers are really good at specifying tests
and asking questions.
When you think about hiring testers for your agile team,
do you really want to hire more coders,
or do you want to hire people with great testing skills.
Testers who use their critical thinking skills
to verify quality attributes beyond the functional,
such as a quadrant four test we discussed in lesson two,
that may be who you want on your team.
To testers and developers,
collaborating together is the ideal scenario on your team.
Leverage those different skill sets together
to solve problems.
Test code is equally or more valuable than production code,
in my opinion.
As Janet mentioned, it's living documentation.
It tell us how our code works now.
Developers who write production code
are also the ideal people to write test fixture code,
because they're really good at code design,
and testers are ideal for a specifying test,
because they're using their critical thinking skills
all the time,
analyzing risk, and knowing what to cover
with automated tests.
DevOps means a combination of developers,
testers, system administrators, database experts, and others
collaborating on our test environments,
our continuous integration,
and our deployment infrastructure.
So we need collaboration across all these skill sets.
But the key is in the collaboration.
For example, the programmers may think
to add code to the test script to tell it
when the page is loaded,
so that the test can proceed,
that way we avoid having any timeouts,
or false failures.
We need data experts, we need operations
and system administration experts,
as well as coding and testing experts.
We like generalizing specialists,
but we also like bringing in the skill set we need
and transferring those skills across the team.
Look for tools that promote collaboration,
and that allow people who do not write code
to participate in specifying automated tests.
Not only testers, but business analysts,
maybe product owners, maybe even designers.