31
www.ct- po.ru info@ct- po.ru Астахов Лев г. Томск, Россия Инструментация среды исполнения в арсенале тестировщика XIX Международная конференция по вопросам качества программного обеспечения sqadays.com

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

  • Upload
    sqalab

  • View
    8.034

  • Download
    3

Embed Size (px)

Citation preview

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

[email protected]

Астахов Левг. Томск, Россия

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

в арсенале тестировщика

XIX Международная конференция по вопросам качества программного обеспечения

sqadays.com

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

Что можно улучшить в процессе функционального тестирования

приложений?

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

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

Уменьшение трудозатрат на исправление продукта в случае

падения тестов.

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

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

What?

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

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

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

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

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

Глоссарий:

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

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

Выполнение управляемого кода(Java и .NET программ)

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

Режим ядра ОС

JF

Пользовательский режим ОС

Среда исполнения (Java/.NET/… runtime)

Приложение(Java/.NET/…

runtime)

Сторонние библиотеки(Java/.NET/…

runtime)

Неуправляемый код

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

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

Контроль за исполнением кода

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

Контроль за исполнением кода

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

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

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

Контроль за исполнением кода

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

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

Контроль за исполнением кода

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

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

Контроль за исполнением кода

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

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

Контроль за исполнением кода

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

Уровень среды исполнения

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

Page 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

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

Page 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) { … }…

}

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

Page 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)

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

Примеры изменений в среде исполнения

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

Изменение существующих классов: java.lang.Runtime

public Process exec(String[] cmdarray, String[] envp, File dir) throws IOException {

return new ProcessBuilder(cmdarray) .environment(envp) .directory(dir) .start(); }

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

Примеры изменений в среде исполнения

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

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

Примеры изменений в среде исполнения

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

Модификация среды исполнения .NETКак и в случае со средой исполнения Java,

основная логика .NET runtime, GAC (Global Assembly Cache) – обычные .NET приложения (DLL - динамические библиотеки), которые модифицируются таким же образом, как и пользовательские.

Большинство сборок GAC находится в C:\Windows\Microsoft.NET\assembly\GAC_MSIL

Платформозависимые сборки находятся в: C:\Windows\Microsoft.NET\assembly\GAC_32\C:\Windows\Microsoft.NET\assembly\GAC_64\

Платформозависимые они потому, что либо там неуправляемый код присутствует, либо эти сборки работают с завязкой на конкретный размер платформозависимых типов данных.

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

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

Поиск нужной сборкиProcess Explorer покажет, какая именно сборка используется целевым приложением

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

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

Модификация среды исполнения .NET

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

Page 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 8IL_0000: call class System.IO.TextWriter System.Console::get_Out()IL_0005: ldarg.0IL_0006: callvirt instance void System.IO.TextWriter::WriteLine(string)IL_000b: ret} // end of method Console::WriteLine

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

Модификация среды исполнения .NET

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

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

Модификация среды исполнения .NET

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

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

Модификация среды исполнения .NET

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

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

Модификация среды исполнения .NET

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

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

Подводные камни

Модификация среды исполнения .NET

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

За пределами Java и .NET

Python – создается отдельная сборка и скрипты вызываются из него.

Можно настроить посредством virtualenv

Другие технические решения – надо изучать, и находить те, где трудозатраты от изменения

среды исполнения окупятся пользой для разработки, отладки и тестирования .

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

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

ИтогМодификация среды исполнения не решает всех

проблемQA команды, но может занять достойное место среди

инструментов:можно найти много сценариев для применения этого

подхода.

Модификация среды исполнения не является сильно сложным процессом, стенд для функционального

тестирования с модифицированной средой исполнения можно собрать за несколько дней, а пользоваться

постоянно, с минимальной необходимостью поддержки тестового стенда.

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

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

Материалы по теме • Erez Metula, Managed Code Rootkits: Hooking into Runtime

Environmentswww.amazon.com/Managed-Code-Rootkits-Hooking-Environments/dp/1597495743

• Reflexil, The opensource .NET Assembly Editorwww.reflexil.net

• .NET CLR Injection: Modify IL Code during Run-timewww.codeproject.com/Articles/463508/NET-CLR-Injection-Modify-IL-Code-during-Run-time

• Kazuhiro Yamato, Toyo Abe A Runtime Code Modification Method for Application

Programswww.kernel.org/doc/ols/2008/ols2008v2-pages-245-254.pdf

• Dealing with runtime bytecode modificationwww.ibm.com/support/knowledgecenter/api/content/nl/ru/SSYKE2_7.0.0/com.ibm.java.win.70.doc/diag/tools/

shcpd_runtime_bytecode_mod.html

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

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

Спасибо за внимание!

[email protected]

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