Слайд 1Трудности при разработке сложных распределённых систем на Java.
Способы решения проблем.
Слайд 2Вводная часть
Цель выступления
Нет цели научить и рассказать как делать проекты.
Нет цели
научить разрабатывать проект «from scratch».
Основная цель выступления - Познакомить аудиторию с реальным опытом разработки большого JAVA приложения.
Познакомить с применяемыми принципами анализа требований
Рассказать подходе к управлению требованиями
Использование системы хранения версий.
Познакомить с реальной жизнью в проектах. Рассказать о своём опыте.
Термины. Определения
«Большая система».
Подсистема.
Слайд 3Часть 1. Проработка архитектуры. Обеспечение дальнейшего развития.
Слайд 4Часть 1. Проработка архитектуры (1)
Архитектура приложения определяет:
Функции, которые будет выполнять приложение
в целом
Компоненты из которых будет состоять приложение
Функции которые будут выполнять компоненты
Как компоненты будут взаимодействовать между собой
Правильный анализ – залог будущего вашего проекта
Слайд 5Часть 1. Проработка архитектуры (2)
Основные составляющие архитектуры:
Authentication/Authorization (User, Password, Roles)
Управление конфигурацией
приложения – глобальные и локальные переменные, настройки
Deployment strategy (including tools)
Функции которые будут выполнять компоненты
Как компоненты будут взаимодействовать между собой
Доступ к данным – DataBase, в файлах, внешние системы
Схема работы с исключительными ситуациями.
Принципы логирования
Взаимодействие с пользователем, определение общего подхода
Data validation
Слайд 6Часть 1. Проработка архитектуры (3)
Разделение общего целого на блоки.
First application Second application
Не скатываться к - «Целое состоит из частей»
1. Общий код переносится из одной
части системы в другую
2. Группировка сущностей в пакет
3. Выделение общего функционала в отдельные пакеты
Пакет как отдельная подсистема-проект.
Слайд 7Часть 1. Проработка архитектуры (4)
Влияние факторов на процесс разработки.
Одно принятое решение = один фактор влияния
Technical debt
Business pressure
Lack of process or understanding
Lack of building loosely components
Lack of design/project documentation
Feature parallel development
Delayed refactoring.
Laziness of project staff.
Слайд 8Часть 1. Проработка архитектуры (5)
Предвидение будущего. Масштабирование нагрузки.
Первый этап оптимизация
Основные шаги
оптимизации
Запросы к DB. Скорость получения результата.
Необходимость изменения структуры DB
Анализ алгоритмов обработки данных
Оптимизация –, есть ли необходимость оптимизировать структуру DB, алгоритмы обработки данных (оптимальная работа алгоритмов)
Масштабирование
Вертикальное – увеличение ресурсов в рамках одного узла.
Горизонтальное – добавление новых узлов.
Закон Амдала
В случае, когда задача разделяется на несколько частей,
суммарное время её выполнения на параллельной системе не
может быть меньше времени выполнения самого длинного фрагмента
Слайд 9Часть 1. Проработка архитектуры (6)
Слайд 10Часть 2. Декомпозиция на отдельные независимые подсистемы.
Слайд 11Часть 2. Декомпозиция (1)
Декомпозиция
1. Как часть аналитического метода
2. Как часть работ
по планированию
3. Разделение
одной большой задачи
на группу мелких задач
Слайд 12Часть 2. Декомпозиция (2)
Разработка в два основных этапа:
Разработка базовой функциональности
Разработка отдельных
подсистем, как самостоятельных проектов.
Слайд 13Часть 3. Процесс разработки распределённой системы.
Слайд 14Часть 3. Процесс разработки (1).
Разработка проекта несколькими независимыми группами разработчиков
Слайд 15Часть 3. Процесс разработки (2).
Процесс отчётности
Последствия неверно составленного отчёта
Трата времени на
выяснение действительного статуса работ.
Несвоевременное принятие решений по проекту. Потеря времени может оказать негативное влияние на проект в целом.
Способы решения
Формулировка в отчёте по задаче должна отвечать на вопрос - Что сделал? Какой результат?
Детальное описание результата.
Единое время посылки отчётов для всех инженеров.
Слайд 16Часть 4. Поддержка процесса разработки с помощью AccuRev.
Слайд 17Часть 4. Процесс разработки. AccuRev (1)
Дано:
Команда разработчиков, тестировщиков, аналитиков, архитекторов…. Более
100 человек.
Исходный код, который содержит несколько миллионов строк.
Почему AccuRev
Необходимость обеспечить сложную разветвлённую структуру версий разрабатываемого продукта
Регламентированные роли доступа – инженеры различных категорий, лидеры групп, QA инженеры, релиз инженеры.
Обеспечение различных уровней доступа к коду для разных категорий специалистов.
Особенности работы
Нет привычных терминов tag, branch, trunk.
Оригинальная терминология. Каждый новый сотрудник должен пройти небольшой вводный курс.
Слайд 18Часть 4. Процесс разработки. AccuRev (2)
Терминология:
Stream
Слайд 19Часть 4. Процесс разработки. AccuRev (3)
Picture source: http://www.accurev.com/scm-features.html
Слайд 20Часть 4. Процесс разработки. AccuRev (4)
Терминология:
Snapshot
Слайд 21Часть 4. Процесс разработки. AccuRev (5)
Терминология:
Promote
Слайд 22Часть 4. Процесс разработки. AccuRev (6)
Picture source: http://www.accurev.com/scm-features.html
Слайд 23Часть 4. Процесс разработки. AccuRev (7)
Picture source: http://www.accurev.com/scm-features.html
Слайд 24Часть 4. Процесс разработки. AccuRev (8)
Picture source: http://www.accurev.com/scm-features.html
Слайд 25Часть 4. Процесс разработки. AccuRev (9)
Слайд 26Часть 5. Как работать с большим объёмом требований. Contour.
Управление требованиями
в проекте с помощью Contour
Слайд 27Часть 5. Требования. Contour (1)
Что такое изменение требований?
CR (Change Request)
New Feature
Цели
Добавить новый функционал
Добавить новую возможность
Изменить существующий бизнес процесс.
Внести изменения в
Слайд 28Часть 5. Требования. Contour (2)
Инициаторы изменений
Представители заказчика разного уровня– аналитики, участники
различных бизнес процессов.
Бизнес аналитик со стороны исполнителя проекта
Архитекторы
Представители отдела R&D (Research and Development)
Формулировка требования с точки зрения аналитика.
Пример:
Система должна логировать действия пользователя при изменениях в реестре товаров.
Слайд 29Часть 5. Требования. Contour (3)
Формулировка требования с точки зрения архитектора системы.
Все
операции изменения реестра должны содержать атрибут «Исполнитель»
Добавить журнал изменений. Просмотр журнала изменений.
Формулировка задачи для разработчиков
Задача 123 – разработать Журнал изменений
Добавить атрибуты ID пользователя (Long userId;) и текст изменения (String changeMessage;)
При внесении изменения в реестр создавать запись в журнале изменений.
Формулировка задачи для тестировщиков. Тестовый сценарий.
Войти в систему под тестовым пользователем, который имеет право на изменение в реестре товаров.
Произвести изменение в реестре.
Убедиться, что изменение отражено в журнале изменений.
Работа началась……..
Слайд 30Часть 5. Требования. Contour (4)
STOP
Заказчик снова меняет требования после начала работ.
Производить запись в журнал изменения, которые касаются только добавления новых позиций в реестр.
Сложности и возможные ошибки:
Внести изменения во все связанные документы. Высока вероятность того, что необходимые изменения будут внесены не во все связанные документы.
Проинформировать всех заинтересованных лиц. Высока вероятность того, что не все будут проинформированы о произошедших изменениях.
Как следствие – потеря времени на установление истины.
Слайд 31Часть 5. Требования. Contour (5)
Единый репозиторий требований Countour.
Взаимные связи.
Поддержка хранения версий
документов.
Синхронизация.
Преимущества использование Contour
Все требования и изменения к ним публикуются в Contour.
Уникальные идентификаторы для каждого документа. Поддержка связей между документами.
Всем участникам проекта доступна одинаковые версии документов. Описание требований, тест планы.
Просмотр истории изменений.
Уведомление. Каждый разработчик и тестировщик, которые работают над разработкой конкретной feature получает уведомление о внесённых изменениях.
Слайд 32Часть 5. Требования. Contour (6)
Picture source: http://www.jamasoftware.com/contour/screenshots.php
Слайд 33Часть 5. Требования. Contour (7)
Picture source: http://www.jamasoftware.com/contour/screenshots.php
Слайд 34Часть 5. Требования. Contour (8)
Пример.
FEATURE_000123 123 – номер feature
FR-123-000001 –
Функциональное требование
Слайд 35Часть 5. Требования. Contour (9)
Picture source: http://www.jamasoftware.com/contour/screenshots.php
Слайд 36Часть 6. Тестирование финального продукта в облаке.
Слайд 37Часть 6. Тестирование. Облако (1)
Часто встречающаяся проблема
Большая система требует много аппаратных
ресурсов для промежуточного и финального тестирования.
Обеспечение каждого сотрудника проекта
необходимыми аппаратными средствами
может привести к значительному
перерасходу бюджета проекта.
Слайд 38Часть 6. Тестирование. Облако (2)
Пример решение проблемы
Серверы
Группы разработчиков
QA инженеры
Слайд 39Часть 7. Поддержка и дальнейшая модернизация проекта. Bug fixing and new
features.
Слайд 40Часть 7. Bug fixing and new features (1)
Непрерывный bug fixing
Работа двух
команд из разных часовых поясов
Нижний Новгород
США
Transfer meeting
Email transfer
Слайд 41Useful Links.
http://www.accurev.com
http://www.jamasoftware.com/contour
http://home.wlu.edu/~whaleyt/classes/parallel/topics/amdahl.html
http://en.wikipedia.org/wiki/Amdahl's_law
http://cc2e.com/
Слайд 43Contacts
Thank You and
We Look Forward to Working with You