What Is the Software Testing Life Cycle (STLC)? Phases Explained

๐Ÿ“‹ Table of Contents โ–พ
  1. The Six Phases of the STLC
  2. Common Mistakes

While the SDLC describes how software is built, the Software Testing Life Cycle (STLC) describes how software is tested. The STLC is a structured sequence of phases that QA teams follow to plan, prepare, execute and close testing activities. Without a defined STLC, testing becomes ad hoc โ€” testers jump straight to execution without proper planning, miss critical scenarios, and cannot clearly communicate progress to stakeholders.

The Six Phases of the STLC

The STLC consists of six phases, each with its own entry criteria (what must be true before you start), activities (what you do) and exit criteria (what must be true before you move on). These criteria are the guardrails that prevent teams from rushing through testing or declaring completion prematurely.

# STLC phases with entry/exit criteria
STLC = [
    {
        "phase": "1. Requirements Analysis",
        "entry_criteria": [
            "Requirements document is available and reviewed",
            "Stakeholders are identified and accessible",
        ],
        "activities": [
            "Identify testable requirements",
            "Clarify ambiguities with business analysts",
            "Create Requirements Traceability Matrix (RTM)",
        ],
        "exit_criteria": [
            "RTM is signed off",
            "All requirements are classified as testable or non-testable",
        ],
    },
    {
        "phase": "2. Test Planning",
        "entry_criteria": ["RTM is approved", "Project timeline is available"],
        "activities": [
            "Define test strategy and scope",
            "Estimate effort and resources",
            "Identify tools and environments needed",
            "Create the test plan document",
        ],
        "exit_criteria": ["Test plan is reviewed and approved by stakeholders"],
    },
    {
        "phase": "3. Test Case Design",
        "entry_criteria": ["Test plan is approved", "Requirements are stable"],
        "activities": [
            "Write detailed test cases with steps and expected results",
            "Design test data",
            "Conduct test case reviews",
        ],
        "exit_criteria": [
            "Test cases are reviewed and approved",
            "Test data is prepared",
        ],
    },
    {
        "phase": "4. Environment Setup",
        "entry_criteria": ["Test cases are ready", "Hardware/software specs defined"],
        "activities": [
            "Configure test environments",
            "Install builds and dependencies",
            "Run smoke tests to verify environment readiness",
        ],
        "exit_criteria": ["Smoke test passes on the configured environment"],
    },
    {
        "phase": "5. Test Execution",
        "entry_criteria": ["Environment is ready", "Build is deployed and smoke-tested"],
        "activities": [
            "Execute test cases and log results",
            "Report defects for failures",
            "Re-test fixed defects",
            "Run regression tests",
        ],
        "exit_criteria": [
            "All planned tests executed",
            "Defect reports filed and triaged",
            "Exit criteria met (e.g. 95% pass rate, no open Critical bugs)",
        ],
    },
    {
        "phase": "6. Test Closure",
        "entry_criteria": ["Test execution is complete", "All defects triaged"],
        "activities": [
            "Generate test summary report",
            "Lessons learned meeting",
            "Archive test artefacts",
            "Calculate test metrics (pass rate, defect density)",
        ],
        "exit_criteria": [
            "Test summary report signed off",
            "Artefacts archived for future reference",
        ],
    },
]

for phase in STLC:
    print(f"\n{phase['phase']}")
    print(f"  Entry: {'; '.join(phase['entry_criteria'])}")
    print(f"  Exit:  {'; '.join(phase['exit_criteria'])}")
Note: Entry and exit criteria are not bureaucratic checkboxes โ€” they are quality gates that protect your team. Entry criteria prevent you from starting a phase without the necessary inputs (testing without approved requirements is guesswork). Exit criteria prevent you from moving on prematurely (declaring test execution “complete” while 30 % of cases remain unexecuted is a risk the entire team should know about).
Tip: Create a simple one-page checklist for each STLC phase and keep it in your team wiki. Before transitioning between phases, run through the checklist as a team. This takes five minutes and catches oversights that would otherwise cost days of rework later in the project.
Warning: Skipping the Test Closure phase is one of the most common STLC failures. Teams finish execution, ship the product and immediately move to the next project without conducting a lessons-learned review or archiving test artefacts. This means the same mistakes repeat on the next project, and institutional knowledge about what worked and what failed is lost.

Common Mistakes

Mistake 1 โ€” Jumping directly to Test Execution without proper planning

โŒ Wrong: Receiving a build and immediately starting to “click around” without written test cases, a defined scope, or an approved test plan.

โœ… Correct: Following the STLC sequence โ€” analyse requirements, create a test plan, design test cases, set up the environment, and only then begin executing tests.

Mistake 2 โ€” Ignoring exit criteria and moving on when “time runs out”

โŒ Wrong: “We ran out of time so testing is done. Let us deploy.”

โœ… Correct: “We ran out of time. Here is a risk report showing which tests were not executed, which defects remain open, and the potential impact of shipping without completing these items. The stakeholders can make an informed go/no-go decision.”

🧠 Test Yourself

What is the primary purpose of entry and exit criteria in the STLC?