SlideShare a Scribd company logo
1 of 31
www.ct-po.ru
info@ct-po.ru
Астахов Лев
г. Томск, Россия
Инструментация среды
исполнения
в арсенале тестировщика
XIX Международная конференция
по вопросам качества программного обеспечения
sqadays.com
Что можно улучшить в процессе
функционального тестирования
приложений?
Инструментация среды исполнения в арсенале тестировщика
Уменьшение трудозатрат на
исправление продукта в случае
падения тестов.
Инструментация среды исполнения в арсенале тестировщика
W
hat?
logger.debug("Entering try block");
try {
logger.debug("Printing 'hello world'");
System.out("Hello, World!");
logger.debug("Printed 'hello world'");
} catch (Exception e) {
logger.error(e.toString());
} finally (Exception e) {
logger.debug("Exiting try block");
}
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщика
Глоссарий:
Инструментация среды исполнения в арсенале тестировщика
Выполнение управляемого кода
(Java и .NET программ)
Инструментация среды исполнения в арсенале тестировщика
Режим ядра ОС
JF
Пользовательский режим ОС
Среда исполнения (Java/.NET/… runtime)
Приложение
(Java/.NET/…
runtime)
Сторонние
библиотеки
(Java/.NET/…
runtime)
Неуправляемы
й код
Инструментация среды исполнения в арсенале тестировщика
Контроль за исполнением
кода
Контроль за исполнением
кода
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщика
Контроль за исполнением
кода
Инструментация среды исполнения в арсенале тестировщика
Контроль за исполнением
кода
Инструментация среды исполнения в арсенале тестировщика
Контроль за исполнением
кода
Инструментация среды исполнения в арсенале тестировщика
Контроль за исполнением
кода
Уровень среды исполнения
Инструментация среды исполнения в арсенале тестировщика
Среда исполнения Java
Основная часть логики среды исполнения Java
Находится в <JAVA_RUNTIME_DIR>/jre/lib/rt.jar
И это самый обычный java архив,
ничем не отличающийся от пользовательских приложений.
Более того, начиная с JDK 1.7.0.15, Oracle включает в поставку
JDK
Исходный код runtime находится в <JDK_DIR>/src.zip
Чтобы изменить любой класс среды исполнения java,
достаточно, внеся изменения в исходный код нужного класса из
<JDK_DIR>/src.zip, скомпилировать его с помощью java и
положить
скомпилированный файл класса в
<JAVA_RUNTIME_DIR>/jre/lib/rt.jar
Инструментация среды исполнения в арсенале тестировщика
Примеры изменений в среде
исполнения
Добавление своего кода в среду исполнения
класс, выполняющий запись и обработку событий
java.lang.InstrumentationHelper
public class InstrumentationHelper {
…
public static void Log(String message) { … }
public static boolean getInterceptMode() { … }
public static void setInterceptMode(boolean mode) { … }
public static boolean copyFile(string filePath) { … }
…
}
Инструментация среды исполнения в арсенале тестировщика
Изменение существующих классов:
взаимодействие с внешней средой
java.io.System – работа с потоками stdin, stdout и stderr,
переменными окружения, сборщик мусора, загрузка динамических
библиотек
java.io.File – работа с файловой системой
java.lang.Runtime – запуск процессов
java.net.java.net.InetAddress – разрешение сетевых имён (DNS)
java.lang.ClassLoader – загрузка классов
java.net.HttpURLConnection – веб-сессии
java.lang.Thread – порождение и завершение
потоков (threads)
Инструментация среды исполнения в арсенале тестировщика
Примеры изменений в среде
исполнения
Изменение существующих классов:
java.lang.Runtime
public Process exec(String[] cmdarray, String[] envp, File dir)
throws IOException {
return new ProcessBuilder(cmdarray)
.environment(envp)
.directory(dir)
.start();
}
Инструментация среды исполнения в арсенале тестировщика
Примеры изменений в среде
исполнения
Изменение существующих классов:
java.lang.Runtime
public Process exec(String[] cmdarray, String[] envp, File dir)
throws IOException {
InstrumentationHelper.log(String.format("%s %s %s",
InstrumentationHelper.StringJoin(cmdarray, ","),
InstrumentationHelper.StringJoin(envp, ","),
((dir == null) ? "“ : dir.toString())));
return new ProcessBuilder(cmdarray)
.environment(envp)
.directory(dir)
.start();
}
Инструментация среды исполнения в арсенале тестировщика
Примеры изменений в среде
исполнения
Модификация среды исполнения
.NETКак и в случае со средой исполнения Java,
основная логика .NET runtime, GAC (Global Assembly Cache) –
обычные .NET приложения (DLL - динамические библиотеки),
которые модифицируются таким же образом, как и
пользовательские.
Большинство сборок GAC находится в
C:WindowsMicrosoft.NETassemblyGAC_MSIL
Платформозависимые сборки находятся в:
C:WindowsMicrosoft.NETassemblyGAC_32
C:WindowsMicrosoft.NETassemblyGAC_64
Платформозависимые они потому, что либо там
неуправляемый код присутствует, либо эти сборки работают с
завязкой
на конкретный размер платформозависимых типов данных.
Инструментация среды исполнения в арсенале тестировщика
Поиск нужной сборки
Process Explorer покажет, какая именно сборка используется целевым приложением
Инструментация среды исполнения в арсенале тестировщика
Модификация среды исполнения
.NET
Инструментация среды исполнения в арсенале тестировщика
Модификация на уровне IL assembly (вывод ildasm == вход ilasm)
.method public hidebysig static void WriteLine(string 'value') cil managed
noinlining
{
.permissionset linkcheck
= {class 'System.Security.Permissions.HostProtectionAttribute,
mscorlib, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089' = {property bool 'UI' = bool(true)}}
// Размер кода: 12 (0xc)
.maxstack 8
IL_0000: call class System.IO.TextWriter System.Console::get_Out()
IL_0005: ldarg.0
IL_0006: callvirt instance void System.IO.TextWriter::WriteLine(string)
IL_000b: ret
} // end of method Console::WriteLine
Инструментация среды исполнения в арсенале тестировщика
Модификация среды исполнения
.NET
Инструментация среды исполнения в арсенале тестировщика
Модификация среды исполнения
.NET
Инструментация среды исполнения в арсенале тестировщика
Модификация среды исполнения
.NET
Инструментация среды исполнения в арсенале тестировщика
Модификация среды исполнения
.NET
Инструментация среды исполнения в арсенале тестировщика
Подводные камни
Модификация среды исполнения
.NET
За пределами Java и .NET
Python – создается отдельная сборка и
скрипты вызываются из него.
Можно настроить посредством virtualenv
Другие технические решения – надо изучать,
и находить те, где трудозатраты от изменения
среды исполнения окупятся пользой для
разработки, отладки и тестирования .
Инструментация среды исполнения в арсенале тестировщика
Итог
Модификация среды исполнения не решает всех
проблем
QA команды, но может занять достойное место среди
инструментов:
можно найти много сценариев для применения этого
подхода.
Модификация среды исполнения не является сильно
сложным процессом, стенд для функционального
тестирования с модифицированной средой исполнения
можно собрать за несколько дней, а пользоваться
постоянно, с минимальной необходимостью поддержки
тестового стенда.
Инструментация среды исполнения в арсенале тестировщика
Материалы по теме
• Erez Metula, Managed Code Rootkits: Hooking into Runtime
Environments
www.amazon.com/Managed-Code-Rootkits-Hooking-Environments/dp/1597495743
• Reflexil, The opensource .NET Assembly Editor
www.reflexil.net
• .NET CLR Injection: Modify IL Code during Run-time
www.codeproject.com/Articles/463508/NET-CLR-Injection-Modify-IL-Code-during-Run-time
• Kazuhiro Yamato, Toyo Abe
A Runtime Code Modification Method for Application
Programs
www.kernel.org/doc/ols/2008/ols2008v2-pages-245-254.pdf
• Dealing with runtime bytecode modification
www.ibm.com/support/knowledgecenter/api/content/nl/ru/SSYKE2_7.0.0/com.ibm.java.win.70.doc/diag/tools/shcpd_runtime_bytecode_mod.ht
ml
Инструментация среды исполнения в арсенале тестировщика
Спасибо за внимание!
www.ct-po.ru
info@ct-po.ru
Инструментация среды исполнения в арсенале тестировщика

More Related Content

What's hot

UICov - инструмент анализа покрытия UI-тестами
UICov - инструмент анализа покрытия UI-тестамиUICov - инструмент анализа покрытия UI-тестами
UICov - инструмент анализа покрытия UI-тестамиSQALab
 
Подводная часть айсберга: что делать, чтобы автотесты не превратились в Титаник
Подводная часть айсберга: что делать, чтобы автотесты не превратились в ТитаникПодводная часть айсберга: что делать, чтобы автотесты не превратились в Титаник
Подводная часть айсберга: что делать, чтобы автотесты не превратились в ТитаникSQALab
 
Автоматизация тестирования многопоточности
Автоматизация тестирования многопоточностиАвтоматизация тестирования многопоточности
Автоматизация тестирования многопоточностиSQALab
 
GUI-автоматизация в Telerik Test Studio
GUI-автоматизация в Telerik Test StudioGUI-автоматизация в Telerik Test Studio
GUI-автоматизация в Telerik Test StudioSQALab
 
Threads & LinkedClone. Как сократить время на развертывание продукта и подгот...
Threads & LinkedClone. Как сократить время на развертывание продукта и подгот...Threads & LinkedClone. Как сократить время на развертывание продукта и подгот...
Threads & LinkedClone. Как сократить время на развертывание продукта и подгот...SQALab
 
Илья Кудинов
Илья КудиновИлья Кудинов
Илья КудиновCodeFest
 
Github Flow. Тестировщики против тестирования
Github Flow. Тестировщики против тестированияGithub Flow. Тестировщики против тестирования
Github Flow. Тестировщики против тестированияSQALab
 
Kubernetes
KubernetesKubernetes
KubernetesSQALab
 
Автоматизированное тестирование - от сложного к простому, или Запускаем автот...
Автоматизированное тестирование - от сложного к простому, или Запускаем автот...Автоматизированное тестирование - от сложного к простому, или Запускаем автот...
Автоматизированное тестирование - от сложного к простому, или Запускаем автот...SQALab
 
BDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehaveBDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehaveSQALab
 
Автоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST APIАвтоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST APIPavel Asanov
 
Let's Talk About Junit 5
Let's Talk About Junit 5Let's Talk About Junit 5
Let's Talk About Junit 5SQALab
 
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Andrey Rebrov
 
Иван Крутов - Автоматизация сборки Java-проекта
Иван Крутов - Автоматизация сборки Java-проектаИван Крутов - Автоматизация сборки Java-проекта
Иван Крутов - Автоматизация сборки Java-проектаYandex
 
Как это будет: ASP.NET Core
Как это будет: ASP.NET CoreКак это будет: ASP.NET Core
Как это будет: ASP.NET CoreDotNetConf
 
Jenkins 2.0: Организуем тестирование в составе Continuous Delivery
Jenkins 2.0: Организуем тестирование в составе Continuous DeliveryJenkins 2.0: Организуем тестирование в составе Continuous Delivery
Jenkins 2.0: Организуем тестирование в составе Continuous DeliverySQALab
 
Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?
Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?
Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?CEE-SEC(R)
 
КРИ-2013. "Нагрузочное тестирование или Боты - санитары сервера"
КРИ-2013. "Нагрузочное тестирование или Боты - санитары сервера"КРИ-2013. "Нагрузочное тестирование или Боты - санитары сервера"
КРИ-2013. "Нагрузочное тестирование или Боты - санитары сервера"Alexander Akbashev
 
Maven 3 : уличная магия
Maven 3 : уличная магияMaven 3 : уличная магия
Maven 3 : уличная магияAleksey Solntsev
 
Тестируем мобильное приложение в суровых реалиях Интернета
Тестируем мобильное приложение в суровых реалиях ИнтернетаТестируем мобильное приложение в суровых реалиях Интернета
Тестируем мобильное приложение в суровых реалиях ИнтернетаSQALab
 

What's hot (20)

UICov - инструмент анализа покрытия UI-тестами
UICov - инструмент анализа покрытия UI-тестамиUICov - инструмент анализа покрытия UI-тестами
UICov - инструмент анализа покрытия UI-тестами
 
Подводная часть айсберга: что делать, чтобы автотесты не превратились в Титаник
Подводная часть айсберга: что делать, чтобы автотесты не превратились в ТитаникПодводная часть айсберга: что делать, чтобы автотесты не превратились в Титаник
Подводная часть айсберга: что делать, чтобы автотесты не превратились в Титаник
 
Автоматизация тестирования многопоточности
Автоматизация тестирования многопоточностиАвтоматизация тестирования многопоточности
Автоматизация тестирования многопоточности
 
GUI-автоматизация в Telerik Test Studio
GUI-автоматизация в Telerik Test StudioGUI-автоматизация в Telerik Test Studio
GUI-автоматизация в Telerik Test Studio
 
Threads & LinkedClone. Как сократить время на развертывание продукта и подгот...
Threads & LinkedClone. Как сократить время на развертывание продукта и подгот...Threads & LinkedClone. Как сократить время на развертывание продукта и подгот...
Threads & LinkedClone. Как сократить время на развертывание продукта и подгот...
 
Илья Кудинов
Илья КудиновИлья Кудинов
Илья Кудинов
 
Github Flow. Тестировщики против тестирования
Github Flow. Тестировщики против тестированияGithub Flow. Тестировщики против тестирования
Github Flow. Тестировщики против тестирования
 
Kubernetes
KubernetesKubernetes
Kubernetes
 
Автоматизированное тестирование - от сложного к простому, или Запускаем автот...
Автоматизированное тестирование - от сложного к простому, или Запускаем автот...Автоматизированное тестирование - от сложного к простому, или Запускаем автот...
Автоматизированное тестирование - от сложного к простому, или Запускаем автот...
 
BDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehaveBDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehave
 
Автоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST APIАвтоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST API
 
Let's Talk About Junit 5
Let's Talk About Junit 5Let's Talk About Junit 5
Let's Talk About Junit 5
 
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
 
Иван Крутов - Автоматизация сборки Java-проекта
Иван Крутов - Автоматизация сборки Java-проектаИван Крутов - Автоматизация сборки Java-проекта
Иван Крутов - Автоматизация сборки Java-проекта
 
Как это будет: ASP.NET Core
Как это будет: ASP.NET CoreКак это будет: ASP.NET Core
Как это будет: ASP.NET Core
 
Jenkins 2.0: Организуем тестирование в составе Continuous Delivery
Jenkins 2.0: Организуем тестирование в составе Continuous DeliveryJenkins 2.0: Организуем тестирование в составе Continuous Delivery
Jenkins 2.0: Организуем тестирование в составе Continuous Delivery
 
Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?
Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?
Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?
 
КРИ-2013. "Нагрузочное тестирование или Боты - санитары сервера"
КРИ-2013. "Нагрузочное тестирование или Боты - санитары сервера"КРИ-2013. "Нагрузочное тестирование или Боты - санитары сервера"
КРИ-2013. "Нагрузочное тестирование или Боты - санитары сервера"
 
Maven 3 : уличная магия
Maven 3 : уличная магияMaven 3 : уличная магия
Maven 3 : уличная магия
 
Тестируем мобильное приложение в суровых реалиях Интернета
Тестируем мобильное приложение в суровых реалиях ИнтернетаТестируем мобильное приложение в суровых реалиях Интернета
Тестируем мобильное приложение в суровых реалиях Интернета
 

Viewers also liked

Можно ли прикрутить нечеткий логический вывод к тестированию
Можно ли прикрутить нечеткий логический вывод к тестированиюМожно ли прикрутить нечеткий логический вывод к тестированию
Можно ли прикрутить нечеткий логический вывод к тестированиюSQALab
 
QA как драйвер трансформации
QA как драйвер трансформацииQA как драйвер трансформации
QA как драйвер трансформацииSQALab
 
Нагрузка и автоматизация в большой организации. Движение к DevOps
Нагрузка и автоматизация в большой организации. Движение к DevOpsНагрузка и автоматизация в большой организации. Движение к DevOps
Нагрузка и автоматизация в большой организации. Движение к DevOpsSQALab
 
DevOps подходы в инфраструктуре автоматизации тестирования
DevOps подходы в инфраструктуре автоматизации тестированияDevOps подходы в инфраструктуре автоматизации тестирования
DevOps подходы в инфраструктуре автоматизации тестированияSQALab
 
Are you in control of Testing, or does Testing control you?
Are you in control of Testing, or does Testing control you? Are you in control of Testing, or does Testing control you?
Are you in control of Testing, or does Testing control you? SQALab
 
Управление качеством проекта
Управление качеством проектаУправление качеством проекта
Управление качеством проектаSQALab
 
The Challenge of Accepting Software
The Challenge of Accepting SoftwareThe Challenge of Accepting Software
The Challenge of Accepting SoftwareSQALab
 
Building a testing team
Building a testing teamBuilding a testing team
Building a testing teamSQALab
 
Развитие процессов тестирования в Badoo за три года
Развитие процессов тестирования в Badoo за три годаРазвитие процессов тестирования в Badoo за три года
Развитие процессов тестирования в Badoo за три годаSQALab
 
Улучшение процесса тестирования: контентные модели
Улучшение процесса тестирования: контентные моделиУлучшение процесса тестирования: контентные модели
Улучшение процесса тестирования: контентные моделиSQALab
 
14 lessons for successful testing outsourcing
14 lessons for successful testing outsourcing14 lessons for successful testing outsourcing
14 lessons for successful testing outsourcingSQALab
 
Тестируем развитие тестировщика
Тестируем развитие тестировщикаТестируем развитие тестировщика
Тестируем развитие тестировщикаSQALab
 
Как же научиться программировать, в конце концов?
Как же научиться программировать, в конце концов?Как же научиться программировать, в конце концов?
Как же научиться программировать, в конце концов?SQALab
 
Пополняем арсенал тестировщика. Учимся применять новые техники
Пополняем арсенал тестировщика. Учимся применять новые техникиПополняем арсенал тестировщика. Учимся применять новые техники
Пополняем арсенал тестировщика. Учимся применять новые техникиSQALab
 
Тестирование в условиях Lean: как приручить MVP?
Тестирование в условиях Lean: как приручить MVP?Тестирование в условиях Lean: как приручить MVP?
Тестирование в условиях Lean: как приручить MVP?SQALab
 
Как тестировщику выжить в стартапе
Как тестировщику выжить в стартапе Как тестировщику выжить в стартапе
Как тестировщику выжить в стартапе SQALab
 
Тестирование систем процессинга банковских карт. Особенности и сложности
Тестирование систем процессинга банковских карт. Особенности и сложностиТестирование систем процессинга банковских карт. Особенности и сложности
Тестирование систем процессинга банковских карт. Особенности и сложностиSQALab
 
JDI: Автоматизировать проще, чем кажется
JDI: Автоматизировать проще, чем кажетсяJDI: Автоматизировать проще, чем кажется
JDI: Автоматизировать проще, чем кажетсяSQALab
 
Как перестать бояться и начать автоматизировать
Как перестать бояться и начать автоматизироватьКак перестать бояться и начать автоматизировать
Как перестать бояться и начать автоматизироватьSQALab
 
Поиск багов при тестировании переходов с веба в мобильное приложение
Поиск багов при тестировании переходов с веба в мобильное приложениеПоиск багов при тестировании переходов с веба в мобильное приложение
Поиск багов при тестировании переходов с веба в мобильное приложениеSQALab
 

Viewers also liked (20)

Можно ли прикрутить нечеткий логический вывод к тестированию
Можно ли прикрутить нечеткий логический вывод к тестированиюМожно ли прикрутить нечеткий логический вывод к тестированию
Можно ли прикрутить нечеткий логический вывод к тестированию
 
QA как драйвер трансформации
QA как драйвер трансформацииQA как драйвер трансформации
QA как драйвер трансформации
 
Нагрузка и автоматизация в большой организации. Движение к DevOps
Нагрузка и автоматизация в большой организации. Движение к DevOpsНагрузка и автоматизация в большой организации. Движение к DevOps
Нагрузка и автоматизация в большой организации. Движение к DevOps
 
DevOps подходы в инфраструктуре автоматизации тестирования
DevOps подходы в инфраструктуре автоматизации тестированияDevOps подходы в инфраструктуре автоматизации тестирования
DevOps подходы в инфраструктуре автоматизации тестирования
 
Are you in control of Testing, or does Testing control you?
Are you in control of Testing, or does Testing control you? Are you in control of Testing, or does Testing control you?
Are you in control of Testing, or does Testing control you?
 
Управление качеством проекта
Управление качеством проектаУправление качеством проекта
Управление качеством проекта
 
The Challenge of Accepting Software
The Challenge of Accepting SoftwareThe Challenge of Accepting Software
The Challenge of Accepting Software
 
Building a testing team
Building a testing teamBuilding a testing team
Building a testing team
 
Развитие процессов тестирования в Badoo за три года
Развитие процессов тестирования в Badoo за три годаРазвитие процессов тестирования в Badoo за три года
Развитие процессов тестирования в Badoo за три года
 
Улучшение процесса тестирования: контентные модели
Улучшение процесса тестирования: контентные моделиУлучшение процесса тестирования: контентные модели
Улучшение процесса тестирования: контентные модели
 
14 lessons for successful testing outsourcing
14 lessons for successful testing outsourcing14 lessons for successful testing outsourcing
14 lessons for successful testing outsourcing
 
Тестируем развитие тестировщика
Тестируем развитие тестировщикаТестируем развитие тестировщика
Тестируем развитие тестировщика
 
Как же научиться программировать, в конце концов?
Как же научиться программировать, в конце концов?Как же научиться программировать, в конце концов?
Как же научиться программировать, в конце концов?
 
Пополняем арсенал тестировщика. Учимся применять новые техники
Пополняем арсенал тестировщика. Учимся применять новые техникиПополняем арсенал тестировщика. Учимся применять новые техники
Пополняем арсенал тестировщика. Учимся применять новые техники
 
Тестирование в условиях Lean: как приручить MVP?
Тестирование в условиях Lean: как приручить MVP?Тестирование в условиях Lean: как приручить MVP?
Тестирование в условиях Lean: как приручить MVP?
 
Как тестировщику выжить в стартапе
Как тестировщику выжить в стартапе Как тестировщику выжить в стартапе
Как тестировщику выжить в стартапе
 
Тестирование систем процессинга банковских карт. Особенности и сложности
Тестирование систем процессинга банковских карт. Особенности и сложностиТестирование систем процессинга банковских карт. Особенности и сложности
Тестирование систем процессинга банковских карт. Особенности и сложности
 
JDI: Автоматизировать проще, чем кажется
JDI: Автоматизировать проще, чем кажетсяJDI: Автоматизировать проще, чем кажется
JDI: Автоматизировать проще, чем кажется
 
Как перестать бояться и начать автоматизировать
Как перестать бояться и начать автоматизироватьКак перестать бояться и начать автоматизировать
Как перестать бояться и начать автоматизировать
 
Поиск багов при тестировании переходов с веба в мобильное приложение
Поиск багов при тестировании переходов с веба в мобильное приложениеПоиск багов при тестировании переходов с веба в мобильное приложение
Поиск багов при тестировании переходов с веба в мобильное приложение
 

Similar to Инструментация среды исполнения в арсенале тестировщика

JPoint 2016 - Etudes of DIY Java profiler
JPoint 2016 - Etudes of DIY Java profilerJPoint 2016 - Etudes of DIY Java profiler
JPoint 2016 - Etudes of DIY Java profilerAnton Arhipov
 
Использование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияИспользование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияSQALab
 
C# Desktop. Занятие 04.
C# Desktop. Занятие 04.C# Desktop. Занятие 04.
C# Desktop. Занятие 04.Igor Shkulipa
 
Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...Andrey Karpov
 
Экстремальная оптимизация производительности на примере MongoDB Java Driver
Экстремальная оптимизация производительности на примере MongoDB Java DriverЭкстремальная оптимизация производительности на примере MongoDB Java Driver
Экстремальная оптимизация производительности на примере MongoDB Java DriverVitebsk DSC
 
Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?Andrey Karpov
 
Взломать Web-сайт на ASP.NET? Сложно, но можно!
Взломать Web-сайт на ASP.NET? Сложно, но можно!Взломать Web-сайт на ASP.NET? Сложно, но можно!
Взломать Web-сайт на ASP.NET? Сложно, но можно!Vladimir Kochetkov
 
Java весна 2013 лекция 9
Java весна 2013 лекция 9Java весна 2013 лекция 9
Java весна 2013 лекция 9Technopark
 
Java осень 2014 занятие 6
Java осень 2014 занятие 6Java осень 2014 занятие 6
Java осень 2014 занятие 6Technopark
 
Android - 02 - annotations, exceptions, io, generics
Android - 02 - annotations, exceptions, io, genericsAndroid - 02 - annotations, exceptions, io, generics
Android - 02 - annotations, exceptions, io, genericsNoveo
 
Java 9: what is there beyond modularization
Java 9: what is there beyond modularizationJava 9: what is there beyond modularization
Java 9: what is there beyond modularizationIvan Krylov
 
Java весна 2013 лекция 8
Java весна 2013 лекция 8Java весна 2013 лекция 8
Java весна 2013 лекция 8Technopark
 
Что могут статические анализаторы, чего не могут программисты и тестировщики
Что могут статические анализаторы, чего не могут программисты и тестировщикиЧто могут статические анализаторы, чего не могут программисты и тестировщики
Что могут статические анализаторы, чего не могут программисты и тестировщикиAndrey Karpov
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationAndrii Dzynia
 
Зачем нужна Scala?
Зачем нужна Scala?Зачем нужна Scala?
Зачем нужна Scala?Vasil Remeniuk
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobileUA Mobile
 

Similar to Инструментация среды исполнения в арсенале тестировщика (20)

JPoint 2016 - Etudes of DIY Java profiler
JPoint 2016 - Etudes of DIY Java profilerJPoint 2016 - Etudes of DIY Java profiler
JPoint 2016 - Etudes of DIY Java profiler
 
Использование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияИспользование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестирования
 
JavaDay'14
JavaDay'14JavaDay'14
JavaDay'14
 
C# Desktop. Занятие 04.
C# Desktop. Занятие 04.C# Desktop. Занятие 04.
C# Desktop. Занятие 04.
 
Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...
 
Экстремальная оптимизация производительности на примере MongoDB Java Driver
Экстремальная оптимизация производительности на примере MongoDB Java DriverЭкстремальная оптимизация производительности на примере MongoDB Java Driver
Экстремальная оптимизация производительности на примере MongoDB Java Driver
 
Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?
 
Scala on android
Scala on androidScala on android
Scala on android
 
Bytecode
BytecodeBytecode
Bytecode
 
Взломать Web-сайт на ASP.NET? Сложно, но можно!
Взломать Web-сайт на ASP.NET? Сложно, но можно!Взломать Web-сайт на ASP.NET? Сложно, но можно!
Взломать Web-сайт на ASP.NET? Сложно, но можно!
 
Java весна 2013 лекция 9
Java весна 2013 лекция 9Java весна 2013 лекция 9
Java весна 2013 лекция 9
 
Java осень 2014 занятие 6
Java осень 2014 занятие 6Java осень 2014 занятие 6
Java осень 2014 занятие 6
 
Android - 02 - annotations, exceptions, io, generics
Android - 02 - annotations, exceptions, io, genericsAndroid - 02 - annotations, exceptions, io, generics
Android - 02 - annotations, exceptions, io, generics
 
Java 9: what is there beyond modularization
Java 9: what is there beyond modularizationJava 9: what is there beyond modularization
Java 9: what is there beyond modularization
 
course js day 1
course js day 1course js day 1
course js day 1
 
Java весна 2013 лекция 8
Java весна 2013 лекция 8Java весна 2013 лекция 8
Java весна 2013 лекция 8
 
Что могут статические анализаторы, чего не могут программисты и тестировщики
Что могут статические анализаторы, чего не могут программисты и тестировщикиЧто могут статические анализаторы, чего не могут программисты и тестировщики
Что могут статические анализаторы, чего не могут программисты и тестировщики
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test Automation
 
Зачем нужна Scala?
Зачем нужна Scala?Зачем нужна Scala?
Зачем нужна Scala?
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobile
 

More from SQALab

Готовим стажировку
Готовим стажировкуГотовим стажировку
Готовим стажировкуSQALab
 
Куда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщикаКуда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщикаSQALab
 
Оптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержкиОптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержкиSQALab
 
Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программированияАвтоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программированияSQALab
 
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...SQALab
 
Continuous performance testing
Continuous performance testingContinuous performance testing
Continuous performance testingSQALab
 
Конфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нуженКонфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нуженSQALab
 
Команда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихииКоманда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихииSQALab
 
API. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советовAPI. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советовSQALab
 
Добиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестовДобиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестовSQALab
 
Делаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIsДелаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIsSQALab
 
Вредные привычки в тест-менеджменте
Вредные привычки в тест-менеджментеВредные привычки в тест-менеджменте
Вредные привычки в тест-менеджментеSQALab
 
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизацииМощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизацииSQALab
 
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеSQALab
 
Стили лидерства и тестирование
Стили лидерства и тестированиеСтили лидерства и тестирование
Стили лидерства и тестированиеSQALab
 
"Давайте не будем про качество"
"Давайте не будем про качество""Давайте не будем про качество"
"Давайте не будем про качество"SQALab
 
Apache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектовApache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектовSQALab
 
Тестирование геолокационных систем
Тестирование геолокационных системТестирование геолокационных систем
Тестирование геолокационных системSQALab
 
Лидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопросЛидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопросSQALab
 
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...SQALab
 

More from SQALab (20)

Готовим стажировку
Готовим стажировкуГотовим стажировку
Готовим стажировку
 
Куда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщикаКуда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщика
 
Оптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержкиОптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержки
 
Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программированияАвтоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования
 
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
 
Continuous performance testing
Continuous performance testingContinuous performance testing
Continuous performance testing
 
Конфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нуженКонфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нужен
 
Команда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихииКоманда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихии
 
API. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советовAPI. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советов
 
Добиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестовДобиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестов
 
Делаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIsДелаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIs
 
Вредные привычки в тест-менеджменте
Вредные привычки в тест-менеджментеВредные привычки в тест-менеджменте
Вредные привычки в тест-менеджменте
 
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизацииМощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
 
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
 
Стили лидерства и тестирование
Стили лидерства и тестированиеСтили лидерства и тестирование
Стили лидерства и тестирование
 
"Давайте не будем про качество"
"Давайте не будем про качество""Давайте не будем про качество"
"Давайте не будем про качество"
 
Apache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектовApache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектов
 
Тестирование геолокационных систем
Тестирование геолокационных системТестирование геолокационных систем
Тестирование геолокационных систем
 
Лидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопросЛидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопрос
 
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
 

Инструментация среды исполнения в арсенале тестировщика

  • 1. www.ct-po.ru info@ct-po.ru Астахов Лев г. Томск, Россия Инструментация среды исполнения в арсенале тестировщика XIX Международная конференция по вопросам качества программного обеспечения sqadays.com
  • 2. Что можно улучшить в процессе функционального тестирования приложений? Инструментация среды исполнения в арсенале тестировщика
  • 3. Уменьшение трудозатрат на исправление продукта в случае падения тестов. Инструментация среды исполнения в арсенале тестировщика
  • 4. W hat? logger.debug("Entering try block"); try { logger.debug("Printing 'hello world'"); System.out("Hello, World!"); logger.debug("Printed 'hello world'"); } catch (Exception e) { logger.error(e.toString()); } finally (Exception e) { logger.debug("Exiting try block"); } Инструментация среды исполнения в арсенале тестировщика
  • 5. Инструментация среды исполнения в арсенале тестировщика
  • 7. Выполнение управляемого кода (Java и .NET программ) Инструментация среды исполнения в арсенале тестировщика Режим ядра ОС JF Пользовательский режим ОС Среда исполнения (Java/.NET/… runtime) Приложение (Java/.NET/… runtime) Сторонние библиотеки (Java/.NET/… runtime) Неуправляемы й код
  • 8. Инструментация среды исполнения в арсенале тестировщика Контроль за исполнением кода
  • 9. Контроль за исполнением кода Инструментация среды исполнения в арсенале тестировщика
  • 10. Инструментация среды исполнения в арсенале тестировщика Контроль за исполнением кода
  • 11. Инструментация среды исполнения в арсенале тестировщика Контроль за исполнением кода
  • 12. Инструментация среды исполнения в арсенале тестировщика Контроль за исполнением кода
  • 13. Инструментация среды исполнения в арсенале тестировщика Контроль за исполнением кода
  • 14. Уровень среды исполнения Инструментация среды исполнения в арсенале тестировщика
  • 15. Среда исполнения Java Основная часть логики среды исполнения Java Находится в <JAVA_RUNTIME_DIR>/jre/lib/rt.jar И это самый обычный java архив, ничем не отличающийся от пользовательских приложений. Более того, начиная с JDK 1.7.0.15, Oracle включает в поставку JDK Исходный код runtime находится в <JDK_DIR>/src.zip Чтобы изменить любой класс среды исполнения java, достаточно, внеся изменения в исходный код нужного класса из <JDK_DIR>/src.zip, скомпилировать его с помощью java и положить скомпилированный файл класса в <JAVA_RUNTIME_DIR>/jre/lib/rt.jar Инструментация среды исполнения в арсенале тестировщика
  • 16. Примеры изменений в среде исполнения Добавление своего кода в среду исполнения класс, выполняющий запись и обработку событий java.lang.InstrumentationHelper public class InstrumentationHelper { … public static void Log(String message) { … } public static boolean getInterceptMode() { … } public static void setInterceptMode(boolean mode) { … } public static boolean copyFile(string filePath) { … } … } Инструментация среды исполнения в арсенале тестировщика
  • 17. Изменение существующих классов: взаимодействие с внешней средой java.io.System – работа с потоками stdin, stdout и stderr, переменными окружения, сборщик мусора, загрузка динамических библиотек java.io.File – работа с файловой системой java.lang.Runtime – запуск процессов java.net.java.net.InetAddress – разрешение сетевых имён (DNS) java.lang.ClassLoader – загрузка классов java.net.HttpURLConnection – веб-сессии java.lang.Thread – порождение и завершение потоков (threads) Инструментация среды исполнения в арсенале тестировщика Примеры изменений в среде исполнения
  • 18. Изменение существующих классов: java.lang.Runtime public Process exec(String[] cmdarray, String[] envp, File dir) throws IOException { return new ProcessBuilder(cmdarray) .environment(envp) .directory(dir) .start(); } Инструментация среды исполнения в арсенале тестировщика Примеры изменений в среде исполнения
  • 19. Изменение существующих классов: java.lang.Runtime public Process exec(String[] cmdarray, String[] envp, File dir) throws IOException { InstrumentationHelper.log(String.format("%s %s %s", InstrumentationHelper.StringJoin(cmdarray, ","), InstrumentationHelper.StringJoin(envp, ","), ((dir == null) ? "“ : dir.toString()))); return new ProcessBuilder(cmdarray) .environment(envp) .directory(dir) .start(); } Инструментация среды исполнения в арсенале тестировщика Примеры изменений в среде исполнения
  • 20. Модификация среды исполнения .NETКак и в случае со средой исполнения Java, основная логика .NET runtime, GAC (Global Assembly Cache) – обычные .NET приложения (DLL - динамические библиотеки), которые модифицируются таким же образом, как и пользовательские. Большинство сборок GAC находится в C:WindowsMicrosoft.NETassemblyGAC_MSIL Платформозависимые сборки находятся в: C:WindowsMicrosoft.NETassemblyGAC_32 C:WindowsMicrosoft.NETassemblyGAC_64 Платформозависимые они потому, что либо там неуправляемый код присутствует, либо эти сборки работают с завязкой на конкретный размер платформозависимых типов данных. Инструментация среды исполнения в арсенале тестировщика
  • 21. Поиск нужной сборки Process Explorer покажет, какая именно сборка используется целевым приложением Инструментация среды исполнения в арсенале тестировщика
  • 22. Модификация среды исполнения .NET Инструментация среды исполнения в арсенале тестировщика
  • 23. Модификация на уровне IL assembly (вывод ildasm == вход ilasm) .method public hidebysig static void WriteLine(string 'value') cil managed noinlining { .permissionset linkcheck = {class 'System.Security.Permissions.HostProtectionAttribute, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' = {property bool 'UI' = bool(true)}} // Размер кода: 12 (0xc) .maxstack 8 IL_0000: call class System.IO.TextWriter System.Console::get_Out() IL_0005: ldarg.0 IL_0006: callvirt instance void System.IO.TextWriter::WriteLine(string) IL_000b: ret } // end of method Console::WriteLine Инструментация среды исполнения в арсенале тестировщика Модификация среды исполнения .NET
  • 24. Инструментация среды исполнения в арсенале тестировщика Модификация среды исполнения .NET
  • 25. Инструментация среды исполнения в арсенале тестировщика Модификация среды исполнения .NET
  • 26. Инструментация среды исполнения в арсенале тестировщика Модификация среды исполнения .NET
  • 27. Инструментация среды исполнения в арсенале тестировщика Подводные камни Модификация среды исполнения .NET
  • 28. За пределами Java и .NET Python – создается отдельная сборка и скрипты вызываются из него. Можно настроить посредством virtualenv Другие технические решения – надо изучать, и находить те, где трудозатраты от изменения среды исполнения окупятся пользой для разработки, отладки и тестирования . Инструментация среды исполнения в арсенале тестировщика
  • 29. Итог Модификация среды исполнения не решает всех проблем QA команды, но может занять достойное место среди инструментов: можно найти много сценариев для применения этого подхода. Модификация среды исполнения не является сильно сложным процессом, стенд для функционального тестирования с модифицированной средой исполнения можно собрать за несколько дней, а пользоваться постоянно, с минимальной необходимостью поддержки тестового стенда. Инструментация среды исполнения в арсенале тестировщика
  • 30. Материалы по теме • Erez Metula, Managed Code Rootkits: Hooking into Runtime Environments www.amazon.com/Managed-Code-Rootkits-Hooking-Environments/dp/1597495743 • Reflexil, The opensource .NET Assembly Editor www.reflexil.net • .NET CLR Injection: Modify IL Code during Run-time www.codeproject.com/Articles/463508/NET-CLR-Injection-Modify-IL-Code-during-Run-time • Kazuhiro Yamato, Toyo Abe A Runtime Code Modification Method for Application Programs www.kernel.org/doc/ols/2008/ols2008v2-pages-245-254.pdf • Dealing with runtime bytecode modification www.ibm.com/support/knowledgecenter/api/content/nl/ru/SSYKE2_7.0.0/com.ibm.java.win.70.doc/diag/tools/shcpd_runtime_bytecode_mod.ht ml Инструментация среды исполнения в арсенале тестировщика
  • 31. Спасибо за внимание! www.ct-po.ru info@ct-po.ru Инструментация среды исполнения в арсенале тестировщика

Editor's Notes

  1. To change color theme go to Design tab!