Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

8,604 views

Published on

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

Published in: Education
  • Be the first to comment

  • Be the first to like this

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

  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 Инструментация среды исполнения в арсенале тестировщика

×