Saint Petersburg, 2012 Java Lecture #9 Java tools.

Презентация:



Advertisements
Похожие презентации
Git fast version control system Автор:Новопашин Антон
Advertisements

Введение в непрерывную интеграцию Руденко Виктория Сообщество Тестировщиков Днепропетровска 26/05/2011 Ardas Group.
LOGO Управление версиями ПО Работу выполнил Студент группы Брюсов Роман.
Технические возможности. Наши цели Максимальная гибкость Максимальная скорость считывания и обработки данных Стабильность работы Максимальная простота.
ПРЕЗЕНТАЦИЯ НА ТЕМУ: ПРЕЗЕНТАЦИЯ НА ТЕМУ: ВИДЫ ТРАНСЛЯЦИИ Составил: Ревнивцев М.В Преподаватель: Кленина В.И.
Continuous Integration с нуля (Jenkins+Git+Selenium)
Е-МАСТЕР ® Документооборот Программно-методический комплекс (Система управления организационной информацией) +7 (812)
Непрерывная интеграция для PHP Александр Симанович.
Continues Deployment iOS приложений с помощью Jenkins и TestFlight Сообщество мобильных разработчиков.
OpenGL и Direct3D сравнение стандартов Выполнил: Пенкин А. Группа И-204.
Распределенная обработка информации Разработано: Е.Г. Лаврушиной.
Инструментальные средства визуальной коммуникации и прикладной дизайн Лекция 3.
Практическое программирование на Java к.ф.-м.н. Козлов Дмитрий Дмитриевич Кафедра АСВК, Лаборатория Вычислительных комплексов.
Системы управления содержимым сайта Content Management Systems (CMS) Лекция 9.
W AY 4 Quality Control in Continuous Integration Konstantin Zhukov.
Проектирования и реализация WEB-приложений Платформы.
Интеграция Java и Ruby/Python Igor Artamonov | |
Особенности практической реализации процесса интеграции при разработке сложных аппаратно-программных комплексов НИЖЕГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ.
Современные frontend технологии. Оптимизация процесса разработки Валерий Крюков Ведущий разработчик, «Региональные Медиа» Партнерская конференция «1С-Битрикс»
Автоматизация тестирования. План 1.Применение автоматизированного тестирования 2.Выбор инструментария 3.Процесс автоматизации (IBM Rational) GUI тестирование.
Транксрипт:

Saint Petersburg, 2012 Java Lecture #9 Java tools

Agenda Инструменты из $JDK_HOME/bin IDE Системы контроля версий Автоматизация build-процесса Continuous Integration Контроль качества исходного кода Мониторинг и профилировка Дополнительная литература

Javac, java, javaw, javaws Javac Компилятор. Начиная с JDK 1.6 включает в себя функции утилиты apt и выполняет обработку аннотаций в соответствии с доступными процессорами аннотаций Java Запускает JVM с ассоциированной консолью, куда направляются потоки вывода и ошибок Javaw Запускает JVM без ассоциированной консоли, так в большинстве случаев запускается JVM при наличии оконного менеджера Javaws Запуск Java Web Start

Schemagen и Xjc Позволяют генерировать классы по XSD-схеме и схему по классам Сгенерированные классы содержат JAXB-маппинг, что позволяет сериализовать их в XML и обратно одной командой Применяются при разработке Web-сервисов

Keytool и jarsigner Keytool – утилита для управления локальным хранилищем X.509 сертификатов Позволяет создавать собственные пары ключей и импортировать существующие сертификаты Само локальное хранилище называется keystore, в нем лежат Пары ключей Доверенные сертификаты (публичные ключи) Jarsigner используется для подписи JAR-файлов при помощи сертификатов из keystore Сертификаты из keystore также могут использоваться для обеспечения SSL, TLS или для WS-security

Прочие утилиты native2ascii преобразует.property-файлы из юникода в ASCII-представление rmiregistry запускает брокер для публикации RMI-объектов в отдельном процессе javap декомпилятор байткода jstack Позволяет снять дамп потоков JVM jar Утилита для генерации JAR-файлов javadoc Утилита для генерации HTML-документации по javadoc-комментариям

Agenda Инструменты из $JDK_HOME/bin IDE Системы контроля версий Автоматизация build-процесса Continuous Integration Контроль качества исходного кода Мониторинг и профилировка Дополнительная литература

IDE Integrated Development Environment Пытается совместить весь необходимый инструментарий в одном приложении Часто бывает расширяемой за счет плагинов В идеале вся разработка должна вестись через одно окно – окно IDE Из-за попыток объять необъятное современные IDE потребляют очень много ресурсов Некоторые предпочитают разработку без IDE, в легковесном текстовом редакторе с подсветкой синтаксиса Популярные IDE для Java-разработки NetBeans Eclipse Intellij Idea

NetBeans IDE с открытым исходным кодом, первоначально разрабатывалась в Sun Достоинства Отличный встроенный профайлер Модульная структура, вплоть до возможности использовать модули как отдельные продукты Подробная wiki: Недостатки Огромное количество мастеров и помощников, скрывающих реально происходящие вещи Медленная работа с remote-проектами GUI-дизайнер Matisse генерирует огромное количество трудноизменяемого мусора прямо в исходный код Open source – багфиксы пишутся по желанию левой пятки сообщества

Eclipse Бесплатная IDE с открытым исходным кодом Достоинства Возможность хранения Workspace – независимой от проекта конфигурации IDE Огромная коллекция плагинов для самых разных технлогий Специализированные сборки IDE, например STS, JBoss Tools – не надо привыкать к новой IDE при переходе на них Недостатки На каждый чих надо ставить плагин Убогие средства для рефакторинга Часто не видит изменений, сделанных не в IDE Документация оставляет желать лучшего

Intellij Idea IDE от JetBrains Community-версия бесплатна, но в ней нет поддержки EE/Web-разработки Ultimate-версия стоит денег Достоинства Отличные инструменты для рефакторинга из коробки Есть сборки для других языков на том же ядре (PyCharm, RubyMine) Хорошо умеет менять структуру проекта без нарушения его целостности Действительно «умная» IDE Недостатки Введение модульной архитектуры не пошло на пользу стабильности Многие «неофициальные» плагины просто неработоспособны Документации по плагинам практически нет

Популярность IDE Процентное распределение по популярным IDE (2011 год):

Agenda Инструменты из $JDK_HOME/bin IDE Системы контроля версий Автоматизация build-процесса Continuous Integration Контроль качества исходного кода Мониторинг и профилировка Дополнительная литература

Системы контроля версий (VCS/SCM) Предназначены для командной работы над одним набором файлов исходного кода Нумеруют изменения кода, выстраивая последовательную цепочку состояний (ревизий) Хранят историю изменений по файлам и папкам Позволяют разработчикам эффективно обмениваться изменениями исходного кода Могут делать слияние конкурирующих изменений Большинство алгоритмов слияния плохо обрабатывает бинарные файлы Могут выполнять откат изменений до указанной ревизии Как правило позволяют работать с несколькими ветвями разработки и переключаться между ними

Системы контроля версий: глоссарий Branch. Направление разработки, независимое от других. Ветвь представляет собой копию части хранилища, в которую можно вносить свои изменения, не влияющие на другие ветви. Документы в разных ветвях имеют одинаковую историю до ветвления и разные после. Сheck-in, commit. Создание новой версии, фиксация изменений. Распространение изменений, сделанных в рабочей копии, на хранилище документов. Сheck-out, clone. Извлечение документа из хранилища и создание рабочей копии. Conflict. Конфликт ситуация, когда несколько пользователей сделали изменения одного и того же участка документа. Head. Основная версия самая свежая версия для ветви/ствола, находящаяся в хранилище. Сколько ветвей, столько основных версий. Merge, integration. Слияние объединение независимых изменений в единую версию документа. Осуществляется, когда два человека изменили один и тот же файл или при переносе изменений из одной ветки в другую. Repository. Хранилище документов место, где система управления версиями хранит все документы вместе с историей их изменения и другой служебной информацией. Revision. Версия документа. Системы управления версиями различают версии по номерам или хэшам, которые назначаются автоматически.

Системы контроля версий: рабочий цикл Создание рабочей копии. Чтобы начать работать с системой контроля версий необходимо создать локальную рабочую копию общей кодовой базы. Эта операция выполняется однократно. Обновление рабочей копии. По мере внесения изменений в проект рабочая копия на компьютере разработчика стареет, расхождение её с основной версией проекта увеличивается. Чтобы поддерживать рабочую копию в состоянии, максимально близком к текущей основной версии, разработчик выполняет операцию обновления (update) рабочей копии насколько возможно часто Модификация проекта. Разработчик модифицирует проект, изменяя входящие в него файлы в рабочей копии в соответствии с проектным заданием. Эта работа производится локально и не требует обращений к серверу VCS. Фиксация изменений. Завершив очередной этап работы над заданием, разработчик фиксирует (commit) свои изменения, передавая их на сервер.

Системы контроля версий: рабочий цикл Простой пример для иллюстрации процесса в команде из двух разработчиков:

Централизованные системы контроля версий Весь обмен изменениями происходит через центральный репозиторий (сервер) Позволяют вести сквозную последовательную нумерацию ревизий Хорошо работают для проектов с жесткой вертикалью управления Примеры CVS SVN ClearCase Perforce

Распределенные системы контроля версий Позволяют делать частичную интеграцию изменений непосредственно от автора или коллег без участия центрального репозитория Центрального репозитория может вообще не быть Хорошо работают для децентрализованных по управлению либо сильно разветвленных (fork) проектов Примеры Git Mercurial Bazaar

Subversion (SVN) Централизованная система контроля версий, свободная даже для коммерческого использования Создавалась для преодоления недостатков CVS Много лет была de-facto стандартом для разработчиков Преимущества: Легко и быстро осваивается Хорошая интеграция с самым разным софтом Недостатки: Слияние веток может быть очень трудоемким Однажды добавленную в репозиторий информацию удалить оттуда уже нельзя Нет возможности ассоциировать одну рабочую копию с несколькими репозиториями

Git Распределенная система контроля версий с открытым исходным кодом Первоначально создавалась для ядра Linux Преимущества: Очень легко работать с ветками Поддержка любого количества удаленных репозиториев Впечатляющая производительность Github Недостатки: Высокий порог вхождения Слабая поддержка многомодульных проектов

Agenda Инструменты из $JDK_HOME/bin IDE Системы контроля версий Автоматизация build-процесса Continuous Integration Контроль качества исходного кода Мониторинг и профилировка Дополнительная литература

Build automation Процесс сборки и развертывания сложных Java-приложений может быть весьма нетривиален Все больше разработчиков пишут тесты и хотят выполнять их автоматически как можно чаще Что включает в себя build automation: Управление зависимостями Версионирование Компиляция и сборка Выполнение тестов и сбор метрик Генерация кода и конфигурации Деплоймент Публикация

Управление зависимостями Основные проблемы: Управление транзитивными зависимостями Присутствие всех необходимых зависимостей на разных фазах жизненного цикла SNAPSHOT-зависимости JAR Hell Хранить зависимости в системе контроля версий неудобно Под зависимостями здесь понимаются сторонние библиотеки, используемые нашим кодом

Apache Ant Инструмент автоматизации билд-процесса Очень гибкий, позволяет релизовать практически любую схему сборки приложения Не содержит собственных моделей жизненного цикла Не может управлять зависимостями сам по себе Позволяет писать сборочные скрипты в своей xml-конфигурации Как следствие build.xml часто распухает до огромных размеров Один из самых быстрых сборочных инструментов Поддерживается всеми популярными IDE Используется в NetBeans в качестве внутренней билд-системы

Apache Ant Пример билд-скрипта для ant: 26

Ivy Менеджер зависимостей для Apache Ant Описывает зависимости проекта в отдельном конфиге В качестве источника использует репозитории, в том числе Репозитории Maven Репозитории Ivy Локальные папки Может генерировать отчеты по зависимостям проекта в виде HTML или графиков зависимостей Диаграмма представляет собой жизненный цикл зависимостей с точки зрения Ivy

Ivy: пример Конфигурация в build.xml : 28 Конфигурация в ivy.xml :

Apache Maven Наиболее популярная на сегодняшний день build-система, стандарт de-facto Использует декларативную конфигурацию Предоставляет стандартную модель жизненного цикла Не предоставляет средств для скриптинга в рамках билда Великолепно управляет зависимостями Отлично интегрирован со всем, с чем можно и с чем нельзя тоже IDE Системы контроля версий CI-тулы, Sonar Часто критикуется за недостаточную гибкость

Maven: фазы жизненного цикла Validate Проверка POM-файлов на предмет валидности и непротиворечивости модели Compile Компиляция исходного кода Test Выполнение unit-тестов Package Сборка и упаковка в архивы, jar, ar, ear, etc Integration-test Выполнение интеграционных тестов Verify Проверка собранных архивов Install Загрузка артефактов в локальный репозиторий Deploy Публикация артефактов в удаленный репозиторий и деплоймент

Maven: управление зависимостями Зависимости проекта необходимо декларировать явным образом Зависеть можно как от сторонних библиотек, так и от других модулей текущего проекта Для каждой зависимости указывается как минимум groupId, artifactId и version Транзитивные зависимости подключаются по умолчанию Чтобы запретить подключенние транзитивных зависимостей используется тэг Scope показывает, на каких фазах жизненного цикла maven будет добавлять зависимость в classpath

Maven: плагины Все, что делает Maven, выполняется тем или иным плагином Стандартная модель уже включает в себя несколько плагинов Их можно конфигурировать и добавлять свои Плагины выкачиваются из репозиториев, как и зависимости Существует maven-antrun-plugin, который позволяет выполнять Ant- таски из Maven-билда Можно подключать дополнительные репозитории для плагинов Или даже писать свои плагины, если не хватает существующих

Maven: архетипы Архетип – шаблон maven-проекта под определенные технологии Они хранятся в репозиториях maven, как и все остальное Позволяет сгенерировать проект на пустом месте командой mvn archetype:generate Будет создана необходимая структура директорий, сгенерирован pom.xml Авторы фреймворков и библиотек часто публикуют архетипы к собственным технологиям в репозитории maven В центральном репозитории их уже больше 500 штук Создать проект из архетипа может и IDE

Gradle Релиз 1.0 вышел 12 июня 2012 Позиционируется как замена Maven и Ant Предоставляет стандартную модель жизненного цикла Дает возможность её кастомизировать Позволяет писать скрипты в императивном стиле Пишется на Groovy DSL, что дает гораздо более компактную и читаемую конфигурацию по сравнению с XML Последние версии IDE уже поддерживают Gradle С недавнего времени есть плагины для интеграции с Sonar, Jenkins, etc. GitHub также поддерживает Gradle Spring и Hibernate собираются при помощи Gradle

Gradle: Пример

Популярность build-систем Диаграмма отражает востребованность навыков владения описанными билд-системами на рынке труда

Agenda Инструменты из $JDK_HOME/bin IDE Системы контроля версий Автоматизация build-процесса Continuous Integration Контроль качества исходного кода Мониторинг и профилировка Дополнительная литература

Continuous Integration (CI) Для автоматизации интеграционных процессов применяются системы непрерывной интеграции (Continious Integration System, CIS) Принцип действия таких систем состоит в следующем: CIS производит мониторинг системы контроля версий При изменении исходных кодов в репозитории производится обновление локального хранилища Выполняются необходимые проверки и модульные тесты Исходные коды компилируются в готовые выполняемые модули Выполняются тесты интеграционного уровня Генерируется отчет о тестировании В случае ошибок на предыдущих фазах билд считается неуспешным и всем заинтересованным лицам рассылаются уведомления на почту Популярные CIS: Jenkins (Hudson), Atlassian Bamboo, Cruise Control

Continuous Integration (CI)

CI: полный цикл разработки

Agenda 41 Инструменты из $JDK_HOME/bin IDE Системы контроля версий Автоматизация build-процесса Continuous Integration Контроль качества исходного кода Мониторинг и профилировка Дополнительная литература

PMD PMD – статический анализатор кода для языка Java Позволяет автоматически контролировать единообразие стиля кодирования Автоматически распознает Дублирование кода Неэффективные низкоуровневые реализации Неиспользуемый код Низкоуровневые антипатерны Конфигурируется перечнем правил в XML Есть плагин для mavenа и таск для anta Интегрирован с многими IDE 42

Checkstyle Еще один статический анализатор исходного кода Делает упор на соблюдение стандартов кодирования, например Java Code Conventions Позволяет конфигурировать набор применяемых правил Отлично интегрирован с популярными IDE и build-системами При работе в IDE может подсвечивать ошибки прямо в процессе написания кода Пример визуализированного отчета о результатах проверки: 43

Sonar Модульная open-source платформа для контроля качества исходного кода Умеет снимать огромное количество метрик Визуализирует их, генерирует отчеты и представляет динамику во времени Использует PMD, Checkstyle и собственные метрики качества Анализирует покрытие модульными тестами несколькими методами Ищет дубликаты Считает совокупный «технический долг»

Sonar: Рабочий цикл 45

Agenda 46 Инструменты из $JDK_HOME/bin IDE Системы контроля версий Автоматизация build-процесса Continuous Integration Контроль качества исходного кода Мониторинг и профилировка Дополнительная литература

Profiling 47 Под профилировкой понимают сбор характеристик работающего приложения В них входит использование памяти, динамика процессоров, трассировка вызовов методов Профайлер помогает обнаружить Горячие места в коде, которые стоит оптимизировать Чем занята память и течет ли она Bottleneckи производительности Deadlockи, состояние starvation Что и когда делает GC в приложении Профайлеры подразделяются на Инструментирующие Сэмплирующие

VisualVM Инструментирующий профайлер из состава JDK, начиная с JDK 6u7 Умеет инструментировать приложение на лету, не требуя перезапуска На самом деле представляет собой кусок NetBeansa Является инструментирующим профайлером, то есть влияет на работу самого профилируемого приложения Очень простой в освоении Полностью покрывает потребности среднего разработчика в мониторинге и профилировке приложения 48

JProfiler 49 Более серьезный инструмент, лучше показывает тонкие места Поддерживает удаленную профилировку Очень платный, но есть evaluation на 10 дней

Library Apache Maven 3 Cookbook Отличное руководство для начинающих Steve Loughran, Erik Hatcher. Ant in action Paul M. Duvall, Steve Matyas, Andrew Glover. Continuous Integration: Improving Software Quality and Reducing Risk Scott Chacon. Pro Git 50