qahawk.com
Published at

Regression Testing

Regression testing is a way of making sure new changes in the system do not break existing functionality.

Regression testing is a way of making sure new changes in the system do not break existing functionality.

Car Mechanic Analogy

Now, using the same car mechanic example: imagine you’re a car mechanic who just upgraded a car’s engine for better performance. Just because the new engine works doesn’t mean everything else in the car still functions correctly. You need to verify:

  • Does the fuel system handle the increased power?
  • Is the transmission still synchronized?
  • Do the brakes still respond effectively?
Regression Testing Mechanic Example
Regression Testing Mechanic Example

This comprehensive re-testing of existing functionality after a change is what we call Regression Testing.

Real-World Example: Banking App Security Update

Let’s say we’re adding Two-Factor Authentication (2FA) to our banking app. Just like upgrading a car’s engine affects multiple systems, this security enhancement could impact various features.

Regression Testing Banking Example
Regression Testing Banking Example

The Changed Component

def login_user(username, password, two_factor_code=None):
    # Original login logic
    if not validate_credentials(username, password):
        return "Invalid credentials"
    
    # New 2FA logic
    if two_factor_required(username):
        if not two_factor_code:
            return "2FA code required"
        if not verify_2fa_code(username, two_factor_code):
            return "Invalid 2FA code"
         
    return "Login successful"

Regression Test Suite

Test 1: Basic Login Still Works

class LoginRegressionTests:
    def test_basic_login_still_works(self):
        # Verify basic login still works for accounts without 2FA
        result = login_user("regular_user", "password123")
        assert result == "Login successful"

Test 2: Remember Me Feature

    def test_remember_me_feature(self):
        # Check if "Remember Me" still works with new auth flow
        user = login_with_remember_me("test_user", "password123")
        assert user.session.is_remembered == True

Test 3: Password Reset Flow

    def test_password_reset_flow(self):
        # Ensure password reset doesn't break with 2FA
        result = initiate_password_reset("test_user")
        assert result == "Reset email sent"

Test 4: Account Lockout

    def test_account_lockout(self):
        # Verify lockout rules still apply correctly
        for _ in range(5):
            login_user("test_user", "wrong_password")
        assert is_account_locked("test_user") == True

Connected Features Requiring Testing

Payment Processing

def test_payment_still_secure():
    # Login with 2FA
    login_user("test_user", "password123", "123456")
    
    # Attempt payment
    result = process_payment(100, "recipient")
    assert result == "Payment successful"
    
    # Verify session handling
    assert is_session_valid() == True

Session Management

def test_session_behavior():
    # Login scenarios to test
    scenarios = [
        ("regular_login", None),
        ("2fa_login", "123456"),
        ("remembered_user", None)
    ]
    
    for login_type, code in scenarios:
        session = create_session(login_type, code)
        assert session.is_valid()
        assert session.security_level == expected_level(login_type)

Remember: Just like how changing a car’s engine requires testing the fuel system, transmission, and overall performance, adding 2FA requires testing login flows, session management, and all security-dependent features. Regression testing ensures one improvement doesn’t create problems elsewhere in the system.

Sharing is caring!
Authors
  • avatar
    Name
    Shubham Kakkad
    Twitter
    @LinkedIn
  • Writer at qahawk