# Testing methodologies & SDLC

There are various types of testing. Below the types using in testing

1. **Unit Testing**: This involves testing individual components or modules of a software application to ensure they function correctly in isolation. Unit tests are typically automated and focus on small units of code.
    
2. **Integration Testing**: Integration testing verifies that individual units or modules work together as expected when integrated. It ensures that different parts of the system can communicate and exchange data correctly.
    
3. **System Testing**: System testing evaluates the behavior of the entire system as a whole. It tests the system against its functional and non-functional requirements to ensure it meets the specified criteria.
    
4. **Acceptance Testing**: Also known as User Acceptance Testing (UAT), this type of testing involves validating the system with respect to business requirements and user needs. It ensures that the software meets the expectations of the end-users.
    
5. **Regression Testing**: Regression testing verifies that recent changes or updates to the software have not adversely affected existing functionality. It involves retesting previously tested features to ensure they still work as expected.
    
6. **Performance Testing**: Performance testing assesses the speed, responsiveness, scalability, and stability of a software application under various workload conditions. It helps identify performance bottlenecks and optimize system performance.
    
7. **Load Testing**: Load testing is a subset of performance testing that evaluates how the system behaves under specific load conditions. It simulates real-world usage scenarios to determine the system's capacity limits and potential performance issues under high loads.
    
8. **Stress Testing**: Stress testing evaluates the system's robustness and stability by subjecting it to extreme conditions beyond its normal operational capacity. It helps identify how the system behaves under stressful conditions such as high traffic, data corruption, or resource exhaustion.
    
9. **Security Testing**: Security testing identifies vulnerabilities and weaknesses in the software system that could be exploited by malicious users. It includes various techniques such as penetration testing, vulnerability scanning, and security audits to ensure the system is protected against potential threats.
    
10. **Usability Testing**: Usability testing evaluates the user-friendliness and intuitiveness of the software interface. It involves observing real users as they interact with the system to identify usability issues and gather feedback for improvements.
    
11. **Compatibility Testing**: Compatibility testing ensures that the software functions correctly across different platforms, devices, operating systems, and web browsers. It verifies that the application is compatible with the intended environment and delivers a consistent user experience
    

2. The software testing life cycle has several phases
    
    **Requirement Analysis**: In this phase, the testing team analyzes the requirements documentation to understand the features, functionalities, and objectives of the software being developed. This helps in creating a comprehensive test plan and test cases aligned with the project requirements.
    
3. **Test Planning**: Test planning involves defining the overall testing strategy, objectives, scope, timelines, resources, and risks associated with the project. Test plans are created based on the information gathered during the requirement analysis phase.
    
4. **Test Case Development**: Test cases are designed in this phase based on the test plan and requirements documentation. Test cases outline the steps to be followed, the expected outcomes, and the test data required to validate the functionality of the software.
    
5. **Test Environment Setup**: The testing team sets up the test environment, which includes hardware, software, and other resources required for testing. This phase ensures that the testing environment mirrors the production environment as closely as possible.
    
6. **Test Execution**: Test execution involves running the test cases created during the test case development phase. Testers execute the tests, record the results, and report any defects or issues encountered during testing. Test execution may be performed manually or automated depending on the project requirements.
    
7. **Defect Tracking and Management**: Defects identified during test execution are logged, tracked, and managed in this phase. Defects are prioritized based on severity and impact, and resolutions are proposed, implemented, and verified.
    
8. **Test Reporting**: Test reporting involves generating and communicating test reports to stakeholders. Test reports summarize the testing activities, including test results, defect metrics, test coverage, and any other relevant information.
    
9. **Test Closure**: The test closure phase marks the end of the testing process. It involves reviewing the test deliverables, assessing the testing process against predefined metrics and objectives, documenting lessons learned, and preparing for project closure.
    

3. As a manual tester, possessing certain qualities is essential to effectively carry out testing activities and contribute to the quality assurance process. Here are some key qualities:
    
    1. **Attention to Detail**: Manual testers need to meticulously review requirements, test cases, and test scenarios to identify potential defects and ensure thorough test coverage. For example, when testing a web application's registration form, a manual tester carefully verifies each input field, including validation rules and error messages, to ensure they align with the specified requirements.
        
    2. **Analytical Skills**: Manual testers should be able to analyze complex systems and identify potential areas of risk or vulnerability. For instance, when testing a financial software application, a manual tester may need to analyze transactional workflows, identify critical paths, and devise test scenarios to validate the accuracy and reliability of financial calculations.
        
    3. **Communication Skills**: Effective communication is crucial for manual testers to collaborate with cross-functional teams, report defects, and provide feedback on the software under test. For example, a manual tester should clearly document test results, report defects with reproducible steps, and communicate with developers to ensure issues are resolved promptly.
        
    4. **Problem-Solving Ability**: Manual testers encounter various challenges during testing, such as ambiguous requirements, unexpected behavior, or technical issues. They need strong problem-solving skills to troubleshoot issues, propose solutions, and adapt testing strategies as needed. For example, when encountering compatibility issues with a web application across different browsers, a manual tester may troubleshoot the issue, consult browser compatibility matrices, and adjust test execution accordingly.
        
4. Agile and Waterfall are two distinct software development methodologies, each with its own approach to the Software Development Life Cycle (SDLC). Here are the key differences between Agile and Waterfall:
    
    1. **Approach to Development**:
        
        * **Waterfall**: Waterfall follows a sequential, linear approach to software development. Each phase of the SDLC (such as requirements, design, implementation, testing, deployment, and maintenance) is completed sequentially, with one phase leading into the next. Progress moves in a downward, or "waterfall," fashion, and changes are difficult to incorporate once a phase is completed.
            
        * **Agile**: Agile, on the other hand, is an iterative and incremental approach to software development. It breaks the project into small increments called "sprints" or "iterations." Each sprint typically lasts for a few weeks and involves cross-functional teams working collaboratively to deliver working software at the end of each iteration. Agile allows for flexibility and adaptation to changing requirements throughout the development process.
            
    2. **Flexibility and Adaptability**:
        
        * **Waterfall**: Waterfall is less flexible and adaptable to changes in requirements or project scope once the development process has begun. Changes are costly and may require revisiting previous phases of the SDLC.
            
        * **Agile**: Agile embraces change and welcomes feedback from stakeholders throughout the development process. It allows for continuous refinement of requirements and iterative development, enabling teams to respond quickly to changing priorities or market conditions.
            
    3. **Customer Involvement**:
        
        * **Waterfall**: Customer involvement typically occurs at the beginning and end of the project, with limited opportunities for feedback and collaboration during the development process.
            
        * **Agile**: Agile encourages close collaboration with customers and stakeholders throughout the project. Customers are actively involved in defining requirements, providing feedback on deliverables, and prioritizing features, ensuring that the final product meets their needs and expectations.
            
    4. **Delivery Time and Risk Management**:
        
        * **Waterfall**: Waterfall projects often have longer delivery times, as the entire project must be completed before the final product is delivered. Risk management tends to be more challenging, as issues may not be identified until late in the development process.
            
        * **Agile**: Agile promotes faster delivery of working software through incremental releases. By delivering small, working increments of the product at regular intervals, Agile teams can identify and mitigate risks early in the development process.
            
    5. **Documentation**:
        
        * **Waterfall**: Waterfall projects typically require extensive documentation, with comprehensive requirements, design specifications, and documentation for each phase of the SDLC.
            
        * **Agile**: Agile focuses on delivering working software over comprehensive documentation. While documentation is still important in Agile projects, the emphasis is on collaboration, communication, and delivering value to the customer.
            
    6. **Team Structure and Communication**:
        
        * **Waterfall**: Waterfall projects often have a hierarchical team structure, with distinct roles and responsibilities for each phase of the SDLC. Communication tends to be more formal and structured.
            
        * **Agile**: Agile promotes a cross-functional team structure, with members from different disciplines (such as development, testing, and design) working collaboratively in self-organizing teams. Communication is frequent, informal, and focused on collaboration and problem-solving.
