Tuesday, May 24, 2011

Software Testing Notes

Testing method where user is not required:

Functional Testing:
In this type of testing, the software is tested for the functional requirements. The tests are written in order to check if the application behaves as expected.

Stress Testing:
The application is tested against heavy load such as complex numerical values, large number of inputs, large number of queries etc. which checks for the stress/load the applications can withstand.
Load Testing:
The application is tested against heavy loads or inputs such as testing of web sites in order to find out at what point the web-site/application fails or at what point its performance degrades.

Ad-hoc Testing:
This type of testing is done without any formal Test Plan or Test Case creation. Ad-hoc testing helps in deciding the scope and duration of the various other testing and it also helps testers in learning the application prior starting with any other testing.

Exploratory Testing:
This testing is similar to the ad-hoc testing and is done in order to learn/explore the application.

Usability Testing:
This testing is also called as ‘Testing for User-Friendliness’. This testing is done if User Interface of the application stands an important consideration and needs to be specific for the specific type of user.

Smoke Testing:
This type of testing is also called sanity testing and is done in order to check if the application is ready for further major testing and is working properly without failing up to least expected level.

Recovery Testing:
Recovery testing is basically done in order to check how fast and better the application can recover against any type of crash or hardware failure etc. Type or extent of recovery is specified in the requirement specifications.

Volume Testing:
Volume testing is done against the efficiency of the application. Huge amount of data is processed through the application (which is being tested) in order to check the extreme limitations of the system.

Testing where user plays a role/user is required:

User Acceptance Testing:
In this type of testing, the software is handed over to the user in order to find out if the software meets the user expectations and works as it is expected to.


Alpha Testing:
In this type of testing, the users are invited at the development center where they use the application and the developers note every particular input or action carried out by the user. Any type of abnormal behavior of the system is noted and rectified by the developers.

Beta Testing:
In this type of testing, the software is distributed as a beta version to the users and users test the application at their sites. As the users explore the software, in case if any exception/defect occurs that is reported to the developers

What is a White Box Testing Strategy?

White box testing strategy deals with the internal logic and structure of the code. White box testing is also called as glass, structural, open box or clear box testing. The tests written based on the white box testing strategy incorporate coverage of the code written, branches, paths, statements and internal logic of the code etc.

In order to implement white box testing, the tester has to deal with the code and hence is needed to possess knowledge of coding and logic i.e. internal working of the code. White box test also needs the tester to look into the code and find out which unit/statement/chunk of the code is malfunctioning.

Advantages of White box testing are:
i) As the knowledge of internal coding structure is prerequisite, it becomes very easy to find out which type of input/data can help in testing the application effectively.
ii) The other advantage of white box testing is that it helps in optimizing the code
iii) It helps in removing the extra lines of code, which can bring in hidden defects.

Disadvantages of white box testing are:
i) As knowledge of code and internal structure is a prerequisite, a skilled tester is needed to carry out this type of testing, which increases the cost.
ii) And it is nearly impossible to look into every bit of code to find out hidden errors, which may create problems, resulting in failure of the application.

Types of testing under White/Glass Box Testing Strategy:

Unit Testing:
The developer carries out unit testing in order to check if the particular module or unit of code is working fine. The Unit Testing comes at the very basic level as it is carried out as and when the unit of the code is developed or a particular functionality is built.

Static and dynamic Analysis:
Static analysis involves going through the code in order to find out any possible defect in the code. Dynamic analysis involves executing the code and analyzing the output.

Statement Coverage:
In this type of testing the code is executed in such a manner that every statement of the application is executed at least once. It helps in assuring that all the statements execute without any side effect.

Branch Coverage:
No software application can be written in a continuous mode of coding, at some point we need to branch out the code in order to perform a particular functionality. Branch coverage testing helps in validating of all the branches in the code and making sure that no branching leads to abnormal behavior of the application.

Security Testing:
Security Testing is carried out in order to find out how well the system can protect itself from unauthorized access, hacking – cracking, any code damage etc. which deals with the code of application. This type of testing needs sophisticated testing techniques.

Mutation Testing:
A kind of testing in which, the application is tested for the code that was modified after fixing a particular bug/defect. It also helps in finding out which code and which strategy of coding can help in developing the functionality effectively.

Besides all the testing types given above, there are some more types which fall under both Black box and White box testing strategies such as: Functional testing (which deals with the code in order to check its functional performance), Incremental integration testing (which deals with the testing of newly added code in the application), Performance and Load testing (which helps in finding out how the particular code manages resources and give performance etc.) etc.

Introduction

When thinking of the types of software testing, many mistakenly equate the mechanism by which the testing is performed with types of software testing. The mechanism simply refers to whether you are using manual or automated software testing. This article goes beyond that simple mechanism-based definition to define the intrinsic nature of the tests themselves.

Types of Software Testing

There are a number of types of software testing, categorized by what is being tested and the purpose, or objective, of the test. The objectives range from usability to disaster recovery. For many organizations the most common testing types are: functionality testing, compatibility testing, performance testing, scalability testing, usability testing, application security testing, accessibility testing, and regulatory-compliance testing. A short list follows:

  1. QA Testing - QA Testing is loosely defined vernacular for a combination of requirements-based, regression and feature level testing performed during post code-delivered phases such as the system, integration and final test phase, to assess and assure the quality of the product.

Note: Currently, the term "QA testing" is widely misused to refer to functionality validation and verification testing. This is technically incorrect, but since its use is pervasive, we offer the above definition for it.

  1. Functionality, or feature-level, testing - Functionality, or feature-level, testing is performed to verify the proper functionality of the software. It may include testing of the mathematical and algorithm correctness of scientific and financial software, as well as testing of GUI functionality.
  2. Compatibility testing - Compatibility testing ensures that the software is compatible with the hardware, operating systems, and other software packages that it will be working with.
  3. Performance testing - Performance testing determines how well the software performs in terms of the speed of computations or responsiveness to the user.
  4. Scalability testing - Scalability testing is performed to ensure that the software will function well as the number of users, size of data sets, or other factors change from small to large values.
  5. Usability testing - Usability testing ensures that the software has a good level of ease of use.
  6. Application security testing - Application security testing determines how well the software can defend against attacks, such as firewall software securing a computer against Internet viruses and worms.
  7. Accessibility testing - Accessibility testing is performed to ensure that the software will be accessible under various scenarios by the intended users.
Regulatory-compliance testing - Regulatory-compliance testing is performed to ensure that the software is in compliance with all applicable regulations

Monday, May 23, 2011

Software Testing Some Importent Tips

What are the steps to perform software testing?
  • Understand requirements and business logic
  • Determine required standards and processes
  • Set priorities, and determine scope and limitations of tests
  • Determine test approaches and methods
  • Determine test environment, test ware, test input data requirements
  • Set milestones and prepare test plan document
  • Write test cases
  • Have needed reviews/inspections/approvals of test cases
  • Set up test environment
  • Execute test cases
  • Evaluate and report results
  • Bug Tracking and fixing
  • Retesting or regression testing if needed
  • Update test plans, test cases, test results, traceability matrix etc.
. What are the components of a bug report?
  • Application name
  • The function, module, name
  • Bug ID
  • Bug reporting date
  • Status
  • Test case ID
  • Bug description
  • Steps needed to reproduce the bug
  • Names and/or descriptions of file/data/messages/etc. used in test
  • Snapshot that would be helpful in finding the cause of the problem
  • Severity estimate
  • Was the bug reproducible?
  • Name of tester
  • Description of problem cause (filled by developers)
  • Description of fix (filled by developers)
  • Code section/file/module/class/method that was fixed (filled by developers)
  • Date of fix (filled by developers)
  • Date of retest or regression testing
  • Any remarks or comments
What is configuration management?

It covers the processes used to control, coordinate, and track: code, requirements, documentation, problems, change requests, designs, tools / compilers / libraries / patches, changes made to them, and who makes the changes.

How can web based applications be tested?

Apart from functionality consider the following:
  • What are the expected loads on the server and what kind of performance is expected on the client side?
  • Who is the target audience?
  • Will down time for server and content maintenance / upgrades be allowed?
  • What kinds of security will be required and what is it expected to do?
  • How reliable are the site's Internet / intranet connections required to be?
  • How do the internet / intranet affect backup system or redundant connection requirements and testing?
  • What variations will be allowed for targeted browsers?
  • Will there be any standards or requirements for page appearance and / or graphics throughout a site or parts of a site?
  • How will internal and external links be validated and updated?
  • How are browser caching and variations in browser option settings?
  • How are flash, applets, java scripts, ActiveX components, etc. to be maintained, tracked, controlled, and tested?

From the usability point of view consider the following:

  • Pages should be 3-5 screens longer.
  • The page layouts and design elements should be consistent throughout the application / web site.
  • Pages should be as browser-independent or generate based on the browser-type.
  • There should be no dead-end pages. A link to a contact person or organization should be included on each page.
Read More about Software Testing Tutorials