-
Interaction Patterns: Tester finds bug!
Posted on July 30th, 2009 No commentsConsider the following scenario, which probably happens hundred of times every day: Tester finds a bug! That’s great, or really bad, depending on where you look at it, but that’s not the focus of this blog entry. We’re interested in what happens next.

In the less-optimized team, the following sequence, with some variations, may start happening:- Tester: Umm, something looks fishy…This might be a bug.
- Tester: Trying again…yupp, the same thing! This must be a bug.
- Tester: Let me check the requirements document before I write the ticket.
- Tester navigates to the root of the version-controlled documentation folder.
- Tester is savvy, so she gets the latest documentation from the repository. This takes a while. She takes a coffee break.
- Tester comes back from the coffee break. Opens the requirements document in Microsoft Word and looks-up this particular piece. Locating the exact location in the use case document takes a while, because the document is long.
- Tester: Argh, this requirement document is a joke! Will these guys ever get it right?
- Tester: It really does not say much about this thing, so I am going to write the ticket anyway. At least someone will take a look at it.
- Analyst (next morning): QC found a bug, let’s triage it so it gets assigned to someone quickly.
- Dev Manager: OK, let’s assign it to Developer.
- Developer (after a day, two): Umm, something looks fishy…This might not be a bug.
- Developer: Let me check the requirements document.
- Developer navigates to the root of the version-controlled documentation folder.
- Developer is savvy, so he gets the latest documentation from the repository. This takes a while. He takes a coffee break.
- Developer comes back from the coffee break. Opens the requirements document in Microsoft Word and looks-up this particular piece. Locating the exact location in the use case document takes a while, because the document is long.
- Developer: Argh, this requirement document is a joke! Will these guys ever get it right?
- Developer: OK, here it is - says nothing about this thing. So, it is not a bug.
- Developer: I am going to reject it and add the comment “Coded per requirements”.
- Tester (next morning): My bug got rejected!
- Dev Manager: Can three of you get together and talk?
- Tester, Developer, Analyst (analysts’ desk, the next day): Let’s open the document.
- Analyst navigates to the root of the version-controlled documentation folder.
- Analyst is savvy, so she gets the latest documentation from the repository. This takes a while. All take a coffee break.
- Everybody come back from the coffee break. Open the requirements document in Microsoft Word and look-up this particular piece. Locating the exact location in the use case document takes a while, because the document is long.
- Analyst: Is this the right version? I remember deleting these several lines.
- Analyst: Let’s get version history. Yes, looks like it was updated six weeks ago. So, where are my changes?
- Analyst: Oops, I forgot to export it from DOORS/ClearCase and check in to the version control system. What’s coded and tested is really not what the business needs right now.
- Everybody: Rinse and repeat.
Does this ever happen in your project? I’ve seen it more often than I care to remember and despite that it seems trivial, changing behaviors takes time and perseverance.
What would a highly-effective team do in this situation? Let me attempt to construct an non-exhaustive list of things. This is just one way of achieving efficiency; there are probably infinite number of ways.
First, the team starts with a long-term vision and focus on people, practices and tools. Hire the best people, train them in cross-functional environments and create a reward structure which takes into account individual contributions in addition to team achievements.
Second, [over time] the team accumulated a list of practices and follows them.
Third, it uses tools that support the team practices.
So here is a version of the same sequence in a highly-efficient team, and somewhat shorter:
- Tester: Umm, something looks fishy…This might be a bug.
- Tester: Trying again…yupp, the same thing! This must be a bug.
- Tester: Let me check the requirements WIKI page before I write the ticket.
- Tester navigates to the root of team WIKI server. Performs a search and the requirements page comes-up first.
- Tester: Himm, this requirement page has changed 134 times since last year. I wonder which one I am testing.
- Tester performs another search, this time for the release notes. The search is based on the SCM label dropped to the QC environment. The release notes has an automatically-generated list of requirement numbers along with versions. Cool!
- Tester: OK, so I am looking at the right version. Still, the requirement sounds ambiguous.
- Tester chats with analyst in the hallway. Analyst stops by her desk and takes a read at the open WIKI page.
- Analyst: Yes, this requirement stinks, I am sorry. Let’s edit it together here to add the clarification.
- Analyst edits the page. Saves it in a new version with the comment: “Adding more clarity to BR:982. No coding required”. Analyst maks this as “Minor change”, so no new version of the page is created.
- Tester: Thank you for the clarification. This is not a bug.
Now, does this happen in your project? Are there ways to optimize this even further? Probably yes.
-
What’s Test-Driven Development, anyway?
Posted on July 23rd, 2009 No commentsIt still amuses me, after such a long time, to listen to people equating TDD to unit testing. But wait - in conversations and public forums, I’ve seen TDD and JUnit used interchangeably. Nothing wrong w/ the framework, of course. Plus, we know Kent Beck is working hard on v 4.7, so many new cool features are in the pipeline. But, whatever happened to the “other” tests - acceptance, functional, integration, database, performance, security and the myriad of special testing methods? From a value point, one can make the argument that automated acceptance tests are more effective in some cases than unit tests. Or, that functional tests can provide a better overall warm and fuzzy, if you need a little confidence before a release. Maybe, one [all-inclusive] test method is what we need to clear up the confusion
-
Scala - Replacement for Java?
Posted on July 15th, 2009 No commentsGreat blog post on Scala at http://macstrac.blogspot.com/2009/04/scala-as-long-term-replacement-for.html. After playing with the language for couple of months, it seems the concepts are really catching up with the developer community and the prospects of retiring Java a real possibility. The language is simple, elegant and potent. When combined with a strong user experience front like Adobe Flex it can really shine! I am excited about the possibilities.
-
Great Demo from the Xebia Labs Guys
Posted on July 14th, 2009 No commentsToday we spent an hour with the build and deployment automation gurus over at http://www.xebialabs.com/ going in some depth on their enterprise deployment platform Deployit. It’s basically a Flex-based application for managing the deployment of highly complex JEE software into development, QA and production tiers. It does most of the daily tasks we’re all too familiar with, ranging from dropping an archive into a container to configuring various runtime parameters. What’s interesting about this particular product is the extensibility it comes with - you can write your own extensions in Java, Python or Jython, which is a great selling point for an integration obsessionist like myself. The fact that they wrote in Flex is also a great point, because it means usable UI without the pains of JavaScript/AJAX. I am looking forward to seeing more of the product in the near future.


