• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
kranonit S11E01 Андрей Пономарёв: Тренинг по TDD в Java
 

kranonit S11E01 Андрей Пономарёв: Тренинг по TDD в Java

on

  • 197 views

 

Statistics

Views

Total Views
197
Views on SlideShare
197
Embed Views
0

Actions

Likes
0
Downloads
0
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    kranonit S11E01 Андрей Пономарёв: Тренинг по TDD в Java kranonit S11E01 Андрей Пономарёв: Тренинг по TDD в Java Presentation Transcript

    • Test Driven Development #kranonit S11E01 13.07.2013 Andrey Ponomarev linkedin.com/in/AndreyPonomarev Andrey.Ponomarev@gmail.com
    • Обо мне Андрей Пономарёв ● 11 лет программирую за деньги ● Sun Certified Java Programmer ● Team Lead linkedin.com/in/AndreyPonomarev
    • Disclaimer #1 Это не тренинг по Java! ЦЕЛЕВАЯ АУДИТОРИЯ ● Junior и Middle разработчики, ● с опытом работы с Java больше 1 года, ● с пониманием принципов ООП, ● уверенным владением IDE ● элементарным знанием английского.
    • Disclaimer #2 TRUE FALSE Java разработчик Опытный программист Профессиональный тренер Опытный докладчик
    • План 1. Болтовня для тех, кто пришел просто послушать 2. Практический пример 3. Немного болтовни для разнообразия 4. Перерыв 5. Парное программирование до конца дня для тех, кто пришел потренироваться
    • Немного Википедии Разработка через тестирование - техника разработки ПО, которая основывается на повторении очень коротких циклов разработки: 1. пишется тест, покрывающий желаемое изменение, 2. пишется код, который позволит пройти тест, 3. проводится рефакторинг нового кода к соответствующим стандартам.
    • TDD мантра ● Красный ● Зеленый ● Рефакторинг
    • В интернетах пишут... "Я делаю продукты 8 лет без всякого TDD, и не имею особенных проблем" "ТДД - это для теоретиков. В реальных проектах оно не используется." "Мне платят за функционал, а не за тесты" "TDD - это мода. Как пришло - так и уйдёт."
    • Есть мнение что... "Использование TDD увеличивает время разработки"
    • Есть мнение что... "Использование TDD увеличивает время разработки" Правда Согласно исследованиям, время разработки увеличивается на 15-30%. ("Evaluating the Efficacy of Test-Driven Development: Industrial Case Studies", Microsoft)
    • ● Бег по утрам ● Набор текста вслепую ● Езда на велосипеде Потому что... ● Трудно начать ● Выгода не очевидна ● Требуется дисциплина ● Окупается в будущем Применять TDD похоже на ...
    • Есть мнение что... "Использование TDD улучшает качество кода"
    • Есть мнение что... "Использование TDD улучшает качество кода" Правда Согласно исследованиям, количество дефектов уменьшается на 40%. (“Test-Driven Development as a Defect-Reduction Practice”, IBM)
    • Результаты исследования "Evaluating the Efficacy of Test-Driven Development: Industrial Case Studies", Microsoft
    • Зачем TDD ● Лучше код ● Борьба со страхом ● Быстрая обратная связь
    • TDD ката
    • Самые важные принципы Позволяющие радикально снизить количество дефектов и ускорить разработку
    • Самые важные принципы Позволяющие радикально снизить количество дефектов и ускорить разработку KISS Keep it simple stupid YAGNI You aren't gonna need it
    • StringCalculator Step 1 Create a simple String calculator with a method int Add(String numbers) ● The method can take 0, 1 or 2 numbers, and will return their sum (for an empty string it will return 0) for example “” or “1” or “1,2” ● Start with the simplest test case of an empty string and move to 1 and two numbers
    • StringCalculator Step 2 Allow the Add method to handle an unknown amount of numbers
    • StringCalculator Step 3 Allow the Add method to handle new lines between numbers (instead of commas). ● the following input is ok: "1n2,3" (will equal 6) ● the following input is NOT ok: "1,n" (not need to prove it - just clarifying)
    • StringCalculator Step 4 Support different delimiters ● to change a delimiter, the beginning of the string will contain a separate line that looks like this: "//[delimiter]n[numbers…]" for example "//;n1;2" should return three where the default delimiter is ';' . ● the first line is optional. All existing scenarios should still be supported
    • StringCalculator Step 5 Calling Add with a negative number will throw an exception “negatives not allowed” - and the negative that was passed. If there are multiple negatives, show all of them in the exception message
    • Тестирование функций без побочных эффектов assertEquals(0, Math.sqrt(0)); assertEquals(1, Math.sqrt(1)); assertEquals(10, Math.sqrt(100));
    • Тестирование состояния // Given HashSet<String> set = new HashSet<>(); // When set.add("test"); // Then assertEquals(1, set.size());
    • Тестирование взаимодействия
    • Тестирование взаимодействия (продолжение) // Setup DocValidator validator = mock(DocValidator.class); DocRepository repo = mock(DocRepository.class); DocService service = new DocService(validator, repo); Document doc = new Document();
    • Тестирование взаимодействия (продолжение) // Given when(validator.validate(doc)).thenReturn(true); // When service.register(doc); // Then verify(repo.save(doc));
    • Тестирование исключений @Rule public ExpectedException ex = ExpectedException.none(); // Given Document invalidDoc = createInvalidDoc(); // Expect ex.expect(ValidationException.class); // When service.register(invalidDoc);
    • Перерыв
    • Conway's Game of Life
    • Домен ● Мир - двумерное пространство, состоящее из клеток ● Клетка может быть «живой» или «мёртвой» ● У каждой клетки есть 8 соседей ● В каждом поколении клетки умирают или рождаются по особым правилам
    • Правила 1. Если у клетки меньше двух соседей, она умирает 2. Если у клетки 2 или 3 соседа, она продолжает жить 3. Если у клетки больше 3 соседей, она умирает от перенаселения 4. Если у мёртвой клетки, рядом 3 живые клетки, то в ней зарождается жизнь
    • Пример 1 поколение 2 поколение 3 поколение
    • Test case 1 Given a live cell with fewer than 2 live neighbors When I calculate the next generation, Then the cell is dead.
    • Test case 2 Given a live cell with more than 3 live neighbors When I calculate the next generation Then the cell is dead
    • Test case 3 Given a live cell with 2 or 3 live neighbors When I calculate the next generation Then the cell is dead.
    • Test case 4 Given a dead cell with exactly three live neighbors When I calculate the next generation Then the cell is alive.
    • Спасибо за внимание! Литература: ● Working Effectively with Legacy Code, Michael Feathers ● Refactoring: Improving the Design of Existing Code, Martin Fowler ● Test Driven Development: By Example, Kent Beck ● Refactoring to Patterns, Joshua Kerievsky Каты: ● String Calculator kata ● Conway's Game of Life kata ● Что такое Coding Dojo и другие каты Исходный код: github.com/kranonit/tdd-training Вопросы? Andrey.Ponomarev@gmail.com