Why it is not working

Preview:

DESCRIPTION

Основные ошибки внедрения ATDD, BDD, CI, CD на проектах, Резчиков Алексей Каждый новый проект, к которому Алексей подключается в качестве консультанта, уже имеет свою историю внедрения автоматизации тестирования, CI и CD. Истории очень разные, каждая интересна по-своему, каждая рассказывает об ошибках. О самых распространенных из них, а также о том, как их не допустить, Алексей расскажет в своем докладе.

Citation preview

Почему это не работает? или

Записки консультанта

Февраль 2012

Алексей Резчиков

Обо мне

Консультант по Testing Automation, Continuous Integration и Continuous Delivery

Java разработчик и тимлид уже более 6-ти лет

В разное время работал project, resource, development и competency manager

Последователь XP/Agile/Lean

Евангелист Spring Framework в рамках SpringByExample.com.ua

@twincengray #atdays

2

Куда мы идем?

@twincengray #atdays 3

@twincengray #atdays 4

Реалии индустрии

Сказки

Сказка ложь, да в ней намек… (с)

Народная мудрость

@twincengray #atdays 5

Сказка №1

Site builder

Разрабатывается много лет, много унаследованного кода и архитектуры

Большая текучка кадров

@twincengray #atdays 6

Проблема и решение

Проблема: Качество и своевременность поставки Предлагаемое решение: Внедрение автоматизации тестирования

@twincengray #atdays

7

А на самом деле…

На самом деле проблема оказалась в отсутствии структурированных требований и невозможности регрессионного тестирования

@twincengray #atdays 8

Сказка №2 Распределенное клиент-серверное приложение

Сервер и клиент тоже веб-приложения

Отраслевые особенности

Работающий процесс Continuous Deployment

@twincengray #atdays 9

Проблема и решение Проблема:

Нет возможности поставлять продукт быстро из-за большого объема ручного тестирования

Предложенное решение:

Внедрение автоматизированного тестирования и CI

@twincengray #atdays 10

А на самом деле…

Отсутствие низкоуровневых тестов не позволяет, даже при наличии UI тестов оперативно найти и устранить неисправность

@twincengray #atdays 11

«Хорошо, но плохо» Это про внедрение автоматизации.

Из моего опыта только единицы заказчиков могут конкретно ответить на вопрос зачем им автоматизация

Остальные не готовы за это платить

@twincengray #atdays 12

5 почему (почему не работает)

@twincengray #atdays 13

Why?

Why?

Why?

Why?

Why?

Соответствие цели внедрения средствам (практикам внедрения)

Правильное понимание/постановка цели внедрения

Правильное определение проблемы, которую будет решать внедрение той или иной практики

Осознание наличия проблемы

Правильная постановка и понимание целей проекта (продукта)

@twincengray #atdays 14

Мы поговорим про

Соответствие цели внедрения средствам (практикам внедрения)

Правильное понимание/постановка цели внедрения

Правильное определение проблемы, которую будет решать внедрение той или иной практики

@twincengray #atdays 15

Понятия/практики (buzzwords)

ATDD – Acceptance Test Driven Development

BDD – Behavior Driven Development

CI – Continuous Integration

CD – Continuous Delivery

@twincengray #atdays 16

«Топографический кретинизм»

@twincengray #atdays 17

«Синдром серебряной пули»

@twincengray #atdays 18

Полумеры

- А, сто рублей, не спасут отца русской демократии?

@twincengray #atdays 19

Детские болезни

@twincengray #atdays 20

ATDD: Непонимание что такое критерии приемки

@twincengray #atdays 21

ATDD: Когда нужно BDD и наоборот

@twincengray #atdays 22

ATDD: Критерии приемки пишутся не всей командой

@twincengray #atdays 23

BDD: Cоставление GWT

@twincengray #atdays 24

D|DefaultListableBeanFactory |Returning cached instance of singleton bean 'org.springframework.context.annotation.internalAutowiredAnnotationProcessor' D|DefaultListableBeanFactory |Returning cached instance of singleton bean 'org.springframework.context.annotation.internalRequiredAnnotationProcessor' D|DefaultListableBeanFactory |Returning cached instance of singleton bean 'org.springframework.context.annotation.internalCommonAnnotationProcessor' D|DefaultListableBeanFactory |Returning cached instance of singleton bean 'org.springframework.context.annotation.internalPersistenceAnnotationProcessor' D|DefaultListableBeanFactory |Creating shared instance of singleton bean 'sendMailTextConfig' D|DefaultListableBeanFactory |Creating instance of bean 'sendMailTextConfig' D|InjectionMetadata |Found injected element on class [com.technorati.portal.service.SendMailTextConfig$$EnhancerByCGLIB$$33a64e76]: AutowiredFieldElement for private org.springframework.core.env.Environment com.technorati.portal.service.SendMailTextConfig.environment D|DefaultListableBeanFactory |Eagerly caching bean 'sendMailTextConfig' to allow for resolving potential circular references D|InjectionMetadata |Processing injected method of bean 'sendMailTextConfig': AutowiredFieldElement for private org.springframework.core.env.Environment com.technorati.portal.service.SendMailTextConfig.environment D|DefaultListableBeanFactory |Returning cached instance of singleton bean 'environment' D|AutowiredAnnotationBeanPostProcessor |Autowiring by type from bean name 'sendMailTextConfig' to bean named 'environment' D|DefaultListableBeanFactory |Finished creating instance of bean 'sendMailTextConfig' D|DefaultListableBeanFactory |Returning cached instance of singleton bean 'org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor' D|DefaultListableBeanFactory |Creating shared instance of singleton bean 'sendMailService' D|DefaultListableBeanFactory |Creating instance of bean 'sendMailService' D|DefaultListableBeanFactory |Returning cached instance of singleton bean 'sendMailTextConfig' D|DefaultListableBeanFactory |Creating shared instance of singleton bean 'freemarkerConfiguration' D|DefaultListableBeanFactory |Creating instance of bean 'freemarkerConfiguration' D|DefaultListableBeanFactory |Returning cached instance of singleton bean 'sendMailTextConfig' D|DefaultListableBeanFactory |Eagerly caching bean 'freemarkerConfiguration' to allow for resolving potential circular references D|DefaultListableBeanFactory |Finished creating instance of bean 'freemarkerConfiguration' D|DefaultListableBeanFactory |Creating shared instance of singleton bean 'templatesMap' D|DefaultListableBeanFactory |Creating instance of bean 'templatesMap' D|DefaultListableBeanFactory |Returning cached instance of singleton bean 'sendMailTextConfig' D|DefaultListableBeanFactory |Eagerly caching bean 'templatesMap' to allow for resolving potential circular references D|DefaultListableBeanFactory |Finished creating instance of bean 'templatesMap' D|DefaultListableBeanFactory |Creating shared instance of singleton bean 'mailSender' D|DefaultListableBeanFactory |Creating instance of bean 'mailSender' D|DefaultListableBeanFactory |Returning cached instance of singleton bean 'sendMailTextConfig' D|DefaultListableBeanFactory |Eagerly caching bean 'mailSender' to allow for resolving potential circular references D|DefaultListableBeanFactory |Finished creating instance of bean 'mailSender' D|InjectionMetadata |Found injected element on class [com.technorati.portal.service.SendMailService]: ResourceElement for private java.util.Map com.technorati.portal.service.SendMailService.templatesMap D|InjectionMetadata |Found injected element on class [com.technorati.portal.service.SendMailService]: AutowiredFieldElement for private org.springframework.mail.MailSender com.technorati.portal.service.SendMailService.mailSender D|InjectionMetadata |Found injected element on class [com.technorati.portal.service.SendMailService]: AutowiredFieldElement for private freemarker.template.Configuration com.technorati.portal.service.SendMailService.freemarkerConfiguration D|InjectionMetadata |Found injected element on class [com.technorati.portal.service.SendMailService]: AutowiredFieldElement for private java.lang.String com.technorati.portal.service.SendMailService.emailFrom D|DefaultListableBeanFactory |Eagerly caching bean 'sendMailService' to allow for resolving potential circular references D|InjectionMetadata |Processing injected method of bean 'sendMailService': ResourceElement for private java.util.Map com.technorati.portal.service.SendMailService.templatesMap D|DefaultListableBeanFactory |Returning cached instance of singleton bean 'templatesMap' D|InjectionMetadata |Processing injected method of bean 'sendMailService': AutowiredFieldElement for private org.springframework.mail.MailSender com.technorati.portal.service.SendMailService.mailSender D|DefaultListableBeanFactory |Returning cached instance of singleton bean 'mailSender' D|AutowiredAnnotationBeanPostProcessor |Autowiring by type from bean name 'sendMailService' to bean named 'mailSender' D|InjectionMetadata |Processing injected method of bean 'sendMailService': AutowiredFieldElement for private freemarker.template.Configuration com.technorati.portal.service.SendMailService.freemarkerConfiguration D|DefaultListableBeanFactory |Returning cached instance of singleton bean 'freemarkerConfiguration' D|AutowiredAnnotationBeanPostProcessor |Autowiring by type from bean name 'sendMailService' to bean named 'freemarkerConfiguration' D|InjectionMetadata |Processing injected method of bean 'sendMailService': AutowiredFieldElement for private java.lang.String com.technorati.portal.service.SendMailService.emailFrom D|DefaultListableBeanFactory |Finished creating instance of bean 'sendMailService'

BDD: «Где упал мой тест?»

@twincengray #atdays 25

BDD: Инструментальные проблемы

@twincengray #atdays 26

CI

@twincengray #atdays 27

CI: «Демократия»

@twincengray #atdays 28

CD: Путанница Cont. deployment и CD

@twincengray #atdays 29

CD

@twincengray #atdays 30

CD: А где ваш Configuration Management?

@twincengray #atdays 31

Технические риски

@twincengray #atdays 32

Недостаток опыта по технологии

@twincengray #atdays 33

Недостаток опыта в тестировании

@twincengray #atdays 34

Избегание CI

@twincengray #atdays 35

Тестирование на слишком высоком уровне

@twincengray #atdays 36

End-to-end/GUI

Integration

Unit

Отсутствие или неполная регрессия

@twincengray #atdays 37

Итоги

Начинать с начала

«Серебряной пули» нет

Individuals and interactions…

It’s all about the money

@twincengray #atdays 38

Вопросы?

@twincengray #atdays 39

@twincengray @ua_spring

oleksiy.rezchykov@gmail.com

SpringByExample.com.ua

mcgray.com.ua

Recommended