FireShot
I found really cool web page capture program over the holiday call FireShot. FireShot is a simple tool that lets you capture and annotate web pages. I needed something that would capture more than a simple screenshot since I couldn't size the page small enough to fit it into one image. This was perfect. Snap the shot, mark it up, send it off. Simple - and it's just a browser plugin. Check it out.
Area highlighter trick
This feature - mouse pointer highlighting - was not available in the "original" Windows XP. At least, I've never seen it in the versions I had.

But I found it quite useful lately. It does not help in finding bugs, but it greatly helps with screen demos and walkthroughs.

How it works.
Once enabled, hitting Control produces flashing circles at mouse pointer's location.
Highlighter
Keyboard shortcuts
With an N-tier applications testers may have to go under the Web presentation layer. For example, that could be a configuration program running on Windows Desktop. Or you may have to work with UNIX programs, directly or through a terminal emulator program. Some UNIX programs are simply called from the command line. Some other may have a sophisticated user interface, with "windows", "menus", "pop-up dialogs", and keyboard shortcuts. Today's tip is about the latter.

Track the "life span" of keyboard shortcuts to see if they are enabled/disabled on timely manner. Because, if they're not, you'll be able to bring a program into a really weird state.

As for Windows Desktop applications, track if keyboard shortcuts are defined consistently across different modules, and do not override standard meanings. That is, if "Quick Save" command is "Ctrl-S" in one module, it should not be "Alt-S" in another.
A Fly in the Ointment
Frankly, I picked up the idea of this technique after reviewing source code validating some input. I remember, programmers even called it "cheating". But since then, I successfully tried it on different applications without having an access to the source code - so, obviously, there are some patterns.

The idea


User data traverse through a few validation layers. What is valid at one layer, might be invalid for another. Data also get transformed and fed into other modules which may or may not have comprehensive validation of internal input.

The idiom


 "A fly in the ointment" means a small defect that spoils something valuable or is a source of annoyance while being even in a tiny proportion.

The heuristic


Creating combinations of valid and invalid data sometimes allows passing through, or triggers a program to transform data into something causing problems internally.

A few examples in today's tip.

Some "restricted" characters



  • Backslash (\). This character is used to "escape" other system characters, and to create system commands as well.

  • Less than (<), Greater than (>), Ampersand (&). These characters have a primary meaning as tags in mark-up languages.

  • Space character.

  • Asterisk (*) is used as a wildcard in queries and regular expressions.


 

Some combinations to try



  • Valid inputs wrapped up by tag characters. Examples: "<123>", "</123>"

  • Restricted characters "escaped" with a backslash. Examples: "\&", "\\"

  • System commands created with a backslash. Examples: "\d", "\t"

  • Asterisk alone or in combination with a valid input. Examples: "*", "Toronto*"

  • Space characters before, after, or around delimiters. Examples: " 123", "1. 23"


 

Armed with the examples provided above I went on the hunt and picked a couple of publicly open web-sites belonging to large organizations...

You can see results below.

 

Error1

Error2
Data generation on-the-fly
Today's tip comes from Trish Khoo.
In her post "Go faster! Linking data generation to hotkeys" she describes a handy and elegant way of linking data generating Ruby scripts to AutoHotKey.
Windows key + w = Generates 2 random words and copies them to my clipboard.
Windows key + e = Generates a randomized email address that will still point to my account and copies it to my clipboard.
Windows key + c = Randomly selects a URL from a list of test email campaigns and copies it to my clipboard.

That’s everything I need to fill out most forms in the application I’m testing. So when I just need safe, unique inputs, I can save a few seconds on each screen while filling in forms. More importantly, I don’t have to break my focus in order to find or generate appropriate test data.

This is an automation of a special kind. The kind that assists in sapient testing.