[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"general-list":3,"footer-feature-tags":4,"slate-glossary-term-refactoring":66},true,[5,14,20,29,34,40,46,52,56,62],{"id":6,"name":7,"hex":8,"translations":9,"count_pages":13},8,"Компания","#f40925",{"ru":10,"en":11},{"name":7},{"name":12},"Company",9,{"id":15,"name":16,"hex":17,"translations":18,"count_pages":6},26,"Главная страница",null,{"ru":19},{"name":16},{"id":21,"name":22,"hex":23,"translations":24,"count_pages":28},2,"Проекты","#3027ff",{"ru":25,"en":26},{"name":22},{"name":27},"Project",15,{"id":30,"name":31,"hex":17,"translations":32,"count_pages":21},33,"ИИ",{"ru":33},{"name":31},{"id":35,"name":36,"hex":17,"translations":37,"count_pages":39},34,"Комментарии",{"ru":38},{"name":36},4,{"id":41,"name":42,"hex":17,"translations":43,"count_pages":45},25,"Задачи",{"ru":44},{"name":42},24,{"id":47,"name":48,"hex":17,"translations":49,"count_pages":51},27,"Рабочие пространства",{"ru":50},{"name":48},3,{"id":45,"name":53,"hex":17,"translations":54,"count_pages":6},"Kanban-доска",{"ru":55},{"name":53},{"id":57,"name":58,"hex":17,"translations":59,"count_pages":61},23,"Диаграмма Ганта",{"ru":60},{"name":58},1,{"id":28,"name":63,"hex":17,"translations":64,"count_pages":61},"Календарь",{"ru":65},{"name":63},{"detail":67,"more":178},{"id":68,"slug":69,"translations":70,"category":84,"tags":91,"letter":115,"og_image":17,"cover":17,"author_name":17,"author_position":17,"author_avatar":17,"faqs":116,"related":130,"views_count":174,"helpful_yes_count":119,"helpful_no_count":119,"created_at":175,"updated_at":176,"published_at":177},397,"refactoring",{"ru":71},{"title":72,"short_definition":73,"tldr":74,"full_explanation":75,"when_to_apply":76,"when_not_to_apply":77,"examples":78,"tips":79,"synonyms":80,"translation_en":81,"seo_title":82,"seo_description":83},"Рефакторинг (Refactoring)","Изменение внутреннего устройства кода без изменения его поведения: код становится понятнее и дешевле в правке, а результат работы остаётся прежним.","Рефакторинг меняет устройство кода, сохраняя поведение. Термин ввёл Уильям Опдайк в диссертации 1992 года, а массовым приём сделала книга Мартина Фаулера 1999 года; второе издание вышло в 2018-м. В ней же разошлись «запахи кода» — признаки того, что пора убираться: длинный метод, дублирование, класс, который знает слишком много о соседях. Условие всей затеи — тесты. Без них перестройка устройства превращается в переписывание с надеждой.","\u003Cp>Определение узкое, и в этом его смысл. Рефакторинг не добавляет возможностей и не чинит ошибки. Если во время уборки поменялось поведение, это уже другая работа, и путать их дорого: при разборе сломанного релиза непонятно, что искать.\u003C\u002Fp>\u003Ch3>Как это делают\u003C\u002Fh3>\u003Cul>\u003Cli>Убедиться, что участок закрыт тестами.\u003C\u002Fli>\u003Cli>Делать маленькие шаги, запуская тесты после каждого.\u003C\u002Fli>\u003Cli>Держать код рабочим после каждого шага, включая промежуточные.\u003C\u002Fli>\u003C\u002Ful>\u003Ch3>Запахи кода\u003C\u002Fh3>\u003Cp>Фаулер собрал каталог признаков, по которым узнают проблемные места. Длинный метод, длинный список параметров, дублирование, «завистливая» функция, которая лезет в данные соседнего класса. Запах не означает ошибку. Он означает повод посмотреть внимательнее.\u003C\u002Fp>\u003Ch3>Когда за него берутся\u003C\u002Fh3>\u003Cp>Работающая практика — уборка по дороге: правишь модуль ради задачи и заодно приводишь в порядок то, что мешает. Отдельный «спринт рефакторинга» почти всегда заканчивается спором с заказчиком о том, зачем квартал ушёл на работу без видимого результата.\u003C\u002Fp>","\u003Cul>\u003Cli>Правка простой задачи каждый раз занимает дни\u003C\u002Fli>\u003Cli>Перед добавлением возможности в запутанный участок\u003C\u002Fli>\u003Cli>После прохождения теста в цикле TDD\u003C\u002Fli>\u003Cli>Код разбирают на обзоре, и никто не может объяснить, как он работает\u003C\u002Fli>\u003C\u002Ful>","\u003Cul>\u003Cli>Нет тестов и нет возможности написать их до начала\u003C\u002Fli>\u003Cli>Код уйдёт из системы в ближайшие месяцы\u003C\u002Fli>\u003Cli>Идёт горящий инцидент: сначала чинят, уборка потом\u003C\u002Fli>\u003C\u002Ful>","\u003Cp>Функция расчёта доставки разрослась до трёхсот строк с семью вложенными условиями. Разработчик обкладывает её тестами на текущее поведение, потом по одному выносит правила в отдельные функции: зона, вес, тип отправления. Поведение не меняется ни на шаг, тесты зелёные весь путь. Через месяц добавление новой зоны занимает час вместо дня.\u003C\u002Fp>","\u003Cp>Крупную уборку стоит заводить обычной задачей с описанием того, что станет дешевле после неё. Формулировка «привести код в порядок» не проходит приоритизацию ни у одного заказчика; «добавление новой зоны доставки перестанет занимать день» проходит. В Shtab такие задачи удобно связывать с теми, ради которых уборка затевалась: тогда видно, что она окупилась.\u003C\u002Fp>","рефакторинг, refactoring, переработка кода, чистка кода, запахи кода","Refactoring","Рефакторинг — что это и когда нужен | Глоссарий Shtab","Рефакторинг: изменение устройства кода без изменения поведения. Запахи кода из книги Мартина Фаулера, роль тестов и почему отдельный спринт уборки не работает.",{"id":61,"slug":85,"hex":86,"icon":17,"order":61,"translations":87},"agile","#5e79ec",{"ru":88},{"title":89,"description":90},"Agile","Гибкие методологии разработки и управления проектами: Scrum, Kanban, XP и их элементы — спринты, бэклоги, церемонии, роли.",[92,99,107],{"id":6,"slug":93,"kind":94,"hex":95,"order":6,"translations":96},"concept","other","#4b5370",{"ru":97},{"title":98},"Концепция",{"id":100,"slug":101,"kind":102,"hex":95,"order":103,"translations":104},14,"process","phase",22,{"ru":105},{"title":106},"Процесс",{"id":108,"slug":109,"kind":94,"hex":110,"order":111,"translations":112},31,"quality","#0F9488",71,{"ru":113},{"title":114},"Качество","Р",[117,124],{"id":118,"order":119,"translations":120},1761,0,{"ru":121},{"question":122,"answer":123},"Чем рефакторинг отличается от переписывания?","\u003Cp>Рефакторинг идёт маленькими шагами, и после каждого система работает. Переписывание останавливает поведение целиком до момента, когда новая версия заработает. Риск разный: сорванный рефакторинг откатывается одним шагом, сорванное переписывание съедает месяцы.\u003C\u002Fp>",{"id":125,"order":61,"translations":126},1762,{"ru":127},{"question":128,"answer":129},"Можно ли рефакторить без тестов?","\u003Cp>Можно, но это уже рефакторинг только по названию: сохранение поведения проверить нечем. Обычный порядок такой — сначала обкладывают участок тестами на текущее поведение, даже если оно кажется странным, и только потом меняют устройство.\u003C\u002Fp>",{"related":131},[132,139,146,153,160,167],{"id":133,"slug":134,"translations":135},393,"extreme-programming",{"ru":136},{"title":137,"short_definition":138},"Экстремальное программирование (XP)","Гибкая методология разработки Кента Бека: короткие циклы, тесты до кода, парная работа и постоянная сборка доведены до предела.",{"id":140,"slug":141,"translations":142},394,"tdd",{"ru":143},{"title":144,"short_definition":145},"TDD (разработка через тестирование)","Способ писать код, при котором сначала появляется падающий тест, потом минимальный код для его прохождения, потом уборка.",{"id":147,"slug":148,"translations":149},395,"continuous-integration",{"ru":150},{"title":151,"short_definition":152},"Непрерывная интеграция (CI)","Практика, при которой изменения от всех разработчиков попадают в общую ветку по нескольку раз в день и каждый раз автоматически собираются и проверяются тестами.",{"id":154,"slug":155,"translations":156},396,"pair-programming",{"ru":157},{"title":158,"short_definition":159},"Парное программирование (Pair Programming)","Двое разработчиков пишут один код на одном рабочем месте: один набирает, второй следит за направлением, роли регулярно меняются.",{"id":161,"slug":162,"translations":163},78,"quality-gate",{"ru":164},{"title":165,"short_definition":166},"Quality Gate (контрольная точка проекта)","Контрольная точка между фазами проекта, на которой проверяется соответствие критериям перед переходом дальше.",{"id":168,"slug":169,"translations":170},228,"continuous-improvement",{"ru":171},{"title":172,"short_definition":173},"Continuous Improvement (непрерывное улучшение)","Системный подход к постоянному улучшению процессов, продуктов и услуг через малые повторяющиеся изменения.",29,"2026-08-30T15:05:43.904353+03:00","2026-08-30T15:05:43.904394+03:00","2026-08-30T15:05:43.970719+03:00",[179,197,215],{"id":61,"slug":85,"translations":180,"category":183,"tags":186,"letter":195,"cover":17,"updated_at":196,"published_at":17},{"ru":181},{"title":89,"short_definition":182,"translation_en":89},"Семейство гибких подходов к разработке продуктов и управлению проектами, основанное на коротких итерациях и быстрой адаптации к изменениям.",{"id":61,"slug":85,"hex":86,"icon":17,"order":61,"translations":184},{"ru":185},{"title":89,"description":90},[187,192],{"id":61,"slug":188,"kind":188,"hex":86,"order":61,"translations":189},"methodology",{"ru":190},{"title":191},"Методология",{"id":6,"slug":93,"kind":94,"hex":95,"order":6,"translations":193},{"ru":194},{"title":98},"A","2026-04-25T22:42:14.793028+03:00",{"id":103,"slug":198,"translations":199,"category":204,"tags":207,"letter":195,"cover":17,"updated_at":214,"published_at":17},"acceptance-criteria",{"ru":200},{"title":201,"short_definition":202,"translation_en":203},"Acceptance Criteria (критерии приёмки)","Конкретные проверяемые условия, которым должна соответствовать пользовательская история, чтобы её приняли как выполненную.","Acceptance Criteria",{"id":61,"slug":85,"hex":86,"icon":17,"order":61,"translations":205},{"ru":206},{"title":89,"description":90},[208],{"id":39,"slug":209,"kind":94,"hex":210,"order":39,"translations":211},"artifact","#888ca0",{"ru":212},{"title":213},"Артефакт","2026-04-25T22:42:15.380450+03:00",{"id":216,"slug":217,"translations":218,"category":223,"tags":226,"letter":236,"cover":17,"updated_at":237,"published_at":17},10,"burndown-chart",{"ru":219},{"title":220,"short_definition":221,"translation_en":222},"Burndown chart (диаграмма сгорания)","График, который показывает, сколько работы осталось в спринте или релизе по дням.","Burndown chart",{"id":61,"slug":85,"hex":86,"icon":17,"order":61,"translations":224},{"ru":225},{"title":89,"description":90},[227,230],{"id":39,"slug":209,"kind":94,"hex":210,"order":39,"translations":228},{"ru":229},{"title":213},{"id":231,"slug":232,"kind":232,"hex":110,"order":231,"translations":233},6,"metric",{"ru":234},{"title":235},"Метрика","B","2026-04-25T22:42:15.056246+03:00"]