Since its origins in the late 19th century, Jazz has continuously evolved, by integrating different styles and musical sources. All this has brought forth several sub-genres, from New Orleans jazz, through Swing, Bebop, Free Jazz, Fusion, Latin, and more! Innovation has also extended to instruments, and from its basic origins, it has added Vibraphones (Lionel Hampton), Electric Pianos (Chick Corea), and even less known instruments such as the Flugelhorn (Clark Terry).

Along these lines, when you consider Agile methodologies, you may well add “unofficial” tools or methods, and in this case we’ll go to the basics, and think about testing, in all its forms… and, by the way, were you aware that Testing is not an Agile requirement? The Agile Manifesto doesn’t include that — but it’s highly likely that you’ll be doing some kind of tests, in any case!

Considering that Agile methodologies are committed to a sustainable development process, with frequent deliveries and high standards of software quality, nobody would probably suggest doing away with testing, despite what the Manifesto may say or not say.

So, when you implement an agile methodology, why not consider adding “Agile Testing” to it? This practice involves a few basic principles, centered around the idea that testing should be an integral part of development:

  • Testing is not a separate phase, but rather something that’s done by agile teams on a continuous basis during development
  • Testing is not a gate (“accept/reject”) as in conventional methods, but a part of development
  • Testing is not a testers-only thing, but rather something that also involves analysts and developers

When you apply Agile Testing, the response time after delivering code becomes shorter, and allows you to quickly fix any bugs, getting a cleaner code base. Tests become part of development, and not a separate part, done by other people, after the code is supposedly ready: you may want to consider rigorously applying TDD or BDD, with automated unit testing and E2E (“end to end”) tests, possibly even using such tests for acceptance testing. As an extra advantage, you’ll get regression tests, which are a great help when  you are doing maintenance on old code, or when coders are doing refactorings.

Of course, achieving this level of testing may require some experimentation and training. Even if TDD and the like are well known, not all programmers have the same level of knowledge about writing tests, or the discipline to systematically apply the methodology, moreover in the face of short delivery times. (And, too, if the software design isn’t good enough, testing will become harder, leading to programmers avoiding tests, instead of fixing the design errors!) You may get by if tests are written immediately after software development (instead of before, as pure TDD requires) but you have to keep an eye on everybody, to avoid having tests written days or weeks afterwards, when they are of little use.

If you apply these suggestions correctly, you’ll be on your way to achieving Continuous Integration, a practice in which all developers integrate their code once or more times a day, having it verified by an automated build process and a testing suite. This integration guarantees that the system won’t ever get “broken”; in fact, if anybody submits code that breaks the system, their first priority would be to get the system back to the standard situation. As a benefit of this, you’ll do without the usual “integration period crisis”, common in conventional methods when all programmers add their code, and multiple conflicts arise. And, also, you’ll be able to implement some other ideas, as we’ll be seeing in the next note (#7) in this series; wait for it!

In conclusion, when you start implementing any agile methodology, think about adding Agile Testing to the mixture, getting all the team involved with tests and quality, and you’ll be sure to produce better code in shorter times — even if the addition of this new testing style becomes a bit difficult at the beginning!

PS. If you want to get a feel of Clark Terry’s flugelhorn, try out this selection of several pieces played by him, at different times of his life.

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>