• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content

Loading…

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

Like this presentation? Why not share!

Sqadays 8-barancev

on

  • 1,446 views

 

Statistics

Views

Total Views
1,446
Views on SlideShare
749
Embed Views
697

Actions

Likes
0
Downloads
23
Comments
0

4 Embeds 697

http://testitquickly.com 623
http://it-study.by 63
http://www.it-study.by 10
http://readbox.info 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Sqadays 8-barancev Sqadays 8-barancev Presentation Transcript

    • Какое дело тестировщикамдо исходного кода?
      Алексей Баранцев, Software-Testing.Ru
      19-20 ноября 2010, Санкт-Петербург
    • http://software-testing.ru/trainings/records
      Основные техники функционального тестирования
      Модульное тестирование: техники и инструменты
      Тестирование защищенности веб-приложений
      Стандарты в области тестирования и их применение на практике
      Тестирование производительности веб-приложений
      Работа с исходным программным кодом
      Функциональное тестирование на основе моделей
      Автоматизация функционального тестирования веб-приложений
      Функциональное тестирование на основе вариантов использования
      Управление требованиями, запросами на изменение и дефектами
      Инструменты автоматизации тестирования семейства Selenium
      Тестирование методом свободного поиска (exploratorytesting)
      Регрессионное тестирование
      Тестирование веб-сервисов
      Бесплатные и недорогие инструменты тестирования
    • Что можно делать с исходным кодом?
    • Что можно делатьс исходным кодом?
      Читать / анализировать
      глазами
      автоматизированный статический анализ
      автоматизированный динамический анализ
      Модифицировать
      статически
      динамически
    • Что можно делатьс исходным кодом?
      Статический анализ
      Динамический анализ
      Статическая модификация
      Динамическая модификация
    • Зачем?
    • Читаем код глазами
    • Что такое «исходный код»?
      Собственно код программы на ЯП
      Запросы к БД, триггеры, «хранимки»
      Дизайн / верстка
      Ресурсные файлы
      Внутренние настроечные файлы
      Код «чужих» используемых компонентов
    • Читаем код глазами
      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 {
      FileInputStreamfis=
      newFileInputStream("file.txt");
      } catch (IOExceptionioe) {
      // 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)
      JetBrainsdotTrace (.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 pointcutsayMethodCall ():
      call (public void TestClass.say*() );
      before(): sayMethodCall() {
      System.out.println(" TestClass." + thisJoinPointStaticPart.getSignature().getName() + "start..." );
      }
      after(): sayMethodCall() {
      System.out.println(" TestClass." + thisJoinPointStaticPart.getSignature().getName() + " end...");
      }
      }
    • Анализ покрытия кода: EMMA
    • Анализ покрытия кода: Clover
    • Статический анализ: FindBugs
    • The End
    • Вопросы?
      Алексей Баранцев
      Software-Testing.Ru
      http://software-testing.ru/trainings/