Top Banner
Почему это не работает? или Записки консультанта Февраль 2012 Алексей Резчиков
40

Почему это не работает (Записки консультанта)

Nov 22, 2014

Download

Documents

Automated testing days presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Почему это не работает (Записки консультанта)

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

или

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

Февраль 2012Алексей Резчиков

Page 2: Почему это не работает (Записки консультанта)

@twincengray #atdays2

Обо мне

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

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

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

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

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

Page 3: Почему это не работает (Записки консультанта)

@twincengray #atdays3

Куда мы идем?

Page 4: Почему это не работает (Записки консультанта)

@twincengray #atdays4

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

Page 5: Почему это не работает (Записки консультанта)

@twincengray #atdays5

Сказки

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

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

Page 6: Почему это не работает (Записки консультанта)

@twincengray #atdays6

Сказка №1

Site builder

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

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

Page 7: Почему это не работает (Записки консультанта)

@twincengray #atdays7

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

Проблема:Качество и своевременность поставки

Предлагаемое решение:Внедрение автоматизации тестирования

Page 8: Почему это не работает (Записки консультанта)

@twincengray #atdays8

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

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

Page 9: Почему это не работает (Записки консультанта)

@twincengray #atdays9

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

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

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

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

Page 10: Почему это не работает (Записки консультанта)

@twincengray #atdays10

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

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

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

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

Page 11: Почему это не работает (Записки консультанта)

@twincengray #atdays11

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

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

Page 12: Почему это не работает (Записки консультанта)

«Хорошо, но плохо»

Так видит автоматизацию команда

@twincengray #atdays

12

Page 13: Почему это не работает (Записки консультанта)

«Хорошо, но плохо»

А так видит автоматизацию заказчик

@twincengray #atdays

13

Page 14: Почему это не работает (Записки консультанта)

@twincengray #atdays14

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

Why?

Why?

Why?

Why?

Why?

Page 15: Почему это не работает (Записки консультанта)

@twincengray #atdays15

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

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

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

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

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

Page 16: Почему это не работает (Записки консультанта)

@twincengray #atdays16

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

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

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

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

Page 17: Почему это не работает (Записки консультанта)

@twincengray #atdays17

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

ATDD – Acceptance Test Driven Development

BDD – Behavior Driven Development

CI – Continuous Integration

CD – Continuous Delivery

Bzzzz

zzzz

Page 18: Почему это не работает (Записки консультанта)

18

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

@twincengray #atdays

Page 19: Почему это не работает (Записки консультанта)

@twincengray #atdays19

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

Page 20: Почему это не работает (Записки консультанта)

@twincengray #atdays20

Полумеры

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

Page 21: Почему это не работает (Записки консультанта)

@twincengray #atdays21

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

Page 22: Почему это не работает (Записки консультанта)

@twincengray #atdays22

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

приемки

Page 23: Почему это не работает (Записки консультанта)

@twincengray #atdays23

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

Page 24: Почему это не работает (Записки консультанта)

@twincengray #atdays24

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

Page 25: Почему это не работает (Записки консультанта)

@twincengray #atdays25

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

Page 26: Почему это не работает (Записки консультанта)

26

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.environmentD|DefaultListableBeanFactory |Eagerly caching bean 'sendMailTextConfig' to allow for resolving potential circular referencesD|InjectionMetadata |Processing injected method of bean 'sendMailTextConfig': AutowiredFieldElement for private org.springframework.core.env.Environment com.technorati.portal.service.SendMailTextConfig.environmentD|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 referencesD|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 referencesD|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 referencesD|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.templatesMapD|InjectionMetadata |Found injected element on class [com.technorati.portal.service.SendMailService]: AutowiredFieldElement for private org.springframework.mail.MailSender com.technorati.portal.service.SendMailService.mailSenderD|InjectionMetadata |Found injected element on class [com.technorati.portal.service.SendMailService]: AutowiredFieldElement for private freemarker.template.Configuration com.technorati.portal.service.SendMailService.freemarkerConfigurationD|InjectionMetadata |Found injected element on class [com.technorati.portal.service.SendMailService]: AutowiredFieldElement for private java.lang.String com.technorati.portal.service.SendMailService.emailFromD|DefaultListableBeanFactory |Eagerly caching bean 'sendMailService' to allow for resolving potential circular referencesD|InjectionMetadata |Processing injected method of bean 'sendMailService': ResourceElement for private java.util.Map com.technorati.portal.service.SendMailService.templatesMapD|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.mailSenderD|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.freemarkerConfigurationD|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.emailFromD|DefaultListableBeanFactory |Finished creating instance of bean 'sendMailService'

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

@twincengray #atdays

Page 27: Почему это не работает (Записки консультанта)

@twincengray #atdays27

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

проблемы

Page 28: Почему это не работает (Записки консультанта)

28

CI

@twincengray #atdays

Page 29: Почему это не работает (Записки консультанта)

@twincengray #atdays

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

29

Page 30: Почему это не работает (Записки консультанта)

@twincengray #atdays30

CD: Delivery is not a deployment

Page 31: Почему это не работает (Записки консультанта)

@twincengray #atdays31

CD

Page 32: Почему это не работает (Записки консультанта)

@twincengray #atdays32

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

Page 33: Почему это не работает (Записки консультанта)

@twincengray #atdays33

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

Page 34: Почему это не работает (Записки консультанта)

@twincengray #atdays34

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

Page 35: Почему это не работает (Записки консультанта)

@twincengray #atdays35

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

Page 36: Почему это не работает (Записки консультанта)

@twincengray #atdays36

Избегание CI

Page 37: Почему это не работает (Записки консультанта)

@twincengray #atdays37

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

End-to-end/GUI

Integration

Unit

Page 38: Почему это не работает (Записки консультанта)

@twincengray #atdays38

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

Page 39: Почему это не работает (Записки консультанта)

@twincengray #atdays39

Итоги

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

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

Individuals and interactions…

It’s all about the money