Practical Approach to GUI Testing of Windows
Application
GUI Testing Handbook,
check other parts: GUI Testing Introduction
| Testing GUI in Windows
| GUI of Web Application |
Automation of GUI Tests |
GUI Test
Automation Tips and Tricks
Testing of GUI for Windows application. Testing in general can be categorized into Windows Application Testing and
Web Application testing. Windows Application Testing is subcategorized into
Desktop testing and Client Server Application Testing. Though, the concept
of testing and its requirements remain the same across testing in general,
the elements of testing differ in each category.
For example, Windows Application Testing is
simpler in nature as testers have control over the application and the
maximum complexity is in testing through the intranets where the number of
clients and servers are known whereas web application testing is more
complicated as the tester does not have much control over the applications
as different browsers, platforms run the application.
A comparison chart between Desktop, Client Server and
Web Applications
|
Desktop
Application
|
Client
Server Application
|
Web
Application
|
|
Single tier
application
|
2 tier
application
|
3 tier
application
|
|
Application
runs in single system
|
Application
runs in two or more systems
|
Application
runs in two or more systems
|
|
Single user
|
Limited
number of users
|
Unlimited
number of users
|
|
|
Connection
exists until logout
|
Disconnected
mode (stateless) – management of cookies
|
|
|
Application
is menu driven
|
Application
is URL driven
|
|
|
Known network
issues in case of intranet as number of clients and servers are
known
|
Many issues
exist like hardware compatibility, browser compatibility, version
compatibility, security issues, performance issues
|
|
|
Known users
|
Unknown users
|
Client server testing in Windows Application Testing
This type of testing is usually done for 2 tier applications and is known
as Client Server Testing. The testing covers both front-end and back-end.
E.g: Applications developed in VC++, VB, C, C++, Core Java, PowerBuilder,
D2K etc., with the backend for these applications as Mysql, SQL Server,
Sybase, Oracle, Quadbase, MS Access, etc fall under this category. The tests
performed on these types of applications would be broadly classified as
White box testing, Black box testing, Integration Testing, Incremental
Integration Testing, Unit testing, End to End Testing, Functional Testing,
Sanity Testing, System Testing, Acceptance Testing, Regression Testing, Load
Testing, Usability Testing, Performance Testing, Install/Uninstall Testing,
Security Testing, Compatibility Testing, Recovery Testing, Comparison
Testing, Alpha Testing and Beta Testing, Smoke Testing.
- White box testing – Popularly known as Glass box Testing, this requires
in-depth knowledge of internal code functionality. Tests are essentially
based on coverage of code statements along with branches, paths, conditions.
- Black box testing – This type of testing does not include Internal system
design. Tests cover broader aspects of requirements and its functionality.
- Integration testing – This testing cross checks integrated modules to verify
combined functionality after integration. Modules are typically code
modules, individual applications, client and server applications on a
network, etc. This type of testing is especially relevant to client/server
and distributed systems.
- Incremental integration testing - This testing adopts the Bottom up approach
for testing i.e repetitive testing of an application as enhancement to
functionality is done. This testing is mandatory on enhancements and patch
applications. Application functionality and modules should be stand-alone to
test separately. This testing can be done either by programmers or can be
undertaken by testers.
- Unit testing – Unit testing deals with the testing parameters of the program
as a independent functional unit.
- Functional testing - This type of testing ignores the internal parts of an
application and focuses on the output generation matching the requirement.
This is a Black-box type testing improvised to cater to the functional
requirements of an application.
- Sanity testing – Testing used for determining if the application is sane
enough to be considered for a Test effort. If application crashes during
initial use then the system is considered unstable for further testing and
build or application is assigned for Build fix or Application fix.
- System testing – The entire functionality of the system is tested as per the
system requirement documents. This is also a Black-box testing that is based
on overall requirements specifications, which covers integrated parts of a
system.
- End to end testing - Similar to system testing, this involves testing of an
entire application environment in a framework where a control environment is
created as seen in the Freal-world use. The functionality that is tested
would involve the database interaction, network communications and other
interface requirements of the Application.
- Acceptance testing - Normally this type of testing is done to verify if
system meets the customer specified requirements. The End user is the entity
who determines the functionality meeting their requirements.
- Regression testing – This Testing applies to the application in totality for
the modification in any part of functionality. Automation tools provide the
needed support in this testing as it is difficult for the human tester to
cover all aspects of regression.
- Load testing - It is a type of performance testing to check the system’s
behavior under load. The application is subjected to heavy loads to
determine the system’s response time and the point of degradation and
failure to perform the intended functionality.
- Stress testing - System is stressed beyond its specifications to check the
cause and incidence of failure. This testing is performed under heavy load
by subjecting the application to huge information beyond storage capacity,
performing complex database queries, Rapid and continuous input or
requesting heavy retrieval of information from the database.
- Usability testing – This is a critical part of testing concentrating on
User-friendliness. The Application’s flow is tested on terms of ease of use,
help documentation availability at appropriate instances. Basically system
navigation is checked in this testing.
- Performance testing – Can be subjectively called as load or stress testing
depending on the application to be tested. The purpose of this test is to
check whether system meets performance requirements.
- Install/uninstall testing – The Application is tested for full along with
partial, or upgrades install/uninstall procedures on different platforms
under different operating systems operating under different hardware,
software environment.
- Security testing – This testing is done to check if the system can be
penetrated by any hacking methods. It is the security testing process on the
reaction of the system against possible unauthorized internal or external
access. The Testing concentrates on the system and the database security
against external attacks.
- Compatibility testing – This Testing focuses on the software performance in
a particular configuration which might include hardware, software, operating
system and network environment and also on cross platform functionality.
- Comparison testing – The product strength in terms of functionality with
respect to competitor products and in case of version or release, the
comparison to the existing version in terms of change request.
- Recovery testing – This includes testing the response of a system on
recovery from system crashes, hardware failures
- Alpha testing – In this testing, an In house virtual user environment is
created similar to the implementation environment. This testing is done at
the end of the development cycle. Scope for slight design changes exists at
this phase of testing.
- Beta testing – This Testing is typically performed by end-users or users
outside the purview of the project. This marks the final testing before
releasing application for commercial purpose.
- Smoke Testing – This testing is a generalized test of the functionality
without getting into the core functionality in depth.
Here are the most common questions to address before
starting the testing process. It is an analytical part of the testing where
the core areas of testing are understood. This also determines which type of
testing is required, whether manual or automated testing and also if
automation of testing can be used effectively to achieve the purpose.
Generally, automation is recommended only when repeated regression tests are
needed. Automation has its own advantages and disadvantages but the fact
remains that no automation can replace a good tester. The best method of
testing would blend both manual and automated testing methods and is
dependent on the nature of the application.
The factors to be analyzed in a real
time testing are importance of
functionality of the application, high risk module of the application, most
visible functionality of the Application, high security functionality of the
Application, functionality of the largest financial Impact of the
Application, the most import aspects of the Application, the modules of code
complexity in terms of error incidents, Developers view of high risk aspects
of the application, Problem areas which could cause Worst Publicity and most
service complaints. Once these factors are analyzed, risks involved in
releasing the application under time schedule is taken care of and it is
easy to identify the kind of tests that could easily cover multiple
functionalities reducing the redundancy in testing methodology adopted.
10 things to
remember in Testing an Windows Application
- Understanding the Important
functionality of the Application
- Identifying the High-risk
module of the Application
- Identifying the most visible
functionality of the Application
- Identifying the high security
functionality of the Application
- Identifying the functionality
of the largest financial Impact of the Application
- Identifying the most import
aspects of the Application
- Identifying the modules of code
complexity in terms of error incidents
- Collecting Developers view of
high risk aspects of the application
- Listing out Problem areas which
could cause Worst Publicity
- Identifying Problem areas which
could cause most customer service complaints
Glossary
-
Server. A server is a machine with
a specific set of programs that offer different types of service, which
other machines (then called clients) request to do certain tasks
-
Client. A client is the requesting
program or user in a client/server relationship.
-
2-tier. The server holds both the
application and the data. The application resides on the server rather
than the client, probably because the server will have more processing
power and disk space than the PC.
-
3-tier. The data and applications
are split onto separate servers, with the server-side distributed
between a database server and an application server. The client is a
front end, simply requesting and displaying data. Reason being that each
server will be dedicated to processing either data or application
requests, hence a more manageable system and less contention for
resources will occur.
-
Hardware. The ability of the
application to work with different hardware.
Compatibility
-
Browser. The ability of the
application to work with different browsers
Compatibility
|