Феликс Широков

(окончание, начало см. в "КвШ" №2, 1998)

Представим теперь, что у нас есть два черных ящика - В1 и В2. Один из них заведомо хороший – Known Good Unit. Пусть этим ящиком будет В1.
Англо-русский словарик в нашем примере слово за словом выверен опытным лингвистом. Сидящий в ящике оператор, который должен работать со словарем, хорошо обучен и не допускает в своей работе "ляпов". Он говорит "не фурычит" тогда и только тогда, когда заданного английского слова действительно нет в словаре. В общем, у нас "есть все основания полагать", что ящик В1 функционирует идеально.
Ящик В2 – изделие в целом аккуратное, но при его работе возможны погрешности. Введенный в него словарик может содержать "ляпы", оператор – "особа юных лет" – может ошибаться.
Наша задача – проверить "качество изделия", т. е. убедиться, что В2 функционирует достаточно хорошо и может быть задействован в каких-то практических работах. Ящик В2 можно, разумеется, подвергнуть тотальному контролю, т. е. поручить опытному лингвисту проверить словарик, а опытному психологу – переаттестовать оператора. Это дорого и требует времени.
Выйти из положения помогают два дополнительных прибора:
· G – генератор случайностей;
· С – компаратор ("сравниватель").
Генератор вырабатывает случайные английские "слова" - точнее, случайные последовательности букв английского алфавита.
Компаратор имеет два входа y1 и y2, на которые подаются русские слова, и один бинарный выход d, на котором устанавливается значение 1, если слова y1 и y2 совпадают, и значение 0, если они различны.


Далее создается тестирующий стенд, показанный на следующем рисунке.
Рис. 1
Генератор вырабатывает все новые и новые слова x, а стенд выдает все новые и новые проверки на совпадение.
Работа стенда прекращается в двух случаях:
· Когда генератор G сработал достаточное число раз. Например, 1 млн. раз.
· Когда на выходе компаратора появился 0.
Черный ящик В2 считается хорошим, если генератор выполняет заданное число тиков (тактов), а на выходе компаратора остается значение 1 ("все в порядке", O.K.).
Если же на выходе компаратора появляется 0 (беда, trouble), то ящик В2 признается плохим и отбраковывается.
Далее эта схема должна обрасти дополнительными свойствами.
Генератор, с которого "начинается" стенд, должен иметь стимулирующий бинарный выход i. Если i приводится в состояние 1, то генератор срабатывает, если же i=0, то генератор "молчит". Кроме того, необходимо наличие "счетчика тиков" (tick counter, TC). У него два входа и один выход.
Рис. 2
Вход j – бинарный. А стимулирующий вход М служит для начальной загрузки того числа тиков, которое должен выполнить ТС. Счетчик тиков работает следующим образом. Если его стимулирующий вход j=1, то ТС проверяет, сколько остается сделать тиков – целое число С. Если С > 0, то ТС уменьшает его на 1:

С > С-1

и подает на свой выход О единицу (О=1).
Схема стенда приобретает вид:

Рис. 3
Для запуска стенда в счетчик загружается М – общее число тиков, а стимулирующий вход j приводится в состояние 1. Счетчик уменьшает М на 1 и выдает на свой выход О значение 1, которое поступает на вход генератора G. Генератор срабатывает, и слово x проходит через черные ящики В1 и В2, порождая их выходы y1 и y2.
Выходы эти сравниваются компаратором, и если y1=y2, то компаратор выдает d=1, которое подается на стимулирующий вход j счетчика ТС. Весь цикл повторяется. Если при очередном повторе цикла будет сохраняться d=1, то происходит еще один повтор. Это продолжается до тех пор, пока счетчик не будет исчерпан, то есть пока С не станет равным 0.
Если генератор станет формировать английские слова случайным образом, то чаще всего из него будут появляться бессмысленные буквосочетания. Так нам не получить даже словечка jabberwolky.
А ну-ка, читатель, поработай! Найди русский перевод этого слова. Напиши нам, что ты думаешь по этому поводу.
Поэтому оба выхода y1 и y2 будут почти всегда принимать одинаковое значение "не фурычит", а компаратор – выдавать устойчивое d=1, и вся схема станет работать впустую.
Поэтому генератор G устраивают чуть хитрее. Пусть входной лексикон L блока KGU (т. е. блока B1) содержит p слов. Генератор G должен генерировать случайное целое число л (из отрезка натурального ряда) [1, 2, …, p]:
л э [1, 2, …, p]
после чего из L выбирается слово Wл с номером л.
Назовем этот целочисленный генератор случайностей Л.
И построим селектор S (выбиратель), который по номеру л выбирает из L слово Wл. Это слово и принимается за вход x ящиков B1 и B2
Генератор G
Схема тестирующего стенда (рис. 1) усложнена и приобретает вид
Рис. 4
А с учетом счетчика тиков (рис. 2) схема тестирующего стенда примет вид:
Рис. 5
Такой тестовый стенд будет достаточно хорошим. Он сможет выполнять требуемые функции, т. е. выдавать обоснованные суждения - иначе говоря, сообщать нам: "все в порядке" (d=1) или "беда" (d=0).
Здесь, как и на схеме, представленной на рис. 3, действует счетчик тиков (tick counter). В него также загружается предельное число тиков M . При каждом тике M уменьшается на 1. Пока оно не сбросится до нуля (0), счетчик тиков все время показывает число тиков C, оставшееся до конца испытаний. Если C > 0, то в очередной раз запускается генератор л. Точнее, генератор л запускается еще раз, если имеют место два события:
· Выход компаратора d равен 1 (т. е. предыдущее сравнение y1 с y2 дало результат "лады").
· Счетчик C > 0 (т. е. работа еще не окончена)
Иначе говоря, генератор л должен запускаться в очередной раз по событию (d=1) & (C > 0) – конъюнкция (одновременное поступление) событий d=1 и C > 0.
Мы надеемся, что читатель знаком с основными булевыми логическими связками: & (и), V (или), => (если…, то…) ~ (эквивалентность) и ("не", отрицание).
Мы обещали сделать нашу статью абсолютно независимой от уровня знаний читателя. Но ведь читатель знает, что обещания как раз и даются для того, чтобы усыпить его бдительность, а затем нарушить их. Поэтому мы поместим в нашем журнале "Компьютер в школе" статью о булевых связках, конечно, если мы получим достаточное количество писем, авторы которых окажутся в этом заинтересованы.
Если остановка работы произойдет при неисчерпанном счетчике (C > 0), т. е. за счет того, что выходы y1 и y2 различны, то необходимо еще одно дополнительное свойство нашей схемы – вывод наружу величин л, Wл; y1 и y2. Эти величины заносятся в протокол, свидетельствующий о негодности блока В2.
Мы надеемся, что читатель сам расширит схему, представленную на рис. 4, вводя средства регистрации протокола (при C > 0 и d=0).
Задача. Написать программу, иллюстрирующую работу тестирующего стенда. Журнал "Компьютер в школе" объявляет небольшой конкурс на лучшую программу "Тестовый стенд". Мы вводим три призовых места. Призы - электронные учебные пособия, разработанные компанией "МедиаХауз".
Фамилии победителей, адреса их школ, а также фамилии преподавателей информатики будут опубликованы. Кроме того, редакция журнала внесет исходные тексты программ (если таковые будут присланы вместе с программными моделями стендов) в свою "базу конкурсных знаний".
Авторское право на эти программы будет фиксироваться, и, кроме того, с согласия автора его программа может быть выставлена на продажу (за приемлемую цену). Автору будет начисляться гонорар – 25% от стоимости продаж.