Код больше не пишут

Глава 9. Тест как функция награды

Часть III. Анти-vibe6 мин

09

Тест как функция награды

Автоматический тест в программировании устроен очень просто. Это маленькая программа, которая запускает кусочек большой программы с заранее известными данными и проверяет, что получился заранее известный результат. Если маникюр стоит полторы тысячи, а у клиентки скидка десять процентов, программа расчёта должна выдать тысячу триста пятьдесят, и тест проверяет именно это: вызывает расчёт, сравнивает ответ с числом и сообщает «прошёл» или «не прошёл». Хороший проект обрастает тысячами таких проверок, и их прогоняют при каждом изменении.

Для людей тесты десятилетиями были чем-то вроде страховки. Программист писал код, а потом, если хватало времени и совести, писал тесты, которые подтверждали, что он не ошибся, и продолжали это подтверждать при каждой следующей правке. Писать их не любил почти никто, потому что тест не добавляет в программу ничего такого, что можно показать заказчику, и когда сроки поджимали, тесты откладывали на потом, а потом так и не наступало. В 2002 году американский программист Кент Бек выпустил книгу о разработке через тестирование, где предложил делать наоборот: сначала написать тест, который описывает, чего ты хочешь от кода, убедиться, что он не проходит, а потом писать код, пока тест не пройдёт. Метод стал знаменитым, его преподавали на курсах и хвалили на конференциях, и большинство программистов, насколько я могу судить, так им и не пользовались.

С приходом агентов у тестов появился новый смысл, и сейчас, по-моему, он важнее старого.


Дрессировщик спиной к нам стоит на коленях на газоне и протягивает лакомство молодой собаке, которая только что села.иллюстрация
Обучение с подкреплением похоже на дрессировку. У машин лакомство заменяет число, и для кода его выдаёт тест.

Чтобы его объяснить, придётся на минуту заглянуть в то, как вообще учат машины. Один из основных способов называется обучением с подкреплением, и работает он примерно так же, как дрессировка собаки. Собака делает что-нибудь, и если это то, чего хотел дрессировщик, получает лакомство. Со временем она начинает чаще делать то, за что дают лакомство, и реже то, за что не дают. У машин лакомство заменяет число, которое называют наградой, а правило, по которому это число вычисляется, называют функцией награды. Модель пробует, получает число, меняется так, чтобы в следующий раз число было больше, и снова пробует.

После входа

Дальше книга открыта для тех, кто вошёл

Войдите через INITE или заведите аккаунт. Это займёт минуту, и книга откроется прямо здесь.