четверг, 30 декабря 2010 г.

Feature List

Протестировать можно только реализованные вещи. Нет, строго говря, это не правда, и даже более того, вредная неправда. Тестировать надо бы начинать задолго до того, как чтото реализовано. Но сейчас не об этом. Сейчас о тестировании софта. Вот он, свеженький, только из билд-машины, еще тёплый, HEAD revision. И руки тянутся его помучить... А мучить мы будем фичи.

Все что реализовано я буду называть фичами. Слово это от англиццкого забугорного feature и обозначает "особенность" в самом грубом переводе. Нефункциональные требования тоже должны быть реализованы, согласны? И их реализация - тоже фича.

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

Как водится - пример. Блокнот. У него есть фичи - редактирование, сохранение, чтение, сами продолжайте. У редактирования есть фичи копирование, вставка, удаление, набор текста... Сам блокнот тоже может быть фичей в каком либо приложении. Обращаю внимание, фичи, это не обязательно требования. Фича - это то чем пользователь, извините за тавтологию, пользуется. Вобщем, можно считать следующую фразу определением. Фича реализует потребность пользователя.

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

  1. Нам нужно знать набор фич, необходимый для решения пользовательской задачи (предусмотренный для реализации в софте).
  2. Нам нужно знать ожидания пользователя от этих фич. Замечу, некоторые ожидания пользователя могут быть зафиксированы как требования.
Хорошо, когда проект идет по канонам разработки, когда документируются требования, когда документация поддерживается в актуальном состоянии, когда всегда есть пиво в холодильнике... Наверное так бывает, но я не встречал. Поэтому, собственно, "некоторые" и "могут" выделены. Так что, первым делом, надо бы составить набор фич, которые в софте (будут) реализованы. Такой список серьёзно облегчит задачу планирования, ну и готовьтесь к тому, что этот список никогда не будет закончен. Это нормально, живой документ в живом проекте. Есть даже такой признак, если документ какое то время (не помню точно, кажется год) не меняется - он не работает.
Получив список фич можно начинать эти фичи приоретизировать, оценивать сроки их тестирования, разбирать и восстанавливать требования, готовить тесты, говорить тосты, и вообще, многое станет понятней. Так что удачи и
С наступающим новым годом, коллеги!

четверг, 9 декабря 2010 г.

PostgreSQL VS MySQL

Как то так сложилось, что большинство хостингов предоставляют связку LAMP для web, поэтому вопрос выбора базы данных для личного проекта передо мной не стоял. MySQL популярен, надёжен, удобен и ещё куча разных положительных эпитетов. Однако, с недавних пор, по роду работы, мне периодически  случается работать с  Postgre. И вот какие наблюдения я для себя сделал.
Postgre DML будет побогаче чем у MySQL. Это плюс. Например,

INSERT INTO table (id, name) VALUES (DEFAULT, 'qweqwe')    RETURNING id;

Вставка записи сразу же возвращает ID записи. В MySQL для этого требуется вызов LAST_INSERT_ID(). 

Еще пример: конструкция WITH в Postgre позволяет выполнять рекурсивные запросы. То есть ветку дерева можно вытащить одним запросом. В MySQL5 такого нет, к сожалению.

Вынесенные за пределы определения таблиц последовательности в PG сильно гибче чем AUTOINCREMENT в MySQL. Они могут быть цикличные, могут быть, эм… как сказать то… непоследовательные, в смысле с шагом. Они, что самое интересное, могут быть завязаны более чем на одну таблицу. Например, если мы хотим разнести функциональные и нефункциональные требования по разным таблицам (поскольку набор полей для них разный),  но хотим для них общее пространство идентификаторов, то в Postgre это решается очень даже элегантно. В MySQL придется городить, я даже пока плохо представляю что.

Обратная сторона медали тоже присутствует, куда ж без неё. 
Бесплатных, функциональных и удобных программ для администрирования MySQL пруд пруди. Может и для Postgre есть, но я не видел. Штатный PGAdmin, мягко скажем, корявка та ещё. Регистрозависимый синтаксис для имён таблиц в Postgre – это потенциальный источник багов. Кром того, таблицы, именованные в camelcase стиле требуют обрамления в кавычки, что требует их экранирования в коде, что требует недюжинного терпения. Да и в глазах рябит от подсветки синтаксиса каждой “заэскейпленой” кавычки.

Ничего не буду говорить про производительность, статей полно, Гугля в помощь. Отличия же в возможностях все таки склоняют мой выбор на будущее в сторону Postgre. Такие дела.

воскресенье, 14 ноября 2010 г.

SCRUM или рыночные отношения

В этом посте я отступлю от темы тестирования и коснусь управления разработкой, a именно, популярной и многими любимой технологии SCRUM. Эта технология оценки трудоемкости и управления задачами обладает многими преимуществами перед классическим водопадом. Она проста и понятна.  За исключением одного момента – Story point. Эти условные “баллы сложности” вначале всегда вызывают вопросы – что же это?
Классики советуют не думать о них в понятиях времени, тем не менее, в большинстве случаев использования, поинты приводятся к часам, ну или дням, кому как удобнее. Думать о storypoint как о строчках кода - тоже неправильно. Количество строк кода очень сложно определить заранее и зачастую это не показатель.
Когда я рассказывал о scrum своим коллегам, я получил вопрос – каков же физический смысл в этих оценках?
Физический смысл донельзя прост – это деньги. Смотрите, что получается…

Давайте для простоты приравняем очко сложности ста рублям.  Тогда задачи будут оцениваться в деньгах. Процедура оценки задач станет торговлей – руководитель проекта выставляет задачу на торги, эту задачу один программист готов выполнить за 1000 рублей, другой за 750. Остальная практика оценки задач не меняется, не буду описывать – все по скраму. Мы избавляемся от преобразований баллов в человеко-часы, это больше не нужно. Программисту сразу понятно, сколько он заработает и сколько он теряет занимаясь прокастинацией. Сроки отходят на второй план, они будут минимальны.
Думать о сложности в понятиях денег проще и руководителю и программисту. Руководитель имеет перед собой общий бюджет проекта, как правило согласованный заранее, его задача не выйти за эти пределы. Думая о проекте в абстрактных единицах легко забыть о реальности, а тут – живые деньги, которые получит программист за выполнение определенной задачи. Понятия “хороший” программист и “плохой” программист обретают свой физический смысл – хороший выполняет задачи за более короткое время и, о чудо!, получает больше. Причем сразу, не дожидаясь признания коллег и начальства, зачастую субъективного.  Программист волен в определении сроков выполнения той или иной задачи – ему все равно заплатят по сложности. Мотивация налицо – быстрее делаешь – больше получаешь. Вопрос качества пока отложим, тестировщики должны получать зарплату по другому, но очевидно, нельзя засчитывать задачу выполненной без ее принятия ответственным лицом. Это относится не только к скраму.  Программист волен в распределении времени в пределах задачи, сколько потратить на код а сколько на изучение проблемы.  Смысл в графике рабочего времени снижается до минимума, достаточно определить время общих собраний или вовсе обойтись смс рассылкой.

Я надеюсь, что такой взгляд на SCRUM вызовет обсуждение, жду ваши комментарии

пятница, 12 ноября 2010 г.

Главный вопрос

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

четверг, 11 ноября 2010 г.

Новая работа, новые коллеги

Вот еще вчера  вы были инженером, а сегодня вас позвал директор и сказал - Вася! Ты теперь начальник группы тестирования, в помощь тебе вот эти двое, ибо самые молодые, давай, жду от тебя план действий. Знакомо? Многим руководителям пришлось пройти именно по такому пути. 

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



суббота, 21 февраля 2009 г.

Прошло два месяца с момента последнего поста, один из них нерабочий, второй - рабочий донельзя. Нервная и физическая нагрузка у всей конторы зашкаливает за красную линию.  Близятся бАльшие испытания, "испытания всего"... Ударная сборка стендов, подготовка оборудования, написаний методик и программ испытаний умножается на финансовый кризис. Люди работают на износ, и самое худшее, САМОЕ ХУДШЕЕ, не то, что мы сдачу вовремя почти ничего не получим сверху, не то, что за несдачу вовремя с нас снимут три шкуры, а то, что совершенно непонятно, когда это закончится. 

No goals - no results. Аксиома, блин. 
Самая худшая цель - "сделать все".  Самый худший срок - "как можно быстрее"

среда, 17 декабря 2008 г.

Редеплой

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