В чем разница между SDLC и STLC?

«В чем разница между SDLC и STLC?» — вопрос из категории Основы тестирования, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

SDLC (Software Development Life Cycle) — полный жизненный цикл разработки ПО. STLC (Software Testing Life Cycle) — фаза тестирования в рамках SDLC, фокусирующаяся на обеспечении качества.

Сравнение процессов:

graph TD
    subgraph "SDLC (Полный цикл разработки)"
        A1[Сбор требований] --> A2[Планирование]
        A2 --> A3[Проектирование архитектуры]
        A3 --> A4[Разработка кода]
        A4 --> subgraph "STLC (Цикл тестирования)"
            B1[Анализ требований] --> B2[Планирование тестов]
            B2 --> B3[Разработка тестов]
            B3 --> B4[Выполнение тестов]
            B4 --> B5[Отчетность]
        end
        B5 --> A5[Деплой]
        A5 --> A6[Поддержка]
    end

Ключевые отличия:

Аспект SDLC STLC
Объем Весь процесс от идеи до поддержки Только фаза тестирования
Основная цель Создание программного продукта Обеспечение качества продукта
Участники Бизнес-аналитики, архитекторы, разработчики, DevOps, QA QA-инженеры, тест-аналитики, иногда разработчики
Ключевые артефакты ТЗ, архитектурные диаграммы, исходный код Test Plan, тест-кейсы, баг-репорты, отчеты
Входные данные Бизнес-требования Требования, спецификации, дизайн-документы
Выходные данные Готовый продукт Информация о качестве, баг-репорты, метрики

Пример взаимосвязи на практике:

// SDLC: Разработка класса (фаза разработки)
public class PaymentProcessor {
    private PaymentGateway gateway;

    public PaymentProcessor(PaymentGateway gateway) {
        this.gateway = gateway;
    }

    public boolean processPayment(Order order, double amount) {
        if (amount <= 0) {
            throw new IllegalArgumentException("Amount must be positive");
        }
        return gateway.charge(order.getCustomerId(), amount);
    }
}

// STLC: Тестирование класса (фаза тестирования)
public class PaymentProcessorTest {
    @Test
    void processPayment_ValidAmount_ReturnsTrue() {
        // Unit test (разработка тестов)
        PaymentGateway mockGateway = mock(PaymentGateway.class);
        when(mockGateway.charge(anyString(), anyDouble())).thenReturn(true);

        PaymentProcessor processor = new PaymentProcessor(mockGateway);
        Order order = new Order("cust123");

        assertTrue(processor.processPayment(order, 100.0));
    }

    @Test
    void processPayment_NegativeAmount_ThrowsException() {
        // Negative test case (выполнение тестов)
        PaymentProcessor processor = new PaymentProcessor(mock(PaymentGateway.class));
        Order order = new Order("cust123");

        assertThrows(IllegalArgumentException.class, 
            () -> processor.processPayment(order, -50.0));
    }
}

Важно: STLC не существует изолированно — это интегрированная часть SDLC. Современные подходы (Agile, DevOps) стирают границы между фазами, но концептуальное разделение остается.