Охотник на жуков. Статья о тестировании программ, написанная 15 лет назад

15 лет назад я работал в Тель-Авиве и занимался тестированием программ. И только что случайно обнаружил статью, написанную в то время. Для кого писал — не помню. Скорее всего, для «Компьютерры». Не все там можно было написать, как на самом деле. Но почти все написал. С тех пор появились другие способы проверки софта на качество, и руками сейчас тестируют очень мало. Что, к сожалению, сказалось на качестве ПО не лучшим образом. Вот эта статья.

Когда мои знакомые спрашивают меня, кем я работаю, мне часто приходится немного врать. Дело в том, что большинство знакомых – люди совершенно компьютерами неиспорченные, и понять некоторые нюансы моей профессии им очень трудно. Поэтому приходится называть себя программистом. Кто такой программист – в Израиле знают все. Быть программистом здесь, это как в России бухгалтером на большой фирме. Все хотят быть программистами, потому что они а) зарабатывают кучу денег, б) нравятся девушкам, в) получают от фирмы машины почти бесплатно и г) постоянно ездят заграницу по приятным и небольшим делам.

bug_hunting

На самом деле я не программист, а тестировщик. В переводе на язык оригинала это называется Quality Assurance или кратко – QA. С программистами мы скорее антиподы. Он хочет написать свой кусок программы, сесть в казенную машину и поехать к девушкам тратить деньги. А я должен сделать все, чтобы найти в программе побольше ошибок и заставить ее автора сидеть до позднего вечера за своим компьютером, вместо пустой траты денег на развлечения девушек.

Еще полгода назад я отвечал только правду.

  • Кем ты работаешь?
  • Тестировщиком.
  • Это что такое?
  • Ну, программы тестирую.
  • Какие программы?
  • Разные. Компьютерные.
  • А как ты их тестируешь?
  • Сижу, нажимаю кнопочки и жду, пока она заглючит.
  • И что, ЗА ЭТО еще и деньги платят???

Что интересно – платят. Вполне сравнимые с теми, что получает программист. Давайте вместе попробуем разобраться – за что.

Давным-давно,  лет 15 назад, тестировщиков, как отдельной специальности, практически не было. Новые версии софта выходили нечасто, количество новых игр в месяц можно было пересчитать по пальцам. Программисты спокойненько, с расстановкой писали код, а потом так же спокойно проверяли плод своих рук на способность работать. Функций у программ было относительно немного, так что проверить их все было делом не очень сложным. Игрушки проверяли еще проще – раздавали бета-версию по друзьям и знакомым. CD-Recorder’ы тогда  были мало распространены, Интернет – тоже, так что опасности, что в игрушку, отданную утром на тестирование приятелю из Алабамы, уже к вечеру будет лечить от вирусов Евгений Касперский, практически не было. Если не верите – посмотрите огромные списки имен в титрах игрушек того времени, там немало фамилий, совпадающих с авторами и продюсерами игры.

Теперь скажите мне – чем новая версия программы отличается от старой? Стабильностью работы? К сожалению, не всегда. А вот новых функций, полезность которых вызывает множество сомнений, напихают завсегда и с удовольствием. Версии через три узнать оригинальную – маленькую и быструю программу – уже невозможно. Мы видим что-то вроде танка с элементами бетономешалки и массажной щетки (массирует только подмышки и большие пальцы ног). Вы и сами лучше меня знаете особенности этого превращения, возьмите хотя бы CorelDraw 1 и 10.

Но тело любой программы – это единый организм. Изменения в одной из сотен тысяч строк неизбежно повлияют на десятки других. Предсказать влияние можно с вероятностью, скажем, в 50 процентов. А как же остальные 50?

Циклы выпуска новых версий тем временем неуклонно сокращаются. Одна версия в три года, в два с половиной, в два, в год, в полгода. Программисту некогда все это проверять, ему надо добавлять новые навороты. Нанять еще десять программистов, чтобы они только искали ошибки? Но это удовольствие из серии гонок на «феррари» по трассам  города Ухрюпинска, получается дороговато и не эстетично. Потому что для Ухрюпинска надо «уазик» или, на крайний случай, «Ниву».

Именно такими «уазиками» и стали тестировщики. Платили им изначально гораздо меньше, чем программистам. Неудивительно, что любой тестировщик воспринимал свою работу, как что-то проходное, и всеми силами старался переквалифицироваться в сами-понимаете-кого. С ростом компьютерной индустрии, начавшемся несколько лет назад, потребности в тестерах многократно увеличились, а вот желающих работать по этой специальности было немного. Как и при любом дефиците, стали расти предлагаемые зарплаты. Сегодня тестировщик получает примерно 80% от зарплаты программиста, имеющего аналогичный опыт работы. Не думаю, что этот процент еще существенно поднимется. Все же программирование – работа требующая более серьезного образования, а это должно оплачиваться соответствующе.

Тестировщиком же может работать любой человек, который:

  • Имеет опыт работы за компьютером не менее трех лет;
  • Использовал несколько операционных систем (пусть даже одной фирмы J);
  • Понимает – что есть баг, а что фича в программе.
  • Знает английский язык.
  • Умеет запоминать, а потом описывать – как именно воспроизвести полученную ошибку.

Получается так, что простым тестировщиком может работать каждый второй пользователь? Совершенно верно. Правда, речь идет только о т.н. ручной проверке.

Для того, чтобы заниматься автоматическим тестированием, необходимо знать язык программирования, вроде C++.

Это относительно новая область тестирования программ, так что о ней подробнее.

Если речь идет о тестировании графического редактора или почтового клиента, то здесь должен работать живой человек. Но вот представьте, что надо проверить сервер, на который одновременно использует двадцать тысяч человек. Где найти столько людей? Даже Microsoft или IBM эта задачка доставит массу неприятностей, а что делать, если на фирме работает всего человек 100? На помощь приходят программы вроде WinRunner или LoadRunner (есть и другие, но эти самые популярные). С помощью скриптов, очень похожих на C++ , тестировщик описывает поведение некоего виртуального юзера, потом клонирует его несколько десятков тысяч раз, и – о чудо! – нам не нужно такого безумного количества живых тестировщиков. Такая работа уже ничем не уступает по сложности программированию, и порой превосходит его.

Я – тестировщик простой. Вероятно, со временем мне удастся пойти на курсы, оплачиваемые фирмой, чтобы научиться и автоматическому тестированию, но пока об этом немного рано говорить. Посмотрите на моем примере – как происходит процедура тестирования программ.

Утром, придя на работу, прочитав почту, новости, свежий рассказ Экслера, ответив на почту, выпив стакан молока… это к тестированию, как вы понимаете не относится, но создает антураж… итак, выпив стакан молока, я начинаю вспоминать – что не доделано вчера. Как правило, на утро я оставляю совсем немного вещей, чтобы как-то перебиться в ожидании новых указаний руководства. Указания начинают поступать около 11 утра. До тех пор не вредно открыть программу PR-Tracker.

Эта программа (или ее аналоги) является очень важным элементом тестирования. Хорошо, если на фирме работает два программиста и один тестировщик, которые наизусть помнят все баги, и могут вести простую базу данных в Access. Но если программистов 100, а тестировщиков 30?  Нужен специальный инструмент, который позволит очень быстро найти старый баг по нескольким признакам, максимально подробно занести в базу данных новый (наготове множество шаблонов, которые значительно ускоряют работу тестировщика и программиста), распределить добычу охотников за багами по кухне, чтобы каждому повару досталось именно то, рецепт приготовления чего он знает лучше.

Итак, PR-Tracker открыт. Я вижу, что из 5 багов, найденных вчера, три проверены главным программистом и признаны таковыми; один сразу же закрыт с недвусмысленным намеком в мой адрес, что неплохо бы и описание программы читать изредка; еще один оставлен в подвешенном состоянии, потому что программист должен посоветоваться с коллегами, и принять окончательное решение – баг это или фича.

Теперь можно приступать непосредственно к тестированию. Фирма InterWise, где я работаю, выпускает полный комплекс программ для дистанционного образования. Разумеется, весь комплекс один человек тестировать не может, так что есть несколько отделов, каждый из которых занимается чем-то своим, но, конечно, идя по прямой дороге, старается не пропустить бриллиантов, которые лежат на обочине. Мой отдел занимается тестированием Кампуса. Это место, куда стекаются все виртуальные преподаватели и студенты, откуда посылаются команды серверам и прочая, и прочая.

Чисто теоретически, есть подробные руководства – как и что тестировать. Но следовать им а) довольно скучно и б) очень долго. Пользователь именно тем и отличается, что никогда не читает руководств. Разумеется, что если все делать по правилам, то и Windows глючить не будет, но, пардон, мы не за то деньги платим немалые, чтобы еще и правила соблюдать. Я заплатил деньги, и продавец товара должен сделать так, чтобы любое мое действие, пусть даже откровенно идиотское, вроде стократного нажимания кнопочки Snapshot, как минимум не наносило вреда основной работе.

Поэтому, наверное, оптимальный способ тестирования – это вжиться  в роль чайника, и начать действовать соответствующе. Самый первый серьезный баг, который был найден мною в InterWise, был получен именно таким способом.

Я запустил на одном компьютере сразу два виртуальных сервера. Вообще-то, нормальные люди так не делают. Они для каждого сервера имеют отдельную машину. Но я – чайник, у которого до конца рабочего дня осталось двадцать минут, и заниматься конфигурированием второй машины просто в лом. Сделаем все на одной, авось, да заработает. Ой, и правда заработало! Еще один сервер добавляем… Опять работает! Красота! Теперь быстренько приделываем к каждому виртуальному серверу по виртуальному же уроку, и идем домой пить пиво и смотреть футбол.

А в это время на разных концах земного шара начинаются уроки. Три класса – японский, немецкий и американский – внимают учителю. Все отлично работает, пока вдруг американцу не приходит в голову, что народу собралось мало, и неплохо бы всех отпустить и пойти играть в бейсбол. Его студенты с радостью соглашаются, и отсоединяются от сервера. Американец решает, что оставлять урок в онлайне совершенно необязательно, заходит на Кампус и удаляет СВОЙ урок.

Тут же японские и немецкие студенты получают у себя на экране сообщение, что до конца урока осталось 30 секунд, и по прошествии 30 секунд уроки действительно кончаются. Студенты немного удивлены, что все закончилось так быстро, но раз так – можно заняться своими делами. Попробовать соединиться еще раз в голову приходит одному из трехсот. А тем временем японец и немец чешут затылки, не понимая – чего это вдруг все студенты резко отключились. Немец начинает педантично обзванивать всех участников урока, а японец, осознав свою несостоятельность, как учителя, делает харакири.

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

Я не знаю – как закончить эту статью. Число ошибок в любой современной программе стремится к бесконечности, и даже самый проверенный софт имеет их совершенно дикое количество. Надежность программы свидетельствует только о том, что ее авторам удалось предугадать большинство нелепых ситуаций, которые создает пользователь. Но много ли их, надежных программ? Увы, увы. Нет худа без добра, и может быть кризис в компьютерной отрасли, который уже полгода не дает спать ее работникам, немного замедлит бешеную гонку новых версий программ, дав нам, тестировщикам, шанс сделать их более приятными для использования. А если не удастся, то я не завидую пользователям. По статистике, в целях экономии в первую очередь увольняют не программистов, а персонал службы поддержки…

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

Следующий постОбзор умных часов Samsung Gear S3 Classic: Лучше больше, да?