Как Я Наводил Порядок В Проекте, Где Лес Прямых Рук Настройки Tslint, Prettier, Etc
Garota de Programa Ribeirão Preto - SP
Perfil
- Cidade: Ribeirão Preto - SP
- Eu Sou:
Apresentação:
Содержание
WIP – количество задач одновременно находящихся в работе. Разделяется по разным стадиям работы над задачей. Во-первых, мы очень редко можем снимать показатели метрик – в конце итерации. Во-вторых, мы уже упоминали “сглаживание” и оно тоже вносит свои коррективы. Всю итерацию ситуация была из рук вон плохая, а в конце все сделали нечеловеческое усилие и вуаля – все готово и метрики в порядке.
Рекс расскажет, как применять метрики для написания лучшего кода или тестов, а также проиллюстрирует это на реальных программах. Большинство изменений в .NET 3.5 направлены на расширение пространств имен третьей версии платформы (часть из них, например ASP.NET AJAX, была доступна отдельно). Реализован LINQ на уровне среды исполнения CLR и доступен любому .NET-языку, претерпевшему соответствующие модификации. Это относится к Visual Basic и C#, причем последний «дорос» до третьей версии стандарта, предложенного для утверждения международным организациям по стандартизации ECMA и ISO. Отметим, что в новой версии Visual Studio была модифицирована лицензия.
Потому что для понимания кода, ИМХО, чаще всего важнее его эволюция. А её описывать в коментариях совсем тоскливо. И это не говоря о том, что один и тот же коментарий может относится к нескольких местам в проекте. Есть кусочки из которых такую систему вполне можно https://deveducation.com/ построить (правда это требует определенных усилий) — встречал такое на одном из проектов. Когда дизайн описывался в confluence, из сonfluence создавались таски в jira, из jira создавались бранчи в git-e — и все это было между собой интегрировано, и trace-абельно.
Дополнительная Конфигурация Анализаторов
Или, быть может, модели сеансов нуждаются в пересмотре, может там какие-то вычисляемые поля обновляются. Или там что-то происходит с самим списком этих моделей? Запрещаю комментировать код у себя в проектах, могу пять раз завернуть PR из-за невнятного имени переменной или метода, без тестов даже не смотрю PR. » — ну разве что, пока пациенты не научатся писать лаконичный self-explanatory код. Дихотомия «комментарий в коде либо комментарий в коммите» — ложная.
На моей памяти я получил только один проект от которого был в восторге, а остальное… Так о чем я? Так повелось, что я долгое время работал только со своей командой, где мы уже давно согласовывали правила оформления, комментирования, отступы и т.п. Притерлись к ним и жили дружно и счастливо. На радостях я даже опубликовал статью на Хабр по нашему кодстайлу. Поэтому из чего-то магического мы использовали только tslint на пре-коммит.
Ведь не зря говорится “нельзя измерить – нельзя улучшить”.
Доказал ты какое-то свойство программы, верификатор схавал, всё, всопринимай это как данность, тебе по сути нужна только сигнатура метода, и что его можно как-то написать его тело. И комментарии — это средство добавить читабельности к нечитабельному коду. То есть проблема выбора между этими крайностями «скорость разработки» и «эксплуатационные характеристики и.с.»- не имеет общего решения.
Никто не запрещает писать комментарии в тексте коммита, но есть кейс, когда такой подход не годится — когда коммит охватывает несколько файлов(или несколько мест в одном файле), а нужно прокомментировать конкретное решение в конкретном месте. Кроме сугубо бизнес-метрик, которые можно применять практически в любом процессе (ROI, Earned Business Value, Running Tested Features и т.д.), в Scrum предлагается метрика Velocity. Но уже писано переписано, что использовать Velocity в качестве метрики не стоит.
Обработка ошибок, сложнее чем одноуровневый try-catch — тут комментарии полезны более чем всегда. И проблема таких вот общих рекомендаций в том, что автор делится своим опытом в узком конкректном стеке, но явно это не оговаривает и возникает как бы претензия на всё. Вот и получается, cyclomatic complexity это что разные требования порождают разные подходы. Если мы пишем книгу для домохозяек, то надо писать заглавными буквами СКОРОСТЬ. А если мы пишем для специалистов, то часто нам гораздо важнее структура формула, чем какие-то частности вроде что конкректно обозначено какой буквой.
Как Я Наводил Порядок В Проекте, Где Лес Прямых Рук Настройки Tslint, Prettier, Etc
Про комментарии это вообще классика украинских разрабов, которые в своем высокомерии считают, что их код настолько хорош, что не требует комментариев. При этом на выходе мы имеем так себе код, еще и без комментариев. К счастью, западные разработчики библиотек обладают достаточным уровнем скромности и смирения, чтобы сопровождать свой код каментами. Дык я про программирование и пишу, в некоторых ФП метод, конструирующие значение некоторого типа, является конструктивным доказательством формулы, которую этот тип представляет (изоморфизм Карри-Говарда). Поэтому и получается некоторый микс программирования и математики.
Более детально изучив вопрос, я понял, что это почти идеальное решение проблем нашей команды. Улучшение качества кода в широком смысле этого слова. Качество исходного кода — это комплексное понятие, которое включает в себя, кроме прочего, количество ошибок на условные 100 строк кода. Но также в это понятие входят читаемость, поддерживаемость, сложность кода , уровень связанности и другие аспекты, которые прямо или косвенно влияют на количество ошибок, а также на общее время разработки. Понимая, что наш процесс код-ревью, мягко говоря, неидеален, мы с командой провели несколько митингов, на которых каждый озвучивал актуальные для себя проблемы и мы вместе думали и предлагали возможные решения. Мой коллега предложил в качестве решения введение статических анализаторов кода, чтобы обнаруживать ошибки еще до создания pull-реквеста.
- Если разработчик не может внятно объяснить, почему он так сделал, как можно ждать от него достижения бизнес-задач компании?
- Как часто вы встречали названия методов вида «updateScenes()»?
- Этот простой список метрик позволяет полностью понимать и контролировать процесс разработки, постоянно анализируя и улучшая его.
- Ваш солюшен просто может перестать собираться, так как в коде могут присутствовать нарушения критических правил.
Мне быстрее искать в git, а всякая Jira и таски больше для менеджеров. Комментарии призваны расширить, указать контекст кода. Но вызывающий компонент вполне может быть еще не реализован. Или таких компонентов может быть несколько. Это в общем случае ответственность третьих лиц, о которых вы можете быть вообще не в курсе. Во-вторых, понять структуру измерений, обеспечить адекватное соответствие подготовки людей, состояния рабочих процессов, наличие инструментария.
Партнерские Проекты
Как и для FxCopAnalysers, со всеми правилами этих анализаторов можно ознакомиться на их страницах в GitHub, чтобы настроить правила оптимально для вашего проекта. Анализаторы FxCopAnalysers имеют оптимальную начальную конфигурацию, но по умолчанию ни одно из правил не имеет уровня предупреждения error, то есть все добавленные правила никак не влияют на билд. Для того чтобы анализаторы действовали как quality gate, нужно настроить уровни предупреждений.
Справедливости ради отметим, что Microsoft не первая обеспечила расчет метрик в инструментальном пакете – аналогичные возможности присутствовали в Borland Developer Studio 2006 более двух лет назад. К тому же инструментарий Borland (ныне CodeGear) гораздо богаче, поскольку подсчитывает значительно большее число показателей. Тем не менее в VS 2008 рассчитываются все самые критичные оценки проекта – индекс сопровождаемости , цикломатическая сложность , глубина наследования , степень сцепления классов и число строк кода .
А тот кто может писать такие комментарии — может написать и такой код, который их не будет требовать. За наиболее курьезную историю от слушателей, либо неправильного применения метрик, либо вынесения суждений, принятия решений на основании ощущений (без фактов и цифр). Приходите с историями, будем рады послушать и проголосовать.
Ваш солюшен просто может перестать собираться, так как в коде могут присутствовать нарушения критических правил. Вы должны учитывать, что на их исправление может уйти довольно продолжительное время, особенно если у вас большой проект или накопился технический долг. Visual Studio, начиная с19-й версии, стала время от времени рекомендовать установку анализаторов Roslyn для улучшения качества кода.
Visual Studio 2008: Много Платформ
Появился новый проект с унаследованным кодом, а к нему в придачу новые разработчики в размере 4-х добрых молодцев. А в ноябре нынешнего года Microsoft завершила работы над Visual Studio 2008, перед которой ставятся не менее амбициозные цели. Теперь курс взят на популяризацию Windows Vista и Office System 2007, и в определенных аспектах они оказались столь инновационными, что многими были встречены в штыки – снова потребовалась «помощь клуба» (т. е. той самой экосистемы). В частности поэтому разработка VS 2008 сопровождалась беспрецедентных масштабов тестированием, а вторая бета фактически была достаточно стабильна даже для использования в коммерческих целях (что позволяла соответствующая GoLive-лицензия). Выпуск Visual Studio 2005 два года назад для Microsoft был особенно важен.
Такие вещи находятся полностью во власти программиста и их нельзя оправдать «терминологией проекта». Понятно, автор этого метода сократил, чтобы не писать километровые имена. Но Мартин как раз говорит о том, что так делать не нужно. Название метода, в идеале, должно говорить о том ЧТО он делает и давать представление о том КАК он это делает, хотя бы приблизительно. В итоге парадокс — тот кто не может написать внятные, полезные комментарии, не может И написать код который не требует никаких комментариев.
Человеческий Фактор При Проверке Кода
TFS 2008 поддерживает SharePoint 2007, а в качестве платформы и СУБД может использовать как Windows Server 2003 и SQL Server 2005, так и находящиеся на завершающих стадиях разработки Windows Server 2008 и SQL Server 2008. Отметим также, что сторонние разработчики могут создавать собственные специализированные среды (так называемые Software Factories) – на базе Visual Studio Shell, представляющей собой усеченный вариант VS 2008, который включает редактор и отладчик. Эту инициативу Microsoft можно рассматривать как попытку составить конкуренцию проектам, подобным Eclipse. Одновременно с выходом VS 2008 было объявлено и о начале публичного тестирования PopFly Explorer – специального расширения для IDE, позволяющего создавать проекты и пользоваться услугами хостинга службы PopFly. Загрузить этот компонент, совместимый как с VS 2008, так и с предыдущей версией, можно с сайта popfly.ms. Технически NuGet-пакеты устанавливаются в проектах, а не в солюшене.
В дополнение к FxCopAnalysers я также указал Roslynator, который содержит более 500 правил, а также Async Fixer, содержащий некоторые правила для работы с async/await. Конфигурировать уровни предупреждений можно несколькими способами. Первый — с использованием .ruleset-файлов, второй — более современный — с использованием .editorconfig. Выбрав любой из этих подходов, вы можете хранить и распространять конфигурацию ваших анализаторов (как и сами анализаторы) через систему контроля версий. То есть программисту достаточно установить Visual Studio и загрузить исходный код, чтобы начать работу, используя анализаторы на базе Roslyn.
Второй недостаток, который имеет непосредственное отношение к теме этой статьи, — это то, что настройки Resharper не влияют на билд, а следовательно, он непригоден для использования в качестве quality gate в CI/CD pipeline. Стоит сделать оговорку, что у Resharper есть CLI-версия, которая может использоваться на CI, но ее нужно настраивать отдельно. Также Resharper имеет фиксированный набор правил анализа, которые нельзя расширять.
А еще в процессе исправления возникших ошибок билда я вновь вернулся к написанному более двух лет назад коду, что заставило меня по-новому взглянуть на то, что раньше «просто работало». Проанализируйте набор правил и на основе принятых в вашей команде соглашений и code style отрегулируйте уровни предупреждений, после чего нарушения правил будут блокировать сборку. Для возможности конфигурации анализаторов вам нужно создать .editorconfig-файл и поместить его в корневую папку вашего солюшена. В Visual Studio это можно сделать одной кнопкой в разделе настроек. Безусловно, Resharper достоин упоминания в контексте выбора инструментов статического анализа.
Начало Работы С Анализаторами Roslyn
Если такая «не ошибка» случается в одном месте из ста, переписывать придется слишком много, а сама она сокрыта где-то в редкоиспользуемой части интерфейса — то и ладно, это того не стоит. Но когда чуть ли каждая функция называется черте-как, то это совсем другое дело. Автор кода не в курсе, какие куски проекта не будет знать n-й читатель кода. Терминология-то развивается, а на больших проектах фиг новичок узнает терминологию, используемую разработчиками разных модулей. Потом разбираешься в коде метода, и оказывается, что «scenes» — это автор так криво перевел слово «киносеанс».
Как часто вы встречали названия методов вида «updateScenes()»? Когда вы смотрите на вызов этого вот в каком-то месте чужого кода и совершенно не понимаете, что имел в виду автор. Просто для меня история изменений является основным способом изучения эволюции исходников. В большинстве случаев я и так вижу что делает код.
Кроме того, на их основе можно реализовать политику загрузки исходного кода в систему контроля версий, например запретить загрузку, когда метрики выходят за определенные границы. Мне никогда не нравилась метрика цикломатической сложности , которую большинство инструментов использует для анализа сложности кода. Просто она задумана скорее для того, чтобы показать вариативность сценариев в коде, что, естественно, влияет на его сложность, но не всегда прямолинейно. Посыл идет скорее к сложности тестирования, чтобы убедиться что код работает правильно. В случае автоматизации тестирования, цикломатическая сложность говорит нам сколько тестов нужно написать на этот код. В случае ручного тестирования – сколько должно быть разных сценариев для этого кода (тут на деле еще сложнее, потому что не до каждого такого сценария может добраться легко ручное тестирование).
В-третьих, и это, наверное, самое важное, должна быть «политическая» воля со стороны руководства компании или проекта по внедрению и поддержке измерений. Количество найденных багов конечными пользователями – очень важная диагностика для меня. Если их много, то явно где-то есть проблема и надо разбираться.