+ All Categories
Home > Documents > Pragmatic Test Driven Development. Теория.

Pragmatic Test Driven Development. Теория.

Date post: 30-May-2015
Category:
Upload: samsolutionsby
View: 492 times
Download: 1 times
Share this document with a friend
Description:
Доклад в двух частях (практика и теория) от специалистов компании SaM Solutions, применявших TDD на практике. Практика: http://www.slideshare.net/samsolutionsby/pragmatic-tdd-practice
Popular Tags:
16
Test Driven Development TDD, UTDD + Embedded SW Development SaM Solutions Value of Talent. Delivered. www.sam-solutions.com Minsk 2013 Alexey Litvin Project Coordinator Certified ScrumMaster E-mail: [email protected] ICQ: 309-169-225 Skype: a.litvin
Transcript
Page 1: Pragmatic Test Driven Development. Теория.

Test Driven Development TDD, UTDD + Embedded SW Development

SaM Solutions

Value of Talent. Delivered.

www.sam-solutions.com

Minsk 2013

Alexey Litvin

Project Coordinator

Certified ScrumMaster

E-mail: [email protected]

ICQ: 309-169-225

Skype: a.litvin

Page 2: Pragmatic Test Driven Development. Теория.

Что Внутри?

A. Концепция TDD

B. Тестировать перед написанием кода: это возможно?

C. А надо ли, или что мне это даст?

D. Вроде бы неплохо. Как это применить?

Page 3: Pragmatic Test Driven Development. Теория.

TDD Concept

Недостатки:

Refactoring можно забыть

Тест, созданный на первом этапе

покрывает только «позитивный»

сценарий

Модификация тестов может

проводиться без модификации

дизайна – возможны

интеграционные ошибки

Классический TDD Его недостатки

Page 4: Pragmatic Test Driven Development. Теория.

Разработка системы

Пример в вакууме: «Система

оповещения о температуре

воздуха»

Требования:

Режим работы от 0 до +30

градусов

При температуре выше X –

SMS с указанием температуры

При температуре ниже Y – SMS

c указанием температуры

При сбое системы – SMS с

“ALARM!!!”

Обычный процесс

Идеальный процесс

Page 5: Pragmatic Test Driven Development. Теория.

Пример архитектуры системы

Требования:

Режим работы от 0 до +30

градусов

При температуре выше X – SMS с

указанием температуры

При температуре ниже Y – SMS c

указанием температуры

При сбое системы – SMS с

“ALARM!!!”

Page 6: Pragmatic Test Driven Development. Теория.

BANG! Пример-то неудачный!

Где выгода:

Ошибка дизайна

найдена ДО

имплементации

Ошибка в архитектуре

Модуль нетестируемый

Page 7: Pragmatic Test Driven Development. Теория.

Пример архитектуры системы №2

Требования:

Режим работы от 0 до +30

градусов

При температуре выше X – SMS с

указанием температуры

При температуре ниже Y – SMS c

указанием температуры

При сбое системы – SMS с

“ALARM!!!”

Page 8: Pragmatic Test Driven Development. Теория.

Test First!

Набор тестов:

Query: GetTemp()

Result: query done

Input: X+1,0

Result: “=X+1,0”

Query: GetTemp()

Result: query done

Input: Y-1,0

Result: char “=Y-1,0”

Query: GetTemp()

Result: query done

Input: X

Result: none

Query: GetTemp()

Result: query done

Input: -300,0

Result: “ALARM”

Query: GetTemp()

Result: query done

Input: “zxc”

Result: “ALARM”

Важно! Тестируем только тот модуль,

который разрабатываем!

Page 9: Pragmatic Test Driven Development. Теория.

Чудо-модуль

Где выгода:

Ошибка дизайна найдена ДО

имплементации

У модуля определены

интерфейсы, хотя самого

модуля еще нет

Разработчик точно знает, что

должен делать модуль

Модуль не упадет в случае

получения некорректных

данных

Набор тестов: • Query: GetTemp() Result: query done Input: X+1,0 Result: “=X+1,0”

• Query: GetTemp()

Result: query done Input: Y-1,0 Result: char “=Y-1,0”

• Query: GetTemp()

Result: query done Input: X Result: none

• Query: GetTemp()

Result: query done Input: -300,0 Result: “ALARM”

• Query: GetTemp()

Result: query done Input: “zxc” Result: “ALARM”

Page 10: Pragmatic Test Driven Development. Теория.

Гарантия выполнения функций

Где выгода:

Ошибка дизайна найдена ДО

имплементации

У модуля определены

интерфейсы, хотя самого

модуля еще нет

Разработчик точно знает, что

должен делать модуль

Модуль не упадет в случае

получения некорректных

данных

Модуль работает корректно

независимо от внутренней

реализации

- if…else >> case…esac - var a >> var b - etc…

Page 11: Pragmatic Test Driven Development. Теория.

Вариант TDD

Преимущества:

Тесты, созданные на первом

этапе покрывают все сценарии

Модификация тестов

проводится только при

изменении требований к

модулю

Все изменения внутренней

реализации почти никогда не

требуют изменения тестов

Классический TDD

Page 12: Pragmatic Test Driven Development. Теория.

Подробнее о Unit тестах

Page 13: Pragmatic Test Driven Development. Теория.

ИТОГО (достоинства)

Неявные последствия:

• Снижает вероятность «переписывания» системы

• Возникшие ошибки быстро соотносятся с модулем

• Упрощает поддержку системы, т.к. Failed тест не позволит новому функционалу «поломать» имеющийся

• Без «лишнего» кода финальная система менее ресурсоемка

• Трудозатраты на отладку снижаются – вам почти не нужен отладчик

• Упрощается задача поиска ошибок в аппаратной части

Прямые последствия:

• Раннее обнаружение ошибок дизайна

• Способствует созданию модульной архитектуры

• Гарантирует неизменное функционирование модуля независимо от реализации

• Помогает разработчику концентрироваться на требованиях

• Хорошее покрытие тестами повышает качество конечного программного кода

• Программная составляющая хорошо покрыта тестами

Page 14: Pragmatic Test Driven Development. Теория.

ИТОГО (недостатки)

Да, они есть:

• В общем больше кода

• Не страхует от интеграционных ошибок и ошибок в требованиях

• Требуются дополнительные инструменты (xUnit, etc.)

• Для повышения эффективности требуется code review

• Необходимо поддерживать тестовый код. Для максимальной эффективности – интеграция с CI системой

• Code visibility, необходимый для тестов, может повлечь нарушения политики сокрытия данных и методов (e.g. private methods in OOP)

• Не обойтись без «переделки восприятия»

Page 15: Pragmatic Test Driven Development. Теория.

Как?

Попробовать!

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

Test First – это (просто) – думать о требованиях.

Ломать архитектуру в начале проекта – это хорошо!

…и слушать следующего докладчика!

Page 16: Pragmatic Test Driven Development. Теория.

www.sam-solutions.com

Спасибо за внимание!

SaM Solutions Minsk

15 Filimonova St,

220037 Minsk, Belarus

Tel.: +375 17 3091709 Fax: +375 17 3091717


Recommended