Главная страница
Навигация по странице:

  • Пример

  • Вторая вещь

  • Полезность рассмотрения тест-кейсов заключается в том, что во многих случаях продюсеры и программисты дают новые идеи для тестирования и/или корректируют допущенные не

  • Кстати, после рассмотрения тест-кейсов пошлите е-мейл всем

  • Исполнение тестирования и ремонт багов

  • Релиз Release (англ.) — "выпуск, освобождение". Пример

  • Давайте представим, что ЗАО "Тест-шоп", предназначенное, кстати, для продажи книг, только начинает работу. Цикл разработки ПО 107 У

  • Архитектура www.testshop.rs 1 . Веб-сервер Apache

  • База данных MySQL

  • Роман Савин - тест dot com. Пособие по жестокому обращениюсбагам и в интернетстартапах com роман Савин


    Скачать 5.26 Mb.
    НазваниеПособие по жестокому обращениюсбагам и в интернетстартапах com роман Савин
    АнкорРоман Савин - тест dot com.pdf
    Дата26.04.2017
    Размер5.26 Mb.
    Формат файлаpdf
    Имя файлаРоман Савин - тест dot com.pdf
    ТипПособие
    #5534
    страница9 из 24
    1   ...   5   6   7   8   9   10   11   12   ...   24

    Пример
    Допустим, что на интранете у нас есть два внутренних тестировочных
    веб-сайта, недоступных для пользователей:
    www.everest.testshop.rs и
    www.elbrus.testshop.rs
    Допустим также, что сайт
    www.everest.testshop.rs(по-простомуназываемый "Эверест") является
    версией 1.0 и содержит функциональность А версии 1.0, а
    www.elbrus.testshop.rs(по-простомуназываемый "Эльбрус") является
    версией 2.0 и содержит функциональность А версии 2.0.

    100
    Тестирование Дот Ком. Часть 1
    Так вот в окне веб-браузера функциональность А может выглядеть аб-
    солютно одинаково и на Эвересте, и на Эльбрусе, но ее бэк-энд будет
    существенно различаться на этих двух сайтах.
    Допустим, тестировщик собирается проверить функциональность А
    версии 2.0, но ошибочно использует для тестирования Эверест (с вер-
    сией 1.0), вследствие чего он не только впустую тратит время, но
    и рискует дать добро на релиз непротестированного кода функцио-
    нальности А версии 2.0.
    Подобные ошибки возникают, как правило, по небрежности или незнанию тестировщика и из-за "нелогичных" названий внутрен- них веб-сайтов.
    Пути предотвращения ситуации, когда тестировщик тестирует не ту версию ПО:
    1. Узнайте у релиз-инженера, как определить версию кода, и используйте сие знание перед началом исполнения тести- рования;
    2. Посоветуйте, чтобы внутренние веб-сайты имели логич- ные имена. Например, версия кода, переданного пользова- телю, всегда должна быть на внутреннем сайте по адресу
    www.old.testshop.rs, а версия для следующего релиза — на
    www.main.testshop.rs;
    3. Попросите релиз-инженеров, чтобы те создали на интра- нете динамически обновляемую страничку с информацией о
    • версии и
    • подверсии, т.е. билде (об этом позже), каждого внутреннего тестировочного веб-сайта.
    В завершение кодирования поговорим еще о паре вещей.
    Хотя и спеки, а иногда даже и сами идеи для спеков — ребятки не без греха, большинство багов зачинается именно при написа- нии кода. При кодировании появляется присущий только этой стадии и одновременно самый простой в нахождении вид бага —
    синтаксический баг (syntax bug).
    Прелесть синтаксических багов заключается в том, что они, явля- ясь ошибками в языке программирования, находятся компай- лером (например, в случае с C++) автоматически. Последний выдает на экран сообщение об ошибке и принципиально не соз-

    Цикл разработки ПО
    101 дает исполняемый файл, пока проблема не будет зафиксирована
    (в скриптовых языках, таких, как Python, исполняемым файлом является сам файл с кодом и синтаксические баги находит интер- претатор языка).
    Пример
    Вот первая программка любого изучающего C++:
    1. #include 2.
    3. voidmain()
    4. {
    5. cout<< "Hello, World!<< endl;
    6. }
    Текст этой программки находится в файле syntax_error.cpp. По- пробуем ее скомпилировать:

    > C++ syntax error, cpp
    syntax_error.cpp:5: unterminated string or character constant
    syntaxerror.cpp: 5: possible real start of unterminated constant
    Последние две строчки — это текст об ошибке, выданный ком- пайлером из-за того, что мы не закрыли кавычки в строке 5 после
    World! Никакого исполняемого файла создано не было. Если мы исправим эту ошибку, то файл без проблем скомпилируется.
    Тестировщики обязаны устройству Вселенной за то, что есть ло-
    гические баги (logical bugs). Эти баги, как следует из их назва- ния, — это ошибки в логике кода, т.е. код компилируется без син- таксических ошибок, но фактический результат исполнения этого кода не соответствует ожидаемому результату.
    Пример
    Спецификация:
    "7.2. Пользователь должен ввести два целых числа от 1 до 12,
    после чего программа выведет на экран их среднее арифмети-
    ческое".
    Код:
    1. #include 2.
    3. voidmain()
    4. {
    5. int first number = 0;
    6. int secondjnumber = 0;
    7. float average = 0.0;

    102
    Тестирование Дот Ком. Часть 1
    8.
    9. //get first number
    10. cout« "Enter first number:";
    11. cin » first_n umber;
    12.
    13.
    14. //get second number
    15. cout« "Enter second number:";
    16. cin » second number; 17.
    18. //calculate average
    19. average = firstjiumber+second_number/2.0; 20.
    21. //output result
    22. cout« "Average = "« average « endl; 23.
    24. }
    Тестирование:
    Enter first number: 9 Enter
    second number: 2 Average
    =10
    Согласно спецификации результатом исполнения программы должно быть среднее арифметическое двух чисел, т.е. в нашем случае 5,5 (ожидаемый результат). Фактический же результат оказался равен 10.
    5,5 не равно 10, соответственно у нас есть логический баг.
    Проблема, кстати, в строке 19, которая должна была звучать так
    (были пропущены скобки):
    19. average = (first_number+second_number)/2.0.
    Кстати, в приведенном пункте спека есть баг, так как непонятно, какое
    максимально допустимое целое число: 11 или 12? Программист, увидев
    этот баг, должен был сделать уточнение у продюсера и обязать того
    исправить спек. Если максимальное число = 12, то точная формулировка
    должна быть следующей: "7.2. Пользователь должен ввести два целых
    числа от 1 до 12 включительно, после чего программа выведет на экран
    их среднее арифметическое".
    Кстати, программист заложил в коде еще один логический баг, так как
    согласно спеку код должен принять только действительный ввод, кото-
    рым являются целые числа 1 — 1 1 (или 1 — 12).
    Кстати, спек имеет еще один баг: не сказано, как должна отреагировать
    программа, если пользователь введет недействительный ввод, например
    0, 13, "А", "#" или пустое место...

    Цикл разработки ПО
    103
    Две последние вещи в разговоре о стадии кодирования.
    Первая вещь
    Как мы помним, на этой стадии тестировщики пишут тест-кейсы.
    Так вот тест-комплекты необходимо, как и спеки, хранить в CVS
    и публиковать линки к ним на интранете для предоставления возможности свободного ознакомления с ними любому заинтере- сованному лицу внутри компании. Главные преимущества хране- ния тест-кейсов в CVS:
    • отсутствие возможности случайного удаления файла;
    • присутствие возможности возвратиться к предыдущим вер- сиям файла;
    • файл хранится на сервере, и каждый, кому нужно (и кто имеет право), может взять его для исполнения тестирова- ния, изменения и удаления существующих или включения дополнительных тест-кейсов.
    Вторая вещь
    Хорошая идея для компании в целом и для интересов самого тестировщика — это провести рассмотрение тест-кейсов (Test-
    case Review), когда за несколько дней до начала тестирования со- бираются
    • продюсер, написавший спек,
    • программист, написавший по спеку код и
    • тестировщик, написавший по спеку тест-кейсы.
    Тестировщик раздает присутствующим распечатки этих тест-кей- сов и подробно рассказывает, как он будет проверять функцио- нальности, описанные в спеке.
    Полезность рассмотрения тест-кейсов заключается в том, что
    во многих случаях продюсеры и программисты дают новые
    идеи для тестирования и/или корректируют допущенные не-
    точности.
    Политический момент
    Если участники митинга
    не предложили внести в тест-кейсы ничего нового либо
    предложили и вы внесли,
    то это формально означает, что они одобрили то, как будет протести-
    рован код. А так как все протестировать невозможно и всегда есть веро-
    ятность, что мы не проверим какой-либо багосодержащий сценарий,

    104
    Тестирование Дот Ком. Часть 1
    то даже в случае пропущенного бага все будут знать, что вы сделали
    все возможное для качественной подготовки к тестированию, т.е. соз-
    дали тест-кейсы и получили одобрение их эффективности.
    Кстати, после рассмотрения тест-кейсов пошлите е-мейл всем
    присутствовавшим на совещании. Перечислите в этом е-мейле все
    модификации к тест-кейсам, о которых вы договорились на совеща-
    нии. Таким образом, с одной стороны, вы составите памятку для са-
    мого себя, а с другой дадите себе возможность удостовериться (пу-
    тем получения ответов на е-мейл), что вы учли все предложенные вам
    вещи по модификации тест-кейсов и учли эти вещи правильно. Отсут-
    ствие ответа на подобный е-мейл это знак согласия.
    Во многих крупных интернет-компаниях рассмотрение тест-кей- сов — это обязательная процедура перед переходом к стадии...
    Исполнение тестирования и ремонт багов
    Так как о тестировании мы будем говорить все остальные томные вечера, то сейчас будем лаконичны, как спартанцы.
    После того как проинтегрирован код, тестировщики проводят тест приемки (smoke test, sanity test или confidence test), в процессе которого проверяются основные функциональности.
    Пример
    Если мы не можем погнуться (log into) в наш эккаунт (account) на
    www.main.testshop.rs, то о каком дальнейшем тестировании можно
    говорить.
    Если тест приемки не пройден, то программисты и релиз-инже- неры совместно работают над поиском причины. Если проблема была в коде, то код ремонтируется, интегрируется и над ним сно- ва производится тест приемки. И так по кругу, пока тест приемки не будет пройден.
    Если же тест приемки пройден, то код замораживается и тести- ровщики начинают тестирование новых компонентов (new fea-
    ture testing), т.е. исполнение своих тест-кейсов, написанных по спекам данного релиза (более подробно о значении термина fea-
    ture поговорим в беседе о системе трэкинга багов).
    После того как новые функциональности протестированы, насту- пает очередь исполнения "старых" тест-кейсов. Этот процесс на- зывается регрессивным тестированием (regression testing), ко-

    Цикл разработки ПО
    105 торое проводится для того, чтобы удостовериться, что компонен- ты ПО, которые работали раньше, все еще работают.
    Баги заносятся в систему трэкинга багов (Bug Tracking System,
    далее — СТБ, о ней у нас будет отдельный разговор), программи- сты их ремонтируют, и затем тестировщики проверяют, насколь- ко качественным был ремонт.
    Допустим, мы все, что хотели и как смогли, протестировали. Про- граммисты залатали дыры в коде, что мы тоже протестировали, и у нас есть версия нашего проекта, готовая для релиза. Эту версию мы мурыжим еще пару деньков, проводя тест сдачи (Acceptance
    or Certification Test), и включаем зеленый свет релиз-инженерам, чтобы они передали плод наших терзаний кликам (от англ. click)
    пользователей.
    Релиз
    Release (англ.) — "выпуск, освобождение".
    Пример
    Герой романа Стивена Кинга — ботаник, чудик и домосед подверга-
    ется постоянным унижениям от одноклассников, домочадцев и случай-
    ных прохожих. В один день он вдруг говорит себе "Хватит" и начинает
    колоть, резать и душить подлых обидчиков, а также в превентивных
    целях и всех остальных. Этот выпуск пара и есть "релиз" в его обыден-
    ном понимании.
    До этого мы употребляли слово "релиз" в значении "основной релиз" (так будем поступать и дальше), но у нас есть и его "род- ственники".
    Вот полная классификация "релизообразных":
    1. Релиз (он же основной релиз) (major release) — стадия в цикле разработки ПО, идущая за стадией тестирование и ремонт багов, т.е. передача пользователям кода новой вер- сии нашего ПО. Как правило, обозначается целыми
    числами, например 7.0.
    2. Дополнительный релиз (minor release) — ситуация, когда после основного релиза планово выпускается новая функ- циональность или изменяется/удаляется старая. Дополни- тельный релиз не связан в багами. Как правило,
    обозначается десятыми, например 7.1.

    106
    Тестирование Дот Ком. Часть 1
    3. Заплаточный релиз (patch release), когда после обнаруже- ния и ремонта бага выпускается исправленный код. Как правило, обозначается сотыми, например 7.11.
    О чем говорит версия 12.46 нашего www.testshop.rs? А говорит она о трех вещах:
    1) о том, что последний основной релиз является двенадца- тым по счету;
    2) о четырех дополнительных релизах, выпущенных ПОСЛЕ двенадцатого релиза;
    3) о шести заплаточных релизах, выпущенных ПОСЛЕ две- надцатого релиза.
    Кстати, о номерах релизов. Некоторые компании в желании поориги-
    нальничать дают основным релизам не номера, а названия. Ну, напри-
    мер, имя поп-группы или отдельного исполнителя.
    Звонит программисту дружок:
    Здорово, старик. Слушай, Ленка подружку приводит, так что бери
    шампанское и подъезжай к семи.
    Не, я пас. Я тут с "Бритни Спирс" завис. -
    О!..
    Неудобство такого подхода заключается в том, что непонятно, какой
    релиз был раньше — "Пол Маккартни" или "Джон Леннон", и в идиотиз-
    ме произнесения названий дополнительных или заплаточных релизов:
    звонит контрагент со своей проблемой, а ему говорят: "Да усе будет в
    порядке. Мы заутра патч номер 7 кДорз присобачим".
    Идем дальше.
    Любой из трех релизов для пользователя означает, что наш
    www.testshop.rs как-то изменился.
    Возможные изменения:
    1. Новые функциональности (основной и дополнительный релизы);
    2. Изменение/удаление старых функциональностей (основ- ной и дополнительный релизы);
    3. Починка багов, пропущенных в одном из релизов любого типа (заплаточный релиз).
    Организация упаковки кода в виртуальный мешок и его передача
    пользователю осуществляются релиз-инженерами.
    Давайте представим, что ЗАО "Тест-шоп", предназначенное,
    кстати, для продажи книг, только начинает работу.

    Цикл разработки ПО
    107
    У нас есть
    • два программиста (Дима и Митя) и
    • хозяин-барин (месье Кукушкин Илья Харитонович), а также
    • два компьютера с "Виндоуз" для программистов (здесь и далее я не буду давать версий не нашего ПО),
    • клевый лэптоп Харитоныча (ОС значения не имеет) и
    • машина с Линуксом (далее называемая тест-машина) для разработки и тестирования ПО.
    Проект начинается:
    1. Регистрируется домен www.testshop.rs.
    2. У интернет-провайдера и по совместительству хостинг-про- вайдера покупается доступ в Интернет и арендуется сервер, чтобы весь мир мог зайти на огонек, увидеть и оценить.
    3. Программистские компьютеры, лэптоп СЕО и тест-машина объединяются в локальную сеть с выходом в Интернет.
    4. Программисты начинают работать над проектом.
    Мы уже говорили о том, что классическая архитектура веб-про- екта — это
    веб-сервер;
    сервер с приложением;
    база данных.
    Так вот, так как мы — интернет-компания молодая, то у нас все будет по-простому: на тест-машине будут все три компонента.
    Архитектура www.testshop.rs
    1. Веб-сервер Apache ("апачи", имя которого идет не от названия американского племени индейцев, издревле промышлявших под- работками на интернет-проектах, а от patchy (залатанный), как память о неимоверном количестве заплаток, на него приклеен- ных, в результате чего он приобрел белизну и пушистость).
    В директориях Apache мы храним:
    файлы, содержащие HTML-код
    С инкорпорированным
    JavaScript-кодом. JavaScript-код, вставляется в HTML.- файлы и может служить, например, для проверки е-мейла при регистрации на наличие двух @. Достоинство использования JavaScript-кода, заключается в том, что проверка осуществ-

    108
    Тестирование Дот Ком. Часть 1
    ляется на компьютере пользователя в отличие от варианта, когда мы посылаем непроверенную форму с регистрацией на сервер с приложением, нагружая этот сервер;
    файлы-картинки (images).
    2. Приложение на Python и C++. Наше приложение состоит из:
    файлов с Python-скриптами, которые можно использовать, например, для "перевода" регистрационной формы, от- правленной пользователем, на язык, понятный базе дан- ных, и для создания новой строки в таблице для новых пользователей;
    файлов с C++ кодом. Например, нам нужно вставить новое значение в определенной колонке определенной таблицы базы данных для всех пользователей, зарегистрированных у нас более 1 года. Для этой цели мы можем написать про- грамму на C++.
    Кстати, C++ файлы это единственные файлы в нашем проекте,
    которые мы компилируем перед использованием: каждый из наших
    C++ файлов — это простой текстовый файл с кодом, написанным на C++,
    и, чтобы он стал исполняемым, его нужно скормить C++ компайлеру,
    который проверит код на наличие багов синтаксиса и, если все О'к,
    переведет язык, понятный человеку (C++), на язык, понятный тест-ма-
    шине (нули и единицы).
    3. База данных MySQL ("майсиквел"). Здесь мы будем хранить данные
    • о пользователях (например, день регистрации в системе, е- мейл, имя, фамилию и пароль);
    • о транзакциях пользователя (например, когда и что купил);
    • о наименованиях книг и их наличии.
    Идем дальше.
    Начинаются первые неудобства и проблемы, связанные с отсут- ствием релиз-инженерных знаний:
    1. При каждом сохранении файла в той же директории нужно давать ему новое имя, чтобы не удалить старый вариант редакции.
    2. При сохранении файла после редактирования нельзя про- комментировать, что было изменено.
    3.
    1   ...   5   6   7   8   9   10   11   12   ...   24


    написать администратору сайта