Category: Learning

Testing And The Two Values of Software

The Two Values of Software

Sure enough: If your team’s software fails to provide value now (or in the near future), something’s gone badly wrong. You don’t like your software project to end up similar to this, right?

Smoking Remainders
Smoking remainders of a ‘Biikebrennen’ — don’t let your project end like this.

As Alistair Cockburn explained in “Agile Software Development” software development can be seen as a game played in rounds — and most teams prefer to stay in the game for many rounds.

To me it’s interesting (and a bit worrying) that most of the testing techniques and approaches are focussed on whether the current version of our software…

  1. is in fact the right software and
  2. if it works correctly.

In other words, testing focusses on validation and verification, it concentrates on a relatively short period of time: the next release.

Now, Uncle Bob Martin presented the idea of the primary and secondary value of software in episode 9 (‘The Single Responsibility Principle’) of his CleanCoders video series. He presents the secondary value first (which most people believe to be more important): ‘The secondary value of software is its behavior.’ He also explains the primary, more important value as: ‘The ability of software to tolerate and facilitate such ongoing change is the primary value of software. The primary value of software is that it’s soft.’

In Alistair Cockburn’s description the order is reversed (see Agile Software Development, 2nd edition p. 37 ff), but in my opinion the order isn’t always that important: I am worried that testing doesn’t consider one of the two values of software.

To my experience, essentially all projects focus on current or near-future behaviour of software, but rarely actively work to keep the software ready to deal with future requirements. I understand that YAGNI (You ain’t gonna need it) may play a role here. But mind you: YAGNI mostly applies to actually implemented features that are not needed. It may also be valid in order to prevent going overboard with too much abstraction and flexibility. In the end, you always need to find a balance between following and ignoring the SOLID principles (a good part of the Clean Coders videos covers this in detail).

Concerning the 1st value of software (according to Uncle Bob Martin), I’m convinced that testing needs to answer questions like this:

  • Is “the ability of software to tolerate and facilitate such ongoing change” a job purely for programmers?
  • Can software testers contribute to the primary value? Should they?
    • If yes, is this part of the job or should we keep out of this business?
    • How can we as testers contribute?
  • Can other disciplines help?

What do you think? Is this topic important for testing? Should we treat it in the way Michael Bolton advises testers with respect to “Quality Assurance Business” (spoiler alert/hint: He advises us to stay out of it)?

I personally think testers should get involved: A tester is somebody who knows that things can be different, as Jerry Weinberg says.

Also, I definitely want my clients, as well as their clients, to be happy with the software I help to develop, not only today, but also in the future, even when most original developers of a software system have left the team or company.

When your project (or product life cycle) comes to an end it should stay in your memory not like the smoking remainders of a fire, but with the bright colours of a great sunset.

Bright Sunset
Bright Sunset

Tools for Testing — 1

I recently took the excellent Black Box Software Testing Foundation Course offered by the AST (Association for Software Testing).

The course came with a lot of extra material in addition to the primary deck of slides & videos: Articles published by a number of people, blog posts, exam guides. I used Papers, which helps to organise, well, papers. It manages meta information about the papers, such as publishing date, title and authors etc. and allows highlighting text, adding notes and more. I also liked using the iPad version of the program (there’s a way to sync your library on your computer and iPad), because I don’t always work at my desk.

The other tool I found useful is GraphViz, an extremely powerful program to describe and draw graphs. The graphs are described in a text file (there’s a complete language that describes graphs, but for many purposes you’ll only need a small set).

digraph example_path {
graph [ dpi = 150 ];
 rankdir = LR;
 fontname="DejaVu Sans";
 fontsize = 20;
 node[shape=circle,fontname="DejaVu Sans"];

 1 -> 2 -> 5 -> 6 -> 7;
 2 -> 4 -> 5;
 2 -> 3 -> 4;
 3 -> 6;
 6 -> 2;
 label = "\nBranches & Loops";
}

GraphViz comes with a command line tool dot. If in the same directory as the file that holds the description above, one can use

dot -Tpng file_name_here -O

to generate a 150 dpi PNG file, which looks like this:

An Example Path
An Example Path

GraphViz can create much more complex images (see the GraphViz Gallery for examples), however I find just a short text file and a simple terminal command covers a lot of ground and there’s no need to create ‘hand made’ images anymore.

Both programs Papers and GraphViz are available for Windows, OX S and the iPad/iPhone (GraphViz is called Instaviz on the iOS devices).

What non-typical tools do you use in testing?

Word of The Year 2013

The general idea of the “word of the year” isn’t particularly new: It seems to be popular in many languages and countries, according to the English Wikipedia, the German Wikipedia entry (other languages at the time of this writing are: Česky, Dansk, Esperanto, Français and Nederlands).

However, I got the idea to pick a personal word of the year from my wife. This idea goes at least back to a blog post by Ali Edwards. The notion (as I understand it) is to pick one word to guide you thought that year. To me this is an interesting change to the more traditional new years resolutions, since it conveys the idea of having a guidance, or vision rather than setting (usually) unreachable high aims.

It seems to me that a personal word of the year helps to move into a chosen direction. In a way it’s very much like a good vision for Scrum (and other!) software development teams — vision condensed into a single word. For all your small and bigger assignments you can quickly check, if what you’re attempting matches the idea of your chosen word, and then consciously decide if or how to proceed.

My word of the year 2013 is:

Explore
My word of the year 2013: Explore

Do you pick a word of the year for 2013? Which one?

Uses of Twitter

This post appeared fist at http://zenandtheartofautomatedtesting.eu/ on 18. Feb. 2012.
Since I’ll take that site down, I relocate it.

Uses of Twitter

First of all: Why discuss ways to use Twitter as a tester?

Well, almost all software is used in ways not anticipated by its creators. There are a lot of possibilities for a user to interact with the software — not caring about the system creators intentions.

And this is something a tester should practice: Find new ways to use given things.

I learned about a few more uses of Twitter at the conference and thus suggested the topic “How do you use Twitter (or other social networks)” for the Open Space session at the Agile Testing Days 2011 in Potsdam.

Thankfully enough people were interested in this, so here’s the result of this session in just one shot:

open_space_photo

In the following sections I’ll comment on the items in the same order as we collected them on the flip chart.

Uses of Twitter

  1. Collect Haikus

    For a start I put up this one, still impressed by Liz Keogh’s Keynote about Hypnosis & Haikus.

    To generalise, I think Twitter can be used to share & collect about everything — given an account or hash tag to group it in some way.

  2. “Learn stuff” & “Solve problems”

    This one boils down to ask a question using relevant hash tags (e.g. #Ruby, #testing, #quality) and getting help quickly. At other times you get very interesting input you didn’t knew you needed before actually getting it.

  3. “Stay connected to people”

    In my opinion staying connected to people I met/meet at conferences (or local gatherings) is extremely valuable. According to Neal Ford’s article Twitter Matters: Keeping Up with Weak Social Links, closely related people (family, friends or colleagues we see every day) often have the same information sources as we do, so their information isn’t new to us, while people we don’t know at all, tend not to share enough common interests, so their information isn’t as relevant to us. However, people we don’t meet too often (say once a year) have the most relevant and new (for us) information to share.

  4. “Virtually attend conferences”

    I haven’t done this (yet), but I imagine it to be fun. One of these conferences is the “ALE Bathtub Conf”, which you can attend in the bathtub, because no one would notice. See Bathtub Conferences

  5. “Mine opinions about products”

    This is an interesting one I hadn’t thought of before, but was immediately obvious when explained: Search tweets about a product and attributes people typically use when tweeting about it: #great, #FTW, #fantastic, but also #FAIL, #WTF, #isitjustme.

  6. “Inspiration”

    Read what others think about a topic and follow shared links… This can yield entirely unexpected results/connections between topics.

  7. “Making friends”

    Sometimes the Good Thing ‘just’ happens. An example Lisa Crispin shared with us: She tweeted about being stuck at home without a plan for the weekend (since the original plan to go to a conference in London fell victim to the Ejafjällajökull eruption in 2010). She read a tweet by someone from England who could not fly home due to the volcano, tweeting from a bookstore in Denver, CO. Result: They met, did some sightseeing and became friends.

  8. “Production monitoring”

    Someone mentioned they’d monitor performance of their web application, by monitoring the tweet rate about certain words (I assume company-name, #slow, #down could be a start…) The more tweets (per time unit) they’d see, the slower the web application would perform.

    To me, that’s fascinating, even though it’s more a (very good) heuristic, rather than a definite measure: Your users might come from a single time zone, so a performance drop during the night isn’t noticed immediately, or there is a problem — but no increase in the number of tweets because of another significant issue, e.g. a network outage in the wider area.

  9. “Get customer/tech support”

    Some companies are very good at listening to tweets about their product, and answer with helpful tips and/or explanations.

  10. “Support for personal/professional growth”

    This seems to be similar to “Learn stuff” & “Solve problems”.

  11. “Find a new job/project”

    This happened to me: After the end of a recent project I tweeted about my availability, got contacted, had a short interview and found a great new project. Excellent!

  12. “Overload of tweets”

    Obviously this entry isn’t a use of twitter, but rather a (possible) problem: There are only so many tweets you can read per day. Tweeting about almost everything in your life might result in people unfollowing you.

  13. “Get to know people”

    By following people, you get to know (a certain aspect of) them: How/What they think about a topic, how they react, whether they’re looking for someone to join for dinner at a conference.

  14. “Twitter: For friends or colleagues”

    We also briefly discussed the use of different accounts for different purposes or groups of people: friends, colleagues, profession, (programming) languages… Depending on the number of tweets about a certain topic it can be worthwhile to create an account for it: This way you can filter out (or focus on) this particular topic.

  15. “Entaggle”

    This last but not least entry is about the “other social networks” part of the sessions title. Entaggle was created by Elizabeth Hendrickson after a discussion about the value and sense (or lack thereof) of certificates for developers in general and testers in particular. On Entaggle you’d create a profile, be tagged and tag others using tags you (or others) create. That way a network of trust/respect is created.

    The reasoning behind this: People seem to trust the opinion of a real (and probably well-known) person more than an anonymous certification handed out by some institution or company. Opinions of real people matter, especially if you can get in touch with these people and ask for more information (or reasons for a tag they used).

If you’re using Twitter in yet another way, I’d like to hear about it.

At the Agile Testing Days 2010: Alternatives to Certifications / Part 1

This post appeared fist at http://zenandtheartofautomatedtesting.eu/ on 10. Oct. 2010.
Since I’ll take down that site, the article is relocated.

At the Agile Testing Days: Alternatives to Certifications

A session of the Open Space Day (facilitated by Brett L. Schuchert) at the Agile Testing Days dealt with alternatives to certifications. Elisabeth Hendrickson tweeted a link to the summary of this session already.

Apart from answering the question “What is the value of certifications?” and “Do we need something other than certificated at all?” (neither of which I’ll discuss here), there’s one important question: What are ways to demonstrate your testing knowledge other than certificates?

That’s what this article is about.

I’ll elaborate on some of the alternatives we discussed. Some of them here were brought up by me, others were not. So, if you disagree on a topic you’ve brought up, please let me know1.

Novice – Apprentice – Journeyman – Master

I like the idea of learning from practitioners who have a better understanding and deeper experience in the field I like to learn about. This is a central idea of Software Craftmanship. The idea here is that at each stage you’d learn (mostly) from others one stage ahead of you. This enhances almost everyone in learning by teaching, certainly a very powerful way to learn and internalise material you’ve just learned yourself.

Find someone who’s willing to help you to learn about the topic you chose and who’s experienced.

Note, this is not as much about finding someone to actually teach you2, but help you teach yourself.

Participation in open source projects (as testers)

There are lots of open source projects out there. Whether it’s automated regression checks (or tests, in case you don’t follow Michael Bolton’s terminology) exhaustive exploratory testing or other ways of testing (or checking): You’re probably using some open source software already, and improving this software by providing your testing feedback is a Good Thing.

You help to develop software you’re using, making your own life better3 and you demonstrate your testing practice.

Twitter

By following other testers on Twitter (and may be the #testing hashtag, too) and joining the discussion is another way. Even by ‘just’ following others and reading the linked to blog articles alone I learned a lot. However, joining the discussion at your pace4 will give result in a significantly richer learning experience.


1 Of course I wouldn’t mind hearing about your agreement as well. And in case you do agree; I’d like to hear from you, too.

2 Experienced practitioners happen to be usually rather busy. However they’re also happy to help you to help yourself.

3 Also known as “Eating your own dog food”

4 Some tweet at a remarkably high frequency, that’s not easy to follow at times. Don’t panic.

Navigation

%d bloggers like this: