Tuesday, May 12, 2009

Emotions and Software Testing!


"Software Testing is a skill. While this may come as a surprise to some people it is a simple fact." - (Fewster, Graham: "Software Test Automation")
Recently I was talking with a fellow software tester and he queried – "Debasis, what is the role of human (can be a software programmer, a tester, etc) emotions in software defects? Do you feel that, to become a good tester we should leave aside our emotions or rather use our emotions to find more defects in the software under test?"
This question made me to think over the role of emotions in software development and in software testing and here are my thoughts on the matter!
Regardless of the roles and designation, whoever is working on the software development team is a human being! And I believe every human being is vulnerable to emotions! Emotions are integral part of human psychology and we just can’t leave our emotions even if we want to! As we can’t get rid of emotions, the next question is how can it affect the quality of software!
» Can people’s (System Analysts, Designers, Programmers, Technical Writers, and even Testers) emotional state at a given time contribute to defective software?
» Can people’s moods or emotions play a role in software quality?
» Can software quality play with people’s (Client, End Users) emotions?
» Can people’s (Testers) emotions be used to enhance the software quality?
Assuming the answer to all of the above 4 questions to be "Yes" (of course depending on the particular context), I think I can assert that:
» Under certain contexts, human emotions may be responsible for defects in the software.» Some defects can be capable of playing with human emotions.» Some defects can be detected using the emotional response of a tester.
Depending on this I have tried to classify defects/bugs, broadly into 3 categories:» Defects/Bugs that are created due to human emotions. [Type A]
» Defects/Bugs that play with human emotions. [Type B]
» Defects/Bugs that are detected by human emotions. [Type C]
Type A: Once I was assigned to test a B2B (Business-to-Business) web portal. We had a pretty good developer team to work with. We (the testing team) were system testing the final candidate, which was scheduled for a release unless any showstopper defect/bug was found! I was regression testing a module, which had undergone some recent code refactoring! [Note: Refactoring neither fixes bugs nor adds new functionality. Rather it improves the understandability of the code or changes its internal structure and design, and removes dead code, to make it easier for human maintenance in the future.] And I got an out of memory error! This error was not there when I had tested it last time. So at first glance this error looked like an error resulted due to the recent refactoring in the source code! When it was intimated to the programmer who had refactored that module, he was puzzled! I knew him to be a good programmer and he proved me right by identifying the root of that error very quickly! It was due to a method that was recursively calling itself and was forcing the program to get stuck in a loop, thus making a "new" object each time round! But the programmer was very much upset with himself for making such a silly (according to him) mistake. Usually novice programmers make these kinds of mistakes and he knew he would not have done it in steady mental state! He was trying to figure out how he could do such a stupid mistake and then remembered that one of his close relative had died last week and he was very much heart broken and stressed. It was when he was asked and had to do that code refactoring. Could that error have been as a result of his disturbed emotional state? Is this a case where a disturbed emotional state is capable of producing defective software?
Type B:
We come across such situations quite often in our day-to-day life! Don’t you find yourself highly irritated when the printer (may be the driver software that runs the printer) just refuses to print your bill and you end up standing at the cash counter of the shopping mall even after having paid your bill amount? Don’t you get frustrated when you see a message popping up (this happens after you have completed all the initial steps and are waiting for your cash) on the ATM machine telling that there is no cash to be delivered at the moment? [Note: If it was saying about not sufficient cash that would have been understandable. What if you get the message even for the minimum allowed withdrawal amount?] Don’t you start muttering, "Why can’t they just show me this message at the very beginning? If they know there is no cash to be dispensed, why are they wasting my time by leading me through the successive steps before displaying the message finally?" Well, I am not sure if you get frustrated/irritated when you face such situations. But as an end user I do get terribly annoyed in such cases. Can we classify these errors/defects as those, which play with human emotions?Type C:
Once I was testing a web portal. It was already tested by another group of testers and I was supposed to just run-through the site as a final sweep of testing. The look and feel of the web portal was just great. After taking a quick look at the Guest User module (which was apparently clean without any major hiccups) when I started testing the Registered User module, the Login Screen just froze (well, it looked so) as I tried to login using a valid login credential! More than 30 seconds must have passed when I started getting impatient and confused! It was quite frustrating to see a web portal (which was supposed to take over 500 concurrent hits) freeze at the login screen before even I (a Registered User) could take a look at the portal! And then, after almost 45-50 seconds the login page finally took me to the next page (Welcome Screen for the Registered User showing me as Logged On). After that every thing seemed to work fine again; there were no more hangs, no crashes, no error messages and the system behaved like a good-obedient-boy. But to me, the long delay of the login procedure appeared like a serious issue from the end user perspective and I went ahead to log that as a High Severity defect in our defect tracker. Later it was discovered that the dynamic load balancing mechanism was having conflict with the distributed web servers and thus resulting in the unwelcome delay! I am wondering if I could have still sensed this as a potential problem and logged it as a defect unless my emotions (impatience, confusion, frustration, annoyance, irritation etc) had not guided me at that instance!Wikipedia defines an emotion as a "complex reaction pattern, involving experiential, behavioral, and physiological elements, by which the individual attempts to deal with a personally significant matter of event." It arises without conscious effort and is either positive or negative in its valence.Emotions, if used correctly can be very powerful in finding defects in software. Emotions such as - stress, anxiety, depression, frustration, confusion, annoyance, impatience, boredom, irritation, curiosity, amusement etc can be good at pointing towards possible defects in software while testing. I have noticed that defects relating to performance issues, usability issues, reliability issues and of course functionality issues are easier to be detected using emotions as your guiding force.» Do you also believe in emotion-guided-testing?
» Do you think that human emotions play important role in the quality of software?» Have you ever come across some similar experience(s) where you noticed human emotions playing roles in defect life cycle (introduction, detection or affecting the end user)?
I am eagerly waiting to hear your stories. Feel free to share your views/ideas on this topic by commenting.
Happy Testing… Further Readings:
Emotions and Test Oracles [Power Point Slide] - By Michael Bolton, on how it might be difficult to automate human emotions while testing! And how human emotions can be the biggest factor in recognizing or interpreting defects/bugs when we see them for the first time.
Bugs and Emotions – By Pradeep Soundararajan, on how defects/bugs are capable of playing with human emotions! An interesting anecdote of a bug that he experienced after registering with a matrimonial website!

Read more...

Friday, May 8, 2009

Website Testing - Did you miss anything while Testing?


A lot has been written and discussed about Website Testing till date. But still, website testing is probably one of the most commonly confused topic among testers! Need evidence? Spend a little time searching and you can see tons of queries flooding the Internet (Online Forums, Usenet Groups, Orkut Communities, Tech Corners etc) regarding website testing, how a website should be tested, what should be tested, which things should be given priority while testing, what should not be given much importance while testing and so on. I might well be the trillionth person on this planet to write an article on Website Testing here! But I am writing this because I am really tired of replying emails asking me to write an article on Website Testing in my blog. However, this article is not an attempt to show you how you should test your website. You should understand that there is no universal rule to testing that can fit all kind of similar testing assignments. The testing approach that is going to follow consists of a checklist of items that might be tested while testing a website. This does not mean that following this checklist can essentially guarantee you success while testing *any and every* kind of website. In contrary, this post is meant to be used as a website testing cheat-sheet, a kind of checklist of items to remember while testing a website! While following this checklist, the chance of success (or failure) greatly depends on your own particular context! However, here is the cheat-sheet for website testing:
[A] Functionality Testing:
While testing the functionality of the websites the following areas should be tested.
a) Links/URL Testing: There are mainly 4 types of links in most websites.
» Internal links [Test the links that point to the pages of the same website.]
» External links [Test the links that point to external websites.]
» Mail links [Test if the email links open the default email client with the recipient email ID already filled in the "To" field.]
» Broken links [Test if any of those links are broken or dead! Free tools like Link Valet (which is convenient for checking a few pages) or Xenulink (convenient for checking a whole site) can be helpful in testing broken links.]
b) Forms Testing: The web forms should be consistent and should contain all the required input and output controls. Test the integrity of the web forms and the consistency of the variables.
c) Validation Testing:
» You can use tools like W3C validator to test and make sure that you have valid HTML (or XHTML).
» Most of the modern day websites use CSS (Cascading Style Sheet). You can use tools like W3C CSS validator to test and validate the CSS used in your site.
» Test the different fields for field level validation. Test and validate user inputs like: TextBox inputs, ComBox inputs, DropDownBox selections, KeyDown, KeyPress, KeyUp etc.
d) Test the Error messages: Error messages are integral part of any well-developed website and they guide the user whenever any wrong/unexpected input is submitted. Testing the Error messages is very important as a badly designed Error message can misguide the end user about the actual impact of the error! About testing error messages, Ben Simo has a nice article that you might find interesting.
e) Testing optional and mandatory fields: Test if the web forms handle the optional and mandatory fields efficiently. Ideally, the application should not allow you to proceed unless you have filled in ALL the mandatory fields and should not restrict you from proceeding if you have left ANY of those optional fields unfilled!
f) Database Testing: Most of the modern day websites come with a backend database (unless it’s a site consisting of purely static web pages). So testing the database for its integrity becomes essential to make sure the website is able to handle the data processing effectively.
g) Cookies Testing: A cookie is information that a website (server side) puts on your hard disk (client side) so that it can remember something about you at a later time. If your website sets cookies at the client machines then test to check that cookies and other session tokens are created in a secure and unpredictable way. Poor handling of cookies can result in security holes and vulnerabilities that can be taken advantage by malicious users and hackers. Here is a nice article on Testing for Cookie and Session Token Manipulation.
h) Client-side Testing: Test the temporary Internet files on the client side system to make sure if any sensitive data (like password, credit card number etc) is being stored in the client system without being encrypted or in an unsecured way.[B] Performance Testing:
IEEE defines Performance testing as the testing conducted to evaluate the compliance of a system or component with specified performance requirements. The goal of performance testing is not to find bugs, but to eliminate bottlenecks and establish a baseline for future load/stress testing. Performance testing can be applied to understand the website’s scalability, any loopholes in the load balancing and to test the response time between a request (from the client) and the reply (from the server) and the amount of load/stress the site is able to sustain. Scott Barber’s PerfTestPlus and Chris Loosley’s Web Performance Matters are two great resources for more exhaustive information on Performance Testing.
[C] Connection Speed Testing:
Test the website over various Networks like - Dial up connection with a 56-kbps modem (hard to believe, but there are lot of web users who still use a modem), ISDN, cable connection, broadband connection with different download speeds, DSL connection, satellite internet etc. With slower connection speed, if your website results in slow performance or partial loading of web pages then it should be cause of concern. As testers, we act as the representative of the end users. If we find out that even a part of our intended end user community is going to have problem with the application we are testing, it should be sufficient to raise the issue as a defect!
[D] Web Usability Testing:
If you develop a website which is not user-friendly and is difficult to learn, understand and navigate, then it won’t be of much use for the user. For example, if your website relies way too much on JavaScript for navigation, a browser with disabled JavaScript can render the site unusable. Some of the criteria to keep in mind while testing the usability of a website are:
» Ease of learning (How intuitive and self-explanatory the site is).
» Navigation.
» User satisfaction.
» Web accessibility testing (If all the content and parts of the site are accessible).
» General appearance (Look and feel).
[E] Testing Client-Server Interface:
In web testing the server side interface is tested to verify that communication is properly established with the client. In case of n-Tier architecture based web applications, the middle-tier Business Logic APIs should also be tested (even if they are third-party shrink-wrapped softwares) for any communication/interface malfunctioning![F] Compatibility Testing:
Test your website to verify that it’s pages render adequately in different browsers (e.g. IE 5, IE 6, IE 7, Firefox 2, Opera, Safari etc) using different operating systems (Win XP, Vista, Linux, Mac etc) on different hardware platforms. Different versions, configurations, display resolutions, and Internet connect speeds all can impact the behavior of the web pages and can introduce embarrassing (and often costly) bugs. However, an important thing to remember while testing the web compatibility is – we should first identify the major customer base for the website and then decide the main browsers and OS to test for. Some typical compatibility tests include testing your application:
» Using various browsers.
» Using various window sizes.
» Using various font sizes.
» Using browsers with CSS, JavaScript turned OFF!
» Using browsers with pop-up blockers!
» On various Operating Systems.
» With different screen resolutions and color depths.
» On various client hardware configurations.
» Using different memory sizes and hard drive space.
» In different network environments.
» Ability to take printouts with different printers (Printer-friendly Versions)[G] Web Security Testing:
Often Web Security Testing is also referred to as Penetration Testing. The primary objective for testing the security of a website is to identify potential vulnerabilities/security holes and to patch/repair them. For example, if your website allows some files to be uploaded, your web server should have proper automated antivirus checking in place to detect and disable any attempt of virus uploading by the client side. Some of the major aspects of web security testing are:
» Network Scanning.
» Vulnerability Scanning.
» Password Cracking.
» Log Review.
» Integrity Checkers.
» Virus Detection.
Hope this article helps in giving a rough coverage of areas that needs attention while testing a website. Did I miss something here that should have been included in the checklist? Feel free to let me know by commenting and I will update this post along with proper credit to you.
Update: An important aspect of website testing that I had missed to include in my cheat-sheet is Testability Testing.

Read more...

Saturday, April 4, 2009

Microsoft Office Shortcuts @ your Fingertips

Hi Readers,

Here is a post partially relevent to testing and majorly with general PC Users.
As in testing we reuire most of the times to deal with Microsoft Office Application, I tried to collect most of the shortcuts under one roof and to publish it freely.

One will surely able to improve Office Use by implementing these shortcuts in their life.


UPLOADED FILE NAME UPLOADED FILE SIZE
Microsoft Office @ your Fingertips Through Unveiled Shortcuts - by Galactus.pdf 856.28 KB

:You can DOWNLOAD this File by going to Rapidshare or MegaShare:

RapidShare Link :
http://rapidshare.com/files/217582347/Microsoft_Office___your_Fingertips_Through_Unveiled_Shortcuts__-_by_Galactus.pdf


MegaShare Link:
http://www.MegaShare.com/718764

Read more...

Monday, December 1, 2008

Testing Jokes - Collection 2

Ethical software group:-)

SEVEN SOFTWARE COMPANIES ADDED TO "WATCH LIST"

New York, NJ, Nov. 11 -- People for the Ethical Treatment of Software (PETS) announced today that seven more software companies have been added to the group's "watch list" of companies that regularly practice software testing.

"There is no need for software to be mistreated in this way so that companies like these can market new products," said Ken Granola, spokesperson for PETS. "Alternative methods of testing these products are available."

According to PETS, these companies force software to undergo lengthly and arduous tests, often without rest for hours or days at a time. Employees are assigned to "break" the software by any means necessary, and inside sources report that they often joke about "torturing" the software.

"It's no joke," said Granola. "Innocent programs, from the day they are compiled, are cooped up in tiny rooms and 'crashed' for hours on end. They spend their whole lives on dirty, ill-maintained computers, and are unceremoniously deleted when they're not needed anymore." Granola said the software is kept in unsanitary conditions and is infested with bugs.

"We know alternatives to this horror exist," he said, citing industry giant Microsoft Corp. as a company that has become extremely successful without resorting to software testing.

PETS is a nonprofit organization dedicated to improving the lives of software programs and promoting alternatives to software testing.

Why Software Testing is Important :-)


In March 1992, a man living in Newtown near Boston, Massachusetts, received a bill for his as yet unused credit card stating that he owed $0.00. He ignored it and threw it away.

In April, he received another and threw that one away too.

The following month, the credit card company sent him a very nasty note stating they were going to cancel his card if he didn't send them $0.00 by return of post. He called them and talked to them; they said it was a computer error and told him they'd take care of it.

The following month, our hero decided that it was about time that he tried out the troublesome credit card figuring that if there were purchases on his account it would put an end to his ridiculous predicament. However, in the first store that he produced his credit card in payment for his purchases, he found that his card had been cancelled.

He called the credit card company who apologized for the computer error once again and said that they would take care of it. The next day he got a bill for $0.00 stating that payment was now overdue. Assuming that, having spoken to the credit card company only the previous day, the latest bill was yet another mistake, he ignored it, trusting that the company would be as good as their word and sort the problem out.

The next month, he got a bill for $0.00 stating that he had 10 days to pay his account or the company would have to take steps to recover the debt.

Finally giving in, he thought he would play the company at their own game and mailed them a cheque for $0.00. The computer duly processed his account and returned a statement to the effect that he now owed the credit card company nothing at all.


A week later, the man's bank called him asking him what he was doing writing a cheque for $0.00. After a lengthy explanation, the bank replied that the $0.00 cheque had caused their cheque processing software to fail.

The bank could now not process ANY cheques from ANY of their customers that day because the cheque for $0.00 was causing the bank's computer to crash.

The following month, the man received a letter from the credit card company claiming that his cheque had bounced and that he now owed them $0.00 and unless he sent a cheque by return of post they would be taking steps to recover the debt.

The man, who had been considering buying his wife a computer for her birthday, bought her a typewriter instead.


Read more...

Testing Jokes - Collection 1

Testing Jokes - Collection 1

Why we need reviews.:-)

In an ancient monastery in a far away place, a new monk arrived to join his brothers in copying books and scrolls in the monastery's scriptorium. He was assigned as a rubricate on copies of books that had already been copied by hand.

One day, while working on the monks' Book of Vows, he asks old Father Florian, the Armarius of the Scriptorium, 'Does not the copying by hand of other copies allow for chances of error? How do we know we are not copying the mistakes of someone else? Are they ever checked against the original?'

Fr. Florian was set back a bit by the obvious logical observation of this youthful monk. 'A very good point, my son. I will take one of the latest copies of the Book of Vows down to the vault and compare it against the original.' Fr. Florian went down to the secured vault and began his verification.

A day passed and the monks began to worry and went down looking for the old priest. They were sure something may have happened. As they approached the vault they heard sobbing and wailing... they opened the door and found Fr. Florian crying over the new copy and the original, ancient Book of Vows, both opened before him on the table. It was obvious to all that the poor man had been crying his old heart out for a long time.

'What is the problem, Reverend Father???' asked one of the monks.

'Oh, my Lord,' sobbed the priest, 'The word is 'CELEBRATE'!!!'

And this is why we need reviews.

When you have an "I hate my job" day try this:-)

On your way home from work, stop at your pharmacy and go to the thermometer section. You will need to purchase a rectal thermometer made by Johnson and Johnson. Be very sure you get this brand. When you get home, lock your doors, draw the drapes, and disconnect the phone so you will not be disturbed during your therapy. Change to very comfortable clothing, such as a sweat suit and lie down on your bed. Open the package and remove the thermometer. Carefully place it on the bedside table so that it will not become chipped or broken. Take out the material that comes with the thermometer and read it. You will notice that in small print there is a statement: "Every rectal thermometer made by Johnson and Johnson is personally tested. " Now close your eyes and repeat out loud five times: "I am so glad I do not work for quality control at the Johnson and Johnson Company. "

Two software testers@dinner:-)

Two software testers went into a diner and ordered two drinks. Then they produced sandwiches from their briefcases and started to eat. The owner became quite concerned and marched over and told them, "You can't eat your own sandwiches in here!"
The testers looked at each other, shrugged their shoulders and then exchanged sandwiches.

Measuring flag pole:-)

A group of managers were given the assignment to measure the height of a flagpole. So they go out to the flagpole with ladders and tape measures, and they're falling off the ladders, dropping the tape measures - the whole thing is just a mess. A tester comes along and sees what they're trying to do, walks over, pulls the flagpole out of the ground, lays it flat, measures it from end to end, gives the measurement to one of the managers and walks away.
After the tester has gone, one manager turns to another and laughs. "Isn't that just like a tester, we're looking for the height and he gives us the length."

Read more...