Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Software Testing Readme #757

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 73 additions & 0 deletions Testing/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@

**Testing is the process of evaluating a system or its components to ensure that it meets the specified requirements and functions as intended. Testing helps identify defects, errors, or gaps in the software and verifies that the product is reliable, efficient, and user-friendly.**

Testing can be divided into functional and non-functional testing. To start with, I am going to describe functional testing:

**Functional Testing:** This is a type of software testing that verifies the functionality of a software system or application. The following are the different types of functional testing methods:

**Unit Testing:**
• Unit testing is a level of software testing where individual units or components of a software are tested in isolation. It is typically done by developers to ensure that each unit of the software performs as designed.
• The goal is to validate that each unit of the software works correctly and handles different inputs and edge cases as expected.
• These tests can usually be automated.

**Integration Testing:**
• Integration testing is a level of software testing where individual units are combined and tested as a group to verify that they work together correctly. It focuses on testing the interfaces and interactions between different modules or components of a system.
• The goal is to detect any defects or issues that arise when integrating various parts of the system.
• Integration testing is performed after unit testing and before system testing.

**System Testing:**
• System testing is a level of software testing where the complete and fully integrated software is tested as a whole to evaluate its compliance with the specified requirements.
• It is performed after integration testing.
• The goal is to verify that the system meets the functional and non-functional requirements, such as performance, usability, reliability, and security.

**Acceptance Testing:**
• Acceptance testing is a level of testing where the system is tested for acceptability by the end-users.
• It is performed after system testing and before the system is deployed to production.
• The goal is to ensure that the system meets the business requirements and is acceptable for use.

**Regression Testing:**
• Regression testing is performed to verify that changes or updates to the software have not adversely affected the existing functionality.
• It involves re-executing a subset of previously executed tests to ensure that the system still functions correctly after modifications.

**Performance Testing:**
• Performance testing is a type of testing that evaluates how the system performs under different loads and conditions.
• It measures the responsiveness, stability, and resource utilization of the system under varying workloads.
• The goal is to identify performance bottlenecks, optimize resource usage, and ensure that the system meets the desired performance criteria.

*Unit testing focuses on individual components, while integration testing verifies the interactions between components. System testing evaluates the complete system, and acceptance testing ensures that the system meets business requirements. Regression testing verifies that changes have not introduced new defects, and performance testing measures the system's behavior under different loads. These practices work together to create reliable, efficient, and thoroughly tested software systems.*

**Testing Strategies**

Testing strategies describe how testing is approached and conducted:

**Black Box Testing:**
• Black box testing is a method of software testing that examines the functionality of an application without peering into its internal structures or workings.
• This type of testing is typically conducted by testers who evaluate the software from an end-user perspective.
• The goal is to verify that the software functions as expected based on the specified requirements and to identify any discrepancies.

**Grey Box Testing:**
• Grey box testing is a method of software testing that involves having some knowledge of the internal workings of the application, but not as much as white box testing.
• This approach combines aspects of both black box and white box testing.
• The goal is to design test cases based on a limited understanding of the internal logic and structure of the system, allowing for more thorough testing of both functionality and potential edge cases.

**White Box Testing:**
• White box testing involves testing the internal structures or workings of an application.
• It is typically done by developers who have knowledge of the internal code and architecture.
• The goal is to verify the internal operations of the system, including paths, branches, and loops.

There are “testing development frameworks” as well to consider:

**Test-Driven Development (TDD):**
• TDD is a software development approach where tests are written before the actual code implementation. TDD emphasizes writing small, focused tests that drive the development of the software incrementally.
• The development process follows a cycle of writing a failing test, writing the minimal code to make the test pass, and then refactoring the code.
• It promotes better design, maintainability, and confidence in the code by ensuring that the software is thoroughly tested at every stage of development.

**Behavior-Driven Development (BDD):**
• BDD is an agile software development approach that combines practices from TDD and domain-driven design (DDD).
• It focuses on defining the behavior of the system from the perspective of its stakeholders.
• The scenarios serve as a basis for collaboration, communication, and automated testing.


**Useful Links:**
What is Software Testing? Definition, Types, and Tools - https://katalon.com/resources-center/blog/software-testing#
TDD vs BDD vs ATDD - https://www.browserstack.com/guide/tdd-vs-bdd-vs-atdd
Loading