Testing RIA with Selenium

Sergey Shvets
ТЕСТИРОВАНИЕ СЛОЖНЫХ AJAX ПРИЛОЖЕНИЙ С ПОМОЩЬЮ
                   SELENIUM
               Сергей Швец, postindustria.com
План доклада

1.Необходимость введения автотестов

2.Архитектура тест-приложения

3.Подход к написанию тестов с помощью разработчиков

4.Узкие места при тестировании большого AJAX-
  приложения

5.Автоматизация прогона автотестов
1   2   3   4   5




НЕОБХОДИМОСТЬ ВВЕДЕНИЯ
      АВТОТЕСТОВ
Описание Nimble
Большой AJAX-проект

Компоненты строятся “на
лету”

Частая смена DOM

Зависимость от 3rd-party
сервисов

Сильная связность
приложения
Проблемы тестирования
      вручную


           Слишком много времени

           “Неожиданные” баги
           перед релизом/деплоем
Некоторые цифры...
Проверка основного        Общее время итерации
                          Время на регрессионное тестирование
функционала Nimble
занимает 1 день для 2
специалистов
                            29%
Нужно минимум две
проверки за итерацию

Одному человеку
                                                 71%
свойственно ошибаться -
необходимо два
специалиста
Преимущества автотестов

Экономия времени QA-специалистов

Раннее обнаружение ошибок

Повышение стабильности приложения

Уменьшение количества переоткрытых багов
1   2   3   4   5




АРХИТЕКТУРА ТЕСТ ПРИЛОЖЕНИЯ
Проблема:
Изменение одного компонента тянет
   за собой изменение по всему
            приложению
Пример. Крах множества кейсов

Приложение                    После замены компонента




 К1                                  К1

      К2                                  НК2
                                           К2

 К5          К3                      К5         К3

      К4                                   К4


 Компонент        Тест-кейс
Подытожим...
   Что происходит?         Почему происходит?


                         Повторяемость кода
Изменение небольшого
                            компонента в AJAX
компонента - влечет за
                              приложении не
собой смену множества
                         учитывается в обычных
       тест-кейсов
                                тест-кейсах
Решение



Сделать код тест-кейсов
 повторяемым.
Понятие блока

Блок - функция (тест-кейс), который покрывает
небольшой неделимый участок функционала


Индикатор неделимости:
 Ваш блок теряет всякий смысл, если соответствующий
 компонент пропадает.
Архитектура
   Блоки                    Тест-кейс
  Basic Actions

      login

     logout                      login

 open_settings              add_new_contact

                             add_new_tag

                            remove_contact
 Test Contacts
                                logout
add_new_contact

 add_new_tag

remove_contact
Пример 2. Крах одного теста

Приложение              После замены компонента




К1                             К1

     К2                             НК2
                                     К2

К5          К3                 К5         К3

     К4                              К4


Компонент        Блок
Преимущества и
          недостатки

Минимум исправлений       Дополнительные усилия на
                          поддержание
Возможность подключения
разработчиков             Необходима документация
Примеры кода. Блок
                Переданный объект Selenium


def login(unitTestClass, login, password):
    sel = unitTestClass.selenium
    sel.open("/")
    sel.type("login-f_email", login)
    sel.type("login-f_password", password)
    sel.click("login_loginButton")
Примеры кода. Тест-кейс

  def test_case1(self) :
          action.login(self, "autotest@gmail.com", "test")
Блоки     contacts.create_new_contact(self)
          linker.send_email_from_contact_profile(self)
          messages.send_email(self, None)

                                         Функция - линкер
Пример как не надо делать
def test_mail_sync(unitTestCase):

    sel = unitTestCase.selenium
    sel.window_maximize()



    sel.open_window("http://gmail.com/", "GMail")
    time.sleep(3)
    sel.select_window("GMail")
    sel.type("Email", "dmitriytestovich333")
    sel.type("Passwd", "ytrewq654321")
    sel.click("signIn")
    sel.wait_for_page_to_load("60000")
    time.sleep(5)
    #sel.click_at("//div[@id=':co']/div[1]/div", "")
    #sel.click("//div[text()='Compose mail']")
#    sel.select_frame("canvas_frame")
    sel.click_at("//div[text()='Compose mail']", "")
    for i in range(60):
        try:
             if sel.is_element_present("//textarea[@name='to']"): break
        except: pass
        time.sleep(2)
        try:
            sel.click_at("//div[text()='Compose mail']", "")
        except: pass

    .......
        except: pass
        time.sleep(1)
    else: unitTestCase.fail("time out - waiting messages list failed (return from message full wiev)")
    sel.wait_for_condition("selenium.browserbot.getCurrentWindow().document.getElementById("__selenium_ajax_helper").innerHTML ==
'0'", "30000")
    time.sleep(2)
        sel.wait_for_page_to_load("30000")
    sel.wait_for_condition("selenium.browserbot.getCurrentWindow().document.getElementById("__selenium_ajax_helper").innerHTML ==
'0'", "30000")
Документация
НЕОБХОДИМА!
Что дает документация?


Блоки можно связывать

Блоки не повторяются

Картину по покрытому функционалу
Что должно быть в
        документации?

Краткое описание назначения блока

Информация для связи блоков (место “начала” блока,
место “конца” блока)

Детальное описание тест-кейса

Пример использования (опционально)
Пример описания блока
Функция login:

1) Открыть урл сайта
2) Заполнить логин и пароль
3) Кликнуть на кнопку логин
4) Дождаться загрузки стартовой страницы
Пример документированного блока
1   2   3   4   5




ПОДХОД К НАПИСАНИЮ ТЕСТОВ С
  ПОМОЩЬЮ РАЗРАБОТЧИКОВ
Почему разработчик?
Разработчик знает
особенности работы
системы

Дополнительное
тестирование
разработчиком

Экономия времени на
написание тест-кейса
Что делает разработчик?

Разбивает тест-кейс на блоки

Реализует блок в коде

Документирует функцию

Добавляет функцию в репозиторий
Что делает QA?

Поставляет разработчику тест-кейсы ( юзер-стори)

Следит за блоками

Соединяет блоки в тест-кейсы

Тестирует новый функционал вручную
Процесс
          QA                Разработчик


      Требования

   Создание описаний
                          Реализация блоков

                           Документация и
                          добавление блока
  Создание тест-кейсов

Тестирование приложения
1   2   3   4   5




“УЗКИЕ” МЕСТА В НАПИСАНИИ
       ТЕСТ-КЕЙСОВ
Проблема ожидания AJAX-
        запросов:


В Selenium не существует механизма
    ожидания AJAX-запроса
Варианты решения


Ожидание через pause

Ожидание отстройки какого-то элемента

Добавление сторонних библиотек в страницу: jQuery,
Prototype, Dojo
Наше решение

Встроенный div в котором находится актуальное
количество запросов.

js_condition =
”selenium.browserbot.getCurrentWindow().
document.getElementById("__selenium_ajax
_helper").innerHTML == '0'”

selenium.waitForCondition(js_condition,
timeout)
Демонстрация
Демонстрация
Тестирование 3rd party. Необходимые
           механизмы



Работа Selenium с двумя окнами

Выбор фреймов

Циклы для обработки задержек при синхронизации
Работа Selenium с окнами и фреймами

Открытие окна и переключение между окнами

   sel.open_window("http://gmail.com/", "GMail")
   time.sleep(3)
   sel.select_window("GMail")

Выбор фрейма

   sel.select_frame("canvas_frame")

Возврат из фрейма

   sel.select_frame("relative=top")
Работа с циклом

Построение цикла для ожидания события синхронизации:


   for i in xrange(10):
           if <check smth>:
               break
           else:
               time.sleep(60)
               <do smth>
Демонстрация
Демонстрация
Еще советы...

При перестройке DOM используйте pause - это
дополнительная проверка на юзабилити

Используйте css локаторы для выбора элементов, где
возможно - ускоряет работу теста

Sizzle - css-селектор для jQuery легко добавляется как в
сервер так и в Selenium IDE.
1   2   3   4   5




АВТОМАТИЗАЦИЯ
Решение 1. “Кустарное”


Запуск GUI приложений через X-сервера. e.g. Xvfb /
Xephyr

Анализ сырых логов Selenium тестов с подключением
Selenium билд (bash- скриптинг)
Преимущества и
          недостатки
                                   Сложно в поддержке
Быстрое в реализации
                                   Плохо масштабируемо
Дешевое (запуск на
одном компьютере)                  Только FF/Webkit (linux
                                   машина)


     Ссылка на пример настройки: http://bit.ly/fjq8ge
Решение 2. Selenium Grid


Установка Selenium Grid + Hudson Selenium Plugin

Настройка отдельных нод (Windows/Linux/Mac)

Интеграция всего путем бесконечных настроек
Преимущество и
          недостатки

Масштабируемо                    Сложность в настройке
Быстрый прогон тестов            Дорогое (расходы на
                                 содержание тест фермы)
Поддержка всех платформ
и браузеров                      Сложности в поддержке



   Ссылка на пример настройки: http://bit.ly/gT5MvA
Спасибо за внимание!




 email: shvets.serg@gmail.com
1 von 47

Recomendados

Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо... von
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Andrey Rebrov
5.2K views35 Folien
Автоматизация тестирования многопоточности von
Автоматизация тестирования многопоточностиАвтоматизация тестирования многопоточности
Автоматизация тестирования многопоточностиSQALab
2.2K views32 Folien
Основы и нюансы параллельного тестрования von
Основы и нюансы параллельного тестрованияОсновы и нюансы параллельного тестрования
Основы и нюансы параллельного тестрованияbearoff
3.3K views36 Folien
JUnit, дай пять! von
JUnit, дай пять!JUnit, дай пять!
JUnit, дай пять!Dmitrii Tuchs
320 views30 Folien
Automation testing desktop applications von
Automation testing desktop applicationsAutomation testing desktop applications
Automation testing desktop applicationsАлексей Стягайло
507 views84 Folien
"Опыт создания системы управления сборкой и тестированием" (полная) von
"Опыт создания системы управления сборкой и тестированием" (полная)"Опыт создания системы управления сборкой и тестированием" (полная)
"Опыт создания системы управления сборкой и тестированием" (полная)SPB SQA Group
541 views31 Folien

Más contenido relacionado

Was ist angesagt?

JIRA. С добавками. Для тестировщиков von
JIRA. С добавками. Для тестировщиковJIRA. С добавками. Для тестировщиков
JIRA. С добавками. Для тестировщиковSQALab
3.6K views38 Folien
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов von
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовРеализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовSQALab
602 views48 Folien
Open Source Testing Framework: real project example and best practices von
Open Source Testing Framework: real project example and best practicesOpen Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practicesAliaksandr Ikhelis
705 views48 Folien
C++ STL & Qt. Занятие 05. von
C++ STL & Qt. Занятие 05.C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.Igor Shkulipa
291 views37 Folien
Документирование исходных текстов (javadoc) von
Документирование исходных текстов (javadoc)Документирование исходных текстов (javadoc)
Документирование исходных текстов (javadoc)Fedor Malyshkin
6.8K views34 Folien
BDD von
BDDBDD
BDDAndrey Bibichev
940 views113 Folien

Was ist angesagt?(20)

JIRA. С добавками. Для тестировщиков von SQALab
JIRA. С добавками. Для тестировщиковJIRA. С добавками. Для тестировщиков
JIRA. С добавками. Для тестировщиков
SQALab3.6K views
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов von SQALab
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовРеализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
SQALab602 views
Open Source Testing Framework: real project example and best practices von Aliaksandr Ikhelis
Open Source Testing Framework: real project example and best practicesOpen Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practices
Aliaksandr Ikhelis705 views
C++ STL & Qt. Занятие 05. von Igor Shkulipa
C++ STL & Qt. Занятие 05.C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.
Igor Shkulipa291 views
Документирование исходных текстов (javadoc) von Fedor Malyshkin
Документирование исходных текстов (javadoc)Документирование исходных текстов (javadoc)
Документирование исходных текстов (javadoc)
Fedor Malyshkin6.8K views
Dependency injection von GetDev.NET
Dependency injectionDependency injection
Dependency injection
GetDev.NET2K views
BDD girls Battle: Cucumber VS. JBehave von SQALab
BDD girls Battle: Cucumber VS. JBehaveBDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehave
SQALab3.8K views
Что нового в Visual Studio 2010 и .Net 4.0 von akrakovetsky
Что нового в Visual Studio 2010 и .Net 4.0Что нового в Visual Studio 2010 и .Net 4.0
Что нового в Visual Studio 2010 и .Net 4.0
akrakovetsky930 views
автоматизация тестирования с помощью Selenium von vyacheslavmaslov
автоматизация тестирования с помощью Seleniumавтоматизация тестирования с помощью Selenium
автоматизация тестирования с помощью Selenium
vyacheslavmaslov4.9K views
ук 03.003.01 2011 von etyumentcev
ук 03.003.01 2011ук 03.003.01 2011
ук 03.003.01 2011
etyumentcev998 views
Олексій Стульніков “WinAppDriver – автоматизація Desktop ніколи не була такою... von Dakiry
Олексій Стульніков “WinAppDriver – автоматизація Desktop ніколи не була такою...Олексій Стульніков “WinAppDriver – автоматизація Desktop ніколи не була такою...
Олексій Стульніков “WinAppDriver – автоматизація Desktop ніколи не була такою...
Dakiry433 views
Dependency Injection на примере Unity и NInject von akrakovetsky
Dependency Injection на примере Unity и NInjectDependency Injection на примере Unity и NInject
Dependency Injection на примере Unity и NInject
akrakovetsky4.2K views
Автоматизация UI тестирования под Windows и Windows Phone von CodeFest
Автоматизация UI тестирования под Windows и Windows PhoneАвтоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows Phone
CodeFest6.5K views
Автоматизация и Selenium IDE von ISsoft
Автоматизация и Selenium IDEАвтоматизация и Selenium IDE
Автоматизация и Selenium IDE
ISsoft7.6K views
C++ STL & Qt. Занятие 10. von Igor Shkulipa
C++ STL & Qt. Занятие 10.C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.
Igor Shkulipa351 views
Модульная структура. Цветцих Денис D2D Just.NET von Dev2Dev
Модульная структура. Цветцих Денис D2D Just.NETМодульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NET
Dev2Dev526 views
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET von Dev2Dev
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NETASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
Dev2Dev842 views
Automation Functional Testing in Agile Projects von Andrey Rebrov
Automation Functional Testing in Agile ProjectsAutomation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
Andrey Rebrov1K views

Similar a Testing RIA with Selenium

Решения для автоматизации тестирования Web-приложений на базе Selenium von
Решения для автоматизации тестирования Web-приложений на базе SeleniumРешения для автоматизации тестирования Web-приложений на базе Selenium
Решения для автоматизации тестирования Web-приложений на базе SeleniumSQALab
1.2K views12 Folien
Simonova sql server-enginetesting von
Simonova sql server-enginetestingSimonova sql server-enginetesting
Simonova sql server-enginetestingComputer Science Club
258 views35 Folien
DevOps guide for awesome quality assurance von
DevOps guide for awesome quality assuranceDevOps guide for awesome quality assurance
DevOps guide for awesome quality assuranceАнастасия Асеева
349 views86 Folien
Do you know what you are testing? von
Do you know what you are testing?Do you know what you are testing?
Do you know what you are testing?Mikalai Alimenkou
4.6K views34 Folien
А вы знаете что тестируют ваши тесты? von
А вы знаете что тестируют ваши тесты?А вы знаете что тестируют ваши тесты?
А вы знаете что тестируют ваши тесты?SQALab
502 views34 Folien
Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир... von
Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...
Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...Mail.ru Group
4.8K views23 Folien

Similar a Testing RIA with Selenium(20)

Решения для автоматизации тестирования Web-приложений на базе Selenium von SQALab
Решения для автоматизации тестирования Web-приложений на базе SeleniumРешения для автоматизации тестирования Web-приложений на базе Selenium
Решения для автоматизации тестирования Web-приложений на базе Selenium
SQALab1.2K views
А вы знаете что тестируют ваши тесты? von SQALab
А вы знаете что тестируют ваши тесты?А вы знаете что тестируют ваши тесты?
А вы знаете что тестируют ваши тесты?
SQALab502 views
Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир... von Mail.ru Group
Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...
Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...
Mail.ru Group4.8K views
Agile Java Development компания JazzTeam - Техническая презентация Xml2Selenium von jazzteam
Agile Java Development компания JazzTeam - Техническая презентация Xml2SeleniumAgile Java Development компания JazzTeam - Техническая презентация Xml2Selenium
Agile Java Development компания JazzTeam - Техническая презентация Xml2Selenium
jazzteam3.4K views
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий von solit
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко ДмитрийSolit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
solit1K views
Client Side Autotesting Flash von guestb0af15
Client Side Autotesting FlashClient Side Autotesting Flash
Client Side Autotesting Flash
guestb0af151.1K views
Continious integration-Automated Testing-Solid-Agile von Kairat Yussupov
Continious integration-Automated Testing-Solid-AgileContinious integration-Automated Testing-Solid-Agile
Continious integration-Automated Testing-Solid-Agile
Kairat Yussupov412 views
iPhone Unit Testing (Google tool Box) von Yandex
iPhone Unit Testing (Google tool Box)iPhone Unit Testing (Google tool Box)
iPhone Unit Testing (Google tool Box)
Yandex774 views
Тестируем legacy c++ von Maxim Shulga
Тестируем legacy c++Тестируем legacy c++
Тестируем legacy c++
Maxim Shulga1.2K views
Как легко и быстро поднять стартап на облаке von Tatiana Smetanina
Как легко и быстро поднять стартап на облакеКак легко и быстро поднять стартап на облаке
Как легко и быстро поднять стартап на облаке
Tatiana Smetanina374 views
Расширяемая платформа для создания и управления автоматизированными тестами н... von jazzteam
Расширяемая платформа для создания и управления автоматизированными тестами н...Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...
jazzteam1.9K views
Meeting #4. Frameworks. von Igor Khrol
Meeting #4. Frameworks.Meeting #4. Frameworks.
Meeting #4. Frameworks.
Igor Khrol546 views
Оптимизация производительности и нагрузочное тестирование в среде Visual Stud... von Dmitry Andreev
Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...
Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...
Dmitry Andreev945 views
Как построить свой фреймворк для автотестов? von Dmitry Buzdin
Как построить свой фреймворк для автотестов?Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?
Dmitry Buzdin1.7K views
5 колчинская von qasib
5 колчинская 5 колчинская
5 колчинская
qasib466 views

Testing RIA with Selenium

  • 1. ТЕСТИРОВАНИЕ СЛОЖНЫХ AJAX ПРИЛОЖЕНИЙ С ПОМОЩЬЮ SELENIUM Сергей Швец, postindustria.com
  • 2. План доклада 1.Необходимость введения автотестов 2.Архитектура тест-приложения 3.Подход к написанию тестов с помощью разработчиков 4.Узкие места при тестировании большого AJAX- приложения 5.Автоматизация прогона автотестов
  • 3. 1 2 3 4 5 НЕОБХОДИМОСТЬ ВВЕДЕНИЯ АВТОТЕСТОВ
  • 4. Описание Nimble Большой AJAX-проект Компоненты строятся “на лету” Частая смена DOM Зависимость от 3rd-party сервисов Сильная связность приложения
  • 5. Проблемы тестирования вручную Слишком много времени “Неожиданные” баги перед релизом/деплоем
  • 6. Некоторые цифры... Проверка основного Общее время итерации Время на регрессионное тестирование функционала Nimble занимает 1 день для 2 специалистов 29% Нужно минимум две проверки за итерацию Одному человеку 71% свойственно ошибаться - необходимо два специалиста
  • 7. Преимущества автотестов Экономия времени QA-специалистов Раннее обнаружение ошибок Повышение стабильности приложения Уменьшение количества переоткрытых багов
  • 8. 1 2 3 4 5 АРХИТЕКТУРА ТЕСТ ПРИЛОЖЕНИЯ
  • 9. Проблема: Изменение одного компонента тянет за собой изменение по всему приложению
  • 10. Пример. Крах множества кейсов Приложение После замены компонента К1 К1 К2 НК2 К2 К5 К3 К5 К3 К4 К4 Компонент Тест-кейс
  • 11. Подытожим... Что происходит? Почему происходит? Повторяемость кода Изменение небольшого компонента в AJAX компонента - влечет за приложении не собой смену множества учитывается в обычных тест-кейсов тест-кейсах
  • 13. Понятие блока Блок - функция (тест-кейс), который покрывает небольшой неделимый участок функционала Индикатор неделимости: Ваш блок теряет всякий смысл, если соответствующий компонент пропадает.
  • 14. Архитектура Блоки Тест-кейс Basic Actions login logout login open_settings add_new_contact add_new_tag remove_contact Test Contacts logout add_new_contact add_new_tag remove_contact
  • 15. Пример 2. Крах одного теста Приложение После замены компонента К1 К1 К2 НК2 К2 К5 К3 К5 К3 К4 К4 Компонент Блок
  • 16. Преимущества и недостатки Минимум исправлений Дополнительные усилия на поддержание Возможность подключения разработчиков Необходима документация
  • 17. Примеры кода. Блок Переданный объект Selenium def login(unitTestClass, login, password): sel = unitTestClass.selenium sel.open("/") sel.type("login-f_email", login) sel.type("login-f_password", password) sel.click("login_loginButton")
  • 18. Примеры кода. Тест-кейс def test_case1(self) : action.login(self, "autotest@gmail.com", "test") Блоки contacts.create_new_contact(self) linker.send_email_from_contact_profile(self) messages.send_email(self, None) Функция - линкер
  • 19. Пример как не надо делать def test_mail_sync(unitTestCase): sel = unitTestCase.selenium sel.window_maximize() sel.open_window("http://gmail.com/", "GMail") time.sleep(3) sel.select_window("GMail") sel.type("Email", "dmitriytestovich333") sel.type("Passwd", "ytrewq654321") sel.click("signIn") sel.wait_for_page_to_load("60000") time.sleep(5) #sel.click_at("//div[@id=':co']/div[1]/div", "") #sel.click("//div[text()='Compose mail']") # sel.select_frame("canvas_frame") sel.click_at("//div[text()='Compose mail']", "") for i in range(60): try: if sel.is_element_present("//textarea[@name='to']"): break except: pass time.sleep(2) try: sel.click_at("//div[text()='Compose mail']", "") except: pass ....... except: pass time.sleep(1) else: unitTestCase.fail("time out - waiting messages list failed (return from message full wiev)") sel.wait_for_condition("selenium.browserbot.getCurrentWindow().document.getElementById("__selenium_ajax_helper").innerHTML == '0'", "30000") time.sleep(2) sel.wait_for_page_to_load("30000") sel.wait_for_condition("selenium.browserbot.getCurrentWindow().document.getElementById("__selenium_ajax_helper").innerHTML == '0'", "30000")
  • 21. Что дает документация? Блоки можно связывать Блоки не повторяются Картину по покрытому функционалу
  • 22. Что должно быть в документации? Краткое описание назначения блока Информация для связи блоков (место “начала” блока, место “конца” блока) Детальное описание тест-кейса Пример использования (опционально)
  • 23. Пример описания блока Функция login: 1) Открыть урл сайта 2) Заполнить логин и пароль 3) Кликнуть на кнопку логин 4) Дождаться загрузки стартовой страницы
  • 25. 1 2 3 4 5 ПОДХОД К НАПИСАНИЮ ТЕСТОВ С ПОМОЩЬЮ РАЗРАБОТЧИКОВ
  • 26. Почему разработчик? Разработчик знает особенности работы системы Дополнительное тестирование разработчиком Экономия времени на написание тест-кейса
  • 27. Что делает разработчик? Разбивает тест-кейс на блоки Реализует блок в коде Документирует функцию Добавляет функцию в репозиторий
  • 28. Что делает QA? Поставляет разработчику тест-кейсы ( юзер-стори) Следит за блоками Соединяет блоки в тест-кейсы Тестирует новый функционал вручную
  • 29. Процесс QA Разработчик Требования Создание описаний Реализация блоков Документация и добавление блока Создание тест-кейсов Тестирование приложения
  • 30. 1 2 3 4 5 “УЗКИЕ” МЕСТА В НАПИСАНИИ ТЕСТ-КЕЙСОВ
  • 31. Проблема ожидания AJAX- запросов: В Selenium не существует механизма ожидания AJAX-запроса
  • 32. Варианты решения Ожидание через pause Ожидание отстройки какого-то элемента Добавление сторонних библиотек в страницу: jQuery, Prototype, Dojo
  • 33. Наше решение Встроенный div в котором находится актуальное количество запросов. js_condition = ”selenium.browserbot.getCurrentWindow(). document.getElementById("__selenium_ajax _helper").innerHTML == '0'” selenium.waitForCondition(js_condition, timeout)
  • 36. Тестирование 3rd party. Необходимые механизмы Работа Selenium с двумя окнами Выбор фреймов Циклы для обработки задержек при синхронизации
  • 37. Работа Selenium с окнами и фреймами Открытие окна и переключение между окнами sel.open_window("http://gmail.com/", "GMail") time.sleep(3) sel.select_window("GMail") Выбор фрейма sel.select_frame("canvas_frame") Возврат из фрейма sel.select_frame("relative=top")
  • 38. Работа с циклом Построение цикла для ожидания события синхронизации: for i in xrange(10): if <check smth>: break else: time.sleep(60) <do smth>
  • 41. Еще советы... При перестройке DOM используйте pause - это дополнительная проверка на юзабилити Используйте css локаторы для выбора элементов, где возможно - ускоряет работу теста Sizzle - css-селектор для jQuery легко добавляется как в сервер так и в Selenium IDE.
  • 42. 1 2 3 4 5 АВТОМАТИЗАЦИЯ
  • 43. Решение 1. “Кустарное” Запуск GUI приложений через X-сервера. e.g. Xvfb / Xephyr Анализ сырых логов Selenium тестов с подключением Selenium билд (bash- скриптинг)
  • 44. Преимущества и недостатки Сложно в поддержке Быстрое в реализации Плохо масштабируемо Дешевое (запуск на одном компьютере) Только FF/Webkit (linux машина) Ссылка на пример настройки: http://bit.ly/fjq8ge
  • 45. Решение 2. Selenium Grid Установка Selenium Grid + Hudson Selenium Plugin Настройка отдельных нод (Windows/Linux/Mac) Интеграция всего путем бесконечных настроек
  • 46. Преимущество и недостатки Масштабируемо Сложность в настройке Быстрый прогон тестов Дорогое (расходы на содержание тест фермы) Поддержка всех платформ и браузеров Сложности в поддержке Ссылка на пример настройки: http://bit.ly/gT5MvA
  • 47. Спасибо за внимание! email: shvets.serg@gmail.com

Hinweis der Redaktion

  1. &amp;#x41F;&amp;#x440;&amp;#x438;&amp;#x432;&amp;#x435;&amp;#x442;&amp;#x441;&amp;#x442;&amp;#x432;&amp;#x438;&amp;#x435;. &amp;#x426;&amp;#x435;&amp;#x43B;&amp;#x44C; &amp;#x434;&amp;#x43E;&amp;#x43A;&amp;#x43B;&amp;#x430;&amp;#x434;&amp;#x430; - &amp;#x432;&amp;#x43E; &amp;#x432;&amp;#x440;&amp;#x435;&amp;#x43C;&amp;#x44F; &amp;#x438;&amp;#x43D;&amp;#x442;&amp;#x435;&amp;#x433;&amp;#x440;&amp;#x430;&amp;#x446;&amp;#x438;&amp;#x438; &amp;#x441;&amp;#x435;&amp;#x43B;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x443;&amp;#x43C;-&amp;#x442;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x43E;&amp;#x432; &amp;#x432;&amp;#x43E;&amp;#x437;&amp;#x43D;&amp;#x438;&amp;#x43A;&amp;#x43B;&amp;#x438; &amp;#x431;&amp;#x43E;&amp;#x43B;&amp;#x44C;&amp;#x448;&amp;#x438;&amp;#x435; &amp;#x442;&amp;#x440;&amp;#x443;&amp;#x434;&amp;#x43D;&amp;#x43E;&amp;#x441;&amp;#x442;&amp;#x438; &amp;#x43F;&amp;#x440;&amp;#x438; &amp;#x440;&amp;#x435;&amp;#x430;&amp;#x43B;&amp;#x438;&amp;#x437;&amp;#x430;&amp;#x446;&amp;#x438;&amp;#x438; &amp;#x43D;&amp;#x435;&amp;#x43A;&amp;#x43E;&amp;#x442;&amp;#x43E;&amp;#x440;&amp;#x44B;&amp;#x445; &amp;#x43C;&amp;#x43E;&amp;#x43C;&amp;#x435;&amp;#x43D;&amp;#x442;&amp;#x43E;&amp;#x432;. &amp;#x425;&amp;#x43E;&amp;#x442;&amp;#x435;&amp;#x43B;&amp;#x43E;&amp;#x441;&amp;#x44C; &amp;#x43F;&amp;#x43E;&amp;#x434;&amp;#x435;&amp;#x43B;&amp;#x438;&amp;#x442;&amp;#x441;&amp;#x44F; &amp;#x441;&amp;#x43F;&amp;#x43E;&amp;#x441;&amp;#x43E;&amp;#x431;&amp;#x43E;&amp;#x43C; &amp;#x43A;&amp;#x430;&amp;#x43A; &amp;#x44D;&amp;#x442;&amp;#x438; &amp;#x442;&amp;#x440;&amp;#x443;&amp;#x434;&amp;#x43D;&amp;#x43E;&amp;#x441;&amp;#x442;&amp;#x438; &amp;#x443;&amp;#x434;&amp;#x430;&amp;#x43B;&amp;#x43E;&amp;#x441;&amp;#x44C; &amp;#x440;&amp;#x435;&amp;#x448;&amp;#x438;&amp;#x442;&amp;#x44C; &amp;#x438; &amp;#x445;&amp;#x43E;&amp;#x447;&amp;#x435;&amp;#x442;&amp;#x441;&amp;#x44F; &amp;#x43F;&amp;#x43E;&amp;#x434;&amp;#x435;&amp;#x43B;&amp;#x438;&amp;#x442;&amp;#x441;&amp;#x44F;.\n
  2. &amp;#x41F;&amp;#x435;&amp;#x440;&amp;#x432;&amp;#x44B;&amp;#x439; &amp;#x43F;&amp;#x443;&amp;#x43D;&amp;#x43A;&amp;#x442; - &amp;#x434;&amp;#x430;&amp;#x43D;&amp;#x43D;&amp;#x44B;&amp;#x435; &amp;#x43A;&amp;#x43E;&amp;#x442;&amp;#x43E;&amp;#x440;&amp;#x44B;&amp;#x435; &amp;#x437;&amp;#x430;&amp;#x441;&amp;#x442;&amp;#x430;&amp;#x432;&amp;#x438;&amp;#x43B;&amp;#x438; &amp;#x437;&amp;#x430;&amp;#x434;&amp;#x443;&amp;#x43C;&amp;#x430;&amp;#x442;&amp;#x44C;&amp;#x441;&amp;#x44F; &amp;#x438; &amp;#x43E;&amp;#x441;&amp;#x43E;&amp;#x437;&amp;#x43D;&amp;#x430;&amp;#x442;&amp;#x44C; &amp;#x43D;&amp;#x435;&amp;#x43E;&amp;#x431;&amp;#x445;&amp;#x43E;&amp;#x434;&amp;#x438;&amp;#x43C;&amp;#x43E;&amp;#x441;&amp;#x442;&amp;#x44C; &amp;#x432;&amp;#x432;&amp;#x435;&amp;#x434;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x435; &amp;#x430;&amp;#x432;&amp;#x442;&amp;#x43E;&amp;#x442;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x43E;&amp;#x432;. &amp;#x412;&amp;#x43E; &amp;#x432;&amp;#x442;&amp;#x43E;&amp;#x440;&amp;#x43E;&amp;#x43C; &amp;#x43F;&amp;#x443;&amp;#x43D;&amp;#x43A;&amp;#x442;&amp;#x435; - &amp;#x43F;&amp;#x440;&amp;#x43E;&amp;#x431;&amp;#x43B;&amp;#x435;&amp;#x43C;&amp;#x44B; &amp;#x43A;&amp;#x43E;&amp;#x442;&amp;#x43E;&amp;#x440;&amp;#x44B;&amp;#x435; &amp;#x437;&amp;#x430;&amp;#x441;&amp;#x442;&amp;#x430;&amp;#x432;&amp;#x438;&amp;#x43B;&amp;#x438; &amp;#x432;&amp;#x432;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x438; &amp;#x43E;&amp;#x43F;&amp;#x440;&amp;#x435;&amp;#x434;&amp;#x435;&amp;#x43B;&amp;#x43D;&amp;#x43D;&amp;#x443;&amp;#x44E; &amp;#x430;&amp;#x440;&amp;#x445;&amp;#x438;&amp;#x442;&amp;#x435;&amp;#x43A;&amp;#x442;&amp;#x443;&amp;#x440;&amp;#x443; &amp;#x442;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x43E;&amp;#x432;. &amp;#x412; &amp;#x442;&amp;#x440;&amp;#x435;&amp;#x442;&amp;#x44C;&amp;#x435;&amp;#x43C; &amp;#x43F;&amp;#x443;&amp;#x43D;&amp;#x43A;&amp;#x442;&amp;#x435; - &amp;#x441;&amp;#x43F;&amp;#x43E;&amp;#x441;&amp;#x43E;&amp;#x431; &amp;#x43D;&amp;#x430;&amp;#x43F;&amp;#x438;&amp;#x441;&amp;#x430;&amp;#x43D;&amp;#x438;&amp;#x44F; &amp;#x442;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x43E;&amp;#x432;, &amp;#x43A;&amp;#x43E;&amp;#x442;&amp;#x43E;&amp;#x440;&amp;#x44B;&amp;#x439; &amp;#x43F;&amp;#x43E;&amp;#x437;&amp;#x432;&amp;#x43E;&amp;#x43B;&amp;#x44F;&amp;#x435;&amp;#x442; &amp;#x43F;&amp;#x440;&amp;#x438;&amp;#x432;&amp;#x43B;&amp;#x435;&amp;#x447;&amp;#x44C; &amp;#x440;&amp;#x430;&amp;#x437;&amp;#x440;&amp;#x430;&amp;#x431;&amp;#x43E;&amp;#x442;&amp;#x447;&amp;#x438;&amp;#x43A;&amp;#x43E;&amp;#x432;, &amp;#x430; &amp;#x43D;&amp;#x435; &amp;#x442;&amp;#x43E;&amp;#x43B;&amp;#x44C;&amp;#x43A;&amp;#x43E; QA &amp;#x43E;&amp;#x442;&amp;#x434;&amp;#x435;&amp;#x43B; &amp;#x438; &amp;#x43A;&amp;#x430;&amp;#x43A;&amp;#x438;&amp;#x435; &amp;#x43F;&amp;#x440;&amp;#x435;&amp;#x438;&amp;#x43C;&amp;#x443;&amp;#x449;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x432;&amp;#x430; &amp;#x441; &amp;#x44D;&amp;#x442;&amp;#x43E;&amp;#x433;&amp;#x43E; &amp;#x43C;&amp;#x43E;&amp;#x436;&amp;#x43D;&amp;#x43E; &amp;#x438;&amp;#x437;&amp;#x432;&amp;#x43B;&amp;#x435;&amp;#x447;&amp;#x44C;. &amp;#x412; &amp;#x447;&amp;#x435;&amp;#x442;&amp;#x432;&amp;#x435;&amp;#x440;&amp;#x442;&amp;#x43E;&amp;#x43C; &amp;#x43F;&amp;#x443;&amp;#x43D;&amp;#x43A;&amp;#x442;&amp;#x435; - &amp;#x441;&amp;#x43F;&amp;#x435;&amp;#x446;&amp;#x438;&amp;#x444;&amp;#x438;&amp;#x447;&amp;#x43D;&amp;#x44B;&amp;#x435; &amp;#x43F;&amp;#x440;&amp;#x438;&amp;#x435;&amp;#x43C;&amp;#x44B; &amp;#x441;&amp;#x435;&amp;#x43B;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x443;&amp;#x43C;&amp;#x430; &amp;#x43A;&amp;#x43E;&amp;#x442;&amp;#x43E;&amp;#x440;&amp;#x44B;&amp;#x435; &amp;#x43D;&amp;#x435;&amp;#x43E;&amp;#x431;&amp;#x445;&amp;#x43E;&amp;#x434;&amp;#x438;&amp;#x43C;&amp;#x44B; &amp;#x434;&amp;#x43B;&amp;#x44F; &amp;#x442;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x438;&amp;#x440;&amp;#x43E;&amp;#x432;&amp;#x430;&amp;#x43D;&amp;#x438;&amp;#x44F; &amp;#x43F;&amp;#x440;&amp;#x438;&amp;#x43B;&amp;#x43E;&amp;#x436;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x439; &amp;#x442;&amp;#x438;&amp;#x43F;&amp;#x430; &amp;#x43D;&amp;#x430;&amp;#x448;&amp;#x435;&amp;#x433;&amp;#x43E;. &amp;#x41F;&amp;#x44F;&amp;#x442;&amp;#x44B;&amp;#x439; &amp;#x43F;&amp;#x443;&amp;#x43D;&amp;#x43A;&amp;#x442; - &amp;#x43A;&amp;#x440;&amp;#x430;&amp;#x442;&amp;#x43A;&amp;#x430;&amp;#x44F; &amp;#x438;&amp;#x43D;&amp;#x444;&amp;#x43E;&amp;#x440;&amp;#x43C;&amp;#x430;&amp;#x446;&amp;#x438;&amp;#x44F; &amp;#x43E;&amp;#x431; &amp;#x43F;&amp;#x43E;&amp;#x434;&amp;#x445;&amp;#x43E;&amp;#x434;&amp;#x430;&amp;#x445; &amp;#x430;&amp;#x432;&amp;#x442;&amp;#x43E;&amp;#x43C;&amp;#x430;&amp;#x442;&amp;#x438;&amp;#x437;&amp;#x430;&amp;#x446;&amp;#x438;&amp;#x438;.\n
  3. &amp;#x418;&amp;#x442;&amp;#x430;&amp;#x43A; &amp;#x43D;&amp;#x430;&amp;#x447;&amp;#x438;&amp;#x43D;&amp;#x430;&amp;#x435;&amp;#x43C; - &amp;#x43F;&amp;#x435;&amp;#x440;&amp;#x432;&amp;#x430;&amp;#x44F; &amp;#x442;&amp;#x435;&amp;#x43C;&amp;#x430; &amp;#x41D;&amp;#x435;&amp;#x43E;&amp;#x431;&amp;#x445;&amp;#x43E;&amp;#x434;&amp;#x438;&amp;#x43C;&amp;#x43E;&amp;#x441;&amp;#x442;&amp;#x44C; &amp;#x432;&amp;#x432;&amp;#x435;&amp;#x434;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x44F; &amp;#x430;&amp;#x432;&amp;#x442;&amp;#x43E;&amp;#x442;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x43E;&amp;#x432;\n
  4. &amp;#x41F;&amp;#x440;&amp;#x43E;&amp;#x435;&amp;#x43A;&amp;#x442; &amp;#x43A;&amp;#x43E;&amp;#x442;&amp;#x43E;&amp;#x440;&amp;#x44B;&amp;#x435; &amp;#x43C;&amp;#x44B; &amp;#x442;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x438;&amp;#x440;&amp;#x443;&amp;#x435;&amp;#x43C; &amp;#x43D;&amp;#x430;&amp;#x437;&amp;#x44B;&amp;#x432;&amp;#x430;&amp;#x435;&amp;#x442;&amp;#x441;&amp;#x44F; Nimble. &amp;#x411;&amp;#x43E;&amp;#x43B;&amp;#x44C;&amp;#x448;&amp;#x430;&amp;#x44F; sCRM &amp;#x441;&amp;#x438;&amp;#x441;&amp;#x442;&amp;#x435;&amp;#x43C;&amp;#x430;, &amp;#x43A;&amp;#x43E;&amp;#x442;&amp;#x43E;&amp;#x440;&amp;#x430;&amp;#x44F; &amp;#x438;&amp;#x43C;&amp;#x435;&amp;#x435;&amp;#x442; &amp;#x441;&amp;#x43B;&amp;#x435;&amp;#x434;&amp;#x443;&amp;#x44E;&amp;#x449;&amp;#x435;&amp;#x435; &amp;#x442;&amp;#x435;&amp;#x445;&amp;#x43D;&amp;#x438;&amp;#x447;&amp;#x435;&amp;#x441;&amp;#x43A;&amp;#x438;&amp;#x435; &amp;#x43E;&amp;#x441;&amp;#x43E;&amp;#x431;&amp;#x435;&amp;#x43D;&amp;#x43D;&amp;#x43E;&amp;#x441;&amp;#x442;&amp;#x438;: &amp;#x43F;&amp;#x435;&amp;#x440;&amp;#x435;&amp;#x447;&amp;#x438;&amp;#x441;&amp;#x43B;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x435; &amp;#x43A;&amp;#x43E;&amp;#x43C;&amp;#x43F;&amp;#x43E;&amp;#x43D;&amp;#x435;&amp;#x43D;&amp;#x442;&amp;#x43E;&amp;#x432; &amp;#x43A;&amp;#x43E;&amp;#x442;&amp;#x43E;&amp;#x440;&amp;#x44B;&amp;#x435; &amp;#x441;&amp;#x442;&amp;#x440;&amp;#x43E;&amp;#x44F;&amp;#x442;&amp;#x441;&amp;#x44F; &amp;#x43D;&amp;#x430; &amp;#x43B;&amp;#x435;&amp;#x442;&amp;#x443; (&amp;#x43F;&amp;#x440;&amp;#x438;&amp;#x43C;&amp;#x435;&amp;#x440;&amp;#x44B; &amp;#x432; &amp;#x437;&amp;#x430;&amp;#x432;&amp;#x438;&amp;#x441;&amp;#x438;&amp;#x43C;&amp;#x43E;&amp;#x441;&amp;#x442;&amp;#x438; &amp;#x43E;&amp;#x442; &amp;#x43F;&amp;#x440;&amp;#x438;&amp;#x435;&amp;#x445;&amp;#x430;&amp;#x432;&amp;#x448;&amp;#x438;&amp;#x445; &amp;#x434;&amp;#x430;&amp;#x43D;&amp;#x43D;&amp;#x44B;&amp;#x445; &amp;#x43E;&amp;#x442;&amp;#x441;&amp;#x442;&amp;#x440;&amp;#x430;&amp;#x438;&amp;#x432;&amp;#x430;&amp;#x435;&amp;#x442;&amp;#x441;&amp;#x44F; &amp;#x442;&amp;#x430; &amp;#x438;&amp;#x43B;&amp;#x438; &amp;#x438;&amp;#x43D;&amp;#x430;&amp;#x44F; &amp;#x442;&amp;#x430;&amp;#x431;&amp;#x43B;&amp;#x438;&amp;#x446;&amp;#x430;), &amp;#x447;&amp;#x430;&amp;#x441;&amp;#x442;&amp;#x430;&amp;#x44F; &amp;#x441;&amp;#x43C;&amp;#x435;&amp;#x43D;&amp;#x430; DOM, &amp;#x437;&amp;#x430;&amp;#x432;&amp;#x438;&amp;#x441;&amp;#x438;&amp;#x43C;&amp;#x43E;&amp;#x441;&amp;#x442;&amp;#x44C; &amp;#x43E;&amp;#x442; &amp;#x442;&amp;#x432;&amp;#x438;&amp;#x442;&amp;#x442;&amp;#x435;&amp;#x440;&amp;#x430;, &amp;#x444;&amp;#x435;&amp;#x439;&amp;#x441;&amp;#x431;&amp;#x443;&amp;#x43A;&amp;#x430;, &amp;#x433;&amp;#x443;&amp;#x433;&amp;#x43B;&amp;#x430;. &amp;#x414;&amp;#x430;&amp;#x43B;&amp;#x44C;&amp;#x43D;&amp;#x435;&amp;#x439;&amp;#x448;&amp;#x438;&amp;#x435; &amp;#x43F;&amp;#x440;&amp;#x438;&amp;#x43C;&amp;#x435;&amp;#x440;&amp;#x44B; &amp;#x431;&amp;#x443;&amp;#x434;&amp;#x443;&amp;#x442; &amp;#x43F;&amp;#x440;&amp;#x438;&amp;#x432;&amp;#x43E;&amp;#x434;&amp;#x438;&amp;#x442;&amp;#x441;&amp;#x44F; &amp;#x43E;&amp;#x442;&amp;#x43D;&amp;#x43E;&amp;#x441;&amp;#x438;&amp;#x442;&amp;#x435;&amp;#x43B;&amp;#x44C;&amp;#x43D;&amp;#x43E; &amp;#x44D;&amp;#x442;&amp;#x43E;&amp;#x439; &amp;#x442;&amp;#x435;&amp;#x43C;&amp;#x430;&amp;#x442;&amp;#x438;&amp;#x43A;&amp;#x438;, &amp;#x43F;&amp;#x43E;&amp;#x44D;&amp;#x442;&amp;#x43E;&amp;#x43C;&amp;#x443; &amp;#x43F;&amp;#x440;&amp;#x43E;&amp;#x441;&amp;#x44C;&amp;#x431;&amp;#x430; &amp;#x437;&amp;#x430;&amp;#x43F;&amp;#x43E;&amp;#x43C;&amp;#x43D;&amp;#x438;&amp;#x442;&amp;#x44C; &amp;#x43E;&amp;#x441;&amp;#x43D;&amp;#x43E;&amp;#x432;&amp;#x43D;&amp;#x44B;&amp;#x435; &amp;#x43C;&amp;#x43E;&amp;#x43C;&amp;#x435;&amp;#x43D;&amp;#x442;&amp;#x44B;.\n
  5. &amp;#x41F;&amp;#x440;&amp;#x43E;&amp;#x431;&amp;#x43B;&amp;#x435;&amp;#x43C;&amp;#x44B; &amp;#x442;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x438;&amp;#x440;&amp;#x43E;&amp;#x432;&amp;#x430;&amp;#x43D;&amp;#x438;&amp;#x44F; &amp;#x432;&amp;#x440;&amp;#x443;&amp;#x447;&amp;#x43D;&amp;#x443;&amp;#x44E; : &amp;#x434;&amp;#x43E;&amp;#x43F;&amp;#x443;&amp;#x441;&amp;#x442;&amp;#x438;&amp;#x43C; &amp;#x43D;&amp;#x435;&amp;#x43E;&amp;#x431;&amp;#x445;&amp;#x43E;&amp;#x434;&amp;#x438;&amp;#x43C;&amp;#x43E; &amp;#x43F;&amp;#x440;&amp;#x43E;&amp;#x442;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x438;&amp;#x440;&amp;#x43E;&amp;#x432;&amp;#x430;&amp;#x442;&amp;#x44C; &amp;#x441;&amp;#x438;&amp;#x43D;&amp;#x445;&amp;#x440;&amp;#x43E;&amp;#x43D;&amp;#x438;&amp;#x437;&amp;#x430;&amp;#x446;&amp;#x438;&amp;#x44E; &amp;#x43F;&amp;#x438;&amp;#x441;&amp;#x435;&amp;#x43C; &amp;#x441; &amp;#x433;&amp;#x443;&amp;#x433;&amp;#x43B;-&amp;#x430;&amp;#x43A;&amp;#x43A;&amp;#x430;&amp;#x443;&amp;#x43D;&amp;#x442;&amp;#x43E;&amp;#x43C;. &amp;#x421;&amp;#x43A;&amp;#x43E;&amp;#x43B;&amp;#x44C;&amp;#x43A;&amp;#x43E; &amp;#x43D;&amp;#x430; &amp;#x44D;&amp;#x442;&amp;#x43E; &amp;#x43F;&amp;#x43E;&amp;#x442;&amp;#x440;&amp;#x435;&amp;#x431;&amp;#x443;&amp;#x435;&amp;#x442;&amp;#x441;&amp;#x44F; &amp;#x432;&amp;#x440;&amp;#x435;&amp;#x43C;&amp;#x435;&amp;#x43D;&amp;#x438;? &amp;#x412;&amp;#x435;&amp;#x434;&amp;#x44C; &amp;#x43D;&amp;#x435;&amp;#x43E;&amp;#x431;&amp;#x445;&amp;#x43E;&amp;#x434;&amp;#x438;&amp;#x43C;&amp;#x43E; &amp;#x43F;&amp;#x435;&amp;#x440;&amp;#x435;&amp;#x43A;&amp;#x43B;&amp;#x44E;&amp;#x447;&amp;#x430;&amp;#x442;&amp;#x44C;&amp;#x441;&amp;#x44F; &amp;#x43C;&amp;#x435;&amp;#x436;&amp;#x434;&amp;#x443; &amp;#x440;&amp;#x430;&amp;#x437;&amp;#x43D;&amp;#x44B;&amp;#x43C;&amp;#x438; &amp;#x431;&amp;#x440;&amp;#x430;&amp;#x443;&amp;#x437;&amp;#x435;&amp;#x440;&amp;#x430;&amp;#x43C;&amp;#x438; &amp;#x430;&amp;#x43A;&amp;#x43A;&amp;#x430;&amp;#x443;&amp;#x43D;&amp;#x442;&amp;#x430;&amp;#x43C;&amp;#x438;. &amp;#x412;&amp;#x442;&amp;#x43E;&amp;#x440;&amp;#x43E;&amp;#x439; &amp;#x43C;&amp;#x43E;&amp;#x43C;&amp;#x435;&amp;#x43D;&amp;#x442; &amp;#x43E;&amp;#x431;&amp;#x440;&amp;#x438;&amp;#x441;&amp;#x43E;&amp;#x432;&amp;#x44B;&amp;#x432;&amp;#x430;&amp;#x435;&amp;#x442;, &amp;#x447;&amp;#x442;&amp;#x43E; &amp;#x441;&amp;#x43B;&amp;#x438;&amp;#x448;&amp;#x43A;&amp;#x43E;&amp;#x43C; &amp;#x43C;&amp;#x43D;&amp;#x43E;&amp;#x433;&amp;#x43E; &amp;#x444;&amp;#x443;&amp;#x43D;&amp;#x43A;&amp;#x446;&amp;#x438;&amp;#x43E;&amp;#x43D;&amp;#x430;&amp;#x43B;&amp;#x430; &amp;#x434;&amp;#x43E;&amp;#x431;&amp;#x430;&amp;#x432;&amp;#x43B;&amp;#x44F;&amp;#x435;&amp;#x442;&amp;#x441;&amp;#x44F; &amp;#x432; &amp;#x434;&amp;#x43D;&amp;#x438; &amp;#x431;&amp;#x43B;&amp;#x438;&amp;#x437;&amp;#x43A;&amp;#x438;&amp;#x435; &amp;#x43A; &amp;#x440;&amp;#x435;&amp;#x43B;&amp;#x438;&amp;#x437;&amp;#x443;, &amp;#x44D;&amp;#x43D;&amp;#x442;&amp;#x440;&amp;#x43E;&amp;#x43F;&amp;#x438;&amp;#x44F; &amp;#x443; &amp;#x43F;&amp;#x440;&amp;#x43E;&amp;#x434;&amp;#x443;&amp;#x43A;&amp;#x442;&amp;#x430; &amp;#x431;&amp;#x43E;&amp;#x43B;&amp;#x44C;&amp;#x448;&amp;#x430;&amp;#x44F;, &amp;#x447;&amp;#x442;&amp;#x43E; &amp;#x437;&amp;#x43D;&amp;#x430;&amp;#x447;&amp;#x438;&amp;#x442; &amp;#x447;&amp;#x442;&amp;#x43E; &amp;#x432;&amp;#x43E;&amp;#x437;&amp;#x43C;&amp;#x43E;&amp;#x436;&amp;#x43D;&amp;#x43E;&amp;#x441;&amp;#x442;&amp;#x44C; &amp;#x43F;&amp;#x43E;&amp;#x43B;&amp;#x43E;&amp;#x43C;&amp;#x430;&amp;#x442;&amp;#x44C; &amp;#x442;&amp;#x43E;&amp;#x442; &amp;#x438;&amp;#x43B;&amp;#x438; &amp;#x438;&amp;#x43D;&amp;#x43E;&amp;#x439; &amp;#x444;&amp;#x443;&amp;#x43D;&amp;#x43A;&amp;#x446;&amp;#x438;&amp;#x43E;&amp;#x43D;&amp;#x430;&amp;#x43B;, &amp;#x434;&amp;#x43E;&amp;#x432;&amp;#x43E;&amp;#x43B;&amp;#x44C;&amp;#x43D;&amp;#x43E; &amp;#x440;&amp;#x435;&amp;#x430;&amp;#x43B;&amp;#x44C;&amp;#x43D;&amp;#x430;. &amp;#x41E;&amp;#x442;&amp;#x441;&amp;#x44E;&amp;#x434;&amp;#x430;, &amp;#x438; &amp;#x43F;&amp;#x43E;&amp;#x43B;&amp;#x443;&amp;#x447;&amp;#x430;&amp;#x44E;&amp;#x442;&amp;#x441;&amp;#x44F; &amp;#x43D;&amp;#x435;&amp;#x43E;&amp;#x436;&amp;#x438;&amp;#x434;&amp;#x430;&amp;#x43D;&amp;#x43D;&amp;#x44B;&amp;#x435; &amp;#x431;&amp;#x430;&amp;#x433;&amp;#x438; &amp;#x43F;&amp;#x435;&amp;#x440;&amp;#x435;&amp;#x434; &amp;#x440;&amp;#x435;&amp;#x43B;&amp;#x438;&amp;#x437;&amp;#x43E;&amp;#x43C;/&amp;#x434;&amp;#x435;&amp;#x43F;&amp;#x43B;&amp;#x43E;&amp;#x435;&amp;#x43C;, &amp;#x447;&amp;#x442;&amp;#x43E; &amp;#x43D;&amp;#x435;&amp;#x441;&amp;#x43E;&amp;#x43C;&amp;#x43D;&amp;#x435;&amp;#x43D;&amp;#x43D;&amp;#x43E; &amp;#x441;&amp;#x43A;&amp;#x430;&amp;#x437;&amp;#x44B;&amp;#x432;&amp;#x430;&amp;#x435;&amp;#x442;&amp;#x441;&amp;#x44F; &amp;#x43D;&amp;#x430; &amp;#x43E;&amp;#x431;&amp;#x449;&amp;#x435;&amp;#x439; &amp;#x442;&amp;#x435;&amp;#x43C;&amp;#x43F;&amp;#x435;&amp;#x440;&amp;#x430;&amp;#x442;&amp;#x443;&amp;#x440;&amp;#x435; &amp;#x43F;&amp;#x43E; &amp;#x43F;&amp;#x430;&amp;#x43B;&amp;#x430;&amp;#x442;&amp;#x435;, &amp;#x430; &amp;#x438;&amp;#x43C;&amp;#x435;&amp;#x43D;&amp;#x43D;&amp;#x43E; &amp;#x43D;&amp;#x430;&amp;#x441;&amp;#x442;&amp;#x440;&amp;#x43E;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x44E; &amp;#x432; &amp;#x43A;&amp;#x43E;&amp;#x43B;&amp;#x43B;&amp;#x435;&amp;#x43A;&amp;#x442;&amp;#x438;&amp;#x432;&amp;#x435;.\n
  6. &amp;#x414;&amp;#x430;&amp;#x431;&amp;#x44B; &amp;#x43D;&amp;#x435; &amp;#x431;&amp;#x44B;&amp;#x442;&amp;#x44C; &amp;#x433;&amp;#x43E;&amp;#x43B;&amp;#x43E;&amp;#x441;&amp;#x43B;&amp;#x43E;&amp;#x432;&amp;#x43D;&amp;#x44B;&amp;#x43C; &amp;#x43F;&amp;#x440;&amp;#x438;&amp;#x432;&amp;#x435;&amp;#x434;&amp;#x443; &amp;#x43D;&amp;#x435;&amp;#x43A;&amp;#x43E;&amp;#x442;&amp;#x43E;&amp;#x440;&amp;#x44B;&amp;#x435; &amp;#x446;&amp;#x438;&amp;#x444;&amp;#x440;&amp;#x44B;. &amp;#x414;&amp;#x432;&amp;#x435; &amp;#x43F;&amp;#x440;&amp;#x43E;&amp;#x432;&amp;#x435;&amp;#x440;&amp;#x43A;&amp;#x438; - &amp;#x440;&amp;#x435;&amp;#x433;&amp;#x440;&amp;#x435;&amp;#x441;&amp;#x441;&amp;#x438;&amp;#x43E;&amp;#x43D;&amp;#x43D;&amp;#x430;&amp;#x44F; &amp;#x43F;&amp;#x440;&amp;#x43E;&amp;#x432;&amp;#x435;&amp;#x440;&amp;#x43A;&amp;#x430; &amp;#x43D;&amp;#x430; &amp;#x431;&amp;#x430;&amp;#x433;&amp;#x438; &amp;#x43F;&amp;#x435;&amp;#x440;&amp;#x435;&amp;#x434; &amp;#x434;&amp;#x435;&amp;#x43F;&amp;#x43B;&amp;#x43E;&amp;#x435;&amp;#x43C; &amp;#x438; &amp;#x440;&amp;#x435;&amp;#x433;&amp;#x440;&amp;#x435;&amp;#x441;&amp;#x441;&amp;#x438;&amp;#x43E;&amp;#x43D;&amp;#x43D;&amp;#x430;&amp;#x44F; &amp;#x43F;&amp;#x440;&amp;#x43E;&amp;#x432;&amp;#x435;&amp;#x440;&amp;#x43A;&amp;#x430; &amp;#x43D;&amp;#x430; &amp;#x431;&amp;#x430;&amp;#x433;&amp;#x438; &amp;#x43F;&amp;#x43E;&amp;#x441;&amp;#x43B;&amp;#x435; &amp;#x434;&amp;#x435;&amp;#x43F;&amp;#x43B;&amp;#x43E;&amp;#x44F;, &amp;#x447;&amp;#x442;&amp;#x43E;&amp;#x431;&amp;#x44B; &amp;#x443;&amp;#x431;&amp;#x435;&amp;#x434;&amp;#x438;&amp;#x442;&amp;#x441;&amp;#x44F; &amp;#x447;&amp;#x442;&amp;#x43E; &amp;#x43D;&amp;#x430; &amp;#x43F;&amp;#x440;&amp;#x43E;&amp;#x434;&amp;#x430;&amp;#x43A;&amp;#x448;&amp;#x438;&amp;#x43D;&amp;#x435; &amp;#x43D;&amp;#x435; &amp;#x432;&amp;#x44B;&amp;#x43B;&amp;#x435;&amp;#x437;&amp;#x43B;&amp;#x43E; &amp;#x43D;&amp;#x438;&amp;#x43A;&amp;#x430;&amp;#x43A;&amp;#x438;&amp;#x445; &amp;#x431;&amp;#x430;&amp;#x433;&amp;#x43E;&amp;#x432;. &amp;#x418; &amp;#x44D;&amp;#x442;&amp;#x438; &amp;#x446;&amp;#x438;&amp;#x444;&amp;#x440;&amp;#x44B; &amp;#x442;&amp;#x43E;&amp;#x43B;&amp;#x44C;&amp;#x43A;&amp;#x43E; &amp;#x434;&amp;#x43B;&amp;#x44F; &amp;#x43C;&amp;#x43E;&amp;#x434;&amp;#x435;&amp;#x43B;&amp;#x438; &amp;#x442;&amp;#x438;&amp;#x43F;&amp;#x430; agile, &amp;#x43A;&amp;#x43E;&amp;#x442;&amp;#x43E;&amp;#x440;&amp;#x430;&amp;#x44F; &amp;#x441;&amp;#x43E;&amp;#x434;&amp;#x435;&amp;#x440;&amp;#x436;&amp;#x438;&amp;#x442; &amp;#x438;&amp;#x442;&amp;#x435;&amp;#x440;&amp;#x430;&amp;#x446;&amp;#x438;&amp;#x438;, &amp;#x430; &amp;#x435;&amp;#x441;&amp;#x43B;&amp;#x438; &amp;#x43F;&amp;#x435;&amp;#x440;&amp;#x435;&amp;#x439;&amp;#x442;&amp;#x438; &amp;#x43A; &amp;#x441;&amp;#x445;&amp;#x435;&amp;#x43C;&amp;#x435; continious deployment &amp;#x442;&amp;#x43E; &amp;#x441;&amp;#x438;&amp;#x442;&amp;#x443;&amp;#x430;&amp;#x446;&amp;#x438;&amp;#x44F; &amp;#x431;&amp;#x443;&amp;#x434;&amp;#x435;&amp;#x442; &amp;#x435;&amp;#x449;&amp;#x435; &amp;#x441;&amp;#x43B;&amp;#x43E;&amp;#x436;&amp;#x43D;&amp;#x435;&amp;#x435;.\n
  7. &amp;#x412;&amp;#x44B;&amp;#x432;&amp;#x43E;&amp;#x434; &amp;#x43E;&amp;#x442;&amp;#x43A;&amp;#x443;&amp;#x434;&amp;#x430; &amp;#x431;&amp;#x435;&amp;#x440;&amp;#x435;&amp;#x442;&amp;#x441;&amp;#x44F; &amp;#x44D;&amp;#x43A;&amp;#x43E;&amp;#x43D;&amp;#x43E;&amp;#x43C;&amp;#x438;&amp;#x44F; &amp;#x432;&amp;#x440;&amp;#x435;&amp;#x43C;&amp;#x435;&amp;#x43D;&amp;#x438;, &amp;#x43F;&amp;#x43E;&amp;#x447;&amp;#x435;&amp;#x43C;&amp;#x443; &amp;#x440;&amp;#x430;&amp;#x441;&amp;#x442;&amp;#x435;&amp;#x442; &amp;#x441;&amp;#x442;&amp;#x430;&amp;#x431;&amp;#x438;&amp;#x43B;&amp;#x44C;&amp;#x43D;&amp;#x43E;&amp;#x441;&amp;#x442;&amp;#x44C;.\n&amp;#x421;&amp;#x430;&amp;#x43C;&amp;#x43E;&amp;#x435; &amp;#x433;&amp;#x43B;&amp;#x430;&amp;#x432;&amp;#x43D;&amp;#x43E;&amp;#x435; - &amp;#x43F;&amp;#x43E;&amp;#x447;&amp;#x435;&amp;#x43C;&amp;#x443; &amp;#x443;&amp;#x43C;&amp;#x435;&amp;#x43D;&amp;#x44C;&amp;#x448;&amp;#x430;&amp;#x435;&amp;#x442;&amp;#x441;&amp;#x44F; &amp;#x43A;&amp;#x43E;&amp;#x43B;&amp;#x438;&amp;#x447;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x432;&amp;#x43E; &amp;#x43F;&amp;#x435;&amp;#x440;&amp;#x435;&amp;#x43E;&amp;#x442;&amp;#x43A;&amp;#x440;&amp;#x44B;&amp;#x442;&amp;#x44B;&amp;#x445; &amp;#x431;&amp;#x430;&amp;#x433;&amp;#x43E;&amp;#x432; - &amp;#x441;&amp;#x432;&amp;#x44F;&amp;#x437;&amp;#x430;&amp;#x442;&amp;#x44C; &amp;#x441; &amp;#x43F;&amp;#x43E;&amp;#x434;&amp;#x445;&amp;#x43E;&amp;#x434;&amp;#x43E;&amp;#x43C; &amp;#x447;&amp;#x435;&amp;#x440;&amp;#x435;&amp;#x437; &amp;#x440;&amp;#x430;&amp;#x437;&amp;#x440;&amp;#x430;&amp;#x431;&amp;#x43E;&amp;#x442;&amp;#x447;&amp;#x438;&amp;#x43A;&amp;#x43E;&amp;#x432;. &amp;#x421;&amp;#x43E;&amp;#x431;&amp;#x441;&amp;#x442;&amp;#x432;&amp;#x435;&amp;#x43D;&amp;#x43D;&amp;#x43E; &amp;#x442;&amp;#x430;&amp;#x43A;&amp;#x438;&amp;#x435; &amp;#x43C;&amp;#x44B;&amp;#x441;&amp;#x43B;&amp;#x438; &amp;#x438; &amp;#x43F;&amp;#x43E;&amp;#x43A;&amp;#x430;&amp;#x437;&amp;#x430;&amp;#x43B;&amp;#x438;, &amp;#x447;&amp;#x442;&amp;#x43E; &amp;#x430;&amp;#x432;&amp;#x442;&amp;#x43E;&amp;#x442;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x44B; - &amp;#x43D;&amp;#x435;&amp;#x43E;&amp;#x431;&amp;#x445;&amp;#x43E;&amp;#x434;&amp;#x438;&amp;#x43C;&amp;#x44B; &amp;#x432; &amp;#x43D;&amp;#x430;&amp;#x448;&amp;#x435;&amp;#x43C; &amp;#x43F;&amp;#x440;&amp;#x438;&amp;#x43B;&amp;#x43E;&amp;#x436;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x438;, &amp;#x43A;&amp;#x430;&amp;#x43A; &amp;#x432;&amp;#x43E;&amp;#x437;&amp;#x434;&amp;#x443;&amp;#x445;.\n
  8. &amp;#x412;&amp;#x442;&amp;#x43E;&amp;#x440;&amp;#x43E;&amp;#x439; &amp;#x43F;&amp;#x443;&amp;#x43D;&amp;#x43A;&amp;#x442;, &amp;#x430;&amp;#x440;&amp;#x445;&amp;#x438;&amp;#x442;&amp;#x435;&amp;#x43A;&amp;#x442;&amp;#x443;&amp;#x440;&amp;#x430; &amp;#x442;&amp;#x435;&amp;#x441;&amp;#x442; &amp;#x43F;&amp;#x440;&amp;#x438;&amp;#x43B;&amp;#x43E;&amp;#x436;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x44F;. &amp;#x421; &amp;#x447;&amp;#x435;&amp;#x433;&amp;#x43E; &amp;#x445;&amp;#x43E;&amp;#x447;&amp;#x435;&amp;#x442;&amp;#x441;&amp;#x44F; &amp;#x43D;&amp;#x430;&amp;#x447;&amp;#x430;&amp;#x442;&amp;#x44C;, &amp;#x442;&amp;#x430;&amp;#x43A; &amp;#x44D;&amp;#x442;&amp;#x43E; &amp;#x441; &amp;#x43E;&amp;#x441;&amp;#x43D;&amp;#x43E;&amp;#x432;&amp;#x43D;&amp;#x43E;&amp;#x439; &amp;#x43F;&amp;#x440;&amp;#x43E;&amp;#x431;&amp;#x43B;&amp;#x435;&amp;#x43C;&amp;#x44B; AJAX-&amp;#x43F;&amp;#x440;&amp;#x438;&amp;#x43B;&amp;#x43E;&amp;#x436;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x439; &amp;#x438; &amp;#x434;&amp;#x430;&amp;#x436;&amp;#x435; &amp;#x43F;&amp;#x440;&amp;#x430;&amp;#x432;&amp;#x438;&amp;#x43B;&amp;#x44C;&amp;#x43D;&amp;#x435;&amp;#x435; &amp;#x441;&amp;#x43A;&amp;#x430;&amp;#x437;&amp;#x430;&amp;#x442;&amp;#x44C; &amp;#x43D;&amp;#x435; AJAX, &amp;#x430; Rich Internet Applications.\n
  9. &amp;#x421;&amp;#x43E;&amp;#x431;&amp;#x441;&amp;#x442;&amp;#x432;&amp;#x435;&amp;#x43D;&amp;#x43D;&amp;#x43E; &amp;#x43F;&amp;#x440;&amp;#x43E;&amp;#x431;&amp;#x43B;&amp;#x435;&amp;#x43C;&amp;#x430;: (&amp;#x437;&amp;#x430;&amp;#x447;&amp;#x438;&amp;#x442;&amp;#x430;&amp;#x442;&amp;#x44C;). &amp;#x41F;&amp;#x43E;&amp;#x447;&amp;#x435;&amp;#x43C;&amp;#x443; &amp;#x44D;&amp;#x442;&amp;#x43E; &amp;#x442;&amp;#x430;&amp;#x43A;? &amp;#x412;&amp;#x441;&amp;#x43F;&amp;#x43E;&amp;#x43C;&amp;#x438;&amp;#x43D;&amp;#x430;&amp;#x435;&amp;#x43C; &amp;#x441;&amp;#x438;&amp;#x43B;&amp;#x44C;&amp;#x43D;&amp;#x443;&amp;#x44E; &amp;#x441;&amp;#x432;&amp;#x44F;&amp;#x437;&amp;#x43D;&amp;#x43E;&amp;#x441;&amp;#x442;&amp;#x44C; &amp;#x43F;&amp;#x440;&amp;#x438;&amp;#x43B;&amp;#x43E;&amp;#x436;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x44F;, &amp;#x43A;&amp;#x43E;&amp;#x442;&amp;#x43E;&amp;#x440;&amp;#x430;&amp;#x44F; &amp;#x441;&amp;#x432;&amp;#x43E;&amp;#x439;&amp;#x441;&amp;#x442;&amp;#x432;&amp;#x435;&amp;#x43D;&amp;#x43D;&amp;#x430; Rich Internet Application &amp;#x438; &amp;#x43F;&amp;#x440;&amp;#x430;&amp;#x432;&amp;#x438;&amp;#x43B;&amp;#x430; &amp;#x445;&amp;#x43E;&amp;#x440;&amp;#x43E;&amp;#x448;&amp;#x435;&amp;#x433;&amp;#x43E; &amp;#x43F;&amp;#x440;&amp;#x438;&amp;#x43B;&amp;#x43E;&amp;#x436;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x44F;, &amp;#x447;&amp;#x442;&amp;#x43E; &amp;#x432; &amp;#x43F;&amp;#x440;&amp;#x438;&amp;#x43B;&amp;#x43E;&amp;#x436;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x438; &amp;#x434;&amp;#x43E;&amp;#x43B;&amp;#x436;&amp;#x43D;&amp;#x430; &amp;#x431;&amp;#x44B;&amp;#x442;&amp;#x44C; &amp;#x435;&amp;#x434;&amp;#x438;&amp;#x43D;&amp;#x43E;&amp;#x43E;&amp;#x431;&amp;#x440;&amp;#x430;&amp;#x437;&amp;#x43D;&amp;#x43E;&amp;#x441;&amp;#x442;&amp;#x44C;. &amp;#x415;&amp;#x441;&amp;#x442;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x432;&amp;#x435;&amp;#x43D;&amp;#x43D;&amp;#x44B;&amp;#x43C; &amp;#x43C;&amp;#x43E;&amp;#x43C;&amp;#x435;&amp;#x43D;&amp;#x442;&amp;#x43E;&amp;#x43C; &amp;#x442;&amp;#x443;&amp;#x442; - &amp;#x44F;&amp;#x432;&amp;#x43B;&amp;#x44F;&amp;#x435;&amp;#x442;&amp;#x441;&amp;#x44F; &amp;#x43F;&amp;#x43E;&amp;#x432;&amp;#x442;&amp;#x43E;&amp;#x440;&amp;#x44F;&amp;#x435;&amp;#x43C;&amp;#x43E;&amp;#x441;&amp;#x442;&amp;#x44C; &amp;#x43A;&amp;#x43E;&amp;#x434;&amp;#x430; &amp;#x43A;&amp;#x43E;&amp;#x43C;&amp;#x43F;&amp;#x43E;&amp;#x43D;&amp;#x435;&amp;#x43D;&amp;#x442;&amp;#x430;, &amp;#x438; &amp;#x441;&amp;#x43E;&amp;#x43E;&amp;#x442;&amp;#x432;&amp;#x435;&amp;#x442;&amp;#x441;&amp;#x442;&amp;#x432;&amp;#x435;&amp;#x43D;&amp;#x43D;&amp;#x43E; &amp;#x438;&amp;#x437;&amp;#x43C;&amp;#x435;&amp;#x43D;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x435; &amp;#x43A;&amp;#x43E;&amp;#x43C;&amp;#x43F;&amp;#x43E;&amp;#x43D;&amp;#x435;&amp;#x43D;&amp;#x442;&amp;#x430; &amp;#x442;&amp;#x44F;&amp;#x43D;&amp;#x435;&amp;#x442; &amp;#x437;&amp;#x430; &amp;#x441;&amp;#x43E;&amp;#x431;&amp;#x43E;&amp;#x439; &amp;#x438;&amp;#x437;&amp;#x43C;&amp;#x435;&amp;#x43D;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x435; &amp;#x43F;&amp;#x43E; &amp;#x432;&amp;#x441;&amp;#x435;&amp;#x43C;&amp;#x443; &amp;#x43F;&amp;#x440;&amp;#x438;&amp;#x43B;&amp;#x43E;&amp;#x436;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x44F;, &amp;#x447;&amp;#x442;&amp;#x43E; &amp;#x443;&amp;#x436;&amp;#x435; &amp;#x432;&amp;#x441;&amp;#x43F;&amp;#x43E;&amp;#x43C;&amp;#x438;&amp;#x43D;&amp;#x430;&amp;#x43B;&amp;#x43E;&amp;#x441;&amp;#x44C; &amp;#x432;&amp;#x44B;&amp;#x448;&amp;#x435;.\n
  10. \n
  11. &amp;#x41E;&amp;#x431;&amp;#x44C;&amp;#x44F;&amp;#x441;&amp;#x43D;&amp;#x44F;&amp;#x435;&amp;#x43C; &amp;#x441;&amp;#x445;&amp;#x435;&amp;#x43C;&amp;#x443; - &amp;#x447;&amp;#x442;&amp;#x43E; &amp;#x437;&amp;#x434;&amp;#x435;&amp;#x441;&amp;#x44C;, &amp;#x447;&amp;#x442;&amp;#x43E; &amp;#x43E;&amp;#x431;&amp;#x43E;&amp;#x437;&amp;#x43D;&amp;#x430;&amp;#x447;&amp;#x430;&amp;#x435;&amp;#x442;. &amp;#x412;&amp;#x430;&amp;#x436;&amp;#x43D;&amp;#x43E; - &amp;#x43F;&amp;#x43E;&amp;#x43A;&amp;#x430;&amp;#x437;&amp;#x430;&amp;#x442;&amp;#x44C; &amp;#x447;&amp;#x442;&amp;#x43E; &amp;#x43A;&amp;#x43B;&amp;#x435;&amp;#x43F;&amp;#x430;&amp;#x442;&amp;#x44C; &amp;#x442;&amp;#x435;&amp;#x441;&amp;#x442;-&amp;#x43A;&amp;#x435;&amp;#x439;&amp;#x441;&amp;#x44B; &amp;#x434;&amp;#x43B;&amp;#x44F; ajax-&amp;#x43F;&amp;#x440;&amp;#x438;&amp;#x43B;&amp;#x43E;&amp;#x436;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x44F; &amp;#x431;&amp;#x435;&amp;#x437; &amp;#x442;&amp;#x430;&amp;#x43A;&amp;#x43E;&amp;#x439; &amp;#x430;&amp;#x440;&amp;#x445;&amp;#x438;&amp;#x442;&amp;#x435;&amp;#x43A;&amp;#x442;&amp;#x443;&amp;#x440;&amp;#x44B; - &amp;#x41D;&amp;#x415;&amp;#x412;&amp;#x41E;&amp;#x417;&amp;#x41C;&amp;#x41E;&amp;#x416;&amp;#x41D;&amp;#x41E;. \n
  12. &amp;#x42F; &amp;#x43F;&amp;#x43E;&amp;#x437;&amp;#x432;&amp;#x43E;&amp;#x43B;&amp;#x44E; &amp;#x441;&amp;#x435;&amp;#x431;&amp;#x435; &amp;#x442;&amp;#x440;&amp;#x435;&amp;#x442;&amp;#x438;&amp;#x439; &amp;#x440;&amp;#x430;&amp;#x437; &amp;#x43F;&amp;#x43E;&amp;#x432;&amp;#x442;&amp;#x43E;&amp;#x440;&amp;#x438;&amp;#x442;&amp;#x44C; &amp;#x43F;&amp;#x440;&amp;#x43E;&amp;#x431;&amp;#x43B;&amp;#x435;&amp;#x43C;&amp;#x443;, &amp;#x43F;&amp;#x43E;&amp;#x442;&amp;#x43E;&amp;#x43C;&amp;#x443; &amp;#x447;&amp;#x442;&amp;#x43E; &amp;#x44D;&amp;#x442;&amp;#x43E; &amp;#x432;&amp;#x430;&amp;#x436;&amp;#x43D;&amp;#x43E;. &amp;#x41F;&amp;#x440;&amp;#x438;&amp;#x447;&amp;#x438;&amp;#x43D;&amp;#x430; &amp;#x44D;&amp;#x442;&amp;#x43E;&amp;#x439; &amp;#x43F;&amp;#x440;&amp;#x43E;&amp;#x431;&amp;#x43B;&amp;#x435;&amp;#x43C;&amp;#x44B; - (&amp;#x437;&amp;#x430;&amp;#x447;&amp;#x438;&amp;#x442;&amp;#x430;&amp;#x442;&amp;#x44C;)\n
  13. &amp;#x420;&amp;#x435;&amp;#x448;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x435;, &amp;#x43D;&amp;#x435; &amp;#x441;&amp;#x43B;&amp;#x43E;&amp;#x436;&amp;#x43D;&amp;#x435;&amp;#x435; &amp;#x447;&amp;#x435;&amp;#x43C; &amp;#x43D;&amp;#x430; &amp;#x43A;&amp;#x430;&amp;#x440;&amp;#x442;&amp;#x438;&amp;#x43D;&amp;#x43A;&amp;#x435; &amp;#x438; &amp;#x437;&amp;#x430;&amp;#x43A;&amp;#x43B;&amp;#x44E;&amp;#x447;&amp;#x430;&amp;#x435;&amp;#x442;&amp;#x441;&amp;#x44F; &amp;#x432; &amp;#x442;&amp;#x43E;&amp;#x43C; &amp;#x447;&amp;#x442;&amp;#x43E;&amp;#x431;&amp;#x44B; &amp;#x441;&amp;#x434;&amp;#x435;&amp;#x43B;&amp;#x430;&amp;#x442;&amp;#x44C; &amp;#x442;&amp;#x435;&amp;#x441;&amp;#x442;-&amp;#x43A;&amp;#x43E;&amp;#x434; &amp;#x43F;&amp;#x43E;&amp;#x432;&amp;#x442;&amp;#x43E;&amp;#x440;&amp;#x44F;&amp;#x435;&amp;#x43C;&amp;#x44B;&amp;#x43C;!\n
  14. &amp;#x41F;&amp;#x440;&amp;#x438;&amp;#x43C;&amp;#x435;&amp;#x440;, &amp;#x43E;&amp;#x442;&amp;#x43F;&amp;#x440;&amp;#x430;&amp;#x432;&amp;#x43A;&amp;#x430; &amp;#x435;&amp;#x43C;&amp;#x435;&amp;#x439;&amp;#x43B; &amp;#x441;&amp;#x43E;&amp;#x43E;&amp;#x431;&amp;#x449;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x44F;. \n
  15. &amp;#x41E;&amp;#x431;&amp;#x44A;&amp;#x44F;&amp;#x441;&amp;#x43D;&amp;#x438;&amp;#x442;&amp;#x44C; &amp;#x441;&amp;#x445;&amp;#x435;&amp;#x43C;&amp;#x43A;&amp;#x443;. &amp;#x41F;&amp;#x43E;&amp;#x447;&amp;#x435;&amp;#x43C;&amp;#x443; &amp;#x434;&amp;#x43E;&amp;#x43B;&amp;#x436;&amp;#x43D;&amp;#x43E; &amp;#x431;&amp;#x44B;&amp;#x442;&amp;#x44C; &amp;#x442;&amp;#x430;&amp;#x43A;!\n
  16. \n
  17. &amp;#x41E;&amp;#x431;&amp;#x44A;&amp;#x435;&amp;#x434;&amp;#x438;&amp;#x43D;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x435; &amp;#x432;&amp;#x441;&amp;#x435;&amp;#x433;&amp;#x43E; &amp;#x432;&amp;#x43C;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x435; &amp;#x438; &amp;#x432;&amp;#x44B;&amp;#x440;&amp;#x438;&amp;#x441;&amp;#x43E;&amp;#x432;&amp;#x44B;&amp;#x432;&amp;#x430;&amp;#x43D;&amp;#x438;&amp;#x435; &amp;#x43A;&amp;#x440;&amp;#x430;&amp;#x441;&amp;#x43E;&amp;#x442;&amp;#x44B; &amp;#x440;&amp;#x435;&amp;#x448;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x44F; &amp;#x441; &amp;#x442;&amp;#x43E;&amp;#x447;&amp;#x43A;&amp;#x438; &amp;#x437;&amp;#x440;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x44F; &amp;#x44D;&amp;#x43A;&amp;#x43E;&amp;#x43D;&amp;#x43E;&amp;#x43C;&amp;#x438;&amp;#x438; &amp;#x432;&amp;#x440;&amp;#x435;&amp;#x43C;&amp;#x435;&amp;#x43D;&amp;#x438;, &amp;#x43A;&amp;#x43E;&amp;#x442;&amp;#x43E;&amp;#x440;&amp;#x44B;&amp;#x439; &amp;#x432;&amp;#x44B;&amp;#x437;&amp;#x44B;&amp;#x432;&amp;#x430;&amp;#x435;&amp;#x442; &amp;#x43D;&amp;#x435;&amp;#x431;&amp;#x43E;&amp;#x43B;&amp;#x44C;&amp;#x448;&amp;#x43E;&amp;#x439; &amp;#x43E;&amp;#x432;&amp;#x435;&amp;#x440;&amp;#x445;&amp;#x435;&amp;#x434;.\n
  18. &amp;#x421;&amp;#x43E;&amp;#x431;&amp;#x441;&amp;#x442;&amp;#x432;&amp;#x435;&amp;#x43D;&amp;#x43D;&amp;#x43E;, &amp;#x447;&amp;#x442;&amp;#x43E; &amp;#x434;&amp;#x430;&amp;#x435;&amp;#x442; &amp;#x43D;&amp;#x430;&amp;#x43C; &amp;#x440;&amp;#x435;&amp;#x448;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x435;.\n
  19. &amp;#x41C;&amp;#x438;&amp;#x43D;&amp;#x438;&amp;#x43C;&amp;#x443;&amp;#x43C; &amp;#x442;&amp;#x435;&amp;#x445;&amp;#x43D;&amp;#x438;&amp;#x447;&amp;#x435;&amp;#x441;&amp;#x43A;&amp;#x438;&amp;#x445; &amp;#x434;&amp;#x435;&amp;#x442;&amp;#x430;&amp;#x43B;&amp;#x435;&amp;#x439;. &amp;#x41E;&amp;#x431;&amp;#x440;&amp;#x438;&amp;#x441;&amp;#x43E;&amp;#x432;&amp;#x430;&amp;#x442;&amp;#x44C; &amp;#x434;&amp;#x43B;&amp;#x44F; &amp;#x43B;&amp;#x44E;&amp;#x434;&amp;#x435;&amp;#x439; &amp;#x43D;&amp;#x435; &amp;#x437;&amp;#x43D;&amp;#x430;&amp;#x43A;&amp;#x43E;&amp;#x43C;&amp;#x44B;&amp;#x445; &amp;#x441; &amp;#x43F;&amp;#x438;&amp;#x442;&amp;#x43E;&amp;#x43D;&amp;#x43E;&amp;#x43C; &amp;#x43A;&amp;#x430;&amp;#x43A; &amp;#x43C;&amp;#x43E;&amp;#x436;&amp;#x43D;&amp;#x43E; &amp;#x441;&amp;#x434;&amp;#x435;&amp;#x43B;&amp;#x430;&amp;#x442;&amp;#x44C; &amp;#x44D;&amp;#x442;&amp;#x43E;.\n
  20. &amp;#x415;&amp;#x449;&amp;#x435; &amp;#x43E;&amp;#x434;&amp;#x438;&amp;#x43D; &amp;#x43C;&amp;#x43E;&amp;#x43C;&amp;#x435;&amp;#x43D;&amp;#x442; &amp;#x433;&amp;#x434;&amp;#x435; &amp;#x43D;&amp;#x443;&amp;#x436;&amp;#x43D;&amp;#x43E; &amp;#x437;&amp;#x430;&amp;#x43E;&amp;#x441;&amp;#x442;&amp;#x440;&amp;#x438;&amp;#x442;&amp;#x44C; &amp;#x432;&amp;#x43D;&amp;#x438;&amp;#x43C;&amp;#x430;&amp;#x43D;&amp;#x438;&amp;#x435; - &amp;#x43D;&amp;#x435;&amp;#x43E;&amp;#x431;&amp;#x445;&amp;#x43E;&amp;#x434;&amp;#x438;&amp;#x43C;&amp;#x43E; &amp;#x43F;&amp;#x435;&amp;#x440;&amp;#x435;&amp;#x434;&amp;#x430;&amp;#x432;&amp;#x430;&amp;#x442;&amp;#x44C; &amp;#x432; &amp;#x442;&amp;#x435;&amp;#x441;&amp;#x442;-&amp;#x431;&amp;#x43B;&amp;#x43E;&amp;#x43A;&amp;#x438; &amp;#x43E;&amp;#x431;&amp;#x44A;&amp;#x435;&amp;#x43A;&amp;#x442; &amp;#x441;&amp;#x435;&amp;#x43B;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x443;&amp;#x43C;&amp;#x430;. &amp;#x410; &amp;#x442;&amp;#x430;&amp;#x43A; &amp;#x436;&amp;#x435; &amp;#x444;&amp;#x443;&amp;#x43D;&amp;#x43A;&amp;#x446;&amp;#x438;&amp;#x44F;-&amp;#x43B;&amp;#x438;&amp;#x43D;&amp;#x43A;&amp;#x435;&amp;#x440;.\n
  21. \n
  22. &amp;#x414;&amp;#x43E;&amp;#x43A;&amp;#x443;&amp;#x43C;&amp;#x435;&amp;#x43D;&amp;#x442;&amp;#x430;&amp;#x446;&amp;#x438;&amp;#x44F; &amp;#x43F;&amp;#x440;&amp;#x43E;&amp;#x441;&amp;#x442;&amp;#x43E; &amp;#x43D;&amp;#x435;&amp;#x43E;&amp;#x431;&amp;#x445;&amp;#x43E;&amp;#x434;&amp;#x438;&amp;#x43C;&amp;#x430;! &amp;#x42F; &amp;#x441;&amp;#x43F;&amp;#x435;&amp;#x446;&amp;#x438;&amp;#x430;&amp;#x43B;&amp;#x44C;&amp;#x43D;&amp;#x43E; &amp;#x441;&amp;#x434;&amp;#x435;&amp;#x43B;&amp;#x430;&amp;#x43B; &amp;#x442;&amp;#x430;&amp;#x43A;&amp;#x43E;&amp;#x439; &amp;#x440;&amp;#x435;&amp;#x437;&amp;#x43A;&amp;#x438;&amp;#x439; &amp;#x43F;&amp;#x435;&amp;#x440;&amp;#x435;&amp;#x445;&amp;#x43E;&amp;#x434; - &amp;#x434;&amp;#x43B;&amp;#x44F; &amp;#x437;&amp;#x430;&amp;#x43E;&amp;#x441;&amp;#x442;&amp;#x440;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x44F; &amp;#x432;&amp;#x43D;&amp;#x438;&amp;#x43C;&amp;#x430;&amp;#x43D;&amp;#x438;&amp;#x44F;. &amp;#x41D;&amp;#x430; &amp;#x43C;&amp;#x43E;&amp;#x435; &amp;#x43C;&amp;#x43D;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x435; - &amp;#x44D;&amp;#x442;&amp;#x43E; &amp;#x446;&amp;#x435;&amp;#x43C;&amp;#x435;&amp;#x43D;&amp;#x442;, &amp;#x43A;&amp;#x43E;&amp;#x442;&amp;#x43E;&amp;#x440;&amp;#x44B;&amp;#x439; &amp;#x434;&amp;#x430;&amp;#x435;&amp;#x442; &amp;#x432;&amp;#x43E;&amp;#x437;&amp;#x43C;&amp;#x43E;&amp;#x436;&amp;#x43D;&amp;#x43E;&amp;#x441;&amp;#x442;&amp;#x44C; &amp;#x441;&amp;#x443;&amp;#x449;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x432;&amp;#x43E;&amp;#x432;&amp;#x430;&amp;#x442;&amp;#x44C; &amp;#x44D;&amp;#x442;&amp;#x43E;&amp;#x439; &amp;#x441;&amp;#x445;&amp;#x435;&amp;#x43C;&amp;#x435; &amp;#x432;&amp;#x43E;&amp;#x43E;&amp;#x431;&amp;#x449;&amp;#x435;.\n
  23. &amp;#x42D;&amp;#x442;&amp;#x43E; &amp;#x441;&amp;#x430;&amp;#x43C;&amp;#x44B;&amp;#x435; &amp;#x432;&amp;#x430;&amp;#x436;&amp;#x43D;&amp;#x44B;&amp;#x435; &amp;#x43C;&amp;#x43E;&amp;#x43C;&amp;#x435;&amp;#x43D;&amp;#x442;&amp;#x44B; &amp;#x43A;&amp;#x43E;&amp;#x442;&amp;#x43E;&amp;#x440;&amp;#x44B;&amp;#x435; &amp;#x434;&amp;#x430;&amp;#x435;&amp;#x442; &amp;#x434;&amp;#x43E;&amp;#x43A;&amp;#x443;&amp;#x43C;&amp;#x435;&amp;#x43D;&amp;#x442;&amp;#x430;&amp;#x446;&amp;#x438;&amp;#x44F;. &amp;#x414;&amp;#x443;&amp;#x43C;&amp;#x430;&amp;#x44E;, &amp;#x432;&amp;#x441;&amp;#x435; &amp;#x441;&amp;#x43E;&amp;#x433;&amp;#x43B;&amp;#x430;&amp;#x441;&amp;#x43D;&amp;#x44B;, &amp;#x447;&amp;#x442;&amp;#x43E; &amp;#x44D;&amp;#x442;&amp;#x43E; &amp;#x432;&amp;#x430;&amp;#x436;&amp;#x43D;&amp;#x44B;&amp;#x435; &amp;#x43C;&amp;#x43E;&amp;#x43C;&amp;#x435;&amp;#x43D;&amp;#x442;&amp;#x44B; &amp;#x432; &amp;#x442;&amp;#x435;&amp;#x43A;&amp;#x443;&amp;#x449;&amp;#x435;&amp;#x439; &amp;#x441;&amp;#x445;&amp;#x435;&amp;#x43C;&amp;#x435;.\n
  24. &amp;#x41E;&amp;#x431;&amp;#x44F;&amp;#x437;&amp;#x430;&amp;#x442;&amp;#x435;&amp;#x43B;&amp;#x44C;&amp;#x43D;&amp;#x43E; - &amp;#x441;&amp;#x43A;&amp;#x430;&amp;#x437;&amp;#x430;&amp;#x442;&amp;#x44C; &amp;#x447;&amp;#x442;&amp;#x43E; &amp;#x44D;&amp;#x442;&amp;#x43E; &amp;#x442;&amp;#x43E;&amp;#x43B;&amp;#x44C;&amp;#x43A;&amp;#x43E; &amp;#x43D;&amp;#x430;&amp;#x448;&amp;#x435; &amp;#x43C;&amp;#x43D;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x435; &amp;#x438; &amp;#x432; &amp;#x434;&amp;#x43E;&amp;#x43A;&amp;#x443;&amp;#x43C;&amp;#x435;&amp;#x43D;&amp;#x442;&amp;#x430;&amp;#x446;&amp;#x438;&amp;#x44E; &amp;#x43C;&amp;#x43E;&amp;#x436;&amp;#x43D;&amp;#x43E; &amp;#x43F;&amp;#x438;&amp;#x445;&amp;#x430;&amp;#x442;&amp;#x44C; &amp;#x43F;&amp;#x43E; &amp;#x431;&amp;#x43E;&amp;#x43B;&amp;#x44C;&amp;#x448;&amp;#x435;&amp;#x43C;&amp;#x443; &amp;#x441;&amp;#x447;&amp;#x435;&amp;#x442;&amp;#x443; &amp;#x432;&amp;#x441;&amp;#x435; &amp;#x447;&amp;#x442;&amp;#x43E; &amp;#x445;&amp;#x43E;&amp;#x447;&amp;#x435;&amp;#x448;&amp;#x44C;. &amp;#x417;&amp;#x430;&amp;#x43E;&amp;#x441;&amp;#x442;&amp;#x440;&amp;#x438;&amp;#x442;&amp;#x44C; &amp;#x432;&amp;#x43D;&amp;#x438;&amp;#x43C;&amp;#x430;&amp;#x43D;&amp;#x438;&amp;#x435; &amp;#x43D;&amp;#x430; &amp;#x43B;&amp;#x438;&amp;#x43D;&amp;#x43A;&amp;#x435;&amp;#x440;&amp;#x430;&amp;#x445;.\n
  25. &amp;#x41F;&amp;#x440;&amp;#x438;&amp;#x43C;&amp;#x435;&amp;#x440; &amp;#x43A;&amp;#x430;&amp;#x43A; &amp;#x43E;&amp;#x43D;&amp;#x43E; &amp;#x434;&amp;#x43E;&amp;#x43B;&amp;#x436;&amp;#x43D;&amp;#x43E; &amp;#x431;&amp;#x44B;&amp;#x442;&amp;#x44C; &amp;#x432; &amp;#x43D;&amp;#x430;&amp;#x448;&amp;#x435;&amp;#x43C; &amp;#x432;&amp;#x438;&amp;#x434;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x438;.\n
  26. \n
  27. &amp;#x422;&amp;#x440;&amp;#x435;&amp;#x442;&amp;#x438;&amp;#x439; &amp;#x43F;&amp;#x443;&amp;#x43D;&amp;#x43A;&amp;#x442; &amp;#x434;&amp;#x43E;&amp;#x43A;&amp;#x43B;&amp;#x430;&amp;#x434;&amp;#x430; - &amp;#x43F;&amp;#x43E;&amp;#x434;&amp;#x445;&amp;#x43E;&amp;#x434; &amp;#x43A; &amp;#x43D;&amp;#x430;&amp;#x43F;&amp;#x438;&amp;#x441;&amp;#x430;&amp;#x43D;&amp;#x438;&amp;#x44E; &amp;#x442;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x43E;&amp;#x432; &amp;#x441; &amp;#x43F;&amp;#x43E;&amp;#x43C;&amp;#x43E;&amp;#x449;&amp;#x44C;&amp;#x44E; &amp;#x440;&amp;#x430;&amp;#x437;&amp;#x440;&amp;#x430;&amp;#x431;&amp;#x43E;&amp;#x442;&amp;#x447;&amp;#x438;&amp;#x43A;&amp;#x43E;&amp;#x432;. &amp;#x417;&amp;#x430;&amp;#x447;&amp;#x435;&amp;#x43C; &amp;#x43D;&amp;#x430;&amp;#x43C; &amp;#x43F;&amp;#x440;&amp;#x438;&amp;#x432;&amp;#x43B;&amp;#x435;&amp;#x43A;&amp;#x430;&amp;#x442;&amp;#x44C; &amp;#x440;&amp;#x430;&amp;#x437;&amp;#x440;&amp;#x430;&amp;#x431;&amp;#x43E;&amp;#x442;&amp;#x447;&amp;#x438;&amp;#x43A;&amp;#x43E;&amp;#x432; &amp;#x43A; &amp;#x43D;&amp;#x430;&amp;#x43F;&amp;#x438;&amp;#x441;&amp;#x430;&amp;#x43D;&amp;#x438;&amp;#x44E; &amp;#x442;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x43E;&amp;#x432;? &amp;#x41F;&amp;#x43E;&amp;#x442;&amp;#x43E;&amp;#x43C;&amp;#x443; &amp;#x447;&amp;#x442;&amp;#x43E; &amp;#x43E;&amp;#x431;&amp;#x449;&amp;#x430;&amp;#x44F; &amp;#x446;&amp;#x435;&amp;#x43B;&amp;#x44C; &amp;#x443; &amp;#x432;&amp;#x441;&amp;#x435;&amp;#x439; &amp;#x43A;&amp;#x43E;&amp;#x43C;&amp;#x430;&amp;#x43D;&amp;#x434;&amp;#x44B; &amp;#x440;&amp;#x430;&amp;#x437;&amp;#x440;&amp;#x430;&amp;#x431;&amp;#x430;&amp;#x442;&amp;#x44B;&amp;#x432;&amp;#x430;&amp;#x44E;&amp;#x449;&amp;#x435;&amp;#x439; &amp;#x43F;&amp;#x440;&amp;#x43E;&amp;#x434;&amp;#x443;&amp;#x43A;&amp;#x442; - 0 &amp;#x431;&amp;#x430;&amp;#x433;&amp;#x43E;&amp;#x432; &amp;#x432; &amp;#x440;&amp;#x430;&amp;#x431;&amp;#x43E;&amp;#x442;&amp;#x430;&amp;#x44E;&amp;#x449;&amp;#x435;&amp;#x43C; &amp;#x43F;&amp;#x440;&amp;#x438;&amp;#x43B;&amp;#x43E;&amp;#x436;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x438;, &amp;#x438; &amp;#x442;&amp;#x443;&amp;#x442; &amp;#x432;&amp;#x441;&amp;#x43F;&amp;#x43E;&amp;#x43C;&amp;#x438;&amp;#x43D;&amp;#x430;&amp;#x435;&amp;#x43C; &amp;#x43A;&amp;#x442;&amp;#x43E; &amp;#x43F;&amp;#x438;&amp;#x448;&amp;#x435;&amp;#x442; &amp;#x43A;&amp;#x43E;&amp;#x434; &amp;#x441; &amp;#x431;&amp;#x430;&amp;#x433;&amp;#x430;&amp;#x43C;&amp;#x438; - &amp;#x201C;&amp;#x427;&amp;#x438;&amp;#x441;&amp;#x442;&amp;#x43E; &amp;#x43D;&amp;#x435; &amp;#x442;&amp;#x430;&amp;#x43C; &amp;#x433;&amp;#x434;&amp;#x435; &amp;#x443;&amp;#x431;&amp;#x438;&amp;#x440;&amp;#x430;&amp;#x44E;&amp;#x442; - &amp;#x430; &amp;#x442;&amp;#x430;&amp;#x43C; &amp;#x433;&amp;#x434;&amp;#x435; &amp;#x43D;&amp;#x435; &amp;#x441;&amp;#x43E;&amp;#x440;&amp;#x44F;&amp;#x442;&amp;#x201D;.\n
  28. &amp;#x41F;&amp;#x440;&amp;#x438;&amp;#x43C;&amp;#x435;&amp;#x440; &amp;#x43F;&amp;#x440;&amp;#x43E; &amp;#x43A;&amp;#x430;&amp;#x43B;&amp;#x435;&amp;#x43D;&amp;#x434;&amp;#x430;&amp;#x440;&amp;#x44C; .\n
  29. &amp;#x427;&amp;#x443;&amp;#x442;&amp;#x44C; &amp;#x43F;&amp;#x43E;&amp;#x434;&amp;#x440;&amp;#x43E;&amp;#x431;&amp;#x43D;&amp;#x435;&amp;#x435; &amp;#x440;&amp;#x430;&amp;#x441;&amp;#x441;&amp;#x43A;&amp;#x430;&amp;#x437;&amp;#x430;&amp;#x442;&amp;#x44C; &amp;#x43F;&amp;#x440;&amp;#x43E; &amp;#x432;&amp;#x441;&amp;#x435; &amp;#x44D;&amp;#x442;&amp;#x438; &amp;#x43F;&amp;#x443;&amp;#x43D;&amp;#x43A;&amp;#x442;&amp;#x44B;.\n
  30. &amp;#x410;&amp;#x43D;&amp;#x430;&amp;#x43B;&amp;#x43E;&amp;#x433;&amp;#x43D;&amp;#x438;&amp;#x447;&amp;#x43D;&amp;#x43E;\n
  31. &amp;#x421; &amp;#x43E;&amp;#x43F;&amp;#x43E;&amp;#x440;&amp;#x43E;&amp;#x439; &amp;#x43D;&amp;#x430; &amp;#x43F;&amp;#x440;&amp;#x43E;&amp;#x448;&amp;#x43B;&amp;#x44B;&amp;#x435; &amp;#x441;&amp;#x43B;&amp;#x430;&amp;#x439;&amp;#x434;&amp;#x44B; &amp;#x440;&amp;#x430;&amp;#x437;&amp;#x436;&amp;#x435;&amp;#x432;&amp;#x430;&amp;#x442;&amp;#x44C; &amp;#x432;&amp;#x441;&amp;#x435; &amp;#x43D;&amp;#x430; &amp;#x43A;&amp;#x430;&amp;#x440;&amp;#x442;&amp;#x438;&amp;#x43D;&amp;#x43A;&amp;#x435;.\n
  32. \n
  33. &amp;#x415;&amp;#x449;&amp;#x435; &amp;#x43E;&amp;#x434;&amp;#x43D;&amp;#x430; &amp;#x431;&amp;#x43E;&amp;#x43B;&amp;#x44C;&amp;#x448;&amp;#x430;&amp;#x44F; &amp;#x43F;&amp;#x440;&amp;#x43E;&amp;#x431;&amp;#x43B;&amp;#x435;&amp;#x43C;&amp;#x430;, &amp;#x43F;&amp;#x43E;&amp;#x43C;&amp;#x438;&amp;#x43C;&amp;#x43E; &amp;#x43F;&amp;#x43E;&amp;#x432;&amp;#x442;&amp;#x43E;&amp;#x440;&amp;#x44F;&amp;#x435;&amp;#x43C;&amp;#x43E;&amp;#x441;&amp;#x442;&amp;#x438; &amp;#x43A;&amp;#x43E;&amp;#x434;&amp;#x430; - &amp;#x441;&amp;#x435;&amp;#x43B;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x443;&amp;#x43C; &amp;#x43D;&amp;#x435; &amp;#x438;&amp;#x43C;&amp;#x435;&amp;#x435;&amp;#x442; &amp;#x432;&amp;#x441;&amp;#x442;&amp;#x440;&amp;#x43E;&amp;#x435;&amp;#x43D;&amp;#x43D;&amp;#x43E;&amp;#x433;&amp;#x43E; &amp;#x43C;&amp;#x435;&amp;#x445;&amp;#x430;&amp;#x43D;&amp;#x438;&amp;#x437;&amp;#x43C;&amp;#x430; &amp;#x43E;&amp;#x436;&amp;#x438;&amp;#x434;&amp;#x430;&amp;#x43D;&amp;#x438;&amp;#x44F; ajax-&amp;#x437;&amp;#x430;&amp;#x43F;&amp;#x440;&amp;#x43E;&amp;#x441;&amp;#x43E;&amp;#x432;.\n
  34. &amp;#x41A;&amp;#x430;&amp;#x43A;&amp;#x43E;&amp;#x432;&amp;#x44B; &amp;#x432;&amp;#x430;&amp;#x440;&amp;#x438;&amp;#x430;&amp;#x43D;&amp;#x442;&amp;#x44B; &amp;#x440;&amp;#x435;&amp;#x448;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x44F;: &amp;#x43F;&amp;#x435;&amp;#x440;&amp;#x435;&amp;#x447;&amp;#x438;&amp;#x441;&amp;#x43B;&amp;#x438;&amp;#x442;&amp;#x44C; &amp;#x43F;&amp;#x440;&amp;#x435;&amp;#x438;&amp;#x43C;&amp;#x443;&amp;#x449;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x432;&amp;#x430; &amp;#x438; &amp;#x43D;&amp;#x435;&amp;#x434;&amp;#x43E;&amp;#x441;&amp;#x442;&amp;#x430;&amp;#x442;&amp;#x43A;&amp;#x438;.\n
  35. &amp;#x41E;&amp;#x431;&amp;#x44C;&amp;#x44F;&amp;#x441;&amp;#x43D;&amp;#x438;&amp;#x442;&amp;#x44C; &amp;#x43D;&amp;#x430;&amp;#x448;&amp;#x435; &amp;#x440;&amp;#x435;&amp;#x448;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x435; &amp;#x438; &amp;#x434;&amp;#x43E;&amp;#x43A;&amp;#x430;&amp;#x437;&amp;#x430;&amp;#x442;&amp;#x44C; &amp;#x447;&amp;#x442;&amp;#x43E; &amp;#x43E;&amp;#x43D;&amp;#x43E; &amp;#x445;&amp;#x43E;&amp;#x440;&amp;#x43E;&amp;#x448;&amp;#x43E; &amp;#x440;&amp;#x430;&amp;#x431;&amp;#x43E;&amp;#x442;&amp;#x430;&amp;#x435;&amp;#x442; &amp;#x432; &amp;#x43D;&amp;#x430;&amp;#x448;&amp;#x438;&amp;#x445; &amp;#x443;&amp;#x441;&amp;#x43B;&amp;#x43E;&amp;#x432;&amp;#x438;&amp;#x44F;&amp;#x445; (&amp;#x430; &amp;#x438;&amp;#x43C;&amp;#x435;&amp;#x43D;&amp;#x43D;&amp;#x43E; &amp;#x430;&amp;#x434;&amp;#x436;&amp;#x430;&amp;#x43A;&amp;#x441;-&amp;#x43F;&amp;#x440;&amp;#x438;&amp;#x43B;&amp;#x43E;&amp;#x436;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x44F;)\n
  36. &amp;#x41A;&amp;#x43E;&amp;#x43C;&amp;#x43C;&amp;#x435;&amp;#x43D;&amp;#x442;&amp;#x44B; &amp;#x43A; &amp;#x432;&amp;#x438;&amp;#x434;&amp;#x44F;&amp;#x445;&amp;#x435;.\n
  37. &amp;#x415;&amp;#x449;&amp;#x435; &amp;#x43E;&amp;#x434;&amp;#x438;&amp;#x43D; &amp;#x438;&amp;#x43D;&amp;#x442;&amp;#x435;&amp;#x440;&amp;#x435;&amp;#x441;&amp;#x43D;&amp;#x44B;&amp;#x439; &amp;#x44E;&amp;#x437;-&amp;#x43A;&amp;#x435;&amp;#x439;&amp;#x441; &amp;#x441;&amp;#x435;&amp;#x43B;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x443;&amp;#x43C;&amp;#x430; - &amp;#x442;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x438;&amp;#x440;&amp;#x43E;&amp;#x432;&amp;#x430;&amp;#x43D;&amp;#x438;&amp;#x435; &amp;#x441;&amp;#x438;&amp;#x43D;&amp;#x445;&amp;#x440;&amp;#x43E;&amp;#x43D;&amp;#x438;&amp;#x437;&amp;#x430;&amp;#x446;&amp;#x438;&amp;#x438;. &amp;#x41E;&amp;#x441;&amp;#x43E;&amp;#x431;&amp;#x435;&amp;#x43D;&amp;#x43D;&amp;#x43E; &amp;#x442;&amp;#x44F;&amp;#x436;&amp;#x435;&amp;#x43B;&amp;#x430;&amp;#x44F; &amp;#x438; &amp;#x440;&amp;#x443;&amp;#x442;&amp;#x438;&amp;#x43D;&amp;#x43D;&amp;#x430;&amp;#x44F; &amp;#x440;&amp;#x430;&amp;#x431;&amp;#x43E;&amp;#x442;&amp;#x430; &amp;#x434;&amp;#x43B;&amp;#x44F; &amp;#x442;&amp;#x435;&amp;#x441;&amp;#x442;&amp;#x435;&amp;#x440;&amp;#x430;.\n
  38. &amp;#x41E;&amp;#x431;&amp;#x44C;&amp;#x44F;&amp;#x441;&amp;#x43D;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x435; &amp;#x442;&amp;#x435;&amp;#x445;&amp;#x43D;&amp;#x438;&amp;#x447;&amp;#x435;&amp;#x441;&amp;#x43A;&amp;#x438;&amp;#x445; &amp;#x434;&amp;#x435;&amp;#x442;&amp;#x430;&amp;#x43B;&amp;#x435;&amp;#x439;. &amp;#x41E;&amp;#x43F;&amp;#x44F;&amp;#x442;&amp;#x44C; &amp;#x442;&amp;#x430;&amp;#x43A;&amp;#x438; &amp;#x443;&amp;#x43F;&amp;#x43E;&amp;#x440; &amp;#x43D;&amp;#x430; &amp;#x43D;&amp;#x43E;&amp;#x443;-&amp;#x43F;&amp;#x430;&amp;#x439;&amp;#x442;&amp;#x43E;&amp;#x43D; &amp;#x44E;&amp;#x437;&amp;#x435;&amp;#x440;&amp;#x43E;&amp;#x432;\n\n
  39. &amp;#x41E;&amp;#x441;&amp;#x43D;&amp;#x43E;&amp;#x432;&amp;#x43D;&amp;#x43E;&amp;#x439; &amp;#x443;&amp;#x43F;&amp;#x43E;&amp;#x440; &amp;#x43D;&amp;#x430; sleep. &amp;#x41F;&amp;#x440;&amp;#x43E;&amp;#x441;&amp;#x442;&amp;#x430;&amp;#x44F; &amp;#x438; &amp;#x43E;&amp;#x447;&amp;#x435;&amp;#x432;&amp;#x438;&amp;#x434;&amp;#x43D;&amp;#x430;&amp;#x44F; &amp;#x432;&amp;#x435;&amp;#x449;&amp;#x44C;, &amp;#x43D;&amp;#x43E; &amp;#x432;&amp;#x43A;&amp;#x43B;&amp;#x44E;&amp;#x447;&amp;#x435;&amp;#x43D;&amp;#x430; &amp;#x434;&amp;#x43B;&amp;#x44F; &amp;#x43F;&amp;#x43E;&amp;#x43B;&amp;#x43D;&amp;#x43E;&amp;#x442;&amp;#x44B; &amp;#x43A;&amp;#x430;&amp;#x440;&amp;#x442;&amp;#x438;&amp;#x43D;&amp;#x44B;.\n
  40. &amp;#x412;&amp;#x438;&amp;#x434;&amp;#x44F;&amp;#x445;&amp;#x443; &amp;#x43B;&amp;#x44E;&amp;#x434;&amp;#x438; &amp;#x43F;&amp;#x43E;&amp;#x441;&amp;#x43C;&amp;#x43E;&amp;#x442;&amp;#x440;&amp;#x44F;&amp;#x442;, &amp;#x430; &amp;#x43C;&amp;#x43D;&amp;#x435; &amp;#x43D;&amp;#x435;&amp;#x431;&amp;#x43E;&amp;#x43B;&amp;#x44C;&amp;#x448;&amp;#x43E;&amp;#x439; &amp;#x43F;&amp;#x435;&amp;#x440;&amp;#x435;&amp;#x434;&amp;#x44B;&amp;#x445;.\n
  41. &amp;#x41A;&amp;#x440;&amp;#x430;&amp;#x442;&amp;#x43A;&amp;#x438;&amp;#x439; &amp;#x441;&amp;#x43F;&amp;#x438;&amp;#x441;&amp;#x43E;&amp;#x43A; &amp;#x441;&amp;#x43E;&amp;#x432;&amp;#x435;&amp;#x442;&amp;#x43E;&amp;#x432; &amp;#x43A;&amp;#x43E;&amp;#x442;&amp;#x43E;&amp;#x440;&amp;#x44B;&amp;#x435; &amp;#x43C;&amp;#x43E;&amp;#x433;&amp;#x443;&amp;#x442; &amp;#x431;&amp;#x44B;&amp;#x442;&amp;#x44C; &amp;#x43F;&amp;#x43E;&amp;#x43B;&amp;#x435;&amp;#x437;&amp;#x43D;&amp;#x44B;&amp;#x43C;&amp;#x438; &amp;#x432; &amp;#x43F;&amp;#x440;&amp;#x438;&amp;#x43B;&amp;#x43E;&amp;#x436;&amp;#x435;&amp;#x43D;&amp;#x438;&amp;#x438;. &amp;#x425;&amp;#x430;&amp;#x43A;&amp;#x438; &amp;#x43A;&amp;#x43E;&amp;#x442;&amp;#x43E;&amp;#x440;&amp;#x44B;&amp;#x435; &amp;#x43D;&amp;#x435;&amp;#x43E;&amp;#x431;&amp;#x445;&amp;#x43E;&amp;#x434;&amp;#x438;&amp;#x43C;&amp;#x44B;. &amp;#x420;&amp;#x430;&amp;#x437;&amp;#x436;&amp;#x435;&amp;#x432;&amp;#x430;&amp;#x442;&amp;#x44C; &amp;#x43F;&amp;#x443;&amp;#x43D;&amp;#x43A;&amp;#x442;&amp;#x438;&amp;#x43A;&amp;#x438;.\n
  42. &amp;#x420;&amp;#x430;&amp;#x441;&amp;#x441;&amp;#x43A;&amp;#x430;&amp;#x437;&amp;#x430;&amp;#x442;&amp;#x44C; &amp;#x447;&amp;#x442;&amp;#x43E; &amp;#x43E;&amp;#x441;&amp;#x43E;&amp;#x431;&amp;#x435;&amp;#x43D;&amp;#x43D;&amp;#x43E;&amp;#x441;&amp;#x442;&amp;#x435;&amp;#x439; &amp;#x43F;&amp;#x440;&amp;#x43E;&amp;#x433;&amp;#x43E;&amp;#x43D;&amp;#x430; &amp;#x442;&amp;#x443;&amp;#x442; &amp;#x43D;&amp;#x435;&amp;#x442;&amp;#x443; &amp;#x438; &amp;#x442;&amp;#x43E;&amp;#x43B;&amp;#x44C;&amp;#x43A;&amp;#x43E; &amp;#x432;&amp;#x43A;&amp;#x440;&amp;#x430;&amp;#x442;&amp;#x446;&amp;#x435; &amp;#x440;&amp;#x430;&amp;#x441;&amp;#x441;&amp;#x43A;&amp;#x430;&amp;#x436;&amp;#x435;&amp;#x43C; &amp;#x43E; &amp;#x434;&amp;#x432;&amp;#x443;&amp;#x445; &amp;#x43F;&amp;#x440;&amp;#x43E;&amp;#x442;&amp;#x438;&amp;#x432;&amp;#x43E;&amp;#x43F;&amp;#x43E;&amp;#x43B;&amp;#x436;&amp;#x43D;&amp;#x43E;&amp;#x441;&amp;#x442;&amp;#x44F;&amp;#x445; &amp;#x432; &amp;#x430;&amp;#x432;&amp;#x442;&amp;#x43E;&amp;#x43C;&amp;#x430;&amp;#x442;&amp;#x438;&amp;#x437;&amp;#x430;&amp;#x446;&amp;#x438;&amp;#x438; &amp;#x438; continious integration\n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n