+ All Categories
Home > Documents > Почему это не работает (Записки консультанта)

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

Date post: 22-Nov-2014
Category:
Upload: oleksiy-rezchykov
View: 819 times
Download: 1 times
Share this document with a friend
Description:
Automated testing days presentation
Popular Tags:
40
Почему это не работает? или Записки консультанта Февраль 2012 Алексей Резчиков
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


Recommended