37
Какое дело тестировщикам до исходного кода? Алексей Баранцев, Software-Testing.Ru 19-20 ноября 2010, Санкт-Петербург

Sqadays 8-barancev

Embed Size (px)

Citation preview

Page 1: Sqadays 8-barancev

Какое дело тестировщикамдо исходного кода?Алексей Баранцев, Software-Testing.Ru

19-20 ноября 2010, Санкт-Петербург

Page 2: Sqadays 8-barancev

http://software-testing.ru/trainings/records

1. Основные техники функционального тестирования2. Модульное тестирование: техники и инструменты3. Тестирование защищенности веб-приложений4. Стандарты в области тестирования и их применение на практике5. Тестирование производительности веб-приложений

6. Работа с исходным программным кодом7. Функциональное тестирование на основе моделей8. Автоматизация функционального тестирования веб-приложений9. Функциональное тестирование на основе вариантов использования10. Управление требованиями, запросами на изменение и дефектами11. Инструменты автоматизации тестирования семейства Selenium 12. Тестирование методом свободного поиска (exploratory testing)13. Регрессионное тестирование14. Тестирование веб-сервисов15. Бесплатные и недорогие инструменты тестирования

Page 3: Sqadays 8-barancev

Что можно делать с исходным кодом?

Page 4: Sqadays 8-barancev

Что можно делатьс исходным кодом?

Читать / анализировать глазами автоматизированный статический анализ автоматизированный динамический анализ

Модифицировать статически динамически

Page 5: Sqadays 8-barancev

Что можно делатьс исходным кодом?

Статический анализ Динамический анализ Статическая модификация Динамическая модификация

Page 6: Sqadays 8-barancev

Зачем?

Page 7: Sqadays 8-barancev

Читаем код глазами

Page 8: Sqadays 8-barancev

Что такое «исходный код»?

Собственно код программы на ЯП Запросы к БД, триггеры, «хранимки»

Дизайн / верстка

Ресурсные файлы Внутренние настроечные файлы

Код «чужих» используемых компонентов

Page 9: Sqadays 8-barancev

Читаем код глазами

Code review могут делать тестировщики! Первичная проверка локализации – чтение

ресурсных файлов, желательно с инструментом проверки орфографии

Чтение комментариев в коде «этого никогда не должно случиться!»

Поиск чего-нибудь «подозрительного» http://www.fujinonbinos.com/

Page 10: Sqadays 8-barancev
Page 11: Sqadays 8-barancev

Статический анализ кода

Page 12: Sqadays 8-barancev

Как узнать, что изменилось?

Beyond Compare Compare It!

Page 13: Sqadays 8-barancev

Компиляция «с ворнингами»

Анализ журнала компиляции Повышение уровня «подозрительности»

компилятора / интерпретатора use strict; use warnings; -T (Perl) -Wall, -Wextra, -Werror (С/С++) -Xlint (Java)

Page 14: Sqadays 8-barancev

Анализ сложности кода

http://en.wikipedia.org/wiki/Cyclomatic_complexity http://kapustin-andrey.boom.ru/Materials/Metrics2.htm

Среды разработки (Eclipse, VSTS) Специализированные инструменты

PMD (Java) Saikuro (Ruby) Sonar (Java, …)

Page 15: Sqadays 8-barancev

Поиск «подозрительных мест»

Автоматизированный сквозной анализ кода, отчёт о «подозрительных» местах PMD, FindBugs (Java) FxCop (.Net)

Ручной целенаправленный поиск NDepend

Page 16: Sqadays 8-barancev

Примеры «подозрительных мест»

public void doSomething() {try {

FileInputStream fis =new FileInputStream("file.txt");

} catch (IOException ioe) {// not good

}}

Page 17: Sqadays 8-barancev

Примеры «подозрительных мест»

public class Foo {public void bar() {

System.exit(0);}

}

Page 18: Sqadays 8-barancev

Поиск потенциальных ошибок

Неинициализированные переменные Проход по нулевому указателю Выход за границы массива Отсутствие проверки полученных от

пользователя данных перед использованием

Page 19: Sqadays 8-barancev

Анализ зависимостей

Пути распространения влияния дефектов изменений

Page 20: Sqadays 8-barancev

Динамический анализ кода

Page 21: Sqadays 8-barancev

Измерение покрытия кода

Среды разработки (Eclipse, MSVS) Специализированные инструменты

Clover, EMMA, JCoverage, … (Java) Ncover (.Net) Flexcover (Flex) rcov (Ruby) PHPCoverage (PHP) xCover (C/C++)

Page 22: Sqadays 8-barancev

Измерение покрытия кода

Функции Строки Операторы Ветви Предикаты Дизъюнкты Пути

Page 23: Sqadays 8-barancev

Автоподбор тестов

Pex (.Net)

Page 24: Sqadays 8-barancev

Профилирование и мониторинг

Среды разработки (Eclipse, MSVS) JVM Tooling Interface Специализированные инструменты

YourKit, Jprobe, AppPerfect (Java) JetBrains dotTrace (.Net)

Page 25: Sqadays 8-barancev

Профилирование и мониторинг

Page 26: Sqadays 8-barancev

Статическая модификация кода

Page 27: Sqadays 8-barancev

Проверки в коде: ассерты

void foo() {for (...) {

if (...) return;} // Execution should never reach this point! assert false;

}

Page 28: Sqadays 8-barancev

Фиктивные объекты

Стабы заглушки на внешние интерфейсы

Моки заглушки на внутренние интерфейсы

Фейки искусственное управляемое окружение

Page 29: Sqadays 8-barancev

Динамическая модификация кода

Page 30: Sqadays 8-barancev

Аспектно-ориентированное программирование

AspectJ AspectWerkz Hyper/J JAC JMangler MixJuice PROSE ArchJava

Page 31: Sqadays 8-barancev

Аспектно-ориентированное программирование

public class TestClass {public void sayHello () {

System.out.println ("Hello, AOP");}public void sayAnyThing (String s) {

System.out.println (s);}public static void main (String[] args) {

sayHello ();sayAnyThing ("ok");

}}

Page 32: Sqadays 8-barancev

Аспектно-ориентированное программирование

public aspect MyAspect {public pointcut sayMethodCall ():

call (public void TestClass.say*() );

before(): sayMethodCall() {System.out.println("\n TestClass." +

thisJoinPointStaticPart.getSignature().getName() + "start..." );}after(): sayMethodCall() {

System.out.println("\n TestClass." + thisJoinPointStaticPart.getSignature().getName() + " end...");}

}

Page 33: Sqadays 8-barancev

Анализ покрытия кода: EMMA

Page 34: Sqadays 8-barancev

Анализ покрытия кода: Clover

Page 35: Sqadays 8-barancev

Статический анализ: FindBugs

Page 36: Sqadays 8-barancev

The End

Page 37: Sqadays 8-barancev

Вопросы?

Алексей Баранцев Software-Testing.Ru http://software-testing.ru/trainings/