sqadays 8-barancev
TRANSCRIPT
![Page 1: Sqadays 8-barancev](https://reader036.vdocuments.net/reader036/viewer/2022081519/557ed7afd8b42a815a8b4a68/html5/thumbnails/1.jpg)
Какое дело тестировщикамдо исходного кода?Алексей Баранцев, Software-Testing.Ru
19-20 ноября 2010, Санкт-Петербург
![Page 2: Sqadays 8-barancev](https://reader036.vdocuments.net/reader036/viewer/2022081519/557ed7afd8b42a815a8b4a68/html5/thumbnails/2.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022081519/557ed7afd8b42a815a8b4a68/html5/thumbnails/3.jpg)
Что можно делать с исходным кодом?
![Page 4: Sqadays 8-barancev](https://reader036.vdocuments.net/reader036/viewer/2022081519/557ed7afd8b42a815a8b4a68/html5/thumbnails/4.jpg)
Что можно делатьс исходным кодом?
Читать / анализировать глазами автоматизированный статический анализ автоматизированный динамический анализ
Модифицировать статически динамически
![Page 5: Sqadays 8-barancev](https://reader036.vdocuments.net/reader036/viewer/2022081519/557ed7afd8b42a815a8b4a68/html5/thumbnails/5.jpg)
Что можно делатьс исходным кодом?
Статический анализ Динамический анализ Статическая модификация Динамическая модификация
![Page 6: Sqadays 8-barancev](https://reader036.vdocuments.net/reader036/viewer/2022081519/557ed7afd8b42a815a8b4a68/html5/thumbnails/6.jpg)
Зачем?
![Page 7: Sqadays 8-barancev](https://reader036.vdocuments.net/reader036/viewer/2022081519/557ed7afd8b42a815a8b4a68/html5/thumbnails/7.jpg)
Читаем код глазами
![Page 8: Sqadays 8-barancev](https://reader036.vdocuments.net/reader036/viewer/2022081519/557ed7afd8b42a815a8b4a68/html5/thumbnails/8.jpg)
Что такое «исходный код»?
Собственно код программы на ЯП Запросы к БД, триггеры, «хранимки»
Дизайн / верстка
Ресурсные файлы Внутренние настроечные файлы
Код «чужих» используемых компонентов
![Page 9: Sqadays 8-barancev](https://reader036.vdocuments.net/reader036/viewer/2022081519/557ed7afd8b42a815a8b4a68/html5/thumbnails/9.jpg)
Читаем код глазами
Code review могут делать тестировщики! Первичная проверка локализации – чтение
ресурсных файлов, желательно с инструментом проверки орфографии
Чтение комментариев в коде «этого никогда не должно случиться!»
Поиск чего-нибудь «подозрительного» http://www.fujinonbinos.com/
![Page 10: Sqadays 8-barancev](https://reader036.vdocuments.net/reader036/viewer/2022081519/557ed7afd8b42a815a8b4a68/html5/thumbnails/10.jpg)
![Page 11: Sqadays 8-barancev](https://reader036.vdocuments.net/reader036/viewer/2022081519/557ed7afd8b42a815a8b4a68/html5/thumbnails/11.jpg)
Статический анализ кода
![Page 12: Sqadays 8-barancev](https://reader036.vdocuments.net/reader036/viewer/2022081519/557ed7afd8b42a815a8b4a68/html5/thumbnails/12.jpg)
Как узнать, что изменилось?
Beyond Compare Compare It!
![Page 13: Sqadays 8-barancev](https://reader036.vdocuments.net/reader036/viewer/2022081519/557ed7afd8b42a815a8b4a68/html5/thumbnails/13.jpg)
Компиляция «с ворнингами»
Анализ журнала компиляции Повышение уровня «подозрительности»
компилятора / интерпретатора use strict; use warnings; -T (Perl) -Wall, -Wextra, -Werror (С/С++) -Xlint (Java)
![Page 14: Sqadays 8-barancev](https://reader036.vdocuments.net/reader036/viewer/2022081519/557ed7afd8b42a815a8b4a68/html5/thumbnails/14.jpg)
Анализ сложности кода
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](https://reader036.vdocuments.net/reader036/viewer/2022081519/557ed7afd8b42a815a8b4a68/html5/thumbnails/15.jpg)
Поиск «подозрительных мест»
Автоматизированный сквозной анализ кода, отчёт о «подозрительных» местах PMD, FindBugs (Java) FxCop (.Net)
Ручной целенаправленный поиск NDepend
![Page 16: Sqadays 8-barancev](https://reader036.vdocuments.net/reader036/viewer/2022081519/557ed7afd8b42a815a8b4a68/html5/thumbnails/16.jpg)
Примеры «подозрительных мест»
public void doSomething() {try {
FileInputStream fis =new FileInputStream("file.txt");
} catch (IOException ioe) {// not good
}}
![Page 17: Sqadays 8-barancev](https://reader036.vdocuments.net/reader036/viewer/2022081519/557ed7afd8b42a815a8b4a68/html5/thumbnails/17.jpg)
Примеры «подозрительных мест»
public class Foo {public void bar() {
System.exit(0);}
}
![Page 18: Sqadays 8-barancev](https://reader036.vdocuments.net/reader036/viewer/2022081519/557ed7afd8b42a815a8b4a68/html5/thumbnails/18.jpg)
Поиск потенциальных ошибок
Неинициализированные переменные Проход по нулевому указателю Выход за границы массива Отсутствие проверки полученных от
пользователя данных перед использованием
…
![Page 19: Sqadays 8-barancev](https://reader036.vdocuments.net/reader036/viewer/2022081519/557ed7afd8b42a815a8b4a68/html5/thumbnails/19.jpg)
Анализ зависимостей
Пути распространения влияния дефектов изменений
![Page 20: Sqadays 8-barancev](https://reader036.vdocuments.net/reader036/viewer/2022081519/557ed7afd8b42a815a8b4a68/html5/thumbnails/20.jpg)
Динамический анализ кода
![Page 21: Sqadays 8-barancev](https://reader036.vdocuments.net/reader036/viewer/2022081519/557ed7afd8b42a815a8b4a68/html5/thumbnails/21.jpg)
Измерение покрытия кода
Среды разработки (Eclipse, MSVS) Специализированные инструменты
Clover, EMMA, JCoverage, … (Java) Ncover (.Net) Flexcover (Flex) rcov (Ruby) PHPCoverage (PHP) xCover (C/C++)
![Page 22: Sqadays 8-barancev](https://reader036.vdocuments.net/reader036/viewer/2022081519/557ed7afd8b42a815a8b4a68/html5/thumbnails/22.jpg)
Измерение покрытия кода
Функции Строки Операторы Ветви Предикаты Дизъюнкты Пути
![Page 23: Sqadays 8-barancev](https://reader036.vdocuments.net/reader036/viewer/2022081519/557ed7afd8b42a815a8b4a68/html5/thumbnails/23.jpg)
Автоподбор тестов
Pex (.Net)
![Page 24: Sqadays 8-barancev](https://reader036.vdocuments.net/reader036/viewer/2022081519/557ed7afd8b42a815a8b4a68/html5/thumbnails/24.jpg)
Профилирование и мониторинг
Среды разработки (Eclipse, MSVS) JVM Tooling Interface Специализированные инструменты
YourKit, Jprobe, AppPerfect (Java) JetBrains dotTrace (.Net)
![Page 25: Sqadays 8-barancev](https://reader036.vdocuments.net/reader036/viewer/2022081519/557ed7afd8b42a815a8b4a68/html5/thumbnails/25.jpg)
Профилирование и мониторинг
![Page 26: Sqadays 8-barancev](https://reader036.vdocuments.net/reader036/viewer/2022081519/557ed7afd8b42a815a8b4a68/html5/thumbnails/26.jpg)
Статическая модификация кода
![Page 27: Sqadays 8-barancev](https://reader036.vdocuments.net/reader036/viewer/2022081519/557ed7afd8b42a815a8b4a68/html5/thumbnails/27.jpg)
Проверки в коде: ассерты
void foo() {for (...) {
if (...) return;} // Execution should never reach this point! assert false;
}
![Page 28: Sqadays 8-barancev](https://reader036.vdocuments.net/reader036/viewer/2022081519/557ed7afd8b42a815a8b4a68/html5/thumbnails/28.jpg)
Фиктивные объекты
Стабы заглушки на внешние интерфейсы
Моки заглушки на внутренние интерфейсы
Фейки искусственное управляемое окружение
![Page 29: Sqadays 8-barancev](https://reader036.vdocuments.net/reader036/viewer/2022081519/557ed7afd8b42a815a8b4a68/html5/thumbnails/29.jpg)
Динамическая модификация кода
![Page 30: Sqadays 8-barancev](https://reader036.vdocuments.net/reader036/viewer/2022081519/557ed7afd8b42a815a8b4a68/html5/thumbnails/30.jpg)
Аспектно-ориентированное программирование
AspectJ AspectWerkz Hyper/J JAC JMangler MixJuice PROSE ArchJava
![Page 31: Sqadays 8-barancev](https://reader036.vdocuments.net/reader036/viewer/2022081519/557ed7afd8b42a815a8b4a68/html5/thumbnails/31.jpg)
Аспектно-ориентированное программирование
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](https://reader036.vdocuments.net/reader036/viewer/2022081519/557ed7afd8b42a815a8b4a68/html5/thumbnails/32.jpg)
Аспектно-ориентированное программирование
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](https://reader036.vdocuments.net/reader036/viewer/2022081519/557ed7afd8b42a815a8b4a68/html5/thumbnails/33.jpg)
Анализ покрытия кода: EMMA
![Page 34: Sqadays 8-barancev](https://reader036.vdocuments.net/reader036/viewer/2022081519/557ed7afd8b42a815a8b4a68/html5/thumbnails/34.jpg)
Анализ покрытия кода: Clover
![Page 35: Sqadays 8-barancev](https://reader036.vdocuments.net/reader036/viewer/2022081519/557ed7afd8b42a815a8b4a68/html5/thumbnails/35.jpg)
Статический анализ: FindBugs
![Page 36: Sqadays 8-barancev](https://reader036.vdocuments.net/reader036/viewer/2022081519/557ed7afd8b42a815a8b4a68/html5/thumbnails/36.jpg)
The End
![Page 37: Sqadays 8-barancev](https://reader036.vdocuments.net/reader036/viewer/2022081519/557ed7afd8b42a815a8b4a68/html5/thumbnails/37.jpg)
Вопросы?
Алексей Баранцев Software-Testing.Ru http://software-testing.ru/trainings/