SlideShare une entreprise Scribd logo
1  sur  47
ТЕСТИРОВАНИЕ СЛОЖНЫХ 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

Contenu connexe

Tendances

JIRA. С добавками. Для тестировщиков
JIRA. С добавками. Для тестировщиковJIRA. С добавками. Для тестировщиков
JIRA. С добавками. Для тестировщиковSQALab
 
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовРеализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовSQALab
 
Open Source Testing Framework: real project example and best practices
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
 
C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.Igor Shkulipa
 
Документирование исходных текстов (javadoc)
Документирование исходных текстов (javadoc)Документирование исходных текстов (javadoc)
Документирование исходных текстов (javadoc)Fedor Malyshkin
 
Dependency injection
Dependency injectionDependency injection
Dependency injectionGetDev.NET
 
BDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehaveBDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehaveSQALab
 
Что нового в Visual Studio 2010 и .Net 4.0
Что нового в Visual Studio 2010 и .Net 4.0Что нового в Visual Studio 2010 и .Net 4.0
Что нового в Visual Studio 2010 и .Net 4.0akrakovetsky
 
автоматизация тестирования с помощью Selenium
автоматизация тестирования с помощью Seleniumавтоматизация тестирования с помощью Selenium
автоматизация тестирования с помощью Seleniumvyacheslavmaslov
 
ук 03.003.01 2011
ук 03.003.01 2011ук 03.003.01 2011
ук 03.003.01 2011etyumentcev
 
Олексій Стульніков “WinAppDriver – автоматизація Desktop ніколи не була такою...
Олексій Стульніков “WinAppDriver – автоматизація Desktop ніколи не була такою...Олексій Стульніков “WinAppDriver – автоматизація Desktop ніколи не була такою...
Олексій Стульніков “WinAppDriver – автоматизація Desktop ніколи не була такою...Dakiry
 
Dependency Injection на примере Unity и NInject
Dependency Injection на примере Unity и NInjectDependency Injection на примере Unity и NInject
Dependency Injection на примере Unity и NInjectakrakovetsky
 
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneАвтоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneCodeFest
 
Автоматизация и Selenium IDE
Автоматизация и Selenium IDEАвтоматизация и Selenium IDE
Автоматизация и Selenium IDEISsoft
 
C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.Igor Shkulipa
 
Модульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NETМодульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NETDev2Dev
 
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NETASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NETDev2Dev
 
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile ProjectsAutomation Functional Testing in Agile Projects
Automation Functional Testing in Agile ProjectsAndrey Rebrov
 

Tendances (20)

JIRA. С добавками. Для тестировщиков
JIRA. С добавками. Для тестировщиковJIRA. С добавками. Для тестировщиков
JIRA. С добавками. Для тестировщиков
 
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовРеализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
 
Open Source Testing Framework: real project example and best practices
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
 
C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.
 
Документирование исходных текстов (javadoc)
Документирование исходных текстов (javadoc)Документирование исходных текстов (javadoc)
Документирование исходных текстов (javadoc)
 
BDD
BDDBDD
BDD
 
Dependency injection
Dependency injectionDependency injection
Dependency injection
 
BDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehaveBDD girls Battle: Cucumber VS. JBehave
BDD girls Battle: Cucumber VS. JBehave
 
Что нового в Visual Studio 2010 и .Net 4.0
Что нового в Visual Studio 2010 и .Net 4.0Что нового в Visual Studio 2010 и .Net 4.0
Что нового в Visual Studio 2010 и .Net 4.0
 
автоматизация тестирования с помощью Selenium
автоматизация тестирования с помощью Seleniumавтоматизация тестирования с помощью Selenium
автоматизация тестирования с помощью Selenium
 
ук 03.003.01 2011
ук 03.003.01 2011ук 03.003.01 2011
ук 03.003.01 2011
 
Олексій Стульніков “WinAppDriver – автоматизація Desktop ніколи не була такою...
Олексій Стульніков “WinAppDriver – автоматизація Desktop ніколи не була такою...Олексій Стульніков “WinAppDriver – автоматизація Desktop ніколи не була такою...
Олексій Стульніков “WinAppDriver – автоматизація Desktop ніколи не була такою...
 
Dependency Injection на примере Unity и NInject
Dependency Injection на примере Unity и NInjectDependency Injection на примере Unity и NInject
Dependency Injection на примере Unity и NInject
 
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneАвтоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows Phone
 
Автоматизация и Selenium IDE
Автоматизация и Selenium IDEАвтоматизация и Selenium IDE
Автоматизация и Selenium IDE
 
C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.
 
Модульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NETМодульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NET
 
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NETASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
 
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile ProjectsAutomation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
 
Deep Dive in Magento DI
Deep Dive in Magento DIDeep Dive in Magento DI
Deep Dive in Magento DI
 

Similaire à Testing RIA with Selenium

Решения для автоматизации тестирования Web-приложений на базе Selenium
Решения для автоматизации тестирования Web-приложений на базе SeleniumРешения для автоматизации тестирования Web-приложений на базе Selenium
Решения для автоматизации тестирования Web-приложений на базе SeleniumSQALab
 
Do you know what you are testing?
Do you know what you are testing?Do you know what you are testing?
Do you know what you are testing?Mikalai Alimenkou
 
А вы знаете что тестируют ваши тесты?
А вы знаете что тестируют ваши тесты?А вы знаете что тестируют ваши тесты?
А вы знаете что тестируют ваши тесты?SQALab
 
Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...
Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...
Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...Mail.ru Group
 
Agile Java Development компания JazzTeam - Техническая презентация Xml2Selenium
Agile Java Development компания JazzTeam - Техническая презентация Xml2SeleniumAgile Java Development компания JazzTeam - Техническая презентация Xml2Selenium
Agile Java Development компания JazzTeam - Техническая презентация Xml2Seleniumjazzteam
 
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко ДмитрийSolit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрийsolit
 
Client Side Autotesting Flash
Client Side Autotesting FlashClient Side Autotesting Flash
Client Side Autotesting Flashguestb0af15
 
Continious integration-Automated Testing-Solid-Agile
Continious integration-Automated Testing-Solid-AgileContinious integration-Automated Testing-Solid-Agile
Continious integration-Automated Testing-Solid-AgileKairat Yussupov
 
iPhone Unit Testing (Google tool Box)
iPhone Unit Testing (Google tool Box)iPhone Unit Testing (Google tool Box)
iPhone Unit Testing (Google tool Box)Yandex
 
Тестируем legacy c++
Тестируем legacy c++Тестируем legacy c++
Тестируем legacy c++Maxim Shulga
 
Как легко и быстро поднять стартап на облаке
Как легко и быстро поднять стартап на облакеКак легко и быстро поднять стартап на облаке
Как легко и быстро поднять стартап на облакеTatiana Smetanina
 
Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...jazzteam
 
Meeting #4. Frameworks.
Meeting #4. Frameworks.Meeting #4. Frameworks.
Meeting #4. Frameworks.Igor Khrol
 
Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...
Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...
Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...Dmitry Andreev
 
Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?Dmitry Buzdin
 
5 колчинская
5 колчинская 5 колчинская
5 колчинская qasib
 

Similaire à Testing RIA with Selenium (20)

Решения для автоматизации тестирования Web-приложений на базе Selenium
Решения для автоматизации тестирования Web-приложений на базе SeleniumРешения для автоматизации тестирования Web-приложений на базе Selenium
Решения для автоматизации тестирования Web-приложений на базе Selenium
 
Simonova sql server-enginetesting
Simonova sql server-enginetestingSimonova sql server-enginetesting
Simonova sql server-enginetesting
 
DevOps guide for awesome quality assurance
DevOps guide for awesome quality assuranceDevOps guide for awesome quality assurance
DevOps guide for awesome quality assurance
 
Do you know what you are testing?
Do you know what you are testing?Do you know what you are testing?
Do you know what you are testing?
 
А вы знаете что тестируют ваши тесты?
А вы знаете что тестируют ваши тесты?А вы знаете что тестируют ваши тесты?
А вы знаете что тестируют ваши тесты?
 
Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...
Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...
Наталья Чуфырина, Mail.Ru Group, «Как создать команду по автоматизации тестир...
 
Agile Java Development компания JazzTeam - Техническая презентация Xml2Selenium
Agile Java Development компания JazzTeam - Техническая презентация Xml2SeleniumAgile Java Development компания JazzTeam - Техническая презентация Xml2Selenium
Agile Java Development компания JazzTeam - Техническая презентация Xml2Selenium
 
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко ДмитрийSolit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
 
Unit тесты java
Unit тесты javaUnit тесты java
Unit тесты java
 
Client Side Autotesting Flash
Client Side Autotesting FlashClient Side Autotesting Flash
Client Side Autotesting Flash
 
Continious integration-Automated Testing-Solid-Agile
Continious integration-Automated Testing-Solid-AgileContinious integration-Automated Testing-Solid-Agile
Continious integration-Automated Testing-Solid-Agile
 
iPhone Unit Testing (Google tool Box)
iPhone Unit Testing (Google tool Box)iPhone Unit Testing (Google tool Box)
iPhone Unit Testing (Google tool Box)
 
Тестируем legacy c++
Тестируем legacy c++Тестируем legacy c++
Тестируем legacy c++
 
Как легко и быстро поднять стартап на облаке
Как легко и быстро поднять стартап на облакеКак легко и быстро поднять стартап на облаке
Как легко и быстро поднять стартап на облаке
 
Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...
 
Meeting #4. Frameworks.
Meeting #4. Frameworks.Meeting #4. Frameworks.
Meeting #4. Frameworks.
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
 
Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...
Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...
Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...
 
Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?
 
5 колчинская
5 колчинская 5 колчинская
5 колчинская
 

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

Notes de l'éditeur

  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