unit tests
  • Установка Google Test
    • через VS 2022
  • Что тестировать как тестировать
    • Test Suites
  • Google Test примеры
  • Параметризация примеры
  • Функции expect и assert
    • EXPECT_*
  • Пример setUP() TearDown()
  • Тестирование производительности
  • Профилирование
    • ЦП Аналитика
    • Пример
  • пример тестирование записи в файл
  • 📚Tasks
    • Задание на повторение
    • Задание calculate_average
    • Задание
    • Задание 2
    • Задание 3
    • Задание Интеграционное тестирование
    • Задание 4 треугольник интеграция
    • Задание кошелек
    • Кошелек интеграция
    • Задачи профилирование
    • Задание Task
  • Пример
Powered by GitBook
On this page
  1. Профилирование

Пример

  1. Задание на профилирование производительности:

    • Задача: Найти узкие места в коде, замедляющие выполнение программы.

    • Код:

    #include <iostream>
    #include <vector>
    #include <ctime>
    
    void processTask() {
        for (int i = 0; i < 1000000; ++i) {
            std::vector<int> vec;
            for (int j = 0; j < 100; ++j) {
                vec.push_back(j);
            }
        }
    }
    
    int main() {
        clock_t start = clock();
        processTask();
        clock_t end = clock();
        double time_taken = double(end - start) / CLOCKS_PER_SEC;
        std::cout << "Time taken by program is : " << time_taken << std::endl;
        return 0;
    }
    • Проблемы: Выделение и освобождение памяти внутри цикла может вызывать значительные накладные расходы времени.

  2. Задание на профилирование использования памяти:

    • Задача: Найти и устранить утечки памяти в программе.

    • Код:

    #include <iostream>
    
    void leakMemory() {
        for (int i = 0; i < 1000; ++i) {
            int* ptr = new int[1000];
            // Забыли освободить память, используя delete[]
        }
    }
    
    int main() {
        leakMemory();
        return 0;
    }
    • Проблемы: Память выделяется в цикле, но не освобождается после использования, что может привести к утечкам памяти.

  3. Задание на профилирование многопоточности:

    • Задача: Определить, какие участки кода занимают большую часть времени выполнения в многопоточном приложении.

    • Код:

    #include <iostream>
    #include <thread>
    #include <vector>
    #include <algorithm>
    
    const int N = 1000000;
    const int THREADS = 4;
    
    void processTask(int thread_id, std::vector<int>& vec) {
        for (int i = thread_id; i < N; i += THREADS) {
            vec[i] = std::rand();
        }
    }
    
    int main() {
        std::vector<int> numbers(N);
        std::vector<std::thread> threads;
    
        for (int i = 0; i < THREADS; ++i) {
            threads.push_back(std::thread(processTask, i, std::ref(numbers)));
        }
    
        for (auto& thread : threads) {
            thread.join();
        }
    
        return 0;
    }
    • Проблемы: Возможны гонки данных и блокировки, которые могут замедлить выполнение программы.

PreviousЦП АналитикаNextпример тестирование записи в файл

Last updated 1 year ago