Software Quality Assurance Testing – FREE Online Course

Free No student enrolled

Chapter 2 – Overview

What is software? Why should it be tested?

Software is a series of instructions for the computer that perform a particular task,
called a program; the two major categories of software are system software and
application software. System software is made up of control programs. Application
software is any program that processes data for the user (spreadsheet, word
processor, payroll, etc.).
A software product should only be released after it has gone through a proper
process of development, testing and bug fixing. Testing looks at areas such as
performance, stability and error handling by setting up test scenarios under
controlled conditions and assessing the results. This is why exactly any software has
to be tested. It is important to note that software is mainly tested to see that it meets
the customers’ needs and that it conforms to the standards. It is a usual norm that
software is considered of good quality if it meets the user requirements.

What is Quality? How important is it?
Quality can briefly be defined as “a degree of excellence”. High quality software
usually conforms to the user requirements. A customer’s idea of quality may cover a
breadth of features – conformance to specifications, good performance on
platform(s)/configurations, completely meets operational requirements (even if not
specified!), compatibility to all the end-user equipment, no negative impact on
existing end-user base at introduction time.
Quality software saves good amount of time and money. Because software will have
fewer defects, this saves time during testing and maintenance phases. Greater
reliability contributes to an immeasurable increase in customer satisfaction as well as
lower maintenance costs. Because maintenance represents a large portion of all
software costs, the overall cost of the project will most likely be lower than similar
projects.
Following are two cases that demonstrate the importance of software quality:
Ariane 5 crash June 4, 1996
– Maiden flight of the European Ariane 5 launcher crashed about 40 seconds after
takeoff
– Loss was about half a billion dollars
– Explosion was the result of a software error
– Uncaught exception due to floating-point error: conversion from a 64-bit
integer to a 16-bit signed integer applied to a larger than expected

– Module was re-used without proper testing from Ariane 4
– Error was not supposed to happen with Ariane 4
– No exception handler
Mars Climate Orbiter – September 23, 1999
– Mars Climate Orbiter, disappeared as it began to orbit Mars.
– Cost about $US 125-million
– Failure due to error in a transfer of information between a team in Colorado
and a team in California
– One team used English units (e.g., inches, feet and pounds) while the other used
metric units for a key spacecraft operation.
What exactly does a software tester do?
Apart from exposing faults (“bugs”) in a software product confirming that the
program meets the program specification, as a test engineer you need to create test
cases, procedures, scripts and generate data. You execute test procedures and
scripts, analyze standards and evaluate results of system/integration/regression
testing. You also…
• Speed up development process by identifying bugs at an early stage (e.g.
specifications stage)
• Reduce the organization’s risk of legal liability
• Maximize the value of the software
• Assure successful launch of the product, save money, time and reputation of
the company by discovering bugs and design flaws at an early stage before
failures occur in production, or in the field
• Promote continual improvement

What makes a good tester?
As software engineering is now being considered as a technical engineering
profession, it is important that the software test engineer’s posses certain traits with
a relentless attitude to make them stand out. Here are a few.
• Know the technology. Knowledge of the technology in which the application is
developed is an added advantage to any tester. It helps design better and powerful
test cases basing on the weakness or flaws of the technology. Good testers know
what it supports and what it doesn’t, so concentrating on these lines will help them
break the application quickly.
• Perfectionist and a realist. Being a perfectionist will help testers spot the problem
and being a realist helps know at the end of the day which problems are really
important problems. You will know which ones require a fix and which ones don’t.
• Tactful, diplomatic and persuasive. Good software testers are tactful and know
how to break the news to the developers. They are diplomatic while convincing the
developers of the bugs and persuade them when necessary and have their bug(s)
fixed. It is important to be critical of the issue and not let the person who developed
the application be taken aback of the findings.
• An explorer. A bit of creativity and an attitude to take risk helps the testers
venture into unknown situations and find bugs that otherwise will be looked over.
• Troubleshoot. Troubleshooting and figuring out why something doesn’t work
helps testers be confident and clear in communicating the defects to the developers.
• Posses people skills and tenacity. Testers can face a lot of resistance from
programmers. Being socially smart and diplomatic doesn’t mean being indecisive. The
best testers are both-socially adept and tenacious where it matters.
• Organized. Best testers very well realize that they too can make mistakes and
don’t take chances. They are very well organized and have checklists, use files, facts
and figures to support their findings that can be used as an evidence and doublecheck their findings.
• Objective and accurate. They are very objective and know what they report and so
convey impartial and meaningful information that keeps politics and emotions out of
message. Reporting inaccurate information is losing a little credibility. Good testers
make sure their findings are accurate and reproducible.
• Defects are valuable. Good testers learn from them. Each defect is an opportunity
to learn and improve. A defect found early substantially costs less when compared to
the one found at a later stage. Defects can cause serious problems if not managed
properly. Learning from defects helps – prevention of future problems, track
improvements, improve prediction and estimation.

Guidelines for new testers
• Testing can’t show that bugs don’t exist. An important reason for testing is to
prevent defects. You can perform your tests, find and report bugs, but at no point can
you guarantee that there are no bugs.
• It is impossible to test a program completely. Unfortunately this is not possible
even with the simplest program because – the number of inputs is very large, number
of outputs is very large, number of paths through the software is very large, and the
specification is subjective to frequent changes.
• You can’t guarantee quality. As a software tester, you cannot test everything and
are not responsible for the quality of the product. The main way that a tester can fail
is to fail to report accurately a defect you have observed. It is important to remember
that we seldom have little control over quality.
• Target environment and intended end user. Anticipating and testing the
application in the environment user is expected to use is one of the major factors that
should be considered. Also, considering if the application is a single user system or
multi user system is important for demonstrating the ability for immediate readiness
when necessary. The error case of Disney’s Lion King illustrates this. Disney Company
released its first multimedia CD-ROM game for children, The Lion King Animated
Storybook. It was highly promoted and the sales were huge. Soon there were reports
that buyers were unable to get the software to work. It worked on a few systems –
likely the ones that the Disney programmers used to create the game – but not on the
most common systems that the general public used.
• No application is 100% bug free. It is more reasonable to recognize there are
priorities, which may leave some less critical problems unsolved or unidentified.
Simple case is the Intel Pentium bug. Enter the following equation into your PC’s
calculator: (4195835 / 3145727) * 3145727 – 4195835. If the answer is zero, your
computer is just fine. If you get anything else, you have an old Intel Pentium CPU with
a floating-point division bug.
• Be the customer. Try to use the system as a lay user. To get a glimpse of this, get a
person who has no idea of the application to use it for a while and you will be amazed
to see the number of problems the person seem to come across. As you can see,
there is no procedure involved. Doing this could actually cause the system to
encounter an array of unexpected tests – repetition, stress, load, race etc.
• Build your credibility. Credibility is like quality that includes reliability, knowledge,
consistency, reputation, trust, attitude and attention to detail. It is not instant but
should be built over time and gives voice to the testers in the organization. Your keys
to build credibility – identify your strengths and weaknesses, build good relations,
demonstrate competency, and be willing to admit mistakes, re-assess and adjust.
• Test what you observe. It is very important that you test what you can observe
and have access to. Writing creative test cases can help only when you have the

Course Curriculum