Sunday, May 8, 2011

Lessons Learned in Preparing for an Internet-Free Technical Tutorial

Last year at Agile 2010, Abby Fichtner and I did a technical half-day tutorial involving FitNesse and some code. We first presented a few examples together, and then intended to walk the audience through a series of stories themselves. We ran into common issues:
  • We gave the attendees usb sticks and CDs at the beginning of the tutorial, and many of them were distracted and not listening while we gave our introductory information
  • I would estimate that 40% of the people had issues with installing and starting the software (Java, Eclipse, FitNesse). After spending WAY TOO LONG trying to get everyone up and running (I saw some errors I had NEVER seen before!), there were still a significant number of people unable to run successfully
  • I believe we had some assumptions/expectations about the attendees -- things they would be able to do already (like use Eclipse), that many of them struggled with.

So this year, when I was going to give a half-day tutorial at STAREast on using FitNesse and Selenium, I spent a lot of time beforehand making sure that I could avoid some of these pitfalls. In the end, the tutorial went as smoothly as I could have asked, so I thought I would share what I considered, learned, and ended up with.

My final environment, delivered on USB sticks that I gave to each attendee (I got lucky with all computers that had USB ports in the room!), had the following on it:
  • An installer for VirtualBox for windows
  • An installer for VirtualBox for mac
  • An Ubuntu virtual machine, outfitted with the following:
    • The download from the SeleNesse web site, which includes:
      • FitNesse
      • SeleNesse library
      • I added the Selenium Server from Selenium 2.0b4
    • A double-clickable shell script that did the following:
      • Started FitNesse on port 8080
      • Started the Selenium Server
      • Opened firefox, to http://localhost:8080
    • Inside the FitNesse directory was a page called HtmlElements. The origin/idea came from the original SeleNesse download, which I credited to Marisa Seal, who credited it to Gojko Adzic (Thanks, Gojko!). This page gave me a website to test against, since there was no internet connection. (See Lesson 0 - what to test)

To get them up and running, they had to do the following:
  • Install VirtualBox (which could be done from the USB stick directly (See Lesson 1 - admin rights))
  • Copy a folder called SE2011 from the USB stick to their computer, to a location they could find (See Lesson 2 - running from usb is SLOW)
  • Either double-click the SE2011.vbox file in the local SE2011 folder, or go into VirtualBox and click Machine->Add and add the SE2011.vbox file.
  • Select the SE2011 VM and click Start

Once they were in the VM, they had to open the SE2011 folder and double-click on the file, then click the Run button.

I saw 2 hiccups during this session that I wasn't expecting:
  • On Windows XP (I had tested on Win7), installing VirtualBox threw up a warning involving security of virtual interfaces. Allowing the install anyway did not prove to be problematic for the 2 people who had this issue.
  • 1 person's VirtualBox didn't have a Machine->Add menu. Not sure if they had the same version or a previous one, but we worked around it.

So, how did I get there?

Lesson 0 - what to test
I knew going into this tutorial that there would not be internet access in the tutorial room, and that I was going to have to provide something to test that could be run locally. Last year, when I did a non-interactive talk on the same subject, I was running a local Windows website that I had installed into IIS previous to speaking. This time, I didn't want the extra step of having a website that had to be installed and started locally in order to test it, especially since the things we could fit into a tutorial would be pretty simple.

Being able to add HTML elements to a local FitNesse site was convenient for a variety of reasons:
  • It avoided another piece of possible setup/configuration complexity
  • It gave me an easy-to-edit controlled environment to add simple examples to test
  • The learning curve for what was on the site was minimized

How I came to choose this environment
The first thing that was suggested to me for minimizing set up and configuration issues at a tutorial was a bootable USB stick. There are several resources out there for creating bootable USB sticks with Ubuntu (whatever) edition on them, and NetBook edition was suggested to me.

I tried for many long hours to make this work, and used at least three different methods for creating this bootable USB stick. Not one of them would boot from *my own* macbook pro. If I couldn't get it to work at home, I couldn't have any confidence in it at a tutorial. Even then, I still had lingering questions about being able to save a machine state and allow them to boot into the usb and then have the ingredients I needed them to have, and I had questions about speed.

After burning 10-15 unsuccessful hours on this bootable stick idea, I decided I would shoot for a Virtual Machine, with some kind of client player for them. I looked at VMWare, which I happen to enjoy. The VMWare Player is free for Windows, but VMWare Fusion for Mac is a paid-for application. Buying licenses for each USB stick wasn't an option, so I looked at VirtualBox. I was able to read that I could use VirtualBox for both Windows and OSX platforms and put the installers onto the USB drives. (Given that information, I decided that someone coming in with a Linux-only laptop was an edge case that I wasn't going to support.)

Lesson 1 - admin rights
In testing the VirtualBox installer on a few different platforms as users with a few different rights, I found the following: In general, users with "standard privileges" (both Mac and Windows 7) could not install VirtualBox. It appeared that anyone who could generally install applications could install VirtualBox, and I decided that this was another edge case I was not going to support.

(side note: I suspected that some people would not arrive with computers as well. That makes 3 edge cases I've counted so far that would prevent successful hands-on learning. Knowing that edge cases where people would be unable to get this configuration up and going would exist, I decided early that in those few cases, I would just ask that they go and pair with someone who had a laptop with them that was able to get running successfully. My goal was not to waste time working through configuration issues. Also, since each attendee was getting a USB stick with the whole set up, I felt confident that even those without laptops weren't missing anything.)

Once I had decided on that environment, I took to creating the VM I wanted with each piece of what was needed to run Selenium through FitNesse. Each step along the way, I tested what I had on a few different computers -- a macbook pro, a Windows7 desktop machine and a Netbook (least powerful of the three). After only a few tries, I came quickly to ...

Lesson 2 - running from usb is SLOW
This was most evident on the Netbook, but each time we ran a version of the VM while the VM was living on the USB stick, it was dog slow! On the Netbook, it was basically unusable, and that was unacceptable. When I got frustrated enough, I decided that I was going to make sure that each attendee copied the VM to their local machine. Adding this step was negligibly more risky, but the benefit far outweighed that risk.

In some ways, I got lucky
With only 20 people at my tutorial, the risk of edge cases was minimized. It was a wonderful group, though, and the size was really great for being able to address individual needs while still guiding the whole group. I did not run into any of the technical edge cases I was worried about (Linux, or non-admin users), though there were a few people without laptops. Working in pairs seemed to be okay for those people, as far as I could tell.

I feel grateful for how smoothly my tutorial went, given how much trouble I have heard about from other presenters over the past couple of years. I loved the group that came to visit, and we had a blast!

Tuesday, March 29, 2011

Name that Tester!

No, no, no, not "name that tester", like the old game show where you have to identify an object or person based a series of clues ...

I mean, NAME that tester.

Here's what I mean in less ambiguous terms. I have the opportunity to change my name. On April 1, 2011, I will participate in a life changing event that will allow me to change my name. Typically, this event causes a young woman to take the name of a young man ... okay, I won't insult your intelligence. I'm getting married.

But neither I nor my soon-to-be-husband is particularly tied to our family name. Him less than me, so we don't want his last name. What this means is that we can change our last name to anything we want.

Whoa, wait a minute, anything we want? Yep, that's right. Absolutely anything we want.

We're stuck, though. The kids are less than helpful. His 4 year old daughter votes to change her middle name to Hacker and her last name to Johnson. My son is in favor of our current last name, or the name Love.

Personally, I want something clever -- with hidden meaning. I'd LOVE LOVE LOVE it if I could find a way to fit the letters t-e-s-t into it, because let's face it, I'm a tester for life, and I am proud of that fact :)

If I have my way, my middle name will be NinjaMonkey.

So, here I am reaching out to my clever, geeky, techie community, and asking for name suggestions. I want to hear them all -- what would you change your last name to if you could?

Tuesday, February 8, 2011

Want to learn SeleNesse hands-on?

A little under a year ago, I posted slides and downloads for Executable Specs using FitNesse/Selenium (aka SeleNesse).

This year, I am in a spot to teach others how to do this technique hands-on, and I am pretty excited about it. SQE has given me the opportunity to conduct a half-day tutorial at STAREast: 3.5 blissful hours of getting in front of a computer, learning just how easy it is to start writing acceptance criteria and tests as a team, in the same place where the tests will eventually be executed.

Check out the program for STAREast this year here:

To read the abstract for my tutorial, check out this page and scroll down a bit:

If you can make it to STAREast this year, I have a discount code for an extra $200 off. Just use SKWS when you check out to receive the discount.

Stickyminds column: Old Habits Die Hard

Time to get back into blogging, after far too long away.

This time, before I blogged, though, I wrote up a short little article for StickyMinds. It's my first publication with them, and I look forward to working with them more in the future.

Saturday, October 30, 2010

How did I get here?

At the Agile Tour here in RTP last Thursday (, I heard someone say to me, "Dawn, you are a natural speaker."

I specifically say "heard someone say to me" because it felt like exactly that -- it didn't sound like it could possibly be /me/ they were saying that to.



Uhhhh, here's how I picture me: I'm 6, at my house, and my dad's VP is coming to visit from California (I live in Jersey at the time). It's a big deal, mom has had us helping clean the house for a few days. The VP, Jim, comes into the house and introductions are being made. Me? I'm hiding behind my dad's leg, holding on for dear life, hoping against all hope that I will just disappear.

Me? I'm shy. I'm reserved. I'm the quiet one. I always see my sister as the outgoing, social one. I took public speaking in college, but even in front of just a few people who I shared class time with (summer class even!), when I got up to speak, my mouth went dry and my ears started ringing, and my vision was enclosed with dense white fog surrounding all but two small circles.

One more exemplary memory: Not terribly long ago, when I /really/ started hearing that I should be speaking at conferences, my son, Steven heard me talking about it. He was 12. He came to me, gave me a hug, and said, "Mom! Don't worry! Talking in front of people isn't so hard! I'll help you! We can practice together!"

Isn't so hard? HA! Who are you kidding?! It's impossible!!

It's a good thing I listened to other people. It's a good thing that as I heard person after person tell me I should speak, I should write, I should teach, even though that concept completely contradicted my own picture of my abilities, that I tried it anyway.

It's not terribly easy to accept that my own view of my own characteristics, strengths, and potential may not be the same thing that other people see. I sat in disbelief for many long hours, repeating to myself the words from other people ("Dawn, why aren't you speaking at conferences?" "Dawn, you have so much passion and energy! You would be great as a speaker!" "Dawn, will you come talk about that topic at the local user group meeting?").

Finally, I decided to jump. I came up with a plan to ease myself into it. First, I would talk at the local user group. The audience would be small, and it would be people I knew. Then, I would speak at a bigger, less familiar venue with someone else who had experience speaking (that way, I could pass off the parts I was having trouble with and learn from how they handled situations). Finally, I would begin speaking by myself.

Of course, life doesn't have the same plans for us that we have for ourselves.

I was presented with an opportunity to speak at STAREast this year (last minute, nonetheless). I took it, and spoke about a subject I was familiar and comfortable with. I did great! I've spoken several times since then, and it has gotten easier every single time. People told me that it would (chances are, people have told you similar things if you've thought about speaking and have been afraid). Really, it did.

I spoke at Agile Tour amongst such speakers as Jeff Patton, Andy Hunt, May Lynn Manns, and Laurie Williams. I am unspeakably honored to be in such company. I was excited and happy before my session, rather than nervous, anxious, and just wanting it to be over. I felt confident and comfortable and in my element.

My first public speaking engagement was right at 6 months ago, and I have no idea how I have gotten here from where I was a year ago. What I do know is that if I had not listened to those wonderful people who encouraged me, I would still be sitting here, telling myself that I wish I could speak, but am just too scared.

Tuesday, August 31, 2010

How *would* you test this?

So, I am using Google Voice as my voicemail these days. It's neat, and I like it, mostly. They offer, for free, a transcription service that sends me an email/txt message of what the caller said. Over the last 3 days, I've gotten calls form my son's middle school about him being absent (he is actually withdrawn!).

The beauty of this setup is that the tester in me LOVES certain characteristics of this test set. The call is an automated one -- in this case, I know that the caller is saying the *same exact* thing every time. The tone is the same, the inflections are the same, it's the same voice source data. However, over 3 days, I've gotten 3 different transcriptions from Google Voice!

The voice mail *actually* says this:
Hello. This is the attendance office at Durant Road Middle school, calling to inform you that your child, Steven Cannan, was marked absent today. Please send a signed note upon returning to school, explaining the reason for the absence. Thank you.

And following are THREE Google Voice transcriptions ... they crack me UP!

Day 1:
Hello, this is the attendance office ed to Ron corrode middle school calling to inform you that your child. Hey, it's Dawn Cannan was marked absent today. Please send a signed note on returning to school, explaining the reason for the absence. Thank you.

Day 2:
Hello, this is the attendance office and to Ron corrode middle school calling to inform you that your child. Jeanne cannon. You're a smart ass in today. Please send a signed note up on returning to school, explaining the reason for the absence. Thank you.

Day 3:
Hello, this is the attendance office at Deron corrode middle school calling to inform you that your child G intended You're a smart ass IN today. Please send a signed note up. I'm returning to school, explaining the reason for the absence. Thank you.

I *kind of* think they did the best job on the first day :)

But this brings up an interesting point for me, and it's one that I have encountered several times in my career as a tester.

Roughly, I can ask this question as something like this: How can you test something that is not feasible to prove, logically or mathematically, is *correct* every time?

I can think of so many examples where testing isn't cut and dry. I started working as a tester in a company that did software that processed genetics algorithms. How did we know that the genetics algorithms were correct? At that time, I started off by having all of my testers know how to do the algorithms by hand, so that results that weren't right would just stick out to them.

At one point, I was testing a search engine. I was lucky in this case to have knowledge of the source data in a database. One approach I took here was to find objects in the source data that exhibited certain special (and easy to identify) characteristics. Then, I could perform searches that I *knew* would return those objects and look for them early in the test results. But even then, I didn't really know that the search engine was performing correctly.

Recently, I read a set of slides by Harry Robinson, talking about testing Google Maps. Here's another good example: How do you test something that has multiple right answers, in such a way that you feel confident releasing it to customers?

I've given two approaches that I have used, but I'd like to know how others have solved similar issues. Please, let's talk, I'd love to hear more from you.

Friday, May 28, 2010

Are you the one holding you back?

I talked to my sister tonight. Like some other times I've talked to her, she was feeling frustrated at the walls that she has run into while trying to chase her dreams. What concerned me, however, was the tone in her voice that sounded like she had given up. She seemed to have decided that since she does not have a degree from a 4-year university, she was never going to be able to pursue the career she wants.

The conversation both made me sad and frustrated me. Although she has encountered some pretty big obstacles, I did not feel like they were impossible to scale. At one point, I told her, "Go get yourself some rock climbing gear, and let's get you over that wall!"

She feels like I don't understand how hard it is to not have a degree, because I have one. Maybe, she has a point. Though I know that when I am hiring, I don't even notice if my candidates have a degree. I look for skills, passion, pursuit of what they feel is right. I know that at least some others do the same.

I do, however, know what it's like to feel that the odds are stacked against you, and to feel like you might as well not try.

At age 19 I found myself single, pregnant, and a sophomore in college. The semester I found out I was pregnant, I was already struggling with a Biology curriculum. I had barely passed my first year and a half of school, and with a baby due in June, my spring semester was atrocious. I missed most of my classes that semester. By the time I asked for a medical leave, I had missed the deadline to do so by a week. That semester, I failed out of every single class and was placed on academic suspension.

After my son was born, I landed a temp job as a secretary for the Computer Engineering department at Clemson (where I had been attending classes before the baby). I worked for them for several months. When I started talking about going back to school, they were very encouraging of me. They encouraged me to go back and study Computer Science (because I "seemed to be pretty good with computers"), and they walked me through applying again. I was able to get the college to accept me back as a student, but as the summer before classes started began to fade away, my hopes for getting financial aid began to fade with it. I was told that I simply did not qualify for financial aid because I had been placed on academic suspension.

I had no money. I was a single parent, living with my parents. My parents had not saved for my college, so I had been relying fully on financial aid in order to go to school. Panicked, I thought this one barrier of money was going to stop me from going back to school.

(Edit from my original post because I realized I glossed over the most important part!)

(Let's pause here for a second. This situation looks pretty bleak at this point, right? I could very easily have stopped right there and given up. I mean, they told me, "Those are the rules, academic suspension = no financial aid when you come back until you prove you'll do better." Seems like a deal breaker to me. **That**, however, is the point of this post. I didn't let it be a deal breaker. I kept trying to go after what I wanted anyway. So, let's get back to the story....)

I really felt like the circumstances that lead to my academic suspension should be forgivable. I felt like they were pretty extreme and that I should still be able to finish my education and get the degree I wanted. I talked about it *a lot*. Apparently, the professors that I had been working with felt the same way.

All of the professors that I had been working with in the Computer Engineering department wrote letters to the financial aid department at the school. All of them made an argument to the school that the opportunity they gave me would be well worth it, that an investment in my future would pay off for the school in a shining star. I gathered several of these letters and took them to the financial aid department. I was shocked when they offered enough aid to get me back into school!!

My first semester back to school, I made Dean's List. Three and a half years later, I graduated from Clemson with a Bachelor of Science in Computer Science. I spent those three and a half years supporting myself and my son in a home of our own, working full time, and taking full-time computer science classes. My senior year of college included 7 comp sci classes and a physics class.

Me? I know barriers.

But I don't see them as showstoppers. They exist, and they are big, and at times I am really intimidated by them. At times, I don't think I can get past them. The truth is, sometimes I can't. Sometimes, "over the wall" doesn't work, but it turns out, if I scale the wall long enough, I can find a small crack that has crumbled enough for me to squeeze my body through. The point is, I just have to *keep trying*.

If I give up, the result will always be the same -- I definitely won't accomplish what I want. But if I try, and keep on trying, and look to others for ideas, something just might happen. Maybe it won't be exactly what I want, but maybe it will be better.