SlideShare une entreprise Scribd logo
1  sur  42
Опыт применения
              лучших практик

Денис Тучин
руководитель группы разработки ПО
i-Sys
Об авторе
 • Коммерческая разработка     с 2004
 • Применение best practices   с 2006
 • Внедрение best practices    с 2009
 • Agile evangelist            с 2009


Работодатели и заказчики          Agile
                               консалтинг
Лучшие практики
• Система контроля версий
• Итерации + демонстрации
• Заказчик рядом
• База знаний (Wiki)
• Code review
• Коллективное владение кодом
• Модульное и интеграционное тестирования
• Автоматизированная сборка и
     непрерывная интеграция
• Стандарты кодирования
• Ретроспективы
• Метафора системы
Система контроля версий
• Совместная работа с одним кодом
• Возможность определить, кто, когда и какие
  изменения внѐс
• Хранение истории изменений и старого кода
• Возможность сравнить свой код с работающим
• Возможность более продуктивно поддерживать
  несколько версий продукта (ветки)
• Разграничение прав (чтение/запись)
Хорошие практики работы
с системой контроля версий
Итерации + демонстрации
• Есть обратная связь от заказчика:
  o то ли делаем, что нужно?
  o так ли делаем как нужно?

• Заказчик видит, что мы всѐ-таки
  что-то делаем

• Можно брать $ с заказчика за реализованный
  функционал

• У заказчика есть возможность менять приоритеты
  и требования походу безболезненно для команды
Заказчик рядом
• Всегда можно задать вопросы по требованиям
• Показать какой-то критичный функционал до
  демонстрации
• Заказчик видит, что мы всѐ-таки что-то делаем :)
• Технические вопросы заказчику (субподряд)




* Рядом не обязательно, но желательно очно
База знаний (Wiki)
• Решение типовых проблем
  o При деплое ошибка «…»
  o Неверная кодировка в HTTP request

• Решение нетривиальных проблем,
  возникавших >1 раза (в целом в команде)

• Описание работы самописных библиотек и
  фреймворков

• Лучшие практики использования
  сторонних библиотек

• Инструкции по развѐртыванию и настройке…
Требования в Wiki
• Иерархическая структура

• Проще поиск информации по разделам

• Комменты
  o Вопросы (уточнение требований)
  o Замечания: некорректность или конфликты

• Совместное редактирование
  o Если несколько аналитиков
  o Или если кросс-функциональная команда

• Оповещение об изменениях конкретного раздела
  требований
Матрица участников в Wiki

• Матрица компетенций участников проекта
   o Java, BPEL, Тестирование, Банковский софт

• Матрица ответственности участников проекта
   o Своевременность и актуальность требований

   o Работоспособность тестового стеда

   o План на итерацию…

• Информация по тому как нужно общаться с
  каждым из представителей заказчика *

* Стоит закрыть для заказчика этот раздел :)
Матрица участников в Wiki
Аудит кода (Code review)
• Опытные коллеги поправляют менее опытных

• Опытные коллеги учат, как правильно, менее
  опытных

• Коллеги находят баги и несовершенства у других
  в коде

• Review Board
  o Оповещение о коде на проверку

  o Выделение кода для добавления комментария и
    отправка письма автору
Review
Board
Коллективное владение кодом
              Бенефты
• Все знают, как работает система

• Более эффективная интеграция

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

• «Автоматический» аудит кода (code review)

• Каждый несѐт ответственность за весь код
Коллективное владение кодом
             Принципы
• Каждый может вносить изменения в любую часть
  программы

• За работоспособность кода несѐт ответственность
  последний, кто его изменял

• Если такового найти сложно,
  работоспособность
  восстанавливает «кто считает
  себя более вежливым и
  воспитанным»
Модульные тесты
• Обнаружение ошибок раньше и быстрее тестеров

• Возможность избежать поиска труднонаходимых
  багов

• Контроль того, что кто-то постфактум внѐс баги
  (регрессии)

• Архитектура неизбежно приобретает большую
  модульность

• Тестирование функционала происходит «с
  низу», что существенно упрощает интеграцию
Модульные тесты
Интеграционные тесты

* После модульного

+ Проверка, что разные модули/слои приложения
правильно работают совместно
Системное тестирование:
Автоматизированное тестирование UI
Автоматизированная сборка

• Компиляция исходного кода в бинарный код
• Сборка бинарного кода в приложение
• Выполнение тестов
• Разворачивание на testing и production
  платформы
Apache Maven
• Один скрипт для всех платформ: Win, Linux, Mac
• Один скрипт для всех целей *:
   • Для разработчиков
   • Для стенда тестирования
   • Для Production версии
   • Сервер непрерывной интеграции (Continuous Integration)

• Управлением версиями модулей системы и
  сторонних библиотек
• Нет необходимости дублирования библиотек

* Возможно сделать разные профили, для разных целей сборки
Sonatype Nexus
• Единый репозитарий артефактов
• Одинаковые библиотеки у всех:
  •   у разработчиков
  •   на стенде тестирования
  •   в Production версии
  •   на сервере непрерывной интеграции
• Храним самописные библиотеки в одном месте
• Не нужно каждый раз искать, где скачать
• Экономим трафик
• Решаем проблемы шаринга платных библиотек
  внутри компании
Непрерывная интеграция (CI)

• Быстро всем видно, если сборка упала и кто в
  этом виноват
• Автоматическое разворачивание для
  альфа-тестирования
• Возможность запускать ресурсоемкие тесты
• Возможность автоматического разворачивания
  на стенд разработки, если он общий
Стандарты кодирования
• Код однообразен
• Код более удобочитаем в целом
• Код обычно более документирован (Javadocs)
• Позволяет избежать досадных ошибок
  (типа if без скобок)
• Позволяет исключить неоптимальные практики
• Разработчики не тратят
  время холивары
Стандарты кодирования:
      Плагины к среде разработки

Даже если вы забыли все соглашения, плагин
напомнит:
• Выделит цветом
• Предупредит перед
  комитом (check-in)
Стандарты кодирования:
        Плагины к серверу CI
• Даже если у вас не включѐн плагин в IDE
• Continuous Integration (CI) сервер скажет вам
  всѐ, что он про вас думает :)
• Можно ввести рейтинг по комитерам:
  • Количество удачных/неудачных сборок после комита
  • Количество внесѐнных браков
  • Количество исправленных браков
Ретроспективы
Цели
• Можно увидеть не очевидные проблемы

• Понять, что «безобидные вещи» являются
  существенными проблемами

• Предупредить назревающие конфликты

Формат
• Мозговой штурм

• Голосование

• План действий
Ретроспективы
Что прошло хорошо/Что можно улучшить
                 • Проблема
                 • Голосов
                 • Что сделать?
                 • Кто?
                 • Когда?
Метафора системы


            =                  +

• Все разработчики понимают систему одинаково

• Разработчики и заказчик говорят на одном языке

• Разработчики и тестировщики говорят на одном
  языке
Метафора системы
     Пример
Метафора системы
      Пример

Электронный кошелёк!
О чѐм не рассказал?
Test Driven Development (TDD)
Разработка через тестирование
Planning Poker
Парное программирование

• Повышение дисциплины
• Лучший код
• Гибкий поток работы
• Высокий боевой дух
• Коллективное владение кодом
• Командный дух
• Высокое качество дизайна
• Обратная связь
• Непрерывный аудит кода
• Обучение
Рефакторинг

• Нужно добавить новую функцию, которая плохо
  укладывается в архитектуру
• Нужно исправить ошибку, причины возникновения
  которой сразу не ясны
• Сложная логика программы
• Дублирование кода
• Длинный метод
• Большой класс
• Много параметров в методе
• «Завистливые» функции
• Избыточные временные переменные
• Классы данных
YAGNI
          Вам это не понадобится

• В 50% случаев код написанный про запас не
  используется вообще
• В 49% - дорабатывается или перерабатывается
40-часовая рабочая неделя

• Производительность разработчиков сильно
  падает, если они вынуждены работать подолгу.
• Падает настолько, что за 10 часов они начинают
  делать столько, сколько раньше делали за 6




               60<40              *

     * В сочетании с описанными практиками
Шаблоны проектирования
   (Design Patterns)
Так же почитать
• Слайдкаст «Ведение проектной документации IT-специалистами»

• Экстремальное программирование в Википедии

• Обзор методологии SCRUM

• Про каждую из практик в Википедии
Спасибо за внимание

Блог:        IT-Improver.LiveJournal.com

E-mail:      DenisTuchin@gmail.com

Skype:       Denis.Tuchin

Вебинары:    IT-Webinars.LiveJournal.com

Contenu connexe

Tendances

Тестирование осень 2013 лекция 3
Тестирование осень 2013 лекция 3Тестирование осень 2013 лекция 3
Тестирование осень 2013 лекция 3
Technopark
 
Web driver история одной миграции
Web driver   история одной миграцииWeb driver   история одной миграции
Web driver история одной миграции
Igor Khrol
 
IT-шная история игрушек или feature-driven тестирование в действии
IT-шная история игрушек или feature-driven тестирование в действииIT-шная история игрушек или feature-driven тестирование в действии
IT-шная история игрушек или feature-driven тестирование в действии
Gleb Rybalko
 

Tendances (20)

Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
 
Технологии разработки ПО
Технологии разработки ПОТехнологии разработки ПО
Технологии разработки ПО
 
Team workflow
Team workflowTeam workflow
Team workflow
 
Автоматизация тестирования ролей и привилегий
Автоматизация тестирования ролей и привилегийАвтоматизация тестирования ролей и привилегий
Автоматизация тестирования ролей и привилегий
 
Использование анализатора кода SonarQube
Использование анализатора кода SonarQubeИспользование анализатора кода SonarQube
Использование анализатора кода SonarQube
 
QAFest. Роль тестирования в Devops
QAFest. Роль тестирования в DevopsQAFest. Роль тестирования в Devops
QAFest. Роль тестирования в Devops
 
GUI-автоматизация в Telerik Test Studio
GUI-автоматизация в Telerik Test StudioGUI-автоматизация в Telerik Test Studio
GUI-автоматизация в Telerik Test Studio
 
История HERE Maps for Windows: меняемся не изменяя качеству
История HERE Maps for Windows: меняемся не изменяя качествуИстория HERE Maps for Windows: меняемся не изменяя качеству
История HERE Maps for Windows: меняемся не изменяя качеству
 
Тестировщик в Agile - кто он?
Тестировщик в Agile - кто он?Тестировщик в Agile - кто он?
Тестировщик в Agile - кто он?
 
Шаблоны проектирования нагрузочных скриптов
Шаблоны проектирования нагрузочных скриптовШаблоны проектирования нагрузочных скриптов
Шаблоны проектирования нагрузочных скриптов
 
Тестирование осень 2013 лекция 3
Тестирование осень 2013 лекция 3Тестирование осень 2013 лекция 3
Тестирование осень 2013 лекция 3
 
Robot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатораRobot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатора
 
Web driver история одной миграции
Web driver   история одной миграцииWeb driver   история одной миграции
Web driver история одной миграции
 
WP как экспериментальная платформа
WP как экспериментальная платформаWP как экспериментальная платформа
WP как экспериментальная платформа
 
Промышленная разработка ПО. Лекция 3. Особенности работы программиста. Часть...
Промышленная разработка ПО. Лекция 3. Особенности работы программиста.  Часть...Промышленная разработка ПО. Лекция 3. Особенности работы программиста.  Часть...
Промышленная разработка ПО. Лекция 3. Особенности работы программиста. Часть...
 
QA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
QA Fes 2016. Анастасия Асеева. Роль тестирования в DevopsQA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
QA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
 
Grail: шаги для ваших Python-тестов
Grail: шаги для ваших Python-тестовGrail: шаги для ваших Python-тестов
Grail: шаги для ваших Python-тестов
 
Проходим тест Джоэла
Проходим тест ДжоэлаПроходим тест Джоэла
Проходим тест Джоэла
 
IT-шная история игрушек или feature-driven тестирование в действии
IT-шная история игрушек или feature-driven тестирование в действииIT-шная история игрушек или feature-driven тестирование в действии
IT-шная история игрушек или feature-driven тестирование в действии
 
Tech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест ДжоэлаTech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест Джоэла
 

En vedette

Новые возможности платформы Oracle 12c для хранилищ данных
Новые возможности платформы Oracle 12c для хранилищ данныхНовые возможности платформы Oracle 12c для хранилищ данных
Новые возможности платформы Oracle 12c для хранилищ данных
Andrey Akulov
 
Пример внедрения Agile в крупном проекте. Как не следует внедрять Agile
Пример внедрения Agile в крупном проекте. Как не следует внедрять AgileПример внедрения Agile в крупном проекте. Как не следует внедрять Agile
Пример внедрения Agile в крупном проекте. Как не следует внедрять Agile
Alexey Krivitsky
 
Интернет вещей. Обзор технологии и примеры решений.
Интернет вещей. Обзор технологии и примеры решений. Интернет вещей. Обзор технологии и примеры решений.
Интернет вещей. Обзор технологии и примеры решений.
Cisco Russia
 
Sample Business Requirement Document
Sample Business Requirement DocumentSample Business Requirement Document
Sample Business Requirement Document
Isabel Elaine Leong
 
6 basic steps of software development process
6 basic steps of software development process6 basic steps of software development process
6 basic steps of software development process
Riant Soft
 

En vedette (11)

Работа с рисками в Scrum проектах
Работа с рисками в Scrum проектахРабота с рисками в Scrum проектах
Работа с рисками в Scrum проектах
 
Новые возможности платформы Oracle 12c для хранилищ данных
Новые возможности платформы Oracle 12c для хранилищ данныхНовые возможности платформы Oracle 12c для хранилищ данных
Новые возможности платформы Oracle 12c для хранилищ данных
 
Code Quality, Standards and Best Practices, Discuss
Code Quality, Standards and Best Practices, DiscussCode Quality, Standards and Best Practices, Discuss
Code Quality, Standards and Best Practices, Discuss
 
Пример внедрения Agile в крупном проекте. Как не следует внедрять Agile
Пример внедрения Agile в крупном проекте. Как не следует внедрять AgileПример внедрения Agile в крупном проекте. Как не следует внедрять Agile
Пример внедрения Agile в крупном проекте. Как не следует внедрять Agile
 
The story of SonarQube told to a DevOps Engineer
The story of SonarQube told to a DevOps EngineerThe story of SonarQube told to a DevOps Engineer
The story of SonarQube told to a DevOps Engineer
 
Интернет вещей. Обзор технологии и примеры решений.
Интернет вещей. Обзор технологии и примеры решений. Интернет вещей. Обзор технологии и примеры решений.
Интернет вещей. Обзор технологии и примеры решений.
 
Управление проектами по разработке в стиле Agile или Waterfall, чья доска круче?
Управление проектами по разработке в стиле Agile или Waterfall, чья доска круче?Управление проектами по разработке в стиле Agile или Waterfall, чья доска круче?
Управление проектами по разработке в стиле Agile или Waterfall, чья доска круче?
 
Sample Business Requirement Document
Sample Business Requirement DocumentSample Business Requirement Document
Sample Business Requirement Document
 
Requirements Gathering Best Practice Pack
Requirements Gathering Best Practice PackRequirements Gathering Best Practice Pack
Requirements Gathering Best Practice Pack
 
List of Software Development Model and Methods
List of Software Development Model and MethodsList of Software Development Model and Methods
List of Software Development Model and Methods
 
6 basic steps of software development process
6 basic steps of software development process6 basic steps of software development process
6 basic steps of software development process
 

Similaire à Лучшие практики на практике

Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5
Technopark
 
Automation from the trenches
Automation from the trenchesAutomation from the trenches
Automation from the trenches
Gleb Rybalko
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только один
Sergey Xek
 
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Ontico
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
HappyDev
 
Денис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в ЯндексеДенис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в Яндексе
Yandex
 
автостопом по багтрекингам
автостопом по багтрекингамавтостопом по багтрекингам
автостопом по багтрекингам
Sergey Oreshkov
 

Similaire à Лучшие практики на практике (20)

Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5
 
Automation from the trenches
Automation from the trenchesAutomation from the trenches
Automation from the trenches
 
Automation from the trenches
Automation from the trenchesAutomation from the trenches
Automation from the trenches
 
Code review как средство обеспечения качества программного обеспечения
Code review как средство обеспечения качества программного обеспеченияCode review как средство обеспечения качества программного обеспечения
Code review как средство обеспечения качества программного обеспечения
 
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
 
Алексей Лустин. Непрерывная проверка качества кода.
Алексей Лустин. Непрерывная проверка качества кода.Алексей Лустин. Непрерывная проверка качества кода.
Алексей Лустин. Непрерывная проверка качества кода.
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только один
 
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
 
Промышленная разработка ПО. Лекция 2. Инструменты
Промышленная разработка ПО. Лекция 2. ИнструментыПромышленная разработка ПО. Лекция 2. Инструменты
Промышленная разработка ПО. Лекция 2. Инструменты
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
 
InterSystems Community and Projects in CIS November 2015
InterSystems Community and Projects in CIS November 2015InterSystems Community and Projects in CIS November 2015
InterSystems Community and Projects in CIS November 2015
 
Workflow: работа над проектом в Яндексе
Workflow: работа над проектом в ЯндексеWorkflow: работа над проектом в Яндексе
Workflow: работа над проектом в Яндексе
 
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...
 
Денис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в ЯндексеДенис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в Яндексе
 
Автостопом по багтрекингам
Автостопом по багтрекингамАвтостопом по багтрекингам
Автостопом по багтрекингам
 
автостопом по багтрекингам
автостопом по багтрекингамавтостопом по багтрекингам
автостопом по багтрекингам
 
Улучшить KPI в два раза? Сделано!
Улучшить KPI в два раза? Сделано!Улучшить KPI в два раза? Сделано!
Улучшить KPI в два раза? Сделано!
 
О фреймворках Backend conf 2016
О фреймворках Backend conf 2016О фреймворках Backend conf 2016
О фреймворках Backend conf 2016
 

Plus de Denis Tuchin

Введение в Agile и Scrum для Дизайн мыслителей
Введение в Agile и Scrum для Дизайн мыслителейВведение в Agile и Scrum для Дизайн мыслителей
Введение в Agile и Scrum для Дизайн мыслителей
Denis Tuchin
 
Денис Тучин - Болезни Agile ретроспектив и как их лечить (2016 AgileTour.By)
Денис Тучин - Болезни Agile ретроспектив и как их лечить (2016 AgileTour.By)Денис Тучин - Болезни Agile ретроспектив и как их лечить (2016 AgileTour.By)
Денис Тучин - Болезни Agile ретроспектив и как их лечить (2016 AgileTour.By)
Denis Tuchin
 
Николай Борисов, Денис Тучин - Основы метода LEGO SERIOUS PLAY, фасилитация, ...
Николай Борисов, Денис Тучин - Основы метода LEGO SERIOUS PLAY, фасилитация, ...Николай Борисов, Денис Тучин - Основы метода LEGO SERIOUS PLAY, фасилитация, ...
Николай Борисов, Денис Тучин - Основы метода LEGO SERIOUS PLAY, фасилитация, ...
Denis Tuchin
 

Plus de Denis Tuchin (20)

LeSS in the big bank a five-year journey.pdf
LeSS in the big bank a five-year journey.pdfLeSS in the big bank a five-year journey.pdf
LeSS in the big bank a five-year journey.pdf
 
LeSS in the big bank a five-year journey
LeSS in the big bank a five-year journeyLeSS in the big bank a five-year journey
LeSS in the big bank a five-year journey
 
Agile HR манифест на русском
Agile HR манифест на русскомAgile HR манифест на русском
Agile HR манифест на русском
 
Прототипирование, как способ исправить клиентский опыт до старта разработки п...
Прототипирование, как способ исправить клиентский опыт до старта разработки п...Прототипирование, как способ исправить клиентский опыт до старта разработки п...
Прототипирование, как способ исправить клиентский опыт до старта разработки п...
 
Что делать с «токсичными» сотрудниками
Что делать с «токсичными» сотрудникамиЧто делать с «токсичными» сотрудниками
Что делать с «токсичными» сотрудниками
 
Игра "Фабрика эльфов" (The Elf Factory)
Игра "Фабрика эльфов" (The Elf Factory)Игра "Фабрика эльфов" (The Elf Factory)
Игра "Фабрика эльфов" (The Elf Factory)
 
Сю Ха Ри (Shu Ha Ri) Стадии своения мастерства
Сю Ха Ри (Shu Ha Ri) Стадии своения мастерстваСю Ха Ри (Shu Ha Ri) Стадии своения мастерства
Сю Ха Ри (Shu Ha Ri) Стадии своения мастерства
 
Игра перемен (The Game of Changes RU) 1.5
Игра перемен (The Game of Changes RU) 1.5Игра перемен (The Game of Changes RU) 1.5
Игра перемен (The Game of Changes RU) 1.5
 
Типовые слайды для тренинга "Agile для лидеров"
Типовые слайды для тренинга "Agile для лидеров"Типовые слайды для тренинга "Agile для лидеров"
Типовые слайды для тренинга "Agile для лидеров"
 
Частые ошибки Agile-трансформаций
Частые ошибки Agile-трансформацийЧастые ошибки Agile-трансформаций
Частые ошибки Agile-трансформаций
 
Введение в Agile и Scrum для Дизайн мыслителей
Введение в Agile и Scrum для Дизайн мыслителейВведение в Agile и Scrum для Дизайн мыслителей
Введение в Agile и Scrum для Дизайн мыслителей
 
Денис Тучин - Как не завалить Ретро: практические советы, как готовится и как...
Денис Тучин - Как не завалить Ретро: практические советы, как готовится и как...Денис Тучин - Как не завалить Ретро: практические советы, как готовится и как...
Денис Тучин - Как не завалить Ретро: практические советы, как готовится и как...
 
Денис Тучин - Пользовательские истории и критерии приёмки (Agile Kitchen 2017...
Денис Тучин - Пользовательские истории и критерии приёмки (Agile Kitchen 2017...Денис Тучин - Пользовательские истории и критерии приёмки (Agile Kitchen 2017...
Денис Тучин - Пользовательские истории и критерии приёмки (Agile Kitchen 2017...
 
Online meetup по фасилитации
Online meetup по фасилитацииOnline meetup по фасилитации
Online meetup по фасилитации
 
Инструменты гибкого управления: Agile / Kanban / Scrum
Инструменты гибкого управления: Agile / Kanban / ScrumИнструменты гибкого управления: Agile / Kanban / Scrum
Инструменты гибкого управления: Agile / Kanban / Scrum
 
Денис Тучин - Болезни Agile ретроспектив и как их лечить (2016 AgileTour.By)
Денис Тучин - Болезни Agile ретроспектив и как их лечить (2016 AgileTour.By)Денис Тучин - Болезни Agile ретроспектив и как их лечить (2016 AgileTour.By)
Денис Тучин - Болезни Agile ретроспектив и как их лечить (2016 AgileTour.By)
 
Денис Тучин - Принципы Agile в управлении требованиями
Денис Тучин - Принципы Agile в управлении требованиямиДенис Тучин - Принципы Agile в управлении требованиями
Денис Тучин - Принципы Agile в управлении требованиями
 
Денис Тучин - Пользовательские истории в Agile-проектах
Денис Тучин - Пользовательские истории в Agile-проектахДенис Тучин - Пользовательские истории в Agile-проектах
Денис Тучин - Пользовательские истории в Agile-проектах
 
Денис Тучин - Удачные и неудачные паттерны распределённого Agile (Agile Days ...
Денис Тучин - Удачные и неудачные паттерны распределённого Agile (Agile Days ...Денис Тучин - Удачные и неудачные паттерны распределённого Agile (Agile Days ...
Денис Тучин - Удачные и неудачные паттерны распределённого Agile (Agile Days ...
 
Николай Борисов, Денис Тучин - Основы метода LEGO SERIOUS PLAY, фасилитация, ...
Николай Борисов, Денис Тучин - Основы метода LEGO SERIOUS PLAY, фасилитация, ...Николай Борисов, Денис Тучин - Основы метода LEGO SERIOUS PLAY, фасилитация, ...
Николай Борисов, Денис Тучин - Основы метода LEGO SERIOUS PLAY, фасилитация, ...
 

Лучшие практики на практике

  • 1. Опыт применения лучших практик Денис Тучин руководитель группы разработки ПО i-Sys
  • 2. Об авторе • Коммерческая разработка с 2004 • Применение best practices с 2006 • Внедрение best practices с 2009 • Agile evangelist с 2009 Работодатели и заказчики Agile консалтинг
  • 3. Лучшие практики • Система контроля версий • Итерации + демонстрации • Заказчик рядом • База знаний (Wiki) • Code review • Коллективное владение кодом • Модульное и интеграционное тестирования • Автоматизированная сборка и непрерывная интеграция • Стандарты кодирования • Ретроспективы • Метафора системы
  • 4. Система контроля версий • Совместная работа с одним кодом • Возможность определить, кто, когда и какие изменения внѐс • Хранение истории изменений и старого кода • Возможность сравнить свой код с работающим • Возможность более продуктивно поддерживать несколько версий продукта (ветки) • Разграничение прав (чтение/запись)
  • 5. Хорошие практики работы с системой контроля версий
  • 6. Итерации + демонстрации • Есть обратная связь от заказчика: o то ли делаем, что нужно? o так ли делаем как нужно? • Заказчик видит, что мы всѐ-таки что-то делаем • Можно брать $ с заказчика за реализованный функционал • У заказчика есть возможность менять приоритеты и требования походу безболезненно для команды
  • 7. Заказчик рядом • Всегда можно задать вопросы по требованиям • Показать какой-то критичный функционал до демонстрации • Заказчик видит, что мы всѐ-таки что-то делаем :) • Технические вопросы заказчику (субподряд) * Рядом не обязательно, но желательно очно
  • 8. База знаний (Wiki) • Решение типовых проблем o При деплое ошибка «…» o Неверная кодировка в HTTP request • Решение нетривиальных проблем, возникавших >1 раза (в целом в команде) • Описание работы самописных библиотек и фреймворков • Лучшие практики использования сторонних библиотек • Инструкции по развѐртыванию и настройке…
  • 9. Требования в Wiki • Иерархическая структура • Проще поиск информации по разделам • Комменты o Вопросы (уточнение требований) o Замечания: некорректность или конфликты • Совместное редактирование o Если несколько аналитиков o Или если кросс-функциональная команда • Оповещение об изменениях конкретного раздела требований
  • 10. Матрица участников в Wiki • Матрица компетенций участников проекта o Java, BPEL, Тестирование, Банковский софт • Матрица ответственности участников проекта o Своевременность и актуальность требований o Работоспособность тестового стеда o План на итерацию… • Информация по тому как нужно общаться с каждым из представителей заказчика * * Стоит закрыть для заказчика этот раздел :)
  • 12. Аудит кода (Code review) • Опытные коллеги поправляют менее опытных • Опытные коллеги учат, как правильно, менее опытных • Коллеги находят баги и несовершенства у других в коде • Review Board o Оповещение о коде на проверку o Выделение кода для добавления комментария и отправка письма автору
  • 14. Коллективное владение кодом Бенефты • Все знают, как работает система • Более эффективная интеграция • Каждый может подменить другого o болезнь o отпуск o увольнение o уход с проекта • «Автоматический» аудит кода (code review) • Каждый несѐт ответственность за весь код
  • 15. Коллективное владение кодом Принципы • Каждый может вносить изменения в любую часть программы • За работоспособность кода несѐт ответственность последний, кто его изменял • Если такового найти сложно, работоспособность восстанавливает «кто считает себя более вежливым и воспитанным»
  • 16. Модульные тесты • Обнаружение ошибок раньше и быстрее тестеров • Возможность избежать поиска труднонаходимых багов • Контроль того, что кто-то постфактум внѐс баги (регрессии) • Архитектура неизбежно приобретает большую модульность • Тестирование функционала происходит «с низу», что существенно упрощает интеграцию
  • 18. Интеграционные тесты * После модульного + Проверка, что разные модули/слои приложения правильно работают совместно
  • 20. Автоматизированная сборка • Компиляция исходного кода в бинарный код • Сборка бинарного кода в приложение • Выполнение тестов • Разворачивание на testing и production платформы
  • 21. Apache Maven • Один скрипт для всех платформ: Win, Linux, Mac • Один скрипт для всех целей *: • Для разработчиков • Для стенда тестирования • Для Production версии • Сервер непрерывной интеграции (Continuous Integration) • Управлением версиями модулей системы и сторонних библиотек • Нет необходимости дублирования библиотек * Возможно сделать разные профили, для разных целей сборки
  • 22. Sonatype Nexus • Единый репозитарий артефактов • Одинаковые библиотеки у всех: • у разработчиков • на стенде тестирования • в Production версии • на сервере непрерывной интеграции • Храним самописные библиотеки в одном месте • Не нужно каждый раз искать, где скачать • Экономим трафик • Решаем проблемы шаринга платных библиотек внутри компании
  • 23. Непрерывная интеграция (CI) • Быстро всем видно, если сборка упала и кто в этом виноват • Автоматическое разворачивание для альфа-тестирования • Возможность запускать ресурсоемкие тесты • Возможность автоматического разворачивания на стенд разработки, если он общий
  • 24. Стандарты кодирования • Код однообразен • Код более удобочитаем в целом • Код обычно более документирован (Javadocs) • Позволяет избежать досадных ошибок (типа if без скобок) • Позволяет исключить неоптимальные практики • Разработчики не тратят время холивары
  • 25. Стандарты кодирования: Плагины к среде разработки Даже если вы забыли все соглашения, плагин напомнит: • Выделит цветом • Предупредит перед комитом (check-in)
  • 26. Стандарты кодирования: Плагины к серверу CI • Даже если у вас не включѐн плагин в IDE • Continuous Integration (CI) сервер скажет вам всѐ, что он про вас думает :) • Можно ввести рейтинг по комитерам: • Количество удачных/неудачных сборок после комита • Количество внесѐнных браков • Количество исправленных браков
  • 27. Ретроспективы Цели • Можно увидеть не очевидные проблемы • Понять, что «безобидные вещи» являются существенными проблемами • Предупредить назревающие конфликты Формат • Мозговой штурм • Голосование • План действий
  • 28. Ретроспективы Что прошло хорошо/Что можно улучшить • Проблема • Голосов • Что сделать? • Кто? • Когда?
  • 29. Метафора системы = + • Все разработчики понимают систему одинаково • Разработчики и заказчик говорят на одном языке • Разработчики и тестировщики говорят на одном языке
  • 31.
  • 32. Метафора системы Пример Электронный кошелёк!
  • 33. О чѐм не рассказал?
  • 34. Test Driven Development (TDD) Разработка через тестирование
  • 36. Парное программирование • Повышение дисциплины • Лучший код • Гибкий поток работы • Высокий боевой дух • Коллективное владение кодом • Командный дух • Высокое качество дизайна • Обратная связь • Непрерывный аудит кода • Обучение
  • 37. Рефакторинг • Нужно добавить новую функцию, которая плохо укладывается в архитектуру • Нужно исправить ошибку, причины возникновения которой сразу не ясны • Сложная логика программы • Дублирование кода • Длинный метод • Большой класс • Много параметров в методе • «Завистливые» функции • Избыточные временные переменные • Классы данных
  • 38. YAGNI Вам это не понадобится • В 50% случаев код написанный про запас не используется вообще • В 49% - дорабатывается или перерабатывается
  • 39. 40-часовая рабочая неделя • Производительность разработчиков сильно падает, если они вынуждены работать подолгу. • Падает настолько, что за 10 часов они начинают делать столько, сколько раньше делали за 6 60<40 * * В сочетании с описанными практиками
  • 41. Так же почитать • Слайдкаст «Ведение проектной документации IT-специалистами» • Экстремальное программирование в Википедии • Обзор методологии SCRUM • Про каждую из практик в Википедии
  • 42. Спасибо за внимание Блог: IT-Improver.LiveJournal.com E-mail: DenisTuchin@gmail.com Skype: Denis.Tuchin Вебинары: IT-Webinars.LiveJournal.com