Agile (319)


What did they mean?

  • October 2, 2016
  • Agile, BDD, ...

iknowwhatyoumean

Let’s take the user story from previous post, and start with the granularity (i.e. the scenario steps). While specifying steps is an even better guide for developers to follow in their implementation, it’s important to remember anything we say can be misinterpreted!

 

Feature: As a online shopper,
I want to be able to add multiple items to my shopping cart,
in order to progress through payment process quickly

Scenario: Add single item to shopping cart
Scenario: Add multiple items to shopping cart
Scenario: Add multiple of same item to shopping cart
Scenario: Remove items from shopping cart




What do you mean?

  • October 2, 2016
  • Agile, BDD, ...

After working on several BDD (Behaviour Driven Development) projects, I was struck firstly by what a great development approach it is, if only from a test engineering viewpoint. While on the tech side, BDD is more clearly understood, clients may find the style of writing requirement commonly expected with this approach, more involved than they are used to.

There is still value in defining user stories only, if you are happy with trusting team to take care of implementation, and ask relevant questions. But perhaps you want to be more involved … So here is a guide aimed largely at Product Owners, on how to write requirements for not only BDD projects, but as alternative style to more traditional Agile user stories.




Test engineering

  • May 25, 2016
  • Agile

OK, let’s cut to the chase. Testers are part of your team, not an anonymised bolt-on. This was an attitude prevalent 20 years ago, but at least then, testers were taken seriously. What we have now is too many making evaluations of what testing is and where it should fit in. Testing is a free-for-all area that many self-appointed experts reside in. And the more testing becomes test engineering, the more foolish those people look.

Who (as a tester) has not heard the response to you job “what, you just sit around surfing website all day?”. Well, these people are not worth correcting, but it illustrates a point – even with 20 years QA experience, it amazes me how many feel need to tell me what I do, and why I do it. My twitter feed gauge my annoyance levels, full as it is, of strongly-worded diatribes on this subject. It is bad enough that in contracting, I am generally following in wake of amateur balls-ups. And balls-ups that went on for too long, as no-one took interest or monitoring the ongoing development of tests.

Part of problem is that testing world is full of enthusiasm, but few with real test engineering skills. Want to impress your average company? Create hundreds of brittle UI automated tests, built on latest “funky framework”, then bask in the multiple “oooooooh!”, then time exit before anyone notices that:

  • No-one is using the test framework repo, apart from the tester.
  • No-one else is checking out the repo.
  • The tester becomes “Manuel Jenkins”, as the test framework only ever running on their pc.
  • The hundreds of tests are pointless, useless and throwaway

Then I come in to mop up the mess, and deal with bad perceptions/understanding about test engineering. There is a problem around the decision-making process, usually made by project members who view a project like this:

Airplane

Generally, process and products are selected based on personal taste or even fashion (the worst). These are always sold with over-optimistic promises of improving things, simply by their existence on project. These helpful individuals may not even be connected with tech – maybe they just enjoyed a pretentious demonstration at a conference. And react like they have never heard the time-honoured sales line “All you problems are solved with this product!”. The people that decide test framework are the team, because they are the saps that have to use and maintain it.

Though a broad statement, test engineering is very effective bridge between development and devops. Yes, developers can factor in test framework maintenance and coding tests, into their workload. But why? It’s far better to have a well-maintained test framework they can use as necessary, rather than being concerned with it’s mechanics. Calling test engineering “developing in test” provided more confusion, as many role descriptions were essentially for a developer who was also prepared to write acceptance tests. By that, I mean tests that directly map to requirements, not unit tests.

If the test engineer is charged with creating and maintaining UI and API tests, this can save the developers a lot of unit test work, and if test framework set running on the build server, an excellent sanity check for every build. And based of real-life scenarios. The common whine when trying to get is that it gets in the way. Really? A failing test is an obstruction, and should be (whatever the reason it fails). Acceptance tests should be part of the build pipeline. Tests don’t obstruct, they inform.

I am generally following in wake of amateur balls-ups. And balls-ups that went on for too long, as noone took interest or monitoring the ongoing development of tests. Want to impress your average company? Create hundreds of brittle UI automated tests, bask on the multiple “oooooooh!”, then time exit before anyone notices that:

  • No-one is using the test framework repo, apart from the tester.
  • No-one else is checking out the repo.
  • The tester becomes “Manuel Jenkins”, as the test framework only ever running on their pc.
  • The hundreds of tests are pointless, useless and throwaway

Then I come in to mop up the mess, and deal with bad perceptions/understanding about test engineering. There is a problem around the decision-making process, usually made by project members who view a project like this:

Airplane

So process and products are selected based on personal taste, fashion (the worst). These are always sold with over-optimistic promises of improving things, simply by their existence on project.

Though a broad statement, test engineering is very effective bridge between development and devops. Yes, developers can factor in test framework maintenance and coding tests, into their workload. But why? It’s far wetter to have a well-maintained test framework they can use as necessary, rather than being concerned with it’s mechanics. Calling test engineering “developing in test” provided more confusion, as many role descriptions were essentially for a developer who was also prepared to write acceptance tests. By that, I mean tests that directly map to requirements, not unit tests.

If the test engineer is charged with creating and maintaining UI and API tests, this can save the developers a lot of unit test work, and if test framework set running on the build server, an excellent sanity check for every build. And based of real-life scenarios. The common whine when trying to get is that it gets in the way. Really? A failing test is an obstruction, and should be (whatever the reason it fails). Acceptance tests should be part of the build pipeline. Tests don’t obstruct, they inform.




What is the point of test automation?

  • February 23, 2016
  • Agile

Easily very little.  Whether it the most heinous and popular of crimes, the throwaway UI tests or (closely followed by) tests with test data and/or inter-test dependencies.  But even if all this is perfect, if it’s running on one machine, for one person, it’s just a good college project.  Or might as well be, for all the real use you get out of it.

The first step, after avoiding the perils of what’s outlined above, is to make it bigger. Drive tests using a specification language (i.e. natural language), but don’t forget to approach that as code, or too easily becomes a tangled library of accidental repetition.  The advantage here is quickly identifying common steps.  Everyone thinks their website UX is unique, but there is a lot that is common. Generating a good html report (with screenshots of failures), and a junit one for easy processing on systems such as Travis or Jenkins. Which brings me to important point – running tests on CI.

Integrating acceptance tests (which I what I generally call tester-generated automated tests).  It’s imperative to get maximum benefit from test automation.  The advantage of this approach, is it keeps tests lean and relevant and unique.  With no constrictions, you will no doubt have experienced testers or consultancies, who can generate hundreds of automated tests that provide “wow” factor, simply by quantity.  But run those same tests again and again, and the cracks will soon start to show.  Data dependencies, too many tests need updating with a code change, dependencies on other tests that start a cascade fail.  This is programming, remember, and same risks apply 🙂

While UI and API acceptance testing doesn’t replace unit testing, developers find the test framework useful in developing reusable tests (especially flexible API ones). Keeping in mind what is useful, and to who, help focus the mind.  My mind is very prone to veering off rapidly on tangents, so this was simple part of the way I learnt to avoid scatterbrained development.

Above all don’t play at it, do it. I have little patience for wasting time developing acceptance test frameworks that are unused.  Too many just “want it”, but don’t actually understand why, they just know it’s a “good thing”.  Which is why so many go through some consultancies pain before realising it can be a one-person job, well at least to kick-start it.

Manual tester are fast becoming a role that has become redundant in many ways, but others do not want to take it on. Hello to some PO’s and Stakeholders out there 😉 However, test frameworks and automation requires programming skills.  The best way to think about it is that’s it’s another developer on the team. (or more relevant test frameworks) can help bridge the old requirements to code gap.




How I stopped hating QA

  • September 25, 2015
  • Agile, BDD, ...

Guerilla test management – it became my accidental niche area.  From 2000-2011, I was working in primarily creative, publishing, mobile and media companies in QA/Test Management capacity – usually hands-on (asides pure strategy/management based contracts).  Either welcome or not, I was hired for my pragmatism and multi-disciplined QA skills.  I have built test environments on the sly (not kidding), experienced sabotage, back-stabbing, blame-game defences.  I have managed distributed teams, and have been a lone QA  on multiple projects.  I often had to learn new things, at speed.  What never changes (rarely) is my good-natured optimism, and refusal to allow others negativity to affect me.  But, a few years ago, I had grown tired of my management direction and tired of unhealthy chaotic projects I was hired to improve QA within.  On a personal level, the work felt vague with no focus, and increasing dissatisfaction.