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

342 views

Published on

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
342
On SlideShare
0
From Embeds
0
Number of Embeds
49
Actions
Shares
0
Downloads
13
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

  1. 1. Углубленное программирование на Java Лекция 5 / 1 «QA и всё такое» Александр Акбашев Saturday, October 19, 13
  2. 2. О себе Образование: 2005-2011 МГТУ им. Баумана - магистр 2011- ? МГТУ им.Баумана - аспирант 2011 - 2013 Open University Skolkovo Ключевой поворот: 2011 - Mail.Ru Games (Allods Team) Senior QA Engineer, команда сервера Skyforge 2 Saturday, October 19, 13
  3. 3. Содержание лекции 1. Контроль качества разрабатываемого программного обеспечения 2. Юнит-тесты 3. Функциональные тесты 4. Нагрузочные тесты 5. Профилирование: сервера, памяти, контента 3 Saturday, October 19, 13
  4. 4. QA Не волнуйтесь, если что-то не работает. Если бы всё работало, вас бы уволили. Mosher’s Law of Soſtware Engineering Критерии качества разрабатываемого ПО Оценка качества разрабатываемого ПО Формальные проверки 4 Saturday, October 19, 13
  5. 5. Тестирование Черный ящик Белый ящик ничего не знаем знаем всё QA/тестировщики разработчики 5 Saturday, October 19, 13
  6. 6. Виды тестов Unit тесты Пишут все программисты Перед коммитом изменения проверяются самим программистом После коммита изменения проверяются системой CI Метрика - покрытие кода тестами 6 Saturday, October 19, 13
  7. 7. Виды тестов Функциональные тесты Пишутся для ключевых элементов Проверяют, что сервер запускается и аватар может убить моба программистом 7 Saturday, October 19, 13
  8. 8. Виды тестов Нагрузочное тестирование Проверяют, выдерживает ли сервер заявленное число пользователей Выявление наиболее популярных и наиболее редких багов Метрика - максимальное число пользователей в один момент времени (CCU) 8 Saturday, October 19, 13
  9. 9. UnitTest Лучше написать и выполнить неполные тесты, чем не выполнить полные. Мартин Фаулер 9 Saturday, October 19, 13
  10. 10. UnitTest Проверка отдельных модулей 10 Saturday, October 19, 13
  11. 11. UnitTest Безопасный рефакторинг 11 Saturday, October 19, 13
  12. 12. UnitTest Совместимость модулей 12 Saturday, October 19, 13
  13. 13. UnitTest Mock-объекты для тестов 13 Saturday, October 19, 13
  14. 14. UnitTest Mock-объекты для тестов 13 Saturday, October 19, 13
  15. 15. UnitTest Защита от повторения ошибок 14 Saturday, October 19, 13
  16. 16. UnitTest Test Driven Development 15 Saturday, October 19, 13
  17. 17. 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
  18. 18. 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
  19. 19. UnitTest Какие Unit тесты нужны вам? Mock Frontend Page Generator Балансировщик Message System 18 Saturday, October 19, 13
  20. 20. UnitTest Устанавливаем Mockito <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-all</artifactId> <version>1.8.4</version> </dependency> 19 Saturday, October 19, 13
  21. 21. FunctionalTest Необходимое, но недостаточное условие работоспособности. Практика 20 Saturday, October 19, 13
  22. 22. FunctionalTest Функциональное тестирование Реализует ли требуемый функционал Поднимается ли сервер? Можно ли зайти в игру? Можно ли играть? Ручное тестирование должно быть более глубоким 21 Saturday, October 19, 13
  23. 23. FunctionalTest Selenium Без единой строки кода (plugin Firefox) Много кода на Java Быстро Не так быстро Слабо контролируемо Полный контроль Несерьезно Путь джедая 22 Saturday, October 19, 13
  24. 24. FunctionalTest Установка Selenium <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>2.4.0</version> </dependency> 23 Saturday, October 19, 13
  25. 25. FunctionalTest Схема работы теста Вход на страницу Заполнение формы Отправка Win! Получение ID 24 Saturday, October 19, 13
  26. 26. 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
  27. 27. FunctionalTest Домашнее задание 3 unit теста на каждый разработанный модуль завести тест с помощью Selenium 26 Saturday, October 19, 13
  28. 28. LoadTest [robic]: привет, нужно просетапить сервер чтоб держал нагрузку [robic]: нужен mysql и apache [ad_minic]: какая нагрузка? [robic]: большая [ad_minic]: круто [ad_minic]: тогда ставь большой апач и большой мускуль на большой сервер bash.org 27 Saturday, October 19, 13
  29. 29. LoadTest Моделирование 28 Saturday, October 19, 13
  30. 30. LoadTest Ожидаемое использование 29 Saturday, October 19, 13
  31. 31. LoadTest Нескольких пользователей 30 Saturday, October 19, 13
  32. 32. LoadTest Одновременно 31 Saturday, October 19, 13
  33. 33. LoadTest Как происходит? Формируется список активностей гейммеханики Формируются параметры игрового дизайна Реализуется бот Проводится испытание Анализируются результаты 32 Saturday, October 19, 13
  34. 34. LoadTest Список активностей гейммеханики Танк должен ехать вправо/влево/вниз/вверх Танк должен стрелять Танк должен умирать 33 Saturday, October 19, 13
  35. 35. LoadTest Параметры игрового дизайна Танк должен ехать 4 секунды из 5 Танк должен стрелять раз в 5 секунд Танк должен умирать раз в 10 секунд Танк НЕ обязан делать это осознанно 34 Saturday, October 19, 13
  36. 36. LoadTest Проводится испытание Час Два 8 часов Сутки Неделю ? 35 Saturday, October 19, 13
  37. 37. LoadTest Рекомендуемые инструменты jMeter LoadBalancer Yandex-tanki 36 Saturday, October 19, 13
  38. 38. 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
  39. 39. LoadTest CCU, users private Map<Integer, Avatar> avatars = new HashMap<>(); public final int getTotalAvatars() { return avatars.size(); } 38 Saturday, October 19, 13
  40. 40. LoadTest Server FPS Инициализация Входные данные Обработка данных Тик сервера Обновление состояния Выходные данные Освобождение ресурсов 39 Saturday, October 19, 13
  41. 41. 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
  42. 42. LoadTest Многопоточность Не спать вредно Много спать тоже вредно Чем больше нагрузка на CPU, тем лучше 41 Saturday, October 19, 13
  43. 43. LoadTest Нагрузка на процессор 42 Saturday, October 19, 13
  44. 44. LoadTest Нагрузка на процессор 43 Saturday, October 19, 13
  45. 45. LoadTest Память long free = Runtime.getRuntime().freeMemory(); long max = Runtime.getRuntime().maxMemory(); 44 Saturday, October 19, 13
  46. 46. Углубленное программирование на Java Лекция 5 / 2 «Вся правда о GC» Александр Акбашев Saturday, October 19, 13
  47. 47. Garbage Collector Если бы в Java действительно работала сборка мусора, большинство программ бы удаляли сами себя при первом же запуске. Robert Sewell 46 Saturday, October 19, 13
  48. 48. Garbage Collector Garbage collector (GC) Поиск недостежимых объектов Освобождение памяти Stack Heap Типы ссылок Strong references Weak references Soſt references Phantom references 47 Saturday, October 19, 13
  49. 49. Garbage Collector Strong References Объект не удаляется 48 Saturday, October 19, 13
  50. 50. Garbage Collector Soſt References Объект удаляется...если нужна память Учитывает количество ссылок Используется для memory-sensitive cache new SoſtReference(T obj); 49 Saturday, October 19, 13
  51. 51. Garbage Collector Weak References Объект удаляется Атомарно очищает все слабые ссылки на объект Если надо, помещает объекты на финализацию Перед использовать - проверять на NULL WeakHashMap new WeakReference(T obj); 50 Saturday, October 19, 13
  52. 52. Garbage Collector Phantom References Не использовать в домашних условиях 51 Saturday, October 19, 13
  53. 53. Garbage Collector Немного о потреблении памяти 52 Saturday, October 19, 13
  54. 54. 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
  55. 55. Garbage Collector  Survivor Eden Copy Collection Mark-compact algorithm 54 Saturday, October 19, 13
  56. 56. Garbage Collector 55 Saturday, October 19, 13
  57. 57. Garbage Collector Что делать? Как настраивать? jvisualvm входит в JDK 56 Saturday, October 19, 13
  58. 58. Итого Домашнее задание MemoryUsage CCU Load http://www.highcharts.com/ http://www.oracle.com/ 57 Saturday, October 19, 13
  59. 59. Спасибо за внимание Акбашев Александр, a.akbashev@corp.mail.ru Saturday, October 19, 13
  60. 60. UnitTest Простейший Mock для Frontend 1. Refactor -> Extract -> Interface 2. Public methods getAddress doGet doPost run 3. @Mock 59 Saturday, October 19, 13

×