Трудности при разработке сложных распределённых...

43
Трудности при разработке сложных распределённых систем на Java. Способы решения проблем.

Upload: sarah-mason

Post on 02-Jan-2016

59 views

Category:

Documents


3 download

DESCRIPTION

Трудности при разработке сложных распределённых систем на Java. Способы решения проблем. Вводная часть. Цель выступления Нет цели научить и рассказать как делать проекты. Нет цели научить разрабатывать проект « from scratch » . - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Трудности при разработке сложных распределённых систем на  Java

Трудности при разработке сложных распределённых систем на Java. Способы решения проблем.

Page 2: Трудности при разработке сложных распределённых систем на  Java

2

Вводная часть

Цель выступления1. Нет цели научить и рассказать как делать проекты.

2. Нет цели научить разрабатывать проект «from scratch».

Основная цель выступления - Познакомить аудиторию с реальным опытом разработки большого JAVA приложения.

1. Познакомить с применяемыми принципами анализа требований

2. Рассказать подходе к управлению требованиями

3. Использование системы хранения версий.

Познакомить с реальной жизнью в проектах. Рассказать о своём опыте.

Термины. Определения1. «Большая система».

2. Подсистема.

Page 3: Трудности при разработке сложных распределённых систем на  Java

Часть 1. Проработка архитектуры. Обеспечение дальнейшего развития.

Page 4: Трудности при разработке сложных распределённых систем на  Java

4

Часть 1. Проработка архитектуры (1)

Архитектура приложения определяет:

1. Функции, которые будет выполнять приложение в целом

2. Компоненты из которых будет состоять приложение

3. Функции которые будут выполнять компоненты

4. Как компоненты будут взаимодействовать между собой

Правильный анализ – залог будущего вашего проекта

Page 5: Трудности при разработке сложных распределённых систем на  Java

5

Часть 1. Проработка архитектуры (2)

Основные составляющие архитектуры:

1. Authentication/Authorization (User, Password, Roles)

2. Управление конфигурацией приложения – глобальные и локальные переменные, настройки

3. Deployment strategy (including tools)

4. Функции которые будут выполнять компоненты

5. Как компоненты будут взаимодействовать между собой

6. Доступ к данным – DataBase, в файлах, внешние системы

7. Схема работы с исключительными ситуациями.

8. Принципы логирования

9. Взаимодействие с пользователем, определение общего подхода

10. Data validation

Page 6: Трудности при разработке сложных распределённых систем на  Java

6

Часть 1. Проработка архитектуры (3)

Разделение общего целого на блоки. First application Second application

Не скатываться к - «Целое состоит из частей»

1. Общий код переносится из одной

части системы в другую

2. Группировка сущностей в пакет

3. Выделение общего функционала в отдельные пакеты

Пакет как отдельная подсистема-проект.

Page 7: Трудности при разработке сложных распределённых систем на  Java

7

Часть 1. Проработка архитектуры (4)

Влияние факторов на процесс разработки.

Одно принятое решение = один фактор влияния

Technical debt1. Business pressure

2. Lack of process or understanding

3. Lack of building loosely components

4. Lack of design/project documentation

5. Feature parallel development

6. Delayed refactoring.

7. Laziness of project staff.

Page 8: Трудности при разработке сложных распределённых систем на  Java

8

Часть 1. Проработка архитектуры (5)

Предвидение будущего. Масштабирование нагрузки.Первый этап оптимизация

Основные шаги оптимизации

1. Запросы к DB. Скорость получения результата.

2. Необходимость изменения структуры DB

3. Анализ алгоритмов обработки данных

4. Оптимизация –, есть ли необходимость оптимизировать структуру DB, алгоритмы обработки данных (оптимальная работа алгоритмов)

Масштабирование

5. Вертикальное – увеличение ресурсов в рамках одного узла.

6. Горизонтальное – добавление новых узлов.

Закон Амдала

В случае, когда задача разделяется на несколько частей,

суммарное время её выполнения на параллельной системе не

может быть меньше времени выполнения самого длинного фрагмента

Page 9: Трудности при разработке сложных распределённых систем на  Java

9

Часть 1. Проработка архитектуры (6)

Page 10: Трудности при разработке сложных распределённых систем на  Java

Часть 2. Декомпозиция на отдельные независимые подсистемы.

Page 11: Трудности при разработке сложных распределённых систем на  Java

11

Часть 2. Декомпозиция (1)

Декомпозиция1. Как часть аналитического метода

2. Как часть работ по планированию

3. Разделение

одной большой задачи

на группу мелких задач

Page 12: Трудности при разработке сложных распределённых систем на  Java

12

Часть 2. Декомпозиция (2)

Разработка в два основных этапа:1. Разработка базовой функциональности

2. Разработка отдельных подсистем, как самостоятельных проектов.

Page 13: Трудности при разработке сложных распределённых систем на  Java

Часть 3. Процесс разработки распределённой системы.

Page 14: Трудности при разработке сложных распределённых систем на  Java

14

Часть 3. Процесс разработки (1).

Разработка проекта несколькими независимыми группами разработчиков

Page 15: Трудности при разработке сложных распределённых систем на  Java

15

Часть 3. Процесс разработки (2).

Процесс отчётностиПоследствия неверно составленного отчёта

1. Трата времени на выяснение действительного статуса работ.

2. Несвоевременное принятие решений по проекту. Потеря времени может оказать негативное влияние на проект в целом.

Способы решения

3. Формулировка в отчёте по задаче должна отвечать на вопрос - Что сделал? Какой результат?

4. Детальное описание результата.

5. Единое время посылки отчётов для всех инженеров.

Page 16: Трудности при разработке сложных распределённых систем на  Java

Часть 4. Поддержка процесса разработки с помощью AccuRev.

Page 17: Трудности при разработке сложных распределённых систем на  Java

17

Часть 4. Процесс разработки. AccuRev (1)

Дано:1. Команда разработчиков, тестировщиков, аналитиков, архитекторов…. Более 100 человек.

2. Исходный код, который содержит несколько миллионов строк.

Почему AccuRev3. Необходимость обеспечить сложную разветвлённую структуру версий разрабатываемого продукта

4. Регламентированные роли доступа – инженеры различных категорий, лидеры групп, QA инженеры, релиз инженеры.

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

Особенности работы6. Нет привычных терминов tag, branch, trunk.

7. Оригинальная терминология. Каждый новый сотрудник должен пройти небольшой вводный курс.

Page 18: Трудности при разработке сложных распределённых систем на  Java

18

Часть 4. Процесс разработки. AccuRev (2)

Терминология:

Stream

Page 19: Трудности при разработке сложных распределённых систем на  Java

19

Часть 4. Процесс разработки. AccuRev (3)

Picture source: http://www.accurev.com/scm-features.html

Page 20: Трудности при разработке сложных распределённых систем на  Java

20

Часть 4. Процесс разработки. AccuRev (4)

Терминология:

Snapshot

Page 21: Трудности при разработке сложных распределённых систем на  Java

21

Часть 4. Процесс разработки. AccuRev (5)

Терминология:

Promote

Page 22: Трудности при разработке сложных распределённых систем на  Java

22

Часть 4. Процесс разработки. AccuRev (6)

Picture source: http://www.accurev.com/scm-features.html

Page 23: Трудности при разработке сложных распределённых систем на  Java

23

Часть 4. Процесс разработки. AccuRev (7)

Picture source: http://www.accurev.com/scm-features.html

Page 24: Трудности при разработке сложных распределённых систем на  Java

24

Часть 4. Процесс разработки. AccuRev (8)

Picture source: http://www.accurev.com/scm-features.html

Page 25: Трудности при разработке сложных распределённых систем на  Java

25

Часть 4. Процесс разработки. AccuRev (9)

Page 26: Трудности при разработке сложных распределённых систем на  Java

Часть 5. Как работать с большим объёмом требований. Contour. Управление требованиями в проекте с помощью Contour

Page 27: Трудности при разработке сложных распределённых систем на  Java

27

Часть 5. Требования. Contour (1)

Что такое изменение требований?- CR (Change Request)

- New Feature

Цели- Добавить новый функционал

- Добавить новую возможность

- Изменить существующий бизнес процесс.

- Внести изменения в

Page 28: Трудности при разработке сложных распределённых систем на  Java

28

Часть 5. Требования. Contour (2)

Инициаторы изменений Представители заказчика разного уровня– аналитики, участники различных бизнес процессов.

Бизнес аналитик со стороны исполнителя проекта

Архитекторы

Представители отдела R&D (Research and Development)

Формулировка требования с точки зрения аналитика.Пример:

Система должна логировать действия пользователя при изменениях в реестре товаров.

Page 29: Трудности при разработке сложных распределённых систем на  Java

29

Часть 5. Требования. Contour (3)

Формулировка требования с точки зрения архитектора системы.1. Все операции изменения реестра должны содержать атрибут «Исполнитель»

2. Добавить журнал изменений. Просмотр журнала изменений.

Формулировка задачи для разработчиков3. Задача 123 – разработать Журнал изменений

4. Добавить атрибуты ID пользователя (Long userId;) и текст изменения (String changeMessage;)

5. При внесении изменения в реестр создавать запись в журнале изменений.

Формулировка задачи для тестировщиков. Тестовый сценарий.6. Войти в систему под тестовым пользователем, который имеет право на изменение в реестре товаров.

7. Произвести изменение в реестре.

8. Убедиться, что изменение отражено в журнале изменений.

Работа началась……..

Page 30: Трудности при разработке сложных распределённых систем на  Java

30

Часть 5. Требования. Contour (4)

STOP

Заказчик снова меняет требования после начала работ.1. Производить запись в журнал изменения, которые касаются только добавления новых позиций в

реестр.

Сложности и возможные ошибки:2. Внести изменения во все связанные документы. Высока вероятность того, что необходимые изменения

будут внесены не во все связанные документы.

3. Проинформировать всех заинтересованных лиц. Высока вероятность того, что не все будут проинформированы о произошедших изменениях.

Как следствие – потеря времени на установление истины.

Page 31: Трудности при разработке сложных распределённых систем на  Java

31

Часть 5. Требования. Contour (5)

Единый репозиторий требований Countour.1. Взаимные связи.

2. Поддержка хранения версий документов.

3. Синхронизация.

Преимущества использование Contour4. Все требования и изменения к ним публикуются в Contour.

5. Уникальные идентификаторы для каждого документа. Поддержка связей между документами.

6. Всем участникам проекта доступна одинаковые версии документов. Описание требований, тест планы.

7. Просмотр истории изменений.

8. Уведомление. Каждый разработчик и тестировщик, которые работают над разработкой конкретной feature получает уведомление о внесённых изменениях.

Page 32: Трудности при разработке сложных распределённых систем на  Java

32

Часть 5. Требования. Contour (6)

Picture source: http://www.jamasoftware.com/contour/screenshots.php

Page 33: Трудности при разработке сложных распределённых систем на  Java

33

Часть 5. Требования. Contour (7)

Picture source: http://www.jamasoftware.com/contour/screenshots.php

Page 34: Трудности при разработке сложных распределённых систем на  Java

34

Часть 5. Требования. Contour (8)

Пример.

FEATURE_000123 123 – номер feature

FR-123-000001 – Функциональное требование

Page 35: Трудности при разработке сложных распределённых систем на  Java

35

Часть 5. Требования. Contour (9)

Picture source: http://www.jamasoftware.com/contour/screenshots.php

Page 36: Трудности при разработке сложных распределённых систем на  Java

Часть 6. Тестирование финального продукта в облаке.

Page 37: Трудности при разработке сложных распределённых систем на  Java

37

Часть 6. Тестирование. Облако (1)

Часто встречающаяся проблемаБольшая система требует много аппаратных ресурсов для промежуточного и финального тестирования.

Обеспечение каждого сотрудника проекта

необходимыми аппаратными средствами

может привести к значительному

перерасходу бюджета проекта.

Page 38: Трудности при разработке сложных распределённых систем на  Java

38

Часть 6. Тестирование. Облако (2)

Пример решение проблемы

Серверы

Группы разработчиков

QA инженеры

Page 39: Трудности при разработке сложных распределённых систем на  Java

Часть 7. Поддержка и дальнейшая модернизация проекта. Bug fixing and new features.

Page 40: Трудности при разработке сложных распределённых систем на  Java

40

Часть 7. Bug fixing and new features (1)

Непрерывный bug fixing

Работа двух команд из разных часовых поясов

Нижний Новгород

США

Transfer meeting

Email transfer

Page 41: Трудности при разработке сложных распределённых систем на  Java

41

Useful 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/

Page 42: Трудности при разработке сложных распределённых систем на  Java

42

Questions Time.

Page 43: Трудности при разработке сложных распределённых систем на  Java

43

Contacts

Thank You and

We Look Forward to Working with You

Auriga, USA 92 Potter Rd, Ste 1Wilton, NH 03086, USAPhone: +1 (866) 645-1119Fax: +1 (603) [email protected] www.auriga.com

Auriga, Russia125 Varshavskoe Shosse, Unit 16A

Moscow, 117587Tel:+7 (495) 713-9900 Fax:+7 (495) 939-0300

[email protected] www.auriga.com