Agile latvia evening_unit_testing_in_practice
Upcoming SlideShare
Loading in...5
×
 

Agile latvia evening_unit_testing_in_practice

on

  • 543 views

 

Statistics

Views

Total Views
543
Views on SlideShare
543
Embed Views
0

Actions

Likes
0
Downloads
3
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

CC Attribution-NonCommercial LicenseCC Attribution-NonCommercial License

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
  • И Так, начнем
  • Немного теории /не будет лишним/ Unit-тестирование: что такое это такое? (в java) кому оно нужно? для чего оно нужно? у нас не будет bug’ов? unit-тестирование, что  это такое?  Unit test - что за зверь? :)  Где его найти,  как поймать,  приручить,  чем кормить как ухаживать? Если вы программист, то вы "скорее всего" пишете придумываете как с помощью кода реализовать то, что от вас просят.... Если вы манаджер , то вы "скорее всего" вы пытаетесь понять что же там напридумывали программисты и когда это кончится Факт 1  Программисты пишут код.      Ну если более развернуто, то с помощью доступных инструментов, техник, технологий, процессов создают РЕШЕНИЯ       которые удовлетворят требованиям     поставленной задачи. Факт 2 . Каждый раз код уникален.      Но:     Код не произведение искусства.          он не предназначен для того, что бы им восхищались...      Хотя  встречаются   "гении программирования", которые пишут код для того что бы им любоваться.          - Смотрите, какую я тут финтифлюшку прилепит. Факт 3 . Код предназначен для выполнения сугубо практических вещей.      Т.е. его главная задача это выполнять то, для чего он предназначен, и выполнять хорошо.
  • Факт 1 Программисты пишут код. ------------------------- Ну если более развернуто, то с помощью доступных инструментов, техник, технологий, процессов создают РЕШЕНИЯ которые удовлетворят требованиям поставленной задачи.
  • Факт 2 . Каждый раз код уникален. Но: Код не произведение искусства. он не предназначен для того, что бы им восхищались... Хотя встречаются   "гении программирования", которые пишут код для того что бы им любоваться. - Смотрите, какую я тут финтифлюшку прилепит.
  • Факт 3 . Код предназначен для выполнения сугубо практических вещей. Т.е. его главная задача это выполнять то, для чего он предназначен, и выполнять хорошо.
  • .Т.е. его главная задача это выполнять то, для чего он предназначен, и выполнять хорошо
  • Нам нужен СТЕНД для тестирования нашего кода Самый простой способ тестировать код: - использовать те же приемы - использовать те же инструменты - использовать тот же язык - не менять контекст ТЕСТИРОВАТЬ КОД С ПОМОЩЬЮ КОДА.
  • Самый простой способ тестировать код: - использовать те же приемы - использовать те же инструменты - использовать тот же язык - не менять контекст ТЕСТИРОВАТЬ КОД С ПОМОЩЬЮ КОДА.
  • Формальное  определение “что такое тестирование” вы всегда можете найти в интернете. Если вы хотите узнать "ОБ ЭТОМ" более глубоко, вы всегда можете воспользоваться услугами Google, etc Вы всегда сможете найти все о нем во много раз больше, чем я смогу вам рассказать :-) Если не пробовали поискать его описание, то самое время это сделать. Что ВАЖНО? Важно что бы “ваше” понимание тестирования совпадало с пониманием тестирования “команды” в которой вы работаете.  
  • 1. Идея состоит в том, чтобы писать тесты для каждого нетривиального метода.  Важно не пропустить  "простые" и  "тесты"
  • 1. Идея состоит в том, чтобы писать тесты для каждого нетривиального метода.  Важно не пропустить  "простые" и  "тесты"
  • 1. Идея состоит в том, чтобы писать тесты для каждого нетривиального метода.  Важно не пропустить  "простые" и  "тесты"
  • 2. Это позволяет достаточно быстро проверить, не привело ли очередное изменение кода к появлению ошибок в уже написанных и оттестированных местах программы, а также облегчает обнаружение и устранение таких ошибок.
  • В чем "фишка" ? мы не боимся не боимся сломать код не боимся сломать ЧУЖОЙ код  не боимся что кто-то сломал НАШ код
  • 2. Но, если вы считаете что это не для ВАС, то с помощью unit-тестов, вы ВСЕМ СМОЖЕТЕ доказать, что unit-тестирование бесполезно и вам совершенно не нужно. 3. И у ВАС это обязательно получится. 4. /особенно если вы доказываете это самому себе/
  • 1. Если вам нужно, что бы ваш код не разваливался от любого прикосновения, что бы вы были уверенны в своем коде, то это МОЖЕТ БЫТЬ для вас :)
  • 1. Так что-же, те, кто говорят, что с помощью unit тестов не найти все bug’и оно не нежно правы? ДА - если смотреть на unit тестирование как на демонстрацию отсутствия bug’ов
  • 2. НЕТ - если смотреть на unit  тестирование как на часть процесса программирования. «Тестирование программ может использоваться для демонстрации наличия ошибок, но оно никогда не покажет их отсутствие.» Edsger Wybe Dijkstra, 1970 г. /Дейкстра/   К сожалению, существующие на сегодняшний день методы тестирования ПО  не позволяют однозначно и полностью найти все дефекты и ошибки, установить корректность функционирования программы. 
  • Самое-ли это неприятное, что может случится с вашим кодом, программой, во время процесса разработки? 
  • ваш код может навевать ужас на того, кто с ним соприкасается.....
  • ваш код может навевать ужас на того, кто с ним соприкасается.....
  • ваш код может навевать ужас на того, кто с ним соприкасается.....
  • ваш код может навевать ужас на того, кто с ним соприкасается.....
  • ваш код может навевать ужас на того, кто с ним соприкасается.....
  • Мы все с вами прекрасно знаем, что unit-тесты: reduce bugs in new features (catch stupid mistakes early) reduce bugs in existings features reduce the cost of change improve design (попробуйте написать тесты на плохой дизайн - у вас не получится) allow refactoring force you to slow_down_and_think (заставляет вас не торопиться и ДУМАТЬ) makes development facter and fun (если что-то не работает вы узнаете об этом раньше всех, и никто не ткнет вам   в вашу глупую ошибку) reduce fear fear to change fear to breakage fear of update fear of incompatibility fear of deadlines fear of indictment of lack of skills 1. Тесты предотвращают появления ошибок позволяют выявлять ошибки сразу дают уверенность в том, что код работоспособен 4. Тесты улучшают дизайн кода заставляют проводить маленькие изменения простой код лучше приспособлен к тестированию уменьшают связанность кода 2. Рефакторинг(изменение кода) без головной боли маленькие изменения - тест, если сломали - сразу легко исправить анти-вандализм (уверенность) 6. Ускоряют процесс разработки. снижение времени на отладку(debuging) параллельная работа, общее владение кодом уверенно вносить изменения (а не безрассудно) 3. Тесты как документация 5. Повышает квалификацию разработчика  
  • Почему наши "прекрасно задуманные" шедевры под конец разработки превращаются в глиняные статуи о тысячи подпорках? Забываем о unit-тестах. Но что в замен? Почему-же чаще получается примерно как-то так: DEV: “Мы строили-строили  и наконец построили” Customer: “А когда увидели что построили, чуть с ума не сошли” User: “Лучше бы я умер вчера....” Почему про unit тестирование мы говорим - фигня, мы потом.... , а когда наступает потом мы плачем перед релизом от того что все разваливается от дуновения junior java developer’a?
  • В чем проблема? We don’t have time to write test. 20% write new code - 80% mantance and bug fixing or creatively We could be coding new features instead 20% fun coding - 80% annoying cap (раздражающее дерьмо) У нас нету времени, мы и так только 20% времени тратим на новый функционал, а вы еще предлагаете писать unit тесты.
  • Почему так? ваш код не работает (а вы об этом не знаете) кто-то сломал ваш код (и об этом вы не знаете) вы сломали чей то код (и никто об этом не знает) А почему так?   ваш код не работает (а вы об этом не знаете) кто-то сломал ваш код (и об этом вы не знаете) вы сломали чей то код (и никто об этом не знает) А почему так?  
  • Существует множество "отговорок", что бы не использовать unit - тестирование. Разрушая одни заблуждения, человек создаёт другие заблуждения. Заблуждения, заключающие в себе некоторую долю правды, - самые опасные
  • А почему так? А все по потому, что ”We don’t have time.....” В действительности-же вы просто не хотите ничего менять, вас все устраивает, вам и так хорошо...  Так что-же вы скулите, когда проект разваливается? We don’t have time to learn how to do it/do it well. We want to write REAL CODE NOW!. Во имя эффективности совершается больше грехов, чем из-за любой другой причины, включая глупость.  
  • ? "box" session
  • ? "box" session
  • How to start unit testing alone.
  • 1.  Как зовут, где найти, как связаться/найти. 2. Если в процессе тренинга у вас возникают вопросы, не стесняйтесь останавливайте меня, и задавайте их.  3. Если у вас другое мнение о рассматриваемой теме, прошу делится им со всеми. 4. Ну и прошу держатся в рамках тренинга

Agile latvia evening_unit_testing_in_practice Agile latvia evening_unit_testing_in_practice Presentation Transcript

  • Unit testing in practice Part I
  • Let's start
  • Unit test
    • What kind of monster is this?
  • Unit testing - What kind of monster is this ?
    • Programmers write code. The code is always unique.
    • The code is designed to solve problems.
    • The purpose of the code is to do it well.
    • Programmers write code. The code is always unique.
    • The code is designed to solve problems.
    • The purpose of the code is to do it well.
    Unit testing - What kind of monster is this ?
    • Programmers write code. The code is always unique.
    • The code is designed to solve problems
    • The purpose of the code is to do it well.
    Unit testing - What kind of monster is this ?
    • Programmers write code. The code is always unique.
    • The code is designed to solve problems
    • The purpose of the code is to do it well.
    Unit testing - What kind of monster is this ?
  • Unit testing - What kind of monster is this ?
  • Unit testing - What kind of monster is this ?
    • NEW DETAIL -> TEST BENCH -> TESTING -> PILOT -> ...
    Unit testing - What kind of monster is this ?
    • CODE        REAL LIFE ...          
    Unit testing - What kind of monster is this ?
    • CODE        REAL LIFE ... 
    Why is this happening? Unit testing - What kind of monster is this ?
    • CODE        REAL LIFE ... 
    Why does this happen?
    • We missed  TEST BENCH :
      • FUNCTIONALITY TESTS
      • DEFECT SEARCH
      • QUALITY CONTROL
      • REPAIRABILITY CONTROL
      • ...
    Unit testing - What kind of monster is this ?
    • Testing code with code.
    UNIT TESTING Unit testing - What kind of monster is this ?
    • For more details, see:
    •                      or 
    Unit testing - What kind of monster?
  • Unit testing - What's the point?
    • Writing tests
  • Unit testing - What's the point?
    • Writing simple tests
  • Unit testing - What's the point?
    • Writing simple tests for each method of class
  • Unit testing - What's the point?
    • Write code and protect.
  • Unit testing - What's the point?
    • Write code and protect...
    • If the code is broken, we will know.
  • Unit testing - What's the point?
    •      We are not afraid
    •      We are not afraid to change the code
    •      We are not afraid that you will break any other code
    •      We are not afraid that others broke any your code
  • Unit testing - What's the point?
    •      We are not afraid
    •      We are not afraid to change the code
    •      We are not afraid that you will break any other code
    •      We are not afraid that others break any of your code
  • Unit testing - What's the point?
    •      We are not afraid
    •      We are not afraid to change the code
    •      We are not afraid that you will break any other code
    •      We are not afraid that others break any of your code
  • Unit testing - What's the point?
    •      We are not afraid
    •      We are not afraid to change the code
    •      We are not afraid that you will break any other code
    •      We are not afraid that others break any of your code
  • Unit testing - Who needs it?
    •      Maybe programmers don't?
    •     
    •      Maybe programmers do?
  • Unit testing - Who needs it?
    •      Maybe not need programmers?
    •      May need programmers?
  • Unit testing - what is the purpose?
    • Looking for bugs ?
    •          YES !
    •          
    •              All programs have bugs.
    Edsger W. Dijkstra
  • Unit testing - what is the purpose?
    • Looking for bugs ?
    •          YES !
    •              All programs have bugs.
    •      or      NO ?
    •              Our code has bugs.  
  • Unit testing - what is the purpose?
    • Looking for bugs ?
    •          YES !
    •              All programs have bugs.
    •      or      NO ?
    •              Our code has bugs.   But not only bugs.... 
  • Unit testing - what is the purpose?
    • Yes, our code has bugs ...but not only bugs.
    • Our code has also:
    •          the huge cost of change
    •         
  • Unit testing - what is the purpose?
    • Yes, our code has bugs ...but not only bugs.
    • Our code has also:
    •          the huge cost of change
    •          smelly code
    •         
  • Unit testing - what is the purpose?
    • Yes, our code has bugs ...but not only bugs.
    • Our code has also:
    •          the huge cost of change
    •          smelly code
    •          nightmarish design
    •       
  • Unit testing - what is the purpose?
    • Yes, our code has bugs ...but not only bugs.
    • Our code has also:
    •          the huge cost of change
    •          smelly code
    •          nightmarish design
    •          fear to touch
    •         
  • Unit testing - what is the purpose?
    • Yes, our code has bugs ...but not only bugs.
    • Our code has also:
    •          the huge cost of change
    •          smelly code
    •          nightmarish design
    •          fear to touch
    •          horror
    •          .....
  • We all have heard that unit tests:
      • reduce bugs in new features
      • reduce bugs in existing features
      • reduce the cost of change
      • improve design
      • allow refactoring
      • force you to "slow down and think"
      • make development fun and faster
      • reduce the fear
  • So what is the problem?
  • So what is the problem?
    • We don’t have time to write tests.
    • We have to code new features instead.
  • Why is this happening?
      • Your code is broken, 
    • but you do not know it.
      • Someone broke your code,
    • and you do not know it.
      •   You have broken someone's code,
    • and nobody knows.
  • Why is this happening?
    • There are many "reasons" not to use the unit - testing.
  • And all because
    • I don’t have time to learn how to do it well. 
    • I don’t have time to learn how to do it. 
    • I don't have time to learn.
    •  
    • I don't have time.
    • I want to write REAL CODE NOW!
  • Developers think...
    • - I do not make mistakes in code
    •  
    •     + Please, visit http://www.rpnc.lv
    • - I have complicated code
    •     + Make it simple.
    • - Writing unit tests is unnecessary complexity
    •  
    •     + Make code simple
    •  
    •  
  • Management thinks...
    •  
    • - We have testers to find bugs
    • - Unit tests are a waste of time (expensive)
  • Management thinks...
    •  
    • - We have testers to find bugs
    • - Unit tests are a waste of time (expensive)
  • Unit Tests and You
    • What should I do?
    • Pick a testing framework (xUnit)
    • Start writing unit tests
    • Learn how do do this
    • Catch yours and colleagues bugs
  • About me
    • Denis Udod
    •      past:              more 20 years IT experience
    •      now:               lead trainer in
    •      how to find:      [email_address]
    •     
    •