Статьи Nazara
Как проверить формулы калькулятора
Как составить контрольные примеры, проверить границы, округление и промежуточные результаты калькулятора. Интерактивный чек-лист приёмки.
Чтобы проверить формулы калькулятора, подготовьте примеры с заранее известным ответом, проверьте границы допустимых значений и согласуйте округление. Сравнивайте не только итог, но и промежуточные числа. Ниже — порядок приёмки и интерактивный чек-лист: по нему Вы сможете передать разработчику конкретное расхождение вместо сообщения «калькулятор считает неправильно».
Что считать правильным результатом
Правильный результат — число, полученное по согласованному правилу из определённых входных данных, с указанными единицами и точностью. Совпадение с другим калькулятором само по себе этого не доказывает: инструменты могут учитывать разные расходы, использовать разные периоды или одинаково ошибаться. Сначала определите правило, затем проверяйте его исполнение.
Например, в учебном расчёте стоимость заказа равна количеству изделий, умноженному на цену одного изделия, плюс разовая подготовка. При количестве 4, цене 250 рублей и подготовке 300 рублей ожидается 1300 рублей. Это условный пример, не прайс Nazara и не расчёт настоящего заказа. Для проверки важна простота: каждое действие можно повторить вручную.
В карточке правила запишите названия полей, единицы, порядок действий, допустимый диапазон и поведение при отсутствии значения. Отдельно укажите, входит ли налог в цену, применяется ли скидка к подготовке, может ли количество быть дробным. Не отвечайте за заказчика. Если правило не определено, результат нельзя честно пометить как прошедший проверку.
Бриф и приёмка — разные этапы. Если формулы ещё не согласованы, начните с материала что подготовить к разработке калькулятора. Здесь мы работаем с уже описанным правилом и проверяем исполнение. Не нужно заново собирать весь проект, чтобы проверить одну изменённую формулу.
Как составить контрольный пример
Контрольный пример состоит из входных значений, ожидаемых промежуточных результатов и ожидаемого ответа. Вычислите ожидание независимо от проверяемой программы: на бумаге или в отдельно проверенной таблице. Копирование формулы из кода в таблицу может перенести ту же ошибку и создать ложное подтверждение.
Начните с удобных целых чисел. В учебном примере произведение равно 1000, добавление подготовки даёт 1300. Затем измените только количество: при 5 изделиях итог должен стать 1550. Разница — 250, то есть цена дополнительного изделия. Такая проверка помогает обнаружить лишнее умножение разового расхода.
| Пример | Вход | Ожидание | Проверяем |
|---|---|---|---|
| Основной | 4 × 250 + 300 | 1300 рублей | Порядок действий |
| Другое количество | 5 × 250 + 300 | 1550 рублей | Подготовка остаётся разовой |
| Без подготовки | 4 × 250 + 0 | 1000 рублей | Допустимый нулевой расход |
| Одна единица | 1 × 250 + 300 | 550 рублей | Минимальный заказ |
Примеры относятся к конкретному учебному правилу. Если в Вашем проекте минимальный заказ другой или нулевая подготовка запрещена, ожидания меняются. Таблица тестов должна отражать договорённости бизнеса. Рядом с каждым примером укажите пункт правила, который он проверяет.
Записывайте и то, что видит пользователь. Если внутреннее число равно 1300, а экран показывает 13 рублей из-за неверного перевода копеек, математическая функция может быть исправна, но приёмка продукта провалена. Проверяйте подписи, разделители, процентный знак и период. Итог за месяц нельзя выдавать за итог за год.

Какие границы и особые значения проверить
Граничные значения — числа возле разрешённого минимума, максимума или точки, где меняется правило. Обычный средний пример не проверяет переходы. Если скидка действует начиная с 10 изделий, сравните 9, 10 и 11. Если верхняя граница количества — 100, нужны 99, 100 и 101. Ожидание для запрещённого числа — отказ, а не случайный итог.
Отделяйте пустое поле от нуля. Пустое означает, что значение не задано; ноль может быть допустимым рекламным расходом или недопустимым количеством товара. Проверьте оба случая. Также проверьте отрицательное число, дробь там, где разрешены только целые значения, и число за согласованным диапазоном. Не пытайтесь охватить все числа: выбирайте случаи, представляющие разные правила.
Для формулы с делением заранее опишите поведение при нулевом знаменателе. Стоимость заявки нельзя получить делением расходов на ноль заявок. Возможны текст «нет данных для расчёта» или иной согласованный статус. Бесконечность, NaN и пустое место не должны выглядеть как рассчитанная денежная сумма. Отсутствие ошибки браузера ещё не подтверждает смысл результата.
В проверке процентов различайте значение 20 процентов и число 0,2. Уточните, что вводится в поле и где выполняется перевод. При учебной цене 1000 рублей скидка 20 процентов даёт 800 рублей, если применяется ко всей цене. Результат 980 означает другую интерпретацию процента, а не погрешность округления.
Переход между тарифами проверяйте с обеих сторон. Если правило меняет цену всего заказа при достижении порога, итог может уменьшиться; если скидка относится только к последующим единицам, поведение другое. Нельзя объявлять любое снижение ошибкой. Сравните результат с утверждённым способом применения скидки.
Как проверять округление и точность
Согласуйте три вещи: сколько знаков хранится в расчёте, в какой момент округляется значение и сколько знаков показывается на экране. Округлять каждую строку и округлять только общую сумму — разные правила. Возьмите несколько дробных строк и отдельно вычислите оба варианта. Ваш эталон должен соответствовать выбранному правилу, а не первому красивому числу.
JavaScript Number не представляет точно все десятичные дроби. Например, результат 0.1 + 0.2 отличается от точного десятичного 0.3. В документации MDN о Number.EPSILON объяснено, почему допустимое отличие зависит от масштаба чисел и точности входа. Одна постоянная погрешность не подходит автоматически ко всем расчётам.
Проверьте способ округления. Спецификация ECMAScript описывает Math.round: при равном расстоянии до двух целых выбирается значение ближе к положительной бесконечности. Это важно, если модель допускает отрицательные числа. Функция языка не заменяет согласованного бизнес-правила.
Для денежных величин разработчик может использовать целые минимальные единицы или библиотеку десятичной арифметики. Это требует проверки диапазона, дробных ставок и последовательности операций. Хранение в копейках само по себе не определяет округление процента от суммы. В приёмке важен воспроизводимый результат на согласованных примерах.
Укажите допустимое отличие для каждого показателя. Количество целых изделий сравнивают точно. Денежную сумму проверяют по принятому правилу. Прогнозное число клиентов может быть дробным математическим ожиданием, если так определена модель; превращать его в обещание продаж нельзя. Форматирование не должно скрывать значение показателя.

Как найти место расхождения
Если итог не совпал, зафиксируйте вход и найдите первый промежуточный шаг, на котором ожидание отличается от программы. Для учебной стоимости это чтение количества, умножение на цену и добавление подготовки. Для воронки это посещения, заявки, продажи, выручка и расходы. Ошибка на раннем шаге меняет несколько последующих показателей.
Проверьте чтение поля: принято ли число целиком, как обрабатывается десятичная запятая, не осталось ли прежнее значение после изменения. Затем проверьте единицы и период. Только после этого сравнивайте арифметику. Если цена передана в рублях, а код ожидает копейки, исправление округления не устранит причину.
В калькуляторе окупаемости лендинга и рекламы публично описана модель: выручка, маржинальность и рекламный бюджет участвуют в расчёте прибыли после рекламы. Страница предупреждает, что налоги, постоянные расходы, возвраты и сезонность не учтены. Совпадение формулы с моделью не подтверждает реальную прибыль бизнеса.
Сначала сверяют цепочку расчёта, затем трактовку результата. Нельзя опровергнуть формулу только тем, что бухгалтерский итог другой: сравните состав расходов и доходов. И наоборот, правильная арифметика не оправдывает подпись, обещающую чистую прибыль, если модель считает лишь прибыль после рекламы.
Оформите расхождение как карточку: версия приложения, название примера, все входные значения, ожидаемый и фактический ответ, первый неверный шаг. Приложите снимок без личных данных. Фраза «вчера вроде считало» не сохраняет ни состояние модели, ни условия теста. Карточка позволяет повторить проблему и проверить исправление.
Что повторить после исправления
После изменения повторите провалившийся пример и сохранённый набор, который раньше проходил. Так проверяют, что исправление одного случая не испортило другие. Добавьте новый пример в постоянный набор с объяснением причины: например, обнаружено двойное применение скидки на границе тарифа.
Проверяйте пересчёт в обоих направлениях. Увеличьте поле, затем верните прежнее значение: ответ должен вернуться к прежнему. Измените несколько полей и выполните новый расчёт. Если программа хранит введённые значения, убедитесь, что сохранённое состояние не смешивается со значениями по умолчанию. Это проверка интерфейса вокруг формулы, а не только вычислительной функции.
Не сравнивайте разные версии без записи правил. Новая версия могла изменить состав расходов или округление; тогда обновляются ожидания и объяснение модели. Если правило не менялось, прежний ответ остаётся ориентиром. Для каждого набора храните дату, версию правил и того, кто подтвердил ожидаемые значения.
Итог приёмки формулируйте ограниченно: «согласованные примеры проходят в указанной версии». Это не доказательство правильности для всех данных и не гарантия финансового результата. Для критичных расчётов необходимы более широкие автоматизированные тесты и независимая проверка специалистом предметной области.
Чек-лист приёмки формул
Отмечайте только действительно проверенные пункты. Чек-лист хранит отметки в браузере, но не проверяет формулы автоматически. Для незавершённого пункта запишите препятствие: неизвестно округление, нет эталонного ответа или не определено поведение при нуле.
Если нужна помощь с Вашим калькулятором, отправьте через Умную форму правило и обезличенный пример с ожидаемым ответом. Этого достаточно для начала обсуждения. Не отправляйте пароли, клиентские документы или закрытый прайс, когда задача объясняется условными значениями.
Частые вопросы
Можно ли использовать Excel как эталон
Да, если формулы контрольной таблицы проверены отдельно. Укажите формат чисел и порядок округления. Таблица с непроверенной копией кода калькулятора не является независимым подтверждением.
Сколько контрольных примеров нужно
Универсального количества нет. Набор охватывает каждую ветвь правила, границы и прежние ошибки. Несколько разных условий полезнее десятка одинаковых обычных примеров.
Нужно ли показывать все промежуточные числа
Не обязательно. Для приёмки они должны быть доступны проверяющему безопасным способом. В интерфейсе достаточно значений, помогающих понять результат без перегрузки.
Можно ли принимать расхождение в одну копейку
Только если допустимое отличие определено заранее и подходит задаче. Иногда копейка указывает на неверный момент округления, который на большом наборе строк даст заметную разницу.
Нужен ли отдельный тест после найденной ошибки
Да, если условие отсутствовало в наборе. Подпишите причину добавления: будущий разработчик поймёт, почему пример нельзя удалить как ненужный.
Что делать, если правильный ответ не согласован
Приостановить приёмку этой формулы и уточнить правило с владельцем модели. Нельзя выбрать ответ программы как эталон только потому, что он выглядит реалистично.