верхнеуровневый что это значит
Гинекологический мазок «на флору»: на что смотреть, и как понять
Большинству женщин мазок «на флору» знаком, как самый «простой» гинекологический анализ. Однако исследование куда «полезнее», чем может казаться. И всего несколько (а то и одно) отклонений способны подсветить значимые проблемы, еще до появления каких-либо симптомов. Так как же понять полученные результаты? Рассказываем по пунктам.
1. Эпителий
Как известно, любой живой объект в природе имеет ограниченный срок жизни, по истечении которого он погибает «от старости».
Эпителий в гинекологическом мазке – это и есть слущенные «старые» клетки слизистой оболочки влагалища, цервикального или уретры (в зависимости от оцениваемого локуса). Которые могут присутствовать в материале в умеренных количествах.
Превышение нормативных пределов («много» или «обильно») может указывать на:
Уменьшение или отсутствие эпителия в мазке – на атрофические изменения, недостаток эстрадиола или избыток андрогенов.
Кроме того, ввиду зависимости эпителия от уровня половых гормонов, его количество в материале может сильно меняться в зависимости от дня цикла, начиная с единичного «в поле зрения» в самом начале – до умеренного и даже большого количества ближе к овуляции и во время нее.
А появление в мазке так называемых «ключевых клеток» (эпителий, «облепленный» мелкими кокковыми бактериями) – является маркером бактериального вагиноза.
2. Лейкоциты
«Норма» лейкоцитов в мазке также сильно зависит от стадии цикла и уровня половых гормонов, а также исследуемого локуса.
Так, за «максимум» для:
Повышение показателя – очевидно, свидетельствует о воспалении, а полное отсутствие может иметь место в норме в самом начале цикла.
Слизь
Результат «отсутствует», «мало» или «умеренно» для этого показателя является нормой, что тоже связано с индивидуальными особенностями гормонального фона и циклом.
А вот «много» слизи в мазке – может свидетельствовать о том, что мазок взят в середине цикла, дисбиотических изменениях или избытке эстрогенов. Поэтому требует внимания специалиста или, как минимум, контроля в динамике.
Флора
Преобладающей флорой женских половых путей в норме у женщин репродуктивного возраста, как известно, являются лактобактерии (или палочки Дедерлейна). Количество которых может быть от умеренного до обильного, в том зависимости, в том числе, от фазы менструального цикла.
Патологические элементы
Присутствия мицелия грибов, трихомонад, диплококков (в том числе и возбудитель гонореи), лептотрикса, мобилункуса и прочих патогенных микроорганизмов в нормальном мазке не допускается, даже в минимальном количестве. А их выявление – серьезный повод незамедлительно обратиться за лечением.
Технологии процессного управления
Три правила выделения процессов верхнего уровня
Технологии процессного управления
Три правила выделения процессов верхнего уровня
Сергей Ковалев — руководитель и ведущий консультант консалтинговой компании БИТЕК (Бизнес-инжиниринговые технологии). Имеет 20-летний опыт организационного проектирования и управления бизнес-процессами. Автор публикаций, семинаров и книг по стратегическому и процессному управлению и развитию.
Количество процессов верхнего уровня
Эмпирически, из практического опыта выведено оптимальное количество выделенных бизнес-процессов.
Правило 1. На верхнем уровне деятельность компании должна быть разбита на 15-20 бизнес-процессов верхнего уровня.
Практика показала, что разбиение компании на 15-20 процессов верхнего уровня является оптимальным с точки зрения контроля и интеграции процессов со стороны первого руководителя. В таком случае первый руководитель будет регулярно (как правило ежемесячно) получать 15-20 отчетов по выполнению ключевых показателей бизнес-процессов верхнего уровня. Также первому руководителю нужно будет активно учавствовать и принимать решения по оптимизации взаимодействий между 15-20 бизнес-процессами.
Если компанию разбить на большее количество бизнес-процессов верхнего уровня, то уровень контроля процессов со стороны первого руководителя будет излишне детальным, а интеграция процессов между собой потребует много времени. Такая детальная интеграция — не соответствует уровню первого руководителя, так как требует глубокого погружение на операционный уровень каждого бизнес-процесса.
Пример. В одной компании специалистами по описанию процессов было выделено 80 бизнес-процессов верхнего уровня. Это обосновывалось тем, что деятельность компании слишком сложная и требует множества бизнес-процессов. Когда специалистам сказали, что при таком подходе их генеральному директору придется ежемесячно рассматривать 80 отчетов о выполнении ключевых показателей по бизнес-процессам верхнего уровня, а также участвовать в выстраивании взаимодействий между этими 80 процессами, складывая их как мелкий пазл, то специалисты по описанию процессов задумались, но остались на своем решении. Однако, когда эта работа была доведена до генерального директора, он попросил специалистов по описанию процессов агрегировать многие процессы для того чтобы уровень контроля и интеграции с его стороны был оптимальным. В результате в этой компании на верхнем уровне стало 18 бизнес-процессов.
Практика показала, что при работе с процессами любая компания в итоге придет к 15-20 бизнес-процессам на верхнем уровне, которое, повторюсь, является оптимальным. Конечно есть небольшие компании, как например рассмотренная в части 5 компания «Видеомир», в которой было выделено 12 бизнес-процессов верхнего уровня. Также есть крупные компании, в которых приходится выделять много обеспечивающих бизнес-процессов, добавляя к типовому перечню такие обеспечивающие процессы как промышленная безопасность, экологическая безопасность, обеспечение электроэнергией и др. — в результате чего перечень процессов верхнего уровня может достигать количества 22-24 и даже выше. Но в среднем, как показывает практический опыт на верхнем уровне количество бизнес-процессов составляет значение 15-20.
Важность процессов верхнего уровня
На верхнем уровне все бизнес-процессы должны быть соразмерно важны для достижения стратегии компании. Не допускается на верхнем уровне рядом с важными и крупными процессами, размещать неважные и мелкие бизнес-процессы.
Правило 2. Бизнес-процессы верхнего уровня должны быть равнозначными с точки зрения важности для достижения стратегии компании.
Давайте рассмотрим, как влияет это правило на выделение бизнес-процессов верхнего уровня.
Пример. В торговой компании, занимающейся дистрибуцией лекарств (подробнее сотрите часть 5) в группе управленческих бизнес-процессов имеется процесс по управлению товарным запасом (рис. 20). Ранее на верхнем уровне этого процесса не было, так как он входил в состав бизнес-процесса закупки лекарств и был на втором уровне. Однако, с этим процессом связаны три ключевые проблемы и соответствующие им ключевые показатели.
Первый проблемный ключевой показатель — это величина товарного запаса, который достигал значения 6 месяцев продаж. То есть на складе товара лежало на 6 месяцев продаж и склад за год оборачивался всего лишь 2 раза. Таким образом оборачиваемость товарного запаса были слишком низкой, а его величина и соответственно затраты на складирование и поддержание товарного запаса были слишком высокими.
Вторым проблемным ключевым показателем по товарном запасу, являлся ассортиментный дефицит, который в определенный периоды времени достигал значения 20%. Когда клиенты направляли в компанию заказы на поставку лекарств, то оказывалось что по 20% ассортиментным позициям, товар на складе отсутствует. Соответственно компания теряла выручку, а удовлетворенность клиентов снижалась, и они переключались на других поставщиков лекарств. Основной причиной большого ассортиментного дефицита было то, что отсутствующий товар негде было размещать на складе, так как склад был забит большим количеством другого товара. То есть основная причина была связана с большим товарным запасом.
И третий проблемный ключевой показатель — это доля неликвидной продукции, которая также была высокой. Под неликвидной продукцией в компании считались лекарства со сроком годности менее 6 месяцев. Такие лекарства приходилось продавать с существенными скидками, то есть неликвидная продукция быстро обесценивалась и приводила к финансовым потерям. Причиной большого количества неликвидной продукции, как и большого товарного запаса были излишние закупки.
Когда руководители компании изучали опыт работы дистрибьютеров лекарств в других странах, то увидели, что там средняя величина товарного запаса составляет 2 месяца продаж. То есть при одном и том же объеме продаж товарным запас был в 3 раза меньше и требуемый размер склада тоже, соответственно затраты на складирование и поддержание товарного запаса также в 3 раза были меньше. Также было понятно, что все три проблемы товарного запаса взаимосвязаны и что ключевая причина трех проблем связана с излишними закупками и отсутствию должной работы по управлению товарным запасом.
Сначала в торговой компании ответственным за эти показатели являлся отдел закупок, так как процесс по управлению товарным запасом входил в состав процесса закупок. Но отдел закупки не смог обеспечить улучшение этих трех ключевых показателей по двум причинам:
• отдел закупок был сконцентрирован на других своих основных процессах — это поиск поставщиков, формирование заказов на поставку, их отслеживание и др.;
• поставщики лекарств большими скидками стимулировали отдел закупок закупать в прок.
В итоге руководством компании было принято решение о выведении процесса по управлению товарным запасом на верхний уровень и назначении другого ответственного за этот процесс (владельца процесса). Теперь процесс по управлению товарным запасом непосредственно контролировал генеральный директор, а выполнением этого процесса занималась новая служба управления товарным запасом. Эта служба формировала отчетность по товарному запасу, анализировала ее и предлагала инициативы по оптимизации товарного запаса. Генеральный директор рассматривал эти отчеты и инициативы, принимал решения, а также контролировал как это влияет на ключевые показатели по товарному запасу. В результате этой работы в течение года все три проблемы по товарному запасу были устранены, а соответствующие три ключевых показателя были значительно улучшены.
Согласно правилу равнозначности, наиболее важные и проблемные процессы целесообразно поднимать на более высокие уровни процессной модели компании. Полезно отметить, что в различных компаниях есть много похожих бизнес-процессов, но они могут находится на разных уровнях процессной модели по причине различной важности для стратегии компании, а также их различной степени проблемности.
Утверждение процессов верхнего уровня
При согласовании карты бизнес-процессов верхнего уровня с первым руководителем компании полезно видеть не только формальную процедуру, но и дополнительный инструмент контроля бизнес-процессов и возможность сделать модель процессов верхнего уровня наиболее оптимальной и эффективной для практической деятельности.
Правило 3. Перечень бизнес-процессов верхнего уровня должен быть согласован и утвержден первым руководителем компании.
Пример. В торговой компании занимающейся дистрибуцией лекарств изначально было предложено на верхнем уровне показать только один бизнес-процесс продаж, а на втором уроне сделать его детализацию на три бизнес-процесса продаж на трех различных рынках. При согласовании карты процессов с генеральным директором он указал на необходимость отображения на верхнем уровне всех трех бизнес-процессов продаж и соответствующей отчетности. В другой компании, первый руководитель посчитал необходимым агрегировать ряд бизнес-процессов на верхнем уровне, в результате построенные процессные модели стали более эффективно использоваться для управления деятельностью компании.
Рис. 20. Карта процессов верхнего уровня торговой компании
В примере производственной компании в отличие от торговой среди основных процессов появился бизнес-процесс доставки продукции потребителям (рис. 21). В торговой компании такой бизнес-процесс также есть, но он входит в состав процессов продаж. Причина в том, что в производственной компании продукция экспортируется и процесс доставки продукции потребителям является более важным и дорогим по стоимости, поэтому и размещен на верхнем уровне.
В группе обеспечивающих бизнес-процессов производственной компании в отличие от торговой также появились еще два бизнес-процесса: ремонт и модернизация оборудования, а также капитальный ремонт и строительство. В торговой компании есть складское оборудование и погрузчики, а также процессы по их ремонту и обслуживанию. Но объем этих ремонтных работ в торговой компании меньше, именно поэтому у нее процесс ремонта входит в состав процесса складирования и размещен на втором уровне процессной модели.
Рис. 21. Карта процессов верхнего уровня производственной компании.
Также в торговой компании есть работы по ремонту офисного здания, но вследствие их меньшего объема и стоимости они также размещены на втором уровне процессной модели и входят в состав обеспечивающего бизнес-процесса по административно-хозяйственному обеспечению деятельности. В производственной компании бизнес-процессы ремонта и модернизации оборудования, а также капитального ремонта и строительства по объему работ, стоимости и важности являются более значимыми и поэтому размещены на верхнем уровне процессной модели.
Среди бизнес-процессов управления в производственной компании есть бизнес-процесс по управлению проектами, которого нет на верхнем уровне в торговой компании. Это связано с тем что в производственной компании перечень реализуемых проектов развития значительно больше, а контроль их выполнения и управление портфелем проектом более значимы для стратегии компании. В торговой компании такой процесс входит в состав процесса стратегического управления.
Ответственные за бизнес-процессы или их владельцы
На карте процессов верхнего уровня производственной компании также показаны ответственные за бизнес-процессы или владельцы бизнес-процессов (рис. 21). Именно они отвечают перед первым руководителем за достижение ключевых показателей по своему процессу, а также за функционирование процессов в соответствии с требованиями, которые формулируются в организационно-распорядительных документах компании.
Альтернативным способом отображения распределения ответственности за бизнес-процессы верхнего уровня является матрица ответственности (рис. 22). В строках матрицы перечисляются бизнес-процессы верхнего уровня, в столбцах матрицы показываются руководители верхнего уровня, а на пересечении строк и столбцов показываются символы ответственности.
Рис. 22. Матрица распределения ответственности за процессы верхнего уровня производственной компании
Матрица распределения ответственности позволяет наглядно увидеть кто за что отвечает и показать равномерность распределения ответственности. Матрица позволяет наглядно показать бизнес-процессы, у которых нет ответственных, а также бизнес-процессы у которых несколько ответственных, что означает безответственность.
В результате матрица как наглядный формат описания распределения ответственности часто используется как на этапе доведения схемы распределения ответственности до должностных лиц компании, так и на этапе анализа и оптимизации деятельности компании.
В следующей части статьи мы расскажем о реинжиниринге и постоянном совершенствовании бизнес-процессов.
Описание нотации IDEF0
IDEF0, нотация для описания структуры, или верхнего уровня бизнес-процесса
Пример верхнеуровневой структуры деятельности представлен на рисунке ниже. Именно так хочется называть – «верхнеуровневая структура», «функциональная структура». В этом, на наш взгляд, суть нотации IDEF0.
Система обозначений IDEF0 довольно проста.
Бизнес-процесс в обозначениях IDEF0 – прямоугольник (блок), его связи с элементами внешней среды или другими процессами – это стрелки. Это базовый минимум, с которого можно начинать знакомиться с нотацией, пробовать фиксировать в ней какие-то первые процессы «в карандаше». Внутри прямоугольника (блока) вписывается название функции/процесса и его номер.
Стрелки в IDEF0 могут быть:
Как на рисунке выше, стрелки подписываются наименованием соответствующих потоков объектов, которые они перемещают: входы (документы, информацию) и выходы, механизмы и управляющие потоки.
К базовому, начальному уровню понимания нотации IDEF0, постепенно можно добавить еще несколько элементов из системы обозначений, чтобы полноценно владеть данным «языком» графического описания бизнес-процессов.
Внешняя ссылка – элемент нотации, который обозначает некий субъект, некую сущность, которая находится вне границ моделируемой системы, за границами описываемого процесса. Внешняя ссылка выступает как приемник или как источник стрелок в IDEF0 и обозначается на моделях (диаграммах) в виде маленького квадрата.
Междиаграммная ссылка – элемент нотации, обозначающий другую диаграмму (модель). Стрелка, поступающая на междиаграммную ссылку переходит на соответствующую диаграмму.
Процесс-ссылка – это элемент нотации, обозначающий ссылку на типовую модель процесса, в которую «зашита»/свернута модель наиболее часто повторяющегося процесса.
Сноска – элемент нотации, предназначенный для вынесения в сторону от основных элементов диаграммы каких-либо комментариев.
Правила нотации
Правила нотации IDEF0 также не представляют глобальной и сложной истории.
Функции/процессы (прямоугольники) классически располагаются по диагонали слева направо и сверху вниз – это так называемый принцип доминирования. Понимается это так, что блоки (функции/процессы), расположенные вверху слева доминируют над остальными. Доминируют – оказывают большее влияние.
Бизнес-процессы верхнего уровня, смоделированные в IDEF0, могут быть декомпозированы до процессов нижних уровней как в той же нотации IDEF0, так и в других: BPMN 2.0 и EPC.
За счет чего TDD “драйвит” разработку
Статей о TDD достаточно много, и я обратил внимание на то, что все они затрагивают преимущественно техническую составляющую этого подхода, и практически никак не описывают ментальные принципы, лежащие в основе TDD.
Поэтому я не хотел писать еще одну статью с описанием техники Red-Green-Refactor. Мне хотелось взглянуть на TDD немного глубже и описать, как и почему TDD влияет на поведение человека.
В статье речь пойдет о неких абстракциях, которые применимы на разных слоях мировоззрения и, вне зависимости от контекста, помогают достигать хорошего результата. Универсальность этих абстракций и факт, что они применимы даже к процессу написания кода, сделали меня ярым приверженцем как TDD подхода, так и этих абстракций.
Мои первые шаги в TDD
Я работаю web-разработчиком 12 лет, и недавно я поменял свой базовый стек с php (CMS-ки) на javascript (React). Немного обидно и, для кого-то, удивительно, но познакомился с TDD я совсем недавно (в этом году), хотя многие из статей, которые я читаю, датируются далеким 2013 годом. Еще интереснее то, что познакомило меня с TDD не рабочее окружение или корпоративные стандарты, а Скрамгайд и самостоятельная подготовка к сертификации Professional Scrum Developer на scrum.org.
И вот в какой-то момент я оказался один на один с целью прочитать книгу “Test Driven Development: By Example” от Kent Beck. В тот момент у меня было некое понимание, что такое TDD, и оно преимущественно совпадало с коллегами, которые также что-то слышали о нем, но толком не пробовали. В двух словах, я думал, что “TDD — это те же самые юнит тесты, только написанные до имплементации”. Звучит немного отпугивающим и сложным, но мне понравилась идея. И я начал читать…
В районе 50-ой страницы ко мне пришло озарение, насколько ложным и неправильным было мое прежнее понимание. Тесты, написанные при TDD, — это другие тесты, категорически и совершенно другие тесты… по их логике, по их коду, по их смыслу. Если вкратце, то такой тест не должен соответствовать и проверять требование задачи, его цель — проверить только следующий маленький шаг, которые разработчик собрался реализовать в ближайших строках кода в следующие 2–5–15 минут. Пример, как это может выглядит — Example of TDD by H. Koehnemann, и обратите внимание, что acceptance test пишется уже в самом конце.
Но это не все. Я осознал, что TDD базируется на тех же психологических принципах и лайфхаках, которые я уже использую в своей работе и своей жизни. И я начал об этом говорить с коллегами, а позже родилась мысль написать об статью о механиках, которые лежат под капотом TDD и объясняют, почему TDD стимулирует (драйвит) разработку кода на ментальном уровне.
Верхнеуровневый список задач (todo list)
Есть кое-что, что постоянно упускается из вида при обсуждении TDD. Это список шагов/подзадач. Физический список. Любая пришедшая в голову в процессе разработки идея, если она не может быть легко и быстро реализована прямо сейчас, не нарушая текущий ход мышления, обязана быть внесена в этот список.
Кент Бек на протяжении всей книги описывает этот процесс, как неотъемлемую его часть. И эта идея совершенно не нова. По меньшей мере, этот подход описывается как базовая составляющая менеджемент-системы GettingThingsDone. GTD утверждает, что уровень стресса резко уменьшится, а продуктивность возрастет, если человек освободит свой разум от запоминания текущих задач, перенесет их на внешний носитель и сфокусирует полную силу своего сознания на конкретную текущую задачу.
Если человек не фиксирует мысли/задачи в списке, а держит (пытается держать) их все в голове, это делает его менее сообразительным, более раздражительным, у него создается ощущение бурной активности (“ничего не успеваю”, “белка в колесе”), а ресурсы мозга в этот момент утекают с повышенной скоростью и впустую. Все это приводит к более скудным результатам и психологическому выгоранию.
Внезапно появилась новая гениальная идея? Не переключайтесь на неё, отправьте её в список. Потом к ней вернётесь.
Этот небольшой трюк предотвращает внутренние прерывания на собственные мысли. И это только первый из кирпичиков, которые помогают уменьшить напряжение и сохранять внутренние ресурсы.
Test-First Thinking
Test-first мышление — это уже нечто большее чем техника — это сдвиг в видении задач и подхода к их решению. Обычно, перед началом имплементации, разработчик задается вопросом “как я реализую эту функцию?”. Основная идея test-first подхода в том, что такой вопрос смещает фокус с задачи на имплементацию этой задачи. Это смещение может привести к выстраиванию “воздушных замков”, излишней преждевременной оптимизации, нарушения принципа о простоте из Agile манифеста, не говоря о конкретных YAGNI и KISS правилах разработки. Но даже если этого не произойдет и код не будет нарушать эти принципы, это все равно не ответит на вопрос “как я узнаю, что я действительно достиг своей цели?”.
Измерение достижения цели — это то, что делает цель целью. Без измерения это уже не цель, это только желание, неформализованная хотелка. Бывало ли у вас, что вроде бы все шаги сделаны, а понимания, что желаемое получено, — нет, и удовольствие от достижения цели отсутствует? Это происходит тогда, когда не были зафиксированы критерии достижения цели. Когда в процессе деятельности понимание цели видоизменилось, желание рассеялось, и возможно, цель вообще прошла мимо первоначальной её постановки. Это расстраивает, демотивирует. Потому что человеку крайне необходимо созерцать результаты своей работы, которые приводят к выбросу эндорфинов и мотивируют двигаться дальше (Что создаёт нам хорошие ощущения от работы).
И это именно то, что означает литера M в аббревиатуре S.M.A.R.T. постановке целей.
Но есть путь, который позволит избежать этой ловушки — Test-First Thinking. Не задавайтесь вопросом об имплементации. Спросите себя “Как я смогу кому-то продемонстрировать выполненную задачу?”, “Как я могу протестировать, что все выполнено правильно?”, “Как я узнаю тот момент, когда работа сделана?”. Вопросы такого типа провоцируют дополнительные мыслительные цепочки, которые позволят схватить нюансы, которые обычно теряются при мыслях только о реализации. Это поможет отделить зерна от плевел и более четко определить, что на самом деле нужно, а что сейчас избыточно. Это сместит фокус с написания кода на достижение результата, что в конечном счете и приводит чувству удовлетворения.
Понятная задача
Вся красота этого выбора в том, что человек чаще всего неосознанно выбирает задачу понятную. И если ни одна из задач не является ни понятной, ни прозрачной, то сознание перескакивает на что-то менее сложное, и не всегда это будет задача из списка дел. Эту сакральную идею, перевернувшую мою жизнь, я узнал от Максима Дорофеева и его Джедайских техниках пустого инбокса.
И здесь не идет речь о дисциплинированности или успешности конкретного человека. Это про то, как в целом работает человеческий мозг.
Но что же с этим делать? И опять это возвращает нас к GTD, которое гласит, что нужно определить ближайший шаг, приближающий к достижению цели, и выписать его в правильной формулировке. После этого даже не нужно прилагать силу воли, мозг сам переключится на такую задачу, начнёт о ней думать, а человек — делать.
И это ровно то, к чему подталкивает TDD: определить до абсурда простой и понятный шажок, выписать название и критерии его выполненности… в коде… в виде теста.
На самом деле, Скрам тоже использует этот же подход и культивирует команду девелоперов дробить истории на маленькие кусочки и формализовывать минимально-достаточные шаги для возможности начать работать в первые дни спринта. Все тот же абстрактный подход, который работает, но уже на уровне продукта.
Правильное наименование
Когда разработчик определил, каким будет следующий шаг, есть кое-что еще, что упрощает понимание этого шага и способствует его выполнению — формулировка шага. Есть несколько очень простых, но неочевидных правил, которые позволят мозгу человека быстро входить в контекст задачи и стремиться эту задачу выполнить:
1. Тест должен звучать как ответ на вопрос “Что делает” в полной формулировке, как будто задача уже сделана и является спецификацией для другого человека. Ведь если отвлечься, то мозг выпадет из контекста и понять, что надо сделать, уже тяжелее;
2. Название теста должно начинаться с глагола.
Эти правила опять же из описания GTD. Конкретно я об это почерпнул из Джедайских техник М. Дорофеева (Глава 3).
Прерывания
Сейчас (и уже давно) принято считать и громогласно говорить о высокой стоимости прерывания разработчика от рабочего процесса. Обычно речь идет о воздействии менеджеров на мыслительный процесс программиста. Например, THIS IS WHY YOU SHOULDN’T INTERRUPT A PROGRAMMER и The Cost of Interruption for Software Developers.
При этом, я убежден, что наибольшее количество прерывания происходят не снаружи, а порождаются изнутри — собственными мыслями (частенько о преждевременной оптимизации) или прерываниями собственного личного окружения (напоминалки, телефоны, email-уведомления).
Как бы там ни было, если все описанные ранее приемы применяются, то в любую секунду разработчик может легко прерваться. Ведь достаточно просто запустить тест. Потому что последний (единственный) упавший тест назван исключительно с указанием, что должен сделать разработчик, в простой, понятной формулировке с использованием глагола “что делает” следующий (еще не написанный) кусок кода.
Отсюда вытекает очень интересный и эффективный трюк — завершайте работу на красном тесте (вечером, на обед, перед встречей). Каждый раз, возвращаясь к работе, это позволит практически моментально вернуться в контекст задачи одной командой.
Научение через обратную связь
Человек не может учиться эффективно без получения обратной связи на его действия. Это базовый психологический момент природы человека в принципе (Как стать лучшим в своем деле? — А. Курпатов) и это же наиболее эффективный способ обучения.
И когда разработчик, используя TDD, мгновенно получает упавший тест — это самый быстрый фидбек из пока что возможных в разрезе процесса написания кода.
Тест coverage
Представьте, разработчик дописывает последние строки кода имплементации, и … все. Работа сделана. Ему не надо заставлять себя писать тесты на то, что по его твердому убеждение безоговорочно работает. Потому что все тесты уже написаны. Это сохраняет ресурс силы воли, который достаточно ограничен и применение которого потребляет еще и приличное количество ментальной энергии.
Более того, эти тесты, написанные по ходу создания имплементации поставленной задачи, служили помощью в написании кода. Это явно должно увеличить тестовое покрытие проекта полезными тестами.
Рефакторинг
Я не буду уделять много внимания на вполне понятный профит для рефакторинга при наличии качественных автотестов (Начинаем писать тесты (правильно) — Кирилл Мокевнин [Хекслет]). Это действительно сильно уменьшает дискомфорт и страх и позволяет разработчику более удобно и легко перелопачивать уже написанный код. Но про это говорится почти всегда, когда речь заходит про TDD, и, честно говоря, в контексте рефакторинга я не вижу большой разницы между TDD и тестами, написанными после имплементации.
Дисциплинированный разработчик
На мой субъективный взгляд, самая ключевая ценность TDD в том, что при его использовании разработчик неосознанно использует классические приемы самоуправления применительно к процессу написания кода. А это, определенно, требует дисциплины. Конечно, любой может быть организованным в работе, вне зависимости от использования TDD. Но тот, кто использует TDD в правильной интерпретации, автоматически будет организованным и дисциплинированным хотя бы применительно к написанию кода. Я считаю это очень важной характеристикой в текущее время печенек и PS-ок в офисе (до 2020) и удаленной работы в 2020.
Минусы TDD
Простите, но в контексте вышеописанного я их не вижу.
Я поизучал самые популярные холиварные топики вокруг TDD и пришел к выводу, что есть две основные причины нелюбви к TDD со стороны профессиональных разработчиков:
Разный формат мышления при подходе к реализации задачи. Часть предпочитает строить верхний слой полного решения, а потом спускаться на нижние уровни и к детальной имплементации мелких функций, держа в голове весь алгоритм для всех кейсов. Если вы относите себя к таким людям, то, вероятно, TDD вам с первых попыток не понравится.
Но, лично в моем случае, такой подход является контр-продуктивным. Мне просто не хватает силы сознания держать в голове так много требований, ветвлений алгоритма и самих переменных/объектов, что приводит к ошибкам и плохому решению. Обдумывая верхний уровень, я, если не ленюсь, то не код пишу, а выписываю/рисую список шагов, прикидываю, что я мог забыть, и определяю ближайшие шаги.
Принуждение к TDD. Часть разработчиков подвергалась давлению и принуждению к использованию TDD. В случае неиспользования их оценивали как “недо-программист”. Это конечно ужасно, но я пишу эту статью в совершенно зеркальных условиях, когда попытки применять TDD воспринимается коллегами как нелепость и непрофессионализм (ведь я же не могу держать в голове все ветвления логики, кейсы, объекты).
Да никакого итога. Мысли вслух. Скомпоновал как смог.
Если кто-то нашел в этой статье пищу для размышлений, то я доволен. Стремление к горстке признания это ведь так по-человечески.
P.S. (добавлено)