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

42
Опыт применения лучших практик Денис Тучин руководитель группы разработки ПО i-Sys

Upload: denis-tuchin

Post on 15-Dec-2014

812 views

Category:

Business


3 download

DESCRIPTION

Это обзор опыта применения лучших практик разработки программного обеспечения на разных проектах от госзаказов до видеоконференций в командах от 5 до 50 человек. В докладе будут описаны не только практики, но и то, как они применяются на реальных проектах и какие выгоды они действительно приносят. Видео: http://www.ustream.tv/recorded/22131704

TRANSCRIPT

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

Опыт применения

лучших практик

Денис Тучин

руководитель группы разработки ПО

i-Sys

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

Об авторе

• Коммерческая разработка с 2004

• Применение best practices с 2006

• Внедрение best practices с 2009

• Agile evangelist с 2009

Работодатели и заказчики Agile консалтинг

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

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

• Система контроля версий• Итерации + демонстрации• Заказчик рядом• База знаний (Wiki)• Code review• Коллективное владение кодом• Модульное и интеграционное тестирования• Автоматизированная сборка и

непрерывная интеграция• Стандарты кодирования• Ретроспективы• Метафора системы

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

Система контроля версий

• Совместная работа с одним кодом

• Возможность определить, кто, когда и какие изменения внёс

• Хранение истории изменений и старого кода

• Возможность сравнить свой код с работающим

• Возможность более продуктивно поддерживать несколько версий продукта (ветки)

• Разграничение прав (чтение/запись)

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

Хорошие практики работы с системой контроля версий

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

Итерации + демонстрации

• Есть обратная связь от заказчика:

o то ли делаем, что нужно?

o так ли делаем как нужно?

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

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

• У заказчика есть возможность менять приоритеты и требования походу безболезненно для команды

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

Заказчик рядом

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

• Показать какой-то критичный функционал до демонстрации

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

• Технические вопросы заказчику (субподряд)

* Рядом не обязательно, но желательно очно

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

База знаний (Wiki)• Решение типовых проблем

o При деплое ошибка «…»

o Неверная кодировка в HTTP request

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

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

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

• Инструкции по развёртыванию и настройке…

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

Требования в Wiki

• Иерархическая структура

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

• Комменты o Вопросы (уточнение требований)

o Замечания: некорректность или конфликты

• Совместное редактированиеo Если несколько аналитиков

o Или если кросс-функциональная команда

• Оповещение об изменениях конкретного раздела требований

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

Матрица участников в Wiki

• Матрица компетенций участников проекта

o Java, BPEL, Тестирование, Банковский софт

• Матрица ответственности участников проекта

o Своевременность и актуальность требований

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

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

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

* Стоит закрыть для заказчика этот раздел :)

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

Матрица участников в Wiki

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

Аудит кода (Code review)

• Опытные коллеги поправляют менее опытных

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

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

• Review Board

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

o Выделение кода для добавления комментария и отправка письма автору

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

Review Board

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

Коллективное  владение кодомБенефты

• Все знают, как работает система

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

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

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

• Каждый несёт ответственность за весь код

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

Коллективное  владение кодомПринципы

• Каждый может вносить изменения в любую

часть программы

• За работоспособность кода несёт

ответственность последний, кто его изменял

• Если такового найти сложно,

работоспособность

восстанавливает «кто считает

себя более вежливым и

воспитанным»

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

Модульные тесты

• Обнаружение ошибок раньше и быстрее тестеров

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

багов

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

(регрессии)

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

модульность

• Тестирование функционала происходит «с низу»,

что существенно упрощает интеграцию

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

Модульные тесты

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

Интеграционные тесты

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

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

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

Системное тестирование:Автоматизированное тестирование UI

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

Автоматизированная сборка

• Компиляция исходного кода в бинарный код

• Сборка бинарного кода в приложение

• Выполнение тестов

• Разворачивание на testing и production платформы

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

Apache Maven

• Один скрипт для всех платформ: Win, Linux, Mac

• Один скрипт для всех целей *:

• Для разработчиков

• Для стенда тестирования

• Для Production версии

• Сервер непрерывной интеграции (Continuous Integration)

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

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

* Возможно сделать разные профили, для разных целей сборки

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

Sonatype Nexus

• Единый репозитарий артефактов

• Одинаковые библиотеки у всех:• у разработчиков• на стенде тестирования• в Production версии• на сервере непрерывной интеграции

• Храним самописные библиотеки в одном месте

• Не нужно каждый раз искать, где скачать

• Экономим трафик

• Решаем проблемы шаринга платных библиотек внутри компании

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

Непрерывная интеграция (CI)

• Быстро всем видно, если сборка упала и кто в этом виноват

• Автоматическое разворачивание для альфа-тестирования

• Возможность запускать ресурсоемкие тесты

• Возможность автоматического разворачивания на стенд разработки, если он общий

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

Стандарты кодирования

• Код однообразен

• Код более удобочитаем в целом

• Код обычно более документирован (Javadocs)

• Позволяет избежать досадных ошибок (типа if без скобок)

• Позволяет исключить неоптимальные практики

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

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

Стандарты кодирования:Плагины к среде разработки

Даже если вы забыли все соглашения, плагин напомнит:

• Выделит цветом

• Предупредит перед комитом (check-in)

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

Стандарты кодирования:

Плагины к серверу CI

• Даже если у вас не включён плагин в IDE

• Continuous Integration (CI) сервер скажет вам всё, что он про вас думает :)

• Можно ввести рейтинг по комитерам:

• Количество удачных/неудачных сборок после комита

• Количество внесённых браков

• Количество исправленных браков

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

РетроспективыЦели

• Можно увидеть не очевидные проблемы

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

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

Формат

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

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

• План действий

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

РетроспективыЧто прошло хорошо/Что можно улучшить

• Проблема

• Голосов

• Что сделать?

• Кто?

• Когда?

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

Метафора системы

= +

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

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

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

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

Метафора системыПример

Page 31: Лучшие практики на практике
Page 32: Лучшие практики на практике

Метафора системыПример

Электронный кошелёк!

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

О чём не рассказал?

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

Test Driven Development (TDD)Разработка через тестирование

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

Planning Poker

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

Парное программирование

• Повышение дисциплины

• Лучший код

• Гибкий поток работы

• Высокий боевой дух

• Коллективное владение кодом

• Командный дух

• Высокое качество дизайна

• Обратная связь

• Непрерывный аудит кода

• Обучение

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

Рефакторинг

• Нужно добавить новую функцию, которая плохо укладывается в архитектуру

• Нужно исправить ошибку, причины возникновения которой сразу не ясны

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

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

YAGNI Вам это не понадобится

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

• В 49% - дорабатывается или перерабатывается

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

40-часовая рабочая неделя

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

• Падает настолько, что за 10 часов они начинают делать столько, сколько раньше делали за 6

60<40

* В сочетании с описанными практиками

*

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

Шаблоны проектирования(Design Patterns)

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

Спасибо за внимание

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

E-mail: [email protected]

Skype: Denis.Tuchin

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