Петр Грибанов, 1С...Обо мне • В IT - с 1996 года • iScala, Epicor,...

Preview:

Citation preview

Петр Грибанов, 1С

Обо мне

• В IT - с 1996 года

• iScala, Epicor, Microsoft, 1C

• Developers’ Tools and Frameworks

• Developer, Architect, Team Lead,

Project Manager, R’n’D Director

• 1C:Technology Evangelist

• grip@1c.ru

О чем речь?

• Тестирование большого тиражного продукта

• Проект во многом уникальный

• Кросс-платформенный

• Высоконагруженный

• Нативные приложения, веб-клиент, мобильный клиент

• Что полезного для вас?

• Подходы к сборке и тестированию

• Сценарии тестирования

предприятий, бизнесов, учреждений

используют автоматизацию 1С пользователей продуктов 1С

тиражируемых прикладных решений на платформе

1С:Предприятие

1300 специалистов программируют

на языке 1С:Предприятия

1200 сотрудников работают

в фирме 1С

1 500 000 5 000 000

300 000

• Инструменты для разработки бизнес-приложений

• Бизнес-приложения, созданные с помощью наших

инструментов

• Обслуживание ИП

• Бухгалтерия

• CRM

• ERP

• FRP, ITIL, HRM, PMO, EPM

• …

Что делает 1С?

• Инструменты для разработки бизнес-приложений

• Среда разработки (IDE)

• Конфигуратор (proprietary tool)

• 1C:Enterprise Development Tools (Eclipse-based)

• Runtime

• Windows, Linux, macOS, Android, iOS, cloud infrastructure, …

• Инструменты и утилиты

• Администрирование

• Оптимизация производительности

• …

Что делает 1С?

Результаты

• На долю ERP-систем 1С пришлось по нашим оценкам ~85%

от общего количества автоматизируемых рабочих мест в России

Доля рынка ERP в деньгах Количество рабочих мест в ERP-системах

Результаты

Доля рынка ERP в деньгах Количество рабочих мест в ERP-системах

• Количество сотрудников

• Microsoft – 131 тыс.

• SAP – 54 тыс.

• 1С – 1,2 тыс.

Почему так получается?

• Задача: автоматизировать бизнес-процесс

• Сотрудник вводит документ о продаже

• Кому продали

• Когда продали

• Что продали

• Товар

• Количество

• Цена

• Сумма

Процесс разработки

Постановка задачи

Программный класс

База данных

Пользовательский интерфейс

Готовая программа

Задача: автоматизировать

процесс продажи

• Сотрудник вводит

документ о продаже

• Кому продали

• Когда продали

• Что продали

• Товар

• Количество

• Цена

• Сумма

class Document

{

int CustomerID;

DateTime Date;

Collection Goods;

}

Классическая

разработка

Процесс разработки

Постановка задачи

Программный класс

База данных

Пользовательский интерфейс

Готовая программа

Задача: автоматизировать

процесс продажи

• Сотрудник вводит

документ о продаже

• Кому продали

• Когда продали

• Что продали

• Товар

• Количество

• Цена

• Сумма

class Document

{

int CustomerID;

DateTime Date;

Collection Goods;

} Разработка в 1С

Что создаем? Справочник Документ Бизнес-процесс План счетов …

Процесс разработки

Постановка задачи

Программный класс

База данных

Пользовательский интерфейс

Готовая программа

Задача: автоматизировать

процесс продажи

• Сотрудник вводит

документ о продаже

• Кому продали

• Когда продали

• Что продали

• Товар

• Количество

• Цена

• Сумма

class Document

{

int CustomerID;

DateTime Date;

Collection Goods;

} Разработка в 1С

Приложение = Метаданные + Код

Процесс разработки

Постановка задачи

Программный класс

База данных

Пользовательский интерфейс

Готовая программа

Задача: автоматизировать

процесс продажи

• Сотрудник вводит

документ о продаже

• Кому продали

• Когда продали

• Что продали

• Товар

• Количество

• Цена

• Сумма

class Document

{

int CustomerID;

DateTime Date;

Collection Goods;

} Разработка в 1С

Мы сознательно ограничили инструментарий разработчика объектами из мира бизнеса – документы, справочники, бизнес процессы и т.п. Разработка бизнес-приложений в 1С: - Domain-Driven Design (DDD,

предметно-ориентированный дизайн)

- Metadata-driven development - Model-driven development - Low-code / no-code

Приложение = Метаданные + Код

Процесс разработки

Постановка задачи

Программный класс

База данных

Пользовательский интерфейс

Готовая программа

Задача: автоматизировать

процесс продажи

• Сотрудник вводит

документ о продаже

• Кому продали

• Когда продали

• Что продали

• Товар

• Количество

• Цена

• Сумма

class Document

{

int CustomerID;

DateTime Date;

Collection Goods;

} Разработка в 1С

ПЛЮСЫ: • Высокая скорость разработки • Низкая стоимость разработки МИНУСЫ: • Нельзя написать все что угодно • Только +/- бизнес-софт Реальность: • Типичный производитель ERP

• 10-20 своих решений • 20-30 решений от партнеров

• 1С • 20 решений от 1С • 1300 решений от партнеров

Приложение = Метаданные + Код

Бизнес-приложение

Объекты бизнес-приложения

Разное

• Бизнес-приложения поставляются в открытых исходных кодах*

• Бизнес-приложения легко кастомизируются под меняющиеся бизнес-

процессы

• Без изменения исходных кодов приложение работает

• Как исполняемый (executable) клиент

• В браузере (веб-клиент)

• С минимальной адаптацией – как мобильный клиент

• Магазин «внешних обработок» для 1С

• Плагины для специфичных бизнес-задач (спецформа отчетности,

подключение экзотической периферии, мониторинг цен из внешних

сервисов, …)

*Платформа в открытых исходных кодах не поставляется

1C:Предприятие

СУБД

Сервер приложений

Клиент

ERP

CRM

Бухгалтерия

Платформа 1С:Предприятие: runtime

СУБД

MS SQL Server

Oracle

IBM DB2

PostgreSQL

Сервер приложений

Клиент

Платформа 1С:Предприятие: runtime

Группа резервирования кластеров

Активный кластер

серверов

Резервный

кластер серверов

СУБД

Клиент

MS SQL Server

Oracle

IBM DB2

PostgreSQL

Windows

Linux

Платформа 1С:Предприятие: runtime

Веб-сервер

Группа резервирования кластеров

~

~

~

~

Активный кластер

серверов

Резервный

кластер серверов

СУБД

Тонкий клиент Веб-клиент

Мобильные

клиенты

Windows

Linux

MS SQL Server

Oracle

IBM DB2

PostgreSQL

Microsoft IIS

Apache

Windows

Linux

macOS

Chrome

Firefox

Safari

Internet Explorer

Microsoft Edge

Мобильные браузеры

iOS

Android

Windows

Веб-сервер

Группа резервирования кластеров

~

~

~

~

Активный кластер

серверов

Резервный

кластер серверов

СУБД

Тонкий клиент Веб-клиент

Мобильные

клиенты

Windows

Linux

MS SQL Server

Oracle

IBM DB2

PostgreSQL

Microsoft IIS

Apache

Windows

Linux

macOS

Chrome

Firefox

Safari

Internet Explorer

Microsoft Edge

Мобильные браузеры

iOS

Android

Windows

• Программный продукт 1cFresh – облачная среда исполнения приложений 1С (aPaaS – application Platform as a Service)

• 1С использует продукт 1cFresh в сервисе http://1cfresh.com

• Продукт 1cFresh может разворачиваться on-premise

Веб-сервер

Группа резервирования кластеров

~

~

~

~

Активный кластер

серверов

Резервный

кластер серверов

СУБД

Тонкий клиент Веб-клиент

Мобильные

клиенты

Windows

Linux

MS SQL Server

Oracle

IBM DB2

PostgreSQL

Microsoft IIS

Apache

Windows

Linux

macOS

Chrome

Firefox

Safari

Internet Explorer

Microsoft Edge

Мобильные браузеры

iOS

Android

Windows

Платформа 1С:Предприятие

• С / С++

• Север приложений

• Тонкий (исполняемый) клиент,

мобильный клиент, IDE (Конфигуратор)

• 14 000 000 строк кода

• JavaScript

• Веб-клиент

• 1 600 000 строк кода

• Java

• IDE 1C:Enterprise Development Tools

• 1 500 000 строк кода

Дисклеймер!

• Рассказ о тестировании платформы 1С:Предприятие

• Средства разработки бизнес приложений

• Рантайм для исполнения бизнес приложений

• Тестирование самих бизнес-приложений – за рамками

данной презентации

Тестирование платформы 1С:Предприятие • Среда разработки (IDE)

• Runtime

• Кластер серверов приложений (Windows, Linux)

• Клиенты

• Тонкий (исполняемый) клиент (Windows, Linux, macOS)

• Веб-клиент (Chrome, Firefox, Safari, Microsoft Edge, IE)

• Мобильный клиент (Android, iOS, Windows)

• СУБД (MS SQL, PostgreSQL, Oracle, IBM DB2, файловая СУБД 1С)

• 1300* бизнес-приложений на платформе 1С:Предприятие

• Из них 20 наших _____________________________________________________________________________________________________________ * Сертифицированных по программе 1С:Совместимо

Тестирование платформы 1С:Предприятие

• Среда разработки (IDE)

• Runtime

• 1300 бизнес-приложений на платформе 1С

• Из них 20 наших

Функциональное тестирование

(иногда ручное)

• Функциональное тестирование (99,9% автоматическое)

• Нагрузочное тестирование

• Функциональное тестирование • НЕ тестирование бизнес-логики

• Нагрузочное тестирование • Performance / load / stress

• ~100% автоматическое

Тестирование платформы 1С:Предприятие

• Среда разработки (IDE)

• Runtime

• 1300 бизнес-приложений на платформе 1С

• Из них 20 наших

Функциональное тестирование

(иногда ручное)

• Функциональное тестирование (99,9% автоматическое)

• Нагрузочное тестирование

• Функциональное тестирование • НЕ тестирование бизнес-логики

• Нагрузочное тестирование • Performance / load / stress

• ~100% автоматическое

Функциональное тестирование

• Особенность:

• Платформа – средство разработки, «конструктор»

• Нет точных сценариев тестирования

• ~1000 “простых” бизнес-приложений

• Отрисовка UI

• Формы, поля ввода, кнопки, диаграммы, географические схемы, …

• Работа прикладного кода

• Вычисление выражений, строковые операции, …

• Работа прикладных объектов

• Справочники, документы, бизнес-процессы, регистры, …

• Работа прикладных библиотек

• Сетевые коммуникации, работа с архивами и криптографией, решение СЛАУ, …

• Язык тестов – Python

Жизненный цикл версий

8.3.N

8.3.N+1

8.3.N+2

Continuous Integration (CI)

8.3.N

• Слияние рабочих копий кода в основную ветвь несколько раз в день • После слияния - автосборка и автотестирование • Проблем при сборке или тестировании?

• Изменённый код возвращается на доработку.

Разработка платформы 1С:Предприятие

6 версий платформы в работе:

• 8.3.N

• 8.3.N+1

• 8.3.N+2

• 8.3.N+3

• 8.3.N+4

• 8.3.N+5

Последняя выпущенная

Новая функциональность

50 коммитов/день

Разработка платформы 1С:Предприятие

6 версий платформы в работе:

• 8.3.N

• 8.3.N+1

• 8.3.N+2

• 8.3.N+3

• 8.3.N+4

• 8.3.N+5

релиз

Фикс

Фикс

Фикс

Фикс

Фикс

Автоматически

6 версий платформы в работе:

• 8.3.N

• 8.3.N+1

• 8.3.N+2

• 8.3.N+3

• 8.3.N+4

• 8.3.N+5

Разработка платформы 1С:Предприятие

релиз

Новая функциональность

Новая функциональность Вручную

Тестирование • 30 000 сочетаний «тест + окружение»

• Окружение

• х32, х64

• ОС

• Windows XP … Windows 10

• Linux: Astra, CentOS, Debian, Mint, RedHat, Ubuntu, Альт Линукс

• macOS 10.8+

• Мобильные ОС

• iOS 7.0 – 12.X, Android 4.0 – 9.X, Windows 8.1 – 10

• Веб-клиент

• Chrome, Firefox, Safari, IE

• Мобильные браузеры

• СУБД

• SQL Server 2005 - 2014

• PostgreSQL 8.1.5 – 10.5

• IBM DB2 9.1 – 11.1

• Oracle 10 – 12

• Файловая СУБД

Тестирование

• Полный цикл тестирования релиза – 3 недели

• Параллельный запуск тестов на фермах виртуалок

• Fail fast!

• Если сборка плохая – важно узнать про это как можно раньше

• Приоритизируем тесты

1. Тесты, помеченные разработчиком как приоритетные

2. Недавно упавшие тесты

3. Сочетание важных и быстрых тестов

• В порядке возрастания времени выполнения теста

4. Давно не падавшие тесты

• Правило «10 сбоев»

• 10 сбоев в пределах одной серии – останавливаем тесты

• Освобождаем ресурсы для тестирования других сборок/других версий

Приоритизация тестов

1. Тесты, помеченные разработчиком

как приоритетные

2. Недавно упавшие тесты

3. Сочетание важных и быстрых тестов

• В порядке возрастания

времени выполнения теста

4. Давно не падавшие тесты

Время выполнения

Важ

но

сть

тест

а

Старт

Приоритизация тестов

• Новая функциональность – выбираем приоритетные тесты:

• Затронет UI?

• Веб-клиент?

• Мобильный клиент?

• Клиент-серверное взаимодействие?

• Сборка новой ветки на основе протестированного релиза

• Протестировать изменение в изолированном окружении

• Не повлияло ли на производительность

• Возможно, скорректировать тесты

• Если все ОК – новая функциональность попадает в общую ветку

Сборка и автотестирование

• Инкрементальная компиляция для теста отдельных изменений

• Компилируется только то, что изменилось и прямые зависимости

• Полный тест – полная сборка

• «Интеграционные» сборки

• Проверка «в стороне» существенных изменений

• Если инженер считает изменения существенными, он вливает их в отдельную

ветку, собирает ее и прогоняет все тесты

• При успешном прохождении всех тестов изменения вносятся в основную

ветку

Упал тест? • Покоммитная сборка и тесты

• Дано: коммит N – тесты ОК, коммит N + X – тесты упали

• Какой коммит сломал тест?

• Ускоренная сборка* начиная с последнего хорошего релиза

• Старые бинарники остаются в файлах как мусор

• Новые бинарники ложатся рядом

• Линкер правит таблицы ссылок, переадресуя вызовы на новые бинарники

• В памяти мусор, но: 50 мин -> 3 мин на сборку

• Сборка точечного изменения обходится дешево

• Можно быстро протестировать коммит

• Делаем тест на самом быстром окружении, где тест был сломан

• Нюансы: могло поменяться окружение (например, автоматически обновился Chrome)

• Находим, какой коммит сломал тест

• Автоматический мейл инженеру

*Доступно только в MS Visual Studio, есть ряд ограничений в использовании

Упал тест?

Автоматическое письмо:

Движение по коммитам дихотомией

Нагрузочное тестирование

• Функциональное тестирование – done

• Нагрузочное тестирование

• 400 виртуалок

• Тиражные бизнес решения: ERP, Payroll, HRM, …

• Эмуляция 20 000 одновременных пользователей

Eat your own dogfood

• Функциональное тестирование – done

• Нагрузочное тестирование – done

• Используем сами!

• Внутренний тасктрекер/багтрекер

• Внутренний Документооборот

• Разработка бизнес-приложений

• ERP, Документооборот, Бухгалтерия, …

• Тестируется IDE

• Тестирование бизнес-логики

Инструменты: Jenkins

• Jenkins for CI

• 50+ сборок/день

• Сборка параллельно по архитектурам

• Windows

• Linux

• macOS

• Параллельная сборка независимых проектов

• В сотни потоков

• 8 часов -> 80 минут

• Интеграция с нашим тасктрекером

• Автоматическое заведение ошибок с логами и артефактами тестирования

• Доставка и установка платформы на 1500 серверов до 70 раз в день

Инструменты: Apache JMeter

• Тестирования производительности кластера приложений

• Нагрузочное тестирование кластера приложений на большом

количестве (до 10 000) пользователей

«Тест-центр» • «Тест-центр» - приложение на платформе 1С:Предприятие (библиотека)

• Мержится с тестируемым бизнес-приложением (ERP, HRM, Payroll, …)

• Процедура мержа автоматизирована

• Многопользовательские сценарии тестирования

• Группы пользователей

• Количество пользователей в группе

• Сценарии работы групп

• Запуск сценариев, контроль хода выполнения

• «Конвейер выполнения»

• 2 мощных физических сервера с виртуалками

• 1 сервер приложений 1С

• 1 сервер БД

• 1 сервер лицензирования

• 40 серверов с клиентскими сеансами

• Из конвейеров собираются 15 вариантов тестовых площадок

• 1, 2, 4, 10 конвейеров

• 100, 200, 400, 3000, 10000 пользователей

• От 1 до 6 серверов в кластере

«Тест-центр»

Пример сценария тестирования ERP

«Тест-центр»

Пример сценария тестирования ERP

Тестируем UI

• 3rd party tool vs. own-developed

• Ranorex, Rapise, Abbot, eggPlant, FitNesse, …

• Cвой инструмент для визуального тестирования

• Тестирует практически любое приложение

• Запись сценария

• Запись действий пользователя (мышь, клавиатура)

• Скриншоты рабочей области экрана

• Проигрывание сценария

• Ждет такой же картинки экрана (с точностью до пикселя), как в сценарии

• Эмулирует нажатие клавиш/кнопок мыши

• Замеряет производительность

• Отслеживаем performance degradation

Тестируем UI: веб-клиент

• Cвой инструмент для визуального тестирования

• Тот же, что для нативного клиента

• Тестирует практически любое приложение

• Selenium

• Если элемент поменял положение на экране – Selenium может не заметить

• Производительность!

• Отладчик Chrome, Dynatrace AJAX Edition

• Время выполнения единичной операции – не показатель

• Может наложиться уборка мусора, …

• Считаем

• Количество выполненных инструкций JavaScript

• Количество атомарных операций над DOM

Инструменты: Grafana

• Платформа с открытым исходным кодом для визуализации,

мониторинга и анализа данных

• Читает из InfluxDB, Prometheus, MySQL, Postgres

• Мы используем InfluxDB

• Широкие возможности визуализации

• Функциональность Grafana можно реализовать на 1С

• Но мы уже вложили ресурсы в Grafana

Монитор внутренней кухни CI за 12 часов

12-часовой срез тестирования по веткам

• Монитор состояния CI-стендов • Что отлично от тёмно-зеленого - сбои • Красные - за квоту времени упало > 30 тестов

Тестирование платформы 1С:Предприятие

• Платформа = среда разработки (IDE) + среда выполнения (runtime)

• Юнит-тесты

• Функциональное тестирование платформы

• Много простых бизнес-приложений

• Написаны разработчиками платформы

• Нагрузочное тестирование

• Реальные бизнес-приложения (ERP, Бухгалтерия, Payroll, HRM)

• Написаны разработчиками бизнес-приложений

Тестирование платформы 1С:Предприятие

Вычисление выражений

Работа со строками

Работа прикладных объектов

Работа библиотек

Работа с СУБД

ERP Бухгалтерия HRM Функциональное тестирование

Нагрузочное тестирование

Тестирование платформы 1С:Предприятие • Платформа = IDE + Runtime

• Fail fast!

• Сначала тестируем то, что недавно сломалось

• Потом – важное и быстрое

• Потом – все остальное

• Функциональное тестирование

• Сотни тестовых бизнес-приложений

• Нагрузочное тестирование

• Реальные бизнес-приложения – ERP, HRM, Payroll, …

• Эмуляция 10 000+ одновременных пользователей

• Тестирование UI

• Собственный инструмент

• Selenium для веб-клиента

• Eat your own dogfood

• Внутренние тасктрекер, документооборот, …

• Разработка тиражных приложений (ERP, HRM, Payroll, …)

• Инструменты

• Jenkins, JMeter, Grafana

• Собственной разработки

Как мы в 1С тестируем софт, который используют

5 000 000 пользователей в 1 500 000 организаций

на Windows, Linux, macOS, Android, iOS

Петр Грибанов

grip@1c.ru

Recommended