Методы Кристобаля Хунты: различия между версиями

В подавляющем большинстве случаев это правило действительно указывало на плохо продуманные процедуры, которые, даже если и работали для совсем простых входных данных, разваливались на чуть более сложных. Но иногда такой приём оправдан (лично я советую вам таким приёмом не пользоваться; если хочется скрестить рекурсию и цикл, значит, почти наверняка вы плохо продумали структуры данных либо алгоритм).
 
==Четвёртый способ: работать наугад==
Самые распространённые программы проверки программ пытаются прогнать программу на множестве подобранных тестах, которые должны вроде бы обеспечить прохождение всех возможных путей исполнения программы. Но возможных путей слишком много, поэтому тесты подбираются так, чтобы пройти разные пути, и чаще всего случайным образом.
 
Аналогично, один из способов ручного тестирования программы — генерация случайных данных и проверка того, как программа будет себя вести на них.
множестве подобранных
тестах, которые должны вроде бы обеспечить прохождение всех возможных путей
 
На самом деле эти приёмы имеют под собой теоретическую подоплёку, которую впервые заметил Б. А. Трахтенброт в уже упоминавшемся докладе. Часто неразрешимая задача превращается в достаточно простую, если мы разрешим ошибаться с малой вероятностью (в принципе даже со сколь угодно малой).
исполнения программы.
Но возможных путей слишком много, поэтому тесты подбираются так, чтобы пройти
 
В качестве примера труднейшей (на практике) задачи, решение которой значительно облегчается переходом к случайному алгоритму, рассмотрим следующую, которую автор вместе с группой товарищей по общежитию исследовал ещё в студенческие годы.
разные пути, и чаще всего
случайным образом.
 
<b>Проблема</b>.
Аналогично, один из способов ручного тестирования программы &mdash; генерация
 
В стратегических шахматах два шахматиста общаются через судью. Судья единственный, кто знает полное положение на доске. Каждый игрок знает лишь соотношение сил и положение своих фигур.
случайных данных и проверка
того, как программа будет себя вести на них.
 
Судья сообщает игрокам минимально необходимую информацию о ходе. Он произносит примерно такую последовательность фраз в ответ на попытки одного из игроков сделать ход (черные это были или белые, догадайтесь сами):<br> &mdash; Ход невозможен.<br> &mdash; Ход невозможен.<br> &mdash; Ход невозможен.<br> &mdash; Ход сделан. Взята ладья на поле e1. Пешка превратилась в ферзя. Шах.
На самом деле эти приёмы имеют под собой теоретическую подоплёку, которую впервые
 
Первый возможный ход считается сделанным. Причина, по которой невозможен ход (открывается шах, перекрыта линия, король пошёл под удар и т. п.) не объясняется. Стратегические шахматы порождают ряд интереснейших задач, пару из которых (одна из них более простая, вторая &mdash; исключительно сложная) приведём сейчас:
заметил Б. А. Трахтенброт
в уже упоминавшемся докладе.
Часто неразрешимая задача превращается в достаточно простую, если мы разрешим
ошибаться с малой вероятностью (в принципе даже со сколь угодно малой).
 
<b> Король-всезнайка против ферзя.</b>
В качестве примера труднейшей (на практике) задачи, решение которой значительно
 
Король знает всё, а король и ферзь играют против него по правилам стратегических шахмат. Дать мат.
облегчается переходом к случайному
алгоритму, рассмотрим следующую, которую автор вместе с группой товарищей по
 
<b> Король-всезнайка против ладьи.</b> Король знает все, а король и ладья играют против него по правилам стратегических шахмат. Дать мат.
общежитию исследовал ещё
в студенческие годы.
 
Во второй задаче достаточно просто дать алгоритм и составить программу, которая будет случайно матовать короля таким образом, что с вероятностью 1 в конце концов его заматует (но теоретически король, если он не только всезнайка, но ещё и прорицатель, знающий будущее, может бесконечно избегать мата). Есть и алгоритм, матующий с гарантией, но он намного сложнее и в разработке, и в реализации.
 
Желающие могут попробовать поломать голову над задачей и присылать решения автору через редакцию журнала.
<b>Проблема</b>.
 
Перечисленные методы лишь немногие из тех, которые мог бы предложить его преподобие магистр магии Кристобаль Хозевич Хунта, но автор, конечно же, не может равняться со столь почтенным персонажем, и умолкает.
В стратегических шахматах два шахматиста общаются через судью. Судья
 
==***==
единственный, кто знает
И напоследок замечание о книге 2, из которой взят эпиграф. Перефразируя античную пословицу, тот, кто её не читал, верблюд. Вообще, фантастика времени расцвета содержит намного больше идей и в большинстве намного интереснее, чем нынешняя штампованная фэнтези (в этом с удивлением убеждались ученики автора, которым он настоятельно советовал почитать «старьё» типа Стругацких, Шекли, Азимова; ещё раз напоминаем, что классика не стареет, и в этом её отличие от поделок).
полное положение на доске. Каждый игрок знает лишь соотношение сил и положение
 
# Э. Йордан. Путь камикадзе. Как разработчику программного обеспечения выжить в безнадежном проекте.ЛОРИ, М.: 2003
своих фигур.
# Аркадий Стругацкий, Борис Стругацкий. Понедельник начинается в субботу. М.: Детгиз, 1964 (имеется ряд переизданий, начиная с 80-х гг.).
 
Судья сообщает игрокам минимально необходимую информацию о ходе. Он произносит
 
примерно такую последовательность
фраз в ответ на попытки одного из игроков сделать ход (черные это были или белые,
 
догадайтесь сами):<br>
&mdash; Ход невозможен.<br>
&mdash; Ход невозможен.<br>
&mdash; Ход невозможен.<br>
&mdash; Ход сделан. Взята ладья на поле e1. Пешка превратилась в ферзя. Шах.
 
Первый возможный ход считается сделанным. Причина, по которой невозможен ход
 
(открывается шах, перекрыта
линия, король пошёл под удар и т. п.) не объясняется.
Стратегические шахматы порождают ряд интереснейших задач, пару из которых (одна из
 
них более простая,
вторая &mdash; исключительно сложная) приведём сейчас:
 
<b> Король-всезнайка против ферзя.</b>
 
Король знает всё, а король и ферзь играют против него по правилам стратегических
 
шахмат.
Дать мат.
 
 
<b> Король-всезнайка против ладьи.</b>
 
Король знает все, а король и ладья играют против него по правилам стратегических
 
шахмат. Дать мат.
 
 
Во второй задаче достаточно просто дать алгоритм и составить программу, которая
 
будет случайно матовать
короля таким образом, что с вероятностью 1 в конце концов его заматует (но
 
теоретически король, если он не только
всезнайка, но ещё и прорицатель, знающий будущее, может бесконечно избегать мата).
 
Есть и алгоритм,
матующий с гарантией, но он намного сложнее и в разработке, и в реализации.
 
Желающие могут попробовать поломать голову над задачей и присылать решения автору
 
через редакцию журнала.
 
Перечисленные методы лишь немногие из тех, которые мог бы предложить его
 
преподобие
магистр магии Кристобаль Хозевич Хунта, но автор, конечно же, не может равняться
 
со столь
почтенным персонажем, и умолкает.
 
 
 
И напоследок замечание о книге 2, из которой взят эпиграф. Перефразируя античную
 
пословицу, тот,
кто её не читал, верблюд. Вообще, фантастика времени расцвета содержит намного
 
больше идей
и в большинстве намного интереснее, чем нынешняя штампованная фэнтези (в этом с
 
удивлением убеждались
ученики автора, которым он настоятельно советовал почитать «старьё» типа
 
Стругацких, Шекли, Азимова;
ещё раз напоминаем, что классика не стареет, и в этом её отличие от поделок).
 
# Э. Йордан. Путь камикадзе. Как разработчику программного обеспечения выжить в
 
безнадежном проекте.ЛОРИ, М.: 2003
# Аркадий Стругацкий, Борис Стругацкий. Понедельник начинается в субботу.
М.: Детгиз, 1964 (имеется ряд переизданий, начиная с 80-х гг.).
# С. Уэллин. Как не нужно программировать на С++ Питер, 2004
Анонимный участник