← Назад к вопросам

Какими видами тестирования занимается команда QA

1.0 Junior🔥 81 комментариев
#Тестирование

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Виды тестирования, которыми занимается QA команда

Классификация тестирования

Тестирование делится по нескольким критериям:

По типу исполнения:
├─ Manual Testing (ручное)
└─ Automated Testing (автоматизированное)

По уровню тестирования:
├─ Unit Testing
├─ Integration Testing
├─ System Testing
└─ Acceptance Testing

По типу функциональности:
├─ Functional Testing
└─ Non-Functional Testing

Unit Testing (Модульное тестирование)

Определение

Тестирование отдельных компонентов/функций в изоляции.

// Unit Test: тестируем один метод
@Test
public void testCalculateDiscount() {
    // Arrange
    PriceCalculator calculator = new PriceCalculator();
    
    // Act
    double discount = calculator.calculateDiscount(100, 20);
    
    // Assert
    assertEquals(20.0, discount, 0.01);
}

// Что тестируется:
// - Только метод calculateDiscount()
// - Без БД, без сети, без других зависимостей
// - Быстро (миллисекунды)
// - Изолировано

Кто делает

  • Разработчики (основная ответственность)
  • Иногда QA (но редко)

Инструменты

  • JUnit, TestNG (Java)
  • Mockito (мокирование зависимостей)
  • AssertJ (assertions)

Примеры

// Unit тесты для UserService
@Test
public void testCreateUser_ValidInput() {
    UserRepository repository = Mockito.mock(UserRepository.class);
    UserService service = new UserService(repository);
    
    User newUser = new User("john@example.com", "John");
    service.createUser(newUser);
    
    Mockito.verify(repository).save(newUser);
}

@Test
public void testCreateUser_InvalidEmail() {
    UserRepository repository = Mockito.mock(UserRepository.class);
    UserService service = new UserService(repository);
    
    User newUser = new User("invalid-email", "John");
    
    assertThrows(IllegalArgumentException.class, () -> {
        service.createUser(newUser);
    });
}

Integration Testing (Интеграционное тестирование)

Определение

Тестирование взаимодействия между несколькими компонентами/сервисами.

// Integration Test: тестируем взаимодействие UserService и БД
@SpringBootTest
@Transactional
public class UserServiceIntegrationTest {
    
    @Autowired
    private UserService userService;
    
    @Autowired
    private UserRepository userRepository;
    
    @Test
    public void testUserCreationFlow() {
        // 1. Создаём пользователя через сервис
        User newUser = new User("alice@example.com", "Alice");
        User created = userService.createUser(newUser);
        
        // 2. Проверяем что попал в БД
        User fromDB = userRepository.findById(created.getId()).orElse(null);
        
        // 3. Проверяем что данные целостны
        assertEquals("alice@example.com", fromDB.getEmail());
    }
}

// Что тестируется:
// - Взаимодействие UserService и БД
// - Реальная БД (H2 in-memory)
// - Трансакции, cascades
// - Медленнее чем Unit (но всё ещё быстро)

Кто делает

  • Разработчики (основная ответственность)
  • QA (в продвинутых командах)

Инструменты

  • Spring Boot Test
  • TestContainers (настоящие БД в Docker)
  • REST Assured (тестирование API)

Примеры

// Integration тест между API и БД
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class UserControllerIntegrationTest {
    
    @Autowired
    private TestRestTemplate restTemplate;
    
    @Test
    public void testCreateUserEndpoint() {
        // POST /api/users
        HttpEntity<User> request = new HttpEntity<>(new User("bob@example.com", "Bob"));
        ResponseEntity<User> response = restTemplate.postForEntity(
            "/api/users",
            request,
            User.class
        );
        
        assertEquals(HttpStatus.CREATED, response.getStatusCode());
        assertNotNull(response.getBody().getId());
    }
}

System Testing (Системное тестирование)

Определение

Тестирование всей системы как одного целого, включая все компоненты.

┌────────────────────────────────────┐
│      System Under Test (SUT)       │
│  ┌─────────────────────────────┐   │
│  │ Frontend (Web/Mobile)       │   │
│  │ ├─ User Interface           │   │
│  │ ├─ Form validation          │   │
│  │ └─ Navigation               │   │
│  └─────────────────────────────┘   │
│  ┌─────────────────────────────┐   │
│  │ Backend (API)               │   │
│  │ ├─ REST endpoints           │   │
│  │ ├─ Business logic           │   │
│  │ └─ Database                 │   │
│  └─────────────────────────────┘   │
│  ┌─────────────────────────────┐   │
│  │ External services           │   │
│  │ ├─ Payment gateway          │   │
│  │ ├─ Email service            │   │
│  │ └─ Third-party APIs         │   │
│  └─────────────────────────────┘   │
└────────────────────────────────────┘

Кто делает

  • QA (основная ответственность)
  • Иногда разработчики (для самопроверки)

Типы System Testing

1. Functional System Testing
   - Все функции работают как задумано
   - Пример: "Создание заказа → Оплата → Email подтверждение"

2. Non-Functional System Testing
   - Performance (скорость)
   - Security (безопасность)
   - Scalability (масштабируемость)
   - Reliability (надёжность)
   - Usability (удобство)

Примеры

// Functional System Test (end-to-end)
@Test
public void testCompleteOrderFlow() {
    // 1. Открыть приложение
    driver.get("https://shop.example.com");
    
    // 2. Авторизоваться
    driver.findElement(By.id("email")).sendKeys("user@example.com");
    driver.findElement(By.id("password")).sendKeys("password123");
    driver.findElement(By.id("login")).click();
    
    // 3. Добавить товар в корзину
    driver.findElement(By.xpath("//button[contains(text(), 'Add to Cart')]")).click();
    
    // 4. Оформить заказ
    driver.findElement(By.id("checkout")).click();
    
    // 5. Заполнить адрес доставки
    driver.findElement(By.id("address")).sendKeys("123 Main St");
    
    // 6. Оплатить
    driver.findElement(By.id("pay")).click();
    
    // 7. Проверить подтверждение
    WebDriverWait wait = new WebDriverWait(driver, 10);
    WebElement confirmationMsg = wait.until(
        ExpectedConditions.visibilityOfElementLocated(
            By.id("success-message")
        )
    );
    
    assertTrue(confirmationMsg.isDisplayed());
    assertTrue(confirmationMsg.getText().contains("Order confirmed"));
}

Performance Testing (Тестирование производительности)

Определение

Тестирование скорости, отзывчивости и стабильности под нагрузкой.

// JMeter script (XML)
<httpSampler guiclass="HttpTestSampleGui">
    <elementProp name="HTTPsampler.Arguments" ...>
        <collectionProp name="Arguments.arguments"/>
    </elementProp>
    <stringProp name="HTTPSampler.domain">api.example.com</stringProp>
    <stringProp name="HTTPSampler.path">/api/users</stringProp>
    <stringProp name="HTTPSampler.method">GET</stringProp>
    <stringProp name="HTTPSampler.protocol">https</stringProp>
</httpSampler>

<!-- 1000 потоков, каждый делает 10 запросов -->
<ThreadGroup guiclass="ThreadGroupGui">
    <stringProp name="ThreadGroup.num_threads">1000</stringProp>
    <stringProp name="ThreadGroup.ramp_time">60</stringProp>
    <stringProp name="ThreadGroup.duration">300</stringProp>
</ThreadGroup>

<!-- Результаты: average response time, throughput, error rate -->

Метрики

1. Response Time — время ответа (мс)
   - Ideal: < 200ms
   - Acceptable: < 1000ms
   - Bad: > 3000ms

2. Throughput — запросов в секунду
   - Пример: 500 req/sec

3. Error Rate — процент ошибок
   - Ideal: 0%
   - Acceptable: < 0.1%

4. CPU & Memory — использование ресурсов
   - Не должны выходить в 100%

Типы нагрузки

1. Load Testing
   - Normal load
   - Ожидаемое количество пользователей
   - Пример: 1000 одновременных пользователей

2. Stress Testing
   - Beyond normal capacity
   - До какого момента система не сломается
   - Пример: 10000 одновременных пользователей

3. Soak Testing
   - Long-running load
   - Проверить memory leaks
   - Пример: 1000 пользователей × 24 часа

Security Testing (Тестирование безопасности)

Типы

1. Authentication Testing
   - Правильно ли проверяется пароль
   - Работает ли 2FA
   - Сессии не утекают

2. Authorization Testing
   - Пользователь видит только свои данные
   - Admin может делать то что обычный пользователь
   - Role-based access work

3. SQL Injection Testing
   - SELECT * FROM users WHERE id = 1' OR '1'='1
   - Защита от вставки SQL

4. CSRF/XSS Testing
   - Cross-Site Request Forgery
   - Cross-Site Scripting

5. API Security
   - Rate limiting
   - Token expiration
   - HTTPS enforcement

Пример

// Security Test
@Test
public void testUnauthorizedAccess() {
    // Без токена
    HttpEntity<Void> request = new HttpEntity<>(null);
    ResponseEntity<String> response = restTemplate.exchange(
        "/api/admin/users",
        HttpMethod.GET,
        request,
        String.class
    );
    
    assertEquals(HttpStatus.UNAUTHORIZED, response.getStatusCode());
}

@Test
public void testSQLInjection() {
    String maliciousInput = "1' OR '1'='1";
    
    // Должна быть параметризованная query, не конкатенированная
    User user = userRepository.findByIdSafe(maliciousInput);
    
    assertNull(user); // Injection не сработала
}

Usability Testing (Тестирование удобства)

Определение

Тестирование user experience, интерфейса, навигации.

1. Navigation Testing
   - Можно ли пользователю легко найти то что нужно
   - Кнопки и ссылки видны
   - Меню логично организовано

2. Accessibility Testing
   - Работает ли для людей с ограничениями
   - Screen readers
   - Keyboard navigation
   - Color contrast для слабовидящих

3. Cross-browser Testing
   - Chrome, Firefox, Safari, Edge
   - Мобильные браузеры
   - Old browsers (IE)

4. Responsive Testing
   - Mobile (320px)
   - Tablet (768px)
   - Desktop (1920px)

Пример

1. Человек открывает сайт
2. Он ищет кнопку "Купить"
3. Может ли он её найти за 5 секунд?
4. Какие ошибки он делает?
5. На каких элементах он зависает?
6. Интуитивен ли процесс?

Acceptance Testing (Приёмочное тестирование)

Определение

Тестирование что система соответствует требованиям бизнеса.

# Behavior-Driven Development (BDD) format
Feature: User Registration
  
  Scenario: Register with valid email
    Given user is on registration page
    When user enters "john@example.com"
    And user enters password "Password123"
    And user clicks "Register" button
    Then user should see "Registration successful"
    And user should be logged in
  
  Scenario: Register with duplicate email
    Given user "alice@example.com" already exists
    When user tries to register with "alice@example.com"
    Then user should see error "Email already exists"

Инструменты

  • Cucumber (BDD)
  • Robot Framework (Keyword-driven)
  • FitNesse (Table-driven)

Regression Testing (Регрессионное тестирование)

Определение

Перетестирование старых функций после изменений, чтобы убедиться что ничего не сломалось.

// После каждого деплоя перетестируем все старые тесты
// Если что-то новое сломало старое — это регрессия

// Пример регрессии:
// Feature 1: Login — работает 2 года
// Feature 2: OAuth — добавили вчера
// Сегодня обнаружили что Login сломался из-за OAuth
// Это регрессия → нужно регрессионное тестирование

Smoke Testing (Дымовое тестирование)

Определение

Быстрое поверхностное тестирование основных функций после деплоя.

// Smoke тест перед полным тестированием
// Занимает 30 минут

public class SmokeTest {
    @Test
    public void testAppStartup() { /* открыть app */ }
    
    @Test
    public void testLogin() { /* залогиниться */ }
    
    @Test
    public void testMainFeatures() { /* основные функции */ }
    
    // Если хоть один упал — не запускаем полное тестирование
}

Чек-лист видов тестирования

ТипКто делаетАвтоматизацияСкоростьПокрытие
UnitРазработчик100%⭐⭐⭐⭐⭐Функции
IntegrationРазработчик80%⭐⭐⭐⭐Компоненты
SystemQA70%⭐⭐⭐Весь продукт
PerformanceQA60%⭐⭐⭐Нагрузка
SecurityQA40%⭐⭐Уязвимости
UsabilityQA0% (manual)⭐⭐UX
AcceptanceQA50%⭐⭐⭐Требования
RegressionQA90%⭐⭐⭐Регрессии
SmokeQA100%⭐⭐⭐⭐⭐Основное

Пирамида тестирования

        ╱╲ E2E тесты (少ないが遅い)
       ╱  ╲
      ╱────╲ Integration тесты (много, средне быстро)
     ╱      ╲
    ╱────────╲ Unit тесты (много, очень быстро)
   ╱__________╲

Вывод

QA команда занимается:

  • Unit Testing (опционально)
  • Integration Testing (часто с разработчиками)
  • System Testing (ежедневно)
  • Performance Testing (перед релизом)
  • Security Testing (критично)
  • Usability Testing (постоянно)
  • Acceptance Testing (по требованиям)
  • Regression Testing (после каждого деплоя)
  • Smoke Testing (перед полным тестированием)

Best Practice: Пирамида тестирования — много unit тестов, среднее количество integration, мало E2E.