Спецкурс "Современные практики разработки ПО",...
DESCRIPTION
TRANSCRIPT
![Page 1: Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4](https://reader034.vdocuments.site/reader034/viewer/2022052310/54c2e61a4a795929468b469c/html5/thumbnails/1.jpg)
Внешние конфиги, сборка, автоматические тесты
Спецкурс. Занятие 4
![Page 2: Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4](https://reader034.vdocuments.site/reader034/viewer/2022052310/54c2e61a4a795929468b469c/html5/thumbnails/2.jpg)
Персистентность (время жизни) – длительность существования данных
Внешние конфиги
![Page 3: Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4](https://reader034.vdocuments.site/reader034/viewer/2022052310/54c2e61a4a795929468b469c/html5/thumbnails/3.jpg)
Виды персистентности:1. локальная – все параметры методов, локальные переменные блоков2. динамическая – все, что создано при помощи new, живет до сборки мусора либо до delete
Внешние конфиги
![Page 4: Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4](https://reader034.vdocuments.site/reader034/viewer/2022052310/54c2e61a4a795929468b469c/html5/thumbnails/4.jpg)
Виды персистентности:3. глобальная – все статические поля классов и глобальные переменные4. дисковая – все, что сохранено в файлы на диске – в БД или просто в файловой системе
Внешние конфиги
![Page 5: Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4](https://reader034.vdocuments.site/reader034/viewer/2022052310/54c2e61a4a795929468b469c/html5/thumbnails/5.jpg)
Время связывания переменных:1. при написании кода – использование «магических чисел»2. при компиляции – использование именованных констант
Внешние конфиги
![Page 6: Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4](https://reader034.vdocuments.site/reader034/viewer/2022052310/54c2e61a4a795929468b469c/html5/thumbnails/6.jpg)
Время связывания переменных:3. при загрузке программы – чтение значения из внешнего источника (конфиг-файл)4. при создании объекта – любой способ, но в момент создания объекта
Внешние конфиги
![Page 7: Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4](https://reader034.vdocuments.site/reader034/viewer/2022052310/54c2e61a4a795929468b469c/html5/thumbnails/7.jpg)
Время связывания переменных:5. по требованию – в любой момент работы программы
Внешние конфиги
![Page 8: Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4](https://reader034.vdocuments.site/reader034/viewer/2022052310/54c2e61a4a795929468b469c/html5/thumbnails/8.jpg)
Важно:чем раньше время связывания, тем ниже гибкость и ниже сложность кода.Обеспечивайте уровень гибкости, удовлетворяющий требованиям, но не больше!
Внешние конфиги
![Page 9: Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4](https://reader034.vdocuments.site/reader034/viewer/2022052310/54c2e61a4a795929468b469c/html5/thumbnails/9.jpg)
Внешние конфиги в Java:1. файлы .properties2. файлы XML3. бинарные файлы (не для людей)
Внешние конфиги
![Page 10: Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4](https://reader034.vdocuments.site/reader034/viewer/2022052310/54c2e61a4a795929468b469c/html5/thumbnails/10.jpg)
Файлы .properties:1. пары <ключ>=<значение>2. # - однострочный комментарий
Пример:tabSize = 4useSpaces = true
Внешние конфиги
![Page 11: Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4](https://reader034.vdocuments.site/reader034/viewer/2022052310/54c2e61a4a795929468b469c/html5/thumbnails/11.jpg)
Файлы 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>
Внешние конфиги
![Page 12: Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4](https://reader034.vdocuments.site/reader034/viewer/2022052310/54c2e61a4a795929468b469c/html5/thumbnails/12.jpg)
Цели создания внешних конфигов:1. увеличить гибкость2. избежать перекомпиляции3. настроить под систему4. перенести настройки в другую систему
Внешние конфиги
![Page 13: Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4](https://reader034.vdocuments.site/reader034/viewer/2022052310/54c2e61a4a795929468b469c/html5/thumbnails/13.jpg)
Сборка проекта – получение из исходного кода и ресурсов (конфиг-файлов, картинок, стилей и т.д.) исполняемого модуля
Сборка проекта
![Page 14: Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4](https://reader034.vdocuments.site/reader034/viewer/2022052310/54c2e61a4a795929468b469c/html5/thumbnails/14.jpg)
Примеры сборки:1. создание файла .exe при помощи утилиты make из файлов .cpp, .h, .rc и т.д.2. создание .class или .jar файлов при помощи javac – только для десктопных приложений
Сборка проекта
![Page 15: Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4](https://reader034.vdocuments.site/reader034/viewer/2022052310/54c2e61a4a795929468b469c/html5/thumbnails/15.jpg)
Сборка Java-программ:1. Apache Ant – низкоуровневый сборщик, все файлы внутри проекта, может многое, стиль императивный2. Apache Maven – использует внешние репозитории кода, стиль декларативный, поддерживает версионность библиотек, чувствителен к соглашениям
Сборка проекта
![Page 16: Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4](https://reader034.vdocuments.site/reader034/viewer/2022052310/54c2e61a4a795929468b469c/html5/thumbnails/16.jpg)
Apache Ant:1. в корне проекта build.xml2. может использовать .properties файлы3. пример4. сайт
Сборка проекта
![Page 17: Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4](https://reader034.vdocuments.site/reader034/viewer/2022052310/54c2e61a4a795929468b469c/html5/thumbnails/17.jpg)
Apache Maven:1. в корне проекта pom.xml2. построен на плагинах (plug-in)3. пример4. сайт
Сборка проекта
![Page 18: Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4](https://reader034.vdocuments.site/reader034/viewer/2022052310/54c2e61a4a795929468b469c/html5/thumbnails/18.jpg)
Регрессионное тестирование – любой вид тестирования, позволяющий обнаружить ошибки в уже протестированном коде
Автотесты
![Page 19: Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4](https://reader034.vdocuments.site/reader034/viewer/2022052310/54c2e61a4a795929468b469c/html5/thumbnails/19.jpg)
Модульное тестирование – автоматизированная проверка функций (методов) изолированно от остального кода
Автотесты
![Page 20: Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4](https://reader034.vdocuments.site/reader034/viewer/2022052310/54c2e61a4a795929468b469c/html5/thumbnails/20.jpg)
Модульный тест – любой код, который вызывает функцию (метод), передавая ей входные параметры, и проверяет постусловие и инвариант
Автотесты
![Page 21: Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4](https://reader034.vdocuments.site/reader034/viewer/2022052310/54c2e61a4a795929468b469c/html5/thumbnails/21.jpg)
Основные принципы:1. независимость – глобальные объекты в одном состоянии до и после теста2. быстрота выполнения – иначе не будут часто запускать
Автотесты
![Page 22: Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4](https://reader034.vdocuments.site/reader034/viewer/2022052310/54c2e61a4a795929468b469c/html5/thumbnails/22.jpg)
Преимущества использования:1. поощряются изменения и рефакторинг2. используются интерфейсы3. сокращается время на ручное регрессионное тестирование
Автотесты
![Page 23: Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4](https://reader034.vdocuments.site/reader034/viewer/2022052310/54c2e61a4a795929468b469c/html5/thumbnails/23.jpg)
Инструментарий:1. библиотека xUnit от Кента Бека (JUnit для Java) 2. прогон тестов в IDE3. команды в Ant и настройки в Maven4. Continuous integration сервера (позже)
Автотесты
![Page 24: Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4](https://reader034.vdocuments.site/reader034/viewer/2022052310/54c2e61a4a795929468b469c/html5/thumbnails/24.jpg)
Test driven development (разработка через тестирование):написание теста предшествует реализации, реализация постепенно совершенствуется, чтобы проходить новые тесты
Автотесты