От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
Инструментация среды исполнения в арсенале тестировщика
1. www.ct-po.ru
info@ct-po.ru
Астахов Лев
г. Томск, Россия
Инструментация среды
исполнения
в арсенале тестировщика
XIX Международная конференция
по вопросам качества программного обеспечения
sqadays.com
2. Что можно улучшить в процессе
функционального тестирования
приложений?
Инструментация среды исполнения в арсенале тестировщика
7. Выполнение управляемого кода
(Java и .NET программ)
Инструментация среды исполнения в арсенале тестировщика
Режим ядра ОС
JF
Пользовательский режим ОС
Среда исполнения (Java/.NET/… runtime)
Приложение
(Java/.NET/…
runtime)
Сторонние
библиотеки
(Java/.NET/…
runtime)
Неуправляемы
й код
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 покажет, какая именно сборка используется целевым приложением
Инструментация среды исполнения в арсенале тестировщика
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
Инструментация среды исполнения в арсенале тестировщика