
Информатика: создаём своего цифрового помощника Урок 26 из 26
Контрольная точка: алгоритмы помощника на бумаге
Соберём бумажную версию 0.3 помощника и проверим её на обычных, граничных и неожиданных данных.
Где мы на карте
Это третий блок одного проекта. Мы пользуемся данными версии 0.2, но пока описываем действия на бумаге: так можно обнаружить ошибку до написания Python.
Ситуация и вопрос
Друг получил только ваш файл ALGORITHM-ru.md и три задачи версии 0.2. Он хочет понять, когда придёт напоминание и сколько задач завершено. Если ему приходится спрашивать вас о значении пустого срока, алгоритм ещё не готов к переводу на Python.
Новые слова без пропусков
Спецификация — записанное обещание о входах, выходах и ошибках. Тестовый случай — конкретный вход с ожидаемым ответом. Регрессия — возвращение старой ошибки после изменения. Эталон — заранее записанный ожидаемый результат, а не ответ, придуманный после выполнения. Приёмка — решение о готовности по наблюдаемым критериям. Версия 0.3 здесь означает проверенные бумажные алгоритмы: программа появится в следующем блоке. Файл tasks.json версии 0.2 остаётся источником трёх вымышленных записей; сроки в этом блоке заданы отдельными тестовыми карточками, а не незаметно добавлены в старый формат.
Опорный сигнал
договор → трасса → границы → инвариант → чужая проверка → версия 0.3
Разбираем шаг за шагом
Проведите t-01 через все правила. Карточка теста говорит done=false, days_to_due=2; функция возвращает REMIND. Для t-02 из исходного файла done=true, даже если карточка задаёт 0 дней, ответ DONE. Для t-03 без карточки срока ответ NO_DATE. Подсчёт исходного списка даёт ровно 1 завершённую задачу. Затем добавьте в тестовый список четвёртую вымышленную запись с повторным id=t-02: проверка уникальности должна остановить её до напоминания. Не меняйте исходные три записи ради удобного ожидаемого ответа.
Проверка руками
Проведите маленькую защиту без автора. Партнёр открывает cases.json, закрывает столбец expected и заполняет его по вашим правилам. Затем сравнивает с эталоном и подчёркивает первое расхождение, а не просто число правильных ответов. Попросите его придумать ещё один случай, которого нет в файле: например, выполненная задача с просроченным сроком. Если ответ нельзя вывести из договора, вернитесь к уроку 24 и дополните порядок проверок. Сохраните найденное расхождение и исправление в журнале проекта.
Предскажите и проверьте
Перед чтением таблицы ответов запишите результаты для дней −1, 0, 1, 2, 3 при done=false, затем для тех же дней при done=true. Должны получиться OVERDUE, REMIND, REMIND, REMIND, NOT_YET и пять DONE. Если срок отсутствует, NO_DATE; если задача уже выполнена и срок отсутствует, по выбранному контракту DONE.
Поймайте ошибку
«Три исходные задачи открылись, значит 0.3 готова». Открытие проверяет формат 0.2, но не ветви, остановку цикла, повторные идентификаторы или понимание другого человека. Покажите не один удачный экран, а набор контрпримеров и исправлений.
Перенос в новую ситуацию
Пусть школьный кружок заменил дни на часы и напоминает при 48 часах включительно. Какие части схемы переиспользуются, а какие требования надо переписать? Объясните, почему 2 календарных дня не всегда равны ровно 48 часам при разном времени суток.
Изменение проекта
Сдайте ALGORITHM-ru.md, таблицу трасс, cases.json с вымышленными входами и журнал одного исправления. В README версии 0.3 укажите, что алгоритм на бумаге ещё не запускается и не отправляет уведомления. Другой ученик должен по этим материалам получить те же ожидаемые ответы без ваших подсказок.
Задание и доказательство
Проверьте 10 пунктов: (1) цель и вход; (2) выход и ошибки; (3) состояние до/после; (4) порядок шагов; (5) случаи −1/0/1/2/3; (6) отсутствие срока; (7) завершённая задача; (8) пустой список и остановка; (9) повторный id и инвариант; (10) независимый перенос на 48 часов. Для зачёта нужно 8/10 сейчас, включая пункты 9 и 10, и 7/10 на новом примере через семь дней. Покажите исправление каждого проваленного пункта, затем повторите равносильную задачу.
Возврат через 1, 7 и 30 дней
Завтра восстановите пять ответов функции. Через семь дней выполните новую приёмку без страницы. Через месяц сопоставьте обещания 0.3 с Python-версией 1.0 и отметьте расхождения до публикации.
Если вы нашли ошибку или опечатку в тексте статьи, то сообщите нам об этом
Комментарии (0)
Войдите, чтобы оставить комментарий →
Пока нет комментариев. Будьте первым.