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

Preview:

Citation preview

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Рефакторинг

Интеграция

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

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

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

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

В Eclipse: New -> JUnit Test Case

public class A {private int value;

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

}

public int getValue() {return value;

}

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+”'/>”);

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

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

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

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

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

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

Быстро

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

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

Не так быстро

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

Путь джедая

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

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

Отправка

Получение ID

Win!

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;}

});

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

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

2. Диск (iowait)

3. Сеть, Mb/s

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

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

6. CCU, users

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Умереть

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

public void testLogin(…)

public void moveRandom(…)

public void stop(…)

public void shoot(…)

public void wait(…)

public void suicide(…)

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

http://loadimpact.com/

http://loadstorm.com/

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

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();}

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

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

http://www.highcharts.com/

http://www.jscharts.com/