Testing Fundamentals
Testing Fundamentals is a introduction to the principles and concepts of software testing. It provides a comprehensive overview of the testing process to ensure software quality.
Overview
Introduction
Software Testing Life Cycle
Testing Recommendations
Test Cases
Writing Good Test Cases
Test Case Template
Issues
How to report bugs
Testing Sandbox Credentials
Testing Best Practices
🥳 Introduction
Testing is essential. Not only to prevent and debug annoying bugs but also to help project newcomers better understand the expected functionality of your functions and classes.
Software testing consists of verifying if the actual software product meets the expected requirements and guarantees us that the software product meets the quality standards to be released correctly. It involves running software/system components using manual or automated tools. The purpose of software testing is to identify bugs, gaps, or missing requirements compared to actual requirements.
Software testing is important because if there are any bugs, they can be identified early and can be resolved before the software product is delivered. The proven software product guarantees reliability, security, and user experience, which translates into time savings, profitability, and customer satisfaction.
🎙️Software Testing Life Cycle (STLC)
The Software Testing Life Cycle (STLC) is a sequence of specific activities that are carried out during the testing process to ensure that software quality objectives are met.
Software testing is not just a single/isolated activity, i.e. testing. It consists of a series of activities that are carried out methodologically to help certify your software product.
There are the following major phases in every Software Testing Life Cycle Model (STLC Model).
The Testing features of this project are the following:
Requirement Analysis − The feature requirements collected in the SDLC process are evaluated to identify likely issues. If necessary, the tester may need to consult with interested parties to clarify the requirements (Stakeholders, Developers). These requirements can be functional or non-functional, defining what a function can do or its characteristics respectively. The ability to do manual testing is also assessed during this phase.
Test Planning − The test strategy is outlined in a test plan document. This strategy includes tools needed, testing steps, and roles and responsibilities. Part of determining this strategy is a risk and cost analysis and an estimated timeline for testing.
Test Case Designing − During this phase, test cases are manually created by the Tester following the Test Planning. Each case defines test inputs, test data, pre-conditions, procedures, execution conditions, and expected results. Test cases should be transparent, efficient, and adaptable. Any necessary automation scripts are also created during this phase.
Test Environment Setup − The test environments are configured and deployed. Sometimes this phase also includes setting up test users. Once the environments are deployed, smoke tests are performed to ensure that the environments perform as expected with all intended functions.
Test Execution − All Features are tested in the deployed environments (Test), using established test cases. The expected results of the tests are compared to the actual ones and the results are compiled to inform the development teams that everything is working well.
Defect Reporting − The last phase of the STLC, in which an issue is found by the tester, then a report is prepared for the development team. This bug report should summarize the entire testing process and provide comparisons between the expected and actual results. These comparisons include steps to reproduce, test data, pieces of evidence, and defects found.
💚 Testing Recommendations
This guide is meant to provide a general overview of Testing that leads us to test beautiful software.
🚀 Type of Testing
There are many types of testing that you can use to make sure that changes to the code are working as expected. Not all testing is equal, though, and there are testing practices that differ from each other.
Each type of testing has its features, advantages, and disadvantages as well.
The types of Testing performed on this project are the following:
🛠️ Functional Testing
Functional testing is a quality assurance method and a type of black-box testing that bases its test cases on the specifications of the software component under test. Functions are tested by feeding them input and examining the output. Functional testing is conducted by a tester to evaluate the compliance of a system or component with specified functional requirements.
Key Points +
In software testing, functional testing is a practice that delivers huge benefits to the development process. When done properly, it increases communication between analysts, developers, and testers. The progress of the entire project is objectively visible at any point in time to management by examining the passing (and failing) functional tests. Eventually, the speed of development increases because well-communicated requirements result in less re-work.
🗜️ Integration Testing
Integration testing is a type of software testing where individual units are combined and tested as a group (BD and APIs). The purpose of this level of testing is to expose faults in the interaction between integrated units. Test drivers and test stubs are used to assist in Integration Testing.
Key Points +
This type of integration testing focuses on the interactions and interfaces between integrated components or systems (A system is a group of interacting or interrelated entities that form a unified whole). The test can be either manual or automated.
🔁 Regression Testing
Regression testing is a type of software testing that intends to ensure that changes every time you integrate (enhancements or defect fixes) to the software have not adversely affected it. Re-running of tests can be on both functional and non-functional tests.
The likelihood of any code change impacting functionalities that are not directly associated with the code is always there and it is essential that regression testing is conducted to make sure that fixing one thing has not broken another thing.
Key Points +
During regression testing, new test cases are not created but previously created test cases are re-executed. Prioritize test cases based on business impact and critical features because regression literally means the act of going back to a previous place or state; return or reversion. Though it can be done manually, it is highly recommended that regression testing be automated. And finally, depending on the situation, the scope of the regression test can be full or partial.
🟢 Smoke Testing
Smoke Tests are basic tests that check the basic functionality of the application. They are meant to be quick to execute, and their goal is to give tester the assurance that the major features of the system are working as expected.
Smoke tests can be useful right after a new build is made to decide whether you can run more expensive tests, or right after a deployment to make sure that the application is running properly in the newly deployed environment.
📍 System Testing
System testing is the process of testing an integrated system to verify that it meets specified requirements. The purpose of this test is to evaluate the system's compliance with the business requirements and assess whether it is acceptable for delivery
Key Points +
Since System Testing involves testing the software as a whole, the goal should be to make the test environment as close to the production environment as possible. This process is executed manually. Mostly, the testing does not follow a strict procedure and is not scripted but is rather ad-hoc.
📚 Test Cases
A Test Case is a set of preconditions, procedures (inputs/actions), and postconditions (expected results) that a tester uses to determine whether a system under test satisfies requirements or works correctly. A test case can have one or multiple test scripts, and a collection of test cases is called a test suite.
💡 Writing Good Test Cases
Test cases are typically written by members of the quality assurance (QA) team or the testing team and can be used as step-by-step instructions for each system test. Testing begins once the development team has finished a system feature or set of features. A sequence or collection of test cases is called a test suite.
Writing good test cases is a fundamental part of the Testing Life Cycle (STLC), therefore, as far as possible, write test cases in such a way that you test only one thing at a time. Do not overlap or complicate test cases. Attempt to make your test cases "Atomic" and written in simple and easy-to-understand language.
The main attributes of a well-designed Test Case
Test cases define what must be done to test a system, including the steps executed in the system, the input data values that are entered into the system, and the results that are expected throughout test case execution. Using test cases allows developers and testers to discover errors that may have occurred during development or defects that were missed during ad hoc tests.
Before writing a test case, QA engineers and testing team members should first determine the scope and purpose of the test. This includes understanding the system features and user requirements as well as identifying the testable requirements.
User Functions:
The following actions should be performed as a part of building user functions:
Conditions
The following activities should be performed as a part of building conditions based on user functions:
Test Cases
The following factors should be considered for building test cases:
🎁 Typical Test Case Template
Elements
Description
Test Case ID
The ID of the test case
Title
A title that describes the functionality or feature that the test is verifying
Test Description
Describe in depth all the details about what you are going to test
Preconditions
Any prerequisites or preconditions that must be fulfilled prior to executing the test
Test Data
The data that are to be used while conducting the test
Steps
Step-by-step description to execute the test
Expected Result
An outline of how the system should respond to test case
Test Execution
🐞 Issues
An issue is a condition in a software product that does not meet a software requirement (as stated in the requirement specifications) or end-user expectation (which may not be specified but is reasonable). In other words, a defect is an error in coding or logic that causes a program to malfunction or to produce incorrect/unexpected results. So when the expected and actual behavior is not matching, an incident needs to be raised. An incident may be an Issue.
✏️ How to report bugs
Bug reporting is an important aspect of Software Testing, then if a bug report is effective, its chances of getting fixed are higher. Good Bug report should be clear and concise without any missing key points.
Keep in mind that the objective of writing a Bug report is to enable the developer to visualize the problem. The dev team should clearly understand the issue from the Bug report. Also, report each bug as a separate issue. In case of multiple issues in a single Bug report, a good practice is to split the issues into separate bugs, this ensures that each bug can be handled separately. Finally, remember to provide all the relevant information that the developer is seeking.
Elements
Description
Title
A title that describes all about what comes in the bug
Test Description
Describe in depth all the details clearly about the problem encountered
Preconditions
Any prerequisites or preconditions that must be fulfilled prior to reproduce the bug
Steps
Step-by-step description to reproduce the bug
Expected Result
An outline of how the system should respond and what the user should expect
Actual Result
A deep description of what happened during the test and what the outcome was
Screenshots
Take a Screenshot of the instance of failure with proper captioning to highlight the defect
Labels
Add labels according to the type of bug
⚙️ Testing Sandbox Credentials
Sandbox credentials are the access credentials provided to testers or developers to access the sandbox environment. These credentials are usually different from the production environment credentials to prevent unauthorized access to the actual system.
In the context of testing, sandbox credentials are used to access and test the features and functionalities of an application or system in a safe, isolated environment. By using sandbox credentials, testers and developers can perform various tests, such as integration testing, and acceptance testing, without affecting the production environment. This helps to ensure the quality and reliability of the application or system before it is released to the public.
Gateway
Credentials
Paypal
Login: boh-buyer@koalephant.com - Password: ugp-aez-442-sDW
Amazon
Login: admin01@mooneleaf.com - Password: sandbox4bundle
Credit Card
Take dummy CC numbers here: https://stripe.com/docs/testing?testing-method=card-numbers#cards
🌞 Testing Best Practices
Last updated