Как пахнет ваш код?

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

Мы все знакомы с вещами, которые плохо пахнут — тухлыми яйцами, спортивными шортами твоего дяди, туалетом на первом этаже во вторник тако и, конечно же, Ураном. Но как бы странно это ни звучало для непосвященных, мы также говорим о неприятных запахах в коде. Неприятные запахи в коде — это поверхностные признаки, которые обычно соответствуют более глубокой проблеме в системе и предполагают — иногда кричат ​​о возможности рефакторинга.» Это скопление плохих запахов , или, скорее, плохие проектные решения, увеличивает общий технический долг, который может иметь катастрофические последствия для вашего программного обеспечения в долгосрочной перспективе.

Во многих проектах миграции, которые мы берем на себя, наши клиенты предпочитают мигрировать свои устаревшие приложения «как есть», планируя улучшить качество своего кода позднее. Тем не менее, существует несколько рисков, связанных с этим подходом — главным образом, миграция плохого кода может сделать миграцию более сложной, и что планы по улучшению качества кода, как правило, затмеваются другими операционными проблемами после миграции и редко выполняются после миграции. выполнен.

Нарушение статус-кво

Когда мы перенесли центральную банковскую систему mBank со старого технологического стека на .NET Framework, было принято решение нарушить статус-кво и улучшить качество кодовой базы, прежде чем приступать к каким-либо работам по модернизации.

Мы использовали трехсторонний подход для решения проблем с качеством кода на раннем этапе: 1) добавление обнаружения и исправления неприятных запахов как части обычного процесса разработки, 2) добавление фреймворков модульного и функционального тестирования для улучшения качества кода и 3) автоматическое удаление неприятные запахи при преобразованиях кода и миграции на .NET.

mBank: лидер мобильного и онлайн-банкинга

mBank уже два десятилетия является синонимом инновационных банковских решений. Будучи первым полностью интернет-банком в Польше, они проложили путь цифровому банкингу, предоставив ориентированные на клиента продукты и решения, которые намного опережают развитие технологий. Имея 5,6 млн розничных клиентов и 1,7 млн ​​пользователей мобильных приложений, они являются одним из самых сильных и быстрорастущих финансовых брендов в Польше, и они продолжают внедрять инновации, улучшать пользовательский опыт, сокращать расходы и задавать направление развития мобильных и онлайн-сервисов. банковское развитие.

Фреймворк для выявления неприятностей

Как и во многих устаревших системах, основная банковская система mBank представляет собой сложную конструкцию из технологий, которые разрабатывались и поддерживались в течение последних 20 лет людьми с разным набором навыков. По этой причине производственный код несовместим, а обслуживание затруднено из-за того, что некоторые люди, изначально написавшие код, больше не работают в mBank. Уровень технического долга в таких системах высок, что может привести к увеличению затрат на разработку, снижению продуктивности разработчиков и даже провалу всего проекта.

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

Культура тестирования, оптимизирующая разработку

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

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

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

Очистка устаревшего кода как часть преобразования

Непосредственное преобразование с одного языка на другой при сохранении функциональности исходного языка почти всегда приводит к значительному снижению качества. Это особенно верно при переходе от устаревших языков к современным, таким как C#. Чтобы смягчить эту проблему потери качества во время преобразования, мы снова сделали упор на качество в первую очередь, используя обнаружение неприятных запахов для улучшения качества устаревшего кода перед преобразованием в C#. Одним из классических примеров неприятного запаха является наличие в коде операторов GO TO. Используя обнаружение неприятных запахов, мы смогли сократить количество GO TO в программном обеспечении почти на 99 %, с 37 405 до 203, прежде чем преобразовать код в C#.

Лучший код, больше успешных проектов

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

Загрузить полную версию статьи на сайте www.raincodelabs.com