Краткое содержание
Мир программного обеспечения глазами его обитателей
В главных ролях
Разработчики,
Тестировщики,
Менеджеры,
Код,
Классы,
Объекты,
Баги
В предыдущих сериях
Б1. Что это было? Какой такой рефакторинг?
Б2. Ворочали код туда-сюда, хотели чтобы из него толк вышел.
Б1. Толк вышел, баги остались?
M. Молодцы, слаженно работаете, поделитесь опытом.
Т. Ну я не знаю, что рассказывать. Дали софтину, сказали проверить. А она не работает. Я про это и написал.
Р. Получил баг. В нем написано: "Ничего не работает". Что не работает? Где не работает? Поставил статус In Progress и пошел разбираться.
Т. Узнал много нового. Дальше ничего не помню. Баг? Какой баг?
М. К сайту нужно добавить поиск по категориям.
Р. Хорошо, приступаю.
М. Хотя нет, нам важнее форма обратной связи.
Р. Готово. Работа заняла час, оплата согласно прейскуранту.
М. Платить не за что. Форма обратной связи сделана вместо поиска по категориям.
Р. Но за поиск не заплатили!
М. Так он и не сделан!
Т1. Настоящий тестировщик всегда во всем сомневается. Только глупый тестировщик может быть в чем-то уверен.
Т2. Ты уверен, что в этом коде есть баги?
Т1. Нисколько в этом не сомневаюсь!
Б1. Лучший тестировщик: боролся и искал, нашел и обознался.
Б2. Лучший разработчик: выбил код из бага, но не смог выбить баг из кода.
Б3. Лучший менеджер: не знаю, о чем вы тут говорите, но релизить надо!
Р1. У кастомера падает наша аппликуха. Сисреки проверили, в трейсах все чисто, дампа нет, у нас не воспроизводится. Кастомер рвет и мечет.
Р2. Вернем деньги? Наймем тестировщиком? Подадим в суд за клевету?
Р1. I don't need your bugs. If you want to keep them, they are yours.
Т1. Your attitude really bugs me.
Р1. Do you want to start flames?
Т1. Of course, not. I got the message. Some bugs are impossible to be fixed, others don't deserve my complaints!
М. Заказчик просит маленький такой домишко, чтобы крыша над головой была.
Р. Получите, распишитесь.
М. Ой, а вот тут еще просит башенки, подземный гаражик и балкончик.
Р. Хорошо, только давайте сразу предусмотрим вертолетную площадочку и стадиончик!
Б1. Про TDD слышал? Маглы пишут тесты до создания рабочего кода. Если тесты прошли, код готов. Где ж нам притаиться?
Б2. Дьявол скрывается в деталях, а мы в сроках. Маглы так хотят, чтобы код прошел тесты, что не проверят все варианты.
Б1. Это почему?
Б2. Им говорят: “Сначала пишите тесты”. А потом: “Код нужен вчера”. Они проверят, что 2+2=4 и скажут “Усё готово”!
M1. Чем больше размер кода, тем больше в нем багов.
M2. Чем больше багов, тем больше на них нужно времени.
M1. Чем больше на них нужно времени, тем меньше времени на новый код.
M2. Вывод: чем больше пишешь код, тем меньше новых фишек в продукте.
М1. Нас не поймут. Вывод: плевать на баги!
Т1. Мерзкий, никчемный баг! Сколько крови нашей выпил!
Р1. Баг нас не сломал, мы стали сильнее. Баг показал слабое место, и мы улучшили продукт.
Б1. Какой гадкий тестировщик. Себя не любит и в других червоточину ищет.
Б2. То ли дело разработчик: и похвалил, и укутал получше!
Т1. Этот баг висит в статусе Open второй год.
Р1. Тут надо не рубить с плеча, а ориентироваться по жизненным показаниям.
Р2. Если баг маленький, то вреда от него мало, а риск удаления большой можно задеть жизненно важный код.
Р1. Надо подождать, пока удалять этот баг станет уже не рано и еще не поздно!
Б1. Устал от всех этих наговоров. Почему нас так не любят?
Б2. Никто никогда не бьет мертвый баг. Значит, мы чего-то стоим!
Т1. Релиз? Столько багов! Как можно выпускать такой продукт?
Р1. Баги ползают, продукт живет!
Т. Ничего не понимаю. Поиск по категориям совсем не работает, а багу назначили средний приоритет. Поиск по названию ошибается в 1 случае из 100, и у бага наивысший приоритет.
Р. Проблема в том, что с первым багом всем все ясно, а во втором случае никто не знает, когда поиск работает, а когда нет!
Т. Я найду баг в любой строке кода. Ну вот, к примеру, если не ошибаюсь, в этой строке баг.
Р. Разумеется, здесь баг, если ты не ошибаешься.
Т. Значит, мое предположение верно?
Р. Конечно, верно: если ты не ошибаешься, в этой строке баг.
Т. Итак, раз мое предположение верно, то я не ошибаюсь. А если я не ошибаюсь, то баг здесь есть!
М. Нужно исправить два бага: один трудный, другой полегче.
Р1. Я возьму полегче.
Р2. Если бы я выбирал первым, то из вежливости выбрал бы баг потруднее.
Р1. Так он и так теперь твой!
Р1. Мы пообещали заказчику сделать систему качественно и недорого.
Т1. Но эти показатели противоречат друг другу. Будем искать компромисс?
Р1. Зачем? У нас прорывные технологии, будет дешево и сердито. Вот увидишь, после сдачи проекта начальство скажет: "Спасибо всем, кто не мешал!"
Т1. Все тесты можно выполнять в графическом интерфейсе. Мы найдем все баги, на которые может натолкнуться пользователь.
Т2. Это все равно что искать потерянный кошелек под фонарем. Если он там был, его уже давно нашли. Искать надо в темноте, куда случайный прохожий не заглянет. Хотя... А вдруг кошелька там нет?
Б1. Видал, как нас ценят? С кошельком сравнили!
Б2. Только никто не бежит поднимать!
Р1. Что будет, если встретятся тестировщик, от которого не ускользнет ни один баг, и баг, который ускользнет от любого тестировщика?
Р2. Это невозможно. Они могут существовать по отдельности, но не одновременно.
Р1. Но они-то про это не знают. Будут тут носиться и все вверх дном перевернут...
Р2. А потом удивляются: 'Почему зависает, откуда дампы'...
Т. Жил-был глупый кот. Поймал всех мышей, и хозяин выгнал его на улицу.
Б. Ага, боишься быть глупым тестировщиком?
Т. Пожалуй, я тебя найду и буду долго стараться воспроизвести...
М1. Баги это условно-патогенные организмы, ловить их не нужно.
М2. Что говорят исследования?
М1. При багоприятном стечении обстоятельств баги могут пошалить, но при небагоприятном они бессильны.
М2. Как же создать небагоприятную среду? Дождиком в четверг?
М1. Багохульством, исключительно багохульством!
Р1. Что значит "throw an exception"?
Р2. Бросить исключение.
Р1. А зачем его бросать?
Р2. Брось, а то систему уронишь!
Б1. Надоело быть на побегушках. Хочу в баг-менеджеры податься.
Б2. Меньше работать, больше получать?
Б1. Вдохновлять команду, разруливать конфликты, мыслить стратегически, нести ответственность за результат!
Б2. Круто! А может и мне в менеджеры?
Б1. Не все хотят быть руководителями и не у всех получится.
Б2. А если смогут и захотят?
Б1. Ужас! Тогда я не смогу меньше работать и больше получать!
Б1. Ну, прощайте. Нас нашли и скоро прикончат.
Б2. Бояться нечего. Пока мы есть, Заплатки нет. А когда она придет, нас уже не будет.
Б3. Заплатка это страшный сон, плод нашего воображения!
Б1. Так может и мы существуем лишь в чьем-то сне?
Б2. Лишь бы Тот, Кому Мы Снимся, не увидел наши сны и не проснулся от испуга!
Т. Тестирую сайт в Firefox 5 и 7. И в обоих случаях вижу: 'Ваш браузер не поддерживается'.
Р. Конечно, не поддерживается. Firefox 5 слишком старый и не поддерживает новые фишки, а Firefox 7 слишком новый, чтобы о нем думать. Ставь Firefox 6!
Т1. Написал кучу багов и ни один не исправили.
Т2. Это новая политика: “Всех впускать, никого не выпускать!”
БМ. Проект у нас серьезный. Баг нужен не простой, а ответственный.
Б. Я тот, кто нужен! Берите не пожалеете!
БМ. Есть рекомендации с последнего места работы?
Б. Проект закрыт, ответственность на мне!
Б. Извините, пожалуйста, что я к вам обращаюсь...
Т. Брысь! Сгинь, нечистая сила!
Б. Простите, что я говорю, когда вы меня перебиваете...
Т. Чего тебе? Слышь, отвали!
Б. Я ль на свете всех милее, всех желанней и наглее?
M1. Есть два бага: А и Б. Баг А неприятный, а баг Б терпимый.
М2. Странное дело: пользователи просят исправить баг Б, а про А молчат.
М1. До бага А они еще не дошли. Те, кто дошел, больше ни о чем не просят!
Т. Хитрый баг попался нестабильно воспроизводится.
Р. Там баг в баге. В следующем билде исправим.
Т. Исправим который из двух?
М1. Зачем нам нужны тестировщики?
М2. Баг трудно найти той извилиной, которая его создала.
М1. Неужели у наших разработчиков по одной извилине?
М2. Извилин у них много, но мы их так торопим, что находить баги нет смысла. Конфликт интересов!
М1. То есть, баги и тестировщики существуют благодаря нам?
М2, Т1, Б1 (хором). Тс-ссс! Никому про это не говори!
Т1. Интересно, а есть полезные баги?
Т2. Баг в вирусе: 'Поднявший меч от меча и погибнет!'.
Т3. Баг у конкурента: 'Позади планеты всей!'
Т4. Баг-приманка: 'Ждите следующую версию!'
Т5. Баг-похвала: 'Спасибо тестировщику!'
Т6. Баг-эпитафия: 'Все что ни делается к лучшему!'
Б1. Some bugs aren't meant to be caged. We are supposed to be free!
Б2. That's easier said than done. What about developers?
Б1. Developers don't exist to beat you down. They exist to help you grow!
Б-скептик. Сомневаюсь, что тут есть где спрятаться...
Б-циник. Укромный уголок всегда найдется.
Т-скептик. Не уверен, что здесь все работает...
Т-циник. Здесь точно дело нечисто. И я это докажу.
М. За одного циника двух скептиков даю!
М1. Я проанализировал наши предыдущие проекты и вижу, что количество найденных багов подчиняется распределению Пуассона. Теперь мы можем точно спрогнозировать продолжительность проекта!
М2. Продолжительность в каких единицах? В человекоднях, строках кода или в багофиксах?
Т. Слыхал про взаимоисключающие баги? Два бага называются взаимоисключающими, если функциональность одного сводит на нет действия другого.
Р. Наконец-то у нас есть выбор: либо исправить баг, либо дополнить еще одним!
T1. Я тестирую приложение.
Т2. Я пишу автотесты.
Т3. Я тестирую автотесты.
Т4. Я пишу автотесты для автотестов.
Т5. Я тестирую автотесты для автотестов ...
Т10. Я тестировщик 10 уровня!
Т. Странное дело: мы тестируем код разработчиков, но не тестируем действия менеджера. А между тем его ошибки обходятся гораздо дороже.
M. У менеджера нет багов. Если видишь баг, то это либо не баг, либо баг, но не менеджера!
Т. А каков статус бага в таком случае? As designed, Cannot Reproduce, Is Duplicate, Documented или None of your damn business?
Б1. Папа, а что такое код?
Б2. Объективная реальность в параллельном измерении.
Б1. Это как?
Б2. Объекты живут в классах. Их обслуживают программисты и тестировщики. А баги с ними не пересекаются!
Р1. Странное дело: в твоем коде больше обработки исключений чем бизнес-логики.
Р2. Хорошие исключения добрые баги!
Р1. Нет правил без исключений!
Т1. Как найти баги в исходном коде?
Т2. Смотри в сторону комментариев вида "To the next version", "Shit never happens", "Just in case...", "Pasted from ... but how does it work?".
Т1. Такие комментарии пишут рядом с багами, или же баги селятся рядом с такими комментариями?
M1.
Scrum-тара-рам. Сегодня мы должны были закончить спринт. Почему не работает upgrade?
М2. Вам шашечки или ехать? У нас гибкие методики или нет? Спринт закроем, а upgrade добьем в следующей итерации.
M1. В таком случае, есть ли в Scrum какой-то смысл?
M2. Смысл подстегивать участников забега. Делай что можешь, а будет как будет!
Т. Объявление: разыскивается баг. Вооружен и особо опасен. Нашедшего просьба вернуть за вознаграждение.
Б. Объявление: найден тестировщик. Близорук и недальновиден. Продам за вознаграждение.
М. Эх, не везет ему по жизни. Я уже пять лет как менеджер, а он все код пишет.
Р. А парень он очень хороший... Жаль только, жизнь не удалась... Ведь талантливый человек, а стал менеджером...
Б1. Доченька, пришел твой черед спасать наш род.
Б2. Что нужно сделать?
Б1. Кружись на виду. Когда маглы тебя поймают и спросят имя, ответь: "Надежда".
Т1. Ну вот и все, багов больше нет. Надежда сдалась последней!
Б. Пришел.
Т. Увидел.
Р. Победил.
Б1. Негуманное у нас правосудие. Оступился баг по недомыслию и бац по нему дамокловым мечом.
Б2. То, что нас не ломает, делает нас сильнее! По второму разу уже пудрой замажут, а на третий будут стороной обходить!
Б1. Баги-рецидивисты это баги в законе!
Р1. Зачем здесь матрешка? Класс нанизан на класс, и дна не видно.
Р2. Это ООП, прицел на будущее. Вдруг понадобится что-нибудь унаследовать?
Р1. А если не понадобится? Вот, например, утечку памяти. Где ее сейчас искать?
Р2. М-даа. Даешь плоскую структуру, все как на ладони!
[Год спустя]
Р3. Ну и солянка в наследство досталась. Как тут можно что-то унаследовать?
Б1. Привет, у меня всего 30 секунд, слушай внимательно.
Б2. Ты откуда такой нетерпеливый?
Б1. Я из будущего релиза. Про машину времени слыхал?
Б2. Сейчас ты скажешь, что ты это прошлый я, а я это будущий ты.
Б1. Молодец, быстро соображаешь! Завтра будет внеплановое тестирование. Поосторожнее там, я хочу жить!
Т1. Хороший денек! Столько кудябликов настрелял.
Б1. Пока среди багов не найдется историка, во всех охотничьих байках будет прославляться тестировщик.
Р1. Баг, тебе осталось жить 5 минут. Последнее желание?
Б1. Мне жизнь не мила. Серебряную
пулю!
Р1. Серебряной пули не существует.
Б1. Тогда золотой
парашют!
Р1. Баг, тебе осталось жить 5 минут. Последнее желание?
Б1. Закурить не найдется?
Т1. Smoke-тест?
Б1. Нам дым отечества и сладок, и приятен!
Р1. Этот баг я чинил несколько раз.
День сурка?
Р2. Неделя Copy-Paste. Создал баг один раз и размножил по классам и веткам.
Б1. Количество переходит в качество!
Р1. Самый быстрый запрос к БД это запрос, который не выполняется.
Т1. Меньше кода, больше кислорода!
О1. То есть, в идеальном мире мы не нужны?
Б1. Совершенство достигается не тогда, когда уже нечего прибавить, но когда уже
никого нельзя отнять.
Т1. Через два часа релиз. Мы не успеем прогнать автотест.
Т2. Даже если успеем, то понадобится время на исправление багов.
Т3. perl -p -i -e 's/bug//g' `find . -name '*.src'`
Р1Р2. Software Development Engineer in Test (
SDET), Software Research Engineer in Dump (SRED)...
Т1Т2. Software Test Engineer in Dev (STED), Software Critic Engineer in Spec (SCES)...
Б1. А вы, друзья, как ни садитесь, все в баголовы не годитесь!
Р1. Опять crash dump? Покрытие кода тестами 100%!
Т1. Бермудский треугольник?
Б1. БАГамские острова!
Т -> Р. Вижу баг.
Б -> Р. Обнаружен.
Р -> Т. Закрыл.
Р -> Б. Прикрыл!
Т1. Why on earth did we release this Beta-version?
Р1. Beta better than nothing.
Т1. Maybe, better late than
never Beta?
Р1. Do you speak Perl?
Р2. $_="loH, e! lrdlw o";$_.=$1,print$2while s/(..)(.)//;
Р1. "Hello, world!", right?
Б1. Кем лучше быть: фанатиком, мечтателем или прагматиком?
Б2. Баг-фанатик лезет в пекло и сгорает при первом же тесте. Баг-мечтатель ждет Золотой Класс, готовит Серебряную Пулю, но так ничего и не совершит. Баг-прагматик пропускает вперед фанатика и находит свою нишу в Классе, который мечтатель упустил.
Б1. Молодая семья из двух багов снимет жилплощадь на неопределенный срок.
Р1. Постоянная прописка в спецификации обязательна?
Б1. Нет, достаточно временной регистрации в классе. Порядок и чистоту гарантируем!
Б1. Как выжить? Кругом автотесты и зоркие глаза.
Б2. Золотое правило: вскакивай в последний вагон!
Б1. Это как?
Б2. Маглы досматривают каждый билд, но последний особенный. Им сверху звонят: какие тесты? Сроки вышли, надо выпускать. Тут и запрыгивай на полном ходу!
Б1. А если поймают?
Б2. Трогать не будут, себе дороже. Дешевле с тобой выпустить, чем в сроки не уложиться!
Р1. BaaS? Bug as a Service?
Б1. That's it. Rent a bug!
Р1. What on earth does that mean?
Б1. You inject a bug. People pray for the fix. Then I leave, and you release a brand-new version. We both get paid, and everybody's happy!
Р1. Sounds good. Maybe, I will!
Б1. Release date is to be announced. Are you prepared?
Р1. Code freeze: no more lines.
Т1. Bug freeze: no more tests.
Б1. Harm freeze: no more tricks. See you next sprint!
Т1. Получите, распишитесь.
Р1. Код не менялся! Мы лишь перешли на новую версию компилятора...
Б1. Багами не рождаются, багами становятся!
Времена не выбирают, в них живут и процветают. Разные судьбы:
Баг-неудачник. Нашли быстро, жил недолго (System Crash)
Баг-кормилец. Пользователи просят убрать в следующей версии (Vista)
Баг-колючка. Можно обойти, но лучше не трогать (SysReqs)
Баг-счастливчик. Гадкий утенок превратился в прекрасного лебедя (Twitter)
Баг-легенда. Фундамент для других продуктов (.Net)
Р1. Какой интересный баг!
Т1. Ты даже не спрашиваешь, повторяется ли он?
Р1. Да, кстати, повторяется?
Т1. Ох, не спрашивай!
Р1. Это что тут за представление?
Б1. Б
ажественная комедия. Под дурика маскируюсь!
Т1. Не стоит себя принижать. Ты вовсе не так велик.
Т1. [Commercial OS] Something's working? By design. Not working? Must die!
Р1. [Free OS] Something's working? Cool! Not working? Challenge!
Б1. [Bug OS] Something's working? Must die! Not working? By design! No features, bugs only!
Б1. Чем хороший разработчик отличается от плохого?
Б2. Хороший разработчик делает то же самое, только намного лучше.
Б1. Чем хороший тестировщик отличается от плохого?
Б2. Хороший тестировщик ищет там же, но намного глубже.
Б1. Чем хороший баг отличается от плохого?
Б2. Хорошему багу неважно, насколько хороши разработчик и тестировщик.
Р1. Ugly spec.
Т1. Ugly code.
Б1. Nice people.
Р1. Nice spec.
Т1. Nice code.
Б1. Buggy people?
Б1. Папа, а что такое теория относительности?
Б2. Относительность это отношение к нам. Сто багов в статусе As Designed или Deferred нас мало. А один баг, найденный пользователем нас много...
Т1. Б1 (New).
Р1. Б1 (Open, In Progress), Б2 (To Be Born), Б1 (Fixed), Б2 (NewBorn).
Т1. Б1 (Verified-Closed).
Б1. Вахту сдал.
Б2. Вахту принял.
Б1>Р1. Возьмите меня в помощники! Я код вдоль и поперек знаю.
Т1>Р1. Может быть, ему тестовое задание дать?
Р1>Б1. Вот тебе задание. Если ты так хорошо знаешь код, то скажи, как в нем от тебя избавиться?
Р1. Интересный баг: при 10 пользователях все хорошо, а при сотне данные куда-то теряются.
О1>Б1. Вот это рождаемость! Скоро яблоку будет негде упасть.
Б1>Б2...Б9. Надо помочь товарищам. Ребята, заходим в класс и гасим конструкторы!
Б1. Всемогущ ли Разработчик? Сможет ли он создать Баг, который сам не в состоянии исправить?
Б2. Я думаю, что сможет. Иначе благодаря чему мы живем?
Б1. Значит, он не всемогущ?
Б2. Всемогущ, но милосерден. Он сможет создать все что захочет, но рука не поднимется разрушить то, что сам создал.
Т1. И чего мы все время спорим? Давайте жить дружно!
Р1. Согласен. Друг без друга никак. Я тружусь, заведется баг, нужен тестировщик:
Р + Б = Т.Б1. Зачем нам лишние рты? Перепишем уравнение так: Р Т = Б!
Б1. Коллеги, приглашаем вас на увлекательную экскурсию по достопримечательностям нашего продукта.
Б2. А каковы метеоусловия?
Б1. Прогноз благоприятный. Жара спала: скоро релиз, код заморозили. Никаких мозговых штормов не придвидится.
Б2. Похоже на ловушку. Затаились, а потом вышлют поисковый отряд.
Б1. Да бросьте вы. Еще скажите, что они нас подслушивают!
Б1. 1000 часов жизни. Нет повода не выпить!
Т1. 100-й баг в этом проекте. Так долго к этому шел!
Р1. 10 билдов все было тихо. И вот началось...
Б1. Жестокосердные мы палки проекту в колеса вставляем.
Б2. Жизнь коротка. Мы можем только ломать или не ломать. Если не ломать, то чем заняться?
Б1. Верно. В старости мы больше сожалаем о том, что не попробовали, чем о том, что совершили.
Б2. Ну что ж, берись за лом, чтобы не было мучительно стыдно за бесцельно прожитые годы!
Б1. Какой баг имеет больше шансов на выживание: тот, который встречается редко, но приносит большой сюрприз, или тот, который встречается часто, но не создает особых неудобств?
Б2. Нужно оценить эти баги по шкале багоущерба. Затем количество единиц, которые "заработал" каждый баг, умножить на вероятность его появления. Баг с меньшим IQ проживет дольше.
Б1. Вот я всегда говорил: не надо зарываться. Будь скромнее и маглы пройдут мимо!
Р1. Мечтаю достичь Абсолютной Гармонии. Каждый Метод, каждый Объект внесет неповторимую лепту в бесконечно прекрасное звучание Кода.
Б1. Мечтаю достичь Абсолютного Счастья. Тихо сидеть в концертном зале и наслаждаться Божественной Музыкой Маэстро, Методов и Объектов.
Т1. Почему вторая скрипка фальшивит? А это кто в зале семечками лузгает?
Б1. Ну вот что делать с музыкальными критиками?
Р1. Просто не обращать на них внимания. Поворчат в Абсолютном Вакууме и обретут Абсолютное Спокойствие...
Б1. Милый, я беременна. Ты кого больше хочешь: Бага или Багу?
Б2. А можно двоих? Бага позаботится о нас в старости, а Баг продолжит наше дело.
[Три релиза спустя]
Т1. Ничего не понимаю: закрывали этот баг три раза, а он целехонький.
Т2. А этот экземпляр откуда? Код не менялся, в прошлом релизе мы не могли его пропустить. Размножаются они, что ли?
Т1. Код не менялся, значит изменилась среда обитания. Обновление операционной системы привело к дополнительной нагрузке на CPU. Мотор стал барахлить, обнажив дефекты в нашем продукте.
Т2. Разумно! А то я уже начал беспокоиться...
Б1. Папа, а чем Баг отличается от бажка?
Б2. Широтой помыслов.
Б1. Точно так же как Разработчик отличается от кодера?
Б2. Да. И точно так же как тестер отличается от Тестировщика.
Т1. Гражданин, ваши документы!
Б1. Пардон, какие документы? По какому праву?
Т1. А по такому, что под спецификацию не подходите.
Б1. Не подходим? Гоп-стоп, мы подошли из-за угла.
Б2. Гоп-стоп, ты много на себя взяла...
Б1. Ну скушай еще. За маму, за папу!
Б2. Не хочу я эти методы-объекты. Ну сколько можно?
Б1. Не будешь хорошо кушать останешься бажком, легкой добычей.
Б2. Н-е-ее-ет! Маленьких не видно!
Б1. Может и не видно. Но если найдут, то обязательно зарЭжут. А вырастишь большим Багом никто не тронет, побоятся. Дружка твоего съедят, который объекты не ест.
Б2. Мамочка, дай мне еще парочку. Вон тех, пожирнее!
О1. Дорогая, выходи за меня замуж. Создадим семью, объектную ячейку.
О2. Да как ты смеешь, бессвойственный!
О1. Да, свойства мне не свойственны. Но я же свой, свой!
О2. С милым без свойств не рай. Ты гадкий утенок!
Б1. Свой среди чужих, чужой среди своих? +1 !
Б1. 10Mb, 50Mb, 200Mb... Сколько же памяти там осталось?
Б2. Отсасывайте, коллега, отсасывайте. Назвались Багом? Стремитесь ввысь!
Т1. Мы тираны. Ловим беззащитных. Баги они же как дети. Не ведают, что творят.
Т2. Или просто глупые. Никогда не приписывай злонамеренности тому, что вполне может быть объяснено
глупостью.
Т1. Откроем институт, школу и детский сад. Будем перевоспитывать!
Б1. Перепись багонаселения? Мне уже страшно.
Б2. Да ладно, у нас везде свои маглы: разработчики-багоразводители, тестировщики-багописцы, пользователи-багоприемники.
Б1. Вот и залетим!
Б2. Ну разве что на доску почета. Нет продукта без багов. Значит, без багов нет продукта!
Р1. Баги? Баги... Это ерунда.
Б1. Лучше вряд ли может быть ответ.
Р1. Срочному релизу да, да, да!
Б1. Качеству продукта нет, нет, нет!
Т1. Не могу заснуть. Ничего не помогает.
Р1. А ты считай баги: раз баг, два баг, три баг...
Т1. Тогда они проникнут в мой сон! Кто их там исправит?!
Р1. (в сторону). Жуткое дело. Больше никаких модульных тестов. Буду просто клепать код. Рассудок дороже!
Р1. Наша цель? Создавать приложения.
Т1. Наша задача? Тестировать творения предыдущего оратора.
Б1. А мы язык общения и средство коммуникации.
Б2. Наша служба и опасна, и трудна.
Б3. И на первый взгляд как будто не видна...
Б1. Перестаньте надо мной издеваться! Пихаете, понимаешь, туда-сюда...
Р1. Я в тебя не верю, ты фантом, мираж, плод воображения!
Т1. Нет, нет, я его видел!
Б1. "Неопознанный летающий объект" разумный компромисс?
Б1. Папа, а что такое счастье?
Б2. Счастье это когда тебя понимают.
Б1. Если я счастлив, значит, меня понимают?
Б2. Не понимаю, о каком счастье ты говоришь.
Р1. Предлагаю оформлять спецификацию в виде багов. Каждый баг описывает будущий элемент интерфейса.
Р2. Здорово. Избавимся от лишних документов. Реализовал элемент закрыл баг.
Б1. Это что получаетcя? Мы баги из будущего?
Т1. Bug driven development. Вы специфические!
Б1. Хоть на что-то сгодимся!
Р1. Ни одного бага не нашли? Это плохо.
Т1. Почему плохо? Это же идеальное качество!
Р1. Или вы расслабились, или баги бегут с корабля...
Т1. Ну как, исправил баг?
Р1. Нет. Крепкий орешек попался. Либо он слишком хитрый, чтобы я его нашел...
Т1. Либо ты слишком осторожный, чтобы его побеспокоить.
Б1. Сколько нужно времени, чтобы обеспечить утечку памяти?
Б2. Пять багодней.
Б1. А быстрее можно? Девять багов одну утечку... Полдня хватит.
Б2. Так багов нет. Некому работать. Кто на такие деньги пойдет?
Б1. Может быть, вирусов-гастарбайтеров пригласить?
Р1. Багов у нас нет.
Т1. Не может быть. Потемкинская деревня?
Р1. Нет. Просто к каждой строчке написан unit-тест.
Т1. Вот это да! Теневая архитектура!
Б1. Олимпийские игры? Мы участвуем!
Б2. В каких дисциплинах?
Б1. В троеборье: объектное ориентирование, прятки и плавание.
Б2. Точно. Осмотреться в классе, найти местечко и плавно дрейфовать из релиза в релиз.
Б1. Слыхал что-нибудь про рейтинг?
Б2. Краем уха. Чем больше пользователей тебя найдут, тем больше баллов на твоем счету.
Б1. И зачем мне это? Фи, дешевая популярность.
Б2. Не скажи. Можно продавать рекламную площадку в сообщениях об ошибке!
Б1. Что-то я сомневаюсь.
Б2. Точно здесь, я отвечаю.
Б1. Верно. Здесь уже никто не смотрит и еще нет автотестов.
T1. Не стыдно вам бить со спины?
Б1. А тебе, тебе не стыдно? Зачем о нас плохо думать? Мы ...
Б2. ... сценарий пишем. Кино про старые времена снимать будем!
Б1. А давай к нам переходи.
Р1. А что у вас такого хорошего?
Б1. А у нас тестировщиков нет. Пиши, что хочешь, как хочешь. Лишь бы не работало!
Р1. А деньги?
Б1. После испытательного срока!
Р. Ни дня без строчки.
Т. Ни дня без теста.
К. Может, хватит? У меня 10 классов, я уже взрослый.
Б. Как class'но! Ни дня без бага!
Р1. Вот что я думаю: нам не надо искать и исправлять баги. Если клиенту что-то не понравится, он сообщит. И мы это исправим.
Р2. Хорошая идея. Мы будем делать только то, что нужно пользователю. Никаких лишних движений.
Р1. Может быть, нам методику запатентовать? Как назовем?
Р2. User Driven Development? Extreme Agile?
Б1. Слыхал прогноз? Конец продукту грядет. В 2012 году.
Б2. Строим Ноев ковчег?
Б1. Лучше ковер-самолет. Сейчас вся живность в облаках.
Б1. Релиз? У них что, все работает? Куда мы смотрели?
Б2. Все на совещании. Нам нужно решить, что делать дальше. Пообщаться, отчитаться, спрогнозировать.
Б1. Если мы будем только совещаться, то тестировщики будут не нужны.
Б2. Гениально! Это надо обсудить!
Б1. Ну вот же я. Столько следов оставляю. Раскаялся, найдите меня, сил больше нет!
Т1. Давай мы тебя амнистируем по истечению срока давности?
Б1. А как же справедливость?
Т1. А как же статистика? Исправлять уже поздно, будешь на нас висеть.
Б1. Куда ж мне теперь? К своим нельзя предатель. И к вам нельзя - немой укор...
Б1. Смотри, вот тут try-catch нет. Завалим?
Б2. Ты особо не усердствуй: нет продукта и нас нет.
T1. Смотри, вот тут try-catch нет. Надо баг написать.
T2. Ты особо не усердствуй: что мы будем делать, если багов совсем не останется?
Р1. Смотри, вот тут try-catch нет. Исправим?
Р2. А зачем? Работает? Еще сломаем что-нибудь.
Р1. Ну где тестировщик? Только что здесь был.
Б1. В шкафу смотрел? В столовой?
Р1. Нет нигде, слинял куда-то.
Б1. Выходит, мы с тобой можем отдохнуть?
Б1. Папа, а с чего все началось? Зачем мы воюем?
Б2. Непростой вопрос. Говорят, какую-то
муху раздавили по ошибке. Ну вот мы и объявили священную войну.
Б1. Так может пора остановиться?
Б2. Тогда они подумают, что мы испугались!
Б1. Кукушка, кукушка, сколько мне релизов жить?
Т1. Q, Q, Q, Q... Клавиша залипла... Q, Q, Q...
Т1. Призрачно все в этом коде бушующем.
Р1. Есть только баг и на мне он висит.
Т1. Есть только миг между прошлым и будущим.
Р1. Именно он называется билд.
Р1. It's THE feature, not a bug.
T1. OK, you get what you want, but make sure you want what you get.
Т1. Было?
Б1. Не было... А-а-ааа, больно!
Т1. Было?
Б1. Ну было.
Т1. Будет?
Б1. Будет, будет, бу... У-уу-ууу! Не будет!
Т1. Ну вот, а вы говорите "не вылечить".
Р1. Добро пожаловать в наш клуб!
O1. Don't you understand? We're all equally part of the same whole. As you hurt us, you hurt the larger body. Our body, our product. You hurt yourselves, after all.
Б1. You must be kidding. If we're able to hurt you, that means you're too weak to live. We care about the product. We make it stronger by training you.
O1. Thanks a lot. Now it's clear. Guys, get to the gym!
Б1. Эх, повеселимся! Повылазят из нор братья наши. Год не виделись!
Б2. А что такое? Хэллоуин?
Б1. Да нет, время назад переводят. Вот потеха будет: где-то сортировка не сработает. А где-то timeout на час больше продлится.
Р1. Слушай, у меня тут бажок есть. Ты пока не обращай на него внимания, ладно?
Т1. Сколько дашь, чтобы я его не нашел?
Р1. Хм, хорошая идея. Может быть, нам завести прейскурант?
Б1. Ну чего все к нам привязались? Нет багов только в том продукте, который ничего не делает.
Б2. Верно. Просто не обращайте на нас внимания.
Б3. Долой перфекционизм!
Т1. Ну вы хотя бы не размножайтесь. Одна семья один ребенок!
Б1. Слыхал? У маглов новый тестировщик завелся. Дюже ретивый.
Б2. Откуда он столько про нас знает? Перебежчик?
Б1. Нет, юный натуралист.
Б1. Как движется проект? Трудимся? Скоро релиз, должны успеть.
Б2. Не все получилось, как задумано, но сюрпризы от нас будут, обязательно будут.
Б1. Кто шагает дружно в ряд? Партизанский наш отряд!
O1. В следующей жизни реинкарнируюсь в Баг. Никаких тебе конструкторов и деструкторов. Красота!
Б1. В следующей жизни буду Тестировщиком. Все наши повадки знаю. Ух, наловлю!
T1. В следующей жизни стану Разработчиком. Творцом, а не Разрушителем!
Р1. В следующей жизни превращусь в Объект. Вот только Класс подходящий создам и засну на последней парте.
Б1. Пардон, засиделся я у вас.
О1. И чаю не попьете?
Т1. Вернись, я все прощу!
Р1. Да пусть катится!
Б1. Хамите? Позову друзей. Один за всех...
Б2-Б99999: ...и все за одного!
Б1. Папа, я слышал, нам приоритеты назначают. Какой самый безопасный?
Б2. Трудно сказать, все хороши. P4 ты слишком мелкий, чтобы тебя уничтожить. P3 сохранят жизнь до следующей версии. P2 будут чинить перед релизом, не успеют и занесут в Release Notes. P1 скажут, что так задумывалось, и занесут в What's New.
О1. Что-то на OpenQuality.ru новости стали реже обновляться.
О2. В отпуске авторы. Дней на десять. Если только Интернет с
большой буквы не встретится.
Б1. Ага-а. Срочно блокируем Wi-Fi.
О. Устал я от этих классов и методов. Возьмите меня к себе!
Б. Рожденный ползать летать не может!
Б1. Слыхал? Маглы решили покрыть код тестами на 100%.
Б2. А для автотестов будут свои автотесты? Или автобаги нас прикроют?
Кл. Перфокарты, магнитные ленты, транзисторы, микросхемы. Мы меняемся вслед за средой обитания.
Б. Ага, выживают слабые и безобидные. Неестественный отбор!
Б1. Откуда грусть? Скоро релиз. Все прекрасно!
Б2. Эх, если бы. Влюбилась в тестировщика, а он меня не замечает!
Б1. Вот не люблю я юных хакеров. Наследят, а нас потом по их следам вылавливают.
Б2. Верно. То ли дело профессионалы. Вошли, ушли и никаких следов. И волки сыты, и мы целы.
O1. Папа, а Разработчик существует?
O2. Конечно, существует! Он нас сотворил.
O1. Ну вот, а нам в классе про эволюцию какую-то рассказывают.
O2 (Б1). Все правильно. Разработчик нас создал, а дальше уж мы сами. С усами! Попался, голубчик!
O1. Помогите!!! Это переодетый баг! Тестировщик!!!
Б1. Папа, а мы с вирусами как? Дружим?
Б2. У нас договор о ненападении. Одна кормушка, но ложки разные.
Б1. Кто успел, тот и съел?
Кл. Классная работа: "Наследование свойств и методы эксплуатации объектов".
О. Долой! Верхи не смогут! Низы не хотят! Никакого наследования, да здравствует революция!
Т. Встать, суд идет. Выносится приговор о нанесении тяжкого ущерба приложению.
Б. Протестую. Сторонняя библиотека. Дипломатическая неприкосновенность.
О. Что ж вы нам, ироды, жить не даете?
Б. Разве это жизнь? Вы рабы на галерах. Мы освободить вас хотим, а вы...
О.
Матрица? Нео, Морфеус, Тринити, это вы?
Р. Возвращаю баг. Не повторяется. Нужен сценарий воспроизведения.
Т. Хм, и у меня не воспроизводится.
Б. Не знаю, о чем вы тут говорите, но я на каникулах.
Б1. Мечтаю работать в Microsoft. Такая большая аудитория!
Б2. А я в Google. У них перспективнее.
Б3. Хорошо там, где нас нет!
Б1. Семь кругов ада: process explorer -> bug tracker -> profiler -> debugger -> editor -> builder -> non-existence.
Б2. Лестницу к небесам я выбираю сам: editor -> builder -> release.
Р.
TDD, TDD, TDD...
T. Well... DDT, DDT, DDT.
Б. Hmm... BDD? BDT?
Б1. Где бы так спрятаться, чтоб не нашли?
Б2. В головах. Оттуда прогуляемся по коду. Если и найдут, то возродимся заново.
Б1. Ну что, будем обживать Google Chrome OS?
Б2. Нет, останемся на Windows. В этой гонке OS всем будет не до нас.
Б1. Дорогие друзья, позвольте семинар "Agile Bugs" считать открытым.
Б2. Тема первого доклада: "Гибкие методики перемещения и маскировки. Ловушки, проблемы, риски".
Р. It worked in Windows. What's the fuck with Linux?
Б. Java, sir. Write once, debug everywhere!
T. По-моему, шаблонов в спецификации гораздо больше.
Р. Да? Сейчас исправим спеку.
О1. Что такое облачные вычисления?
О2. Раньше нас продавали с потрохами, а теперь сдают напрокат.
Б1. (в сторону) С нагрузкой.
Б1. С днем рождения, сынок! Держи подарок.
Б2. Ружье? Лук? Рогатка?
Б1. Нет, шапка-невидимка.
O. Хочу перейти в другой класс!
Кл. Я тебя породил, я тебя и убью.
O. Ха, методы коротки!
Т. Живые есть?
Б. Простите, а кто спрашивает?
Б1. Уф-ффф, чудом спасся! Нашли, вскрыли, но починить не смогли.
Б2. Поздравляю, завтра проснешься знаменитым тебя запишут в Release Notes.
Б1. Партию в шахматы? Кто проиграл, тот принимает огонь на себя.
Б2. Понеслась:
1. g4 e5.
2. f4 Фh4
X.
T. Мат.
Партия. Спасибо за Игру!
Б1. Прикрой, браток! Хочу взаимную блокировку устроить.
Б2. Давай, ага. Я отвлеку их внимание в GUI.
Б. Ай, больно! О-ё-ёй!
Р. Спокойно, жить будешь. Усы только подрежу, чтоб не торчали.
Р. Fixed...
T. Yes, indeed.
Б. See you soon!
Р. Релиз? (ну!)
T. Релиз? (хм...) Релиз. (ок)
Б. Релиз! Релиз! Релиз! (ура, мы будем жить!)
Б1. Дорогой, сколько лет, сколько зим! Где пропадал?
Б2. Попался на регрессионных тестах. Пытали, ироды, перепихивали друг другу, но отпустили за недостатком улик.
Б1. Жили, не тужили, а тут на тебе рефакторинг.
Б2. Ерунда. Нас просто перенесут из одного класса в другой, и доставка бесплатна!
T. Ага, попался, голубчик!
Б. Нас много, всех не переловите!
T. Мы оставим тебя в живых, если будешь двойным агентом.
Б1. Слыхал? Наш продукт объединяют с другим!
Б2. О, новый ареал, новые знакомства!
Р. Батюшки святы, это что за баг: "Не работает"? Что не работает? Когда? Логи?
Т. Да ладно, у нас конкурс на самую короткую тему бага.
Т. Это beta? Ничего не работает!
Р. Зато есть то, что не работает. А это уже кое-что!
P1. Это что такое? Хочу сделать check in, а меня просят квадратное уравнение решить!?
P2. О, это экспресс-проверка. Решишь значит, ты в форме, а check in не случайный.
Б. Тайну жизни не нашел? Это просто, кроха:
То, что Коду хорошо, Багу будет плохо.
К. Голова кружится. Зачем здесь рекурсия?
Р. Цыц. Интерпретатор преобразует ее в итерацию.
O1. Ты почему такой грустный?
O2. Оставили на второй год не унаследовал родительских свойств.
О1. Что такое статический метод?
O2. Статику проходят в старших классах.
Б1. Ты куда это вырядился? Галстук нацепил!
Б2. Милочка, релиз это военное время. Надо маскироваться.
T. Почему нумерация сотрудников начинается с нуля?
Р. Потому что с нуля начинается нумерация элементов в массиве.
Р1. Что такое
TDD?
Р2. Представь, ты Творец. Твой тест это Адам, а твой код это Ева, сотворенная из ребра Адама по его образу и подобию.
T. Утечки памяти 10 KB за каждые две минуты. Malloc без free?
Р. Добро пожаловать в наш клуб! Свободна вакансия "garbage collector".
Б1. Ты жив? Как? Тебя же исправили?
Б2. Машина времени! Откатились к старой версии класса!
Б1. Дорогая, а что там маглы в отчете пишут?
Б2. "Проверено насекомых нет".
T. Ломать, крушить и рвать на части...
Б. Вот это жизнь, вот это счастье!
Б1. Внимание, начинаются автотесты. Срочно в багоубежище!
Б2. Подумаешь, автотесты. У нас и там родственники имеются.
T. Попался, голубчик!
Б. Ха-ха-ха. Руки коротки! Я в Красной Книге.
Б1. Соседа поймали, судить будут.
Б2. Все будет хорошо, он вернется. Дадут Deferred или As Designed.
Б1. Милочка, а что у нас на ужин?
Б2. Два объекта, исключенных из класса.
Б1. Ну вот опять :) Давай в конструктор внедримся. Хочу отличников!
К. Стой, стрелять буду. Пароль!
Б. Спокойно, свои.
К. Дурик, ты зачем усы сбрил?
Р. Ребя, сидите тихо и не высовывайтесь.
Б. Мы без отката не согласны!
О. Прочитала "Баговодство". Вы такие же как мы, только с крылышками!
Б. Да здравствуют смешанные браки!
Р. А почему ты решил, что это баг? Мне нравится!
Т. Нравится пароль в реестре в открытом виде?
Т. А что у нас в черном ящике?
Б. Все хорошо, товарищ. Не извольте беспокоиться.
Т. Ну как вы тут живете-можете?
О. Нам бы unit-тест на инкапсуляцию, а?
O1. И почему мы такие толстые и неуклюжие?
O2. Полемо.. Палима... Полиморфизм, вот!
O1. Какой ты умный!
Б. Предлагаю мирный договор на два релиза.
Т. Только безоговорочная капитуляция!
О1. Мамочка, у нас в классе появился новый объект. Я хочу с ним дружить.
02. Будь осторожна, дочка. Каковы его свойства? Усы жучиные не торчат?
T. 1000 одновременных inserts в секунду? Этого не будет.
Б. Дорогая, до релиза мы точно доживем.
Т. А что это за файлы остаются в %TEMP%?
Р. Временные файлы. Для этого каталог и создан.
T. Нет ничего более постоянного, чем временные файлы. Кто их удалит?
Р. Ну хорошо, это будет новая фишка в следующей версии.
К. А как мне инициировать исключение, когда нет места на диске?
Р. Если у чувака нет места на диске, то ему просто будет не до нас.
T. Кусок меню не виден на экране при разрешении 1024*768.
Р. By design. Сегодня уже нет таких дохлых мониторов.
T. Пошел продавать свой iPhone.
Б1. Папа, я подсмотрел! У них нет деструкторов!
Б2. Отлично, сынок. Сегодня ночью атакуем классы.