Code Monkey home page Code Monkey logo

unit-testing-and-tdd's Introduction

Тренинг «Unit Testing & TDD»

24 ак. часа, 18 астр. часов

Цели тренинга

После тренинга участники смогут:

  • Объяснить себе и менеджменту, где им нужны тесты, а где нет
  • Разрабатывать тесты как «спецификации на примерах» в роли документации
  • Разрабатывать поддерживаемые тесты и их наборы по модели
  • Подменять сложные компоненты системы на время тестирования
  • Анализировать тестовое покрытие для принятия решений по тест-дизайну
  • Обеспечивать поддерживаемый дизайн системы при помощи TDD

В итоге бизнес получает:

  • Контролируемый cycle time задач
  • Контролируемое качество системы

Программа

Зачем мы собрались? (1 часа всего / из них 0.5 часа практики)

  • Обзор тренинга
  • О тренере
  • Разбивка по парам и знакомство-представление друг друга
  • Приоритезация целей тренинга и сбор проблем

Fork and then clone codebase for further development

git clone --depth 1 -b <YYYY-MM-project> https://github.com/eugene-krivosheyev/unit-testing-and-tdd

Что такое автотест? (1.5/0.5)

  • Каковы цели и задачи авто тестов?
  • В чем отличие от отладки?
  • Определение модуля и возможные виды модулей

Live Coding Demo на примере "общеизвестного класса"

Coding Iteration #01

  • Given legacy codebase with Client and SavingAccount domain types
  • When developers add guard clauses for creating Client and SavingAccount
  • And cover these components with maintainable autotests
  • Then coverage for these components should be ≥ 80%
  • And public code review should state for maintainability

Как замерять тестовое покрытие? (0.5/0)

  • Понятие покрытия
  • Виды расчета покрытия
  • Инструменты расчета покрытия
  • Анализ текущего покрытия
  • Что покрывать в первую очередь в проектах?

Как ускорить разработку автотестов за счет готовых фреймворков и библиотек? (1/0.5)

Coding Iteration #02

  • Given legacy codebase with Client and SavingAccount domain types
  • When developers add consistency rules for linking Client and SavingAccount
  • And cover these components with maintainable autotests
  • Then coverage for these components should be ≥ 90%
  • And public code review should state for maintainability

Как писать интеграционные и модульные тесты? (1/0.5)

Coding Iteration #03

  • Given legacy codebase with Processing component
  • When developers analyse and refactor production codebase for testability
  • And cover this component with maintainable unit autotests
  • Then coverage for these component should be ≥ 90%
  • And public code review should state for maintainability

Реализация фикстуры для обеспечения поддерживаемости тестов (1.5/1)

Coding Iteration #04

  • Given test codebase
  • When developers analyse and refactor test codebase for maintainability
  • Then public code review should state for tests maintainability

Как группировать тесты в наборы? (0.5/0)

Как поддерживать качество тестов и снижать дублирование? (1/0.5)

Как обеспечить качество самих тестов?

  • Сначала поломанный тест
  • Анализ тестового покрытия
  • Ревью кода тестов
  • Mutation coverage

Анти-паттерны разработки модульных тестов: "вредные советы"

  • Отношение к тестам не как к обычному коду
  • Большие расфокусированные тесты
  • Неговорящие имена
  • Дублирование фикстуры
  • Стопроцентное покрытие

Coding Iteration #05

  • Given test codebase
  • When developers analyse and refactor test codebase for maintainability
  • Then cross-team code review should state for tests maintainability

Как обеспечить тестопригодность дизайна legacy системы? (1.5/0.5)

  • Как оценить тестопригодность legacy code?
  • Метрика Coupling
  • Метрика Cohesion
  • Понятность/осознаваемость
  • Каков тестопригодный дизайн?

Live Coding Demo для реализации компонента Reporting и нового CheckingAccount

  • Принципы проектирования SOLID
  • Шаблоны Factory и DI
  • Шаблоны Strategy/State
  • Ключевая диллема покрытия legacy code?

Coding Iteration #06

  • Given legacy codebase with Reporting component
  • When developers implement polymorphic testable implementation for Reporting and CheckingAccount
  • Then cross-team code review should state for its testability

Какую ценность дает практика TDD? (0.5/0)

  • Что такое TDD?
  • TDD как практика проектирования
  • Зачем нужен TDD?
  • Минимизация отладки
  • Снижение затрат на инкрементальную разработку
  • Быстрая обратная связь
  • Повышение поддерживаемости дизайна
  • Удобство API "из коробки"
  • Тесты как документация
  • Предсказуемость поставки
  • Чистый работающий код
  • Управление страхом

В каком ритме писать по TDD? (1.5/0.5)

  • Red – Green – Refactor
  • Скорость отработки тестового набора как предусловие практики TDD

Live Coding Demo для компонента Branch

  • Операция добавления в branch

Coding Iteration #07

  • Given legacy codebase with Branch domain type
  • When developers implement full-functional Branch implementation
  • And made it through TDD cycles
  • Then coverage for this component should be 100%
  • And public code review should state for maintainability
  • Test First
  • Isolated Tests
  • Assertion First
  • Test Data
  • Child Test
  • Test List
  • Mock Object
  • Crash Test Dummy

Coding Iteration #08

  • Given legacy codebase with Reporting service
  • When developers implement reporting operation for branch
  • And made it through TDD cycles
  • Then coverage for this component should be 100%
  • And coverage for this component should state this is unit tests
  • And public code review should state for maintainability

Шаблоны красной и зеленой полосы (1.5/1)

Красной полосы

  • One-step Test
  • Starter Test
  • Another Test
  • Regression Test

Зеленой полосы

  • Obvious Implementation
  • Triangulation
  • One to Many

Coding Iteration #09: TDD Ping-pong

  • Given legacy codebase with Reporting service
  • When developers implement reporting operations
  • And made it through TDD cycles in pair ping-pong rules
  • Then coverage for this component should be 100%
  • And coverage for this component should state this is unit tests
  • And public code review should state for maintainability

Как внедрить UT&TDD в процесс разработки? (0.5/0)

Каковы затраты на UT&TDD?

  • Постановка экономической задачи

Типовые ошибки TDD

  • Code First
  • Too Many Obvious Implementation
  • Too Many Triangulations
  • Coverage Affinity
  • Implementation Testing but not Contract Testing

Как внедрить?

  • Общение с менеджментом
  • Secure sandbox
  • Последовательное расширение scope

Финальная ретроспектива (1/0.5)

  • План конкретных ближайших действий

Буфер (2)

unit-testing-and-tdd's People

Contributors

eugene-krivosheyev avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.