Текст книги "tестирование dot com"
Автор книги: Роман Савин
Жанры:
Интернет
,сообщить о нарушении
Текущая страница: 5 (всего у книги 17 страниц)
началась.
14 ноября. У Буханкина новая идея. Спек по-тихому изменен.
15 ноября. Спек распечатывает для себя программист Ложкин. Работа
по спеку началась.
16 ноября. У Буханкина новая идея. Спек по-тихому изменен.
17 ноября. Спек распечатывает для себя программистТарелкин. Работа
по спеку началась.
18 ноября. У Буханкина новая идея. Спек по-тихому изменен.
19 ноября. Спек распечатывает для себя программист Салфетка, рабо-
тающий над кодом по интеграции функциональности кода из этого
и своего спека. Работа по спеку началась.
25 декабря. Все выясняется. 30
декабря.
17:00 – начало празднования Нового года в офисе компании.
17:30 – начало избиения Буханкина руками Ножова, Ложкина и Та-
релкина.
18:00 – начало избиения Буханкина ногами Ножова, Ложкина и Та-
релкина.
18:30 – в офис влетает Салфетка, вернувшийся после разговора с
менеджером, разбрасывает в стороны подуставших Ножова,
Ложкина и Тарелкина и добивает Буханкина контрольным
ударом клавой по голове.
Надо отметить, что во многих случаях спек меняется не по воле
продюсера, а по приказу сверху.
Ситуация
25 марта.
Менеджер присылает продюсеру е-мейл, что необходимо срочно
изменить спек #8337.
За день до этого, т.е. 24 марта.
Представьте себя на месте продюсера:
продюсер уже вовсю работает над новым спеком и надеется, что
релиз функциональностей согласно спеку #8337 пройдет без сучка
без задоринки.
Представьте себя на месте программиста: код для спека
#8337 написан, влегкую протестирован самим программистом,
частично позабыт и уже кажется частью безвозвратно потерянной
юности.
Представьте себя на месте тестировщика:
документация для тестирования спека #8337 написана. Новые проекты
бьют в паруса, и настоящее наконец-то стало залечивать раны прошлого.
На следующий день, т.е. 26 марта.
Спек #8337, а также код и тест-кейсы к нему должны быть изменены,
т.е. минимум трое работников должны
Цикл разработки ПО
79
• бросить текущие проекты,
• вспомнить спек #8337, понять изменения к нему и
• потратить время на воплощение изменений.
Эта ситуация является идеальной питательной средой для воз-
никновения багов, так как это будет работа (включая продюсера)
на скорую руку, как правило, без возможности погрузиться в этот
прошлый проект и понять риск внесения изменений. Мало того,
новые проекты также могут
а) пострадать или
б) даже быть отложенными
из-за того, что
а) на них будет потрачено меньше времени или
б) времени может физически не хватить.
Что же нам делать, чтобы избежать кордебалета с изменяю-
щимися спеками?
Если менеджер говорит, что нужно изменить спек, или продюсер
"вспомнил" о реально важной вещи для спека и эти "НУЖНО"
или "ВСПОМНИЛ" приходятся на самое наинеподходящее время,
то никуда не денешься, но все же две очень нехорошие ситуации,
связанные с изменением спека, можно превентировать.
Две нехорошие ситуации:
1. Спек может быть изменен по-тихому.
2. Изменения к спеку не утверждены программистом и тес-
тировщиком.
Вопрос: Как конкретно мы превентируем две нехорошие ситуации?
Ответ: Мы заморозим спек.
В любой интернет-компании существует программа контроля за
версиями. Во многих случаях это старая добрая CVS («си-ви-эс» —
Concurrent Version System – система по согласованным версиям).
CVS – вещь многофункциональная, и мы о ней еще поговорим,
но сейчас она нам будет полезна для следующего:
1. С помощью CVS продюсер может сохранять версии спека и
всегда вернуться к старым редакциям.
2. С помощью CVS можно «закрыть» директорию так, чтобы
документы из этой директории могли читаться, но не мог-
ли редактироваться.
80
Тестирование Дот Ком. Часть 1
Процессуально все можно сделать так:
1. К определенной дате все спеки должны быть утверждены.
Неутвержденный спек не кодируется, и точка.
2. Директория со всеми утвержденными спеками закрывается,
и никто ничего не может изменить в этой директории...
...если только не будет следовать процедуре изменения спека.
Кстати,
техническую сторону, связанную с заморозкой спеков (spec freeze), обес-
печивают инженеры по релизу.
Процедура включает:
1. Утверждение всех изменений составом лиц, утвердившим
предыдущую редакцию.
2. Посылку е-мейла с перечислением изменений и именами
утвердивших всем департаментам, непосредственно свя-
занным с разработкой ПО (продюсеры, программисты,
тестировщики и инженеры по релизу). Одно из хороших
качеств такого е-мейла – это то, что люди, не участво-
вавшие в пункте 1 и имеющие старую версию спека, тоже
узнают об изменениях.
3. Открытие CVS-директории для закладки файла и ее закрытие.
Конечно, без изменений в спеках не обойтись, но путем
1) замораживания спеков;
2) введения процедуры изменения спека;
3) тщательного рассмотрения необходимости каждого из-
менения спека с участием менеджмента
можно превентировать ряд серьезных проблем с качеством.
Идем дальше.
Одна из частых причин, по которым в ПО появляются баги кода, —
это неверное толкование спека (misinterpretation) – ситуация,
когда программисты и/или тестировщики, работающие со спе-
ком, понимают по-своему то, что пытался донести до них продю-
сер, и при этом
• на 100% уверены, что на 100% понимают то, что имел в
виду продюсер, и,
• имея уверенность, не уточняют, так как не будешь же бе-
гать за уточнениями того, что тебе и так ясно.
Цикл разработки ПО
81
Причина неверного толкования спека может быть связана
• с одной стороны, с возможностью множественного тол-
кования некой части спека и,
• с другой – с тем фактом, что многие вещи в этой жизни,
для того чтобы быть адекватно понятыми разными людь-
ми, нуждаются в многоплановой презентации.
Кстати, именно поэтому на чертеже физического объекта (например,
двигателя мотоцикла) последний обычно изображается с трех сторон:
вид спереди, вид сверху и вид слева.
Тезис
Тестировщики должны настаивать, чтобы спеки по максимуму
иллюстрировались:
• макетами (mock-up),
• блок-схемами (flow chart),
• примерами (example).
Аргументация
С примерами все понятно: написал что-то – придумай пример
для иллюстрации, заодно и сам лучше поймешь, о чем пишешь.
Народная мудрость гласит: "Лучше один раз увидеть, чем сто раз
услышать". Отличной идеей является разработка продюсером
макетов интерфейса пользователя (User Interface или просто UI —
"ю-ай"). Делается это так:
во время (или после) написания спека продюсер берет генератор
веб-страниц типа Microsoft FrontPage и путем нехитрых манипу-
ляций создает веб-страницу с кнопками, полями, картинками и
прочими милыми деталями интерфейса.
Затем эта страничка "подшивается" к спеку и помогает всем за-
интересованным лицам увидеть, ЧТО, по замыслу продюсера,
должен будет увидеть пользователь.
Кстати, если спецификация предусматривает, что пользователь будет
проходить через несколько веб-страниц для совершения какого-либо
действия (например, покупки книги), то макеты этих веб-страниц могут
не только являться частью спека, но и служить в качестве обоев, если
их развесить на стенах офиса в том порядке, в котором их будет видеть
пользователь.
82
Тестирование Дот Ком. Часть 1
Пример
Вольное изложение опека #1023 «Регистрация нового пользователя»:
Регистрация пользователя состоит из трех страниц, идущих в следую-
щем порядке:
• первая страница (1) – поле для индекса места жительства
пользователя и кнопка «Продолжить регистрацию»;
• вторая страница (2) – поля для имени, фамилии, е-мейла и па-
роля/подтверждения пароля пользователя, кнопка "Зарегистри-
роваться";
• третья страница (3) – текст с подтверждением регистрации.
Все поля обязательны для заполнения, и если на странице (1) или (2)
вводится недействительное либо пустое значение любого поля, то
пользователю показывается та же страница, но с сообщением об
ошибке (error message). (В данном случае мы не будем говорить о том,
какой ввод действителен (легитимен) для каждого из полей, так как это
сейчас неважно.)
Продюсер разрабатывает три страницы, распечатывает их в двух ком-
плектах, один из которых подшивает к спеку, а другой развешивает на
стене в порядке появления перед пользователем: страница (1), стра-
ница (2), страница (3).
Оговорка 1: Макеты могут быть разной степени детализации, и
вполне допустимо, когда элементы интерфейса, не имеющие от-
ношения к иллюстрируемому спеку, не включаются в макет, на-
пример, в случае с макетами для регистрации нас не интересуют
картинки на веб-странице.
Оговорка 2: Понятно, что макеты интерфейса пользователя не
создаются, если спек полностью посвящен бэк-энду веб-сайта
(например, спек "Автоматизация отчетов по продажам"), так как
детали интерфейса пользователя, т.е. фронт-энд, в таком спеке
просто не упоминаются.
Проблема макетов (даже развешанных правильно) заключается в
том, что они позволяют увидеть в первую очередь интерфейс
пользователя, а не логику работы кода позади интерфейса, на-
зываемую алгоритмом программы.
Интерфейс – это то, ЧТО видит пользователь, а алгоритм –
это то, ПОЧЕМУ пользователь видит то, что он видит.
Для графической презентации алгоритмов используются блок-
схемы, так горячо любимые всеми выпускниками математиче-
ского класса выпуска 1990 г. люберецкой школы № 12.
Цикл разработки ПО
83
Пример
Представим предыдущую ситуацию с регистрацией, но в форме блок-
схемы (такая блок-схема называется process flow chart, так как устроена
по схеме ввод->процесс->вывод).
Кстати, блок-схемы могут создаваться как продюсером, так и
тестировщиком, но независимо от составителя, как правило,
прекрасной идеей является включение блок-схемы в секцию тест-
комплекта GLOBAL SETUP and ADDITIONAL INFO.
Блок-схемы, макеты и примеры (вместе именуемые БМП) помо-
гают превентировать появление багов или найти баги на
уровне спека следующими путями:
84
Тестирование Дот Ком. Часть 1
• БМП – это описание предмета с разных сторон, что ведет
к его адекватному толкованию разными людьми;
• создание БМП – это процесс переосмысления написан-
ного, что ведет к нахождению багов в написанном, т.е. в
спеке;
• макеты и блок-схемы наглядны и во многих случаях по-
зволяют в буквальном смысле увидеть баги в отличие от
ситуации, когда есть только текст.
Еще раз: тестировщики должны настаивать, чтобы спеки по
максимуму иллюстрировались макетами (тоск-ир), блок-схе-
мами (flow chart) и примерами (example).
Теперь, после того как вы услышали про макеты и пошли дальше,
не увидев их (что было сделано намеренно – с целью дать вам
прочувствовать контраст между работой без макетов и с ними),
позвольте представить вам макеты «Регистрации»:
Макет страницы (1)
Макет страницы (2)
* поле обязательно для заполнения
Цикл разработки ПО
85
Макет страницы (3)
Регистрация завершена, Нажмите сюда для
логина
Бонус: Макет страницы (2) в случае ошибки пользователя при
заполнении поля "Е-мейл"
Ошибка
I Проверьте правильность заполнения поля:
Е-мейл
2. Заново введите пароль
* поле обязательно для заполнения
Кстати, макет страницы (2) и бонус-макет страницы (2) противоречат
спеку: по спеку поле «Фамилия» является обязательным для заполнения, но
на макетах оно не выделено звездочкой. Противоречие внутри спека —
это баг, так как любая инструкция теряет смысл, если ее указания не
стыкуются друг с другом.
Постановка мозгов
При обнаружении противоречий внутри спека (а БМП – это части спека!)
нужно сделать рапорт о баге против продюсера, чтобы тот настроил в
унисон несогласующиеся части. В нашем случае продюсер должен из-
менить либо текстовую часть спека ("все поля являются обязательными,
кроме поля «Фамилия»), либо соответствующие макеты (добавить
звездочку к полю «Фамилия»).
Идем дальше.
86
Тестирование Дот Ком. Часть 1
В заключение краткого экскурса о спеках дам еще одну полезную
идею.
Каждая более или менее уважающая себя компания имеет свой
сайт в локальной сети (intranet), который недоступен внешним
пользователям. На этом сайте можно прочитать тезисы о корпо-
ративной морали, узнать имя любимого лемура президента ком-
пании, посмотреть фотографии тех, кто по-тихому правит утвер-
жденные спеки, и найти много другой полезной информации. Так
вот, все когда-либо утвержденные спеки должны быть выло-
жены на этот сайт. При этом они группируются по номеру релиза
и доступны для просмотра, поиска по директориям (название
директории – номер релиза), ID, ключевым словам в названии и
имени продюсера. Если спек ссылается на внешний документ
(например, на правила расчетов Центрального банка), то спек
должен содержать гиперлинк на адрес такого документа в локаль-
ной сети.
Постановка мозгов
Не стесняйтесь рапортовать баги, которые вы будете находить в
спеках. Если продюсеры не понимают, то объясните им без пере-
водчика, что баги, посеянные в спеке, могут, как зараза, перенестись
в код и тест-кейсы и баг, найденный раньше, стоит компании дешевле
(об этом чуть позже), а посему учет таких багов является не правом,
а обязанностью тестировщиков.
Следующий этап цикла разработки ПО – это кодирование, осу-
ществляемое программистами (в то время как тестировщики
планируют проверку пишущегося кода).
Кодирование
Работа программиста заключается в том, чтобы перевести вещи,
отраженные в спецификации (или словах босса), на язык про-
граммирования.
Перевод осуществляется
• напрямую, т.е. программист берет спек и напрямую кодирует
его предписания (плохая, недальновидная и опасная идея),
• или после создания внутреннего дизайна кода, т.е. сугубо
технической документации, планирующей, как требова-
ния спека будут воплощены в коде (хорошая, дальновидная
и благодарная идея).
Цикл разработки ПО
87
К документам о внутреннем дизайне кода относятся, например,
• документ о дизайне /архитектуре системы (System /Architec-
ture 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 пользователь вводит имя, е-мейл и прочие
данные и отправляет форму, нажав кнопку «Зарегистрироваться».
88
Тестирование Дот Ком. Часть 1
4. Через веб-сервер эта форма, т.е. запрос о регистрации, поступает
на сервер с приложением, которое
• обрабатывает этот запрос;
• запрашивает базу данных, есть ли уже эккаунт с таким е-мейлом;
• обрабатывает ответ от базы данных;
• если е-мейл не найден, посылает запрос к базе данных о созда-
нии записи для нового пользователя;
• формирует ответ для пользователя;
• в виде веб-страницы с подтверждением регистрации или веб-стра-
ницы с ошибкой посылает пользователю ответ через веб-сервер.
Так вот, программисты разрабатывают код вышеупомянутого
приложения, который впоследствии отдается на растерзание тес-
тировщикам, в злорадном предвкушении потирающим ручонки и
знающим, что причинами возникновения багов в коде явля-
ются как возможность программиста полдня бродить по Интер-
нету, так и другие объективные вещи:
а. Некачественные и/или изменяющиеся спецификации
Об этом мы уже говорили.
б. Личностные качества программиста
Такие, как халатность, невнимательность и лень.
в. Отсутствие опыта
Программист может просто не знать, как нужно сделать пра-
вильно.
г. Пренебрежение стандартами кодирования
О стандартах чуть позже.
д. Сложность системы
Современные интернет-проекты отличаются такой сложностью,
что мозг простого смертного порой просто не в состоянии про-
анализировать все последствия создания/изменения/удаления
кода и предугадать появление проблемы.
е. Баги в ПО третьих лиц, т.е. баги
• в операционных системах;
• в компайлерах (compiler – ПО для переведения (напри-
мер, C++) кода в машинный язык и создания исполняе-
мых файлов);
• в веб-серверах;
• в базах данных и др.
Цикл разработки ПО
89
ж. Отсутствие юнит-тестирования,
х.е. тестирования кода самим программистом: "И вообще, почему
я должен искать баги в своем коде, когда есть тестировщики?"
(Поговорим о юнит-тестировании через минуту.)
з. Нереально короткие сроки для разработки
Об этом мы тоже скоро поговорим.
Возможности оздоровления кода и превентирования багов до
передачи кода тестировщикам (иллюстрации последуют не-
медленно) включают:
1. Наличие требований к содержанию спеков и следова-
ние правилам их изменения;
2. Возможность прямой, быстрой и эффективной комму-
никации между программистами и программистами и
продюсерами;
3. Инспекции кода;
4. Стандарты программирования;
5. Реальные сроки;
6. Доступность документации;
7. Требования к проведению юнит-тестирования (о кото-
ром мы поговорим уже через 30 секунд);
8. Реальные финансовые рычаги стимуляции написания
эффективного и «чистого» кода;
9. Наличие понятий «качество» и «счастье пользователя»
как основных составляющих корпоративной философии.
Подробности.
1. НАЛИЧИЕ ТРЕБОВАНИЙ К СОДЕРЖАНИЮ СПЕКОВ
И СЛЕДОВАНИЕ ПРАВИЛАМ ИХ ИЗМЕНЕНИЯ
О спеках мы уже говорили.
2. ВОЗМОЖНОСТЬ ПРЯМОЙ, БЫСТРОЙ И ЭФФЕКТИВНОЙ
КОММУНИКАЦИИ МЕЖДУ ПРОГРАММИСТАМИ
И ПРОГРАММИСТАМИ И ПРОДЮСЕРАМИ
Здесь есть следующие аспекты:
а. Психологические аспекты
Очень важно привить в культуру компании следующее правило:
«Если к тебе обратились – помоги».
90
Тестирование Дот Ком. Часть 1
Пример
Программист приходит к продюсеру с просьбой объяснить некую часть
спека. Продюсер говорит, что он сейчас слишком занят. "Давай завтра,
добро?"
Очень часто после пары «давай завтра» программист что делает? Пра-
вильно! Он пишет код так, как его понимает, – без всякой гарантии, что
сей код отразит требуемое.
Следующий аспект:
программист (как и все остальные участники цикла) никогда не
должен стесняться спрашивать (хоть двести раз!) и подтверждать
свое понимание е-мейлами типа: "Просто хотел уточнить, что я
правильно понял, что пункт 12.2 такого-то спека говорит..." Если
же программисту не отвечают, когда он подходит, прекрасно —
нужно послать е-мейл и сохранить этот е-мейл, как и е-мейлы "Я
хотел уточнить". Если снова не отвечают, программист должен
идти к своему менеджеру и просить его принять меры. И это не
стукачество, а деловая практика – business is business.
Следующий аспект:
Менеджмент должен регулярно устраивать так называемые Team
Building Activities (мероприятия по сплочению коллектива) с той
простой целью, чтобы между членами команды кроме профес-
сиональных налаживались и человеческие контакты. Причем, как
показывает опыт, совместный выезд для игры в пейнтбол раз в
месяц гораздо эффективнее для сплочения коллектива, чем со-
вместная проспиртовка мозгов во время пятничных застолий.
б. Технический аспект
Каждый из участников цикла разработки ПО должен быть досту-
пен для контакта: желательно, чтобы все они работали в одном
здании; в локальной сети должны быть доступны служебные, мо-
бильные и домашние телефоны; необходимо согласовать часы
(хотя бы 4 часа в день), когда все (и тот, кто ушел в 6 часов вече-
ра и в 3 утра) находятся в офисе.
3. ИНСПЕКЦИИ КОДА
У некоторых программистов есть такая концепция: "Если я пишу
код, который могу понять только я, то меня не уволят".
Ну, во-первых, при желании можно уволить даже президента
"ЮКОСа", во-вторых, такой подход к работе априори неправи-
Цикл разработки ПО
91
лен: в интернет-компаниях никто никого силком не держит, и
если ты согласился работать на определенных условиях, то будь
добр работать профессионально и добросовестно.
Если же компания не выполняет взятых на себя обязательств
(например, по оплате), то мы просто ищем другую компанию —
ведь никто никому не давал клятву верности.
Постановка мозгов
Компания держит каждого из нас до тех пор, пока мы ей нужны, и если
какая-то конкретная позиция перестает быть необходимой для бизне-
са, то человеку просто говорят: «Гуд бай» независимо от того, сколько у
него
детей плачет по лавкам;
котов мяукает по печкам.
Как поет Тимур Шаов: «Это бизнес, господа...»
Вместе с тем, если вы находите компанию с лучшими для себя усло-
виями и, работая на старом месте, прошли интервью и получили
письменное предложение о работе, то вы просто идете к своему ме-
неджеру и говорите, что собрались уходить, но можете подумать о том,
чтобы остаться, только если компания сделает для вас то-то и то-то,
например повысит заработную плату.
Несмотря на то что бизнес есть бизнес, нужно оставаться профессио-
налом, даже если предложение о новой работе удивительно выгодно и
искушение все бросить велико. Никогда не уходите из компании, не
передав дела и не закончив старые проекты. Ведите себя про-
фессионально !
После небольшого отступления продолжаем основную тему.
В-третьих, чтобы избежать подобных проблем, чреватых багами
и трудностью их фиксирования (fix – починка, ремонт), в ком-
пании должны проходить инспекции кода (code inspection).
Это может быть еженедельное совещание, например, следующего
формата: менеджер программистов распечатывает код любого из
программистов, и последний в присутствии коллег рассказывает,
что, как и почему. Будет ли программист писать код, понятный
только ему, если на совещании его обязательно спросят: "Това-
рищ, а что это вы здесь написали?"
4. СТАНДАРТЫ ПРОГРАММИРОВАНИЯ
С пунктом 3 перекликается идея создания стандартов програм-
мирования.
92
Тестирование Дот Ком. Часть 1
Пример
Вспомним Вавилонскую башню, а вернее, ТОТ момент строительства,
когда все вдруг стали говорить на разных языках (множественность
стандартов). Последствия печальны: проект был начисто заброшен,
название кинокомедии «Some like it hot» перевели как "В джазе только
девушки" и японские фанатки «Тагу» убеждены, что «Мальчигей» – это
название места для романтических свиданий нетрадиционных девушек
на Красной площади.
Такая же катавасия творится в компании, когда программисты
вроде бы и используют тот же язык, например C++, но при напи-
сании кода каждый руководствуется своими привычками.
Пример
Допустим, что отсутствуют стандарты названия новых классов C++.
S этом случае, если Саня любит называть свои классы в формате
«CREDITCARD» (все заглавные и нижнее подчеркивание), а
Леха – «CreditCard» (заглавные только первые буквы каждого слова
и слитное написание),
то, например, Леха, не зная о привычках Сани, но верный своим при-
вычкам, помня лишь «Кредиткард» и желая обратиться к функции из
CREDITCARD, в своем коде так и запишет: «CreditCard». В итоге код не
будет работать, так как C++, ничего не знающий ни о Лехе, ни о Сане, ни о
кредитных картах, думает о CREDITCARD и CreditCard как об
абсолютно разных классах.
Стандарты могут включать:
• правила о комментариях;
• правила об именах таблиц в базе данных, классов, функций
и различных видов переменных;
• правила о максимальной длине строки;
• прочее.
Документ со стандартами должен быть доступен на интранете.
Стандарты программирования – это неотъемлемая часть
процесса, когда в компании работают два программиста и боль-
ше. Они по определению должны быть обязательны для всех.
5. РЕАЛЬНЫЕ СРОКИ
В стартапе изначально и по определению сроки на разработку
нереальны, и приходится балансировать между
• "поспешишь – людей насмешишь" и
• необходимостью закончить кодирование в срок.
Цикл разработки ПО
93
Несмотря на то что стопроцентно действующих рецептов нет, вот
хорошая идея для облегчения нелегкой жизни программистов:
после ознакомления со спеками программисты должны предос-
тавить менеджменту примерные оценки (сметы) сроков для
разработки кода, и исходя из этих смет менеджмент может,
если нужно
• перераспределить нагрузку и
• посмотреть, имеет ли смысл убирать что-то из менее
приоритетных функционалъностей ради того, чтобы
чисто и тщательно написать остальной код.
Единственное утешение состоит в том, что, когда стартап как
бизнес становится более зрелым, сроки и рабочие часы стабили-
зируются во многом потому, что менеджмент понимает, что луч-
ше дать реальный срок (например, перенеся некоторые из спеков
в следующие релизы), чем поступиться качеством.
6. ДОСТУПНОСТЬ ДОКУМЕНТАЦИИ
ВСЕ документы, относящиеся к разработке ПО, включая спеки,
процедуру изменения спека, стандарты программирования, тест-
комплекты, и документы, о которых мы будем говорить в даль-
нейшем, должны быть доступны в локальной сети, и их располо-
жение должно быть максимально оптимизировано для удобства и
быстроты поиска. Все должно быть сделано для того, чтобы за-
интересованный сотрудник быстро нашел нужный документ, а не
тратил свое время и время своих коллег на долгие поиски.
Несмотря на кажущуюся очевидность и легковесность этого мо-
мента, несоблюдение правила о доступности ВСЕХ документов
на практике может принести много проблем.
7. ТРЕБОВАНИЯ
К ПРОВЕДЕНИЮ ЮНИТ-ТЕСТИРОВАНИЯ
Юнит-тестирование (unit testing) – это тестирование, произ-
водимое самим программистом. Здесь нужно подчеркнуть, что
неправильный подход к введению юнит-тестирования вызо-
вет справедливое раздражение программистов, так как за тес-
тирование платят тестировщикам, а отсутствие требований к
юнит-тестированию вообще увеличит стоимость багов.
94
Тестирование Дот Ком. Часть 1
Постановка мозгов
Стоимость бага – это
• расходы компании, чтобы найти баг и исправить его до пе-
редачи кода пользователю. Расходы компании поддаются
приблизительной оценке;
• убытки, которые несет компания, потому что баг не был
найден до передачи кода пользователю. Объективная оценка
убытков в большинстве случаев невозможна.
Подробности:
Стоимость бага в первом случае:
Если баг был допущен на уровне спека и найден во время тестирования
кода, его стоимость вычисляется как
стоимость оплаты продюсера в час, помноженная на количество
часов, потраченных на разработку «неправильной» части спека
(стоимость спека), плюс + стоимость программирования
«неправильной» части спека плюс + стоимость тестирования
«неправильной» части спека плюс + стоимость фиксирования бага и
проблем, из него вытекающих.
Как видно, слагаемые поддаются приблизительной оценке.
Стоимость бага во втором случае:
Если баг был допущен на уровне спека, но не придушен до релиза и найден
пользователем, то к стоимости, вычисляемой по формуле предыдущего
случая, могут прибавиться десятки других убытков (включая упущенную
выгоду), например:
• время службы поддержки;
• компенсации пользователю потерянных денег;
• иски против компании;
• навсегда утраченная потенциальная оплата услуг компании ушед-
шими пользователями и пользователями, которые по рекомендации
ушедших никогда не заглянут на ваш веб-сайт,
а также множество других плохих и неприятных вещей.
Наиболее важное в концепции стоимости бага – это то, что чем раньше
будет найден баг, тем он будет дешевле для компании.
Таким образом, баг (а это, как мы знаем, может быть и отклонение от
здравого смысла), найденный на уровне идеи, – это самый дешевый
баг, соответственно баг, найденный после релиза, – это самый
дорогой баг. Причем убытки от последнего, как правило, не поддаются
объективной оценке.
Как видим, QA и тестирование – это не только обеспечение счастья
пользователей, но и путь САМОСОХРАНЕНИЯ любой интернет-
компании.
Вернемся к юнит-тестированию. Вот две рекомендации:
1. Юнит-тесты должны планироваться в письменной фор-
ме ДО написания кода.
Цикл разработки ПО
95
В таком случае программист после получения спека не бежит
сломя голову писать код, а садится за документацию о дизайне
кода с параллельным созданием юнит-тестов.
Полезность такого подхода заключается в том, что,
во-первых, программист абстрагируется от непосредственного
кодирования и, видя "большую картину", может предугадать прин-
ципиальные ошибки в алгоритмах и,
во-вторых, он сможет заранее представить, КАК он будет тести-
ровать код, это "КАК" занозой засядет у него в голове и при на-
писании кода будет работать по принципу "предупрежден – зна-
чит вооружен".
2. Требования к юнит-тестам должны быть формализованы
в стандартах о юнит-тестировании.
Например, каждая функция должна иметь по крайней мере один
тест-кейс с одним конкретным вводом и одним конкретным вы-
водом (ожидаемым результатом).
Принципиально, думаю, понятно. А так как написание и испол-
нение юнит-тестов – это дело программистов, то мы закончим
рассуждения о нем и пойдем дальше, у нас, тестировщиков, своих
дел по горло.
8. РЕАЛЬНЫЕ ФИНАНСОВЫЕ РЫЧАГИ
СТИМУЛЯЦИИ НАПИСАНИЯ ЭФФЕКТИВНОГО И
«ЧИСТОГО» КОДА
Здесь все элементарно – менеджмент не должен жмотиться, если
люди горбатятся на проект день и ночь, а в итоге не узнают своих
подросших детей и называют своих жен Ленами (по имени колле-
ги, сидящей за соседним компьютером и ставшей почти родной).
• Хорошая заработная плата с возможностью увеличения;
• билеты в "Ленком";
• премии за хорошую работу;
• неограниченные чипсы и диет-кола;
• оплата абонемента в бассейн и гимнастический зал;
• месячные проездные;
• выезды для игры в пейнтбол;
• беспроцентный кредит на машину;
• помощь при первоначальном взносе на квартиру —
96
Тестирование Дот Ком. Часть 1
чем больше заботы проявит компания о сотрудниках (и не только