Pages

Sunday, March 31, 2013

Part One of our USA-Japan Sister City odyssey has completed. For the Japanese students, they have come, experienced, been hosted, participated in events and activities, left an indelible impression on a number of families and intermediate school students, and have headed home. With this, we draw to a close the First Act of our story.

The Second Act is now underway, and in many ways, this already has a back story and some setup that has been happening for weeks, months, and (truthfully) years to get us to this point. For us to make a prologue for Act Two, I need to give some context:

My kids have developed a love of Japanese culture because their parents have had a long-standing love of Japanese culture. Christina has been, over many years, the recipient of many gifts through her father. He has used his skills as a machinist to purchase, refurbish and sell post-WW2 cameras made in Japan for camera enthusiasts in Japan. Because of this, many people have expressed their thanks by sending him gifts over the years, some of them quite elaborate and beautiful. Most of those gifts he, in turn, gave to Christina. I was also able to share with Christina my own love for things Japanese, including my teenage years spent watching Japanese Anime from the 70s and 80s, studying Aikido, and learning as much as I could about Japan's early history, its folklore, and its majestic (and turbulent) eras that led it to today. Is it any wonder that my children would grow up with an appreciation of Japan :)?

It's with this as a background that my kids grew up with Anime, Manga and video games that originated in Japan (not to mention sushi and other foods), and that it made up such a part of their lives for so long. With that, again, it should also have been no surprise that my kids would reflect an interest in participating in the Sister City exchange program. My son had, earlier on, been on track to attend the Boy Scout Jamboree in 2010, so that was my initial focus for him, but a financial meltdown and recession in 2009 halted that, and any other, travel options for awhile. Thus, he had to be content to do Scout camps around California each summer instead.

When Karina came to Parkside, she started asking about the Sister City program from day one, and if she could go. At the time, I didn't think it was doable, but I decided that, since I'd paid for several years of Scout Camp for my son, and the outlay over the years was equal to if not more than the cost for the trip to Japan, I figured I would explore the options. As part of that exploration, I made a challenge to my daughter that she come up with half the money herself.

This is a common tactic I use for many things with my kids. The reason is two fold; first, I wanted to gauge how serious she was and second, if she had an actual plan for attaining it. Karina's answer was rather simple. She went and got a jar, an index card and some Scotch tape. On the index card, she wrote down "Japan Trip". Over the next few weeks, I noticed that the jar was filling up with tens and twenties. I figured at first some of this was gifts from her grandparents and such, but when I noticed that it kept growing each week, at a more rapid clip than I'd heard of her receiving gifts from others, I had to ask. How was she getting the money?

She said "I decided to sell some of my art work. My class mates are buying drawings I am making for them."

These are examples of some of the items she has sold:

Additionally, for those of you with Facebook, here's a small "gallery" of other work she has done.

As she started to accumulate the funds for this trip, and more to the point, when I would come upstairs late at night on a variety of evenings and see her hunched over her latest artwork that she was doing, I knew she had the desire to go, the inventiveness to find a way to pay for it, and the tenacity to actually see it through. How could I say no to that?! With this realization, I went from "skeptical" to "all in".

I am immensely proud of her, and for the initiative she is taking to make this happen, and to that end, I am now going to do what I can to help her, which is to share the following with anyone interested. Karina wants to use her skills at drawing to raise money so she can pay her way to Japan. I want to help her do that, so if anyone here is interested in helping her reach her goal, please let me know in the comments section. Also, I want to reiterate that my daughter is, first and foremost, a middle school student, and the role of middle school student is the primary role I want to have her focus on. This artwork as fundraiser is secondary to that, but at the same time, I totally want to encourage her entrepreneurial spirit, so if you'd like to have a "Karina original", please let me know :).

Thursday, March 28, 2013

First, I want to start this by saying that the past week that I have had has been one of the most rewarding experiences ever, and I mean that sincerely. I greatly enjoyed opening our home to two of the eight middle school children that came to visit us here in our town from Japan as part of our Sister City Exchange program.

This was precipitated by my older daughter's desire to be a part of the group to go to Japan this year, and one of the expectations is to have the family of a U.S. participant act as a host family for the Japanese participants. We were happy to do so, and in the process, invited two of the sweetest girls on Earth to stay with us for a week. All of that is fantastic. Now, on to some things I discovered.

1. Do not assume that something that is done where you are matches what is done elsewhere.
I learned this by having our participants have dinner with us at a somewhat high end sushi bar (well, high end for where we live). In the process of having that dinner with them, I discovered that most Japanese do not combine foods like tempura, sukiyaki and sushi in the same meal. I also discovered that the salad's that we often get to start a meal are also not particularly "Japanese", it's an American thing. Another interesting discovery, "American Sushi" uses a lot more wasabi in its making. Not as a garnish on the side, but actually inside of the sushi itself. The girls bit into several nigiri pieces, winced and say "wow, this is too strong!" I then watched them dissect the nigiri pieces and scrape away the wasabi. I found this fascinating; what I had often taken for granted as just the way things were done wasn't. In fact, it was an adaptation for our local environment that I had become accustomed to. Now I know better :).

2. Factor in at least an hour plus for any activity that is done with a group.
We took a trip to the city (San Francisco) and jumped on a MUNI line to go out to the Marin Headlands, the primary goal being to walk across the Golden Gate Bridge, and then go explore some other areas of San Francisco. In the process, we gathered up all of the participants and all of the host families to come along. That worked out to about 30 participants. When you are bringing thirty people along to anything, odds are that you will need to pad significant time to make sure everyone can be accommodated. Bathroom breaks easily take 20 minutes with a group that size. Snack stops? Thirty minutes. Meal breaks? Well over an hour, plus an hour or more at any given venue. Needless to say, there were a lot of things that we did that ended up taking a lot of time because of so many people. The easiest way to get some leverage? Split up the group. We were able to see a lot more once we split off into smaller sections and only had to manage twelve people instead of thirty.

3. There are some things that are, on the surface, universal.
Early teenage girls of just about every culture will squeal with delight at a cute bunny rabbit. Cats are adorable. So are dogs. Spiders and snakes tend to weird them out. Cupcakes are a hit. A trip to the Apple Store and letting them test out headphones will last all night if you let them. Late night giggle fests are a norm. With this, my girls and these two girls from Japan got along famously. The Japanese girls considerably better English than my daughters spoke Japanese, but they were able to make themselves understood for hours, and it seems that Americas Funniest Home Videos translate well in to any language.

4. Being a Host Family is rewarding and exhausting
The participants had a full itinerary each day, and both my wife and I participated in it. It left little time for relaxation and just sitting still. Net result, we are both very tired, but it's that super accomplished kind of tired, the kind that makes you feel like you want to pass out, but if you do, you will do it with a grin from ear to ear. One other thing to remember, if you decide to be a host family, any other project you might have going on, just park it. I promise, you will not have the time or the emotional energy to do much of anything else.

5. It's possible to have one's heart stolen in a short amount of time.
Six days ago, I didn't know anything about these eight Japanese students. Today, I sent them home with a heavy heart. It was such a short time, but I already miss them. I know my girls miss them terribly; they cried and hugged for the longest time this morning, until they had to be almost forcibly separated (well, OK, that's a little over dramatic, but it was a hard goodbye). Just six days, and I grew to care about both of them tremendously, as though they were my own daughters. That will fade with time, I know, but the good thing is that the seed for a lifelong friendship has been planted. I will encourage my girls to help keep it growing, if for no other reason than that Christina and I want to know how they are doing.

For those who have similar opportunities, if there is any way you can be a host family to such a program, do it! It's such an awesome experience, and I would gladly do it again. I have a sneaking suspicion that once more may be in our future, when our youngest is in eight grade. If that happens, I'll gladly sign up to do it again.

Tuesday, March 26, 2013

Today, as I was checking out software change, I created a number of groups and populated them with posts so that I could use them later. I could see my intern looking both amused and quizzical, so I let him in on the joke.

"The groups are names after Smiths albums. The Posts are the songs associated with those albums."

He then looked at me for a bit and asked... "but why would you do that?"

This gave me an opportunity to show him a technique I like to use for scenario-based and data based testing. I like to populate my database with characters from various things. The only requirement is that the data has to be consistent. To this end, I will often use albums and songs from various bands, characters from Anime programs, or video game characters. Through this, I can often see if something is out of place because it won't fit into its context. An example, I will often pair up people into relationships who are already in relationships or I could see being in relationships based on their context (Yuna and Tidus from Final Fantasy X, Edward Elric and Winry Rocbell from Full Metal Alchemist, God Dust Woman and The Chain from Rumors, etc.).

In a way, this makes for a treasure trove of "self referencing data" but not in the strict sense. Strict self referencing data works a lot of the time. Think of the statement "This is a text window that should accept exactly 61 characters". If we are checking a text window to confirm that it will accept exactly 61 characters, then yes, that will be helpful. It won't be so helpful in other contexts, where we want to know more about the relationship of that text box with another element. This is why I like putting in my mix of semi self referencing data and using it. I used this process for years to validate immigration forms and to see if relationships were being maintained and the proper areas populated from the database. Again, I could have used any number of names, or been literal with things like "FirstName LastName" in a variety of combinations, but I find it a lot more fun to run a variety of tests and see who shows up where. If Ryoji Kaji is paired up with someone other than Misato Katsuragi, I'll recognize it very quickly.

Of course, there is a danger with this approach, and why I don't rely on it too much. If I need to share data with a number of people to help with testing, this idea is less helpful, because unless they have the same cultural touch-points that I do, they will not recognize the relationships. Thus, this was a technique I used as a Lone Tester, but I have de-emphasized it as a steady tool lately. Still, in a pinch, if I really want to see if I think I'm getting what I should be getting, I'll call upon my data bank of semi self referencing data to see if something works the way I expect it to, and then we as a group will define a more appropriate group data set.

Sometimes, just having a little fun and goofing with some data that has a meaning, not matter how odd that meaning might seem, can be a blessing when we test. It engages us, it puts a smile on our face, and sometimes, it invites a reply by someone who gets the joke. All of these help keep someone like me engaged and entertained in the process. When I'm engaged and entertained, I can be formidable in the things I can accomplish :).

Monday, March 25, 2013

It's been awhile since I've talked about or added anything to my ADHD exploits. For the most part, I think I'm doing pretty good, but I am noticing that, over time, I do have to enforce discipline on various tendencies. While Concerta is working very well for the majority of my symptoms, I am still me, I still have my habits, and I still behave in much the same way, just more even keel.

This is a two part post, the first part I'll explain in prose, and the second will be in video.

For the prose part, one of the things that makes an ADHD brain different is that we tend to fight habits unless we are really into them, and then, often, we overdo it. There's little in the way of middle ground. We either don't do things, or we do them to excess. A person with ADHD is typically not "tidy". We are either compulsively clean, or we just let everything go. We go in cycles where we focus with laser like intensity on certain things, but we totally ignore other stuff. I had hoped that with taking Concerta, I would be able to overcome this tendency. Overcome in my case has proven to mean that my pendulum swings are not so severe. Instead of swinging between 45 degrees on both sides, it's more like 15 or 20 degrees. The point is, my medication will not make me any better at truly prioritizing my time or focusing on the really important things if I don't first personally make an effort to prioritize the things that matter.

Additionally, when ADHD people tend to want to make a life change, we do it in spectacular fashion. Most of the time, we don't inch into a new habit, we quit things cold turkey and take on new things at a moments notice. We're not the type of people to casually and over time build up to skydiving. We just decide "hey, I'm going to jump out of a plane" and then we do whatever we have to, with borderline manic focus, to get to that goal. My posts this past week about my excitement about re-purposing my office, or de-emphasizing it as a dedicated office space, seems noble and natural to me. To Christina, it's a time of intense anxiety, because deep down she is thinking "oh good grief, what part of my ordered world is Michael going to totally up-end NOW?!!" She's not behaving irrationally, she has lots of experience with me deciding to make a "small change" that ends up turning into a forest fire that consumes all fuel in its path. Her comment to me was that "it's great that you don't want to have to feel like your office is the only place to do work, I get it. However, if I start to see wires, computers, peripherals, electronics and all sorts of other stuff lying all over the house that I didn't have to deal with before, I'm totally calling you on it!" Yes, she knows me well :).

So what was that second part I was talking about? A friend of mine on Twitter alerted me to a TED talk about changes in the way that we could deal with mental illness and the ways that we treat it, and more specifically, that maybe there was a way to stop treating our brain like a bag of chemicals; where adding something to the mix globally changes everything. Instead, what if we could focus on what our brains really are, which is a neural network with distinct nodes and branches that act uniquely, and that, when acted upon chemically or electrically, perform or change in very specific ways. For those of us who deal with aspects of mental health that are not altogether "normal", this is exciting, and I am very curious to see what this kind of research leads to. I also hope that I'm young enough to take advantage of it when it finally bears fruit.

Friday, March 22, 2013

I am sitting in the chapel of St. Bede's Episcopal Church in Menlo Park this evening. Why am I here? Because once a year, I get the opportunity to sit in and see some of the most amazing talent I am likely to ever see performing feats of musical skill that are, shall we say, astounding to me.

This is the annual Junior Bach Festival, held every hear towards the middle and end of March, and it showcases performances of children in the Bay Area performing pieces from the repertoire of Johann Sebastian Bach. The numbers range all over Bach's published works, and cover many different instruments. Yes, the standards are represented; violin, cello, piano, organ, guitar, etc. but sometimes more exotic fare is included. Marimba and steel drums have made their way into performances as well. These children range in age from as young as six years old to eighteen years of age. All of them have one thing in common... they are all exceptionally good performers.

Each time that I come to these events, I am reminded of several things. First, these performers are indeed talented and gifted, but more to the point, they are incredibly committed. Many of them have made sacrifices to do what they do. They have put in many hours of practice, given up on other extra-curricular activities, time with friends, and other pursuits to become, quite simply, amazing. Yet amazing seems such a small word when one considers the skill level of these kids. Close your eyes, and you would not have any idea that these are "mere children" performing. Calling them "mere children" is also a disservice, because they would sound tremendous if they were full grown adults. Their age is irrelevant, their skill is what's important, and on that front, every one of these performers, from the youngest of them to the oldest, show tremendous talent.

Any time I lament to myself "oh, I wish I was as good as..." and I fill in the blank, with some pursuit, be it snowboarding, music, software development or software testing, I stop, and I remind myself of this every event. It's so easy to say "oh, I wish I was amazing", but truthfully, we can be amazing, every one of us. The question really comes down to "what are we willing to give up to be amazing?" That's the harder deal, because to truly be great at something, we have to be willing to give up other things to make "amazing" happen. It doesn't happen by accident, and it doesn't come with half-hearted wishing or hoping.

These kids performing tonight have given up much, have practiced long and hard, and they have the right to say that they are amazing. They may well go on to bigger and greater things. Some may not. Fact is, statistically, only one out of 1000 of these kids may become one of tomorrow's "superstars". Most of them know that, too. Talk to them, and the fact is, they don't really care about that. They do this because they love it, and through their love of it, they discovered they were very good at what they did. Even with all that natural talent, they still have to work very hard to get to this level. To say they are inspiring is, well, a tremendous understatement :).

Note: PRACTICUM is a continuing series in what I refer to as a
somewhat "Live Blog" format. Sections may vary in time to complete.
Some may go fast. Some may take much more time to get through.
Updates should be daily, they may be more frequent. Feel free to
click refresh to get the latest version at any given time. If you
see "End of Section" at the bottom of the post, you will know that
this entry is finished :).

Update: This project was put down back in April, with the intention to get back to it after I figured out why the examples weren't working. I didn't intend for the process to take 3 MONTHS to get back to, but I believe in finishing what I start, whenever I can. Therefore, all of the previous examples from earlier posts have been updated and re-examined. thanks for the patience and here's hoping you all continue the journey with me once again :).

Chapter 9: Advanced User Interactions

Much of what we have worked with thus far would be plenty if the web of yore were the one we were working with. Ahh yes, those days when things were simple. Three tiered architecture, some simple front end details, links, buttons, and a few CGI scripts. Just find the elements, click the buttons or links, and move to the next item. So simple... and so 1994!

The web doesn't really look like that any longer. Well, many places actually still do, but the places we most like to visit certainly don't. Today's Twitter and Facebook level web apps are a lot more dynamic. It's not just typing text and clicking buttons. Now we can move stuff, resize things, pull and stretch and add components whenever we feel like it, and who knows what will happen next.

For these types of environments, this next chapter focuses on how the user can leverage more advanced options in the API to have this level of interaction. These interactions require a more in depth coverage of not just keyboard combinations, but actual placement and movement of the mouse, and how to track it and implement the appropriate actions.

Creating an Action Chain

One of the things that we are ab;e to do with Selenium is create sequences of events that we can bind together. These sequences are referred to as "action chains" and they allow us to make a variety of movements and treat them as one action. Below is the example code that David presents to show us how to drag and drop an element:

If we run the text, we should see two things happen. The first is we should see a screen like the first one below:

Now, if I have learned anything from these past several weeks, it's not to jump to conclusions that something isn't working. It's very possible that what may be the culprit is the version of Java JDK I'm using. My plan is to dig in and see if there's some thing I'm unaware of. For the Java pro's out there, if I'm doing something dumb, please, let me know so that I can fix it :).

Moving an Element by an Offset Value

So, the building option to allow us to move elements also allows us to move items by specific amounts (or so the book says). With this is n mind, I tried to create the example as described, using JUnit 4.1.1 format. Instead of dragging and dropping abox from one element to another, this time, it calls for moving by an index amount on the X-Y axes.

Seems straightforward enough, but I am still seeing the same issues with this example as with the last one.

Again, Java peoples out there, it is just me, or is there something not happening here that should be happening? An enquiring mind wants to know.

As tomorrow looms large on our calendar, I am thinking of the past several days and how we have been collapsing, cleaning, fixing, modifying and changing things around so that we can make for a comfortable place for our four Japanese exchange students.

Wait, four? Well, it turns out that a number of the host families don't have kids at home any longer, and one of the things that the organizers wanted to do was to place the students with as many families that had kids of the same age as possible. Thus, we agreed to do a swap. We'll host two girls half the time, and a different pair of girls the second half (note, this is just for one week).

The decision we made to make things as natural and as disruption free as possible was that, for the next week, the upstairs portion of our house is its own apartment, and we don't live there any more. I've been looking at what this would mean for me, as one of those rooms (outside of the half bath where I get ready most mornings) is my office. Some of the items that I keep there (i.e. my guitars and my bass) are not being relocated, as the "music room" focus of my office is exactly what I want it to be. However, what has proven to be interesting is to see what aspects of my "office" I actually need on a daily basis.

In this age of laptops, wireless networking, smart phones and tablets, I've come to see that about 95% of my interactions with my every day work as a tester, a writer, or even a podcast producer don't require a dedicated space (I do require a space if I want to make for a flat, relatively noiseless recording, and then busting out my Blue Snowball microphone is a necessity). Stereo system? iTunes, Spotify, and Amazon Cloud player, plus a pair of good headphones, makes that work. TV and Movies? Netflix and Sidereel resolve most of those challenges. Books? Most of my current tech library, i.e. the things that I actually reference, are in electronic format in Dropbox (when I want to access them on my laptop) or on my Kindle Fire. Different environments? VMWare Fusion and VirtualBox cover that. That leaves a notebook and a pen, and those are things I can carry with me. There are, of course, miscellaneous papers that always come my way, but many of them can be handled with an electronic follow-up or captured in other ways so I don't have to carry or store them.

So is there anything from my office that I'm leaving behind that would be a hardship? Turns out, yes, there is one thing. Multi monitor support. Having one or two additional monitors is indeed a wonderful luxury that, short of physically carrying around a second monitor, I will have to do without. Luxury yes, but not essential. I can, when push comes to shove, do just fine with one laptop screen.

So as of today, the upstairs is "vacant" and waiting for our "new tenants". I'm really curious to see, after this week, if these changes are a temporary blip, or ones I would like to make more permanent.

Tuesday, March 19, 2013

This may seem an odd title, but as you all know, I can find ways of making a testing allegory to just about anything, if given a chance.

Last weekend, my wife, Christina, and I decided to take a weekend away. Our kids are old enough now that they can look after themselves for a night, and we wanted to celebrate our 20th anniversary (albeit delayed) in a more "festive" location and manner, so early Saturday morning, we boarded a plane, and took a short flight to Las Vegas.

First, a couple of things to know about us. Neither of us drink, we're not "partiers", and neither of us gambles or frequents strip clubs, etc. Some might say that, with that kind of a list (or anti-list), Las Vegas would be the most boring place on Earth. Not so. Christina considers Las Vegas to be a second home, especially the Strip with all its glitzy hotels, resorts and amenities available for all ages. She's kind of an expert on it. Ask her to point out the ten best shows on the strip and she can tell you without hesitation. Best restaurants? She can tell you dozens off the top of her head. Architectural designs unique to each hotel? Yep, she knows all of them and has combed just about every inch of every hotel from Mandalay Bay to the Stratosphere (there's a few she hasn't been to yet, but rest assured, she'll get to them soon enough :) ).

My point is, if anyone wanted to consult a "domain expert" on the places to see and things to do in Las Vegas that didn't revolve around drinking, gambling, or strip clubs, Christina is it. Yet even with that, we discovered that you can throw curve balls even to the best of experts and make them have to adapt.

A little context might help. Christina and her mom have been going to Las Vegas once or twice yearly as long as I have known them. I think this tradition started when Christina was a teenager, and without fail, at least once a year (sometimes twice), exploratory trips are planned, conducted, and travelogues of sorts are reported. Typically, they go mid week and they go "off season", usually meaning February or October. In that situation, they have plenty of time to go where they want to go, do what they want to do, and see what they want to see. For our trip, however, timing just happened to be that we were going to go on a weekend, and in particular, St. Patrick's Day weekend.

The net result was that we discovered the stress test that was getting from our hotel (at the Palazzo) to our dinner reservation (at THEMix at THEHotel at Mandalay Bay) and then to our show (Blue Man Group at Monte Carlo) and then negotiate how to get back to the Palazzo.

First, a bit about the Las Vegas Strip. If you look at it from a map, it looks like everything is close together. In reality, it's not. The hotels are just so big that they look like they are next door. The distance from Mandala Bay to the Stratosphere (the traditional boundaries of "The Strip") is about six miles. To get from place to place, cabs are important. On this night, we discovered that the queue to get a cab from the Palazzo was about 300 people thick. WOW! Not something we had anticipated. We did get our cab, and we did get to our dinner reservation... at which we had to wait a bit to be seated, and wait even longer to get our dinner (almost an hour... was it because I ordered Wagyu?).

From there, we made our way down and, caught another cab to get us to the Monte Carlo for our show (with a little time to spare, but not much). After the Blue Man Group Show (which was amazing, btw, and totally worthy of its own post :) ), we walked out of the hotel hoping to catch a cab... and saw the queue was triple the size it was at the Palazzo. Doing the math and realizing how long it would take, we decided to walk and have Christina play "tour guide" to me and show me her favorite spots. However, even this was stymied because of the sheer volume of people everywhere we went. Just moving from place to place was like salmon swimming upstream. Even with all of that, it was a lot of fun watching Christina, even under pressure, modify her approach and where we would go, and the angles she'd choose to take to avoid the crowds when possible. In short, she could adapt quickly because she knew just about every angle of the Las Vegas Strip there was. Were I to try to figure it out on my own, well, we probably would have made it back, but a lot later, I'd bet.

So what's my testing analogy? We may think we know an area, and we may think we understand how something works, but we don't really know how well or what parameters we know until we put some stress on the system. The fact is, pathways that are well known and easy to navigate may become considerably less so when our environment changes, and on this night, changes radically. If you have done your homework in advance (in this case, about two decades worth) you can adapt and move more freely. Likewise, when a system is under stress, it's vital we know as many avenues to get around as possible to allow us to see where people might go and interact with. Quiet times are good times to explore and find them, but rest assured, under load and stress, even quiet areas of an app will take on more load and pressure, and the results may be less than ideal.

One bright point... the odds of you running into several revelers puking in the bushes... probably higher in Las Vegas the night before St. Patrick's Day than in your app... but you never know ;).

Friday, March 15, 2013

You've probably all been through this before. A target date has been set. You've run a product through its paces. You've tested thoroughly, and had multiple members of your team look over something for sanity's sake. All is good. You know it. You feel it, let's push this and call it a day.

The next morning, you walk in, think to yourself "let's just do a couple little tweaks. That package that we need to update, seems like now would be a good time to do that". Update completed. Now that that's out of the way, I'll show our PM what's been deployed. Only now, instead of that clean, seamless environment we'd seen, verified, tested within an inch of our lives, now it's showing weird behavior, oddly placed elements, and all in the room are having that classic "WTF?" reaction.

This is truly one of the worst experiences to have, and all of us testers have had to deal with it at one time or another. So what causes this? As I've been discussing this with our intern, I described it as the idea of "two screens". For this to make sense, think of the classic "shoji screens" used in Japan to separate rooms, made with wooden frames and using rice paper as the wall material. In one screen there is a number of holes. In the second screen, there is also a number of holes but placed in a different pattern. Lay them on top of each other, and for the most part, you will not be able to tell that there is anything but a "solid wall" in front of you. Remove either of the two screen layers, and the holes become visible, and obviously so.

After a bit of poking around, we realized that, yep, updating a particular module that our site uses made for a change in how some of our code was being called. The issue was always there, but it had been masked by the behavior of the previous revision third party module. By updating that module, it "fixed" something, and by making that fix, it showed a flaw that had been there for quite some time, but only now, with this update, were we able to see it.

I mention this because, in our rapidly changing and intertwined web world that we live in today (never mind mobile, which adds its own interesting "screening effects"), the interaction of components, even at the most trivial levels, could open up a vast area of unexplored options. Is it practical to review every change when third party components are updated? Probably not, but if the areas you are currently testing make use of those items, even peripherally, make a point of reading about and understanding the updates being performed, even if they seem to be relatively trivial.

Much of the time, the component changes will have no effect at all on what you are developing and testing. Sometimes, though, a change results in removing a mask, and that change will make it possible to see things you didn't see before. Much better to make those discoveries while testing, rather than in front of your PM when you want to have something signed off. In short, pay attention to the updates that happen around you. You might find out that those solid walls are not so solid after all ;).

Tuesday, March 12, 2013

This is a day that I've been waiting to see happen for quite awhile. For those who may remember, I started reading and covering ExploreIt! during the Summer of 2012. Through several beta revisions, I've seen the book grow and develop, and today it is now officially available in print form as well as e-book format. This isn't going to be a book review... I already wrote that ;). Nope, in this case, I'm here to discuss what Elisabeth will be discussing, which will be "The Top 5 Reasons Your Team Needs Exploratory Testing".

For those not familiar with Elisabeth and her background, Elisabeth is a tester, programmer and agile advocate. She believes strongly that Exploratory Testing is more necessary now than it was five or ten years ago. One of the points that she puts forth early on is that "Users do not (and often will not) complacently follow the path you set for them". In short, "you just can't trust your users to use your system the way that you hope they will use it". They might, but frankly, users are often unintentionally creative. We think we control the file system. We think we control the database. We even think we can control the user... we don't. In fact, the areas we really do have control over is very small. Thus, it's critical that we actually explore these areas that we can't trust.

Another point Elisabeth makes is that "no one can reason through all of the possible parameters of a change". Also, she makes the point that "sometimes things just don't connect the way you think they do". Additionally, the biggest goal and reason why exploratory testing is more relevant today than ever is that, if teams actually use these exploration tools, we will "increase the odds that if there is a problem, you will see it".

Short and sweet, direct and to the point, and now it's time to draw for books (ten of them, in fact). Must be present to win, and I WON ONE! YAY :)!!! Since I have all of the previous beta copies, I think I will give this to the test team over at Socialtext, so that everyone on my team can see the stuff I have been trying to evangelize all these years...

Monday, March 11, 2013

Hi all, the time has come, and in the nature of trying to be as fair as humanly possible, I chose to enter everyone in order of their submission, first entry gets a number, duplicate entries removed, and with that, a number was assigned from 1 to 21 and pumped through a random number picker. After all was said and done, here's the winning numbers:

* 4. Punkmik

* 6. Duston Diekmann

* 14. El Panaton

Congratulations, and I will now forward this to Packt Publishing so that they can honor the delivery. Note: as per the rules of engagement, those in North America and Europe will get a choice of E-Book or Paper book. those in other regions will receive the E-book only. Any questions, let me know now. Also, if I don't have your email address, please get that to me quickly :).

Sunday, March 10, 2013

I realized when I woke up this morning that today was the 10th of March. On this day in 2010, I made a commitment to do something and put my own voice to my discoveries of software testing and perhaps a few peripheral things as well. Three years later, I'd say that I have raised a rather opinionated and somewhat hyperactive three year old, but I really appreciate what he has brought to my life.

Three years ago, I realized I wanted to be more than a practitioner that was doing little more than going through the motions. I wanted to see if I was making sense. I wanted to see if the approaches I was using were any good, and if there were better ideas out there. I wanted a place to publicly state what I thought and believed, and maybe, just maybe, put out there for others to see that I was willing and able to put my own ego and vanity on the line to do something more, something I hoped would, dare I say, rise to greatness.

We often say that we can control our actions, but what is also true is that we cannot as easily control the results or the consequences of our actions. Like dropping a pebble in a pond, I have no way of knowing where those ripples in the water will ultimately go. I just know they will go somewhere, bounce off something, and go a different direction until they run out of energy. This blog was a big pebble drop, and over the course of three years it has brought me in contact with the Miagi-do School of Software Testing, the Association for Software Testing, the Black Box Software Testing courses, Software Test Professionals and the TWiST Podcast, Weekend Testing, The Pacific Northwest Software Quality Conference, the San Francisco and San Jose Selenium Meetup groups, Sidereel, Rovi Corporation, the San Francisco Ruby Meetup Group, the San Francisco Ruby on Rails Meetup Group, Th Conference for the Association for Software Testing (CAST), Selenium Conference, STAR EAST, STP-CON, and Socialtext, not to mention in contact with thousands of software testers all over the world, many of which I've had the pleasure to meet in person, and many others I hope to get the chance to meet at some point in the future.

As of today, more than 230,000 unique hits have been recorded on this site. So far in 2013, 500 unique hits a day has been the average. I know of 81 people who directly subscribe to my blog, and I'm guessing quite a few more just stumble across it from time to time. I have seen that there are many software testers from around the world that include TESTHEAD in their blog rolls and help direct interested people here. To all of you, I want to say thank you. It's been a great ride, and I plan to keep on going as long as I have energy to do it and as long as you all have energy to read it :).

Saturday, March 9, 2013

In a couple of weeks, we are going to take on something that we as a family have never done before. We are going to be hosting two girls in our home for a week.

These two girls are coming to the U.S. as part of a sister cities program between our town and Narita, Japan. Our daughter expressed an interest in being part of this program, and she's raised a fair amount of the money herself to be part of the contingent that will go to Narita in June. Of course, this intimates that there is a reciprocal arrangement, and yes, there is. That arrangement means that we ourselves will be hosting two girls from Narita, and they will be arriving in a couple of weeks.

On one side, this is exciting, and I'm happy that my daughters especially will probably enjoy this experience. On the other side, our house is set up for a family of five, it's not set up for anyone else, and over the next couple of weeks, I am going to have to make some changes to more effectively accommodate this. The first thing I'm doing is I am vacating my office for the time being. In addition to vacating as much of the closet space as I humanly can, I'm also relocating my office and the materials that I actively use so that they will have room to relax and call home in a reasonable, if not ideal, setting.

This is also a chance for me to see how I will do during this down time away from my so called "essentials". I've often long wondered if I could be effective with just a laptop and little else. This coming "habitation change" may help me see if I really can do that. Also, I've often talked about the ability to "do more with less". While I'm not willing to just get rid of a lot of stuff, it will be interesting to see what items are really good materials for both utility and reference, and how much is nothing more than dead weight.

Anyway, back to cleaning, de-cluttering, and de-junking. This time, it's not just for me, it's for people flying from half a world away. Talk about motivation :).

Thursday, March 7, 2013

Funny thing is, I think I owned every
one of those items at one point or another.

Over the years, I've had an ongoing debate. Which is better, having components that you can control the quality of and what you use or don't use, or all in one convergence, where everything is located in one device?

For years, I've been torn on this. I'm strongly a component man. I'd rather have the best gear to do the task I want to do for the effort, money and dedication I'm willing to give.

When I was a musician building my little MIDI studio, that meant I spent the coin and dedicated the space to having a synthesize, drum machine, and computer that ran a dedicated software application to do MIDI sequencing. The other alternative was to buy an all in one device that had everything in one. My logic always was that, if I decided I wanted to use a different sequencer, I could update just that piece. With an all in one device, if you didn't like an option, you were stuck with what you had, unless you were willing to sell off the whole unit and replace it with another, more powerful all in one device.

What's been interesting to see with devices like smart phones, tablets and ultralight portable computers, we're seeing a lot of these old technologies doing all of their actions in software. When I was looking at Audacity some years ago, I was amused and amazed at the fact that an entire bank of audio effects (a variety of rack mount effects processors with patch panels and MIDI connections for control) were represented as drop down selections and dialog boxes). I sniffed a little dismissively at first and said "well, that's cute and all, but it doesn't give me near the level of control or quality as my standalone tools". Back then, that was true. Now? Not so much. More to the point, the Digital Audio Workstation that I created twenty years ago, and spent a huge amount of money on for its time, is now completely replicated, and in many ways vastly advanced, by Garage Band, an app that's a freebie with OS X! Garage Band can now do things that were considered strictly the domain of high end tools like ProTools two decades ago.

I'm finding myself still chuckling about some convergence habits. I think people holding their iPads to use them as cameras or video recorders is still a bit odd, but hey, it's working for a lot of people, and its working well. The fact is, the dedicated pieces of hardware will still be available for those who really want the fine level of control, but I am finally starting to think that, perhaps in the next decade or so, that many of the tools most of us have relied on in the past will probably continue on this convergence path.

Will we reach the point where everything is done inside of some shiny tablet device that we talk to, intimate with, and get to do what we want? For many people, I think the answer will be yes, and it will be to a quality that's good enough that they'll be happy with it. Will I ever get excited about the quality of a picture taken with an iPhone compared to one taken with a top end DSLR? Probably not, but the truth is, for 99.9% of the photographic interactions most people have (candid snapshots of friends that they will share with others and receive comments on), good enough really is. Will I want to completely abandon all of my high end (well, it was at one time) music gear to interact with just a tablet? I don't see myself ever wanting to give up the tactile experience of my guitars or bass, or the physical dynamics of banging out a drum beat on the motley collection of drum pads I have hooked into my drum synthesizer, but I will admit that the idea of putting a podcast together with nothing but a tablet and prepared material is really appealing.

Convergence is happening, and at a hugely advanced rate. More of our physical world is becoming zeros and ones. "May we live in interesting times" is proving to be true, and what makes me even more excited... is someone has to test these converging interactions. Testers, for the sake of our craft and the future of what we do, we do indeed live in interesting times :).

Wednesday, March 6, 2013

As I mentioned in yesterday's post, I've been living in a different space for a little while, and for the foreseeable future, I'll be continuing in this guise. Which one? The one where I split my work day to be local in the afternoon, and then to be on a partial "graveyard shift", what I've been referring to as "Taiwan Time", since that's where some of our principal developers are located (I could also say India time, but hey, Taiwan outnumbers them).

Some have been looking at me and saying "oh, you poor thing!" or other such comments. First, it's OK, I volunteered for this. Second, the reason I volunteered to do this is I thought it would be fun. Here's the dirty secret... I was right!

Am I out of my mind?! Maybe, and that's kinda' the point. I'm working outside of my traditional boundaries. I'm not a late night person any more, haven't been for many years, since I somewhat retired as a musician, in fact. Necessity and long commutes helped convert me to an early morning person. For years, I said that I had a solid diurnal rhythm that I'd mastered (somewhat) and that became a habit and an excuse. I believed I couldn't do real heavy duty brain intensive work late at night. This arrangement is forcing me to re-examine that idea, and I'm discovering with the right preparation (plus some odd little things like bags of beef jerky and a few packs of sugarless gum, etc.) I can be very productive in the middle of the night.

It's an expensive proposition, and I sure don't want to make this a "permanent arrangement", but overall, I am genuinely having fun putting my brain in an "altered state" and making it adapt. In the process, I'm also getting to know developers that I rarely get the chance to interact with directly, plus we get to turn around stuff really quickly, and make great inroads much faster than we normally would. Overall, so far, not a bad arrangement. I'll let you know if my opinion changes ;).

Tuesday, March 5, 2013

Sometimes, despite our best efforts, we find ourselves in situations that are impossible to meet. We want to be able to meet what we have set out for ourselves, but there's just so much we can do. Even if we go into "superhero" mode, we still can only do so much. Something has to give. I have been living this for the past ten days, and I'm finally coming out of it.

First, let's talk about the first part of the title. What do I mean by Compression? For starters, it's an idea that was first, as far I can tell, given name by Merlin Mann. Compression is when you feel that you cannot let go of a commitment (or group of commitments) and as the deadline for those commitments gets close, and other things need to be addressed, the urge to cover everything causes an even greater push to complete. For me, a perfect storm of these conditions came to happen last week, and as such, they caused me to make some rather, shall we say, unique decisions.

First, a commitment to SummerQAmp. We agreed that the goal for March 1st was going to be inviolable, and what I had to deliver for that date would be ready. An issue with a large number of stories at work also took precedence. For those not familiar, Socialtext has historically been a distributed company. Many of our ace developers are located all over the globe, including a few in Taiwan and India. Needless to say, working on issues with that kind of time delay makes for a bit of a lag between development and test... but did it have to? Not if I was willing for a brief period to "live on Taiwan Time".

What that meant was that I would spend and extended period each night for a week from about 8:00 p.m. until 2:00 a.m. and be on the same schedule as our developers in Taiwan (as well as one of our developers who lives in India). This way, through IRC, I was able to work through issues, talk in real time about what I was seeing, get builds very quickly and test them. What might normally take several days was now being resolved in several hours. In between periods of time waiting for new builds, I'd shift focus and make sure that the materials for SummerQAmp were on track. This on top of working my regular shift and dealing with stories and issues closer to home. To say I didn't get a lot of sleep this past week would be an understatement. Still, it felt really cool to be able to work so closely with these remote developers and be there to help them resolve issues quicker, as well as get to know them a little better. While it's not something I want to make a long term habit of, for a week, it was actually lot of fun to interact this way.

Did I meet my goals? Actually, I think we did. I was able to deliver the bulk of what I hoped we would to the SummerQAmp team (reviews underway, likely to add more and revise some of what we have done) and the large group of stories is now moving its way towards deployment and release (knock on wood, I never take anything for granted). However, I did have to make one conscious decision... something had to give to make all this work, and that something was my PRACTICUM posts. I had thought, "oh, if I miss a day, i can easily get back to it." Well, 11 days later, it looks like I'm wrong on that front! Still, there's only so many hours, so much energy, and sometimes, life happens while you are making other plans. Good news, now that those compressed deadlines have come, been met, and I have some breathing room again, the PRACTICUM posts can resume once again.

Additionally, I've come to a not so startling conclusion... there are times for heroism and huge leaps of effort, but slow and steady, a little each day, really is a better way to go if you have the luxury of time and patience to do it.

Saturday, March 2, 2013

Today was an interesting Weekend Testing session, as they often are. More to the point, it was interesting because we looked at a topic we hadn't covered in WTA as of yet, usability as it relates to Mobile Devices.

For today's session, I decided to take out my Kindle Fire, load up the Facebook app, and see if I could actually make sense of the interface and what it was supposed to have me do. Others used the devices that they had available (and one participant commented that they were rather frustrated that they would have to use their iPhone as they'd much rather use their iPad Mini, proving the point that usability is indeed a moving target).

One of my first discoveries was that all of my old Messages that I had read on the desktop app were now marked unread. I had to scroll through a lot of messages to make sure how far back we went. In some cases, two years! Needless to say, there's some variance between what the the mobile app and the desktop app are sharing.
Another observation... The side bar controls lists something for "Close Friends", shows two names, and then is says "More Friends". As I am expecting it to expand and show me a list of "Close Friends", instead, it takes me to a listing of news feeds from all of my "Close Friends". Well, OK, I guess... except what I really wanted to see was a list of who was in that group. Before I got to indignant, though, i decided to do the same thing on my desktop app... and it does the same thing. So yeah, consistent, but still not what I would LIKE to have it do.

Justin asked us to consider a number of questions as we were doing these exercises:

Initial Learning:
How did you learn to use the software?
What made the experience difficult?
What made the experience easy?
What would make the software easier to learn?

For me, the biggest factor was that there are certain "standards" that mobile device designers use, and the more that apps use those standards, ultimately, the "easier" it is to learn. that's not to say that their system is the best design, but it's true that, if our experience is consistent, then it's safe to say that those apps that follow those standards are most likely to be picked up and adopted by lots of people.

Memorability/Learnability:
Was the functionality easy to recall? why? why not?
What would make the software more memorable?

Again, with this batch of questions, moving around the app and seeing where it took me was the way to actually understand and get a feel for these options. I am still one of those people who uses the back button to go from page to page, and it's becoming painfully obvious to me that that paradigm is not very helpful in the mobile space.

Error Rate:
Describe the errors you made while learning.
What lead to you making these errors?
What helped you to not make errors?
What improvements would help reduce user error rate?

For me, seriously, the error rate is largest simply because I'm not use to touching buttons and hitting keys that are represented as buttons. I'm not very fast, and my hands are not petite. as such I a make a lot of errors. Since I do, I often find myself wishing I could just pull out my laptop and just do what I want to do already. That also may be a simple conceit of my working with what I do and where I do. For many out there, their iPhone is really their only "computer".

Efficiency:
Were you able to use the software in an efficient manner?
Describe what made the product efficient or inefficient for you.
How would you improve the efficiency?

This was the toughest area, in that I really don't find mobile apps to be very efficient, and the biggest reason is real estate. With a laptop screen, I can perform certain tasks in two or three steps. ON a mobile device, I am finding that it requires six to eight steps to do the same thing. Multiply that by lots of interactions, and it's easy to see why, at least for me, I'm more willing to just wait until I can get on a desktop to do those things. For others, they think and do things differently,and that's all cool.

Mostly, this was a god session to get a number of testers together and discuss different aspects of usability, and to reiterate and rephrase what Jerry Weinberg said about quality:

Quality is value to some person (that matters).

We can just as easily say the same thing about usability. Usability is value to some person who matters, and in this case the person who matters is "us". We all will have different impressions about what is usable and what is not. The danger, though, is that we place to much of an emphasis on what WE consider usable. that may work in many cases, but it also may prove to be misleading. What I may find usable may be utterly unusable to someone else. Keeping an open eye and open mind, and getting multiple points of feedback is very helpful in this case.

Friday, March 1, 2013

Hmmm, too provocative a title? Well, it reflects the reality of a conversation we had last night, and it was just too good not to share.

Some background, last night at the Selenium Users Group Meet-Up, I met up with Chris McMahon, Zeljko Filipin and Ken Pier, my Quality Director at Socialtext. After the Meet-Up, we headed out to a local pub to talk shop and relive old war stories, of which their were many. Chris and Ken worked together at Socialtext a number of years back, and they were telling me about a number of decisions, changes, issues and other such things that led them to, by necessity, create the automation methods that they did.

Socialtext does something rather cool, if I do say so myself. As a wiki, and the fact that the Selenium test harness that we use leverages the wiki framework that we provide, in addition to the fact that we aggressively dogfood our own product, we also automate the vast majority of acceptance test cases created for any story. These acceptance test cases are converted into code and stored in our wiki page hierarchy. What this means is that our product actually tests itself. It has its own framework, it's own structure (which closely follows Selenese and Fitnesse standards), and it's easy to run just one test case or thousands of them.

The discussion changed over to a current series of comments that, if a test doesn't find any new bugs, then it's ultimately waste to run them. Chris and Ken were commenting on the fact that, while new discovery may well not be at the forefront of an automation test battery, what certainly should be is the idea that anything new didn't break something older. That's why those tests are kept, maintained and run regularly. As Chris was explaining a particularly challenging issue, he pointed out that "that battery of Automated Browser Tests (seen by many as not really offering value)... totally saved my ass on more than one occasion!" After a good laugh, Ken leaned over to me and said "hey, that would make for a good blog post"... and I agree :).

Reducing waste is important, reusing as much as we can efficiently is also a huge win, but sometimes, there really is a value to the tried and true and boring tests that never find an issue. They're really not designed to. They're designed to safeguard and help you know if something new you did has rendered other work compromised. Throw that work away, and you might not have an opportunity to work your way out of a troublesome spot. Sure, refactor, re-purpose, make efficient, but don't fall for a false economy. Confirm that what you use is providing value and is actually being used. If so, you may find yourself being spared a lot of heartache.

About

I have, for the better part of my 26 year career, found myself in the role of being the "Army of One" or "The Lone Tester" more times than not. This unique viewpoint, along with ideas and advocacy regarding continuous education and learning/re-learning for testers, is frequently the grist for the mill that is TESTHEAD.

Some additional details for those interested:

I am currently a software tester and release manager for Socialtext in Palo Alto.

I am the producer of the The Testing Show, a podcast sponsored by qualitest and also featuring Matt Heusser, Justin Rohrman, and Perze Ababa, with different special guests and topics every two weeks. I was the producer of, and a regular commentator for, the SoftwareTestPro.com podcast "This Week in Software Testing" (hosted by Matt Heusser, podcast ended its run in February of 2013).

I and a number of other software tester were actively involved in the development of the Software Testing materials being developed for SummerQAmp, a nationwide initiative to train a new workforce in tech skills and create tech jobs for America's youth.