Как составить тест-план? Для начинающего тестировщика
Очень много ресурсов рассказывают про виды тестирования, как составить тест-кейсы и чек-листы, но очень мало ресурсов, особенно на русском рассказывают про составление тест-плана и для чего он нужен, а также сколько времени и сил он способен сберечь. Читая статьи и смотря видео по тестированию, рассказывают про некий тест-план, но очень часто вскользь, так давайте же вместе со мной разберем кратко про тест-план, а потом посмотрим на список ресурсов, которые помогут вам в этом.
Для себя я отметил следующие важные пункты при составлении тест-плана.
Основные пункты:
1 Краткое изложение проекта
В нескольких предложениях описать зачем и для кого этот продукт.
2 Понятная структура тест-плана
Расположить в правильном порядке все пункты тестированию
3 Сроки тестирования
Описать приблизительные сроки в формате когда и сколько времени будет потрачено на это.
4 Программы и методы тестирования
Рассказать какой софт и методы тестирования вы будете применять и для чего.
5 Технические требования
Например: Рассказать какие компьютеры или телефоны будут участвовать в тестировании (их характеристики)
6 Структура тестируемого проекта (Описать например какой функционал будет протестирован)
Описать все страницы проекта, какие функции там есть.
7 Результат тестирования
Что получилось в результате тестирования, какие тест-кейсы, чек-листы и т.д будут сделаны.
Полезные статьи с примерами и описанием как составить тест-план
Примеры тест-кейсов
Полезные видео с примерами составления
говориМ о тестировании
простым языком
Тест план: как составлять
Форматы
Отображать тест план можно разными способами:
Преимущества схематических тест планов:
— Позволяют визуально представить запланированный процесс,
— Просты в использовании,
— Гибкие к внесению изменений,
— Содержат самую основную информацию, что позволяет в значительной степени сократить время на планирование.
Рекомендации по написанию
Что должен содержать хороший тест план:
Описание объекта тестирования: системы, приложения, оборудования.
Список функций и описание тестируемой системы и её компонент в отдельности.
Стратегия тестирования, а именно: виды тестирования и их применение по отношению к объекту тестирования.
Последовательность проведения работ: подготовка (Test Preparation), тестирование (Testing), анализ результатов (Test Result Analisys) в разрезе запланированных фаз разработки.
Готовность тестовой платформы (тестового стенда), законченность разработки требуемого функционала, наличие всей необходимой документации и т.д.
Результаты тестирования удовлетворяют критериям качества продукта: требования к количеству открытых багов выполнены, выдержка определенного периода без изменения исходного кода приложения Code Freeze (CF), выдержка определенного периода без открытия новых багов Zero Bug Bounce (ZBB) и т.д.
Ответив в своем тест плане на вышеперечисленные вопросы, можно считать, что у вас на руках уже есть хороший черновик документа по планированию тестирования.
Далее, чтобы документ приобрел более менее серьезный вид, можно дополнить его следующими пунктами:
Структура
Обычно детальный тест план занимает от пары страниц до нескольких десятков. Это если мы говорим о его визуализации в виде документа. Общая структура тест плана не зависит от его объема или формата визуализации. Достаточно заменить слово «страница» из структуры ниже на слово «ветка» и мы сможем с легкостью перенести данную структура на майнд-марту.
1-я страница:
— шапка (логотип и адрес компании),
2-я страница:
— история документа, которая представляет собой таблицу изменений. Эта таблица содержит столбцы: дата, версия, описание, автор.
3-я страница:
4-я страница и далее:
— операционные системы, браузеры,
— критерии начала тестирования,
— критерии выхода из тестирования,
Предпоследняя страница:
— сколько человеко-часов планируется на различных этапах (дата начала и окончания). Например, на тест-дизайн, выполнение тестов, анализ тестирования, отчеты.
Последняя страница:
— выводы и рекомендации.
Также в тест план могут входить следующие данные:
— жизненный цикл бага,
— ссылки на документы или стандарты,
Рецензия и утверждение
Для увеличения ценности тест плана рекомендуется проводить его периодическое рецензирование со стороны участников проектной группы. Это можно сделать просто договорившись между собой или же реализовать в виде «процедуры утверждения». Примерный список участников проектной группы:
Каждый из перечисленных участников проекта перед утверждением проведет рецензию и внесет свои комментарии и предложения, которые помогут сделать тест план более полным и качественным.
Шаблоны и примеры
Каждая методология или процесс диктуют свои форматы оформления планов тестирования.
Шаблоны ниже помогут понять, какой формат больше подходит для вашего проекта и как вообще составлять тест план. А готовые решения, возможно, натолкнут вас на какие-то мысли или помогут лучше понять смысл составления данного документа.
Обычный документ
Шаблоны, которых можно придерживаться:
Майнд-карта (mind map)
Несколько примеров, как именно можно использовать майнд-карту
Дашборд
Подобный структурный вид позволит понять, что конкретно мы намерены тестировать. С помощью цвета можно привлечь внимание к определенным областям.
Excel или другая таблица
В таблице можно запросто отобразить любые списки тестов или описание сценариев, с которыми мы намерены работать на данном проекте.
Доска для записей – Trello
Тут не только можно будет прописать все задачи, но и следить за ходом их выполнения.
Создание тест плана повышает качество продукта за счет перечисления деталей и списка проверок, а также позволяет проанализировать, насколько успешно были проведены все этапы тестирования.
Нет четкого шаблона, по которому необходимо писать тест план. Можно взять за основы шаблоны, которые рассмотрены в статье. А можно создать свой собственный.
Какой шаблон или вид вы бы не выбрали, главное только то, что тест-план должен выполнять свою задачу. А именно, описать весь объем работ по тестированию и быть понятным и читабельным.
Как правильно оценивать сроки выполнения задач программистами. Часть 1
В первой части этой статьи я хочу коснуться общей информации об оценках сроков выполнения работ, рассмотреть, как оценка участвует в проектной деятельности и какое значение она имеет в итоговой реализации.
Зачем нужны оценки сроков выполнения проекта
Объективных прогнозов выполнения IT-проекта к определённой дате не существует. Если же прогноз сделан, что-то всё равно будет страдать: либо сроки сдачи, либо функционал, который будет урезан, либо программист, работающий сверхурочно из-за обязательств выполнить задачу в срок.
Раз прогнозы не бывают честными, зачем же их тогда делать? Так уж сложилось, что для успешного существования продукта управляющие им люди должны понимать, когда та или иная фича будет доступна пользователям. Этих знаний просто не может быть без оценок выполнения работы по внедрению этой фичи.
Оценки работы играют чуть ли не более важную роль, чем сама работа. Стоимость реализации напрямую зависит от оценки. Часто на этапе оценивания становится ясно, что игра не стоит свеч, шансы на успех невелики, а расходы слишком высокие. Но если проект всё-таки реализуем, то в игру вступает более сложная математика.
Выход на рынок первым бывает важнее, чем количество фич на старте. Часто после оценки изначального плана становится понятным, что его лучше видоизменить, упростить или сделать поэтапный выход на рынок.
Оценка выполнения напрямую влияет на стратегию развития продукта и на ранних этапах жизни стартапа играет решающую роль в успехе компании.
В здоровых взрослых компаниях оценку сроков работы дают сами исполнители на основе предоставленных им требований. Им могут помогать старшие коллеги, если у первых недостаточно опыта для этого. Бывают, конечно, и другие варианты, но мы не будем их касаться, т.к. их вариативность слишком высока и не представляет практического интереса.
Если программиста спросить про дату, к которой частная задача будет выполнена, то он может дать некоторую оценку. Но опытные менеджеры умножают эту цифру на 2 или даже 3, а мудрые менеджеры после этого добавляют ещё 30%. Во второй части статьи мы обсудим, почему такой подход работает и почему программистам не нужно становиться более пессимистичными.
Тема планирования очень обширная. Я не готов давать исчерпывающее описание всего процесса планирования. Я не буду строить модели, рисовать графики и диаграммы, постараюсь не использовать много страшных слов. Статья будет сведена к оценке со стороны исполнителя, моему опыту, наблюдениям и советам, полученным от более опытных коллег.
Как планирование отражается в проектном цикле
Озвучивание требований по фиче
В большинстве своём проекты имеют график релизов или запланированную дату, к которой функционал должен быть доступен пользователям. Обычно в компаниях есть люди, которые знают, в какую сторону развивать продукт. Продакт-менеджеры, СЕО, продюсер — как ни назови, роль в нашем контексте одна: у них есть видение рынка, понимание того, что сейчас наиболее важно. На основе этого они формируют бизнес-требования.
Подход к обсуждению и оформлению требований у каждого свой. Обсуждение может быть устной договоренностью, презентацией или текстовым документом с картинками (обычно предпочитают этот вариант). Мой любимый способ обсуждать требования — рассказывать о них, размахивая руками и рисуя маркером на доске. Но даже этот вариант лучше фиксировать не только фотографией доски, но и текстом.
Бывает такое, что директор компании подходит к программисту и просит что-то максимально быстро накодить и проверить его гипотезу на части пользователей на проде уже завтра. В этом случае никакого планирования и быть не может, поэтому оставим его за пределами нашей статьи.
Верхнеуровневая оценка реализации фичи
После того как идея сформирована разработчики должны сказать, реализуема ли задача, сколько может занять выполнение всех требований или каждого по отдельности. В простых случаях исполнителям сразу понятно, что делать. Задача может быть типичной для исполнителя или тривиальной в реализации.
В более сложных случаях исполнители могут дать высокоуровневую оценку вроде «Ну… денёк может быть уйдет», «Чёт ад прям» или «Если получится ‘А’, то hold my beer, иначе это долго». Такая оценка опирается на исторические данные или аналогии, с которыми сталкивался исполнитель. Обычно никто не ожидает, что эта оценка окажется точной.
Планирование сроков и состава фичи
Если предварительные оценки устраивают бизнес, то фичу начинают прорабатывать, искать особые случаи, писать User Story — вкладывают в фичу силы. Очень часто на этом этапе возникают изменения в требованиях, изначальный план становится верхушкой айсберга или видоизменяется до неузнаваемости.
Могут появиться требования к безопасности, устойчивости системы к нагрузкам, граф переходов состояний бизнес-сущности — да что угодно, что сразу было слишком сложным для описания (или об этом просто не подумали).
Уточнённая оценка
На основе уточнённых бизнес-требований программисты оценивают будущие изменения в коде, составляют план задач без детализации. Выделяется ответственный за фичу со стороны разработки, который решает технические вопросы, выбирает способ реализации, принимает архитектурные решения. Планируется способ реализации фичи, проверяют, уложатся ли изменения в текущую архитектуру, потребуется ли рефакторинг и можно ли обойтись без него.
Обычно даётся пара оценок — быстрая реализация (технический долг растёт) и с минимизацией энтропии ПО (технический долг не растёт или убывает). Проджект-менеджеры лучше программистов знают, что если постоянно выбирать быстрые реализации, то они скоро перестанут быть «быстрыми». Их оценки будут расти, обгоняя линейный график, и это может кончиться тем, что проще будет переписать приложение, чем пытаться закрыть технический долг и развивать существующее.
Поэтому выбор быстрой реализации является менее предпочтительным и требует веских аргументов в его необходимости. В итоге всё равно нужно будет навести порядок, а это дольше, чем не сорить сразу.
Финализация требований
На основе полученных уточнённых оценок проджект-менеджеры вместе с продакт-менеджерами выбирают дату релиза и, если она всех устраивает, запускают процесс. Если нет, то пробуют сильнее распараллеливать задачи, выделив большее количество программистов. Если их нет или распараллелить не получается, то либо отказываются от части требований, либо разделяют функциональность на два релиза.
После такого решения ответственный за фичу со стороны разработки может внести коррективы в оценку. Распилить функциональность — удовольствие не бесплатное. Хотя обычно сроки нивелируются за счёт принятия быстрых реализаций в коде, раз уж принимаются меры менеджерами, можно пойти им на встречу. Главное, чтобы это не превратилось в привычку.
После того как оценки получены и всех всё устраивает, происходит заморозка требований. Если возникают изменения, то они идут уже в следующий релиз, либо решаются в частном порядке.
Синхронизация с майлстоунами
При реализации проекта случается, что одна задача занимает больше, чем запланировано, а другая меньше. Чтобы не параноить, что из-за одной задачи сроки релиза поедут, создаются майлстоуны — ключевые точки, в которых планы должны соответствовать реальности. Проджект-менеджер, не вмешиваясь в процесс, может видеть со стороны, насколько сильно разработчики отстают от плана, оказать поддержку тем, кто застрял и вовремя увидеть надвигающуюся угрозу срокам готовности фичи.
Ретроспектива
После того как функционал протестировали и зарелизили хорошо бы свести планы с фактом, выделить экстремальные значения несоответствий, попытаться проанализировать причины, понять, могут ли они носить систематический характер или это случайность и уже в следующем проекте подобное не встретится. К этому процессу стоит относиться как к обучению. Руководству не следует устраивать охоту на ведьм, а программистам следует воспринимать вопросы о причинах несоответствий как точку профессионального роста.
Заключение
Мы рассмотрели вопрос необходимости планирования и оценки сроков реализации проектов, пробежались по типичному проектному циклу и увидели, какую роль играют сроки реализации. На этом первую часть и закончим.
Во второй части статьи будет рассказано о том, как программисты оценивают отдельно взятые задачи и как погрешность можно сделать приемлемой для промышленного применения.
За счет чего 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. (добавлено)