Disable copy text

Software Testing Concepts

What is Software testing?

Software testing is any activity aimed at evaluating an attribute or capability of a program or system and determining that it meets its required results. Although crucial to software quality and widely deployed by programmers and testers, software testing still remains an art, due to limited understanding of the principles of software. The difficulty in software testing stems from the complexity of software: we cannot completely test a program with moderate complexity. Testing is more than just debugging. The purpose of testing can be quality assurance, verification and validation, or reliability estimation. Testing can be used as a generic metric as well. Correctness testing and reliability testing are two major areas of testing. Software testing is a trade-off between budget, time and quality

What are testing types?

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. A test of new or repaired equipment by turning it on. If it smokes... guess what... it doesn't work! The term also refers to testing the basic functions of software. The term was originally coined in the manufacture of containers and pipes, where smoke was introduced to determine if there were any leaks. 


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. Load testing operates at a predefined load level, usually the highest load that the system can accept while still functioning properly.


Regression Testing:


Regression testing is a style of testing that focuses on retesting after changes are made. In traditional regression testing, we reuse the same tests (the regression tests). In risk-oriented regression testing, we test the same areas as before, but we use different (increasingly complex) tests. Traditional regression tests are often partially automated. These note focus on traditional regression.

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. Stress testing deals with the quality of the application in the environment.


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 developer.


Performance Testing:

 
In this type of testing, it is carried out to ensure that the application responds in the time limit set by the user. It measures and evaluates response time, transaction rates to other sensitive requirement of an application. It improves the customer satisfaction by providing reliable product.



Functional Testing:


In Functional testing verifies that each function of the software application operates in conformance with the requirement specification. This testing mainly involves black box testing and it is not concerned about the source code of the application.



Each and every functionality of the system is tested by providing appropriate input, verifying the output and comparing the actual results with the expected results.

This testing involves checking of User Interface, APIs, Database, security, client/ server applications and functionality of the Application Under Test. The testing can be done either manually or using automation

Why do we do functional testing?

The prime objective of Functional testing is   checking the functionalities of the software system. It mainly concentrates on -
  • Mainline functions:  Testing the main functions of an application
  • Basic Usability: It involves basic usability testing of the system. It checks whether an user can freely navigate through the screens without any difficulties.
  • Accessibility:  Checks the accessibility of the system for the user.
  • Error Conditions: Usage of testing techniques to check for error conditions.  It checks whether suitable error messages are displayed.


Soak Testing:
 
Soak testing is running a system at high levels of load for prolonged periods of time. A soak test would normally execute several times more transactions in an entire day than would be expected in a busy day, to identify any performance problems that appear after a large number of transactions have been executed. Also, it is possible that a system may stop working after a certain number of transactions have been processed due to memory leaks or other defects. Soak tests provide an opportunity to identify such defects, whereas load tests and stress tests may not find such problems due to their relatively short duration.A soak test would run for as long as possible, given the limitations of the testing situation. For example, weekends are often an opportune time for a soak test.
There are some typical problems identified during soak tests are:
=> Serious memory leaks that would eventually result in memory crisis.
=> Failure to close connections between tiers of a multi-tiered system under some circumstances   which could stall some or all modules of the system.
=> Failure to close database cursors under some conditions which would eventually result in the entire system stalling.
=> Gradual degradation of response time of some functions as internal data structures becomes less efficient during a long test.

Apart from monitoring response time, it is also important to measure CPU usage and available memory. If a server process needs to be available for the application to operate, it is often worthwhile to record its memory usage at the start and end of the soak test. It is also important to monitor internal memory usages of facilities such as Java virtual machines, if applicable.

What are the differences between Smoke and Sanity testing?

Smoke Testing :

·         Smoke testing originated in the hardware testing practice of turning on a new piece of hardware for the first time and considering it a success if it does not catch fire and smoke. In software industry, smoke testing is a shallow and wide approach whereby all areas of the application without getting into too deep, is tested.
·         A smoke test is scripted, either using a written set of tests or an automated test
·         A Smoke test is designed to touch every part of the application in a cursory way. It’s shallow and wide.
·         Smoke testing is conducted to ensure whether the most crucial functions of a program are working, but not bothering with finer details. (Such as build verification).
·         Smoke testing is normal health check up to a build of an application before taking it to testing in depth.
Sanity Testing :
·         A sanity test is a narrow regression test that focuses on one or a few areas of functionality. Sanity testing is usually narrow and deep.
·         A sanity test is usually unscripted.
·         A Sanity test is used to determine a small section of the application is still working after a minor change.
·         Sanity testing is a cursory testing, it is performed whenever a cursory testing is sufficient to prove the application is functioning according to specifications. This level of testing is a subset of regression testing.
·         Sanity testing is to verify whether requirements are met or not, checking all features breadth-first.

Smoke Testing
Sanity Testing
      Smoke Testing is performed to ascertain that the critical functionality of the program is working fine
      Sanity Testing is done to check the new functionality / bugs have been fixed
      The objective of this testing is to verify the "stability" of the system in order to proceed with more rigorous testing
      The objective of the testing is to verify the "rationality" of the system in order to proceed with more rigorous testing
      This testing is performed by the developers or testers
      Sanity testing is usually performed by testers
      Smoke testing is usually documented or scripted
      Sanity testing is usually not documented and is unscripted
      Smoke testing is a subset of Regression testing           
      Sanity testing is a subset of Acceptance testing
      Smoke testing exercises the entire system from end to end
      Sanity testing exercises only the particular component of the entire system
Smoke testing is like General Health Check Up
      Sanity Testing is like specialized health check up

What is Priority and Severity of a bug?
·         Priority represents the importance of fixing a bug, and reflects a business decision as to how soon that bug should be fixed.
·         Priority is associated with the standard of the application.
·         Priority is something is affordable or deserves prior attention.
Severity rates the impact of a bug on the perceived quality of the product. Therefore, it's important to be clear how the severity of bugs is assigned. Severity is often made overly complicated. It becomes less so once issues more properly aligned with priority and class are factored out.
Severity is associated with the scheduling.
There are many components to severity, but this document will condense them down to two: impact and visibility.
Impact is how disruptive it is to users doing their job when, or if the bug is encountered.
Visibility is how likely the bug will be encountered by a typical user of the feature.
Lets take an scenario which deals with the high priority and low severity :
Just think of “Gmail” where you usually perform login by providing valid user name and corresponding password but how frequently we click on the link “Help” link appear on the login page. Suppose clicking on Help link crashes the server which makes this bug as high severity but its priority is low as its usage is low.
Now take an example of high severity and low priority.
Think of a company website, on Home page the name of the company is mis-spelled. Though its a low priority but with a high severity as the name of the company appearing on the Home page is improper and will affect the reputation of the company. So its a high severity with low priority bug.