test-driven development · test-driven development • Методологія розробки...
TRANSCRIPT
![Page 1: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design](https://reader031.vdocuments.site/reader031/viewer/2022011922/604c36d2fab7060c8a3ab501/html5/thumbnails/1.jpg)
TEST-DRIVEN DEVELOPMENTКалашніков Богдан ПЗС-2
![Page 2: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design](https://reader031.vdocuments.site/reader031/viewer/2022011922/604c36d2fab7060c8a3ab501/html5/thumbnails/2.jpg)
TEST-DRIVEN DEVELOPMENT
• Методологія розробки програмного забезпечення, не тестів.
• TDD is a design activity.
• З’явилася в кінці 90-х років.
• Походить від концепції екстремального програмування “test-first”.
/ 252
![Page 3: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design](https://reader031.vdocuments.site/reader031/viewer/2022011922/604c36d2fab7060c8a3ab501/html5/thumbnails/3.jpg)
ПЕРШИЙ ЗАКОН 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](https://reader031.vdocuments.site/reader031/viewer/2022011922/604c36d2fab7060c8a3ab501/html5/thumbnails/4.jpg)
ДРУГИЙ ЗАКОН 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](https://reader031.vdocuments.site/reader031/viewer/2022011922/604c36d2fab7060c8a3ab501/html5/thumbnails/5.jpg)
ТРЕТІЙ ЗАКОН 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](https://reader031.vdocuments.site/reader031/viewer/2022011922/604c36d2fab7060c8a3ab501/html5/thumbnails/6.jpg)
![Page 7: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design](https://reader031.vdocuments.site/reader031/viewer/2022011922/604c36d2fab7060c8a3ab501/html5/thumbnails/7.jpg)
1 НАПИСАТИ ТЕСТ
• Тест потрібно писати в найпершу чергу.
• Необхідно чітко знати та розуміти вимоги та специфікації.
/ 257
![Page 8: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design](https://reader031.vdocuments.site/reader031/viewer/2022011922/604c36d2fab7060c8a3ab501/html5/thumbnails/8.jpg)
2 ПЕРЕВІРКА ТЕСТУ
• Перевірити коректність тесту.
• Оскільки тестованого коду ще немає - тест має бути невдалим.
/ 258
![Page 9: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design](https://reader031.vdocuments.site/reader031/viewer/2022011922/604c36d2fab7060c8a3ab501/html5/thumbnails/9.jpg)
3 НАПИСАННЯ КОДУ
• Потрібно написати стільки коду, скільки необхідно для вдалого
проходження тесту, не більше.
• На данному етапі головне пройти тест, якість коду виправимо в
наступних кроках.
/ 259
![Page 10: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design](https://reader031.vdocuments.site/reader031/viewer/2022011922/604c36d2fab7060c8a3ab501/html5/thumbnails/10.jpg)
4 ЗАПУСК ТЕСТІВ
• Треба впевнитись, що програма проходить всі тести, отже, відповідає вимогам.
• При невдачі можна повернутись до написання коду.
/ 2510
![Page 11: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design](https://reader031.vdocuments.site/reader031/viewer/2022011922/604c36d2fab7060c8a3ab501/html5/thumbnails/11.jpg)
5 РЕФАКТОРИНГ
• Тепер можна вдосконалити написаний код.
• Оскільки всі тести вже добре працюють, можемо сміливо
проводити зміни.
/ 2511
![Page 12: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design](https://reader031.vdocuments.site/reader031/viewer/2022011922/604c36d2fab7060c8a3ab501/html5/thumbnails/12.jpg)
СТИЛЬ РОЗРОБКИ
• 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](https://reader031.vdocuments.site/reader031/viewer/2022011922/604c36d2fab7060c8a3ab501/html5/thumbnails/13.jpg)
ПРІОРІТЕТ ТРАНСФОРМАЦІЙ
• Під час розробки код програми постійно змінюється та
трансформується.
• Для уникнення складнощів, необхідно надавати перевагу більш
простим трансформаціям над складнішими.
/ 2513
![Page 14: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design](https://reader031.vdocuments.site/reader031/viewer/2022011922/604c36d2fab7060c8a3ab501/html5/thumbnails/14.jpg)
ПОМИЛКИ ПРИ ЗАСТОСУВАННІ 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](https://reader031.vdocuments.site/reader031/viewer/2022011922/604c36d2fab7060c8a3ab501/html5/thumbnails/15.jpg)
ПРОЕКТИ НЕ ДЛЯ TDD
• Розробка інтерфейсу користувача
• Робота з базами даних та зовнішніми ресурсами (СКБД)
• Великі проекти з legacy-кодом, які розроблялись без використання тестів
/ 2515
![Page 16: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design](https://reader031.vdocuments.site/reader031/viewer/2022011922/604c36d2fab7060c8a3ab501/html5/thumbnails/16.jpg)
FAKE- I MOCK- ОБ’ЄКТИ
• Тести не повинні виходити за межі тестованого модуля, використовувати мережу, робити запити до бази даних.
• Для цього необхідні Fake- та Mock- об’єкти.
• Fake vs mock: mock-об’єкти містять твердження, що перевіряють поведінку тестованого коду.
/ 2516
![Page 17: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design](https://reader031.vdocuments.site/reader031/viewer/2022011922/604c36d2fab7060c8a3ab501/html5/thumbnails/17.jpg)
ВИКОРИСТАННЯ FAKE, MOCK ОБ’ЄКТІВ
• 1. Оголошення інтерфейсу для доступу до зовнішнього ресурсу.
• 2. Створення інтерфейсу, який повинен мати дві реалізації.
• - Перша надає доступ до зовнішнього ресурсу.
• - Друга є fake- або mock- об’єктом.
/ 2517
![Page 18: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design](https://reader031.vdocuments.site/reader031/viewer/2022011922/604c36d2fab7060c8a3ab501/html5/thumbnails/18.jpg)
ІНСТРУМЕНТИ
• Moq
• jMock
• NMock
• EasyMock
• Typemock
/ 2518
• jMocki
• Unitils
• Mockito
• Mockachino
• PowerMock
![Page 19: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design](https://reader031.vdocuments.site/reader031/viewer/2022011922/604c36d2fab7060c8a3ab501/html5/thumbnails/19.jpg)
ПЕРЕВАГИ TDD• Тести, тести, ще більше тестів.
• Осмислення завдання та функціональності.
• Більш простий код програми.
• Зменшення часу розробки - економія на “debugging”.
• Зменшення кількості помилок в коді.
/ 2519
![Page 20: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design](https://reader031.vdocuments.site/reader031/viewer/2022011922/604c36d2fab7060c8a3ab501/html5/thumbnails/20.jpg)
ПЕРЕВАГИ PART II
• Модульність та простий рефакторинг коду.
• Впевненість та продуктивність розробника.
• Повне покриття коду тестами.
• Тести можуть бути гарною документацією.
/ 2520
![Page 21: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design](https://reader031.vdocuments.site/reader031/viewer/2022011922/604c36d2fab7060c8a3ab501/html5/thumbnails/21.jpg)
НЕДОЛІКИ TDD• Тяжко звикнути.
• Не всі частини коду можна протестувати.
• Помилки при неправильній інтерпретації вимог розробником.
• Хибне почуття надійності.
• Накладні витрати та великий обсяг тестів.
/ 2521
![Page 22: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design](https://reader031.vdocuments.site/reader031/viewer/2022011922/604c36d2fab7060c8a3ab501/html5/thumbnails/22.jpg)
ACCEPTANCE TDD
• ATTD - методологія розробки, подібна до TDD, але передбачає використання acceptance тестів.
• Acceptance tests - тести, що перевіряють функціональність програми на відповідність вимогам замовника.
/ 2522
![Page 23: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design](https://reader031.vdocuments.site/reader031/viewer/2022011922/604c36d2fab7060c8a3ab501/html5/thumbnails/23.jpg)
![Page 24: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design](https://reader031.vdocuments.site/reader031/viewer/2022011922/604c36d2fab7060c8a3ab501/html5/thumbnails/24.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022011922/604c36d2fab7060c8a3ab501/html5/thumbnails/25.jpg)
ІНСТРУМЕНТИ ДЛЯ ATDD
• Concordion
• FitNesse
• Robot Framework
/ 2525
![Page 26: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design](https://reader031.vdocuments.site/reader031/viewer/2022011922/604c36d2fab7060c8a3ab501/html5/thumbnails/26.jpg)
ЗАМІСТЬ ВИСНОВКУ
![Page 27: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design](https://reader031.vdocuments.site/reader031/viewer/2022011922/604c36d2fab7060c8a3ab501/html5/thumbnails/27.jpg)
ЗАПИТАННЯ?
![Page 28: TEST-DRIVEN DEVELOPMENT · TEST-DRIVEN DEVELOPMENT • Методологія розробки програмного забезпечення, не тестів. • TDD is a design](https://reader031.vdocuments.site/reader031/viewer/2022011922/604c36d2fab7060c8a3ab501/html5/thumbnails/28.jpg)
ДЯКУЮ ЗА УВАГУ!Калашніков Богдан ПЗС-2