Wednesday, December 02, 2009

Why testers need to learn to write code that works?

One of the things you thought I don't do often as a tester is - to write code. You are not completely wrong. I immersed myself all these days trying to be a tester who is /mostly/ black-boxish and interacts with the software through GUI. Did you read it as, "A black box tester doesn't need to write code?". Stop reading it that way! Read a sentence the way it is written and not the way you expect someone else to make a mistake that you like them to do.

You shouldn't be surprised to know that in the past I have written little tools, utilities and batch scripts that helped me or a test team I worked with. At the worst case I used to edit those scripts written by others to suit my needs or the mission. No matter how small they were, the value was the key.

Perl has been my favorite (you think I explored others enough, nah) since I first discovered it being used to automate checks in my first job. A couple of weeks back I decided to focus on shaping myself to be a tester who can write code in Perl for automating checks for most kinds of software I test. Irrespective of whether I am hired to do so or not, I'd want to be equipped.

In order to practice stuff that I learn in Perl, I decided to create exercises, puzzles and games for testers. That way I am trying to have more fun learning Perl. Perl itself is fun in its true nature and imagine adding more fun to it.

So wanna check out the puzzle I have for you? Hold on, don't be in a hurry.

You might want to consider reading what I experienced this time when I wrote code, found bugs in it, investigated them, fixed them, rejected a bug or marked it for future release.

Tester writing code

As a tester, writing code is such a beautiful experience. It gives an insight into why the programmer was reasonable (some times) when he wrote the code that way although it might have sounded unreasonable to you while you were testing it. It gives an understanding that his intention might not have been to write such a buggy code but there were things beyond his control such as a computer software that changed the behavior of the code when it was being executed. If you are lucky, you would understand that he is learning to code better as you are learning to test better.

I was using Komodo Edit for writing and editing code and I like it for its simplicity. I saved my code giving them a version number as and when I thought I made significant improvements to it. In one specific version I made a mistake trying to experiment a new idea and the code failed to even say "Hello World!". I had no track of the changes that went in to the current version as compared to the previous. I did a diff but then I realized I needed something more than a diff. So, a Tortoise has entered my system. It will start moving from my next experiment onwards. It took a bumpy ride to get a Tortoise in. Did I not know the value of Version Control? I have complained and whined about it in one of the previous organizations I worked for to maintain my test case documents. (Yeah, Pradeep wrote test cases and executed them a thousand times. Keep that aside.).

Writing code is a humbling experience for a tester. Go, write, code. (yeah, three, commas, in there)

Tester testing his own code

After being a tester who doesn't code much and then writing code and then ( and then: forgive my innovation in English ) testing it was a very interesting experience. I discovered that changing hats from a programmer to a tester isn't easy. When I tried testing the code I wrote, I was looking for basic flow failure of code. When I found a problem or two with the basic flow my thought process shifted, from finding more problems to fixing the ones that I had found. I was worried that something fundamental that was supposed to be working isn't appearing to work. I grew more curious to ensure basic work flows are fine. So bad. Being a tester I know what is basic to one might not be basic to others. I was contended that my code worked when those basic flows worked well. It was high time I needed a tester to test my code.

The target audience for my code was testers (yeah, you). I passed a version of it to Michael Bolton who was online (was busy) and he did a Q approach ( QPRADEEP - Quick - Practical - Deep ) on it. He suggested me things that would make the program more valuable that led me to write more code to it.

When I was testing my own code, I wasn't bothered about test coverage at all. When I am consulting or testing, "coverage" is always on the top of my head. I am known to question about coverage to almost every tester I talk to. Look at how beautiful my brain worked when I was testing my own code.

If you read the above as "Is he saying that this happens with every programmer testing his code?", I once again suggest you to read it the way it is written and not the way you expect someone else to make that mistake that you would like them to do. Don't be offended if you did read that way, most of us have a disability in reading and understanding. Its fixable.

Tester fixing bugs while investigating them


This is another important experience a tester should have. It helps in understanding that programmers might have made real attempts to fix a bug and yet it escaped in a different way. It also helps in understanding that standard test cases won't help in capturing the escaped-in-a-different-way bug and they need exploratory testing for investigating if-the-bug-really-got-fixed. If testers report symptoms of a problem and those symptoms are fixed, the problem still remains. So, it helps a tester to be careful in asking if he is reporting a symptom or a problem.

Let me give you a simple example from my code:

 if (($x == "\n") || ($x == "\t") || ($x eq ""))
                {
                  print "That's not valid according to me! Please try a number";
                  &ask_for_a_number_or_reject_input ;  # sub routine call to seek a number from the user
                }

What do you think I wanted to do by this?

If a user is providing a blank input or a new line or a tab, ( I am OK with some text but not blank input ) I wanted the program to ask the user to enter what I think is a valid value and keep doing that till the user provides one or exits the program.

You might see that I used "==" in a context where I needed Perl to do variable interpolation and "eq" in a context where I did not want it to do so. Here comes the interesting thing, somehow the program was not getting into this if loop at all. When I got to the prompt I hit an enter without entering an input with a hope that I would see the print statement "That's not valid according to me! Please try a number" being executed and then the subroutine call. I just didn't see it and was terribly disappointed. Instead of rejecting that input it took the value "0".

So, what's the problem and how would you report it?

A part of my investigation involved suspecting usage of chomp which eliminates the "enter key input" from the user input. So, experimented with chop and found other kind of problems that happens with chop for the program I was writing. Should I store the input in a temporary variable and regex it for any new line, tab or blank input or continue doing it the way I was?

Learning to code (and coding) is an exploratory process. While the book might say use "==" when you want variable interpolation and "eq" when you want to match text and no to avoid interpolation, it takes a couple of experiments and situations like these to really get the wiring in your brain to learn to use it wisely and identify if they are causing any problems.

What is not visible to you here is that the problem was occurring because of a mistake I did much above this piece of code :)

So, a problem that appears to a tester in one way might appear to a programmer in a different way.

Curious to see if this problem got fixed? Hold on, don't hurry up.

Tester maintaining the code for reuse

I didn't write couple of hundreds of lines of code but just a dozen tens. Chee, if someone is really good in Perl they'd have written it with much smaller footprint. Well, I will get there, don't hurry up :)

Although there were just a dozen tens of lines of code, I chose to comment on some of the important parts. Have you been in a situation of being unable to read your own handwriting? I have, just shy of a hundred times, maybe. I know I could forget why I wrote the code the way I did after an year of learning to write better code. I cant go back and be as stupid as I was to know why I did that. So, it is better to speak_aloud_your_stupidity so that the better you understands why you did so. The better you might have better ideas when you know the reason of why you wrote the code that way and what you intended to do with it. Forget yourself, think about others. I once was given a job to edit some scripts. I spent an hour to just edit a few lines and then proposed a cost saving technique to my manager - to re write the code. My dear colleague had obfuscated the code without knowing that he was doing it. Code that works today does not necessarily mean maintainable code for the future. Now, I think he is obfuscating elsewhere.

I am increasing my sense of appreciation towards good programmers as and when I see what my code does does versus what I thought it would do. That's a long mile of learning to me. It will help me work with developers much better in future.


Isn't it high time I allow you to play with the program?
  • The program you are about to download is a puzzle.
  • Your mission is to reverse engineer the logic of the program.
  • When you find "Nemo" dont be excited that is just a small part of the whole puzzle.
  • Finding Nemo is very easy but reverse engineering the logic is where the challenge for you is.
  • Please send your reverse engineered logic and or experience report to pradeep [/dot] srajan [/at] Jee mail [/dot] com. Got it?
  • Its not necessary that you crack the puzzle but it is necessary how your journey to crack the puzzle is.
Download this guy (which is an exe file). I know your organization might have blocked all exe downloads so I have a xex version ( which you have to change to exe after download ). You got a Mac? Ah! I got a exe :(

So, go find Nemo, send me your experience report / reverse engineered logic or just silently pass it on. Blub Blub!

Saturday, November 28, 2009

Weekend Testing : 16 : Test and Experience Report

Mission: To find three conditions where Defender wins, Defender loses, and Neither Defender wins nor Attacker Wins for SpeedSim.

Deliverable: Send the combat report of the simulated battle for each of the conditions in a zip file.

Tester: Pradeep Soundararajan
Time: 3:00 PM IST , 28th Nov, 2009

Later there were more missions that were added (bad I didnt pay much attention but was able to recover quickly )

Notes:

# I downloaded the application and asked questions about the version of the file before I installed.
# Having some time, I discovered the existence of an online version of what I downloaded and installed.
# I am spending time trying to learn what the application does. Wondering how I should learn this game.
# Found a tutorial of what this app is all about at : http://www.speedsim.net/index.php?page=tutorial. Quickly brushing through it.
# Working on achieving the mission at 3:20
# At about 3:35, I feel I am close to accomplishing the mission but not sure if there is a trap in there.
# I wonder what a partial win is? For instance in one of the report below I saw a 98% win for Defender ( Can I achieve a 50% win )
# I realize that I am not getting caught by the complexity of so many fields to achieve the mission. Keeping it simple.
# As I was too focused on the mission give, I missed the opportunity of learning the other two mission.
# Registered myself at barym.ogame.org to play the actual game for which I am using the simulator.
# Created an account at websim.speedsim.net to keep track on the portal and playing the simulator online.
# Turns out that the third mission is to find a blocker : Testability is a huge blocker. I am not sure if there is logging as well.
# Figured out that the second mission is: There seems to be a lot of data on the combat report, can you find out from where those values are populated.
# Finishing the report without focusing what was happening on the discussion chat of experience reporting.
# There was a German national Maik Nogens who participated and I hope he picked up the Deutsch language pack for this program.


Issues: ( although we weren't supposed to be finding them, they just danced )

# Large values on each side and then breaking the simulation results in crash of the app. Consistent with all three attempts I did. ( Screen shot available )
# Testability is a major concern however I think it might be solved if I am given how to build a Load Fleet Template file.
# Thinkpad Wireless Connectivity Manager (Thinkvantage Connections ) crashed mid way through my testing although internet was still alive. Not sure if this got anything
# to do with what I was doing with the application.
# I notice that when I move from English to other language ( lets say Deutsch ) the result still remains in English while other fields are changed to Deutsch.


Mission 1: Three conditions of Attacker win, Defender Win, Draw Result

Draw #1

Input: All values default null

Battle results:

Battle on: Fight at Unknown [x:xxx:x]
Result: | Draw (100%) | after ~ 1 rounds
Debris Field: 0 Metal (0%), 0 Crystal (0%) max. 0 Recycler
Losses Attacker: 0 Metal, 0 Crystal and 0 Deuterium
Losses Defender: 0 Metal, 0 Crystal and 0 Deuterium
Moonchance: Not enough resources in the debris
Theoretic Plunder: 0 Metal, 0 Crystal and 0 Deuterium ~ 0 Large Cargo
Real Plunder: 0 Metal, 0 Crystal and 0 Deuterium (0% Booty)
Needed Fuel: 0 Deuterium (Recycler: 0 Deuterium)
Flight times: 00:00:00 h (Recycler: 00:00:00 h)
Plunder from Waves: 0 Metal, 0 Crystal and 0 Deuterium after 1 attacks (max. 0 Recycler)

Draw #2

Input : Attacker Small Cargo : 2 : Defender : Small Cargo 10 : Rest all : Default Null

Battle on: Fight at Unknown [x:xxx:x]
Result: | Draw (100%) | after ~ 6 rounds
Debris Field: 0 Metal (0%), 0 Crystal (0%) max. 1 Recycler
Losses Attacker: 0 Metal, 0 Crystal and 0 Deuterium
Losses Defender: 0 Metal, 0 Crystal and 0 Deuterium
Moonchance: Not enough resources in the debris
Theoretic Plunder: 0 Metal, 0 Crystal and 0 Deuterium ~ 0 Large Cargo
Real Plunder: 0 Metal, 0 Crystal and 0 Deuterium (0% Booty)
Needed Fuel: 0 Deuterium (Recycler: 0 Deuterium)
Flight times: 00:00:00 h (Recycler: 00:00:00 h)
Plunder from Waves: 0 Metal, 0 Crystal and 0 Deuterium after 1 attacks (max. 1 Recycler)

Draw #3

Input : Attacker Bomber 3: Defender : Heavy Fighter 20: Rest all fields : Default Null

Battle on: Fight at Unknown [x:xxx:x]
Result: | Draw (100%) | after ~ 6 rounds
Debris Field: 28,800 Metal (0%), 19,200 Crystal (0%) max. 5 Recycler
Losses Attacker: 0 Metal, 0 Crystal and 0 Deuterium
Losses Defender: 96,000 Metal, 64,000 Crystal and 0 Deuterium
Moonchance: Not enough resources in the debris
Theoretic Plunder: 0 Metal, 0 Crystal and 0 Deuterium ~ 0 Large Cargo
Real Plunder: 0 Metal, 0 Crystal and 0 Deuterium (0% Booty)
Needed Fuel: 0 Deuterium (Recycler: 0 Deuterium)
Flight times: 00:00:00 h (Recycler: 00:00:00 h)
Plunder from Waves: 0 Metal, 0 Crystal and 0 Deuterium after 1 attacks (max. 5 Recycler)

Attacker Wins #1

Input : Attacker Small Cargo 1: Rest all default null for Attacker and Defender

Battle on: Fight at Unknown [x:xxx:x]
Result: | Attacker wins (100%) | after ~ 1 rounds
Debris Field: 0 Metal (0%), 0 Crystal (0%) max. 0 Recycler
Losses Attacker: 0 Metal, 0 Crystal and 0 Deuterium
Losses Defender: 0 Metal, 0 Crystal and 0 Deuterium
Moonchance: Not enough resources in the debris
Theoretic Plunder: 0 Metal, 0 Crystal and 0 Deuterium ~ 0 Large Cargo
Real Plunder: 0 Metal, 0 Crystal and 0 Deuterium (100% Booty)
Needed Fuel: 0 Deuterium (Recycler: 0 Deuterium)
Flight times: 00:00:00 h (Recycler: 00:00:00 h)
Plunder from Waves: 0 Metal, 0 Crystal and 0 Deuterium after 1 attacks (max. 0 Recycler)

Attacker Wins #2

Input : Attacker: Small Cargo 500 : Defender 0 :: Weapons Technology : Attacker 1: Defender 1 : Combustion Drive 1: Rest all : Untouched/default null.

Battle on: Fight at Unknown [x:xxx:x]
Result: | Attacker wins (100%) | after ~ 1 rounds
Debris Field: 0 Metal (0%), 0 Crystal (0%) max. 0 Recycler
Losses Attacker: 0 Metal, 0 Crystal and 0 Deuterium
Losses Defender: 0 Metal, 0 Crystal and 0 Deuterium
Moonchance: Not enough resources in the debris
Theoretic Plunder: 0 Metal, 0 Crystal and 0 Deuterium ~ 0 Large Cargo
Real Plunder: 0 Metal, 0 Crystal and 0 Deuterium (100% Booty)
Needed Fuel: 0 Deuterium (Recycler: 0 Deuterium)
Flight times: 00:00:00 h (Recycler: 00:00:00 h)
Plunder from Waves: 0 Metal, 0 Crystal and 0 Deuterium after 1 attacks (max. 0 Recycler)

Attacker Wins #3

Input : Attacker: Battleship 1: Defender : Heavy Fighter 1: Rest all fields: Default null

Battle on: Fight at Unknown [x:xxx:x]
Result: | Attacker wins (100%) | after ~ 1 rounds
Debris Field: 1,800 Metal (0%), 1,200 Crystal (0%) max. 1 Recycler
Losses Attacker: 0 Metal, 0 Crystal and 0 Deuterium
Losses Defender: 6,000 Metal, 4,000 Crystal and 0 Deuterium
Moonchance: Not enough resources in the debris
Theoretic Plunder: 0 Metal, 0 Crystal and 0 Deuterium ~ 0 Large Cargo
Real Plunder: 0 Metal, 0 Crystal and 0 Deuterium (100% Booty)
Needed Fuel: 0 Deuterium (Recycler: 0 Deuterium)
Flight times: 00:00:00 h (Recycler: 00:00:00 h)
Plunder from Waves: 0 Metal, 0 Crystal and 0 Deuterium after 1 attacks (max. 1 Recycler)


Defender Wins #1

Input : Attacker Small Cargo 1: Defender Small Cargo 7

Battle on: Fight at Unknown [x:xxx:x]
Result: | Defender wins (98%) || Draw (2%) | after ~ 6 rounds
Debris Field: 600 Metal (30%), 600 Crystal (30%) max. 1 Recycler
Losses Attacker: 2,000 Metal, 2,000 Crystal and 0 Deuterium
Losses Defender: 0 Metal, 0 Crystal and 0 Deuterium
Moonchance: Not enough resources in the debris
Theoretic Plunder: 0 Metal, 0 Crystal and 0 Deuterium ~ 0 Large Cargo
Real Plunder: 0 Metal, 0 Crystal and 0 Deuterium (0% Booty)
Needed Fuel: 0 Deuterium (Recycler: 0 Deuterium)
Flight times: 00:00:00 h (Recycler: 00:00:00 h)
Plunder from Waves: 0 Metal, 0 Crystal and 0 Deuterium after 1 attacks (max. 1 Recycler)

Defender Wins #2

Input Attacker Small Cargo 2 : Defender Small Cargo 10

Battle on: Fight at Unknown [x:xxx:x]
Result: | Defender wins (100%) | after ~ 2 rounds
Debris Field: 1,200 Metal (30%), 1,200 Crystal (30%) max. 1 Recycler
Losses Attacker: 4,000 Metal, 4,000 Crystal and 0 Deuterium
Losses Defender: 0 Metal, 0 Crystal and 0 Deuterium
Moonchance: Not enough resources in the debris
Theoretic Plunder: 0 Metal, 0 Crystal and 0 Deuterium ~ 0 Large Cargo
Real Plunder: 0 Metal, 0 Crystal and 0 Deuterium (0% Booty)
Needed Fuel: 0 Deuterium (Recycler: 0 Deuterium)
Flight times: 00:00:00 h (Recycler: 00:00:00 h)
Plunder from Waves: 0 Metal, 0 Crystal and 0 Deuterium after 1 attacks (max. 1 Recycler)

Defender Wins#3

Input: Attacker Battleship : 1 : Defender : Heavy Fighter 100 : Rest all fields: Default Null

Battle on: Fight at Unknown [x:xxx:x]
Result: | Defender wins (100%) | after ~ 1 rounds
Debris Field: 15,300 Metal (34%), 5,700 Crystal (38%) max. 2 Recycler
Losses Attacker: 45,000 Metal, 15,000 Crystal and 0 Deuterium
Losses Defender: 6,000 Metal, 4,000 Crystal and 0 Deuterium
Moonchance: Not enough resources in the debris
Theoretic Plunder: 0 Metal, 0 Crystal and 0 Deuterium ~ 0 Large Cargo
Real Plunder: 0 Metal, 0 Crystal and 0 Deuterium (0% Booty)
Needed Fuel: 0 Deuterium (Recycler: 0 Deuterium)
Flight times: 00:00:00 h (Recycler: 00:00:00 h)
Plunder from Waves: 0 Metal, 0 Crystal and 0 Deuterium after 1 attacks (max. 2 Recycler)

Interesting Result #1

Input: Battleships Attacker 1 : Defender 1

Battle on: Fight at Unknown [x:xxx:x]
Result: | Attacker wins (31%) || Defender wins (32%) || Draw (37%) | after ~ 3 rounds
Debris Field: 27,000 Metal (60%), 9,000 Crystal (60%) max. 2 Recycler
Losses Attacker: 45,000 Metal, 15,000 Crystal and 0 Deuterium
Losses Defender: 45,000 Metal, 15,000 Crystal and 0 Deuterium
Moonchance: Not enough resources in the debris
Theoretic Plunder: 0 Metal, 0 Crystal and 0 Deuterium ~ 0 Large Cargo
Real Plunder: 0 Metal, 0 Crystal and 0 Deuterium (100% Booty)
Needed Fuel: 0 Deuterium (Recycler: 0 Deuterium)
Flight times: 00:00:00 h (Recycler: 00:00:00 h)
Plunder from Waves: 0 Metal, 0 Crystal and 0 Deuterium after 1 attacks (max. 2 Recycler)

Interesting Result #2

Input: Attacker : Destroyer : 100 : Deathstar : 1 : Weapon Technology 2: Defender: Destroyer 100: Deathstar 1: Weapon Technology 1

Battle on: Fight at Unknown [x:xxx:x]
Result: | Attacker wins (1%) || Draw (99%) | after ~ 6 rounds
Debris Field: 3,222,000 Metal (64%), 2,685,000 Crystal (64%) max. 465 Recycler
Losses Attacker: 5,040,000 Metal, 4,200,000 Crystal and 1,260,000 Deuterium
Losses Defender: 5,700,000 Metal, 4,750,000 Crystal and 1,425,000 Deuterium
Moonchance: Chance that a moon arises is 20%
Theoretic Plunder: 0 Metal, 0 Crystal and 0 Deuterium ~ 0 Large Cargo
Real Plunder: 0 Metal, 0 Crystal and 0 Deuterium (100% Booty)
Needed Fuel: 0 Deuterium (Recycler: 0 Deuterium)
Flight times: 00:00:00 h (Recycler: 00:00:00 h)
Plunder from Waves: 0 Metal, 0 Crystal and 0 Deuterium after 1 attacks (max. 465 Recycler)

Mission 2:

# I still feel Testability as a major blocker here as the tester might lose interest with the painful task of providing an input to each field and not having
a tool that could do for him or maybe the support of the program to feed in random values for testing purposes.

# Plus, what about logging?

Mission 3:


# I downloaded the source for the application from sourceforge and there appears a file in the source code called simfuncs.cpp ( a c plus plus program )
that appears to do the calculations for processing the values and I suspect that it is from here those fancy values are spurted out from such files the report.

# I searched for things like Moonchance, Deuterium but didnt find any results from it although simfuncs.cpp was the file that had code to do with
win and loss of attacker and defender.

# I need to study the code for a while to make a conjecture of where is this stuff coming up from and that's the best I could do with Mission3 in the given time.

# I suspect that there could be a different interpretation of this mission by others and I am being open to what it was. Given the time frame, I did a Q approach ( that's the Quick approach among QPRADEEP - Quick Practical Deep )


Learning from this session

#  I initially hit upon complexity and then discovered that the mission#1 could be accomplished with simpler inputs. Its a re-iteration of my belief to practice attacking simpler ones.

#  I was reminded of defocusing heuristic when I didn't look into chat room for a while to discover people were discussing about Mission #2 and #3.

#  I should have asked questions on is there any more information that is hiding but in this context I thought achieving the first given mission was THE mission.

#  No big deal because I recovered quickly from it and kinda worked OK on Mission #2 and Mission #3.

#  I wonder why testers lament that they haven't done a good job and yet don't focus on improving their skills.

#  I think facilitating at Weekend Testing has improved but the tool used ( Gtalk ) to communicate is very poor.

#  This exercise was focused on how quickly can a person learn. Learning is an essential skill for testers ( and other human beings )

#  I enjoyed the discussion (argument) part of the session and not that I didn't enjoy the learning one :)

Arguments

#  During discussion someone was talking about the mission statement not being clear and I was not too happy about it. So, I was talking about situations
#  close to what we experience where most times most managers cant give a clear mission to work on and we have to deal with it.
#  Hey, we could question and find more information if we don't understand.
#  The fun part was, I didnt understand when the person wrote "Problem statement should be clear in scope" to what exactly he meant by that.


#  Sharath talked about mission not being challenging enough. I think sometimes there is no big challenge than things being straight forward.
#  I thought Sharath had a good argument but I am afraid he did not: He was talking about the mission so simple that he could complete it in 20 minutes.
#  Santhosh Tuppad and Maik also joined him to say that the mission was simple. My question is : What about reporting?
#  How about practicing reporting within the time frame given? For instance I am completing this report in 2 hour session plus discussion time.
#  Just in case if I have failed to meet the first mission ( which they'd come to know through this report ), they'd probably understand why it wasnt all easy.
# There came a black swan: Deepak announced that he didn't work on Mission 1 because he didn't understand how to go about it. That must be interesting for Santhosh and Sharath.
# I am sure Sharath may pick up a discussion on this topic when we meet soon, maybe even tomorrow. I like the idea of getting into discussions with people that arise out of a testing session. Its going to be fun.
# Santhosh had a diplomatic conclusion by saying: It depends on individuals and hence this was good. I wish he was more arguing.
# I violated the deliverable by making it as a blog post as well. I think that's fine.
# Published at 5:06 PM IST Nov 28, 2009, just before the formal end of the session.

_ Completed mission and report preparation at 5 : 03 PM IST 28th Nov 2009 _

Friday, November 13, 2009

Rahul Verma on Fuzzing for software testers : Nov 23, 2009

I think I was stupid to have missed mentioning this tutorial from Rahul Verma on Fuzzing for software testers in my previous post. My apologies to all testers from India for overlooking at our own indigenous talent. Rahul, please forgive me.

Fuzzing is a very interesting topic and I dont want to loose out on attending his session in Bangalore.Have you ever corrupted a file? Have you been curious to see what happens to your system when the database is corrupted? What happens to a live / production server if a file is corrupted? Have you ever experienced a file/data corruption at the customer end and the ripples it caused your organization. I know its very important and thankfully Rahul has focused on it much beyond most of us. If I could better my fuzzing skills, I can extend my competitive advantage.

Once I was a part of a test team whose responsibility was to test multimedia streaming on a Pocket PC. Pesticide Paradox kicked in and our test data was no longer helping us to find problems.

  • With the help of a few multimedia content generators, we generated test data that astounded the whole team with the volume of the problems it helped us find. We had lots of media clips whose configuration was perfect and as per requirement - the player and pocket PC should play. They were doing fine but the moment we introduced a real media file derived from an mp3 file which in turn was derived from a real media file, we found some amazing bugs.
  • Imagine, taking a file, converting it to format A to format B and then reconverting it to format A. Is the end result file supposed to be the same as how it started?
  • Imagine opening an input file as a binary and take out the End of File indicator, how would the system handle it?
  • Wow! I dont know how it makes you feel but to me I am so much excited of how the system will respond?
  • I know about a few ways of corrupting data and packets. I am sure my armory of test ideas is going to expand after attending Rahul's session.

Fortunately, there is a week's time for us to register. To know if it is worth the money, here is my recommendation about Rahul Verma:

I have personally interacted with him and think he is unique. He is well read, focused, 10000% more disciplined than me, honest, a rare breed of performance-security-automation combo guy. A great presenter, you will be spell bound with his presentation skills. I cant take a minute of my eyesight out if this guy is presenting.


What worth is my money in bank if I cant spend it to learn things that makes me a better tester. Oh, you think I am rich? Yes, I am and it indicates that my investment plans have been good so far. Here is my next systematic investment:

To Conference Organizers : Here is my registration for this tutorial. I am participating, block a seat for me.

Monday, October 26, 2009

Title 1: Investment plans for software testers. Title 2: Michael Bolton RST training in India

Is it a best practice that a post should have only one title? ;-)


Sharath Byregowda has won the Best Performer award at Mindtree. You know what it means to win the best performer award in an organization that has about 8000+ technical force. According to Mindtree there was a special guest who was invited to give away that award and that special person for them that day was me.

Sharath's manager, Murugan, wanted to make the award ceremony a very special one and surprised Sharath by bringing me in for the award ceremony. A manager so excited about giving away an award of Best Performer of the organization to his subordinate - made me feel wow. While traveling together to Mindtree office, I discovered that Murugan had a good diversity throughout his career and even tried doing business in the United States long ago with his friends. With all that experience, he thought, freedom plays a vital role in testing and hence provided it to Sharath who seeked it. India needs more Murugans. I think they have lot of Sharaths out there.

Freedom with responsibility made Sharath get him the award. This is the second time my student is getting an award at the organization level. Most of you might not know much about Shaham Yusuf but then he won awards for slogging important bugs and an unmatchable record of the highest number of important problems found in Deloitte India.

Of course my other students are doing very well. I wish they fail as much as they seem to do well and I think failing early gives them a better edge over the future.

Parimala also got noticed and was blogged about by James Bach and mentions by Michael Bolton and Chris McMahon . Ajay Balamurugadas, Manoj Nair, Sharath and Pari are being noticed for their contribution of Weekend Testing and Fiona Charles personally appreciated their effort and it also got mentioned by Anne Marrie and Michael Bolton. Ajay won several scholarships at STC and also is a student of Heusser's Miagi Do School of Testing. Sathish Kumar Chinappa is another interesting exploratory tester who is one of the most sought out tester of Cognizant Technologies. Look at his brilliance: He came forward to teach exploratory testing - no one came forward to listen - he then created his own self certified exploratory program and that has attracted testers in CTS. He is running the second batch now. Santhosh Tuppad, a rookie tester is also going to be great guns in future. There are more names...Mohit, Jassi, Rajkumar Pandian, Tarik Seth, Satabdi Roy, Bhargavi... and more names...

In Sharath's award ceremony he spoke about how a coffee with Pradeep changed his whole life but I think what changed his life was himself and his ability to be responsible when freedom is provided. That is exactly what I see in others.

Half of them have already surpassed me by finishing the BBST Foundations and graduating to Bug Advocacy. Others are on their way.

Thanks a lot folks! You make me proud and you were kind enough to allow me to call you as my students. I know you will keep making me proud and push me beyond my current boundaries.

So, here is a self interview:

Pradeep: Now what's all these to do with the title?

Pradeep: All these Indian testers names you see here including mine have one thing in common: Our investment strategy has been working well. We invest our money and time on learning and practice.

Pradeep:What's great, everybody does that, right?


Pradeep: I remember a quote from Jerry Weinberg which is like.. "When you buy a degree, education is an option. Most often people drop the option." and I feel this is what is happening.


Pradeep: So whats your observation about testers in India?

Pradeep: Of course, most of them think they need their organization to sponsor even to attend attend a workshop that they know is of a lot of significance in their career. They are unwilling to spend from their pocket because they think its too expensive to spend from their pocket. I dont understand what is their idea of expensive. Of course expensive compared to what?

I personally wouldn't allow an organization to limit my growth and learning as a tester.


Pradeep: Did all your students pay from their pocket?

Pradeep: No, some of them did. Others, I met them at a corporate workshop. Sharath was wanting to pay from his pocket but I said if you want to be my student, the first trap you have to clear is to get your organization to sponsor you. It was a trap because his organization had a lot of internal trainers and inside-their-organization-context experts whom he had to face and explain what is different about the workshop.

Pradeep: So, whats your recent investment? How is this going to help you be a better tester.


Pradeep: I went to a book store, invested my one hour reading a book for free :) and then picked up a few books: Black Swan and the first copy of Secrets of a Buccaneer Scholar plus a few other books on questioning God. I gifted Sharath a DVD of Sherlock Holmes for his award and Pari a Moleskine and a DVD of Shawshank Remption. Gifted Santhosh a book - Lessons Learned in Software Testing on the occasion of his joining his first full time testing job. All costing more than about 2000 rupees. I make such investments twice a month. When I cant afford a book, I sit in Landmark book store, complete reading the book, make notes and come back. I talked to the Landmark manager at Swagath, Bangalore who permitted me to spend any amount of time reading any number of books for free. Those who complain that they cant afford books are merely saying "grapes are sour".

The book Black Swan starts with the story of how people were fooled by the notion that swans are always white untill the discovery of Black Swan. Just reading the prologue made me think if in testing I have been thinking of a swans-being-white-only. So, I am in that thought process and questioning myself. I am going to use this book to help me question my own ideas.

Secrets of a Buccaneer Scholar book by James is a kind of an autobiography of the man I believe is my first Guru in testing. I am going to always look into it for gaining confidence if it happens to drop. James promised me to gift me a signed copy of his book on my birthday but he became busy ( a gentle reminder James ).

Gift to my students, well, I am sure they will get back to me with their learning from it. So, I am going to learn new things from it.

Pradeep: Wow! That sounds cool. So, what investments are your students doing?


Pradeep: They are currently registering for Michael Bolton's workshop on Rapid Software Testing for Testers, Leads and Managers in Bangalore and they are taking out about 20K from their pocket or even more to attend it.


Pradeep: Hey, 20,000 rupees is a lot of money in India. How are they able to afford it?

Pradeep: Well, I know how they are able to afford for it. They are looking at cost versus value. They have been reading Michael's blog and articles. They know the value is going to surpass the cost. Of course this is Michael Bolton's 7th visit to India and he has an amazing skill of connecting with the way testing is done here at India. They also are aware that the ideas and thought process that they might gain might help them progress in their career much faster than they would have without it. Michael's vision and way of presenting information is something unique and you may have a look at an example of it: www.developsense.com/presentations/e2008twofutures.pdf



They think its cheap because they see it this way: If they were to attend his workshop or of James which doesnt happen in India as often as in North America, they have to travel + afford the US dollar costs. Well, isn't it cheap?

Pradeep: So, is he here just for the workshop?


Pradeep: Oh, I forgot. There is more fun you could have at a conference he is keynoting. Please check out these links:

http://www.qaiglobal.com/minisites/stc-2009/vision_stats.htm

http://www.qaiglobal.com/minisites/stc-2009/michael_bolton.htm

http://www.qaiglobal.com/minisites/stc-2009/speakers.htm

Plus, you can meet a lot of other interesting people from India at the conference, including, Gangadariah, Head of Testing - Wipro, Minal Deshpande, Head of Testing, Deloitte, Meeta Prakash, Infosys, and I am hoping my Indian heroes, Vipul and Ashok joins, too.


Pradeep: Well, so you propose investment of money and time on learning and practice as a good plan for testers with high returns?

Pradeep: Exactly. Investment of time and money on learning and practice can make you rich - in skills and in your career. Once you have the skills that others don't or you have it to an extent that others want to learn from you then money would come to you. For instance, in IPL Kevin Peitersen was the most expensive player to bid. Why was that? Because his name was unique?:)

When I started to offer workshops, I never thought people will pay from their pocket to attend my workshops but they did. Some even came down from Mumbai, Chennai, Pondicherry, Mysore, Trivandrum to attend it. They all proved me wrong.

There is a strong evidence that I have that Indian testers are changing ( no that doesnt mean the scene of testing in India is changing because we are in need of more Murugans ). See you at Michael Bolton's workshop and at the conference.

Make up your mind and get an early bird discount. Stop cribbing about money, lead a rich life. Rich in knowledge and skills, if not money. Register by sending an email to Akshay or call him at  +91 98451 76034.