O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

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

8.641 visualizações

Publicada em

Доклад Льва Астахова на конференции SQA Days-19, 20-21 мая 2016 г., Санкт-Петербург

Publicada em: Educação
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

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

  1. 1. www.ct-po.ru info@ct-po.ru Астахов Лев г. Томск, Россия Инструментация среды исполнения в арсенале тестировщика XIX Международная конференция по вопросам качества программного обеспечения sqadays.com
  2. 2. Что можно улучшить в процессе функционального тестирования приложений? Инструментация среды исполнения в арсенале тестировщика
  3. 3. Уменьшение трудозатрат на исправление продукта в случае падения тестов. Инструментация среды исполнения в арсенале тестировщика
  4. 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. 5. Инструментация среды исполнения в арсенале тестировщика
  6. 6. Глоссарий: Инструментация среды исполнения в арсенале тестировщика
  7. 7. Выполнение управляемого кода (Java и .NET программ) Инструментация среды исполнения в арсенале тестировщика Режим ядра ОС JF Пользовательский режим ОС Среда исполнения (Java/.NET/… runtime) Приложение (Java/.NET/… runtime) Сторонние библиотеки (Java/.NET/… runtime) Неуправляемы й код
  8. 8. Инструментация среды исполнения в арсенале тестировщика Контроль за исполнением кода
  9. 9. Контроль за исполнением кода Инструментация среды исполнения в арсенале тестировщика
  10. 10. Инструментация среды исполнения в арсенале тестировщика Контроль за исполнением кода
  11. 11. Инструментация среды исполнения в арсенале тестировщика Контроль за исполнением кода
  12. 12. Инструментация среды исполнения в арсенале тестировщика Контроль за исполнением кода
  13. 13. Инструментация среды исполнения в арсенале тестировщика Контроль за исполнением кода
  14. 14. Уровень среды исполнения Инструментация среды исполнения в арсенале тестировщика
  15. 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. 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. 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. 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. 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. 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. 21. Поиск нужной сборки Process Explorer покажет, какая именно сборка используется целевым приложением Инструментация среды исполнения в арсенале тестировщика
  22. 22. Модификация среды исполнения .NET Инструментация среды исполнения в арсенале тестировщика
  23. 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. 24. Инструментация среды исполнения в арсенале тестировщика Модификация среды исполнения .NET
  25. 25. Инструментация среды исполнения в арсенале тестировщика Модификация среды исполнения .NET
  26. 26. Инструментация среды исполнения в арсенале тестировщика Модификация среды исполнения .NET
  27. 27. Инструментация среды исполнения в арсенале тестировщика Подводные камни Модификация среды исполнения .NET
  28. 28. За пределами Java и .NET Python – создается отдельная сборка и скрипты вызываются из него. Можно настроить посредством virtualenv Другие технические решения – надо изучать, и находить те, где трудозатраты от изменения среды исполнения окупятся пользой для разработки, отладки и тестирования . Инструментация среды исполнения в арсенале тестировщика
  29. 29. Итог Модификация среды исполнения не решает всех проблем QA команды, но может занять достойное место среди инструментов: можно найти много сценариев для применения этого подхода. Модификация среды исполнения не является сильно сложным процессом, стенд для функционального тестирования с модифицированной средой исполнения можно собрать за несколько дней, а пользоваться постоянно, с минимальной необходимостью поддержки тестового стенда. Инструментация среды исполнения в арсенале тестировщика
  30. 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. 31. Спасибо за внимание! www.ct-po.ru info@ct-po.ru Инструментация среды исполнения в арсенале тестировщика

×