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

суббота, 28 марта 2020 г.

УВД

Утилизацией вторсырья дома (УВД) весьма удобно начать заниматься в грядущую неделю изоляции. Обилие времени на домашние дела вполне способствуют приобретению и развитию полезных привычек. Показательным считаю пример немцев, которые давно уже разделяют мусор дома: моют тару стеклянную и пластиковую, пищевые остатки пакуют в бумагу, каждый тип отходов имеет свой разноокрашенный контейнер. За прошедший период с начала массового распространения вируса COVID-19 многие обзавелись хорошей привычкой чаще мыть руки или протирать их дезинфицирующими растворами. Так почему бы к этой полезной привычке не прибавить ещё одну, полезную не только дому, но и всей планете? Первый шаг по спасению окружающей среды - мытьё вторсырья (стеклянная и пластиковая тара) после использования и перед отправкой в переработку или выбрасыванием в мусорный контейнер. Но также можно сделать и второй шаг - складировать уже чистые ёмкости где-то дома, а через некоторое время обогатиться за счёт сдачи на переработку. Хорошо помню те времена, когда за десяток помытых бутылок от своего лимонада и папиного пива можно было купить большой стаканчик мороженого. А буквально пара недель, проведённые в германской семье, приучили меня ополаскивать лотки из-под кулинарных вкусняшек, возить в супермаркет ящики пустых бутылок для получения скидки на последующие покупки.
Да, сейчас у нас мало приёмных пунктов вторсырья, кроме металлолома. Но я очень надеюсь, что в недалёком будущем у меня будет возможность окупать высокие тарифы на утилизацию мусора такой неприхотливой привычкой, которая кому-то покажется скупидомством, но она же и приучает к экономии. На бытовом мусоре можно не только разбогатеть, но и развить творческие способности.
Пищевые отходы, составляющие весомую часть мусорного ведра, приносят пользу только тем, у кого есть скот или приусадебный участок. В офисах же максимально что собирают - это испитая кофейная гуща, которая по мере высыхания служит ароматизатором на общей кухне, а в последствии удобрением для цветов или скрабом в бане. Вполне понимаю, что в сельской местности возможности для содержания животных и участка побольше, чем в городской среде. Видимо по этой причине тариф с индивидуальщиков в селе меньше, чем с многоквартирных домов, а в городе тарифы весьма странно установлены обществом "Хартия". У частника всегда больше мест для складирования и утилизации: обязательно есть сарай для хранения того же металлолома или пластика до набора весомого количества; есть участок земли, всегда нуждающийся в подкормке микроэлементами, которых полно в пищевых очистках; осталась печь в доме или сложен камин, во дворе непременно пятачок с мангалом, где можно сжечь бумагу и деревянные остатки. Житель многоквартирного дома обделён всем этим, а значит объём отходов у него больше, чем с индивидуальщика. Почему же "Хартия" берёт с ИЖС больше? Не понятно. Нигде никаких результатов обследований не опубликовано, значит тарифы взяты наобум. Но моя статья - это не столько жалоба в ПотребНадзор, а сколько подсказки тем, кто устремлён в чистоту и благосостояние. Так что, если у вас нет возможности отдать недоеденное хрюшкам в загоне или утрамбовать ими компостную кучу, то приучайте себя складывать их в бумажные пакеты. Кстати, для этого нет необходимости приобретать такие пакеты, поскольку почтовые ящики всегда завалены бумагой, а искусство оригами давно предложило несколько вариантов складывания рекламных листков в столь полезные конвертики.
Газеты, журналы и прочую бумагу тоже не обязательно выбрасывать в мусорное ведро. Офисная бумага, растворённая в строительном клее ПВА, разбавленном водой один к трём, давно является мне заменителем шпатлёвки и жидких обоев. Либо может быть инструментом для изделий из папье-маше. Кстати, одна московская усадьба частично сделана не из камня, а из смеси бумаги и яичного белка. И эта конструкция вполне себе живёт уже несколько веков! Если же ваше семейство богато детьми, то непременно в дни изоляции займитесь плетением из бумажной лозы, сложенных полос или конфетных фантиков. Мелкая моторика замечательно разовьёт мозг как у ребёнка, так и не даст застояться старческому организму. Если же сплетённые или слепленные изделия покрыть лаком, то они прослужат очень долго и станут семейным раритетом. Обклеенные газетами или остатками обоев коробки из-под обуви могут составить вместимый и оригинальный шкаф для хранения мелочёвки (канцелярия, нижнее бельё, посуда, коллекции, инструменты и так далее). А кармашки на коробки для сменяемых подписей можно сделать из пластиковых прозрачных пакетов или бутылок. Салфетки-ромашки и жалюзи из фантиков непременно порадуют детишек в процессе изготовления и будут поднимать им аппетит впоследствии. Из журнальных страниц получается очень крепкий складывающийся ящик под бутылки, для которого всегда найдётся место в багажнике, так как пустой или наполовину заполненный он всего лишь равен объёму журнала.
Бутылки пластиковые, стеклянные и металлические - первейший и обильный материал для переработки. Но их обязательно надо ополоснуть после использования. Привейте себе эту полезную привычку во время самоизоляции. О том, сколько всего полезного можно соорудить в домашних условиях из пластиковых бутылок, писать не буду. Дам лишь совет тем, кто надеется сдать пластик в пункт сбора попозже. Отрежьте донышко и горловину, разрежьте трубу вдоль и тогда эти цилиндры, уложенные друг в дружку, займут намного меньше места. А отрезанные мелочи складировать можно в вышеописанных коробках. Либо покрошить пластик в жестяные банки, расплавить его и полученными пластиково-жестяными кирпичиками выложить дорожку в саду. Из металлических банок, не сданных на металлолом, можно выложить дорожку по-весне простым втаптыванием в размягчённую после снега почву. Из стеклянных бутылок, не сданных в посудо-приёмный пункт, можно строить стенки грядок или даже целого сарая. А вообще, я мечтаю о тех временах, когда какой-нибудь химик начнёт массово производить тротуары или шоссе из пластика и стекла.
Целофановые и прочие пластиковые пакеты в советские времена стирались, сушились на кафельной стене и далее ещё много раз переиспользовались. Но когда они окончательно рвались и изнашивались их всё-равно не выбрасывали, потому что рачительные хозяйки резали из них нити (полосы) и сплетали в хозяйственные сетки. Также поступали и с капроновыми колготками, а из детских хлопчатобумажных вязали коврики. Так почему бы не продолжить такую полезную традицию: сполоснуть пакет после испития молока, подсушить и порезать на ленты, далее крючком или макраме-узлами создать множество полезностей: мешок для белья или обуви, кашпо под цветок, хозяйственную сетку или ящик, подошву для тапочек и всякие иные штучки.
Одежда и обувь после своего прямого назначения может быть сырьём для творчества: кожаные сумки, холщовые ковры, детские игрушки, бижутерия, комнатный декор. А какую удобную (прочная, лёгкая, в свёрнутом виде - теннисный мячик) сумку для продуктов можно сшить из зонтика! Не ограничивайтесь половыми тряпками и чучелом в огороде, фантазируйте и реализовывайте свои творческие способности. И тогда дом ваш станет уютнее от самодельных штучек, цена которых возрастёт для вас в дни самоизоляции.
Все идеи, высказанные выше, легко реализуемы в домашних условиях и для начала ничего не придётся докупать - из любого мусора можно соорудить шедевр искусства или просто мелкую полезняшку, поэтому смело приступайте прямо сегодня.

суббота, 4 мая 2019 г.

Облегчаем чемодан

Сезон отпусков начался, а значит грузоперевозки смещаются в сторону пассажиров. Всё больше авиа-компаний предлагают билеты без оплаты багажа или снижают вес ручной клади. Даже железнодорожные и автобусные турникеты проверяют объём чемодана. Как же при таком натиске оплаты за каждый перевес умудриться моднице выглядеть в отпускные дни или на корпоративных, командировочных тусовках разнообразно и соответственно случаю? На каждый день нужны 2-3 наряда, к которым подходит разная обувь. Не уместно в утренних кроссовках для зарядки прийти на ужин в ресторан, или в пляжных шлёпанцах в офис.
Для уменьшения количества нарядов уже давалась подсказка в виде костюма-перевёртыша. Из четырёх деталей двустороннего цвета можно скомпоновать уйму нарядов: длинный сарафан складывать в юбку или мини-платье, два рукава могут быть длинными или короткими, четвёртый элемент - накидка - может стать шляпкой или топиком.
Многофункциональные части наряда
Но как же к разным нарядам уложить в чемодан столько же разных туфель, босоножек, шлёпок, танкеток? Некоторые производители обуви предлагают сменный верх для толстой подошвы, другие меняют каблук. Но, к сожалению, платформа не всегда в моде, а разница высоты каблука не самым лучшим образом влияет на супинатор. Подобрать же удобную колодку - задача всегда очень индивидуальная. Считаю, что для каждой высоты каблука должен быть своя основа. Поэтому предлагаю разделить отпускную обувь на три части: подошва, каблук и верх. Их легко и просто можно уложить в чемодан. Если же они из дерева или композитного пластика, то и общий вес багажа значительно снизится.
Подошва без каблука и верха, вид сбоку
Подошва без каблука и верха, вид на отверстие для крепления каблука методом поворотной защёлки
Виды съёмного каблука - шпилька, устойчивый
Верх шлёпанцев можно сшить из кусочков кожи или ткани
Верх босоножки можно изготовить самостоятельно из ниток или ткани
Верх классических "лодочек" лучше закупать у обувщиков-профессионалов
Другой вариант экономии - одна подошва с каблуком, но сменным верхом и колпаками на каблук. Цветовое сочетание каблука и верха быстро сменить, если верх и колпак крепить на винтики. При этом винтик каблучного колпака будет служить подбивкой, то есть можно его делать из пластмассы для снижения уровня звука при ходьбе.
Разноцветные колпаки на каблук
Ещё одно преимущество от обуви со сменными деталями - материал производства. Ведь это вполне может быть вторсырьё - пластик бутылочный.
Обувщики и текстильщики, давайте сделаем приятное и дамам, и носильщикам их чемоданов - значительно сократим количество вещей и вес багажа.  

понедельник, 1 апреля 2019 г.

Контрасты

Универсальный актёр по щелчку может менять образ и настроение. Любому сотруднику группы разработки ПО важно умение держать себя в руках, особенно тестировщику во время обсуждений нужна принципиальность взглядов для отстаивания баговой стороны дела.
Предлагаю игрой "Контрасты" развивать и укреплять способности:
- умение держать себя в руках во время конфликта;
- отвечать спокойно на грубость;
- быстро менять положительные и отрицательные эмоции;
- адекватно воспринимать критику.
Игра проводится попарно или двумя группами.
Этап 1. Оппоненты встают друг против друга на расстоянии вытянутой руки. Глядя друг другу в глаза говорят 2-3 раза поочерёдно первый - "Милашка", второй - "Лапушка". Делают по шагу назад, расходятся. Повторяют 2-3 раза поочерёдно первый - "Милашка", второй - "Лапушка". Количество шагов ограничено стенами помещения. Энергетика положительных слов должна усиливаться с удалением игроков друг от друга.
Этап 2. Оппоненты встают друг против друга на самом большом расстоянии, у противоположных стен помещения. Глядя друг другу в глаза говорят 2-3 раза поочерёдно первый - "Грязь", второй - "Помои". Делают по шагу навстречу, сходятся. Повторяют 2-3 раза поочерёдно первый - "Грязь", второй - "Помои". Количество шагов ограничено стенами помещения, до минимального расстояния друг против друга в 50-70см (вытянутая рука). Энергетика отрицательных эмоций должна ослабевать с приближением игроков друг к другу.
Этап 3. Оппоненты встают друг против друга на самом большом расстоянии, у противоположных стен помещения. Глядя друг другу в глаза говорят по одному разу поочерёдно первый - "Грязь", второй - "Лапушка". Делают по шагу навстречу, сходятся. Повторяют по одному разу поочерёдно первый - "Грязь", второй - "Лапушка". Количество шагов ограничено стенами помещения, до минимального расстояния друг против друга в 50-70см (вытянутая рука). Энергетика отрицательной и положительной эмоций должна ослабевать с приближением игроков друг к другу.
Этап 4. Оппоненты встают друг против друга на расстоянии вытянутой руки. Глядя друг другу в глаза говорят по одному разу поочерёдно первый - "Милашка", второй - "Помои". Делают по шагу назад, расходятся. Повторяют по одному разу поочерёдно первый - "Милашка", второй - "Помои". Количество шагов ограничено стенами помещения. Энергетика отрицательной и положительной эмоций должна усиливаться с удалением игроков друг от друга.
Этапы 1 и 2 развивают энергетику эмоций, этапы 3 и 4 учат владеть собой и отвечать улыбкой на грубость.
Усложнить игру можно сменой эмоций по хлопку ведущего, рандомно. При этом не стоит менять расстояние между оппонентами.
Негативные слова "Грязь", "Помои" и положительные "Милашка", "Лапушка" можете заменить любыми другими, но ассоциации должны соответствовать эмоциям.
Завершение игры должно быть на позитивной волне для обеих сторон.
Актёры используют подобное упражнение на тренингах. А когда и где играть сотрудникам группы разработки? Времени на исполнение вполне достаточно пока заваривается чай или смешивается капучино. Так что смело ходите парами в буфет и заражайте своим оптимизмом там сотрудников соседних отделов.

среда, 19 декабря 2018 г.

Храни меня..

Главное в работе тестировщика - сравнивать реализацию со стандартами. Для операции сохранения объекта стандартов нигде не прописано, значит мы в своих исследованиях должны оперировать привычными действиями от большинства крупных продуктов. Но с появлением Windows 10, как минимум одно приложение Notepad/Блокнот перестало быть логичным: окно редактора не закрывается по нажатию кнопки "х" с новосозданным файлом. Особенно странным выглядит это поведение на фоне всех остальных подобных редакторов, например, WordPad и MS Word.
Возможно аналогично размышляли и разработчики ClearSQL, когда программировали свой алгоритм для операции "Save As". По их мнению все изменения должны сохраняться как в новом проекте, так и в исходном оригинале.
По результатам моего возмущения на основе вышеописанных багов у меня родились две схемы об операциях сохранения объекта. Под объектом подразумеваю файл, проект приложения, строку таблицы или пакет базы и тому подобное.

Расширенная схема операций с объектом
1. SAVE / Операция доступна как для новосозданного объекта, так и для всех последующих его вариаций
1.1. объект существует
1.1.1. объект изменён
1.1.1.1. проверки файловой системы: достаточность свободного пространства для всего содержимого объекта; доступ на запись/перезапись, изменение, удаление
1.1.1.1.1. замена предыдущей версии объекта его новым вариантом / Обработка ошибок может выполняться на уровне операционной системы
1.1.2. объект не менялся
1.1.2.1. проверки файловой системы: доступ на запись/перезапись, изменение, удаление; разрешены изменения параметров объекта
1.1.2.1.1. замена параметров: даты-времени сохранения, без изменения даты создания объекта
1.2. новый объект создан
1.2.1. выбор места хранения нового объекта / Диалог выбора сервера/диска, папки для хранения объекта
1.2.1.1. присвоение имени новому объекту
1.2.1.1.1. проверка существования одноимённого объекта / Обработка ошибок может выполняться на уровне операционной системы
1.2.1.1.1.1. проверки файловой системы: достаточность свободного пространства для всего содержимого объекта; доступ на запись/перезапись, изменение, удаление / Обработка ошибок может выполняться  на уровне операционной системы
1.2.1.1.1.1.1. создание нового объекта в (файловой) системе / Операция выполняется (операционной) системой
2. SAVE AS.. / Все изменения сохраняются только в новый объект. Первоначально открытая версия остаётся неизменной на момент открытия объекта в редакторе
2.1. выбор нового места хранения  / Диалог выбора сервера/диска, папки для хранения объекта
2.1.1. присвоение имени новому объекту
2.1.1.1. проверка существования одноимённого объекта / Обработка ошибок может выполняться на уровне операционной системы
2.1.1.1.1. проверки файловой системы: достаточность свободного пространства для всего содержимого объекта; доступ на запись/перезапись, изменение, удаление / Обработка ошибок может выполняться на уровне операционной системы
2.1.1.1.1.1. создание нового объекта в (файловой) системе / Операция выполняется (операционной) системой
3. COPY TO..  / Операция доступна только для объекта без изменений или со всеми сохранёнными изменениями
3.1. выбор места хранения / Диалог выбора сервера/диска, папки для хранения объекта
3.1.1. присвоение имени новому объекту
3.1.1.1. проверка существования одноимённого объекта / Обработка ошибок может выполняться на уровне операционной системы
3.1.1.1.1. проверки файловой системы: достаточность свободного пространства для всего содержимого объекта; доступ на запись/перезапись, изменение, удаление / Обработка ошибок может выполняться на уровне операционной системы
3.1.1.1.1.1. создание нового объекта в (файловой) системе / Операция выполняется (операционной) системой
4. ARCHIVE / Операция доступна только для объекта без изменений или со всеми сохранёнными изменениями
4.1. выбор одного или нескольких объектов для операции
4.1.1. уменьшение объёмов объектов / Функция стороннего архиватора
4.1.1.1. переформирование нескольких объектов в один / Функция стороннего архиватора
4.1.1.1.1. выбор места хранения / Диалог выбора сервера/диска, папки для хранения объекта
4.1.1.1.1.1. присвоение имени новому объекту
4.1.1.1.1.1.1. проверка существования одноимённого объекта / Обработка ошибок может выполняться на уровне операционной системы
4.1.1.1.1.1.1.1. проверки файловой системы: достаточность свободного пространства для всего содержимого объекта; доступ на запись/перезапись, изменение, удаление / Обработка ошибок может выполняться на уровне операционной системы
4.1.1.1.1.1.1.1.1. создание нового объекта в (файловой) системе / Операция выполняется (операционной) системой
5. BACK UP / Операция доступна только для объекта без изменений или со всеми сохранёнными изменениями
5.1. выбор одного или нескольких объектов для операции
5.1.1. сжатие, группировка объектов в один объект или папку / Опциональная функция стороннего копировальщика
5.1.1.1. выбор места хранения / Диалог выбора сервера/диска, папки для хранения объекта
5.1.1.1.1. присвоение имени новому объекту
5.1.1.1.1.1. проверка существования одноимённого объекта / Обработка ошибок может выполняться на уровне операционной системы
5.1.1.1.1.1.1. проверки файловой системы: достаточность свободного пространства для всего содержимого объекта; доступ на запись/перезапись, изменение, удаление / Обработка ошибок может выполняться на уровне операционной системы
5.1.1.1.1.1.1.1. создание нового объекта в (файловой) системе / Операция выполняется (операционной) системой
6. DUPLICATE / Операция выполняется на основе последней сохранённой версии объекта. Количество дубликатов и новые уникальные идентификаторы объектов изменяются в процессе операции.
6.1. определение количества копий
6.1.1. авто-определение места хранения новых объектов / Используется внутренняя настройка редактора
6.1.1.1. проверки: прав на создание новых объектов, на объём свободного пространства / Обработка ошибок может выполняться на уровне операционной системы
6.1.1.1.1. авто-присвоение новых имён объектам  / Используется внутренняя настройка редактора
6.1.1.1.1.1. создание новых объектов / Внутренняя функция редактора
7. CLONE / Операция выполняется на основе последней сохранённой версии объекта. Копия возможна только одна, уникальный идентификатор объекта изменяется в процессе операции.
7.1. авто-определение места хранения нового объекта / Используется внутренняя настройка редактора
7.1.1. проверки прав на создание нового объекта, на объём свободного пространства / Обработка ошибок может выполняться на уровне операционной системы
7.1.1.1. авто-присвоение нового имени объекту / Используется внутренняя настройка редактора
7.1.1.1.1. создание нового объекта / Внутренняя функция редактора
8. Закрытие редактора с сохранением объекта / Диалог Save или Save As.. для сохранения объекта открывается в перечисленных случаях
8.1. кнопка ОК
8.2. кнопка Yes to All
8.3. кнопка "х"
9. Закрытие редактора без сохранения объекта / Редактор закрывается без предложения о сохранении изменений объекта в перечисленных случаях
9.1. кнопка Cancel
9.2. кнопка No to All
9.3. кнопка Skip
10. Параметры объекта, устанавливаемые/изменяемые в редакторе / Настройки объекта определяются в параметрах редактора, но могут изменяться в процессе сохранения
10.1. формат/расширение файла
10.2. тип данных столбца в таблице БД
10.3. статус подобъекта в проекте
11. Полезняшки/Удобства
11.1. горячие клавиши
11.1.1. Ctrl+S
11.1.2. Ctrl+Shift+S
11.1.3. самонастраиваемые/внутренние для редактора
11.2. стандартные окна и диалоги операционной системы
11.3. авто-предложение места хранения, локализация папки
11.4. фильтр расширений файла
11.5. авто-предложение нового имени объекта
11.5.1. по шаблону
11.5.2. постфиксы/префиксы
11.5.3. с добавлением даты-времени

Краткая схема обращения с объектом
1. Запустить редактор
2. Открыть объект в редакторе
2.1. редактор оставляет исходник как резервную копию в оригинале (место, имя, другие параметры)
2.2. редактор делает копию объекта во временном пространстве, но с темже именем
2.2.1. редактор отображает объект для последующей работы
2.2.1.1. в объект вносятся изменения
2.2.1.1.1. выполнить Save
2.2.1.1.1.1. резервная копия заменяется рабочей версией
2.2.1.1.1.2. обе идентичны
2.2.1.1.2. выполнить Save As..
2.2.1.1.2.1. рабочая версия объекта сохраняется в новое место с новым именем
2.2.1.1.2.1.1. новая версия объекта копируется во временное рабочее пространство, но с темже новым именем
2.2.1.1.2.2. резервная копия остаётся со старыми параметрами: место, имя, без модификаций
2.2.1.1.3. выполнить Clone, Duplicate, Back Up, Archive
2.2.1.1.3.1. проверка на наличие изменений
2.2.1.1.3.1.1. рабочий объект отличен от оригинала, вносились изменения
2.2.1.1.3.1.1.1. предупредить об изменениях
2.2.1.1.3.1.1.1.1. предложить применять операцию к объекту с изменениями
2.2.1.1.3.1.1.1.1.1. изменения объекта сохраняются / Сохранение в авто-режиме или через диалоговое окно
2.2.1.1.3.1.1.1.1.1.1. выполняется операция для рабочей версии, идентичной оригиналу
2.2.1.1.3.1.1.1.2. предложить откатить все изменения и применить операцию к исходной копии
2.2.1.1.3.1.1.1.2.1. рабочая версия с последними несохранёнными изменениями уничтожается
2.2.1.1.3.1.1.1.2.1.1. создаётся новая рабочая версия объекта из оригинала
2.2.1.1.3.1.1.1.2.1.1.1. выполняется операция для рабочей версии, идентичной оригиналу
2.2.1.1.3.1.2. рабочий объект и его оригинал идентичны, изменений не вносилось
2.2.1.1.4. закрыть редактор / Закрыть окно редактора можно: из меню Exit/Close, по кнопкам интерфейса "х" или Close, по нажатию горячих клавиш Alt+F4 (стандарт в Windows). При наличии изменений в объекте закрытие редактора зависит от ответа в диалоге о сохранении объекта.
2.2.1.1.4.1. предупредить о наличии изменений
2.2.1.1.4.1.1. диалог о сохранении объекта закрывается по кнопке OK, Yes, Yes to All, Save
2.2.1.1.4.1.1.1. изменения объекта сохраняются  / Сохранение в авто-режиме
2.2.1.1.4.1.1.1.1. оригинал заменяется рабочей версией: запись поверх или уничтожение оригинала и копирование рабочей версии на место оригинала
2.2.1.1.4.1.1.1.1.1. удаление рабочей версии из временного пространства
2.2.1.1.4.1.1.1.1.1.1. закрытие редактора
2.2.1.1.4.1.2. диалог о сохранении объекта закрывается по кнопке No, No to All
2.2.1.1.4.1.2.1. оригинал остаётся неизменным
2.2.1.1.4.1.2.1.1. удаление рабочей версии из временного пространства
2.2.1.1.4.1.2.1.1.1. закрытие редактора
2.2.1.1.4.1.3. диалог о сохранении объекта закрывается по кнопке Cancel, Close, "x"
2.2.1.1.4.1.3.1. оригинал остаётся неизменным
2.2.1.1.4.1.3.1.1. рабочая версия остаётся в прежнем состоянии
2.2.1.1.4.1.3.1.1.1. редактор остаётся открыт с рабочей версией объекта
Дальнейшие операции (редактирование, перемещение) применяются к рабочей версии, идентичной оригиналу

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

среда, 27 июня 2018 г.

Привычка кодить

Прогноз проблем по привычкам программиста
(рубрика - Нюх на баги)
Исходя из многолетнего опыта работы программистом, аналитиком-внедренцем, в тестировании и техподдержке могу заверить вас, что у каждого разработчика есть свой почерк написания кода. И не важно насколько строгие правила кодирования приняты в компании: кто-то играет с порядком параметров, кто-то с наименованиями объектов, кто-то с самописными или стандартными подпрограммами. Одно и тоже действие можно написать, используя стандартные функции (тогда тестировщикам заранее известны слабые места кода), а могут сочинить универсальный или сложно-запутанный код, от которого тестировщикам можно будет ждать всяких непредвиденных ситуаций.
Поэтому, чтоб тестирование не получалось всегда неожиданностью, ниже сопоставлены некоторые человеческие особенности с написанным программистом кодом. А именно, с самым распространённым действием – чаепитие или кофе-брейк. В зависимости от того, как программист готовится или завершает чайно-кофейную церемонию, родились связки с его фирменными ошибками. Когда же сфера IT перешла в удалённый режим, и команды стали распределёнными, естественно пропала возможность наблюдать за общением программиста со "своей кружкой". Но, оказалось, что по скриншоту рабочего стола тоже можно определить тип программиста.
В начале карьеры мои обязанности ограничивались программированием и техподдержкой. В те времена о тестировании вообще никто не говорил и не слышал, потому что сами программисты выполняли аналитику, кодирование, отладку, внедрение и поддержку. Но в силу того, что отпуска в своём большинстве давались полностью (вплоть до 40 рабочих дней), то кому-то приходилось замещать сотрудника в ответственные дни отчётов. В до-САПР-овские времена, когда не было "Галактика" или "Axapta", автоматизация предприятий проводилась собственными силами, а это значит весь код был самописным, без особых корпоративных стандартов. В то время легко было определить почерк кодера: кто-то давал переменным и объектам особенные имена (короткие, нелогичные, без привязки к функционалу), кто-то использовал особые конструкции или ранее-написанные собственные блоки. И если вдруг в отсутствии замещаемого сотрудника падал код, то заместителю поначалу приходилось тратить не мало времени на понимание такого легаси. Вспомните себя студентом, переписывающим пропущенные конспекты лекций от разных однокашников: не с первой страницы начинаешь бегло читать чужой почерк. Также и с легаси-кодом – не с первого блока кода понимаешь логику прописанных команд.
После перехода из универсальных программистов в разряд всемогущих тестировщиков в моём арсенале разнообразия почерков программистов стало больше. При чём сюда добавились и аналитики, и конечные пользователи, присылающие своё видение на проблемы продукта. Высоким словом "разработчик" в некоторых компаниях называют программиста, совмещающего роль с аналитикой. Поэтому, как продумаешь логику, так она и отработает в коде. В моём докладе о лёгкости тестирования кода с помощью утилит аудиторов кода уже говорилось об основных причинах самых заковыристых багов. Они-то и кроются в особенностях почерка кодировщика. А коль скоро характер программиста не перевоспитаешь, то и его фирменные баги вы сможете вылавливать в первую очередь. На счёт скорости обнадёживать вас не буду, но направления для поиска вам будут очевидны.
Итак, типы почерков программистов делю на 6 групп.
Чистюля (аккуратист, педант)
На его рабочем столе никогда не бывает ничего лишнего, весь минимальный набор (клавиатура, мышь, за редкостью чистый лист и карандаш) расставлен "под линеечку", ни пылинки-соринки, ничего мешающего рабочему процессу. Если говорить об иконках на рабочем столе операционной системы компа, то там могут быть лишь стандартные приложения, либо всё необходимое разнесено по папкам. Свою кружку моет сразу после чаепития и убирает на строго отведённое место в закрытом шкафу.
Исходя из описанного поведения, программист-чистюля привык писать код так, чтобы объём и логика кода строго соответствовали описанному заданию, все переменные после использования были очищены. Вроде бы всё должно быть прекрасно, но программист-педант опасен тем, что программа часто недостаточно обрабатывает исключения, не прописанные в ТЗ, либо умышленно опущенные из-за их стандартности, он же привык, что всё разложено по полочкам и ничего лишнего не мешает его взгляду. Перед использованием переменных программист-аккуратист забывает проверить их на корректность объявления и присвоения значений, он же привык, что его кружка всегда чистая. Поэтому код от программиста-чистюли надо проверять исследовательским методом на неописанные в ТЗ ситуации, нагрузочные и интеграционные тесты делать на передаваемые и входящие переменные. В качестве профилактики можно применять правило Code Review, результатом проверки которого является список параметров процедуры, использованных не по назначению.  
Хозяйчик запасливый
Его рабочий стол напоминает склад тысячи мелочей, ящики тумбочки еле закрываются от всего "очень нужного", вполне вероятно он оккупировал и рядом стоящий шкаф под свои полезняшки. Иконок на рабочем столе компьютера видимо-невидимо, разбросаны по всей площади и на первый взгляд в хаотичном порядке. Скорее всего кружку для кофе или чая он держит на своём же рабочем столе, чтоб она всегда была "под контролем", моет её тщательно перед чаепитием. В силу привычек, программист-хозяйчик пишет код "с запасом", программирует неописанное в ТЗ, но на его взгляд возможное при исполнении программы. Код запасливого программиста надо проверять на избыточность объявленных переменных, на достаточность алгоритмов без половинчатого кодирования единичных исключений. Код хозяйственного программиста может быть похож на "лапшу", поэтому в качестве профилактики надо применять оптимизацию блок-схем и сокращать запланированное ему время на написание кода.
Всезнайка
Ученость всезнайки видно по обилию литературы на столе, рабочий стол компьютера – это научный отдел всемирной библиотеки или линки на всевозможные новостные каналы. У него отдельные кружки и стаканы, бокалы для чая, кофе и прочих жидкостей. Их много, и все они разные. Исходя из жизненных пристрастий, код всезнайки заумен, изобилует сторонними библиотеками, возможна перестраховка в виде шифрования. Проверку стоит начинать с поиска "мёртвого" кода. Множество унифицированных вспомогательных функций можно единожды привести в соответствие, но их использование заумным программистом усугубляет интеграционные баги. Обязательной профилактикой для всезнайки служит публичный процесс Code Review, нагрузка по передаче знаний и умений сотрудникам всех отраслей, что позволяет ему понять причины собственных ошибок. Не ограничивайте свои тесты программы от Всезнайки только теорией от гуру, поскольку его сочинение может оказаться слишком навороченным. Пример о граничных значениях: обе функции определяют принадлежность значения к определённому числовому промежутку, но описанный способ матрицы можно применить только к функции "if_cycl" при тестировании "чёрным ящиком".


Рубаха-парень (общительный)
Любитель поболтать вместо кодирования опознаётся по количеству средств связи на рабочем столе. Это могут быть как различные виды телефонов, смартфонов, раций, так и иконки чатов, конференций, аудио-видео коммуникационных каналов. "Свой парень" предпочитает чайно-кофейные кружки из общей кухни, за которыми не надо следить и мыть. У общительного программиста вместо кода на первом месте коммуникации, поэтому программа может быть просто недописана, либо блоки после копи-паста недоправлены. В первую очередь продукт от ультра-разговорчивого программиста надо проверять на точное соответствие ТЗ в области полноты и законченности, каждый из новых пунктов проверять на корректность, не допуская частичной выборки классов эквивалентности. В качестве профилактики по недопущению им багов предлагается не отвлекать его от работы, а общение на нерабочие темы выносить только в перерывы.
Фантазёр жизнелюбивый, живчик
Радость жизни в код не впишешь, и по хаосу на рабочем столе его легко выявить. Среди иконок не мало игр. Кроме компьютера на столе бытовое множество вещей, будто дом или объект его увлечения переехал на работу. Разнообразные чайно-кофейные кружки, в том числе и чужие, можно найти не только на столе, но и в тумбочке, или на чужом столе. Он не замечает даже, когда меняет бокалы, стаканы на общественные или соседские. Это признаки (законы) общежития, и они отражаются в его коде в виде опечаток, обилия неоптимизированного кода, неочищенных переменных и параметров без присвоенных значений. Из-за лёгкого отношения программиста к жизни тестировщику нужно тщательно проводить регрессионные и нагрузочные тесты. Профилактикой может быть работа в паре с Чистюлей или Всезнайкой до момента, когда за него будут выполнять более 30-40% задач.
Пофигист (разгильдяй, тупокодер)
Бардак и грязь на столе, немытые кружки, минимум иконок – признаки тупокодера. Его код не низок, не высок, не узок, не широк, то есть на первый взгляд в точности соответствует ТЗ. Но опасайтесь недописанных блоков, недопроверенных опечаток, неучтённых исключений, незакрытых уязвимостей. Все виды и методы тестирования актуальны для кода от пофигиста. Растормошить его можно доверить любому увлечённому общим делом сотруднику.

Рекомендации по определению типов: смотрите когда и как тщательно программист моет кружку (до или после чае-кофе-пития), сколько их у него и в каком они состоянии, что ещё имеется на рабочем столе, изучите расположение иконок в его операционной системе. Проанализируйте баги и их причины, составьте таблицу в разрезе программистов. Обычное наблюдение даст вам понятие о почерке программиста: сопоставьте типы кодеров и их фирменные баги. Впоследствии можете начинать тестирование с фирменных багов, это ускорит Вашу работу и повысит качество продукта, потому что будете находить проблемы, казалось-бы не очевидные, но вполне вероятные на стороне конечного пользователя.
И ещё несколько подсказок.
Типы могут пересекаться в одном программисте, поэтому подглядывать за поведением кодера стоит регулярно, особенно перед передачей задачи на тестирование.
Не буду скрывать, к некоторым перечисленным типам относится и мой стиль кодирования.
Наиболее действенна профилактика багов, когда в неё вовлечены все сотрудники. Для этого можно на стендапах или ретроспективах выделять время для напоминалок, а сами правила формулировать в стишках, песенках, поговорках или анекдотах. Например, для забывающих очищать переменные упомяните лозунг "Уходя гасите свет" с расшифровкой о нагоревших киловаттах для пустоты. Также действенны публичные Code Review с привлечением тестировщиков в качестве слушателей. Такие собрания полноценно заменяют митинги о передаче знаний.
Надеюсь, у каждого из вас уже есть свой список типов программистов и их фирменных багов. Это хорошее подспорье для увеличения скорости проверки продуктов.