Java осень 2013 лекция 5-1
Upcoming SlideShare
Loading in...5
×
 

Java осень 2013 лекция 5-1

on

  • 205 views

 

Statistics

Views

Total Views
205
Views on SlideShare
179
Embed Views
26

Actions

Likes
0
Downloads
3
Comments
0

1 Embed 26

https://tech-mail.ru 26

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Java осень 2013 лекция 5-1 Java осень 2013 лекция 5-1 Presentation Transcript

  • Углубленное программирование на Java Лекция 5 / 1 «QA и всё такое» Александр Акбашев Saturday, October 19, 13
  • О себе Образование: 2005-2011 МГТУ им. Баумана - магистр 2011- ? МГТУ им.Баумана - аспирант 2011 - 2013 Open University Skolkovo Ключевой поворот: 2011 - Mail.Ru Games (Allods Team) Senior QA Engineer, команда сервера Skyforge 2 Saturday, October 19, 13
  • Содержание лекции 1. Контроль качества разрабатываемого программного обеспечения 2. Юнит-тесты 3. Функциональные тесты 4. Нагрузочные тесты 5. Профилирование: сервера, памяти, контента 3 Saturday, October 19, 13
  • QA Не волнуйтесь, если что-то не работает. Если бы всё работало, вас бы уволили. Mosher’s Law of Soſtware Engineering Критерии качества разрабатываемого ПО Оценка качества разрабатываемого ПО Формальные проверки 4 Saturday, October 19, 13
  • Тестирование Черный ящик Белый ящик ничего не знаем знаем всё QA/тестировщики разработчики 5 Saturday, October 19, 13
  • Виды тестов Unit тесты Пишут все программисты Перед коммитом изменения проверяются самим программистом После коммита изменения проверяются системой CI Метрика - покрытие кода тестами 6 Saturday, October 19, 13
  • Виды тестов Функциональные тесты Пишутся для ключевых элементов Проверяют, что сервер запускается и аватар может убить моба программистом 7 Saturday, October 19, 13
  • Виды тестов Нагрузочное тестирование Проверяют, выдерживает ли сервер заявленное число пользователей Выявление наиболее популярных и наиболее редких багов Метрика - максимальное число пользователей в один момент времени (CCU) 8 Saturday, October 19, 13
  • UnitTest Лучше написать и выполнить неполные тесты, чем не выполнить полные. Мартин Фаулер 9 Saturday, October 19, 13
  • UnitTest Проверка отдельных модулей 10 Saturday, October 19, 13
  • UnitTest Безопасный рефакторинг 11 Saturday, October 19, 13
  • UnitTest Совместимость модулей 12 Saturday, October 19, 13
  • UnitTest Mock-объекты для тестов 13 Saturday, October 19, 13
  • UnitTest Mock-объекты для тестов 13 Saturday, October 19, 13
  • UnitTest Защита от повторения ошибок 14 Saturday, October 19, 13
  • UnitTest Test Driven Development 15 Saturday, October 19, 13
  • UnitTest Hello, world! Среда тестирования: JUnit В IDEA: Navigate -> Test public class simpleTest { @Before public void setUp() throws Exception { } @After public void tearDown() throws Exception { } } @Test public void test() { fail("Not yet implemented"); } 16 Saturday, October 19, 13
  • UnitTest Простейший Unit тест public class Math { private int a; private int b; public Math (int a, int b) { this.a = a; this.b = b; } public int getSum() { return this.a + this.b; } } public int getDiv() { return this.a % this.b; } public class simpleTest { private Math math; private int a = 3; private int b = 1; @Before public void setUp() throws Exception { math = new Math(a, b); } @Test public void testGood() { assertEqual(a+b, math.getSum()); } @Test public void testBad() { assertEqual(a/b, math.getDiv()); } 17 Saturday, October 19, 13
  • UnitTest Какие Unit тесты нужны вам? Mock Frontend Page Generator Балансировщик Message System 18 Saturday, October 19, 13
  • UnitTest Устанавливаем Mockito <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-all</artifactId> <version>1.8.4</version> </dependency> 19 Saturday, October 19, 13
  • FunctionalTest Необходимое, но недостаточное условие работоспособности. Практика 20 Saturday, October 19, 13
  • FunctionalTest Функциональное тестирование Реализует ли требуемый функционал Поднимается ли сервер? Можно ли зайти в игру? Можно ли играть? Ручное тестирование должно быть более глубоким 21 Saturday, October 19, 13
  • FunctionalTest Selenium Без единой строки кода (plugin Firefox) Много кода на Java Быстро Не так быстро Слабо контролируемо Полный контроль Несерьезно Путь джедая 22 Saturday, October 19, 13
  • FunctionalTest Установка Selenium <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>2.4.0</version> </dependency> 23 Saturday, October 19, 13
  • FunctionalTest Схема работы теста Вход на страницу Заполнение формы Отправка Win! Получение ID 24 Saturday, October 19, 13
  • FunctionalTest Реализация тестирования аутентификации public void testLogin(@NotNull String url,@NotNull String username,@NotNull String password) { WebDriver driver = new HtmlUnitDriver(true); driver.get(url); // Find the text input element by its name WebElement element = driver.findElement(By.name(“userName")); element.sendKeys(username); WebElement element = driver.findElement(By.name(“password")); element.sendKeys(password); // Now submit the form. WebDriver will find the form for us from the element element.submit(); // Wait for the page to load, timeout after 10 seconds (new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() { @Override @NotNull public Boolean apply(@NotNull WebDriver d) { final int id = d.findElement(By.name(“id”)); return id != 0; } }); driver.quit(); } 25 Saturday, October 19, 13
  • FunctionalTest Домашнее задание 3 unit теста на каждый разработанный модуль завести тест с помощью Selenium 26 Saturday, October 19, 13
  • LoadTest [robic]: привет, нужно просетапить сервер чтоб держал нагрузку [robic]: нужен mysql и apache [ad_minic]: какая нагрузка? [robic]: большая [ad_minic]: круто [ad_minic]: тогда ставь большой апач и большой мускуль на большой сервер bash.org 27 Saturday, October 19, 13
  • LoadTest Моделирование 28 Saturday, October 19, 13
  • LoadTest Ожидаемое использование 29 Saturday, October 19, 13
  • LoadTest Нескольких пользователей 30 Saturday, October 19, 13
  • LoadTest Одновременно 31 Saturday, October 19, 13
  • LoadTest Как происходит? Формируется список активностей гейммеханики Формируются параметры игрового дизайна Реализуется бот Проводится испытание Анализируются результаты 32 Saturday, October 19, 13
  • LoadTest Список активностей гейммеханики Танк должен ехать вправо/влево/вниз/вверх Танк должен стрелять Танк должен умирать 33 Saturday, October 19, 13
  • LoadTest Параметры игрового дизайна Танк должен ехать 4 секунды из 5 Танк должен стрелять раз в 5 секунд Танк должен умирать раз в 10 секунд Танк НЕ обязан делать это осознанно 34 Saturday, October 19, 13
  • LoadTest Проводится испытание Час Два 8 часов Сутки Неделю ? 35 Saturday, October 19, 13
  • LoadTest Рекомендуемые инструменты jMeter LoadBalancer Yandex-tanki 36 Saturday, October 19, 13
  • LoadTest Анализируются результаты lo Бы от ad ко ва 1. Потребление CPU, % Hi gh 2. Диск (iowait) 3. Сеть, Mb/s 4. Время отклика, ms Text 5. CCU, users 6. Load, parrots 7. Использование памяти, МБ 37 Saturday, October 19, 13
  • LoadTest CCU, users private Map<Integer, Avatar> avatars = new HashMap<>(); public final int getTotalAvatars() { return avatars.size(); } 38 Saturday, October 19, 13
  • LoadTest Server FPS Инициализация Входные данные Обработка данных Тик сервера Обновление состояния Выходные данные Освобождение ресурсов 39 Saturday, October 19, 13
  • LoadTest Load [parrots] public void run () { while(true) { msgSystem.execForAbonent(this); Thread.sleep(100); // фиксированное время ожидания потока } } private static final int TICK_TIME = 20; public void run () { while(true) { long startTime = System.currentTimeMillis(); msgSystem.execForAbonent(this); int deltaTime = System.currentTimeMillis() - startTime; float load = deltaTime / TICK_TIME; if (load < 1) // динамическое время ожидания потока Thread.sleep( TICK_TIME - deltaTime ); } } 40 Saturday, October 19, 13
  • LoadTest Многопоточность Не спать вредно Много спать тоже вредно Чем больше нагрузка на CPU, тем лучше 41 Saturday, October 19, 13
  • LoadTest Нагрузка на процессор 42 Saturday, October 19, 13
  • LoadTest Нагрузка на процессор 43 Saturday, October 19, 13
  • LoadTest Память long free = Runtime.getRuntime().freeMemory(); long max = Runtime.getRuntime().maxMemory(); 44 Saturday, October 19, 13
  • Углубленное программирование на Java Лекция 5 / 2 «Вся правда о GC» Александр Акбашев Saturday, October 19, 13
  • Garbage Collector Если бы в Java действительно работала сборка мусора, большинство программ бы удаляли сами себя при первом же запуске. Robert Sewell 46 Saturday, October 19, 13
  • Garbage Collector Garbage collector (GC) Поиск недостежимых объектов Освобождение памяти Stack Heap Типы ссылок Strong references Weak references Soſt references Phantom references 47 Saturday, October 19, 13
  • Garbage Collector Strong References Объект не удаляется 48 Saturday, October 19, 13
  • Garbage Collector Soſt References Объект удаляется...если нужна память Учитывает количество ссылок Используется для memory-sensitive cache new SoſtReference(T obj); 49 Saturday, October 19, 13
  • Garbage Collector Weak References Объект удаляется Атомарно очищает все слабые ссылки на объект Если надо, помещает объекты на финализацию Перед использовать - проверять на NULL WeakHashMap new WeakReference(T obj); 50 Saturday, October 19, 13
  • Garbage Collector Phantom References Не использовать в домашних условиях 51 Saturday, October 19, 13
  • Garbage Collector Немного о потреблении памяти 52 Saturday, October 19, 13
  • Garbage Collector HotSpot JVM  Permanent Generation Heap   New Generation Eden  Survivor Old Generation  Survivor t -XX:PermSize -XX:MaxPermSize -Xms -Xmx 53 Saturday, October 19, 13
  • Garbage Collector  Survivor Eden Copy Collection Mark-compact algorithm 54 Saturday, October 19, 13
  • Garbage Collector 55 Saturday, October 19, 13
  • Garbage Collector Что делать? Как настраивать? jvisualvm входит в JDK 56 Saturday, October 19, 13
  • Итого Домашнее задание MemoryUsage CCU Load http://www.highcharts.com/ http://www.oracle.com/ 57 Saturday, October 19, 13
  • Спасибо за внимание Акбашев Александр, a.akbashev@corp.mail.ru Saturday, October 19, 13
  • UnitTest Простейший Mock для Frontend 1. Refactor -> Extract -> Interface 2. Public methods getAddress doGet doPost run 3. @Mock 59 Saturday, October 19, 13