Исследование подходов к разработке
Сравнение обычных подходов и TDD
Зачем исследовать?
Цели исследования
Железно выяснить какой из подходов к разработке самый крутой и когда именно стоит его применять.
Каждый исследуемый подход должен совпадать по качеству с другими.
Термины
Unit тест - проверяет отдельный модуль в изоляции от других
Интерграционный тест - проверяет приложение в связке с другими
Регрессионный тест - проверяет факт работы всех выполненных задач
Исследуемые подходы
Как сравнить?
Математически
Написать формулы для моделирования разных подходов
Рассчитать по формулам затраты на разработку
Сравнить и сделать выводы
Экспериментально
Выполнить ряд сторисов-задач на сервисном методе
Замерить время всех этапов работы
Сравнить и сделать выводы
Экспериментально
Сделал простенькую программу для расчёта скидки и 7 сторисов по её доработке
Для большей сложности последние 3 сториса содержат взаимосвязь со внешним сервисом
Запрограммировал все 7 сторисов тремя подходами: 2 подхода TDD и один классический
Результат:
Математически
Построил формулы для расчёта стоимости разработки всех 4-ех подходов
Перенёс формулы в google calc и подставил данные, полученные в ходе экспериментов
Ссылка на формулы
Построил графики по ним
Результаты оптимистичного расчёта затрат
Среднее время на тестирование одной фичи через запуск приложения в консоли 16.4 секунды (переменная Тест)
Это время самого быстрого способа ручного тестирования - через консоль
Долгосрочные затраты
На 23-ей задаче TDD выгоднее в 1.6 раза
Результаты реалистичного расчёта затрат
Среднее время на тестирование одной фичи через запуск приложения в Jaeger 30 секунд
Ещё не учитывается время на возню со состоянием в сторонних сервисах
На 21-ой задаче TDD выходнее в 2.1 раза
Выводы
Какие методы покрывать
Дополнительные плюшки TDD
Всем спасибо!
Репозиторий эксперимента с другими ссылками:
https://github.com/execut/work-way-experiments/blob/master/README.md