Welcome back to yet another weekly edition of the System Design Weekly! In episode 9, we are exploring one of the most important parts of Software Engineering - The Software Testing.
Software comes in many forms, built with diverse tech stacks and designed to meet various functional and non-functional requirements. That’s why there’s no universal approach to testing. In fact, the industry uses over 100 different testing methods. Today, we’ll explore 20 of the most popular ones.
In this week’s Tech Spotlight, we present yet another article by DropBox’s engineering team discussing how & why they built their in-house Load Balancer called Robinhood.
🧪 20 Ways for Software Testing
Software testing can be classified across three dimensions: by level, by purpose, and by execution method, with additional specialised types for targeted use cases.
🪜Tests by Level
Unit Testing: Tests individual components (functions, classes). Written by developers. Fast and automated.
Integration Testing: Ensures modules work together properly. Written by devs and QAs.
System Testing: Tests the full, integrated application. Managed by QAs. Covers end-to-end workflows.
Acceptance Testing: Verifies business requirements are met before release. Often done by Solution Architects.
🎯 Tests by Purpose
Regression Testing: Ensures old functionality still works after updates.
Smoke Testing: High-level check after build/deploy to ensure critical functionality works.
Functional Testing: Verifies specific software features behave as expected (black-box).
Sanity Testing: Quick checks after minor changes to ensure stability.
Exploratory Testing: Manual, unscripted testing to find unexpected issues.
Non-Functional Testing: Focuses on performance, scalability, security, and usability.
Includes: Performance, Load, Stress, and Security Testing
⚙️ Tests by Execution
Manual Testing: Performed by humans without automation.
Automated Testing: Uses scripts/tools to run and verify tests efficiently.
🧩 Specialised Tests
Black-Box Testing: Focuses on inputs/outputs, no internal knowledge.
White-Box Testing: Tests internal code and logic.
Grey-Box Testing: Combines limited internal knowledge with external testing.
A/B Testing: Compares different versions to measure performance.
Performance Testing: Measures system responsiveness under load.
Load Testing: Under expected usage.
Stress Testing: Beyond normal limits.
Security Testing: Detects vulnerabilities and ensures system safety.
» Looking for a deep-dive? Checkout my blog on Medium!
🔦 Tech Spotlight!
If you're familiar with load balancers, you know they're designed to distribute traffic evenly across multiple servers. One common approach is the round-robin algorithm, which cycles through servers to allocate requests uniformly. But what happens when your servers don't have equal capacity? Not every machine can handle the same amount of load.
This was the exact challenge faced by engineers at DropBox, prompting them to create a custom load balancer called Robinhood.
➥ Robinhood - The in-house load balancing service
The article talks about what challenges they faced before Robinhood and how they made sure that the new load-balancer is scalable and fault tolerant!
Certainly an interesting read for System Design enthusiasts!
And that is it for this edition! If you enjoyed what you read, consider clicking the ❤️ button below and leaving a comment.
See you next week in yet another release of System Design Weekly! Till then, happy learning!