Sqadays 8-barancev

Preview:

Citation preview

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

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

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

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

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

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

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

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

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

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

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

Зачем?

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

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

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

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

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

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

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

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

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

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

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

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

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

Beyond Compare Compare It!

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

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

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

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

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

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

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

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

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

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

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

public void doSomething() {try {

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

} catch (IOException ioe) {// not good

}}

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

public class Foo {public void bar() {

System.exit(0);}

}

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

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

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

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

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

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

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

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

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

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

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

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

Pex (.Net)

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

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

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

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

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

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

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

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

}

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

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

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

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

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

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

AspectJ AspectWerkz Hyper/J JAC JMangler MixJuice PROSE ArchJava

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

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

}}

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

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

}

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

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

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

The End

Вопросы?

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

Recommended