Archive for 2009

experiencing a bug as an end user

It’s been a long time since a software bug agitated me – one that I was hit with as a user not a tester. But I’ve had one I’ve been dealing with this past week.

In some ways it’s been interesting to feel like a user. To get whacked unexpectedly with a software bug that impacted my day and took time to resolve. Mostly it’s left me agitated and thinking less of the company.

Blackberry released an upgrade to their software and I took the release. I didn’t notice straightaway that the update stomped out my Google sync settings. Wiped out Google sync entirely, I had to reinstall. And impacted my Gmail, calendar and maps.

I keep my calendar in Google. My calendar is probably the most important, certainly most frequently used software I depend on. It took some time and effort to get things back on track.

I haven’t stopped asking myself – really? RIM didn’t think to test a cell phone software upgrade with Google calendar?

I could perhaps understand if it was some small unheard of company calendar software – but Google calendar. Really?

So a graceful solution might have been a warning message to users – hey, heads up any software you’re using that isn’t ours could be impacted – especially contact and calendar information.

A more graceful solution would be for one large vendor (RIM) to acknowledge what other software their user base is likely to have installed and done some testing.

Once I got through the calendar sync issues, I encountered issues with syncing my gmail. And previous locations were wiped off Google maps too. Obviously I’m a heavy Google user. And obviously RIM doesn’t feel the need to test their software with Google software.

One thing that I expect as a user is for software to play reasonably well with other software. RIM not working with Google software? An upgrade wiping out calendar, Gmail, maps and sync settings is not an upgrade, it’s an inconvenience.

I won’t want to upgrade my Blackberry the next time a release comes out. This is one way laggards get created – experiencing software not working well – this is what leaves people clinging to the old because some applications are tools that we use and not our primary focus of the day.

I think about users who might not have drawn the correlation of an upgrade from one company impacting software from another company – plenty of users would not. And it was more than a day from the upgrade until I noticed the first issue – a long enough time gap for an end user not to draw a correlation. This is all stuff to ponder when I think about end users and their reactions to bugs.

Once I realized one issue with non-Blackberry software, I started checking for other negative impacts. I mentally did not trust my phone software for several days until I tested a few sync settings and could see things working again.

I’m just about over the bug – but it’s been a week – that’s an impact. I had been a pretty happy Blackberry user but this loses major points.

Share
Posted in usability | No Comments »

debriefing alone

I often test alone. But then testing is a rather solitary activity much of the time. So is writing. Not surprising, introverts have a way of finding activities that leave them alone.

When I teach, I talk about using debriefs. I’m frequently surprised at how few people use debriefs.

If you’re unfamiliar with the term debrief , then I’d suggest begin by looking at the basic definition. I like returning to definitions, I find wrapping my head around a core term and definition is a more comfortable way to start learning something. Then expand on from there. James Bach has a great checklist for debriefs, here.

I don’t personally look at debriefs like an interrogation, a word you’ll see come up when you look at its basic definition. Instead, I prefer a more gentle approach. I think of a debrief as a time to be reflective. And I like having lots of time to reflect, I seem to need it.

So people ask me how I debrief if I’m testing alone. After all, debriefing is a joint activity. A conversation with someone else gently (or perhaps not so gently) prodding you with questions can help us realize new things or pay attention to things we may have missed during a testing session.

But you have to work with what you have – not what books or other people espouse about what you’re supposed to do. You have to find your own way. Since I work alone frequently, I’ve had to learn how to talk to myself. I’ve adapted. And yes, I do answer my own questions.

Some things I do have become such built in activities that it’s almost hard to distinguish them and write about them, stuff just is.

Debriefing is one of those activities.

So I’ve spent some time reflecting on what I ask myself, how do I reflect on my testing sessions – what questions do I ask myself to help me reflect, regroup and then go on.

In the quiet of my own mind without having to worry about the ramifications of time estimates altering the project or any other impact my answers might have, I ask myself these questions. And I often ask myself lots of why questions to my own answers because I’ve learned that underneath the why questions – a lot of good information can hide.

  1. Have I skipped anything?
  2. I find that on occasion a new feature will have some complication that I haven’t understood yet and when I’m slow to approach something, it means I have a block somewhere that I need to overcome. So I ask myself, have I skipped past something? Why?

  3. Do I have any hunches?
  4. Often where I suspect there are issues, there are. Sometimes I haven’t found what the issue is or what works “clunky” but my early hunches usually result in bugs. These hunches are hard for me to share with anyone because I might not yet be able to quantify, replicate or prove it. This is where I like my solo debrief sessions, I don’t have to worry about ramifications of my gut thoughts. My thoughts are inklings for me to explore at this point.

  5. Did I observe anything that made me hesitate?
  6. Along the path to testing something, issues pop up. Sometimes I’ll push past a smaller issue to move on, to get to some other state, condition or idea I have. Now might be the time to go back and make sure I’ve tracked down anything that I’ve hesitated over. Did I miss noting down any of those hunches? This is a good time to take the time to write up more notes. I remind myself that my notes can be private so I don’t have to worry about having “silly” ideas.

  7. Where do I feel I need to spend more time?
  8. I like asking myself this question because I use it to force myself to be brief and list. List making can be telling. It often reveals an area I haven’t tested in awhile or an area that I have some hunch. This is another tactic, another question that I prod myself with. And then – I ask myself why?

      Why do I feel I need to spend more time?

    1. Do I have doubts about the functionality working? Have I seen something to make me feel this way? Or have I not seen enough in an area to give me comfort that is working?
    2. Regression. Is this an area that needs some regression testing? Why – what specifically? I realize sometimes by asking myself this – I can specifically identify what I need to regression test.
    3. Need more confirmation. Sometimes I’ll test something and it will work fine. I’ll test and not find an issue and yet for some reason, I haven’t developed a sense that everything is ok. This is a hunch of some sort. There is some permutation or data or something I haven’t seen or tried yet. What, what is it? I prod myself along to see if I can distinctly figure out what feels undone.
  9. If the product were to ship now, what would make me uncomfortable?
  10. I like this question a lot. Not what haven’t I tested, not what work remains – instead this is another way for me to find out my gut feel about what isn’t ready yet either because testing has been light or I don’t have enough belief assurance that something is working.

  11. What feels done?
  12. After thinking about what feels undone, it is a source of comfort to me – to help me from feeling overwhelmed about what remains to become clear about what does feel done. And it is telling when something doesn’t end up on this list and yet it didn’t show up on my list of what was skipped or what hunches I have.

I trust my instincts so I don’t dismiss anything I find when I reflect this way. And I believe that over time, this is a way we can learn to trust our gut, to develop our instincts. I tend to be a pretty reflective person. I need space around activities to think.

With so much information coming at us during the day, when and how can we find our way through information that get shared with us as well as information we gain from our test sessions to know where to go next? Testing well done, is strategic. Strategic thinking requires that we reflect on information gained to plan next steps. So perhaps ask yourself, if you don’t use debriefs, when do you reflect, regroup and potentially redirect or reconfirm what your next testing activities will be – whether for yourself or for someone on your team?

Share
Posted in Uncategorized | No Comments »

A heuristic for regression testing

I’ve been doing a fair amount of regression testing. I gained clarity into how I think through regression testing as I explained my thought process to a client. And I’ve devised a mnemonic: RCRCRC.

Recent: new features, new areas of code are more vulnerable
Core: essential functions must continue to work
Risk: some areas of an application pose more risk
Configuration sensitive: code that’s dependent on environment settings can be vulnerable
Repaired: bug fixes can introduce new issues
Chronic: some areas in an application may be perpetually sensitive to breaking

I’ve previously shied away from creating mnemonics. I guess because I often forget them. How embarrassing, isn’t a mnemonic supposed to help me remember? I haven’t been able to explain my struggle but this post from Jonathan Kohl sums up how I’ve felt and has helped me.

Share
Posted in regression testing | No Comments »

NLP techniques: anchor & swish. What can be applied to software testing?

I’ve missed blogging. I’ve missed writing. Well, writing what I feel like when the mood strikes which I cannot predict – either the topic or the timing which doesn’t work so well for editors. I’ve been on another one of my productivity kicks where I cut out lots of activities, burrow in and produce stuff. Stuff like articles, classes and assorted matters. But today I woke up super early today (super early is before 5am) before 7am is just early. It happens often enough. Sometimes I’m just very awake. I’ll get up thinking I’ll add an hour or two to my day and that will be great because I can get more done (my productivity-obsession runs deep) but as is often the case, that isn’t how I spent the “bonus” time. Instead I found my mind wandering about. Reading and then looking up related concepts and somehow found myself reading about neuro-linguistic programming (NLP) at 5:30am. Things like that happen.

In 2006 when I started blogging, I vowed I would not let my blog became what I ate for breakfast and that my posts would have a WIFFM that was testing focused. So where’s the WIFFM in this?

Here’s one concept: If you never give your mind permission to wander and wonder to learn new things how do you expect to introduce new possibilities to your life or work?

Two of the techniques cited as part of NLP are anchoring and swish. I like this phrase on anchoring that I picked up on Wikipedia: “recalling past resourceful states.” What I find interesting about this is that I have long sensed certain feelings of being very awake and yet calm at times when I believe I am executing my best testing or writing. Perhaps the combination of wakefulness and calmness is just the right blend to achieve an ideal mental flow. A question to ponder: are there techniques I can adopt to get myself in that state more readily?

I want to investigate swish more to see what I can do with my procrastination problem which I’ve been slow to confess to. Swish is a technique to break or reduce bad habits. I wonder if the concept of swish might be applied to software testing – thinking about the concept from a more positive view. When I think about how to push my thinking in different directions, how to move out of one gear and into another – perhaps a swish technique could help.

James Bach talks about focusing and defocusing and that has helped me. Julian Harty has talked about applying DeBono’s six thinking hats and the concept physical representation of a hat has helped me. Mike Kelly who runs IWST(among many other activities) has a workshop coming up in November on focusing while doing exploratory testing. (I want to see if I can make it to that one.) Mike’s also blogged about NLP and so has Alan Richardson. But I’ve needed more or something else at times.

I get impatient with myself and frustrated when I feel the well is empty on one mental pathway and I’m trying to shift gears so that I can find alternate ideas and issues.

There is a precarious balance between giving myself permission to let my mind wander to discover new ideas or how to incorporate ideas (like NLP) into my own use and practice versus falling into the pit of procrastination.

A swish technique might work. I want to investigate these two techniques closer to see what I can learn and how I can fold those ideas into my work. And I wouldn’t have had those new ideas to explore if I wasn’t up super early. But now I have to get going – not physically thankfully but it is time for me to shift gears (swish). Today I have cell phone testing to tackle and I want to see what new ideas I can invent to detect issues (hoping to get into an anchored stated) before a product release launches (so incredibly soon).

Share
Posted in software testing | No Comments »

PNSQC 2009

At PNSQC 2009, I’ll be talking about “Building Alliances.” For a long while, I have avoided discussing assorted topics especially at conferences that might be viewed as “soft” topics. As a software tester without a developer’s background and being raised in small development companies, I didn’t feel I could take the risk of being viewed as “fluffy.” But now some years later, I want to talk about some of the topics that aren’t technical but are just as essential in getting the job done. I want to share ideas about how to build solid working relationships.

I want to talk about ideas on how to build working relationships and ways to collaborate with other people and other teams. I’m fortunate to have had experiences working with some really great people and teams over the years. But people dynamics aren’t always happy path just like software isn’t always functional in the early build stages, so I also want to talk about adversarial relationships and share some stories and ideas on how to re-route and realign relationships. People issues, politics and team dynamics are factors in how well or even whether some products evolve, not to mention how fulfilling or frustrating work time can be.

One of the principles from the context-driven school of testing states: “People, working together, are the most important part of any project’s context.” I want to share ideas for how to make that happen.

Share
Posted in conferences | No Comments »

Storied Careers, a book about storytelling and practitioners

Kathy Hansen, published author and storyteller, has released a new book called: A Storied Career, 40+ Story Practitioners Talk about Applied Storytelling. I’m one of several people Kathy interviewed for her chapter on unexpected applications of storytelling. The book features interviews with people from a variety of professions. Kathy’s book is a good read.

Share
Posted in storytelling | No Comments »

STANZ 2009

The STANZ conference begins on Monday in Wellington New Zealand and continues through the week ending in Sydney Australia on Friday.

I’ll be talking about my use of storytelling with my work in software testing. I’ll also be teaching classes in both Wellington and Sydney as part of the conference.

Share
Posted in conferences | No Comments »

Beautiful Testing

O’Reilly has announced the book, Beautiful Testing. I’m one of the contributing authors.

I was asked if I would write about my experiences and thoughts on medical software. I have several different project experiences I could have written about. I chose to write about one of the most intense work experiences I’ve had throughout my career.

My chapter is told in the format of a story. It’s based on a previous project experience that was intensified this past year when a personal situation intertwined with my work in unexpected ways.

One reviewer asked if I was alright sharing anything so personal but I had concluded yes before submitting my chapter.

The reality for me is that my work is personal.

In the past year, several difficult events have taken place in my family life. Although I did write one blog post ( 23 rooms) which shared some of what has taken place, for the most part, I’ve written very little about what has been taking place in my personal life. One reason is out of respect and privacy for my family. The other reason is that I’m committed to keeping my blog focused on software testing. If I wanted an online personal journal, I’d seek a different venue. But when my personal life and my work became so intertwined, I decided to share.

I didn’t realize at the time of writing the chapter, how cathartic it would be for me. It seems so obvious now. It helped. Frankly the past 15 months have more than a little difficult and anyone in the software testing community who has spent time with me has seen the effects on me.

The primary reason I have been writing so much more this past year is I have truly been hit with the reality to fit into my life anything that I ever really wanted to do. Writing is at the top of my list, always has been. I’ve taken a close look at activities that perhaps I hadn’t fit it or let drop on the old to-do list. The past year has changed my perspective on many things.

It is my hope that my chapter helps software testers and other readers further realize the importance of what we do.

I’m looking forward to seeing the book in print.

Share
Posted in software testing | No Comments »

Working with User Stories: The Existing Parts

Let me digress to make a comparison (in the process I may age myself but so be it) – I think back to the time when desktop publishing was first introduced. With desktop publishing draft copies gained a way of looking complete, finalized and picked up an air of authority based solely on the crisp appearance of the material.

I think of user stories in the same way.

I don’t like to review user stories and believe that they are always “right.” I don’t believe that the stories are always “complete.” And I don’t believe user stories can be the authoritative source for anything more than “what the author thought the application would do at the time they wrote the story.” I am a committed skeptic.

Like reading the answer key while taking a quiz, I don’t like to read user stories before I’ve gathered my own ideas. I worry that the user stories will stifle my testing thoughts.

So what do I really do with user stories? I put them aside at first and …

I think about what functionality is either being introduced or enhanced in the coming build and what test ideas I have collected in my notes already.

I think about existing functionality and what might need to be regression tested.

I review the data model. I expect myself to be able to envision how the application is being changed by reviewing the database changes. I usually can. I pick up more test ideas this way.

Then I pick up the user stories and …

I scan stories for their titles, if the title is written well, I get the point. I don’t continue to read for the details until after I’ve thought about the functionality being introduced or improved. So I’ll take the title of a user story and then think through ways to challenge the premise of the story.

I go back and read the user stories thoroughly. I ask questions. The questions I ask often result in early bug finds and more user stories being written. If I can find issues that early in the process, that’s great.

I write notes while I read the stories. My notes are often more test ideas.

In my experiences with user stories, the most helpful aspect is whenever I learn about a scenario that I didn’t think about – some nuance that I didn’t foresee. I bump these test ideas up early in the process because these are the stories that I feel I can learn from – the stuff I might not have expected.

Despite sounding somewhat negative or skeptical towards user stories, I actually do like them. I generally prefer user stories to more formally written requirements.

User stories are especially more helpful than the requirements that often get written around the medical software I’ve worked with that has so many requirements commanding: “the system shall X” but yet much of the nuance of “how” is not addressed.

I also like to think about and test for the “what if the system doesn’t.” Testing around error conditions and seeing how graceful a system handles certain states or conditions is important. I don’t see user stories written around these concepts though, instead the user stories I’ve worked with have been pretty happy path focused. And I am a rainy day person.

My largest frustration with user stories is if I follow the detailed path that has been drawn out and I find a bug just following the story – a large functional bug. I’m disappointed to realize that unit testing didn’t pick up on the issue. If I think of a variance or nuance from the story, I don’t necessarily expect those issues to have been found or thought about – but I do expect the happy path basic operations to be functional. Just because I expect this and wish for this to be true, doesn’t mean that is what I’ve experienced.

Overall, I think user stories are more digestible than requirements but I can appreciate that some features of an application aren’t described as well in the story format as well as other features. This is why I think having too prescriptive of a story format is a detriment that can be avoided. While, I would not vary the format of each user story because that might result in making the collection of stories hard to follow, I would not use the same format just to be consistent. Some features might be better told in longer prose and some features might be better explained with a grid or a table. I think any format used whether a user story or a requirement stands the chance for not being the best format for the requirement being described. I suppose user stories are like any tool or hammer we learn, there may be a temptation to overuse the format, seeing everything as a nail as the saying goes.

On a recent project where I was working with user stories, I would like to have more involvement earlier on with reviewing and participating in writing the stories. I’m surprised I didn’t/haven’t had that opportunity. I’d like that opportunity – any time I can gain experience from a different perspective (like gaining the experience of producing the stories versus being a consumer of the stories) I learn a great deal.

Share
Posted in storytelling, usability | No Comments »

Working with User Stories: The Missing Parts

Not long ago, someone emailed me asking me to write about working with user stories. I have a few thoughts about working with user stories. I thought I would write about what I call the “missing parts problem” this time.

In my experiences working with user stories, one element often missing is how a new feature will work with existing features. Notice that I stated “in my experience” because this doesn’t need to be the case. I realize this statement might bring questions to mind – it raised questions in my mind as I tried to explain the missing part problem to a project stakeholder recently. These are the questions and thoughts that roll through my mind and are darn close to a conversation I had recently.

What’s missing in the stories?

The user stories are usually about the new features without hashing out how a new feature will work with existing features. So I end up with 10 user stories about a new feature but the feature is alone. The stories are missing how the new feature will play with other features.

How do I look for the missing parts?

What I do is I create a vision of the new or upgraded feature in my mind; I then walk through the rest of the application with that new feature in mind. Some features will have no – um, perhaps this word works – interplay, no interaction with the new feature. If there’s no interplay to consider, I move on. I do this with aspects of the application that might not be thought of as features – such as active, inactive users, user permissions, etc.

It takes some discipline to walk through that same course over and over but the upside is you get faster at this the more often you use this approach. I’m sweeping through the whole application. I’m not thinking about features in a staccato disconnected fashion.

If you can’t draw that vision in your head, map it out in your notebook. I probably look like I’m zoning out when I gaze out windows or close my eyes but I can see things in my mind pretty clearly. An alternate approach would be to draw a table with a list of the application features and continually run through the list. It’s kind of fun because it’s like holding a puzzle piece and your hand, looking at a jigsaw puzzle and asking yourself, does it (the new feature) fit here? How about here?

I do write a fair amount of grids/tables in my notebooks as I plot out combinations. And if it helps to know, I don’t get my grids right on first drawing – I frequently have to draw them out 2 or 3 times before it’s a grid that works for what I want.
And that thought process is massively helpful because now I’m part of the application, I’m learning. I could be handed the same grid of combinations or permutations of whatever I’ve thought of but I wouldn’t have consumed the knowledge as much as if I drew it out myself. This is the same reason that when I’m given a table I try to force myself to not see the table as complete but instead ask, is anything missing?

Why are there missing parts?

I don’t know. Deep sigh. On one project I worked remotely with a virtual team, the person writing the stories didn’t think I would have input despite my asking to be involved. On another project, the stories were in place when I joined the team. But here’s the more important perspective – I don’t want to whine about not being involved – yeah sure that happens sometimes but more importantly – I would never look to user stories or requirements to think that everything I needed to think about would be written down anyway.

I expect to be the person on the project who thinks of the combinations of things that result in unfortunate results. Or sometimes gets to discover a rock-solid application – whichever the case may be. The combinations of a new feature with an old feature, a new feature under stress, a new feature with challenging data, race conditions, and boundary conditions – the list continues.

If the user stories covered everything, and I all I needed to do was test the user stories, then I wouldn’t be an exploratory tester. I would be a test script executioner or a user story executioner. In either case, I would have disengaged thinking from my work. (Ok, I’ll stop the soapbox.)

How do I continue with testing in this situation?

Happily. I know this is one of the first areas I’m going to think through and see if I can find issues. When I do, I nearly always hear the same reaction from the developers, “Oh.”

But this is probably a good time to point out that I never want to be snotty about finding a defect. Building a good rapport with development is so important. And I make mistakes too – all the time – so it’s best to remember that.

If you have other questions on this subtopic, let me know.

I’ll post about what I do with the parts that are there – the next time.

Share
Posted in storytelling, usability | No Comments »

Switch to our mobile site