Свойства — это компас для программиста ✛ ✎

Оригинал: "Accurate Programming: Thinking about programs in terms of properties"
arXiv:1109.0786 · 2011-09-05 · arXiv non-exclusive · собственный разбор · 1 мин
Программу можно проверять не примерами, а правилами, которые верны всегда.

Программист смотрит на функцию max, которая возвращает большее из двух чисел. Как убедиться, что она работает? Можно написать тесты: max(2,3)=3, max(5,5)=5. Но что если где-то в глубине кода ошибка, которая проявится только на числе 65536? Вместо угадывания можно сформулировать правило: «результат никогда не меньше каждого из аргументов». Это свойство — оно должно быть верно для любых входных данных.

Библиотека ScalaCheck автоматически генерирует сотни случайных чисел, подставляет их в свойство и сообщает, если правило нарушилось. Так свойства работают как компас: они не проверяют один маршрут, а задают направление, верное для любого пути. Например, для функции sum (сложение списка чисел) свойство «если добавить положительное число, сумма вырастет» находит ошибку переполнения, которую обычные тесты не замечают.

Свойства можно уточнять, как настройку компаса. Сначала говорим: «результат неотрицательный» — но этому правилу удовлетворяет даже функция, всегда возвращающая ноль. Добавляем: «для списка из одного элемента результат равен 1» — ноль отсеивается. Шаг за шагом свойства сходятся к единственно правильной программе.

Точное программирование — это когда разработчик думает о коде через его свойства. Вместо того чтобы тонуть в тумане сложности, он держит в руках компас из правил, которые можно проверить автоматически. Это делает программы надёжнее, а их изменение — безопаснее.

Название библиотеки ScalaCheck отсылает к идее автоматической проверки свойств, а не к «проверке Скалы» — это инструмент для проверки свойств в Scala.

В сериале «Мир Дикого Запада» поведение роботов определяется сложными правилами, но их корректность не гарантирована. Точное программирование могло бы помочь формулировать и проверять свойства поведения, предотвращая неожиданные сбои.

Учёные
Erwin SchrödingerHugh Everett IIIMax BornAlbert EinsteinJohn von NeumannAugustin-Louis Cauchy
Понятия
точность автоматизация оптимизация диагностическая точность обработка естественного языка реальное время квантовый алгоритм дизайн лекарств открытый исходный код сходимость машинное обучение компьютерное моделирование распознавание речи персонализированная медицина искусственный интеллект робототехника вычисление классификация точное решение точность