WWW.DISS.SELUK.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА
(Авторефераты, диссертации, методички, учебные программы, монографии)

 

Pages:     | 1 ||

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

-- [ Страница 2 ] --

• изменить тест-кейс или • удалить его и придумать новый.

Зсе ситуации уникальны, но, как показывает жизнь, легче возвести здание на пустом месте, чем делать генеральную реставрацию старого особняка. Кстати, судя по Москве, этой концепции придерживаюсь не я один.

Вот такие дела...

А напоследок я скажу...

Важный момент перед подведением итогов.

Все то, о чем мы говорили в этой беседе, является хорошей практикой при создании тест-кейсов и тест-комплектов, эта практика имеет место в реальных и успешных интернет-компаниях Силиконовой Долины, и все, включая формат, можно использовать, как оно было рассказано и показано. Я же хочу, чтобы вы всегда помнили главное:

тестирование — это процесс творческий и, следовательно, подразумевает поиск. Ищите, пока не найдете то, что эффективно работает именно в вашей компании и в конкретной ситуации.

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

IDEA: Оплата может быть произведена картами из Таблицы 1.

Для каждого тест-кейса из Таблицы 1:

www.main.testshop.rs//balance.htm 2. Открой www.main.testshop.rs.

3. Войди в систему как testuser1/paSSwOrd.

4. Найди любой товар.

5. Добавь товар в корзину.

6. Произведи оплату картой (!! !запиши полную сумму заказа: ).

7. Запиши номер заказа 8. Запроси базу данных:

select result from cc_transaction where id = ;

Сравни с Expected resultl.

9. Запиши баланс счета карты Прошу считать творческий подход проиллюстрированным.

Краткое подведение итогов 1. Тест-кейс — это инструмент тестировщика, предназначенный для документирования и проверки одного или более ожидаемых результатов.

2. Шаги (procedure) — это часть тест-кейса, ведущая исполнителя тест-кейса к фактическому результату (выводу). Излишняя детализация может осложнить поддержку, а излишнее абстрагирование привести к непониманию того, как исполнить 3. Шаги для повторяющихся сценариев можно вынести в отдельный документ в локальной сети, и в тест-кейсе мы даем лишь ссылку на этот документ.

4. Исполнение тест-кейса завершается либо положительным (pass), либо отрицательным (fail или баг!!!) результатом. Причем именно отрицательный результат является желанным, так как 5. Исполнение тест-кейса не является завершенным, если исполнитель не смог "пройти" все шаги.

6. Тест-кейс должен быть независим от других тест-кейсов из того же или любого другого тест-комплекта.

7. Наиполезнейшими вещами являются следующие атрибуты тесткейса:

• уникальный ID, который уникален в пределах всех существующих в компании тест-кейсов;

• приоритет, чтобы все знали, кто здесь главный;

• идея, которая на простом языке объясняет предназначение • подготовительная часть, которая... ну, в общем, подготавливает нас к исполнению тест-кейса;

• история редактирования, которая помогает указать на друзей, испортивших наши идеальные тест-кейсы и наших легковерных попугаев.

8. Поддерживаемость тест-кейса — это легкость и удобство, с которыми он может быть изменен. Поддерживаемость тесткейса — одна из основных формальных вещей при создании или модификации тест-кейса.

9. Тест-кейс "проверяет" не более одной идеи. При этом два и более ожидаемых результата легитимны, если истинность идеи вытекает из одновременной истинности этих ожидаемых результатов.

10. К плохому стилю относятся:

а) зависимость тест-кейсов друг от друга;

б) нечеткая формулировка шагов;

в) нечеткая формулировка идеи тест-кейса и/или ожидаемого 11. Тест-кейсы объединяются в тест-комплекты (как правило, один тест-комплект — это один файл).

12. Как правило, тест-комплект включает тест-кейсы, родственные друг другу тем, что они проверяют определенный участок нашего интернет-проекта или вещи, описанные в определенном 13. Хорошим стилем является создание нового тест-комплекта для новых тест-кейсов.

14. Тест-кейсы, написанные после проработки спека (до того, как представилась возможность "пощупать" написанное по нему ПО), являются сырыми, и никто не посмеет бросить в тестировщика камень осуждения, если он впоследствии изменит тест-кейсы по мере их исполнения.

15. Создавая или модифицируя тест-кейсы, мы всегда должны помнить о том парне, который будет их исполнять после нас.

16. Состояние тест-кейса: "У них все, как у людей. Рождаются, изменяются и умирают..." — "Новый", "Измененный", "Более недействителен". Хорошая практика — не удалять (remove) отжившие свой век тест-кейсы (или целые тест-комплекты), а переносить их (move) в отдельную директорию, специально созданную для таких пенсионеров.

17. Важно понять, что в сегодняшнем разговоре речь шла о форме, а не о содержании тест-кейсов. Содержание конкретного тесткейса — это отражение методологии нахождения багов применительно к конкретной ситуации, и этой методологии будут посвящены отдельные беседы.

Вопросы и задания для самопроверки 1. Без какой части тест-кейс никак не может обойтись?

2. Для чего в тест-кейсе нужны шаги?

3. Два вида исхода исполнения тест-кейса. К какому исходу мы, как тестировщики, стремимся?

4. Что происходит, если состояние ПО не позволяет исполнить все шаги тест-кейса? Каковы наши действия?

5. Обоснуйте, почему у тест-кейса должна быть лишь одна тестируемая идея?

6. Перечислите полезные атрибуты тест-кейса и причину полезности каждого из них.

7. Изменяется ли ID тест-кейса при изменении самого тест-кейса или переносе его в другой документ?

8. Придумайте свой способ индексации тест-кейсов, например, частью ID может быть номер спека.

9. Что такое data-driven тест-кейс? В чем заключается удобство поддержания такого тест-кейса?

10. Как легкость в поддерживаемое™ тест-кейса позволяет сэкономить время?

11. Формальные недостатки, не позволяющие тест-кейсам быть 12. В чем удобство написания новых тест-кейсов в отдельный тесткомплект?

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

14. В чем проявляется родственность тест-кейсов, являющихся частью одного тест-комплекта?

15. Приведите атрибуты шапки тест-комплекта.

16. Состояния тест-кейса.

17. Почему не рекомендуется удалять тест-кейсы?

18. Есть ли стандартная форма тест-кейса, за несоблюдение которой лишают премий и не приглашают на празднование Нового 19. Разница между идеей тест-кейса и ожидаемым результатом.

20. Напишите тест-кейс с тестируемой идеей "Я могу убедить свою жену в чем угодно" и ожидаемым результатом "Дорогой, поезжайте с Алексеем на рыбалку. Вы так редко с ним видитесь".

21. Напишите тест-кейс с одной идеей и двумя ожидаемыми результатами. Используйте пример из жизни.

ЦИКЛ РАЗРАБОТКИ ПО

• РАЗРАБОТКА ДИЗАЙНА ПРОДУКТА И СОЗДАНИЕ

• КОДИРОВАНИЕ

• ИСПОЛНЕНИЕ ТЕСТИРОВАНИЯ И РЕМОНТ БАГОВ

• БОЛЬШАЯ КАРТИНА ЦИКЛА РАЗРАБОТКИ ПО

Цикл (процесс) разработкидо поддержкиdevelopment life cycle) — это путь от идеи готового продукта.

Чем более отлажены каждая из стадий цикла и координация между ними, тем эффективнее работает интернет-компания, тем выше качество и тем счастливее пользователи.

Сегодня мы поговорим о модели цикла разработки ПО, называемой "Waterfall" ("Водопад"), которая используется в подавляющем большинстве интернет-стартапов.

Наша цель — понять логику взаимосвязи между стадиями Цикла и основные моменты каждой из стадий.

Большая картина цикла будет представлена в конце разговора, когда будет понятно, что уже ничего не понятно.

Постараюсь свести к минимуму вещи типа: "в одних компаниях по называется так, а в других — этак", нельзя объять необъятное, но если будет схвачен принцип, то, несмотря на разницу в названиях и нюансах, вы мгновенно свяжете то, о чем я вам рассказал, с тем, что есть (будет) в компании, где вы работаете (несомненно, будете работать).

Итак, поприветствуем участниц и участников нашего шоу. Ими сегодня будут:

2. Разработка дизайна продукта и создание документации.

Кодирование (в смысле создание кода).

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

Для начала расскажу вам, как образовывались стартапы в США в конце 90-х гг. прошлого века. И не подумайте, что я утрирую.

Калифорнийская история СИДЯТ два бывших одноклассника в спорт-баре даунтауна Сан-Франциско и думают, как заработать денег: кругом интернет-бум, некоторые друзья стали миллионерами и ездят на сверкающих "Феррари" между офисами-аквариумами интернет-компаний и своими домами на холмах Лос-Алтоса.

Один из них неожиданно поднимает над барной стойкой голову, переводит озаренный взгляд на другого, вытягивает вверх указательный палец и говорит: "О!" Это "О!" означает рождение идеи, например, о создании веб-сайта по продаже туалетной бумаги.

На следующий день раздается звонок в офисе венчурного капиталиста и назначается встреча для обсуждения "проекта века".

венчурные капиталисты — это такие непростые товарищи, бизнесом которых является спонсирование новых компаний.

Встреча проходит в теплой и дружественной обстановке, и под проект "Туалетная бумага Дот Ком" дается 50 млн долл.

Сказавший "О!" становится CEO (Chief Executive Officer), а егодруган — соответственно COO (Chief Operating Officer).

Снимается помещение, покупаются ораклы и линуксы, начинается набор народа на рядовые и руководящие должности, день и ночь кипит работа, пепперони-пицца становится ежедневной едой даже вегетарианцев, жены программистов изменяют со страховыми агентами, в общем все "счастливы, влюблены, раздавлены".

Процесс пошел!!!

Слушая эту историю, которая вполне могла быть правдивой, можно заметить, что все началось с "О!", т.е. с ИДЕИ.

Вопрос: Кто генерирует идеи в действующей интернет-компании? Ответ:

Как правило, это отдел маркетинга. Нередко идеи инициируются службой поддержки пользователей или новым контрактом, например, с компанией по процессингу кредитных карт (credit card processor).

В общем вариантов множество.

При разговоре о большой картине сводному персонажу, генерирующему идеи, будет присвоено имя Маркетолог.

Как правило, идеи компонуются в MRD ("эм-ар-ди" — Marketing Requirements Document — документ о требованиях маркетинга, суть которого: "хотелось бы это иметь").

Затем • менеджмент проворачивает MRDШКИ через жернова анализа, утверждения и приоритезации, а • выжившие идеи передаются продюсерам, которые их полоскают, высушивают и гладят, чтобы получилась спецификация.

Разработка дизайна продукта и создание опека На основании идеи, утвержденной менеджментом, разрабатывается и документируется ее воплощение, которое называется дизайном продукта (product design) или, простыми словами, то, как та или иная часть нашего веб-сайта должна выглядеть и/или работать.

Концептуальная разница между идеей (продукта) и дизайном (продукта) заключается в том, что • идея — это описание ЦЕЛИ, а • дизайн — это описание ПУТИ к достижению этой цели.

Профессионально весь этот джаз осуществляется менеджерами продукта (PMs — Product Managers), которые также могут называться продюсерами (Producers) или дизайнерами продукта (Product Designer).

Результатом продюсерских усилий являются спеки, называемые также PRD (Product Requirements Document — документ о требованиях для продукта) или просто requirements (требования).

Самые эффективные продюсеры в интернет-компаниях — это профессионалы, имеющие бэкграунд в предмете, на котором они специализируются, и ненавязчивую техническую подготовку.

Первое необходимо, чтобы детально разбираться в том, что найдет отражение в спеках (например, это могут быть правила торгов НАУФОР).

Второе полезно, чтобы говорить на языке программистов и тестировщиков.

Спеки должны иметь уникальное название и уникальный ID и внутри разбиваются на логические составляющие (части, пункты), имеющие индексацию для удобства ссылок.

Каждый спек имеет также обозначение своей важности (приоритета). Обычно это цифра по 4-балльной шкале. Так, спек приоритета 1 (Ш) — это самый приоритетный спек.

Практическая ценность придания спекам приоритетности состоит в следующем:

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

• программист и тестировщик всегда должны начинать (программирование, подготовку к тестированию и исполнение тестирования) со спека с большим приоритетом;

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

Как правило, приоритет присваивается спекам менеджером продюсеров.

Идем дальше.

Хороший спек, как и хороший закон, отличают следующие вещи:

1. Акцент на деталях и их четкое определение.

2. Забота о недопущении неверного толкования.

3. Непротиворечивость внутри спека и с другими спеками.

4. Логическая взаимосвязь компонентов.

5. Полнота охвата предмета.

6. Соответствие нормативным актам.

7. Соответствие деловой практике.

Ошибки в спеке появляются в случае отклонения содержания спека от пунктов 1 —7.

1. АКЦЕНТ НА ДЕТАЛЯХ И ИХ ЧЕТКОЕ ОПРЕДЕЛЕНИЕ

Пример ошибки "1.5. При регистрации система должна проверить е-мейл на наличие:

"." перед именем глобального домена (например, "ш" или "com")". В этом спеке пропущено множество вещей. Например:

а. Не указано, что е-мейла с двумя "@" быть не может.

б. Не указаны другие неприемлемые знаки (illegal characters) е-мейладреса.

в. Не приведен список существующих глобальных доменов.

Пример последствий ошибки Стандартная практика регистрации нового пользователя состоит из трех этапов:

а. Пользователь заполняет регистрационную форму и нажимает кнопку "Зарегистрироваться".

б. От веб-сайта приходит е-мейл с липком для подтверждения ре в. Пользователь кликает линк, и регистрация автоматически под Если пользователь случайно введет неправильный е-мейл (например, с двумя "@") и сообщение об ошибке сгенерировано не будет, то регистрация не будет завершена, так как е-мейл с липком для подтверждения регистрации не придет. Пользователь будет бесполезно ждать этого е-мейла, а не дождавшись, скорее всего введет в адресной строке веб-браузера URL конкурента.

Кстати, URL ("ю-ар-эл" — Uniform Resource Locator) — это просто адрес файла в сети, например "http://www.testshop.rs". URL можно вводить в адресную строку веб-браузера без "http://" (ее добавляет сам браузер при запросе к веб-серверу). Имя файла может даваться напрямую: www.main.testshop.rs/1277/balance.htm, либо веб-сервер сам найдет для нас нужный файл в соответствии со своими настройками, например, в случае с нашим проектом набор в адресной строке браузера "www.main.testshop.rs" или "www.main.testshop.rs/index.htm" даст нам тот же самый файл index.htm.

2. ЗАБОТА О НЕДОПУЩЕНИИ НЕВЕРНОГО ТОЛКОВАНИЯ

Пример ошибки Игорь Саруханов. Песня "Скрип колеса".

Произнесите вслух название этой песни. Я, например, многие годы думал, что песня называется "Скрипка лиса", а моя жена была уверена, что "Скрипка. Леса...".

Пример последствий ошибки Если для вашей профессиональной деятельности не имеет никакого значения, как называлась эта песня, то адекватность понимания спека — это вещь наиважнейшая. Опасность заключается в том, что программист и/или тестировщик, выбрав неправильный смысловой вариант, может быть уверен, что все понял правильно, и в итоге напортачит тест-кейсами.

У нас будет отдельное рассмотрение того, как превентировать возможность неверного толкования спека.

3. НЕПРОТИВОРЕЧИВОСТЬ ВНУТРИ СПЕКА И

С ДРУГИМИ СПЕКАМИ

Пример ошибки "7.3. В целях безопасности доставка может быть осуществлена на адрес пользователя, по которому зарегистрирована кредитная и на следующей странице или в другом спеке:

"8.1.1. Для доставки пользователь может ввести любой адрес в пределах континентальной части США".

Пример последствий ошибки Один программист может запретить доставку на любой адрес, кроме адреса регистрации кредитной карты, а другой программист независимо от первого напишет код, позволяющий пользователю ввести любой адрес, который тот пожелает.

Вследствие этого вполне возможна ситуация, когда пользователь, завершив заказ, будет ждать посылку, которая никогда к нему не придет, так как система • позволит сделать заказ (код второго программиста), НО • не даст команду кладовщику, чтобы тот послал заказ по почте (код первого программиста).

4. ЛОГИЧЕСКАЯ ВЗАИМОСВЯЗЬ КОМПОНЕНТОВ

Пример ошибки "1.1. Мои мама и папа, я живу хорошо, просто замечательно. У меня все есть. Есть свой дом. Он теплый. В нем одна комната и кухня. Я без вас очень скучаю, особенно по вечерам.

1.2. А здоровье мое не очень. То лапы ломит, то хвост отваливается.

1.3. А на днях я линять начал: старая шерсть с меня сыплется, хоть в дом не заходи, зато новая растет — чистая, шелковистая. Так что лохматость у меня повысилась.

До свидания. Ваш сын, дядя Шарик".

Спасибо Эдуарду Успенскому за иллюстрацию "логической" взаимосвязанности компонентов.

Пример последствий ошибки Вспомните реакцию мамы, а затем папы дяди Федора после прочтения письмеца. Примерно то же самое может быть с пользователем, когда он столкнется с функциональностью, написанной и протестированной согласно подобному спеку.

5. ПОЛНОТА ОХВАТА ПРЕДМЕТА

Пример ошибки В условиях массового интернет-мошенничества с кредитными картами дополнительной степенью защиты является CVV2 (Card Verification Value 2) — трех- (для всех карт, кроме Атех) или четырехзначный (только для Атех) номер, идущий за номером карты на обратной ее стороне (на полоске с подписью). Продюсер по незнанию или по халатности может не предусмотреть в опеке, что пользователь должен ввести CVV2 при регистрации карты, что в итоге приведет к большему числу мошеннических транзакций.

Пример последствий ошибки Многие интернет-компании, включая платежные системы, закончили существование из-за огромного количества транзакций с крадеными картами. Даже если дело не дойдет до закрытия компании, службе поддержки клиентов, финансовому и правовому департаментам предстоит испытать много чудных мгновений, которых могло не быть, не забудь продюсер о CVV2.

6. СООТВЕТСТВИЕ НОРМАТИВНЫМ АКТАМ

Пример ошибки Здесь, как правило, речь идет о продаже специальных предметов (например, рецептурных лекарств). В этом случае спек (например, в онлайн-аптеке) должен предусматривать, что такие предметы не могут продаваться.

Еще одним примером являются вещи, связанные с авторским правом, например распространение аудиофайлов.

Пример последствий ошибки Возможно судебное преследование. Вспомните историю компании Napster.

7. СООТВЕТСТВИЕ ДЕЛОВОЙ ПРАКТИКЕ

Пример ошибки Если денежный перевод обычно занимает 3 — 6 бизнес-дней включительно, то пользователю не должно сообщаться меньшее или "точное" количество дней. Нужно так и указать на соответствующей странице сайта: "Денежный перевод обычно занимает 3 — 6 дней включительно".

Пример последствий ошибки Пользователь будет уверен, что в конкретный день на его счете будет определенная сумма. Представьте себе ситуацию, что пользователь, рассчитывая на эти деньги, поехал в Лондон на аукцион русской живоТестирование Дот Ком. Часть ПИСИ, выиграл там картину Айвазовского, за 200 тыс. фунтов, расплачивается своей дебетовой картой, а ему говорят, что на карте нет денег.

Останется ли он клиентом нашей компании?

Идем дальше.

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

Где-нибудь в городе N в стенах прихватизированного авиационного завода открывается фирма по отливке золотых унитазов для новых русских. Жена одного такого приезжает на завод и говорит: "Хочу, чтобы мой унитаз:

с 00:00 до 5:59:59 проигрывал в стерео сочинения Сибелиуса в исполнении оркестра английской Королевской оперы;

с 6:00 до 11:59:59 голосом Марчелло Мастроянни читал пелевинскую "Жизнь насекомых";

с 12:00 до 17:59:59 философски молчал; с 18:00до 23:59:59 транслировал "Народное радио", а для формы подойдет модель 5 из вашего каталога".

Очень даже приличная спецификация. И на этом неплохо было бы остановиться, но если эта дама с многокаратными каменьями начнет давать ценные указания о температуре нагревания презренного металла перед литьем, изоляции контактов или моменте вступления кларнета в Седьмой симфонии, то будет совсем худо. Давайте уж так: каждый должен заниматься своим делом.

Итак, после проведения водораздела между работой продюсера и работой программиста продолжим о спеках.

Спеки имеют следующую очередность статусов:

1. Во время написания они имеют статус Черновик (Draft).

Продюсер пишет спек.

2. После написания и до утверждения — Ожидание утверждения (Approval Pending).

Спек написан, и назначается совещание (meeting) с программистами и тестировщиками по его обсуждению или же просто им посылается е-мейл с приложением.

3. После утверждения — Утверждено (Approved или Final).

Если на митинге все закричали "Ура!" или получены положительные отзывы от всех реципиентов, утвержденный спек немедленно выкладывается на один из серверов в локальной сети, чтобы быть доступным любому лицу внутри компании, которому положено его видеть. Если же спек не принят, то все начинается с пункта 1.

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

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

Идем дальше.

Спасский после игры с Фишером неделями ходит и думает: "А вот здесь нужно было бы его конем пришкварить", но, к сожалению, исправить ему уже ничего нельзя, "можно только забыть".

Продюсер же может проснуться утром с идеей улучшения спека или вспомнить какую-нибудь важную вещь, упущенную при создании спека, и, придя на работу, подредактировать спек и заменить файл со старой редакцией файлом с новой редакцией на упомянутом внутреннем сервере... И так пять раз.

Далее.

Обычно спек распечатывается непосредственно перед началом работы по нему. Учитывая, что время начала работы по спеку у каждого индивидуально (я говорю о минутах), если спек будет по-тихому изменяться между распечатываниями, наступит ситуация, когда программисты и тестировщики хотя и работают над одним проектом, но руководствуются разными редакциями спека.

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

11 ноября. Спек утвержден Ножовым, Ложкиным и Тарелкиным. Продюсер Буханкин.

12 ноября. Спек распечатывает тестировщик Ножов. Работа по спеку 14 ноября. У Буханкина новая идея. Спек по-тихому изменен.

15 ноября. Спек распечатывает для себя программист Ложкин. Работа 16 ноября. У Буханкина новая идея. Спек по-тихому изменен.

17 ноября. Спек распечатывает для себя программистТарелкин. Работа 18 ноября. У Буханкина новая идея. Спек по-тихому изменен.

19 ноября. Спек распечатывает для себя программист Салфетка, работающий над кодом по интеграции функциональности кода из этого и своего спека. Работа по спеку началась.

25 декабря. Все выясняется. декабря.

17:00 — начало празднования Нового года в офисе компании.

17:30 — начало избиения Буханкина руками Ножова, Ложкина и Тарелкина.

18:00 — начало избиения Буханкина ногами Ножова, Ложкина и Тарелкина.

18:30 — в офис влетает Салфетка, вернувшийся после разговора с менеджером, разбрасывает в стороны подуставших Ножова, Ложкина и Тарелкина и добивает Буханкина контрольным Надо отметить, что во многих случаях спек меняется не по воле продюсера, а по приказу сверху.

Ситуация Менеджер присылает продюсеру е-мейл, что необходимо срочно изменить спек #8337.

За день до этого, т.е. 24 марта.

Представьте себя на месте продюсера:

продюсер уже вовсю работает над новым спеком и надеется, что релиз функциональностей согласно спеку #8337 пройдет без сучка Представьте себя на месте программиста: код для спека #8337 написан, влегкую протестирован самим программистом, частично позабыт и уже кажется частью безвозвратно потерянной Представьте себя на месте тестировщика:

документация для тестирования спека #8337 написана. Новые проекты бьют в паруса, и настоящее наконец-то стало залечивать раны прошлого.

На следующий день, т.е. 26 марта.

Спек #8337, а также код и тест-кейсы к нему должны быть изменены, т.е. минимум трое работников должны • бросить текущие проекты, • вспомнить спек #8337, понять изменения к нему и • потратить время на воплощение изменений.

Эта ситуация является идеальной питательной средой для возникновения багов, так как это будет работа (включая продюсера) на скорую руку, как правило, без возможности погрузиться в этот прошлый проект и понять риск внесения изменений. Мало того, новые проекты также могут а) пострадать или б) даже быть отложенными из-за того, что а) на них будет потрачено меньше времени или б) времени может физически не хватить.

Что же нам делать, чтобы избежать кордебалета с изменяющимися спеками?

Если менеджер говорит, что нужно изменить спек, или продюсер "вспомнил" о реально важной вещи для спека и эти "НУЖНО" или "ВСПОМНИЛ" приходятся на самое наинеподходящее время, то никуда не денешься, но все же две очень нехорошие ситуации, связанные с изменением спека, можно превентировать.

Две нехорошие ситуации:

1. Спек может быть изменен по-тихому.

2. Изменения к спеку не утверждены программистом и тестировщиком.

Вопрос: Как конкретно мы превентируем две нехорошие ситуации?

Ответ: Мы заморозим спек.

В любой интернет-компании существует программа контроля за версиями. Во многих случаях это старая добрая CVS ("си-ви-эс" — Concurrent Version System — система по согласованным версиям).

CVS — вещь многофункциональная, и мы о ней еще поговорим, но сейчас она нам будет полезна для следующего:

1. С помощью CVS продюсер может сохранять версии спека и всегда вернуться к старым редакциям.

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

Процессуально все можно сделать так:

1. К определенной дате все спеки должны быть утверждены.

Неутвержденный спек не кодируется, и точка.

2. Директория со всеми утвержденными спеками закрывается, и никто ничего не может изменить в этой директории...

...если только не будет следовать процедуре изменения спека.

техническую сторону, связанную с заморозкой спеков (spec freeze), обеспечивают инженеры по релизу.

Процедура включает:

1. Утверждение всех изменений составом лиц, утвердившим предыдущую редакцию.

2. Посылку е-мейла с перечислением изменений и именами утвердивших всем департаментам, непосредственно связанным с разработкой ПО (продюсеры, программисты, тестировщики и инженеры по релизу). Одно из хороших качеств такого е-мейла — это то, что люди, не участвовавшие в пункте 1 и имеющие старую версию спека, тоже узнают об изменениях.

3. Открытие CVS-директории для закладки файла и ее закрытие.

Конечно, без изменений в спеках не обойтись, но путем 1) замораживания спеков;

2) введения процедуры изменения спека;

3) тщательного рассмотрения необходимости каждого изменения спека с участием менеджмента можно превентировать ряд серьезных проблем с качеством.

Идем дальше.

Одна из частых причин, по которым в ПО появляются баги кода, — это неверное толкование спека (misinterpretation) — ситуация, когда программисты и/или тестировщики, работающие со спеком, понимают по-своему то, что пытался донести до них продюсер, и при этом • на 100% уверены, что на 100% понимают то, что имел в • имея уверенность, не уточняют, так как не будешь же бегать за уточнениями того, что тебе и так ясно.

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

Кстати, именно поэтому на чертеже физического объекта (например, двигателя мотоцикла) последний обычно изображается с трех сторон:

вид спереди, вид сверху и вид слева.

Тезис Тестировщики должны настаивать, чтобы спеки по максимуму иллюстрировались:

• макетами (mock-up), • блок-схемами (flow chart), • примерами (example).

Аргументация С примерами все понятно: написал что-то — придумай пример для иллюстрации, заодно и сам лучше поймешь, о чем пишешь.

Народная мудрость гласит: "Лучше один раз увидеть, чем сто раз услышать". Отличной идеей является разработка продюсером макетов интерфейса пользователя (User Interface или просто UI — "ю-ай"). Делается это так:

во время (или после) написания спека продюсер берет генератор веб-страниц типа Microsoft FrontPage и путем нехитрых манипуляций создает веб-страницу с кнопками, полями, картинками и прочими милыми деталями интерфейса.

Затем эта страничка "подшивается" к спеку и помогает всем заинтересованным лицам увидеть, ЧТО, по замыслу продюсера, должен будет увидеть пользователь.

Кстати, если спецификация предусматривает, что пользователь будет проходить через несколько веб-страниц для совершения какого-либо действия (например, покупки книги), то макеты этих веб-страниц могут не только являться частью спека, но и служить в качестве обоев, если их развесить на стенах офиса в том порядке, в котором их будет видеть пользователь.

Вольное изложение опека #1023 "Регистрация нового пользователя":

Регистрация пользователя состоит из трех страниц, идущих в следующем порядке:

• первая страница (1) — поле для индекса места жительства пользователя и кнопка "Продолжить регистрацию";

• вторая страница (2) — поля для имени, фамилии, е-мейла и пароля/подтверждения пароля пользователя, кнопка "Зарегистрироваться";

• третья страница (3) — текст с подтверждением регистрации.

Все поля обязательны для заполнения, и если на странице (1) или (2) вводится недействительное либо пустое значение любого поля, то пользователю показывается та же страница, но с сообщением об ошибке (error message). (В данном случае мы не будем говорить о том, какой ввод действителен (легитимен) для каждого из полей, так как это сейчас неважно.) Продюсер разрабатывает три страницы, распечатывает их в двух комплектах, один из которых подшивает к спеку, а другой развешивает на стене в порядке появления перед пользователем: страница (1), страница (2), страница (3).

Оговорка 1: Макеты могут быть разной степени детализации, и вполне допустимо, когда элементы интерфейса, не имеющие отношения к иллюстрируемому спеку, не включаются в макет, например, в случае с макетами для регистрации нас не интересуют картинки на веб-странице.

Оговорка 2: Понятно, что макеты интерфейса пользователя не создаются, если спек полностью посвящен бэк-энду веб-сайта (например, спек "Автоматизация отчетов по продажам"), так как детали интерфейса пользователя, т.е. фронт-энд, в таком спеке просто не упоминаются.

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

Интерфейс — это то, ЧТО видит пользователь, а алгоритм — это то, ПОЧЕМУ пользователь видит то, что он видит.

Для графической презентации алгоритмов используются блоксхемы, так горячо любимые всеми выпускниками математического класса выпуска 1990 г. люберецкой школы № 12.

Пример Представим предыдущую ситуацию с регистрацией, но в форме блоксхемы (такая блок-схема называется process flow chart, так как устроена по схеме ввод->процесс->вывод).

Кстати, блок-схемы могут создаваться как продюсером, так и тестировщиком, но независимо от составителя, как правило, прекрасной идеей является включение блок-схемы в секцию тесткомплекта GLOBAL SETUP and ADDITIONAL INFO.

Блок-схемы, макеты и примеры (вместе именуемые БМП) помогают превентировать появление багов или найти баги на уровне спека следующими путями:

• БМП — это описание предмета с разных сторон, что ведет к его адекватному толкованию разными людьми;

• создание БМП — это процесс переосмысления написанного, что ведет к нахождению багов в написанном, т.е. в • макеты и блок-схемы наглядны и во многих случаях позволяют в буквальном смысле увидеть баги в отличие от ситуации, когда есть только текст.

Еще раз: тестировщики должны настаивать, чтобы спеки по максимуму иллюстрировались макетами (тоск-ир), блок-схемами (flow chart) и примерами (example).

Теперь, после того как вы услышали про макеты и пошли дальше, не увидев их (что было сделано намеренно — с целью дать вам прочувствовать контраст между работой без макетов и с ними), позвольте представить вам макеты "Регистрации":

Макет страницы (1) Макет страницы (2) * поле обязательно для заполнения Макет страницы (3) логина Бонус: Макет страницы (2) в случае ошибки пользователя при заполнении поля "Е-мейл" Ошибка I Проверьте правильность заполнения поля:

2. Заново введите пароль * поле обязательно для заполнения Кстати, макет страницы (2) и бонус-макет страницы (2) противоречат спеку: по спеку поле "Фамилия" является обязательным для заполнения, но на макетах оно не выделено звездочкой. Противоречие внутри спека — это баг, так как любая инструкция теряет смысл, если ее указания не стыкуются друг с другом.

Постановка мозгов При обнаружении противоречий внутри спека (а БМП — это части спека!) нужно сделать рапорт о баге против продюсера, чтобы тот настроил в унисон несогласующиеся части. В нашем случае продюсер должен изменить либо текстовую часть спека ("все поля являются обязательными, кроме поля "Фамилия"), либо соответствующие макеты (добавить звездочку к полю "Фамилия").

Идем дальше.

В заключение краткого экскурса о спеках дам еще одну полезную идею.

Каждая более или менее уважающая себя компания имеет свой сайт в локальной сети (intranet), который недоступен внешним пользователям. На этом сайте можно прочитать тезисы о корпоративной морали, узнать имя любимого лемура президента компании, посмотреть фотографии тех, кто по-тихому правит утвержденные спеки, и найти много другой полезной информации. Так вот, все когда-либо утвержденные спеки должны быть выложены на этот сайт. При этом они группируются по номеру релиза и доступны для просмотра, поиска по директориям (название директории — номер релиза), ID, ключевым словам в названии и имени продюсера. Если спек ссылается на внешний документ (например, на правила расчетов Центрального банка), то спек должен содержать гиперлинк на адрес такого документа в локальной сети.

Постановка мозгов Не стесняйтесь рапортовать баги, которые вы будете находить в спеках. Если продюсеры не понимают, то объясните им без переводчика, что баги, посеянные в спеке, могут, как зараза, перенестись в код и тест-кейсы и баг, найденный раньше, стоит компании дешевле (об этом чуть позже), а посему учет таких багов является не правом, а обязанностью тестировщиков.

Следующий этап цикла разработки ПО — это кодирование, осуществляемое программистами (в то время как тестировщики планируют проверку пишущегося кода).

Кодирование Работа программиста заключается в том, чтобы перевести вещи, отраженные в спецификации (или словах босса), на язык программирования.

Перевод осуществляется • напрямую, т.е. программист берет спек и напрямую кодирует его предписания (плохая, недальновидная и опасная идея), • или после создания внутреннего дизайна кода, т.е. сугубо технической документации, планирующей, как требования спека будут воплощены в коде (хорошая, дальновидная и благодарная идея).

К документам о внутреннем дизайне кода относятся, например, • документ о дизайне /архитектуре системы (System /Architecture Design Document);

• документ о дизайне кода (Code Design Document).

развитие культуры создания и поддержания документации о внутреннем дизайне кода — это один из признаков, что стартап из шарашкиной конторы (пусть даже и с миллионным финансированием) превращается в серьезную софтверную компанию.

Идем дальше.

В идеальном случае каждый программист имеет личную версию сайта (или playground— игровую площадку), в которую входят:

• веб-сервер (web server);

• сервер с приложением (application server);

• база данных (database).

Коротко остановимся на каждом из этих компонентов.

Пример 1. Пользователь набирает в браузере: www.testshop.rs. Через Интернет запрос идет на веб-сервер, и в ответ на жесткий диск пользователя • файл index.htm, содержащий HTML (Hyper Text Markup Language)-код с инкорпорированным в нем JavaScript (читается как "джава-скрипт")кодом;

• файлы-картинки (images), на которые ссылается веб-страница index.htm. Эти картинки пользователь должен увидеть в веб-браузере на веб-странице index.htm.

Кстати, первая страница веб-сайта, которую мы по умолчанию видим в веб-браузере после набора URL веб-сайта (например, www.google.com), называется homepage.

Кстати, коммуникация между веб-браузером и веб-сервером осуществляется путем обмена сообщениями, основанными на протоколе, т.е.

своде правил, называемом HTTP (Hyper Text Transfer Protocol). Потоки таких сообщений, передающихся по компьютерной сети, называемой Интернетом, являются HTTP-трафиком (HTTP traffic).

2. Пользователь кликаетлинк "Регистрация" (веб-сервер присылает в ответ файл register.htm и слинкованные с ним картинки).

3. На странице register, htm пользователь вводит имя, е-мейл и прочие данные и отправляет форму, нажав кнопку "Зарегистрироваться".

4. Через веб-сервер эта форма, т.е. запрос о регистрации, поступает на сервер с приложением, которое • обрабатывает этот запрос;

• запрашивает базу данных, есть ли уже эккаунт с таким е-мейлом;

• обрабатывает ответ от базы данных;

• если е-мейл не найден, посылает запрос к базе данных о создании записи для нового пользователя;

• формирует ответ для пользователя;

• в виде веб-страницы с подтверждением регистрации или веб-страницы с ошибкой посылает пользователю ответ через веб-сервер.

Так вот, программисты разрабатывают код вышеупомянутого приложения, который впоследствии отдается на растерзание тестировщикам, в злорадном предвкушении потирающим ручонки и знающим, что причинами возникновения багов в коде являются как возможность программиста полдня бродить по Интернету, так и другие объективные вещи:

а. Некачественные и/или изменяющиеся спецификации Об этом мы уже говорили.

б. Личностные качества программиста Такие, как халатность, невнимательность и лень.

в. Отсутствие опыта Программист может просто не знать, как нужно сделать правильно.

г. Пренебрежение стандартами кодирования О стандартах чуть позже.

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

е. Баги в ПО третьих лиц, т.е. баги • в операционных системах;

• в компайлерах (compiler — ПО для переведения (например, C++) кода в машинный язык и создания исполняемых файлов);

ж. Отсутствие юнит-тестирования, х.е. тестирования кода самим программистом: "И вообще, почему я должен искать баги в своем коде, когда есть тестировщики?" (Поговорим о юнит-тестировании через минуту.) з. Нереально короткие сроки для разработки Об этом мы тоже скоро поговорим.

Возможности оздоровления кода и превентирования багов до передачи кода тестировщикам (иллюстрации последуют немедленно) включают:

1. Наличие требований к содержанию спеков и следование правилам их изменения;

2. Возможность прямой, быстрой и эффективной коммуникации между программистами и программистами и продюсерами;

3. Инспекции кода;

4. Стандарты программирования;

5. Реальные сроки;

6. Доступность документации;

7. Требования к проведению юнит-тестирования (о котором мы поговорим уже через 30 секунд);

8. Реальные финансовые рычаги стимуляции написания эффективного и "чистого" кода;

9. Наличие понятий "качество" и "счастье пользователя" как основных составляющих корпоративной философии.

Подробности.

1. НАЛИЧИЕ ТРЕБОВАНИЙ К СОДЕРЖАНИЮ СПЕКОВ

И СЛЕДОВАНИЕ ПРАВИЛАМ ИХ ИЗМЕНЕНИЯ

О спеках мы уже говорили.

2. ВОЗМОЖНОСТЬ ПРЯМОЙ, БЫСТРОЙ И ЭФФЕКТИВНОЙ

КОММУНИКАЦИИ МЕЖДУ ПРОГРАММИСТАМИ

И ПРОГРАММИСТАМИ И ПРОДЮСЕРАМИ

Здесь есть следующие аспекты:

а. Психологические аспекты Очень важно привить в культуру компании следующее правило:

"Если к тебе обратились — помоги".

Программист приходит к продюсеру с просьбой объяснить некую часть спека. Продюсер говорит, что он сейчас слишком занят. "Давай завтра, Очень часто после пары "давай завтра" программист что делает? Правильно! Он пишет код так, как его понимает, — без всякой гарантии, что сей код отразит требуемое.

Следующий аспект:

программист (как и все остальные участники цикла) никогда не должен стесняться спрашивать (хоть двести раз!) и подтверждать свое понимание е-мейлами типа: "Просто хотел уточнить, что я правильно понял, что пункт 12.2 такого-то спека говорит..." Если же программисту не отвечают, когда он подходит, прекрасно — нужно послать е-мейл и сохранить этот е-мейл, как и е-мейлы "Я хотел уточнить". Если снова не отвечают, программист должен идти к своему менеджеру и просить его принять меры. И это не стукачество, а деловая практика — business is business.

Следующий аспект:

Менеджмент должен регулярно устраивать так называемые Team Building Activities (мероприятия по сплочению коллектива) с той простой целью, чтобы между членами команды кроме профессиональных налаживались и человеческие контакты. Причем, как показывает опыт, совместный выезд для игры в пейнтбол раз в месяц гораздо эффективнее для сплочения коллектива, чем совместная проспиртовка мозгов во время пятничных застолий.

б. Технический аспект Каждый из участников цикла разработки ПО должен быть доступен для контакта: желательно, чтобы все они работали в одном здании; в локальной сети должны быть доступны служебные, мобильные и домашние телефоны; необходимо согласовать часы (хотя бы 4 часа в день), когда все (и тот, кто ушел в 6 часов вечера и в 3 утра) находятся в офисе.

3. ИНСПЕКЦИИ КОДА У некоторых программистов есть такая концепция: "Если я пишу код, который могу понять только я, то меня не уволят".

Ну, во-первых, при желании можно уволить даже президента лен: в интернет-компаниях никто никого силком не держит, и если ты согласился работать на определенных условиях, то будь добр работать профессионально и добросовестно.

Если же компания не выполняет взятых на себя обязательств (например, по оплате), то мы просто ищем другую компанию — ведь никто никому не давал клятву верности.

Постановка мозгов Компания держит каждого из нас до тех пор, пока мы ей нужны, и если какая-то конкретная позиция перестает быть необходимой для бизнеса, то человеку просто говорят: "Гуд бай" независимо от того, сколько у детей плачет по лавкам;

котов мяукает по печкам.

Как поет Тимур Шаов: "Это бизнес, господа..."

Вместе с тем, если вы находите компанию с лучшими для себя условиями и, работая на старом месте, прошли интервью и получили письменное предложение о работе, то вы просто идете к своему менеджеру и говорите, что собрались уходить, но можете подумать о том, чтобы остаться, только если компания сделает для вас то-то и то-то, например повысит заработную плату.

Несмотря на то что бизнес есть бизнес, нужно оставаться профессионалом, даже если предложение о новой работе удивительно выгодно и искушение все бросить велико. Никогда не уходите из компании, не передав дела и не закончив старые проекты. Ведите себя профессионально !

После небольшого отступления продолжаем основную тему.

В-третьих, чтобы избежать подобных проблем, чреватых багами и трудностью их фиксирования (fix — починка, ремонт), в компании должны проходить инспекции кода (code inspection).

Это может быть еженедельное совещание, например, следующего формата: менеджер программистов распечатывает код любого из программистов, и последний в присутствии коллег рассказывает, что, как и почему. Будет ли программист писать код, понятный только ему, если на совещании его обязательно спросят: "Товарищ, а что это вы здесь написали?"

4. СТАНДАРТЫ ПРОГРАММИРОВАНИЯ

С пунктом 3 перекликается идея создания стандартов программирования.

Вспомним Вавилонскую башню, а вернее, ТОТ момент строительства, когда все вдруг стали говорить на разных языках (множественность стандартов). Последствия печальны: проект был начисто заброшен, название кинокомедии "Some like it hot" перевели как "В джазе только девушки" и японские фанатки "Тагу" убеждены, что "Мальчигей" — это название места для романтических свиданий нетрадиционных девушек на Красной площади.

Такая же катавасия творится в компании, когда программисты вроде бы и используют тот же язык, например C++, но при написании кода каждый руководствуется своими привычками.

Допустим, что отсутствуют стандарты названия новых классов C++.

S этом случае, если Саня любит называть свои классы в формате "CREDITCARD" (все заглавные и нижнее подчеркивание), а Леха — "CreditCard" (заглавные только первые буквы каждого слова и слитное написание), то, например, Леха, не зная о привычках Сани, но верный своим привычкам, помня лишь "Кредиткард" и желая обратиться к функции из CREDITCARD, в своем коде так и запишет: "CreditCard". В итоге код не будет работать, так как C++, ничего не знающий ни о Лехе, ни о Сане, ни о кредитных картах, думает о CREDITCARD и CreditCard как об абсолютно разных классах.

Стандарты могут включать:

• правила о комментариях;

• правила об именах таблиц в базе данных, классов, функций и различных видов переменных;

• правила о максимальной длине строки;

• прочее.

Документ со стандартами должен быть доступен на интранете.

Стандарты программирования — это неотъемлемая часть процесса, когда в компании работают два программиста и больше. Они по определению должны быть обязательны для всех.

5. РЕАЛЬНЫЕ СРОКИ В стартапе изначально и по определению сроки на разработку нереальны, и приходится балансировать между • "поспешишь — людей насмешишь" и • необходимостью закончить кодирование в срок.

Несмотря на то что стопроцентно действующих рецептов нет, вот хорошая идея для облегчения нелегкой жизни программистов:

после ознакомления со спеками программисты должны предоставить менеджменту примерные оценки (сметы) сроков для разработки кода, и исходя из этих смет менеджмент может, если нужно • перераспределить нагрузку и • посмотреть, имеет ли смысл убирать что-то из менее приоритетных функционалъностей ради того, чтобы чисто и тщательно написать остальной код.

Единственное утешение состоит в том, что, когда стартап как бизнес становится более зрелым, сроки и рабочие часы стабилизируются во многом потому, что менеджмент понимает, что лучше дать реальный срок (например, перенеся некоторые из спеков в следующие релизы), чем поступиться качеством.

6 ДОСТУПНОСТЬ ДОКУМЕНТАЦИИ

ВСЕ документы, относящиеся к разработке ПО, включая спеки, процедуру изменения спека, стандарты программирования, тесткомплекты, и документы, о которых мы будем говорить в дальнейшем, должны быть доступны в локальной сети, и их расположение должно быть максимально оптимизировано для удобства и быстроты поиска. Все должно быть сделано для того, чтобы заинтересованный сотрудник быстро нашел нужный документ, а не тратил свое время и время своих коллег на долгие поиски.

Несмотря на кажущуюся очевидность и легковесность этого момента, несоблюдение правила о доступности ВСЕХ документов на практике может принести много проблем.

7. ТРЕБОВАНИЯ

К ПРОВЕДЕНИЮ ЮНИТ-ТЕСТИРОВАНИЯ

Юнит-тестирование (unit testing) — это тестирование, производимое самим программистом. Здесь нужно подчеркнуть, что неправильный подход к введению юнит-тестирования вызовет справедливое раздражение программистов, так как за тестирование платят тестировщикам, а отсутствие требований к юнит-тестированию вообще увеличит стоимость багов.

Постановка мозгов Стоимость бага — это • расходы компании, чтобы найти баг и исправить его до передачи кода пользователю. Расходы компании поддаются приблизительной оценке;

• убытки, которые несет компания, потому что баг не был найден до передачи кода пользователю. Объективная оценка убытков в большинстве случаев невозможна.

Подробности:

Стоимость бага в первом случае:

Если баг был допущен на уровне спека и найден во время тестирования кода, его стоимость вычисляется как стоимость оплаты продюсера в час, помноженная на количество часов, потраченных на разработку "неправильной" части спека (стоимость спека), плюс + стоимость программирования "неправильной" части спека плюс + стоимость тестирования "неправильной" части спека плюс + стоимость фиксирования бага и проблем, из него вытекающих.

Как видно, слагаемые поддаются приблизительной оценке.

Стоимость бага во втором случае:

Если баг был допущен на уровне спека, но не придушен до релиза и найден пользователем, то к стоимости, вычисляемой по формуле предыдущего случая, могут прибавиться десятки других убытков (включая упущенную выгоду), например:

• компенсации пользователю потерянных денег;

• навсегда утраченная потенциальная оплата услуг компании ушедшими пользователями и пользователями, которые по рекомендации ушедших никогда не заглянут на ваш веб-сайт, а также множество других плохих и неприятных вещей.

Наиболее важное в концепции стоимости бага — это то, что чем раньше будет найден баг, тем он будет дешевле для компании.

Таким образом, баг (а это, как мы знаем, может быть и отклонение от здравого смысла), найденный на уровне идеи, — это самый дешевый баг, соответственно баг, найденный после релиза, — это самый дорогой баг. Причем убытки от последнего, как правило, не поддаются объективной оценке.

Как видим, QA и тестирование — это не только обеспечение счастья пользователей, но и путь САМОСОХРАНЕНИЯ любой интернеткомпании.

Вернемся к юнит-тестированию. Вот две рекомендации:

1. Юнит-тесты должны планироваться в письменной форме ДО написания кода.

В таком случае программист после получения спека не бежит сломя голову писать код, а садится за документацию о дизайне кода с параллельным созданием юнит-тестов.

Полезность такого подхода заключается в том, что, во-первых, программист абстрагируется от непосредственного кодирования и, видя "большую картину", может предугадать принципиальные ошибки в алгоритмах и, во-вторых, он сможет заранее представить, КАК он будет тестировать код, это "КАК" занозой засядет у него в голове и при написании кода будет работать по принципу "предупрежден — значит вооружен".

2. Требования к юнит-тестам должны быть формализованы в стандартах о юнит-тестировании.

Например, каждая функция должна иметь по крайней мере один тест-кейс с одним конкретным вводом и одним конкретным выводом (ожидаемым результатом).

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

8. РЕАЛЬНЫЕ ФИНАНСОВЫЕ РЫЧАГИ

СТИМУЛЯЦИИ НАПИСАНИЯ ЭФФЕКТИВНОГО И

"ЧИСТОГО" КОДА Здесь все элементарно — менеджмент не должен жмотиться, если люди горбатятся на проект день и ночь, а в итоге не узнают своих подросших детей и называют своих жен Ленами (по имени коллеги, сидящей за соседним компьютером и ставшей почти родной).

• Хорошая заработная плата с возможностью увеличения;

• билеты в "Ленком";

• премии за хорошую работу;

• неограниченные чипсы и диет-кола;

• оплата абонемента в бассейн и гимнастический зал;

• месячные проездные;

• выезды для игры в пейнтбол;

• беспроцентный кредит на машину;

• помощь при первоначальном взносе на квартиру — чем больше заботы проявит компания о сотрудниках (и не только программистах), тем добросовестнее они будут работать, тем меньше будут получать втыков от жен — любительниц Louis Vuitton и тем больше будут радеть за свое место и качество кода, включая разработку дополнительных (от себя) юнит-тестов.

В общем нужно сделать так, чтобы профессионал не думал о том, как свести концы с концами, а работал, зная, что его труд будет достойно оценен, и видел, что компания заботится о нем.

9. НАЛИЧИЕ ПОНЯТИЙ "КАЧЕСТВО" И "СЧАСТЬЕ

ПОЛЬЗОВАТЕЛЯ" КАК ОСНОВНЫХ СОСТАВЛЯЮЩИХ

КОРПОРАТИВНОЙ ФИЛОСОФИИ

Менеджмент должен сделать так, чтобы персонал понимал, что "качество" и "счастье пользователя" — это не фикция, а путь к финансовому успеху компании и соответственно лучшей жизни каждого, кто работает над проектом. Если менеджеры посмеиваются над мерами по улучшению качества и отпускают шутки о пользователях (даже в курилке!), то это тлетворно действует на всех сотрудников компании и в конечном счете негативно скажется на пользователях, а следовательно, по принципу бумеранга и на самой компании, включая "юмористов".

Пользователи знают, уважают их или нет, уже после одного сообщения об ошибке, одного е-мейла от компании или одного звонка в службу поддержки, и если философия компании — это "тупые юзеры", то, поверьте, она проявится, на радость конкурентам, во многих вещах.

Теперь поговорим о трех основных занятиях программиста:

1. Написание кода для данного релиза происходит во время стадии "Кодирование".

2. Интеграция кода для данного релиза происходит по завершении стадии "Кодирование".

3. Ремонт багов для данного релиза происходит во время стадии "Кодирование" следующего витка цикла разработки ПО (соответственно в пункте 1 программист ремонтировал баги для предыдущего релиза).

Техническая версия 1. НАПИСАНИЕ КОДА Один программист написал: parent_value = 1. Другой программист написал: child_value = parent_valu + 3.

2. ИНТЕГРАЦИЯ КОДА а. Пытаемся два куска кода соединить в один:

child_value = parent_valu + 3.

б. Код не компилируется (компайлер выдает ошибку о неоп ределенной переменной), так как второй программист на писал parent valu вместо parent value.

в. Код второго программиста фиксируется:

child_value —parent_value + 3.

г. Пытаемся два куска кода соединить в один:

child_value = parent_value + 3.

д. Код компилируется, но первый программист выполняет юнит-тест, по которому parent_yalue должно быть равно 7.

е. Код первого программиста фиксируется:

ж. Пытаемся два куска кода соединить в один:

child_value = parent_value + 3.

з. Вроде все в порядке, передаем тестировщикам — пусть они тра... маются.

3. РЕМОНТ БАГОВ Согласно спецификации должно быть:

child_value - parent_yalue x 3.

Тестировщик рапортует баг, и на основании этого бага программист меняет код.

Лирическая версия 1. НАПИСАНИЕ КОДА О написании кода мы уже говорили. Один момент:

Качество работы программиста не должно оцениваться по количеству багов, которые он взрастил, так как помимо таких субъективных вещей, как профессионализм и добросовестность, на наличие багов влияет множество других объективных факторов, о которых мы упоминали (нехватка времени, плохие спеки и т.д.).

2. ИНТЕГРАЦИЯ КОДА Вариант 1. Неблагодарный После того как код написан на игровой площадке каждого из программистов, происходит интеграция кода, когда тысячи строк кода разных авторов компилируются на одном компьютере, наезжают друг на друга, спотыкаются, огрызаются и дарят релизинженерам, производящим интеграцию, сомнения в принципиальном наличии вселенской гармонии.

Собрали четырех отличных художников, причем каждый должен выполнить заказ на куске прозрачной пленки 50x50 см:

• задание первому: нарисовать удрученного, стоящего на коленях • задание второму: нарисовать милостиво склонившегося старика;

• задание третьему: нарисовать фон, вызывающий сострадание;

• задание четвертому: нарисовать группу печальных людей.

"В общем, парни, генеральная идея... эта... типа как у этого... О! У РембраНа: возвращение загулявшего сына".

Неудивительно, что мы прочувствуем всю боль релиз-инженеров, когда соединим четыре рисунка вместе и увидим • удрученного великана, стоящего на коленях над • гладящим промокшую болонку • в окружении заспанных курсантов-суворовцев.

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

Вариант 2. Благодарный Чтобы избежать проблем, когда в один момент происходит массированная интеграция кодов разных авторов, как в Варианте 1, сания нового кода (т.е. стадия 1 и стадия 2 цикла разработки кода сливаются в одну стадию), что дает возможность выявить нестыковки между кодами разных авторов на раннем этапе.

3. РЕМОНТ БАГОВ...

происходит во время стадии "Тестирование и ремонт багов", после того как код для данного релиза был заморожен и программисты работают над кодом для нового релиза.

Необходимость в замораживании кода вызвана тем, что продукт (в данном случае код) должен быть в каком-то устойчивом виде, чтобы его проверили.

Пример Представьте следующую ситуацию:

1. Программист закончил работу над функциональностью А;

2. Тестировщик проверил, что функциональность А работает, и дал 3. За час до релиза программист вносит маленькое изменение в код, которое в теории ничего не ломает...

а на практике приводит к тому, что функциональность В, связанная с А, абсолютно перестает работать, т.е. получилось так, что тестировщик попросту потерял время (а значит, и деньги компании), тестируя не финальную версию продукта.

Из сказанного вытекают две принципиально важные для тестировщика вещи. Перед началом тестирования нужно убедиться, что • код заморожен (обычно релиз-инженеры посылают соответствующий е-мейл);

• версия продукта на внутреннем сайте, на котором вы будете производить тестирование, является именно той версией, которую вам нужно протестировать.

Пример Допустим, что на интранете у нас есть два внутренних тестировочных веб-сайта, недоступных для пользователей:

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

Так вот в окне веб-браузера функциональность А может выглядеть абсолютно одинаково и на Эвересте, и на Эльбрусе, но ее бэк-энд будет существенно различаться на этих двух сайтах.

Допустим, тестировщик собирается проверить функциональность А версии 2.0, но ошибочно использует для тестирования Эверест (с версией 1.0), вследствие чего он не только впустую тратит время, но и рискует дать добро на релиз непротестированного кода функциональности А версии 2.0.

Подобные ошибки возникают, как правило, по небрежности или незнанию тестировщика и из-за "нелогичных" названий внутренних веб-сайтов.

Пути предотвращения ситуации, когда тестировщик тестирует не ту версию ПО:

1. Узнайте у релиз-инженера, как определить версию кода, и используйте сие знание перед началом исполнения тестирования;

2. Посоветуйте, чтобы внутренние веб-сайты имели логичные имена. Например, версия кода, переданного пользователю, всегда должна быть на внутреннем сайте по адресу www.old.testshop.rs, а версия для следующего релиза — на www.main.testshop.rs;

3. Попросите релиз-инженеров, чтобы те создали на интранете динамически обновляемую страничку с информацией • подверсии, т.е. билде (об этом позже), каждого внутреннего тестировочного веб-сайта.

В завершение кодирования поговорим еще о паре вещей.

Хотя и спеки, а иногда даже и сами идеи для спеков — ребятки не без греха, большинство багов зачинается именно при написании кода. При кодировании появляется присущий только этой стадии и одновременно самый простой в нахождении вид бага — синтаксический баг (syntax bug).

Прелесть синтаксических багов заключается в том, что они, являясь ошибками в языке программирования, находятся компайлером (например, в случае с C++) автоматически. Последний дает исполняемый файл, пока проблема не будет зафиксирована (в скриптовых языках, таких, как Python, исполняемым файлом является сам файл с кодом и синтаксические баги находит интерпретатор языка).

Пример Вот первая программка любого изучающего C++:

3. voidmain()

Pages:     | 1 ||
Похожие работы:

«История и тенденции развития управления проектами. Ассоциация Управления Проектами СОВНЕТ Источник: Управление проектами. Основы профессиональных знаний. Национальные требования к компетентности специалистов. СОВНЕТ, 2001 г. 40. Управление проектами в России Ключевое определение: Управление проектами за рубежом (Project Management in Russia) – раздел знаний управления проектами, включающий исторический очерк и тенденции развития профессионального управления проектами в России. Включает основные...»

«Министерство образования Республики Беларусь Учебно-методическое объединение по образованию в области культуры и искусств УТВЕРЖДАЮ Первый заместитель Министра образования Республики Беларусь А. И. Жук _2011 г. Регистрационный № ТД-_ /тип. РАБОТА В МАТЕРИАЛЕ Типовая учебная программа для высших учебных заведений по направлению специальности 1-19 01 01-05 Дизайн (костюма и тканей) (специализация 1-19 01 01-05 04 Дизайн текстильных изделий) СОГЛАСОВАНО СОГЛАСОВАНО Заместитель председателя...»

«РАБОЧАЯ ПРОГРАММА УЧЕБНОЙ ДИСЦИПЛИНЫ (РПУД) Организационные основы системы образования: нормативноправовые основы деятельности преподавателя в вузе (для ДОП Преподаватель высшей школы) Начало титульного листа Правительство Российской Федерации Санкт-Петербургский государственный университет Факультет психологии РАБОЧАЯ ПРОГРАММА УЧЕБНОЙ ДИСЦИПЛИНЫ СД-03 Организационные основы системы образования: нормативно-правовые основы деятельности преподавателя в вузе по дополнительной образовательной...»

«ФЕДЕРАЛЬНОЕ АГЕНТСТВО ЛЕСНОГО ХОЗЯЙСТВА РОССИЙСКОЙ ФЕДЕРАЦИИ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ УЧРЕЖДЕНИЕ УЧЕБНО-МЕТОДИЧЕСКИЙ ЦЕНТР ПРИМЕРНАЯ ПРОГРАММА ПРОФЕССИОНАЛЬНОГО МОДУЛЯ Организация и проведение мероприятий по охране и защите лесов специальность 250110 Лесное и лесопарковое хозяйство (базовой подготовки) п. Правдинский 2011 Примерная программа профессионального модуля Организация и проведение мероприятий по охране и защите лесов (базовой подготовки) разработана на основе федерального...»

«Постановление Правительства Республики Мордовия от 17 декабря 2012 г. N 470 О Республиканской территориальной программе государственных гарантий бесплатного оказания населению Республики Мордовия медицинской помощи на 2013 год и на плановый период 2014 и 2015 годов Во исполнение пункта 3 постановления Правительства Российской Федерации от 22 октября 2012 г. N 1074 О Программе государственных гарантий бесплатного оказания гражданам медицинской помощи на 2013 год и на плановый период 2014 и 2015...»

«Пояснительная записка Программа по изобразительному искусству разработана с учётом требований Федерального государственного образовательного стандарта начального общего образования. Содержание программы Изобразительное искусство соответствует следующим целям: — приобщение школьников к миру изобразительного искусства, развитие их творчества и духовной культуры; — освоение первичных знаний о мире пластических искусств: изобразительном, декоративно-прикладном, архитектуре, дизайне; о формах их...»

«Государственное образовательное учреждение среднего профессионального образования города Москвы Спортивно-педагогический Колледж Департамента физической культуры и спорта города Москвы РАБОЧАЯ ПРОГРАММА дисциплины Теория и организация адаптивной физической культуры для специальности 050720(52) Физическая культура 2011 год 1 Одобрена кафедрой Составлена в соответствии с психолого-педагогических Государственными требованиями к минимуму и медико-биологических содержания и уровню подготовки...»

«Рабочая программа профессионального модуля Проведение лабораторных гематологических исследований (ПМ.02) разработана на основе Федерального государственного образовательного стандарта (ФГОС) среднего профессионального образования по специальности 060604 Лабораторная диагностика Организация-разработчик: ГАОУ СПО АО АМК Разработчик: Письменная С.В., преподаватель высшей квалификационной категории ГАОУ СПО АО АМК Рассмотрена и рекомендована к утверждению методическим Советом Архангельского...»

«Государственное бюджетное образовательное учреждение высшего профессионального образования Воронежская государственная медицинская академия имени Н.Н.Бурденко Министерства здравоохранения и социального развития Российской Федерации ОСНОВНАЯ ПРОФЕССИОНАЛЬНАЯ ОБРАЗОВАТЕЛЬНАЯ ПРОГРАММА ПОСЛЕВУЗОВСКОГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ ПО СПЕЦИАЛЬНОСТИ ПСИХИАТРИЯ (интернатура) Воронеж - 2012 ОДОБРЕНА Ученым Советом ГБОУ ВПО ВГМА им. Н.Н. Бурденко Минздравсоцразвития России 26.04.2012 г. протокол №...»

«ДЕПАРТАМЕНТ ОБРАЗОВАНИЯ ВОЛОГОДСКОЙ ОБЛАСТИ УТВЕРЖДАЮ Директор БОУ СПО ВО Вологодский политехнический техникум _ /М.В.Кирбитов/ _20_г. ПРОГРАММА ПРОФЕССИОНАЛЬНОГО МОДУЛЯ Организация деятельности коллектива исполнителей Вологда 2011 г. 1 Программа профессионального модуля разработана на основе Федерального государственного образовательного стандарта по специальности среднего профессионального образования (далее – СПО) 190631 Техническое обслуживание и ремонт автомобильного транспорта...»

«Министерство образования и наук и Украины Днепропетровская областная государственная администрация Национальный горный университет МАТЕРИАЛЫ Международной научно-технической конференции Дніпро-М Проблемы механики горно-металлургического комплекса 28 - 31 мая 2002 года Днепропетровск 2002 1 28 - 31 мая 2002 года в Национальном горном университете состоялась международная научно-техническая конференция Проблемы механики горно–металлургического комплекса Организаторами конференции выступили...»

«Мария Терещенко: Скорее статья в женском журнале, чем научная работа http://animalife.ru/2013/11/28/mariya-tereshhenko-ob-animacionnoj-chasti-proekta-koncepciiinformacionnoj-bezopasnosti-detej/ 28.11.2013 Программный директор Большого фестиваля мультфильмов, журналист Мария Терещенко прочитала разделы проекта Концепции информационной безопасности детей, посвященные анимационному кино, и ей показалось, что авторы скорее писали статью в женском журнале, чем научную работу по сложнейшей теме. —...»

«1 ОПОП рассмотрен(о) и одобрен(о) на заседании Методической комиссии _ Протокол № от _ Председатель МК: _ Программа профессионального модуля разработана на основе Федерального государственного образовательного стандарта по профессии среднего профессионального образования (далее – НПО) 260807.01 Повар, кондитер Организация-разработчик: Государственное бюджетное образовательное учреждение начального профессионального образования профессиональный лицей№ 24 г.Сибай Республики Башкортостан....»

«МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ федеральное государственное бюджетное образовательное учреждение высшего профессионального образования Кузбасский государственный технический университет имени Т.Ф. Горбачева Кафедра химии и технологии неорганических веществ Рабочая программа дисциплины Научно-исследовательская работа Направление подготовки магистров 240100.68 Химическая технология Профиль 240103.68 Химическая технология неорганических веществ М3.Б.1 Трудоемкость дисциплины...»

«МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ МОСКОВСКИЙ ЭНЕРГЕТИЧЕСКИЙ ИНСТИТУТ (ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ) ИНСТИТУТ ТЕПЛОВОЙ И АТОМНОЙ ЭНЕРГЕТИКИ (ИТАЭ) (ЦППОЭ и ТЭС) Направление подготовки: 140100 Теплоэнергетика и теплотехника Профиль(и) подготовки: - Тепловые и атомные электростанции, Схемы, оборудование и эксплуатация энергетических установок, Технологические процессы и производства - Природоохранные технологии на ТЭС, Парогазовые и газотурбинные установки ТЭС, Технология воды и топлива на ТЭС, -...»

«Рабочая программа профессионального модуля разработана на основе Федерального государственного образовательного стандарта (ФГОС) среднего профессионального образования по специальности 060301 Фармация. Организация-разработчик: ГАОУ СПО АО АМК Разработчики: Афанасьева Е.П., преподаватель ГАОУ СПО АО АМК Дресвянина Н.В., преподаватель первой квалификационной категории ГАОУ СПО АО АМК Иванова Т.Е., преподаватель высшей квалификационной категории ГАОУ СПО АО АМК Пиковская Г.А., преподаватель высшей...»

«САНКТ-ПЕТЕРБУРГСКИЙ УНИВЕРСИТЕТ УПРАВЛЕНИЯ И ЭКОНОМИКИ ФАКУЛЬТЕТ СОЦИАЛЬНОГО УПРАВЛЕНИЯ Кафедра психологии РАБОЧАЯ ПРОГРАММА ДИСЦИПЛИНЫ СОЦИАЛЬНАЯ ПСИХОЛОГИЯ ОБЩЕНИЯ И ВЗАИМОJ(Е~ЙСТВИЯ Для специальности 19.00.05- Социальная психология Санкт-Петербург 2011 Рабочая программа дисциплины Социальная психология общения и взаимодействия рекомендована к изданию кафедрой психологии. Протокол N~ 10 от 07 июня г. 2011 Рабочая программа дисциплины Социальная психология общения и взаимодействия обсуждена и...»

«МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ Башантинский аграрный колледж им. Ф. Г. Попова (филиал) ГОУ ВПО КАЛМЫЦКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ РАБОЧАЯ ПРОГРАММА ПРОФЕССИОНАЛЬНОГО МОДУЛЯ Выполнение работ по рабочей профессии 2011 г. Рабочая программа профессионального модуля разработана на основе Федерального государственного образовательного стандарта по специальностям среднего профессионального образования (далее – СПО) 111 801 Ветеринария. Организация-разработчик: Башантинский...»

«Департамент образования и науки Брянской области Государственное бюджетное образовательное учреждение среднего профессионального образования Брянский техникум энергомашиностроения и радиоэлектроники Рабочая программа Профессионального модуля ПМ. 02 Сварка и резка деталей из различных сталей, цветных металлов и их сплавов, чугунов во всех пространственных положения по профессии среднего профессионального образования 150709.02 Сварщик (электросварочные и газосварочные работы) Брянск 2013 год...»

«МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ КРАСНОЯРСКОГО КРАЯ КРАЕВОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ НАЧАЛЬНОГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ ПРОФЕССИОНАЛЬНОЕ УЧИЛИЩЕ № 79 П. КОШУРНИКОВО УТВЕРЖДАЮ: Зам. директора по УПР _И.Ф. Копнина _20г. РАБОЧАЯ ПРОГРАММА ПРОФЕССИОНАЛЬНОГО МОДУЛЯ ПМ.05 Приготовление блюд из мяса и домашней птицы Профессия 260807.01 Повар, кондитер Нормативный срок обучения – 2 года и 5 мес. на базе основного общего образования Рабочая программа профессионального...»




























 
2014 www.av.disus.ru - «Бесплатная электронная библиотека - Авторефераты, Диссертации, Монографии, Программы»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.