First of all, we need to understand why Software Testing:-
As we know that every software in the world to do some business and to ensure high quality so it is really important to point out the defects and errors that developer may leave during the development phases which can be affected on software business and their quality.
Example: Programmers may make a mistake during the implementation of the software. There could be many reasons for this like lack of experience of the programmer, lack of knowledge of the programming language, insufficient experience in the domain, incorrect implementation of the algorithm due to complex logic or simply human error.
Functional Software Testing:-
It is the type of testing done against the business requirements of the application and also called as Black box testing. Based on the functional specification document this type of testing is to be carried out to evaluate the system’s compliance with its specified requirements like Business requirements or UI. It can be done manually or by using some automation tool.
Types of Functional Software Testing:-
In the types of functional testing following testing types should be cover:-
It is the first level of software testing where the smallest unit of software is a line of code and testing that is called as unit testing. Unit is a part of White Box Testing.
Integration Testing is defined as a type of testing where software modules are integrated logically and tested as a group. Integration Testing focuses on checking data flow between two or more modules so it is also necessary to verify the software modules work in unity. Hence it is also called as ‘I & T’ (Integration and Testing), ‘String Testing’ and sometimes ‘Thread Testing’ or second level of software testing.
Approaches of Integration Testing:-
- Incremental Integration Testing:-
Incrementally add the modules to make it as a group and test the data flow. It also has three sub approaches to accomplish the testing.
- Top-Down IT
Incrementally add the modules (feature) and check the data flow from the parent module to the child module.
Exp:- parent >child1>child2>child3>child4……..child n.
- Bottom-Up IT:-
Incrementally add the modules (feature) and check the data flow from the child module to the parent module.
Exp:- Child n>child n>child n>child n………………..….……..Parent.
- Sandwich IT:-
Combination of both Top-Down and Bottom-Up approach is called as sandwich integration testing.
- Top-Down IT
- Non-Incremental Integration Testing:-
In this approach we can’t determine who is a parent and who is the child module here all component are integrated together at once and then tested. And it also called as Big Bang Approach of Integration Testing.
It is also a level of software testing where the functionalities of the software tested from end to end respectively. That’s why it is called as an end to end testing means navigate through all the features check whether end business of the software is working or not. In short Testing of the user’s experience with the application.
That is a very basic description of what is involved in system testing. we need to build detailed test cases and test suites that test each aspect of the application.
Testing the software by the end-user or customer to ensure whether the product is acceptable or not. This is the last level of software testing.
Acceptance testing has two approaches:-
- Alpha Testing:-
Alpha testing performed by Test engineers who are usually internal employees of the organization to ensure whether the product is ready or not before officially released.
- Beta Testing:-
Beta testing is performed by Clients or End Users who are not employees of the organization before officially released the software to ensure whether the software has all the necessary changes or bug fixed or not. ( because if the all the changes are done with the software before released then it will become easy to use )Most of the issues or feedback is collected from Beta testing will be implemented in future versions of the product and it also concentrates on the quality of the product, but gathers users input on the product and ensures that the product is ready for real-time users.
Software Testing Level’s
Testing the Basic and Critical feature of the deployed software before doing thorough testing is called as Smoke testing. This serves as confirmation whether the QA team can proceed with further testing.
In simple terms, we are verifying whether the important features are working and there are no showstoppers in the build that is under testing. It is also called as build verification and Dry Run.
Real-Time Example: Assume, we are working for an e-Commerce site (Flipkart, Amazon, Myntra). When a new build is released for testing, as QA we have to make sure whether the core functionalities are working or not. So we try to access the e-Commerce site and user registration, login, search product, add an item into your cart to place an order till payment gateway. That’s a major flaw in most of the e-Commerce sites. If this flow works, now we can say this build is passed. we can move on to functional testing on the same build.
Why Test Engineers should do smoke testing:-
- Test engineers should perform smoke testing to check whether the build is testable or not it should work at least on positive input or cases.
- Test engineers should perform smoke testing because the developer will get enough time to fixed the bug’s if he Test engineers found initially.
- We perform some testing to check whether a build is installed or not that is why it is also called build verification testing.
Sanity Testing : –
Sanity is a subset of regression testing. Where the test engineer test only impacted regions due to changes in requirement. The impacted region may be basic or critical.
Generally, this testing performed on the build where the production deployment is required immediately like a critical bug fix or some changes happens.
Real-Time Example: Assume, we are working for Paytm and the wallet limit is changed from 10,000 to 20,000 now QA team will make a plan to observe which feature get impacted that we need to test. like first of all wallet (as per new requirement user should able to add 20,000) Pay or Money Transfer (as per new requirement user should able to Transfer 20,000 to other user) Passbook (as per new requirement user should able see their all records till 20,000) Recharge (as per new requirement user should able to recharge of 20,000).
Regression is a superset of sanity testing. In which as the software upgrades some new feature gets added because of these new features some of old feature might have been impacted ( fixing one thing has not broken another thing.). So testing those old features to ensure whether changes have impacted them or not is called as Regression testing. Or we can say “Testing the Unchanged feature of the software” .
During regression testing, new test cases are not created but previously created test cases are re-executed. (As Regression [noun] literally means the act of going back to a previous place or state, reversion.)
Regression testing can be performed during any level of testing (Unit, Integration, System, or Acceptance) but it is done mostly during System Testing.
Approaches to Regression Testing:-
- Unit Regression Testing:-
When changed (or new feature) and Unchanged (old feature) is in the same (common) module.
Real-Time Example: Assume, we are working for Paytm and there is a common module is Money Transfer. inside that there is a sub feature wallet through which user can transfer their Money which is an old feature. Now new feature get added as UPI/ID or Bank now we need to do Regression Testing for wallet feature because of new feature (UPI/Bank) the wallet feature may be affected.
- Regional Regression Testing:-
When changed (or new feature) and Unchanged (old feature) is in the same different module.Real-Time Example: Assume, we are working for G-mail there is a feature as an attached file inside compose feature and here attached file limit changes from (10mb to 20mb). Now we need to do Regression testing which interrelated with the compose feature as sent, Draft, Trash, All mail, the inbox of other users. These all other features are separated with composing feature but they should accept these new data limit. this is just similar to sanity testing. That’s why Regression testing is called as a superset of sanity testing.
This Testing also is known as Random Testing or Monkey Testing, Fuzzy Testing, Gorilla Testing, is a method of software testing without any planning and documentation (Test cases). The tests are conducted informally and randomly without any formal procedure or expected results.
The tester improvises the steps and arbitrarily executes them. Though defects found using this method are more difficult to reproduce (since there are no written test cases), sometimes very interesting defects are found which would never have been found if written test cases existed and were strictly followed. This method is normally used at the end of the release or during Acceptance Testing.
The success of ad hoc testing depends on the creativity of the tester (and, of course, luck).
Exploratory testing – as the name suggests, is a simultaneous learning, test design, and test execution process. We can say that in this testing test planning, analysis, design and test execution, are all done together just for understand the software.
This testing is about exploring the system and encouraging real-time and practical thinking of a tester.
For Example, if you open a shopping website (Flipkart, Myntra, Amazon), you have a general idea that this shopping site will let you shop by selecting a product of your choice and then paying for the same.
During this process, you might learn that the site provides you with virtual human look-alike which helps you in the product selection process.
As a tester, you not only need to verify whether a system is working as expected but also check if that system is not behaving in a way which is not expected.
As e-commerce service provider website with the following components:
- Search product
- Order History
A general idea to start exploratory testing will be to Login or book a order.
Why Test Engineer and when they do exploratory testing:-
- Whenever the Testing team don’t have any requirement from the client.
- Whenever the Testing team have a requirement but not understandable.
- Whenever Testing team have the requirement and understandable too but there is no time to go through.
Compatibility is non-functional testing to ensure customer satisfaction. It is to determine whether your software /application or product is proficient enough to run in different browsers, database, hardware, operating system, mobile devices, and networks.
Hence it’s important to test the application in all possible manners (hardware and software environment) to reduce failures and overcome from embarrassments of bug’s leakage.
Types of Software Compatibility Testing:-
- Browser compatibility
- Hardware compatibility
- Networks compatibility
- Operating System compatibility
- Version compatibility
Defects found during compatibility testing:-
- Change look and feel (color and text).
- Object and component overlapping.
- Broken frames and Table.
- Alignment issue.
- Scattered objects.
- Font size, style, colour issue.
- Broken functionality.
- Scrollbar issue.
Usability Testing :-
The purpose of testing to review the application user interface and other human factors of the application with the people who will be using the application. This is to ensure that the design (layout and sequence, etc.) enables the business functions to be executed as easily which makes the application user friendly.
In Usability testing some following important points should be cover:-
- The application should be good in look and feel.
- Simple to use.
- Easy to understand.
- The application should be Feature-rich (lots of feature).
- Functionality in fewer efforts (should not complex)