SlideShare a Scribd company logo
1 of 12
Download to read offline
Использование Python для
 тестирования Си-кода
                         или

  Как               скрестить ужа с ежом
        успешно >
Кто я?
По образованию радиоинженер

Занимаюсь разработкой встраиваемых систем с 2000
года, пишу на Си и Python
(плюс иногда на C++)

Использую TDD в свой работе
Ситуация
• Проект стартовал в 2005 году,
  использовалось ручное тестирование
• В 2006 году в связи с расширением
  функциональности появилась нужда в
  значительном рефакторинге кода
• Нужны были тесты для защиты от
  последствий рефакторинга
Что у нас было
(-) Практически нулевые знания
   фреймворков для тестирования Си
(+) Уверенные знания как писать тесты на
   Python
(+) Опыт создания связки между Си и
   Python
Объект тестирования
Тестируем черный ящик
          [установка начального состояния]


                                             Выходные
Входное                                      воздействия
событие




      Логирование внутреннего состояния
Тестовая конфигурация
       Python                      Си


Запускатель               Обвертка для тестирования
   тестов

              Интерфейс          Тестируемый
              К Си коду          код
              (ctypes)



                          Динамическая библиотека
Тестовые сценарии         (.dll / .so)
Тестовые сценарии (*.test)
   Установка начальных состояний
   FSM = state_foo; …

   R: событие1
       W: реакция1
       W: реакция2
       W: реакция3

   R: событие2
       W: реакция4
       W: реакция5
       W: реакция6
Прогон тестов
Øscons test
Fifo cache loaded from file.
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
..............................................................................
----------------------------------------------------------------------
Ran 878 tests in 16.109s

OK
Fifo cache saved to file.
Если тест не проходит
FAIL: testfoobarpower-off-broken.test

[compare log from testfoobarpower-off-broken.test]

log: Fsm1:E_waiting_off

   4: R: button power-off

log: Fsm1:E_power_off

     **** Diff ****
   5: -        W: PowerControlDevice: ESTD_switch_on_ups
fifo: +        W: PowerControlDevice: ESTD_switch_off_ups

[/compare log from testfoobarpower-off-broken.test]

testfoobarpower-off-broken.test(5): AssertionError: Different packets
Результаты скрещивания
(+) На Python легко создать тестовую инфраструктуру
(+) Легко обрабатывать тестовые сценарии в текстовом
    виде
(-) Тесты могут работать медленно
(+) Мы использовали кеширование для преобразований
    «бинарные данные» ßà «текст» для ускорения
(-) Нужно писать связку между Python и Си
(+) есть готовые генераторы кода для связки (SWIG, SIP,
    boost.python, …)
(-) Плохо подходит для низкоуровневых unit-test
(+) нормально для тестирования черного ящика
Бельченко Александр (bialix)
Запорожье, 2012

alexander.belchenko@gmail.com

More Related Content

What's hot

[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux
[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux
[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/LinuxDefconRussia
 
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]Python Meetup
 
Practical Python Packaging / Стас Рудаков / Web Developer Wargaming
 Practical Python Packaging / Стас Рудаков / Web Developer Wargaming Practical Python Packaging / Стас Рудаков / Web Developer Wargaming
Practical Python Packaging / Стас Рудаков / Web Developer WargamingPython Meetup
 
Erlang killer features
Erlang killer featuresErlang killer features
Erlang killer featuresYuri Zhloba
 
Командная строка Unix
Командная строка UnixКомандная строка Unix
Командная строка UnixYandex
 
Статический анализ кода: борьба с удорожанием ошибок
Статический анализ кода: борьба с удорожанием ошибокСтатический анализ кода: борьба с удорожанием ошибок
Статический анализ кода: борьба с удорожанием ошибокAndrey Karpov
 
Проникновение в Docker с примерами
Проникновение в Docker с примерамиПроникновение в Docker с примерами
Проникновение в Docker с примерамиДмитрий Столяров
 
модульное тестирование для Perl. алексей шруб. зал 4
модульное тестирование для Perl. алексей шруб. зал 4модульное тестирование для Perl. алексей шруб. зал 4
модульное тестирование для Perl. алексей шруб. зал 4rit2011
 
Зачем программистам Ansible
Зачем программистам AnsibleЗачем программистам Ansible
Зачем программистам AnsibleDenis Honig
 
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...Badoo Development
 
Сладкое будущее: Phalcon и Zephir
Сладкое будущее: Phalcon и ZephirСладкое будущее: Phalcon и Zephir
Сладкое будущее: Phalcon и ZephirCodeFest
 
Введение в реверс-инжиниринг вредоносного ПО - Сергей Харюк
Введение в реверс-инжиниринг вредоносного ПО - Сергей ХарюкВведение в реверс-инжиниринг вредоносного ПО - Сергей Харюк
Введение в реверс-инжиниринг вредоносного ПО - Сергей ХарюкHackIT Ukraine
 
Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...
Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...
Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...Yandex
 

What's hot (15)

[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux
[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux
[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux
 
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]
 
Practical Python Packaging / Стас Рудаков / Web Developer Wargaming
 Practical Python Packaging / Стас Рудаков / Web Developer Wargaming Practical Python Packaging / Стас Рудаков / Web Developer Wargaming
Practical Python Packaging / Стас Рудаков / Web Developer Wargaming
 
Erlang killer features
Erlang killer featuresErlang killer features
Erlang killer features
 
Командная строка Unix
Командная строка UnixКомандная строка Unix
Командная строка Unix
 
Статический анализ кода: борьба с удорожанием ошибок
Статический анализ кода: борьба с удорожанием ошибокСтатический анализ кода: борьба с удорожанием ошибок
Статический анализ кода: борьба с удорожанием ошибок
 
Проникновение в Docker с примерами
Проникновение в Docker с примерамиПроникновение в Docker с примерами
Проникновение в Docker с примерами
 
модульное тестирование для Perl. алексей шруб. зал 4
модульное тестирование для Perl. алексей шруб. зал 4модульное тестирование для Perl. алексей шруб. зал 4
модульное тестирование для Perl. алексей шруб. зал 4
 
Зачем программистам Ansible
Зачем программистам AnsibleЗачем программистам Ansible
Зачем программистам Ansible
 
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
 
Python и Cython
Python и CythonPython и Cython
Python и Cython
 
Docker networking
Docker networkingDocker networking
Docker networking
 
Сладкое будущее: Phalcon и Zephir
Сладкое будущее: Phalcon и ZephirСладкое будущее: Phalcon и Zephir
Сладкое будущее: Phalcon и Zephir
 
Введение в реверс-инжиниринг вредоносного ПО - Сергей Харюк
Введение в реверс-инжиниринг вредоносного ПО - Сергей ХарюкВведение в реверс-инжиниринг вредоносного ПО - Сергей Харюк
Введение в реверс-инжиниринг вредоносного ПО - Сергей Харюк
 
Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...
Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...
Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...
 

Viewers also liked

Г.Печенкин "Есть ли польза от аналитика в интернет проекте?", DUMP-2014
Г.Печенкин "Есть ли польза от аналитика в интернет проекте?", DUMP-2014Г.Печенкин "Есть ли польза от аналитика в интернет проекте?", DUMP-2014
Г.Печенкин "Есть ли польза от аналитика в интернет проекте?", DUMP-2014it-people
 
Оптимизация на грани и за ней - Антон Патрушев, UNFCCC
Оптимизация на грани и за ней - Антон Патрушев, UNFCCCОптимизация на грани и за ней - Антон Патрушев, UNFCCC
Оптимизация на грани и за ней - Антон Патрушев, UNFCCCit-people
 
Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Яковенко Кирилл
 
Управление памятью в CPython
Управление памятью в CPythonУправление памятью в CPython
Управление памятью в CPythonAnton Patrushev
 
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...Anthony Marchenko
 
14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?
14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?
14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?HappyDev-lite
 
Join the python_side
Join the python_sideJoin the python_side
Join the python_sidePaul Dmitryev
 

Viewers also liked (8)

Г.Печенкин "Есть ли польза от аналитика в интернет проекте?", DUMP-2014
Г.Печенкин "Есть ли польза от аналитика в интернет проекте?", DUMP-2014Г.Печенкин "Есть ли польза от аналитика в интернет проекте?", DUMP-2014
Г.Печенкин "Есть ли польза от аналитика в интернет проекте?", DUMP-2014
 
Оптимизация на грани и за ней - Антон Патрушев, UNFCCC
Оптимизация на грани и за ней - Антон Патрушев, UNFCCCОптимизация на грани и за ней - Антон Патрушев, UNFCCC
Оптимизация на грани и за ней - Антон Патрушев, UNFCCC
 
Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3
 
Управление памятью в CPython
Управление памятью в CPythonУправление памятью в CPython
Управление памятью в CPython
 
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
 
14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?
14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?
14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?
 
Join the python_side
Join the python_sideJoin the python_side
Join the python_side
 
Jenny
JennyJenny
Jenny
 

Similar to Testing C code with Python

разработка бизнес приложений (8)
разработка бизнес приложений (8)разработка бизнес приложений (8)
разработка бизнес приложений (8)Alexander Gornik
 
Опыт использования Erlang в разработке многопользовательской игры
Опыт использования Erlang в разработке многопользовательской игрыОпыт использования Erlang в разработке многопользовательской игры
Опыт использования Erlang в разработке многопользовательской игрыYuri Zhloba
 
Юрий Жлоба - Опыт использования Erlang в разработке многопользовательской игры.
Юрий Жлоба -  Опыт использования Erlang в разработке многопользовательской игры.Юрий Жлоба -  Опыт использования Erlang в разработке многопользовательской игры.
Юрий Жлоба - Опыт использования Erlang в разработке многопользовательской игры.IT Share
 
Moscow Python Conf 2016. Почему 100% покрытие это плохо?
Moscow Python Conf 2016. Почему 100% покрытие это плохо?Moscow Python Conf 2016. Почему 100% покрытие это плохо?
Moscow Python Conf 2016. Почему 100% покрытие это плохо?Ivan Tsyganov
 
Использование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияИспользование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияSQALab
 
Java осень 2013 лекция 6
Java осень 2013 лекция 6Java осень 2013 лекция 6
Java осень 2013 лекция 6Technopark
 
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаSQALab
 
Froglogic Squish
Froglogic Squish Froglogic Squish
Froglogic Squish SQALab
 
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...CodeFest
 
Информационная Безопасность. Современные угрозы и области компетенций
Информационная Безопасность. Современные угрозы и области компетенцийИнформационная Безопасность. Современные угрозы и области компетенций
Информационная Безопасность. Современные угрозы и области компетенцийSerghei Epifantsew
 
ВЫБОР ТОЧКИ ВНЕДРЕНИЯ ДЛЯ ФАЗЗИНГА В ПАМЯТИ
ВЫБОР ТОЧКИ ВНЕДРЕНИЯ ДЛЯ ФАЗЗИНГА В ПАМЯТИВЫБОР ТОЧКИ ВНЕДРЕНИЯ ДЛЯ ФАЗЗИНГА В ПАМЯТИ
ВЫБОР ТОЧКИ ВНЕДРЕНИЯ ДЛЯ ФАЗЗИНГА В ПАМЯТИblagodarenko
 
static - defcon russia 20
static  - defcon russia 20static  - defcon russia 20
static - defcon russia 20DefconRussia
 
RDSDataSource: Чистые тесты на Swift
RDSDataSource: Чистые тесты на SwiftRDSDataSource: Чистые тесты на Swift
RDSDataSource: Чистые тесты на SwiftRAMBLER&Co
 
Опыт применения активных объектов во встраиваемых системах. Архитектурные асп...
Опыт применения активных объектов во встраиваемых системах. Архитектурные асп...Опыт применения активных объектов во встраиваемых системах. Архитектурные асп...
Опыт применения активных объектов во встраиваемых системах. Архитектурные асп...Sigma Software
 
Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Andrew Mayorov
 
Современный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтерыСовременный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтерыcorehard_by
 
Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1m2rus
 

Similar to Testing C code with Python (20)

разработка бизнес приложений (8)
разработка бизнес приложений (8)разработка бизнес приложений (8)
разработка бизнес приложений (8)
 
Опыт использования Erlang в разработке многопользовательской игры
Опыт использования Erlang в разработке многопользовательской игрыОпыт использования Erlang в разработке многопользовательской игры
Опыт использования Erlang в разработке многопользовательской игры
 
Юрий Жлоба - Опыт использования Erlang в разработке многопользовательской игры.
Юрий Жлоба -  Опыт использования Erlang в разработке многопользовательской игры.Юрий Жлоба -  Опыт использования Erlang в разработке многопользовательской игры.
Юрий Жлоба - Опыт использования Erlang в разработке многопользовательской игры.
 
Moscow Python Conf 2016. Почему 100% покрытие это плохо?
Moscow Python Conf 2016. Почему 100% покрытие это плохо?Moscow Python Conf 2016. Почему 100% покрытие это плохо?
Moscow Python Conf 2016. Почему 100% покрытие это плохо?
 
Использование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияИспользование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестирования
 
Java осень 2013 лекция 6
Java осень 2013 лекция 6Java осень 2013 лекция 6
Java осень 2013 лекция 6
 
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщика
 
Froglogic Squish
Froglogic Squish Froglogic Squish
Froglogic Squish
 
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
 
Информационная Безопасность. Современные угрозы и области компетенций
Информационная Безопасность. Современные угрозы и области компетенцийИнформационная Безопасность. Современные угрозы и области компетенций
Информационная Безопасность. Современные угрозы и области компетенций
 
Tomita
TomitaTomita
Tomita
 
ВЫБОР ТОЧКИ ВНЕДРЕНИЯ ДЛЯ ФАЗЗИНГА В ПАМЯТИ
ВЫБОР ТОЧКИ ВНЕДРЕНИЯ ДЛЯ ФАЗЗИНГА В ПАМЯТИВЫБОР ТОЧКИ ВНЕДРЕНИЯ ДЛЯ ФАЗЗИНГА В ПАМЯТИ
ВЫБОР ТОЧКИ ВНЕДРЕНИЯ ДЛЯ ФАЗЗИНГА В ПАМЯТИ
 
static - defcon russia 20
static  - defcon russia 20static  - defcon russia 20
static - defcon russia 20
 
RDSDataSource: Чистые тесты на Swift
RDSDataSource: Чистые тесты на SwiftRDSDataSource: Чистые тесты на Swift
RDSDataSource: Чистые тесты на Swift
 
Опыт применения активных объектов во встраиваемых системах. Архитектурные асп...
Опыт применения активных объектов во встраиваемых системах. Архитектурные асп...Опыт применения активных объектов во встраиваемых системах. Архитектурные асп...
Опыт применения активных объектов во встраиваемых системах. Архитектурные асп...
 
Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"
 
Современный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтерыСовременный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтеры
 
PowerShell
PowerShellPowerShell
PowerShell
 
бегун
бегунбегун
бегун
 
Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1
 

Testing C code with Python

  • 1. Использование Python для тестирования Си-кода или Как скрестить ужа с ежом успешно >
  • 2. Кто я? По образованию радиоинженер Занимаюсь разработкой встраиваемых систем с 2000 года, пишу на Си и Python (плюс иногда на C++) Использую TDD в свой работе
  • 3. Ситуация • Проект стартовал в 2005 году, использовалось ручное тестирование • В 2006 году в связи с расширением функциональности появилась нужда в значительном рефакторинге кода • Нужны были тесты для защиты от последствий рефакторинга
  • 4. Что у нас было (-) Практически нулевые знания фреймворков для тестирования Си (+) Уверенные знания как писать тесты на Python (+) Опыт создания связки между Си и Python
  • 6. Тестируем черный ящик [установка начального состояния] Выходные Входное воздействия событие Логирование внутреннего состояния
  • 7. Тестовая конфигурация Python Си Запускатель Обвертка для тестирования тестов Интерфейс Тестируемый К Си коду код (ctypes) Динамическая библиотека Тестовые сценарии (.dll / .so)
  • 8. Тестовые сценарии (*.test) Установка начальных состояний FSM = state_foo; … R: событие1 W: реакция1 W: реакция2 W: реакция3 R: событие2 W: реакция4 W: реакция5 W: реакция6
  • 9. Прогон тестов Øscons test Fifo cache loaded from file. ................................................................................ ................................................................................ ................................................................................ ................................................................................ ................................................................................ ................................................................................ ................................................................................ ................................................................................ ................................................................................ ................................................................................ .............................................................................. ---------------------------------------------------------------------- Ran 878 tests in 16.109s OK Fifo cache saved to file.
  • 10. Если тест не проходит FAIL: testfoobarpower-off-broken.test [compare log from testfoobarpower-off-broken.test] log: Fsm1:E_waiting_off 4: R: button power-off log: Fsm1:E_power_off **** Diff **** 5: - W: PowerControlDevice: ESTD_switch_on_ups fifo: + W: PowerControlDevice: ESTD_switch_off_ups [/compare log from testfoobarpower-off-broken.test] testfoobarpower-off-broken.test(5): AssertionError: Different packets
  • 11. Результаты скрещивания (+) На Python легко создать тестовую инфраструктуру (+) Легко обрабатывать тестовые сценарии в текстовом виде (-) Тесты могут работать медленно (+) Мы использовали кеширование для преобразований «бинарные данные» ßà «текст» для ускорения (-) Нужно писать связку между Python и Си (+) есть готовые генераторы кода для связки (SWIG, SIP, boost.python, …) (-) Плохо подходит для низкоуровневых unit-test (+) нормально для тестирования черного ящика