Реклама

Реклама

Умные мысли

Май. 11, 2008

10:33 pm - Кадровые резервы

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

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

У такого подхода всё хорошо, кроме одного.
Read more... )

Апр. 27, 2008

10:19 pm - NUnit для функционального тестирования

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

Внимание, задачка! )

03:47 pm - Модульные тесты как документация

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

Вопрос: а как часто вы читаете тесты, когда вам нужна документация?
Ещё вопрос: а много у вас модульных тестов, глядя на которые можно быстро сказать, какое поведение они документируют?

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

Апр. 22, 2008

11:36 pm - Оптимизационое

Программа жутко тормозила. Много думали и исследовали. Нашли бутылочное горлышко, сделали несколько правок, которые должны были дать офигеть-эффект. Время работы операции уменьшилось всего в 2 раза. "Эх... мало", - подумали мы.

В сосдней экспериментальной ветке внедрили новую библиотеку работы с Firebird. Время уменьшилось тоже в 2 раза. "Эх... будет прирост в 4 раза. Всё равно мало...", - подумали мы...

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

Разгадка:

"в два раза" - это "на 50%". Так вот надо было не разы перемножать, а проценты складывать! :)

Апр. 21, 2008

10:59 pm - Практики использования трекера - 6

Есть в трекере такое загадочное поле, как target milestone.
Milestones - это такие столбики, стоящие вдоль дороги с промежутком ровно километр (милю).
Target milestone - это один из таких столбиков на пути к светлому будущему, до которого мы должны успеть сделать некоторый список задаче, которые мы же сами себе и поставили.
Ниже описывается одна из практик применения target milestone. Она же - основная практика его применения :)

Target milestone


Каждой задаче в трекере присваивается milestone – версия, в которой эта задача будет выпущена. Milestone может присваиваться уже при создании записи. В дальнейшем по каким-либо причинам milestone может быть изменён. При закрытии бага он корректируется последний раз, после чего замораживается и обозначает версию, в которой исправление было выпущено.

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

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

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

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

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

Если какой-то дефект решили исправлять в следующих версиях - это каждый сможет увидеть по назначенному milestone.

Применимость
Если у вас есть релизы и версии – стоит задуматься о внедрении этой практики. Она потребует некоторых усилий, для распределения задач по milestone-ам, но это та работа, которую нужно делать в любом случае, если у вас есть релизы и версии. Зато с этой практикой результатами распределения задач по версиям сможет воспользоваться кто угодно и когда угодно. В том числе и в далёком будущем чтобы, например, узнать, что было сделано нового в версии X по сравнению с версией Y.

Это одна из тех практик, которая требуя не очень много усилий, наводит хороший порядок в вашем трекере. Попробуйте - вам понравится :)

Апр. 19, 2008

04:02 pm - Баян про багзиллу

Оказывается, разработчики багзиллы признают, что сейчас больше всего развитие багзиллы тормозит то, что она написана на Perl'е.

Более того, они задумываются над тем, чтобы переписать её полностью на более современно языке программирования.

Правда этой "новости" уже как минимум год. :)

Ссылки по теме:
http://avatraxiom.livejournal.com/58084.html
http://wiki.mozilla.org/Bugzilla:Languages

Апр. 18, 2008

11:15 pm - Практики использования трекера - 4, 5

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

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

Внутренние переработки в трекере


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

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

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

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

Очень сложно организовать регулярное следование этой практики. Можно сказать, что эта практика особенно нетехнологична! Разработчик не заинтересован в описании изменений в трекере, обычно очень этого не любит и легко может про это забыть.
Проблему нетехнологичности мог бы смягчить какой-либо инструмент, автоматизирующий заведение подобных записей в трекере.

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


Фиксация постфактум


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

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

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

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

Апр. 17, 2008

12:12 am - Практики использования трекера - 3

Обсуждение новых фич


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

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

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

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

Апр. 14, 2008

10:18 pm - Практики использования трекера - 2

Фичи в трекере



Новая функциональность и переработка старой функциональности оформляются в виде задач в трекере. Таким образом, через трекер проходят почти все значительные изменения в продукте.

Менеджер или тим-лид распределяют задачи в трекере по разработчикам, либо разработчики делают это в автономном режиме самостоятельно.

Преимущества


Применимость

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

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

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

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

10:12 am - Практики использования трекера - 1

Начнём с банальностей. Зачем вообще нужно использовать трекер?

Практика "Ошибки в трекере"



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

Преимущества

Применимость
Каждый из следующих пунктов - это аргумент в пользу использования этой практики:

Апр. 13, 2008

07:09 pm - Практики использования трекера

Решил начать описывать в ЖЖ набор практик использования трекера, до которого у меня получилось дойти своим умом в течении 3 лет его использования. Ценность будут представлять

Под трекером я тут подразумеваю приложение, которое позволяет коллективно работать с так называемыми issue. Чаще всего issue - это информация об ошибке в программе. Реже - запрос новой функциональности. Вообще говоря, issue может быть вообще чем угодно.
У меня богатый опыт работы с Bugzilla. Кроме того я представляю как выглядят mantis, JIRA и трекер в TFS, но никогда с ними плотно не работал.

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

В общем, обсуждения приветствуются!

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

Описание каждой практики, как мне кажется, должно уложится в шаблон:
1. Описание практики.
2. Преимущества, которые она даёт.
3. Обсуждение применимости данной практики.

Апр. 10, 2008

12:26 am - Чемпионат мира по программированию

На момент заморозки таблицы результатов за час до конца в 10-ке было всего 2 не русскоговорящие команды - MIT (5 место) и Fudan State University (10 место). Из оставшихся восьми - всего две не российские команды - Львов (3 место) и Беларусь (7 место).

И это чемпионат мира!

СПб ИТМО жжот на первом месте.
Ижевск жжот на втором.
УрГУ - на 19-ом.

Внимание вопрос: Какого чёрта в этой стране все болеют за футбол?!? :)

Результаты тут: http://icpc.baylor.edu/dmt/v2/wf/scoreboard.htm
Окончательных не дождусь - пойду спать :)

Неплохо, кстати, поболели в "Малине" за наших. Нам там даже розетку для ноутбуков нашли!

Tags:

Мар. 29, 2008

02:11 pm - Single responsibility principle

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


  1. Обсуждения (фич, архитектурных решений, организационных решений, требований, ...).
  2. Code review.
  3. Разработка.
  4. Собеседование кандидатов.
  5. Анализ факапов.
  6. Расследование багов.
  7. Планирование релизов.
  8. Оперативное общение со службой поддержки.
  9. Передача информации во внешний мир (менеджеры, СП, тестировщики, ...).
  10. Оценка сроков.
  11. Тестирование.
  12. Распределение задач по людям.


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

Понятно, что так просто избавиться от деятельности не получится. Нужно организовать всё так, чтобы задача, которую я решаю продолжала решаться, но моё активное участие в этом уже не требовалось. Так, например, с вводом автоматических ночных билдов, из этого списка ушла деятельность "сборка релиза".

Что-то мне подсказывает, что в ближайшем будущем у меня получится сократить этот список вдвое, а оставшиеся пункты научиться равномерно распределять по всей команде. А ещё добавить в этот список "Работу с рисками" :-)

01:31 am - К вопросу о релевантности...

Сегодня подсказали, что если ввести в яндексе загадочную фразу nhibernate vs linq, то первой в списке результатов будет ссылка на вот этот вот мой ЖЖ :-)

Решил, что Яндекс как то странно глючит. Поискал то же самое в гугле среди русских страниц - аналогично.

Странно всё это! :-)

Мар. 22, 2008

09:59 pm - Гёдель и колдуны

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

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

Такое утверждение можно, например, добавить к системе аксиом, оставив её непротиворечивой.

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

Нормальный человек скажет "привораживание и прочее колдовство - это всё враньё, потому что это не объяснимо". Типа "Наука не признаёт", а значит шарлатаны.

Теперь, когда мы обозначили мнение обывателя, попробуем посмотреть на проблему с точки зрения самой Науки, которая "не признаёт".
Для начала "не признаёт" означает всего лишь "не умеет объяснять".
Далее, предположим, что наши физики узнали все аксиомы нашей вселенной (вах!).
В этом случае может случиться три вещи:
1. Будет показано, как из аксиом мироздания следует работоспособность колдовства, оно будет наконец-то признано, изучено (а-ля НИИ ЧАВО) и им начнут пользоваться на научный манер.
2. Будет показано, что из аксиом мироздания следует неработоспособность колдовства. Тем самым будет доказано, что все колдуны шарлатаны. В этом случае всех колдунов можно будет со спокойной совестью судить за шарлатанство.
3. Будет доказано, что из аксиом мироздания не возможно ни доказать, ни опровергнуть работоспособность колдовства. Согласно теореме Гёделя эту возможность никак нельзя исключить! И при том это самый интересный случай. Он означает, что работоспособность колдовства можно взять за аксиому! То есть если я верю в колдовство - оно работает. Если не верю - не работает.

Так позиция "Я верую на тот случай, если бог на самом деле существует" предстаёт перед нами совсем в другом свете :)

Tags:

Мар. 11, 2008

12:29 am - Коллекции 2

Часть вопросов про коллекции снята после прочтения этого блога и этого FAQ-а

Мар. 10, 2008

06:24 pm - Коллекции в .NET

Тем, кто считает, что ICollection<T> - это generics аналог ICollection посвещается :)
Read more... )

01:34 am - HR

В пятницу я впервые участвовал в собеседовании человека, которого мы сознательно не взяли, и я об этом слегка жалею. Это хорошо! Это значит, что мы уже достаточно сильны духом, чтобы поднять планку на правильный уровень. По этому поводу я решил написать немножко про собеседования.
Read more... )

Мар. 2, 2008

01:04 pm - О стандартах

Жили были дядьки, которые придумали стандарт на устройство файлов с криптографическими сертификатами, подписями, зашифрованными данными и т.п.
Read more... )
Мораль. Никогда не переоценивайте стандарты. ;)

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

Фев. 25, 2008

09:32 pm

Помните такой афоризм?

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


Сегодня, читая программерские блоги увидел забавное воплощение этого афоризма.
Уровень 1. Microsoft делает C# 3.0.
Уровень 2. Microsoft делает VS 2008 с поддержкой C# 3.0
Уровень 3. JetBrains делает Resharper с поддержкой VS 2008 и C# 3.0
Уровень 4. Ayende пишет LINQ для NHibernate на VS 2008, с использованием Resharper-а.
...

После появляения VS2008 JetBrains кинулись делать поддержку C# 3.0 в resharper.
Недавно появились nightbuilds resharper-а, так Ayende тут же его себе поставил и только тогда начал прикручивать LINQ к NHibernate. :)

А мы что? а мы ждём JetBrains и Ayende, чтобы начать использовать C# 3.0 :)

Navigate: (Previous 20 Entries)