Tuesday, February 17, 2009

Black Box Testing

In black box testing we check the functionality of the software using different inputs. Internal coding of the software is not tested. The test designer selects valid and invalid input and determines the correct output. There is no knowledge of the test object's internal structure. The implementation details of the components are not known (or, at least, are ignored), and only externally observable behavior or functionality is tested. This method of test design is applicable to all levels of software testing: unit, integration, functional testing, system and acceptance.
Black box testing is sometimes also called as "Opaque Testing", "Functional/Behavioral Testing" and "Closed Box Testing".

Thursday, February 12, 2009

White Box Testing

In white box testing the emphasis is on coding. We execute and check each line of code atleast once to verify if it works fine without errors. Includes techniques such as Branch Testing and Path Testing.
Also known as Structural Testing , Glass Box Testing, or clear box testing.

Integration Testing

In this the units or modules are combined and tested as a group.
Modules are typically code modules, individual applications, client and server applications on a network, etc. Integration Testing follows unit testing and precedes system testing. There are two ways integration is performed. It is called Pre-test and Pro-test.
1) Pre-test:
The testing performed in Module development area is called Pre-test. The Pre-test is required only if the development is done in module development area.
2) Pro-test:
The Integration testing performed in baseline is called pro-test. The development of a release will be scheduled such that the customer can break down into smaller internal releases.

Usability Testing

Usability means that systems are easy and fast to learn, efficient to use, easy to remember, cause no operating errors and offer a high degree of satisfaction for the user. Usability means bringing the usage perspective into focus, the side towards the user. In short, we check how user friendly the software is. Software should be easy to understand. For example, checking the text alignment, font size, colors, etc). It is also called user interface testing, friendliness testing.

Security Testing

If your site requires firewalls, encryption, user authentication, financial transactions, or access to databases with sensitive data, you may need to test these and also test your site's overall protection against unauthorized internal or external access.

User Acceptance Testing

Testing to verify that the product meets customer specified requirements. A customer usually does this type of testing on a product that is developed externally. There are 2 types of user acceptance testing:-
1) Alpha Testing :
End-user i.e., client or 3rd party person on beahlf of the client does this type of testing. It is not done by programmers or testers. Testing of an application when development is nearing completion minor design changes may still be made as a result of such testing. In this, the client or 3rd party person tests the software before completion at our site (where software is developed).
2) Beta Testing :
When the Client tests the software at their own site or company it s called beta testing.

Regulatory Testing

Testing the software with government norms and rules.

Conformance Testing

Verifying implementation conformance to industry standards. Producing tests for the behavior of an implementation to be sure it provides the portability, interoperability, and/or compatibility a standard defines.

Compatibility Testing

Testing to ensure compatibility of an application or Web site with different browsers, OSs, and hardware platforms. Compatibility testing can be performed manually or can be driven by an automated functional or regression test suite.

Random Testing

Testing the software with random input data is called random testing. Different terms that are used interchangable for random testing are stochastic testing, monkey & Gorilla testing

Scripted Testing

In this planning and designing is done and then execution takes place. It is also called planned testing

Ad-hoc testing & Exploratory Testing

Ad hoc testing-
Testing is performed without planning and documentation. Ad hoc testing is a part of exploratory testing. It is concerned with the Application Testing without following any rules or test cases. One should have strong knowledge about the Application for Ad hoc testing.
Exploratory testing -
It is done to test design and test execution at the same time. Exploratory tests, unlike scripted tests, are not defined in advance and carried out precisely according to plan. In this, test design and execution is done at the same time.

Performance Testing

Performance Testing is used to determine the speed or effectiveness of a computer, network, software program or device. There are different types of testing that can be included in performance testing. All these are explained below:
1) Stress Testing :
Testing conducted to evaluate a system or component at or beyond the limits of its specified requirements to determine the load under which it fails and how. A graceful degradation under load leading to non-catastrophic failure is the desired result.
In other words, it breaks the system under test by overwhelming its resources or by taking resources away from it (in which case it is sometimes called negative testing). The main purpose is to make sure that the system fails and recovers gracefully -- this quality is known as recoverability.
2) Load Testing :
It constantly increasing the load on the system via automated tools. For a Web application, the load is defined in terms of concurrent users or HTTP connections. The term "load testing" is usually defined as the process of exercising the system under test by feeding it the largest tasks it can operate with. Volume testing, or longevity/Endurance testing are subsets of Load testing. Load testing is sometimes called volume testing, or longevity/Endurance testing.
Goals of Load Testing (In short):
-Expose bugs that do not surface in cursory testing, such as memory management bugs, memory leaks, buffer overflows, etc.
-Ensure that the application meets the performance baseline established during performance testing. This is done by running regression tests against the application at a specified maximum load.
Examples of longevity/endurance testing:
-Testing a client-server application by running the client in a loop against the server over an extended period of time
3) Spike Testing :
A performance test focused on determining or validating performance characteristics of the product under test when subjected to workload models and load volumes that repeatedly increase beyond anticipated production operations for short periods of time. Spike testing is a subset of stress testing
4) Soak Testing :
It involves testing a system with a significant load extended over a significant period of time, to discover how the system behaves under sustained use. For example, in software testing, a system may behave exactly as expected when tested for 1 hour. However, when it is tested for 3 hours, problems such as memory leaks cause the system to fail or behave randomly.
5) Volume Testing :
Volume testing refers to testing a software application for a certain data volume. This volume can in generic terms be the database size or it could also be the size of an interface file that is the subject of volume testing. It is a subset of Load testing.
Examples of volume testing:-
-Testing a word processor by editing a very large document
-Testing a printer by sending it a very large job
-Testing a mail server with thousands of users mailboxes
-a specific case of volume testing is zero-volume testing, where the system is fed empty tasks,

6) Concurrency Testing :

Friday, February 6, 2009

Unit Testing

Unit Testing is a procedure used to validate that individual units of source code are working
properly. We check the functionality of single components or modules. We give different inputs and check if a single unit is working correctly.

A unit is the smallest testable part of an application.

In procedural programming a unit may be an individual program, function, procedure, etc., while in object-oriented programming, the smallest unit is a method; which may belong to a base/super class, abstract class or derived/child class.