Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
Спецкурс. Занятие 4

Внешние конфиги, сборка,
автоматические тесты
Внешние конфиги

Персистентность (время
жизни) – длительность
существования данных
Внешние конфиги

Виды персистентности:
1. локальная – все параметры
методов, локальные переменные
блоков
2. динамическая – все, что
создано при помощи new, живет
до сборки мусора либо до delete
Внешние конфиги

Виды персистентности:
3. глобальная – все статические
поля классов и глобальные
переменные
4. дисковая – все, что сохранено в
файлы на диске – в БД или просто
в файловой системе
Внешние конфиги

Время связывания переменных:
1. при написании кода –
использование «магических
чисел»
2. при компиляции –
использование именованных
констант
Внешние конфиги

Время связывания переменных:
3. при загрузке программы –
чтение значения из внешнего
источника (конфиг-файл)
4. при создании объекта – любой
способ, но в момент создания
объекта
Внешние конфиги

Время связывания переменных:
5. по требованию – в любой
момент работы программы
Внешние конфиги

Важно:
чем раньше время связывания,
тем ниже гибкость и ниже
сложность кода.
Обеспечивайте уровень гибкости,
удовлетворяющий требованиям,
но не больше!
Внешние конфиги

Внешние конфиги в Java:
1. файлы .properties
2. файлы XML
3. бинарные файлы (не для
людей)
Внешние конфиги

Файлы .properties:
1. пары <ключ>=<значение>
2. # - однострочный комментарий
Пример:
tabSize = 4
useSpaces = true
Внешние конфиги

Файлы XML:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd”>
<log4j:configuration xmlns:log4j=http://jakarta.apache.org/log4j/>
<appender name="console" class="org.apache.log4j.ConsoleAppender”>
<param name="Target" value="System.out"/>
<layout class="org.apache.log4j.PatternLayout”>
<param name="ConversionPattern" value="aa %p %c: %m%n"/>
</layout>
</appender>
<!--Корневой logger-->
<root>
<priority value ="debug" />
<appender-ref ref="console" />
</root>
Внешние конфиги

Цели создания внешних конфигов:
1. увеличить гибкость
2. избежать перекомпиляции
3. настроить под систему
4. перенести настройки в другую
систему
Сборка проекта

Сборка проекта – получение
из исходного кода и ресурсов
(конфиг-файлов, картинок,
стилей и т.д.) исполняемого
модуля
Сборка проекта

Примеры сборки:
1. создание файла .exe при
помощи утилиты make из файлов
.cpp, .h, .rc и т.д.
2. создание .class или .jar файлов
при помощи javac – только для
десктопных приложений
Сборка проекта

Сборка Java-программ:
1. Apache Ant – низкоуровневый
сборщик, все файлы внутри проекта,
может многое, стиль императивный
2. Apache Maven – использует
внешние репозитории кода, стиль
декларативный, поддерживает
версионность библиотек,
чувствителен к соглашениям
Сборка проекта

Apache Ant:
1. в корне проекта build.xml
2. может использовать .properties
файлы
3. пример
4. сайт
Сборка проекта

Apache Maven:
1. в корне проекта pom.xml
2. построен на плагинах (plug-in)
3. пример
4. сайт
Автотесты

Регрессионное тестирование
– любой вид тестирования,
позволяющий обнаружить
ошибки в уже
протестированном коде
Автотесты

Модульное тестирование –
автоматизированная проверка
функций (методов)
изолированно от остального
кода
Автотесты

Модульный тест – любой код,
который вызывает функцию
(метод), передавая ей входные
параметры, и проверяет
постусловие и инвариант
Автотесты

Основные принципы:
1. независимость – глобальные
объекты в одном состоянии до и
после теста
2. быстрота выполнения – иначе
не будут часто запускать
Автотесты

Преимущества использования:
1. поощряются изменения и
рефакторинг
2. используются интерфейсы
3. сокращается время на ручное
регрессионное тестирование
Автотесты

Инструментарий:
1. библиотека xUnit от Кента Бека
(JUnit для Java)
2. прогон тестов в IDE
3. команды в Ant и настройки в
Maven
4. Continuous integration сервера
(позже)
Автотесты

Test driven development
(разработка через
тестирование):
написание теста предшествует
реализации, реализация
постепенно совершенствуется,
чтобы проходить новые тесты

More Related Content

Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4