PRISM/genlab-1c / prism
v1.4.0Star10

Честные границы

Любой бенчмарк может нарисовать красивый рейтинг. Гораздо честнее — прямо сказать, где его цифрам уже можно верить, а где пока рано. Эта страница про это.

В двух словах

  • Надёжно — категория A (алгоритмика), оси Синтаксис и Семантика. Оценку ставят автоматические проверки, результат воспроизводим.
  • Надёжно — категория B (платформа), оси Семантика и Платформа. Стали надёжными, когда код начали по-настоящему запускать в 1С.
  • Осторожно — Оптимальность. Машина видит только грубые проблемы; тонкое оценивает эксперт.
  • Пока не доказано — согласие машины с экспертом. Наш главный аргумент, но эксперт был только один.

Чему уже можно верить

Алгоритмика (категория A), оси Синтаксис и Семантика. Оценку ставят автоматические проверки — компилятор и тесты. У них нет настроения и мнения: тот же код прогонишь дважды — получишь тот же балл. Это и есть надёжность.

Платформа (категория B), оси Семантика и Платформа. Раньше платформенный код оценивали «на чтение», и это было слабым местом. Теперь код по-настоящему запускается в 1С против учебной базы — и запуск видит то, чего не видно глазами: например, что модель обратилась к полю, которого в базе нет.

Где пока рано доверять

1. Согласие машины с экспертом ещё не доказано. Главная идея PRISM: машинной оценке можно верить, потому что на проверке она совпадает с живым экспертом. Звучит хорошо — но пока эксперт был только один. А из одного человека «согласие» не посчитать: нужно хотя бы двое-трое, и проверять надо на задачах, которые не использовались для настройки самой метрики. Пока этого нет, называть оценку «подтверждённой экспертами» — аванс, а не факт.

2. Банк задач ещё маленький. Несколько десятков задач — мало, чтобы уверенно заявлять «эта модель лучше той»: разница между моделями может оказаться в пределах случайности. Рейтинг станет весомым, когда задач станет заметно больше и они станут разнообразнее. Поэтому пополнение банка — наш приоритет №1.

3. Оптимальность (O) меряется по-разному в A и B. В алгоритмике (A) оптимальность теперь проверяется следующим образом: подаём решению большой объём входных данных и смотрим, как растёт число операций, — так машина различает быстрый алгоритм и медленный (вплоть до низких баллов). В платформенных задачах (B) проще: машина ловит типовые тяжёлые ошибки (запрос к базе в цикле и подобное), но «удачно ли выбран подход» — не её уровень, это к эксперту, и снизу её оценка там ограничена. Неалгоритмическую оптимальность — выбор структуры, стиль — машина не судит ни там, ни там: это Уровень 2.

Что мы делаем, чтобы границы расширить

По приоритету:

  1. Больше задач — чтобы рейтинг перестал быть «в пределах шума».
  2. Разметка двумя-тремя экспертами — чтобы впервые честно измерить согласие машины и эксперта, а не верить ему авансом.
  3. Раздельная настройка и проверка — пороги метрики настраивать на одних задачах, а согласие проверять на других.
  4. Честная оптимальность — для алгоритмики (A) это уже сделано: O меряется исполнением. Осталось откалибровать её против эксперта на Уровне 2 и честно оговаривать предел там, где машина слепа (архитектура решения; оптимальность в категории B).

Почему мы это вообще пишем

Потому что честный измеритель важнее красивого рейтинга. Если мы говорим «модель X лучше» — за этим должно стоять то, что мы готовы открыто показать, включая собственные слабые места.