27
Лекция 5. «QA и тестирование»

Java осень 2012 лекция 5

Embed Size (px)

Citation preview

Page 1: Java осень 2012 лекция 5

Лекция 5. «QA и тестирование»

Page 2: Java осень 2012 лекция 5
Page 3: Java осень 2012 лекция 5
Page 4: Java осень 2012 лекция 5

с целью получения информации

процесс исследования программного обеспечения

о качестве продукта

Page 5: Java осень 2012 лекция 5

*используемые при разработке сервера SkyForge

В сумме несколько сотен тестов

Пишут все программисты

Перед коммитом изменения проверяются самим программистом

После коммита изменения проверяются автоматизированной системой сборки

Все счастливы

Page 6: Java осень 2012 лекция 5

*используемые при разработке сервера SkyForge

Целый десяток

Пишутся одним единственным программистом

Проверяют, что после сборки сервер запускается, и что аватар может убить моба

Page 7: Java осень 2012 лекция 5

*используемые при разработке сервера SkyForge

Проверяют, выдерживает ли сервер заявленное число пользователей

Создаваемая нагрузка должна быть релевантной

Выявление наиболее популярных и редких багов

Page 8: Java осень 2012 лекция 5

Работоспособность отдельных…юнитов

Рефакторинг

Интеграция

Отделение интерфейса от реализации

Основа разработки – Test Driven Development (TDD)

Защита от граблей

Page 9: Java осень 2012 лекция 5

Среда тестирования: JUnit

В Eclipse: New -> JUnit Test Case

Page 10: Java осень 2012 лекция 5

public class A {private int value;

public A (int value) {this.value = value;

}

public int getValue() {return value;

}

Page 11: Java осень 2012 лекция 5

public class PageCreatorImpl {public String getPage(int userId) {StringBuilder builder = new StringBuilder();builder.append("<input type='hidden' name='userid' value ='" + userId + "'/>");

return builder.toString();}

int someId = (int) (Math.random()*Integer.MAX_VALUE);

"<input type='hidden' name='userid' value =‘” +someId+”'/>”);

Page 12: Java осень 2012 лекция 5
Page 13: Java осень 2012 лекция 5

Реализует ли требуемый функционал

Поднимается ли сервер?

Можно ли зайти в игру?

Можно ли играть?

Ручное тестирование может быть более глубоким

Page 14: Java осень 2012 лекция 5

Без единой строки кода (plugin Firefox) Много кода на Java

Быстро

Слабо контролируемо

Не по-пацански

Не так быстро

Полный контроль

Путь джедая

Page 15: Java осень 2012 лекция 5

Вход на страницу

Заполнение формы

Отправка

Получение ID

Win!

Page 16: Java осень 2012 лекция 5

public void testLogin(@NotNull String url, @NotNull String username, @NotNull String password) {WebDriver driver = new HtmlUnitDriver(true);// Find the text input element by its name

WebElement element = driver.findElement(By.name(“userName"));element.sendKeys(username);

// 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@NotNullpublic Boolean apply(@NotNull WebDriver d) {

final int id = d.findElement(By.name(“id”));return id != 0;}

});

Page 17: Java осень 2012 лекция 5

моделированиеожидаемого использования приложенияс помощью эмуляции работы нескольких пользователей одновременно

1. Потребление CPU, %

2. Диск (iowait)

3. Сеть, Mb/s

4. Использование памяти, МБ

5. Время отклика, ms

6. CCU, users

Page 18: Java осень 2012 лекция 5

Формируется список активностей гейммеханики

Формируются параметры игрового дизайна

Реализуется бот

Проводится испытание

Анализируются результаты

Page 19: Java осень 2012 лекция 5

Формируется список активностей гейммеханики

Танк должен ехать вправо/влево/вниз/вверх

Танк должен стрелять

Танк должен умирать

Page 20: Java осень 2012 лекция 5

Формируются параметры игрового дизайна

Танк должен ехать 4 секунды из 5

Танк должен стрелять раз в 5 секунд

Танк должен умирать раз в 10 секунд

Танк НЕ обязан делать это осознанно

Page 21: Java осень 2012 лекция 5

Начать игруЕхать в любую

доступную сторону

Остановиться

ВыстрелитьПодождать

Умереть

Page 22: Java осень 2012 лекция 5

Реализуется бот

public void testLogin(…)

public void moveRandom(…)

public void stop(…)

public void shoot(…)

public void wait(…)

public void suicide(…)

Page 23: Java осень 2012 лекция 5

Варианты для ленивых и на попробовать:

http://loadimpact.com/

http://loadstorm.com/

Минусы:• 100% random• Сервер должен быть поднят в Интернете

Page 24: Java осень 2012 лекция 5

1. Потребление CPU, %

4. Использование памяти, МБ

2. Сеть, Mb/s

3. Диск (iowait)

5. Время отклика, ms

6. CCU, users

https://github.com/jezhumble/javasysmontop

long free = Runtime.getRuntime().freeMemory();long max = Runtime.getRuntime().maxMemory();

Так же не доступны из Java

private Map<Integer, Avatar> avatars = new HashMap<Integer, Avatar>();public final int getTotalAvatars() {

return avatars.size();}

Page 25: Java осень 2012 лекция 5

-XX:+UseConcMarkSweepGC – сборка мусора без пауз

Page 26: Java осень 2012 лекция 5

127.0.0.1:8080/operator/Простейшая аутентификацияMemoryUsageCCUВремя отклика

http://www.highcharts.com/

http://www.jscharts.com/

Page 27: Java осень 2012 лекция 5