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

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

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Алексей Баранцев -- Какое дело тестировщикам до исходного кода?

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

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

Page 2: Алексей Баранцев -- Какое дело тестировщикам до исходного кода?

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: Алексей Баранцев -- Какое дело тестировщикам до исходного кода?

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

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

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

Page 4: Алексей Баранцев -- Какое дело тестировщикам до исходного кода?

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

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

Page 5: Алексей Баранцев -- Какое дело тестировщикам до исходного кода?

Зачем?

Page 6: Алексей Баранцев -- Какое дело тестировщикам до исходного кода?

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

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

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

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

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

Page 7: Алексей Баранцев -- Какое дело тестировщикам до исходного кода?

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

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

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

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

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

Page 8: Алексей Баранцев -- Какое дело тестировщикам до исходного кода?
Page 9: Алексей Баранцев -- Какое дело тестировщикам до исходного кода?

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

Page 10: Алексей Баранцев -- Какое дело тестировщикам до исходного кода?

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

Beyond Compare Compare It!

Page 11: Алексей Баранцев -- Какое дело тестировщикам до исходного кода?

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

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

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

Page 12: Алексей Баранцев -- Какое дело тестировщикам до исходного кода?

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

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

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

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

Page 13: Алексей Баранцев -- Какое дело тестировщикам до исходного кода?

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

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

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

Page 14: Алексей Баранцев -- Какое дело тестировщикам до исходного кода?

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

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

Page 15: Алексей Баранцев -- Какое дело тестировщикам до исходного кода?

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

public void doSomething() {try {

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

} catch (IOException ioe) {// not good

}}

Page 16: Алексей Баранцев -- Какое дело тестировщикам до исходного кода?

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

public class Foo {public void bar() {

System.exit(0);}

}

Page 17: Алексей Баранцев -- Какое дело тестировщикам до исходного кода?

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

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

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

Page 18: Алексей Баранцев -- Какое дело тестировщикам до исходного кода?

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

Page 19: Алексей Баранцев -- Какое дело тестировщикам до исходного кода?

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

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

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

Page 20: Алексей Баранцев -- Какое дело тестировщикам до исходного кода?

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

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

Page 21: Алексей Баранцев -- Какое дело тестировщикам до исходного кода?

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

Pex (.Net)

Page 22: Алексей Баранцев -- Какое дело тестировщикам до исходного кода?

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

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

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

Page 23: Алексей Баранцев -- Какое дело тестировщикам до исходного кода?

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

Page 24: Алексей Баранцев -- Какое дело тестировщикам до исходного кода?

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

Page 25: Алексей Баранцев -- Какое дело тестировщикам до исходного кода?

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

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

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

}

Page 26: Алексей Баранцев -- Какое дело тестировщикам до исходного кода?

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

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

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

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

Page 27: Алексей Баранцев -- Какое дело тестировщикам до исходного кода?

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

Page 28: Алексей Баранцев -- Какое дело тестировщикам до исходного кода?

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

AspectJ AspectWerkz Hyper/J JAC JMangler MixJuice PROSE ArchJava

Page 29: Алексей Баранцев -- Какое дело тестировщикам до исходного кода?

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

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 30: Алексей Баранцев -- Какое дело тестировщикам до исходного кода?

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

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 31: Алексей Баранцев -- Какое дело тестировщикам до исходного кода?

Здесь была живая демонстрация

Во время конференции в конце доклада была живая демонстрация инструментов EMMA, Clover и FindBugs, но на SlideShare она, увы, не попала.

Приходите на тренинги и вы всё увидите

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