Combined and Refined Material on Software Testing
Introduction to Software Testing
   ●    Definition:
           ○ A process in the software development lifecycle to verify and validate that the software:
                   ■ Is free of bugs.
                   ■ Meets technical and user requirements.
                   ■ Functions efficiently and effectively.
   ●    Importance:
           ○ Early defect detection saves time and costs.
           ○ Improves software quality and user satisfaction.
           ○ Enhances scalability and security.
           ○ Prevents critical failures and ensures compliance.
Types of Software Testing
   1. Automation Testing:
         ○ Uses scripts and tools to automate manual processes.
         ○ Ideal for load, performance, and stress testing.
   2. Manual Testing:
         ○ Tests without automation tools.
         ○ Focuses on user perspective to improve usability.
   3. Functional Testing:
         ○ Validates software against functional requirements (e.g., unit, integration, system, smoke
             testing).
   4. Non-functional Testing:
         ○ Evaluates aspects like performance, scalability, and usability.
   5. Stress Testing:
         ○ Assesses software limits under extreme conditions.
   6. Maintenance Testing:
         ○ Ensures code changes don’t negatively affect functionality.
Testing Techniques
   1. Black Box Testing:
         ○ Tests the external structure without source code access.
   2. White Box Testing:
         ○ Verifies internal operations with source code access.
   3. Grey Box Testing:
         ○ Combines knowledge of implementation with external testing.
Levels of Software Testing
   1.   Unit Testing: Validates individual software components.
   2.   Integration Testing: Ensures groups of components work together.
   3.   System Testing: Tests the entire system for functionality.
   4.   Acceptance Testing: Evaluates compliance with user and business requirements.
Manual Testing Process
   1. Read and understand project documentation.
   2. Study the Application Under Test (AUT).
   3.   Draft test cases based on requirements.
   4.   Review test cases with the team/client.
   5.   Execute test cases and report bugs.
   6.   Re-test after fixes.
Advantages and Disadvantages of Manual Testing
   ●    Advantages:
           ○ Flexible, intuitive, cost-effective for small projects.
           ○ Easy to learn and adaptable.
   ●    Disadvantages:
           ○ Time-consuming, labor-intensive, and prone to human error.
           ○ Inefficient for repetitive tasks.
Penetration Testing
   ●    Definition:
           ○ Simulates cyberattacks to identify security vulnerabilities.
   ●    Importance:
           ○ Prevents security breaches and validates defenses.
           ○ Ensures compliance and protects organizational reputation.
   ●    Types:
           ○ Internal/External Network, Web/Mobile Applications, SaaS, API, Cloud, IoT, Social
                Engineering, Physical Security.
Steps to Perform Functional Testing
   1.   Identify expected functions.
   2.   Create input datasets.
   3.   Determine expected outputs.
   4.   Execute test cases.
   5.   Compare actual and expected results.
   6.   Validate customer requirements.
Test Cases
   ●    Definition:
           ○ Conditions to verify application features or functions.
   ●    Components:
           ○ Unique name, requirements, preconditions, steps, expected results.
           ○ Must be repeatable and specific.
   ●    Writing Principles:
           ○ Keep simple and user-focused.
           ○ Avoid repetition, ensure full coverage, and use techniques like Boundary Value Analysis
                (BVA).
Iterative Development Model
   ●    Definition:
           ○ Repeated cycles of planning, coding, and testing.
   ●    Advantages:
           ○ Early feedback, quick releases, and manageable risks.
   ●    Disadvantages:
           ○ Resource-intensive and potentially costly.
   ●   Best Use:
          ○ Projects with evolving or undefined requirements.
Pros and Cons of Penetration Testing
   ●   Pros:
          ○ Identifies vulnerabilities, ensures compliance, improves security.
          ○ Prevents data breaches and provides training opportunities.
   ●   Cons:
          ○ Expensive, time-consuming, limited in scope, and may disrupt services.
Conclusion
   ●   Software and penetration testing are critical for delivering secure, reliable, and high-quality software.
   ●   They reduce costs and risks, improve user satisfaction, and maintain software integrity.
   ●   Testing ensures adaptability and prevents critical failures in real-world scenarios.