TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки...

28
TEST-DRIVEN DEVELOPMENT Калашніков Богдан ПЗС-2

Transcript of TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки...

Page 1: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design

TEST-DRIVEN DEVELOPMENTКалашніков Богдан ПЗС-2

Page 2: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design

TEST-DRIVEN DEVELOPMENT

• Методологія розробки програмного забезпечення, не тестів.

• TDD is a design activity.

• З’явилася в кінці 90-х років.

• Походить від концепції екстремального програмування “test-first”.

/ 252

Page 3: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design

ПЕРШИЙ ЗАКОН TDD

• You may not write production code until you have written a failing

unit test. (Robert Cecil Martin)

• Не можна писати код, поки немає невдалого тесту.

/ 253

Page 4: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design

ДРУГИЙ ЗАКОН TDD

• You may not write more of a unit test than is sufficient to fail, and

not compiling is failing. (Uncle Bob)

• Не потрібно писати більше тестів, ніж необхідно для невдалого

проходження.

4 / 25

Page 5: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design

ТРЕТІЙ ЗАКОН TDD

• You may not write more production code than is sufficient to pass the currently failing test. (Bob Martin)

• Не можна писати більше коду, ніж необхідно для вдалого

проходження тесту.

/ 255

Page 6: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design
Page 7: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design

1 НАПИСАТИ ТЕСТ

• Тест потрібно писати в найпершу чергу.

• Необхідно чітко знати та розуміти вимоги та специфікації.

/ 257

Page 8: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design

2 ПЕРЕВІРКА ТЕСТУ

• Перевірити коректність тесту.

• Оскільки тестованого коду ще немає - тест має бути невдалим.

/ 258

Page 9: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design

3 НАПИСАННЯ КОДУ

• Потрібно написати стільки коду, скільки необхідно для вдалого

проходження тесту, не більше.

• На данному етапі головне пройти тест, якість коду виправимо в

наступних кроках.

/ 259

Page 10: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design

4 ЗАПУСК ТЕСТІВ

• Треба впевнитись, що програма проходить всі тести, отже, відповідає вимогам.

• При невдачі можна повернутись до написання коду.

/ 2510

Page 11: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design

5 РЕФАКТОРИНГ

• Тепер можна вдосконалити написаний код.

• Оскільки всі тести вже добре працюють, можемо сміливо

проводити зміни.

/ 2511

Page 12: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design

СТИЛЬ РОЗРОБКИ

• KISS (Keep It Simple, Stupid)

• YAGNI (You Ain’t Gonna Need It)

• Fake It Till You Make It

/ 2512

Page 13: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design

ПРІОРІТЕТ ТРАНСФОРМАЦІЙ

• Під час розробки код програми постійно змінюється та

трансформується.

• Для уникнення складнощів, необхідно надавати перевагу більш

простим трансформаціям над складнішими.

/ 2513

Page 14: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design

ПОМИЛКИ ПРИ ЗАСТОСУВАННІ TDD

• Дуже багато тестів без коду.

• Тест для класів вищих рівнів

(фасадів).

• Відсутність фази рефакторингу.

• Unit тести - це вже TDD.

/ 2514

• Запуск TDD на великих

проектах із legacy кодом.

• Використання TDD без достатніх знань OOP.

• Testing oriented development anti-pattern.

Page 15: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design

ПРОЕКТИ НЕ ДЛЯ TDD

• Розробка інтерфейсу користувача

• Робота з базами даних та зовнішніми ресурсами (СКБД)

• Великі проекти з legacy-кодом, які розроблялись без використання тестів

/ 2515

Page 16: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design

FAKE- I MOCK- ОБ’ЄКТИ

• Тести не повинні виходити за межі тестованого модуля, використовувати мережу, робити запити до бази даних.

• Для цього необхідні Fake- та Mock- об’єкти.

• Fake vs mock: mock-об’єкти містять твердження, що перевіряють поведінку тестованого коду.

/ 2516

Page 17: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design

ВИКОРИСТАННЯ FAKE, MOCK ОБ’ЄКТІВ

• 1. Оголошення інтерфейсу для доступу до зовнішнього ресурсу.

• 2. Створення інтерфейсу, який повинен мати дві реалізації.

• - Перша надає доступ до зовнішнього ресурсу.

• - Друга є fake- або mock- об’єктом.

/ 2517

Page 18: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design

ІНСТРУМЕНТИ

• Moq

• jMock

• NMock

• EasyMock

• Typemock

/ 2518

• jMocki

• Unitils

• Mockito

• Mockachino

• PowerMock

Page 19: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design

ПЕРЕВАГИ TDD• Тести, тести, ще більше тестів.

• Осмислення завдання та функціональності.

• Більш простий код програми.

• Зменшення часу розробки - економія на “debugging”.

• Зменшення кількості помилок в коді.

/ 2519

Page 20: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design

ПЕРЕВАГИ PART II

• Модульність та простий рефакторинг коду.

• Впевненість та продуктивність розробника.

• Повне покриття коду тестами.

• Тести можуть бути гарною документацією.

/ 2520

Page 21: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design

НЕДОЛІКИ TDD• Тяжко звикнути.

• Не всі частини коду можна протестувати.

• Помилки при неправильній інтерпретації вимог розробником.

• Хибне почуття надійності.

• Накладні витрати та великий обсяг тестів.

/ 2521

Page 22: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design

ACCEPTANCE TDD

• ATTD - методологія розробки, подібна до TDD, але передбачає використання acceptance тестів.

• Acceptance tests - тести, що перевіряють функціональність програми на відповідність вимогам замовника.

/ 2522

Page 23: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design
Page 24: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design

TDD VS ATDD IN AGILE

• TDD і ATDD передбачають циклічність розробки.

• ATTD передбачає більшу взаємодію із замовником (чи project-owner).

• ATDD збілшує ефективність розробки.

• ATDD залучає всіх до участі у розробці проекту - всі знають вимоги.

• “TDD - робити речі правильно, ATDD - робити правильні речі”.

/ 2524

Page 25: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design

ІНСТРУМЕНТИ ДЛЯ ATDD

• Concordion

• FitNesse

• Robot Framework

/ 2525

Page 26: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design

ЗАМІСТЬ ВИСНОВКУ

Page 27: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design

ЗАПИТАННЯ?

Page 28: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design

ДЯКУЮ ЗА УВАГУ!Калашніков Богдан ПЗС-2