Software Testing basics
Let me explain you based on my experience. I will try to simplify as much as possible. My explanation given below will not be definition. It will be more of a knowledge transfer as per my professional experience.
What is testing?
Testing is a process where we test some product to identify defects. This will be done by the new comer to the testing industry most of the time. Here product can be a Mobile app, Web application, Desktop application, ETL based application or it can be anything.
What is QA?
QA is a process to verify that we have a proper development process in place and the developed product is usable. The QA guy will be mostly involved in writing test cases and making sure that product is the usable stage and all acceptance criteria are met.
What is a test case?
A test case is set of instructions/steps you follow in order to test an application. Eg. Simple login functionality for an eCommerce app can have 6 different test cases to test it. The test case should be subjective and any new comer should be able to execute tests case. It should have very detailed instructions. Refer to the screenshot below.
There are many types of testing. But below are set of low-level testing techniques/terms usually being followed in the industry.
Unit Testing: This is done by the developer. He/She will write code to test their own code. The tester/QA does not really have to worry about this part.
Smoke Testing: This is a basic testing we do on a product to make sure that product is testable.
Regression Testing: In regression testing suite, we are going to have a set of tests which we think we need to execute every time the functionality of a product is changed or new functionality is added. This testing usually is very time-consuming. So before we jump into it, we make sure that product is in testable condition by executing a basic set of test cases selected for smoke testing.
Retesting: This is usually done when one bug is resolved. So as a tester, I raise one bug. Meanwhile, I even select set of test cases through which I identified those bugs. Once the bug is marked as fixed or resolved, I execute those set of test cases to make sure that the bug is not found anymore. If the bug is not related to any test cases, I write new test cases and execute those.
Acceptance Testing / UAT: Once you are done with your testing, your product will be handed over to the business team who got the requirement. They will do their own testing to make sure that they can pass on the product to the client or to the consumer.
Apart from above four types of testing, below are few testings we do. All below are usually completely or part of regression testing depending on the product.
Integration Testing: In integration testing, we make sure that all modules of the product are integrated properly. E.g. Verify that Gmail is properly integrated with Google Drive.
Interface & Usability Testing: This is to verify that product retain its interface and functions the same way across all platform combinations. E.g. To verify that eCommerce site loads the same way on all different browsers on all desktop and tablets.
Functional Testing: In functional testing, we make sure that product is functional on specified platforms. Eg. To make sure that user can upload a file from Windows machine and from Mac machine as well with the different combination of browsers.
System Testing: In system testing, you test the entire system to make sure that it works fine before the UAT.
All above was to make sure that the software is functional on different environment/platforms or devices. So, in all, we call those as a functionality testing. Below is list of tests which we perform on the software product where we do not need to know the complete functionality of the product. So we call them nonfunctional tests.
Load Testing/Stress Testing: Here we put the load on the product to make sure that it functions fine. E.g. If you are developing the mobile application, we make sure that after activating all functionalities, it is still functional. In a case of eCommerce application, we verify that the site loads even if 1000s of users are accessing at the same time from different locations.
Compatibility & Migration testing: In this, we make sure that system does not break if migrated to the different platform. If a system is required to not to break. Eg. Java Swing based application is expected to work even if its migrated from windows to Mac/Linux.
Data Conversion Testing: As the name says, e.g. you have all your data into CSV or Excel and those are required to be loaded to MSSQL DB, you have to make sure that all tables and relation ships are created properly.
Security/Penetration testing: If you have an app which faces a large audience, you have to make sure the security of the app by performing various security testing on the same.
Installation testing: Here you make sure that if your system has installation process, it works fine on all different required platforms.
Also, people ask me usually what you do in black box testing or white box testing. So, terms black box testing and white box testings are kinds of grouping of test types or test cases. You test the system without an understanding of internal algorithms are black box testing. Eg. Search functionality in eCommerce application. Your test case is part of regression test here. In white box testing, you know how internal algorithm and data flow. Eg. In ETL based product, you should know end to end, how data is extracted and moved to a different table and what business logics are applied. Usually, there is no concept of black box testing nowadays. As, testers are becoming techie and they know the system internally, including algorithms and data flow. So usually we term it as gray box testing.
There are few terms coined by business people and higher level executive like desktop testing, mobile testing, ETL testing, BI testing, etc. So, all those are high-level words where you are given a product, it can be ETL based product, BI product, IOT based product. So when you hear IOT testing, its more like testing an IOT application. As a QA, you have to define what to test and also define your smoke suite and regression suite.
Test Automation: So there are many tests which you will be testing, again and again, say all your smoke tests and all your regression tests. Those tests you can automate using various tools like selenium, QTP. The process of automating such tests is called test automation.