– Здесь школа тестировщиков? – спросил паренёк.
– Да, проходите, – ответил Андрей. – Садитесь.
Я вдруг почувствовал сильное волнение. Какой из меня был преподаватель, в конце концов? Мало того, что я не знал толком ничего по предмету, так я ещё и никогда не выступал перед аудиторией. Я не умел владеть чужим вниманием, красиво говорить, внятно излагать. Сейчас передо мной был всего один ученик, но я уже чувствовал, что я краснею, и у меня трясутся руки.
Я подошёл к окну, чтобы успокоиться. Снаружи двое рабочих в оранжевых жилетах закидывали в мусоровоз чёрные пакеты из огромного контейнера. Я слышал, как позади меня аудитория постепенно заполнялась, кто-то здоровался, но я всё ещё стоял спиной к ним.
Потом, наконец, когда мусоровоз тронулся и поехал, я набрался смелости и повернулся к классу.
– Кажется, все, – сказал Андрей. – Вот сейчас список пустим, проверим.
Он подал высокому седому человеку, сидящему на передней парте, листочек бумаги.
– Расписывайтесь, пожалуйста, напротив фамилии. А мы начнём…
Андрей с некоторым сомнением посмотрел на меня. Видимо, моё волнение было очевидно.
У меня кружилась голова. Лица сидящих передо мной учеников я видел нечётко, словно снял очки. Но нужно было начинать.
– Кхм, – сказал я. – Здравствуйте. Сегодня у нас будет занятие теоретическое. Чтобы ввести вас в курс дела. Да и класс компьютерный пока в стадии зачатия… То есть, формирования.
Я на всякий случай вцепился рукой в край стола и уставился взглядом в пол. Это помогло.
– Итак. Что такое вообще тестирование и для чего оно нужно? В наше время программное обеспечение распространилось практически везде. Программы работают не только в персональных компьютерах и серверах, но и во множестве других устройств. Попробуйте представить, сколько программ нас окружает. Понятно, что программы есть в телефонах, планшетах и электронных книгах. Но, кроме того, ещё в микроволновках, холодильниках, автомобилях, заводском оборудовании, кардиостимуляторах, турникетах, спутниках, электронных часах, автоматах по продаже еды, домофонах… Да сложно даже перечислить. И все эти программы надо тестировать. Более того, тестировать надо не только программы. Тестируют оборудование. Тестируют людей, в конце концов. Вот, к примеру, есть тест Роршаха. Он проверяет человека на соответствие определённым критериям, разве не так?
Я поднял глаза. Меня слушали. Это было удивительно. Я провёл взглядом по лицам. Все были серьёзны, внимательны. А на задней парте возле окна сидел монстр.
Сбросив секундное оцепенение, я понял, что это просто человек. Видимо, чем-то больной. Но выглядел он настолько уродливо и непривычно, что я не мог на него смотреть. Даже отведя глаза в сторону, я не мог избавиться от этого образа. Глаза навыкате, узкий выпуклый лоб, длинные узкие ноздри на плоском кривом носу, губы, которые не смыкались до конца и обнажали длинные корявые зубы.
– Так вот, – сказал я уже менее уверенно. – Программ очень много. Казалось бы, тестирование – это занятие вторичное. Написал программист код, и он заработает. Машина поедет, банкомат выдаст деньги. Но цена ошибки часто слишком высока.
Я вновь наткнулся взглядом на уродливого слушателя. Я понимал, что это всего-навсего внешность. И он, скорее всего, такой же человек, как и все остальные. Но от него исходило ощущение полной нереальности. Такого человека не могло быть в нашем мире. Я бы скорее поверил, что он пришёл из страшной сказки прямо сквозь стену или переместился из параллельного пространства при помощи специального батута.
– История знает много случаев, когда компании теряли огромные средства из-за недостаточного тестирования программ…
Я хотел привести примеры с датами и деталями, но распечатки под рукой не было, а память подводила.
– К примеру, были случаи, – продолжил я, – когда из-за простой ошибки на несколько месяцев останавливался конвейер завода. Терялись дорогостоящие спутники, потому что не могли навестись на передающую станцию. Падали самолёты. Целые штаты оставались без света. Но это громкие события, о которых становится известно всем. А ведь есть много фирм, которые пишут программное обеспечение и разоряются только потому, что их программы не устраивают пользователей своим качеством… Надеюсь, я смог вас убедить, что тестирование необходимо. Но что же это такое? Есть много разных определений. Мне кажется наиболее правильным следующее. Тестирование – это любая деятельность, направленная на проверку соответствия продукта предъявляемым к нему требованиям. Таким образом…
Вверх взлетела рука. Седой, хотя и не старый, мужчина прямо передо мной подал неуверенный голос:
– Можно вопрос?
– Да, конечно, – сказал я. Я немного напрягся, ожидая вопроса, на который не смогу ответить.
– Кто выдаёт требования?
– Чаще всего – заказчик продукта, – ответил я. – Или их вырабатывает совместно с заказчиком проектная команда. Иногда требования бывают неявные, например, мало в каких документах обычно оговаривается, что программа не должна завершать работу с ошибкой. Но если такая ошибка возникает, все соглашаются, что это критический дефект.
На лице автора вопроса я прочёл неудовлетворённость.
– Вы в начале упомянули, что тестировать можно и человека. Кто в таком случае заказчик?
– Хороший вопрос, – сказал я. – Ну, вы понимаете, что я это достаточно условно отнёс к тестированию в нашем понимании. Хотя в данном случае тот, кто проводит тест, тоже имеет в виду некоторые требования. Те, которые описаны в справочниках по психическим заболеваниям.
– Я спросил, потому что мне кажется… – заволновался мой собеседник. – Мне кажется, это неправильно.
– Что неправильно? – не понял я.
– Ну, тесты Роршаха или как они там называются… Я тоже пробовал проходить. Мне кажется, что в этих пятнах может что-то необычное увидеть не только психически больной человек, но и вполне нормальный, у которого просто фантазия богатая…
– Возможно, – сказал я. – Я не специалист. Но это не относится к делу. Мы же не утверждаем, что требования – это истина в последней инстанции. Просто тестируем на соответствие им.
– И с восприятием реальности то же самое, – не унимался седой, – я вот, скажем, вижу одно, а другой человек другое… И кто может сказать, кто видит правильно? Может, тот, кто принял какие-то наркотики, видит правильно, а я, нормальный и трезвый человек – искажённую реальность…
– Простите, – перебил я его. – Мне кажется, это имеет очень отдалённое отношение к теме нашего занятия…
– Да, конечно, – седой вдруг затих, склонил голову и закрыл лицо руками.
После некоторой паузы я продолжил.
– Тестирование нужно прежде всего потому, что мы хотим снизить предполагаемые потери от последующего возникновения ошибки. Чем раньше мы находим ошибку, тем дешевле нам обходится её исправление…
Я снова умолк, наткнувшись взглядом на мутанта. Я постарался на него не смотреть и, скосив глаза влево, увидел, что Андрей сидит на стуле рядом и скучает. Он поймал мой взгляд.
– Действительно, – сказал он. – Ведь если ошибку исправить раньше, чем тогда, когда, ну, мы программу выпустим, то это одно, а если потом, то совсем уже плохо… Вот.
Я решил вернуть бразды правления в свои руки.
– Вот некоторые цифры, чтобы убедить вас окончательно в важности тестирования. По статистике, 55 процентов однострочных исправлений ошибки в коде приводит к новой ошибке. Вдумайтесь – если мы что-то чиним, очень простое, то в большинстве случаев тут же что-то ломаем. А если исправление сложное и требует правки больше чем одной строки, то этот процент вырастает…
Я говорил, говорил, отвечал на редкие вопросы, и даже не заметил, как время занятия подошло к концу. Я объявил, что на сегодня это всё, а на следующем занятии мы, возможно, уже приступим к практике. Люди вставали, покидали класс. Я не заметил, куда исчез монстр.
– Здорово, – сказал Андрей. Он казался немного грустным. – Ты классно рассказывал. Я так никогда не смогу.
– Да ладно, – сказал я. – Честно говоря, сам не ожидал, что так получится. У меня же опыта-то нет.
– Со стороны и не скажешь. Прямо профессиональный учитель…
Мы выходили из класса. Я запер дверь и спросил:
– Ты видел этого мутанта?
– Кого?
– Ну, уродливый человек на задней парте.
Селюков наморщил лоб: