Слайды к вебинару, который прошел 18.11.2013.
В ходе вебинара вы:
- Узнаете о том, как из 7 простых принципов возникает стройная тестовая система
- Поймете почему тестирование никогда не станет полностью автоматизованым
- Узнаете как на практике применять каждый из основных принципов
Больше информации по ссылке: http://coach.ak-itconsulting.com/2013/11/7-principov-testirovaniya/
В преддверии тренинга Тест-дизайн и все все все, который пройдет этой осенью в четырех городах (24-25 сентября в Харькове; 15-16 октября в Нижнем Новгороде; 29-30 октября в Москве; 18-19 ноября в Самаре) Александр Федоров решил лучше познакомиться со своей аудиторией и провести бесплатный вебинар Тест-дизайн «в цикле».
Любые процессы цикличны по своей природе, и разработка тестов не исключение. Тест-кейсы придумываются, создаются и используются на продукте и иногда в его последующих версиях. На разных этапах разработки к тестированию и тест-дизайну выдвигаются разные требования, которые мы рассмотрим в рамках вебинара.
Особенности тест-дизайн при итерационной разработке
Польза и спорная эффективность автоматизации тестирования
Наследование тест-кейсов новыми и «родственными» версиями продукта
Поддержание тест-кейсов в актуальном состоянии на разных этапах жизненного цикла продукта
"Опыт создания системы управления сборкой и тестированием" (полная)SPB SQA Group
Доклад посвящен вопросам создания и использования собственной системы управления процессами сборки и тестирования ПО. Описываются ключевые моменты построения таких систем, в частности: вопросы интерфейсов, быстродействия, качества и интеграции в общую инфраструктуру. Затрагиваются концепции встраивания качества в код, сбора и использования метрик ПО, неотделимости сборки от тестирования, автоматизированного ведения базы знаний об ошибках и другие.
Слайды к вебинару, который прошел 18.11.2013.
В ходе вебинара вы:
- Узнаете о том, как из 7 простых принципов возникает стройная тестовая система
- Поймете почему тестирование никогда не станет полностью автоматизованым
- Узнаете как на практике применять каждый из основных принципов
Больше информации по ссылке: http://coach.ak-itconsulting.com/2013/11/7-principov-testirovaniya/
В преддверии тренинга Тест-дизайн и все все все, который пройдет этой осенью в четырех городах (24-25 сентября в Харькове; 15-16 октября в Нижнем Новгороде; 29-30 октября в Москве; 18-19 ноября в Самаре) Александр Федоров решил лучше познакомиться со своей аудиторией и провести бесплатный вебинар Тест-дизайн «в цикле».
Любые процессы цикличны по своей природе, и разработка тестов не исключение. Тест-кейсы придумываются, создаются и используются на продукте и иногда в его последующих версиях. На разных этапах разработки к тестированию и тест-дизайну выдвигаются разные требования, которые мы рассмотрим в рамках вебинара.
Особенности тест-дизайн при итерационной разработке
Польза и спорная эффективность автоматизации тестирования
Наследование тест-кейсов новыми и «родственными» версиями продукта
Поддержание тест-кейсов в актуальном состоянии на разных этапах жизненного цикла продукта
"Опыт создания системы управления сборкой и тестированием" (полная)SPB SQA Group
Доклад посвящен вопросам создания и использования собственной системы управления процессами сборки и тестирования ПО. Описываются ключевые моменты построения таких систем, в частности: вопросы интерфейсов, быстродействия, качества и интеграции в общую инфраструктуру. Затрагиваются концепции встраивания качества в код, сбора и использования метрик ПО, неотделимости сборки от тестирования, автоматизированного ведения базы знаний об ошибках и другие.
Стратегия тестирования крупного проекта в условиях Agile разработки v2Magneta AI
Евгений Тян, Аскон (Санкт-Петербург)
Ведущий разработкчик компании Аскон г. Санкт-Петербург. В течении 5 лет занимаюсь разработкой ПО для проектирования в области архитектуры и строительства. Обычно это крупные проекты в которых сроки разработки от 1 года. Сферы интересов: гибкие методологии разработки, контроль качества, 3D графика, алгоритмы, хранение данных, data mining, diving =)
В крупном проекте со временем начинает ломаться то, что раньше работало. На текущей итерации исправляем баги внесенные на прошлых, проект буксует. Необходимо постоянно поддерживать качество продукта, ведь он отдается заказчику на каждом Demo. Существует множество программных средств для регрессионного тестирования, но у всех свои ограничения. Мой доклад об опыте разработки и внедрения системы регрессионного тестирования в компании "Аскон", о том как она встроилась в agile процесс, какие проблемы возникали в ее использовании. Приходите!
The practical story telling how Devops changed the culture of quality in the Bank. Recently Devops became mainstream topic. But only few people have a deep understanding how to apply it to the process of software quality assurance. Some believe that the Devops kills manual testing.
I will talk about changes it makes to the role of QA engineers themself. The discussion main point is NOT about tools or technologies. It’s NOT about the “silver bullet” for your problems with the quality of products.
Instead, I will show you an integrated approach which we used for quality assurance. It allowed us to significantly reduce the cost of finding and fixing defects. This approach has also accelerated the development and delivery value to our customers and made the whole process more transparent and predictable.
Это рассказ Вики Руденко о том, что такое непрерывная интеграция и каково ее влияние на работу тестировщика. В ее выступлении можно будет узнать о самых популярных системах CI, услышать о их преимуществах и недостатках. А в завершении она на реальном примере покажет, как работает данный подход в ее проекте.
Презентация на комплексную тему Continious integration-Automated Testing-Agile, показывается связи между этими темам, обоснование автоматического тестирования , и вложения ресурсов для развертывания автоматического тестирования и непрерываной интеграциия. Все темы тесно связаны между собой , хотя бы появились независимос друг от друга.
QA Fes 2016. Анастасия Асеева. Роль тестирования в DevopsQAFest
В своем докладе я расскажу, как мы внедряли devops в банке, а конкретнее какую роль в этом процессе сыграло тестирование. Также расскажу с какими проблемами столкнулись, и как мы их устраняли. И да, каких результатов смогли добиться уже через полгода. А самое интересное, покажу как мы смогли добиться того, чтоб у нас pull request долетал до боя за 3 часа со всеми этапами тестирования.
Доклад будет содержать большое количество лайфхаков и обзоров инструментария, который мы использовали.
Практический доклад о том, как мы внедряли devops в банке, а конкретнее какую роль в этом процессе сыграло тестирование.
В докладе рассмотрены основные проблемы, с которыми команда столкнулась при внедрении и способы их устранения.
Продемонстрированы результаты, которых смогли достичь в течении полугода.
Доклад содержит большое количество лайфхаков и обзоров инструментария, который использовался для достижения цели.
4. Введение
Android testing framework Юнит тестирование
Continuous Integration Архитектура
Summary
Подход к тестированию
Автоматическое
Тесты как часть кода
Юнит тестирование
xffox Android Testing
5. Введение
Android testing framework Юнит тестирование
Continuous Integration Архитектура
Summary
Подход к тестированию
Автоматическое
Тесты как часть кода
Юнит тестирование
xffox Android Testing
6. Введение
Android testing framework Юнит тестирование
Continuous Integration Архитектура
Summary
Unit testing
Проверка на корректность отдельных модулей
Инструментарий:
Test case
Assertions
Mock objects
Test case runner
xffox Android Testing
7. Введение
Android testing framework Юнит тестирование
Continuous Integration Архитектура
Summary
Unit testing
Проверка на корректность отдельных модулей
Инструментарий:
Test case
Assertions
Mock objects
Test case runner
xffox Android Testing
8. Введение
Android testing framework Юнит тестирование
Continuous Integration Архитектура
Summary
Unit testing
Проверка на корректность отдельных модулей
Инструментарий:
Test case
Assertions
Mock objects
Test case runner
xffox Android Testing
9. Введение
Android testing framework Юнит тестирование
Continuous Integration Архитектура
Summary
Unit testing
Проверка на корректность отдельных модулей
Инструментарий:
Test case
Assertions
Mock objects
Test case runner
xffox Android Testing
11. Введение
Android testing framework Юнит тестирование
Continuous Integration Архитектура
Summary
What can I do
TestCase - базовый класс, от которого наследуются тестовые
классы. В тестирующем фреймворке могут быть классы,
расширяющие базовый функционал.
В тестовый класс добавляются методы, содержащие
тестирующий код.
Методы, начинающиеся с "test"автоматически распознаются
как тестовые методы, которые будут вызваны при
тестировании.
xffox Android Testing
12. Введение
Android testing framework Юнит тестирование
Continuous Integration Архитектура
Summary
What can I do
В методы setUp() и tearDown() добавляется код, который
будет вызываться перед и после каждого теста соответственно
(fixture).
Для проверки корректности работы используются ассерты
(assertEquals(), assertFalse(), assertNull(), ...).
Тестирующий фреймворк может содержать дополнительные
ассерты.
xffox Android Testing
13. Введение
Android testing framework Юнит тестирование
Continuous Integration Архитектура
Summary
Пример чистого Junit
public class CoverageTest extends TestCase
{
public void testBounding ()
{
ArrayList < Circle > circles = new ArrayList < Circle >() ;
circles . add ( new Circle ( new Point (.0 , .0) , 2.0) ) ;
Coverage coverage = new Coverage ( circles ) ;
Rectangle boundingRect = coverage . g e t B o u n d i n g R e c t a n g l e () ;
assertEquals ( boundingRect .x , -2.0) ;
assertEquals ( boundingRect .y , 2.0) ;
assertEquals ( boundingRect . x + boundingRect . width , 2.0) ;
assertEquals ( boundingRect . y - boundingRect . height , -2.0) ;
}
public void testIntersection ()
{
ArrayList < Circle > circles = new ArrayList < Circle >() ;
circles . add ( new Circle ( new Point (.0 , .0) , 2.0) ) ;
Coverage coverage = new Coverage ( circles ) ;
assertTrue ( coverage . isInIntersection ( new Point (.0 , .0) ) ) ;
}
}
xffox Android Testing
14. Введение
Android testing framework Юнит тестирование
Continuous Integration Архитектура
Summary
Какими должны быть тесты
F.I.R.S.T. (из Clean Code)
Быстрые (Fast) - если тесты будут медленными будет
возникать желание запускать их реже.
Независимые (Independent) - один тест не должен влиять
на исход другого.
Повторямые (Repeatable) - повторный запуск тестов
должен быть возможен в любом окружении и должен
возвращать одинаковый результат.
Самодостаточные (Self-Validating) - тесты либо проходят
либо нет, не нужны дополнительные действия для
установления результата.
Своевременные (Timely) - при несвоевременном написании
тестов могут возникнуть проблемы с их интеграцией так
как код мог не проектироваться с учетом его
тестируемости.
xffox Android Testing
15.
16. Введение
Введение
Android testing framework
Последовательность действий
Continuous Integration
Специфические тесты для компонентов
Summary
Outline
1 Введение
Юнит тестирование
Архитектура
2 Android testing framework
Введение
Последовательность действий
Специфические тесты для компонентов
3 Continuous Integration
Введение
Hudson
xffox Android Testing
17. Введение
Введение
Android testing framework
Последовательность действий
Continuous Integration
Специфические тесты для компонентов
Summary
Состав
Основан на JUnit (версия 3)
Специфические тесты для компонентов (*TestCase
классы, asserts, mocks)
Упаковывается в пакет как и приложение
Допонительные утилиты (monkeyrunner - API для
тестирования на python; Monkey:))
xffox Android Testing
18. Введение
Введение
Android testing framework
Последовательность действий
Continuous Integration
Специфические тесты для компонентов
Summary
Outline
1 Введение
Юнит тестирование
Архитектура
2 Android testing framework
Введение
Последовательность действий
Специфические тесты для компонентов
3 Continuous Integration
Введение
Hudson
xffox Android Testing
19. Введение
Введение
Android testing framework
Последовательность действий
Continuous Integration
Специфические тесты для компонентов
Summary
Eclipse
New->Project->Android->Android Test Project
xffox Android Testing
20. Введение
Введение
Android testing framework
Последовательность действий
Continuous Integration
Специфические тесты для компонентов
Summary
Eclipse
Test Project Name.
Test Target: An existing
Android project, или нажать
Browse и выбрать нужный
проект.
Build Target.
Application name.
Package name.
Нажать Finish.
xffox Android Testing
21. Введение
Введение
Android testing framework
Последовательность действий
Continuous Integration
Специфические тесты для компонентов
Summary
Eclipse
xffox Android Testing
22. Введение
Введение
Android testing framework
Последовательность действий
Continuous Integration
Специфические тесты для компонентов
Summary
Eclipse
xffox Android Testing
23. Введение
Введение
Android testing framework
Последовательность действий
Continuous Integration
Специфические тесты для компонентов
Summary
Other IDEs
$ android create test-project -m <main_path> -n
<project_name> -p <test_path>
$ ant install
$ adb shell am instrument -w
<test_package_name>/<runner_class>
runner_class обычно InstrumentationTestRunner
xffox Android Testing
24. Введение
Введение
Android testing framework
Последовательность действий
Continuous Integration
Специфические тесты для компонентов
Summary
Outline
1 Введение
Юнит тестирование
Архитектура
2 Android testing framework
Введение
Последовательность действий
Специфические тесты для компонентов
3 Continuous Integration
Введение
Hudson
xffox Android Testing
25. Введение
Введение
Android testing framework
Последовательность действий
Continuous Integration
Специфические тесты для компонентов
Summary
AndroidTestCase
Базовый класс TestCase
Предоставляет доступ к Context и содержит ассерты для
тестирования прав доступа
Context getContext ()
void setContext ( Context context )
void a s s e r t A c t i v i t y R e q u i r e s P e r m i s s i o n ( String packageName , String className ,
String permission )
// Asserts that launching a given activity is protected by a particular
permission by attempting to start the activity and validating that a
S e c u r ity Ex cep tio n is thrown that mentions the permission in its error
message .
void a s s e r t R e a d i n g C o n t e n t U r i R e q u i r e s P e r m i s s i o n ( Uri uri , String permission )
// Asserts that reading from the content uri requires a particular permission by
querying the uri and ensuring a S ecu rit yE xce pti on is thrown mentioning the
particular permission .
void a s s e r t W r i t i n g C o n t e n t U r i R e q u i r e s P e r m i s s i o n ( Uri uri , String permission )
// Asserts that writing to the content uri requires a particular permission by
inserting into the uri and ensuring a Se cur ity Exc ept ion is thrown
mentioning the particular permission .
xffox Android Testing
26. Введение
Введение
Android testing framework
Последовательность действий
Continuous Integration
Специфические тесты для компонентов
Summary
Activity testing
Базовый класс InstrumentationTestCase
Тестовые классы: ActivityInstrumentationTestCase2,
ActivityUnitTestCase, SingleLaunchActivityTestCase
xffox Android Testing
27. Введение
Введение
Android testing framework
Последовательность действий
Continuous Integration
Специфические тесты для компонентов
Summary
ViewAsserts описывает ассерты для View, с их помощью
можно тестировать выравнивание и позицию объектов View:
static void a s s e r t B a s e l i n e A l i g n e d ( View first , View second )
// Assert that two views are aligned on their baseline , that is that their
baselines are on the same y location .
static void a s s e r t G ro u p C o n t a i n s ( ViewGroup parent , View child )
// Assert that the specified group contains a specific child once and only once .
static void a s s e r t G r o u p I n t e g r i t y ( ViewGroup parent )
// Assert the specified group ’s integrity . The children count should be >= 0 and
each child should be non - null .
static void a s s e r t O f f S c r e e n A b o v e ( View origin , View view )
// Assert that view is above the visible screen .
static void assertOnScreen ( View origin , View view )
// Assert that view is on the screen .
static void a s s e r t H a s S c r e e n C o o r d i n a t e s ( View origin , View view , int x , int y )
// Assert that a view has a particular x and y position on the visible screen .
// ...
xffox Android Testing
28. Введение
Введение
Android testing framework
Последовательность действий
Continuous Integration
Специфические тесты для компонентов
Summary
Activity testing
import com . example . helloandroid . HelloAndroid ;
package com . example . helloandroid . test ;
import android . test . A c t i v i t y I n s t r u m e n t a t i o n T e s t C a s e 2 ;
public class HelloAndroidTest extends ActivityInstrumentationTestCase2 <
HelloAndroid > {
}
public HelloAndroidTest () {
super ( " com . example . helloandroid " , HelloAndroid . class ) ;
}
xffox Android Testing
29. Введение
Введение
Android testing framework
Последовательность действий
Continuous Integration
Специфические тесты для компонентов
Summary
Activity testing
@Override
protected void setUp () throws Exception {
super . setUp () ;
mActivity = this . getActivity () ;
mView = ( TextView ) mActivity . findViewById ( com . example . helloandroid . R . id .
textview ) ;
resourceString = mActivity . getString ( com . example . helloandroid . R . string .
hello ) ;
}
Этот тест будет вызван первым, используется для проверки
иницализации.
public void t est Pr eco ndi tio ns () {
assertNotNull ( mView ) ;
}
public void testText () {
assertEquals ( resourceString ,( String ) mView . getText () ) ;
}
xffox Android Testing
30. Введение
Введение
Android testing framework
Последовательность действий
Continuous Integration
Специфические тесты для компонентов
Summary
Content provider testing
Базовый класс ProviderTestCase2
Объект тестируемого класса можно получить через вызов
getProvider(), но лучше использовать резолвер для работы с
объектом, также как и обычное приложение будет его
использовать.
Следует тестировать URI, причем как корректные так и
некорректные.
Следует тестировать стандартные методы: query(), insert(),
delete(), update(), getType() и onCreate().
Бизнесс логика.
xffox Android Testing
31. Введение
Введение
Android testing framework
Последовательность действий
Continuous Integration
Специфические тесты для компонентов
Summary
Content provider testing
M o c k C o n t e n t R e s o l v e r g e t M o c k C o n t e n t R e s o l v e r ()
// Gets the M o c k C o n te n t R e s o l v e r created by this class during initialization .
I so la t ed Context getMockContext ()
// Gets the IsolatedContext created by this class during initialization .
T getProvider ()
// Returns the content provider created by this class in the setUp () method .
static <T extends ContentProvider > ContentResolver
n e w R e s o l v e r W i t h C o n t e n t P r o v i d e r F r o m S q l ( Context targetContext , String
filenamePrefix , Class <T > providerClass , String authority , String
databaseName , int databaseVersion , String sql )
// Creates a new content provider of the same type as that passed to the test
case class , with an authority name set to the authority parameter , and
using an SQLite database as the underlying data source .
xffox Android Testing
32. Введение
Введение
Android testing framework
Последовательность действий
Continuous Integration
Специфические тесты для компонентов
Summary
Service testing
Базовый класс ServiceTestCase
Следует тестировать функции onCreate() как реакцию на
Context.startService() или Context.bindService().
Функцию onDestroy() как реакцию на
Context.stopService(), Context.unbindService(),
stopSelf() или stopSelfResult().
Бизнесс логика.
xffox Android Testing
33. Введение
Введение
Android testing framework
Последовательность действий
Continuous Integration
Специфические тесты для компонентов
Summary
Service testing
Application getApplication ()
// Returns the Application object in use by the service under test .
T getService ()
Context g etSystemContext ()
// Returns the real system context that is saved by setUp () .
void setApplication ( Application application )
// Sets the application that is used during the test .
IBinder bindService ( Intent intent )
// Starts the service under test , in the same way as if it were started by
Context . bindService ( Intent , ServiceConnection , flags ) with an Intent that
identifies a service .
void setUp ()
// Gets the current system context and stores it .
voi setupService ()
// Creates the service under test and attaches all injected dependencies ( Context
, Application ) to it .
voi s hu td ownService ()
// Makes the necessary calls to stop ( or unbind ) the service under test , and
calls onDestroy () .
void startService ( Intent intent )
// Starts the service under test , in the same way as if it were started by
Context . startService ( Intent ) with an Intent that identifies a service .
void tearDown ()
// Shuts down the service under test .
xffox Android Testing
34. Введение
Введение
Android testing framework
Последовательность действий
Continuous Integration
Специфические тесты для компонентов
Summary
В итоге...
xffox Android Testing
37. Введение
Android testing framework Введение
Continuous Integration Hudson
Summary
Рекомендуемые требования
Юнит тесты
Система контроля
версий
xffox Android Testing
38. Введение
Android testing framework Введение
Continuous Integration Hudson
Summary
How does it work
Один из узлов - Master - отвечает за мониторинг репозитория
на коммиты или другие события, по которым он вызывает
сборку и запуск тестов на подключенных к нему узлах - slaves -
и сохранение возвращенных результатов.
Подключенные узлы должны отличаться по конфигурации (ОС,
железо и т.д.)
xffox Android Testing
39. Введение
Android testing framework Введение
Continuous Integration Hudson
Summary
How does it work
Чаще всего центральный узел предоставляет доступ к
результатам через web-интерфейс. Плюс к этому возможны
различные варианты нотификации (email, rss, jabber, ...).
Существуют и другие архитектуры для Continuous Integration
(CMake dashboard).
xffox Android Testing
41. Введение
Android testing framework Введение
Continuous Integration Hudson
Summary
Continuous Integration на базе Hudson
Hudson написан на Java
Установка очень простая:
Скачать war-архив с сайта
Скачать плагин android-emulator.hpi (также понадобится
port-allocator.hpi) Помещаются в ˜/.hudson/plugins
java -jar hudson-1.398.war
go http://localhost:8080
xffox Android Testing
50. Введение
Android testing framework
Continuous Integration
Summary
Summary
Инструментарий есть, научитесь его использовать на пользу
себе.
xffox Android Testing
51. Приложение For Further Reading
For Further Reading I
Robert C. Martin.
Clean Code.
Prentice Hall.
David J. Agans.
Debugging
http://developer.android.com/index.html
xffox Android Testing