Часто приходится слышать, что одна программа тормозит, а другая работает быстрее. Одна программа удовлетворительно обрабатывает данные, а другая просто "летает". Но на деле, если мы хотим сказать, что одна программа быстрее или медленнее другой, нам мало знать, что в одном месте программа работает быстрее, а в другом медленнее.
Хотя я далее буду говорить, прежде всего, относительно компьютерных программ, в конце я расскажу, как те же методы Вы можете использовать, чтобы измерять удовлетворенность Вашей компанией или Вашими продуктами и в других областях (транспорт, почтовые услуги и т.д.).
Например, есть две программы (или одна программа до и после изменений): одна запускается, быстрее, зато в другой форма открывается быстрее, а вот разные отчеты за разное время составляются. Как выбрать систему?
Или даже у Вас есть работающая система, но Вы хотите знать, какие у Вас места наиболее неприемлемые по времени исполнения. Только замером времени это не определишь. Помимо количества времени, нужно еще и знать, а насколько это много или мало. Хорошо, замечательно или плохо.
Вот для этого несколько иностранных компаний объединились, чтобы принять единый стандарт замера производительности систем. Новую систему назвали Apdex (Application Performance Index) и ей измеряют насколько качественно быстро или медленно выполняются операции.
И так положим нам нужно знать, насколько быстро выполняются следующие операции: запуск программы, открытие окна ввода данных, подготовка ежедневного отчета оператора, подготовка ежемесячного отчета для руководителя, за какое время проходит реализация товара, за какое время проходит перемещение товара и т.д.
Так мы получим, что у нас по каждой операции есть время. Но каждый раз это время отличается (колеблется в некотором диапазоне). Положим, измерить и посчитать среднее мы можем, но у нас просто будут усредненные значения - средняя температура по больнице. Т.е. просто средние значения нам не подходят. Нужно использовать что-то другое, что показывает медленно или быстро работает в том или ином месте эта программа. Т.е. нам нужны показатели качества, а не количества.
И правда, зачем нам знать с точностью до секунды, за сколько времени делается расходный ордер? Надо знать достаточно быстро делается этот расходный ордер, чтобы обеспечить работу компании или нет. Нам не нужно знать сколько секунд, минут, часов. Нам нужно обеспечить нормальную работу компании.
Для каждой операции мы можем выделить хорошее время выполнения. Положим, нам достаточно, чтобы программа запустилась за 5 секунд, форма ввода открывалась за 2 секунды, проведение товара за 4 секунды, ежемесячный отчет за 60 секунд и т.д.
Это время примем за Т. Если программа выполнит операцию за время Т, то это замечательно. Далее положим, что если программа выполнит за время не более 4*Т, то это удовлетворительно. Если более 4*Т, то программа работает неудовлетворительно медленно.
Далее мы берем не среднее время выполнения операции, а каждый замер проверяем в какой интервал он входит. Положим, мы провели 250 замеров, за сколько времени делается проведение товара в базе, притом, что хорошим временем является 4 секунды.
И так за время меньшее чем Т (до 4 секунд) выполняется 180 замеров. Хорошо.
За время от Т до 4*Т (от 4 до 16 секунд) выполняется 50 замеров. Удовлетворительно.
И больше чем 4*Т (более 10 секунд) выполняется 10 замеров. Плохо.
И чтобы понять насколько это хорошо или медленно посчитаем индекс Apdex, который измеряется как:
Apdex = (Замеров Хорошо + Замеров Удовлетворительно/2)/количество измерений
Т.е. в нашем случае:
Apdex = (180 + 50/2)/ 250 = 0.82
И также мы можем составить таблицу и по другим значениям:
- запуск программы 0.99
- открытие окна ввода данных 0.95
- подготовка ежедневного отчета оператора 0.86
- подготовка ежемесячного отчета для руководителя 0.56
- за какое время проходит реализация товара 0.81
Как уже становится понятно, чем выше число, тем лучше. В идеале, если Apdex = 1, то значит, программа эту операцию выполняет успешно быстро.
В стандартах Apdex принято выделять такие интервалы:
0.94 – 1.00 Замечательно (Отлично)
0.85 – 0.93 Хорошо
0.70 – 0.84 Удовлетворительно
0.50 – 0.96 Плохо
От 0 до 0.49 Неприемлимо.
Как мы видим в нашем примере оценку Отлично получает "запуск программы", "открытие окна ввода данных". Оценку Хорошо получает "подготовка ежедневного отчета оператора". Оценку Удовлетворительно получает " реализация товара" и "проведение товара". И наконец, Оценку Плохо получает "подготовка ежемесячного отчета для руководителя".
Главное, здесь правильно выбрать значение параметра Т, т.е. время, которое берем за базовое и большое количество измерений в реальной ситуации. Таким образом Вы можете в работающей системе выделить места, которые у Вас выполняются неприемлемо долго.
Также Вы можете сравнивать по разным значениям производительность разных систем. Т.е. она программа обеспечивает хороший индекс Apdex на одних заданиях, и плохой, на других, а вторая программа позволит выполнять одни операции с лучшим Apdex, чем первая, а вот отчеты она строит еще хуже первой.
Еще раз вернемся к примеру. Часто когда пытаются оптимизировать что-то, смотрят на время выполнения и неверное расставляют приоритеты. Положим смотрят, что среднее время реализации товара составляет 6-9 секунд и считают это нормальным. Зато другая операция выполняется 10-15 секунд и ее пытаются оптимизировать и снизить до 5 секунд. Во-первых, надо смотреть, возможно эти 10 секунд это приемлемо, даже хорошо (Apdex = 0.97), а вот реализация товара имеет индекс 0.81, хотя и делается быстрее.
Но и этого мало. Мы еще должны выделять приоритеты. Например, есть две задачи, которые имеют одинаковый Apdex, но одна задача важнее, чем другая. Поэтому помимо подсчета индекса производительности приложения надо расставить еще, насколько важна производительность той или иной задачи.
И вот уже зная приоритетность скорости выполнения тех или иных операций и индекс производительности, мы можем составить таблицу наиболее узких мест, которые надо решать.
Положим, пусть будет такая важность (по-убыванию):
за какое время проходит реализация товара 0.81
открытие окна ввода данных 0.95
подготовка ежедневного отчета оператора 0.86
акт сверки 0.96
акт списания 0.76
расчет себестоимости 0.85
подготовка ежемесячного отчета для руководителя 0.56
запуск программы 0.99
Так мы видим уже картину в целом. Понятно, что в первую очередь нужно исправить проблемы с реализацией товара и после этого с отчетами. Далее важно понять, почему Акт списания готовится так медленно.
Ну и наконец, если Вы поняли эту методику подсчета производительности, Вы можете использовать ее и в других местах в Вашем бизнесе. Положим у Вас 20 видов товаров или видов услуг. Вы можете по каждому товару посчитать, сколько у Вас покупатели довольны покупкой, сколько считают качество нормальным и так посчитать:
("Считают товар отличным" + "Считают товар приемлемым"/2 )/количество опрошенных покупателей
Или срок, за какой Ваш отдел доставки поставляет на Ваше производство те или иные комплектующие.
("Имелось на складе" + "Доставлено в срок" + "Задержка была небольшой, чтобы вызвать проблем"/2)/"количество поставок"
Я сам бухгалтерские программы, программы управления предприятием не пишу и не сопровождаю. Но как заметил, у нас на форуме есть представители компаний, которые не только внедряют или продают, но даже сами пишут программы для учета, для управления предприятием и т.д.. Но я не нашел ни одного примера в Казахстане, что производитель или поставщик показывал примеры подсчета индекса Apdex своих программ.
Я видел много программистов, которые обслуживают, настраивают, устраняют проблемы в 1С, SAP, Dynamics, других бухгалтерских, ERP, CRM программ в Казахстане, но, ни разу не видел, чтобы кто-то подсчитывал индекс производительности. В лучшем случае скажут: до изменений отчет готовился 50 секунд, а теперь 30. Но этого мало, чтобы понять хорошо это или плохо.