Качество кода на python: инструменты и best practices

6 JArchitect

JArchitect в первую очередь посвящен анализу кода на языке Java.

JArchitect – самый полный инструмент анализа кода Java, который анализирует

  • Иерархии вызовов
  • Потребление памяти
  • Сложность кода
  • Функциональная связь
  • Глубина вложения блоков
  • Архитектурные недостатки в реализации

JArchitect используется гигантами, такими как Samsung, Intel, LG, IBM, Google и другими.

7 Bandit

Bandit – это инструмент сканирования уязвимостей безопасности Python, который сканирует пакеты Python на наличие уязвимостей.

Это популярный инструмент среди специалистов по обработке данных и экспертов по искусственному интеллекту для построения кода.

Bandit доступен для использования через интерфейс командной строки.

Он создает отчет об уязвимости безопасности с подробной информацией о проблеме безопасности.

8 Code Climate

Code Climate – это аналитический инструмент, который чрезвычайно полезен для организации, которая подчеркивает качество.

Code Climate предлагает два разных продукта:

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

9 Crucible

Crucible от Atlassian – это интересный инструмент для совместной работы по управлению качеством кода.

В отличие от инструментов автоматической проверки качества Crucible является редким инструментом на рынке, который обеспечивает анализ качества с возможностью совместной работы в одно и то же время.

Лимит длины строки

Всем известно, что процесс чтения становится куда приятней, когда текст разбит на колонки. Это главная причина, по которой наши газеты выглядят именно так:

Подобную технику можно применить и к нашему коду:

// плохо
$my_email->set_from('[email protected]')->add_to('[email protected]')->set_subject('Methods Chained')->set_body('Some long message')->send();  
  
// хорошо
$my_email  
    ->set_from('[email protected]')  
    ->add_to('[email protected]')  
    ->set_subject('Methods Chained')  
    ->set_body('Some long message')  
    ->send();  
  
// плохо
$query = "SELECT id, username, first_name, last_name, status FROM users LEFT JOIN user_posts USING(users.id, user_posts.user_id) WHERE post_id = '123'";  

// плохо 
$query = "SELECT id, username, first_name, last_name, status 
    FROM users 
    LEFT JOIN user_posts USING(users.id, user_posts.user_id) 
    WHERE post_id = '123'";

Большинство разработчиков придерживаются лимита в 80 и 120 символов.

Принципы тестирования

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

1. Тестирование показывает наличие дефектов

Тестирование может показать наличие дефектов в программе, но не доказать их отсутствие

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

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

2. Исчерпывающее тестирование невозможно

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

3. Раннее тестирование

Тестирование должно начинаться как можно раньше в жизненном цикле разработки программного обеспечения и его усилия должны быть сконцентрированы на определенных целях.

4. Скопление дефектов

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

5. Парадокс пестицида

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

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

6. Тестирование зависит от контекста

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

7. Заблуждение об отсутствии ошибок.

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

И еще несколько важных принципов:

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

Интегрированная среда программирования (IDE)

Среда разработки — это основной инструмент, который программист запускает сразу же, как только приходит на работу. Типовая среда включает:

  • Редактор с подсветкой кода
  • Компилятор
  • Отладчик
  • Управление проектами

Существуют универсальные IDE, которые поддерживают много языков программирования:

  • CodeBlocks
  • NetBeans,
  • Eclipse,
  • Qt Creator,
  • Geany.

Существуют специализированные IDE, которые нацелены на один язык программирования:

  • Visual Basic,
  • Delphi,
  • Dev-C++.

К сожалению, практика работы программиста такова, что знания одного языка программирования и одной среды программирования явно недостаточно. Постоянно приходится использовать разные языки или среды в зависимости от задачи. Поэтому рекомендую пробовать и изучать разные IDE. Вы никогда не знаете, где это может пригодиться.

Есть много сравнительных таблиц IDE. Например, здесь. Ниже фрагмент сравнительной таблицы IDE для C/C++.

В качестве основного IDE лучше выбрать ту среду разработки, которая вам наиболее комфортна и удобна. И ее уже изучить досконально. Это существенно повысит вашу производительность.

Замыкания

Замыкания, или анонимные функции, или, как их еще часто называют, лямбды, – это функции без имени, которые удобны тем, что могут быть переданы в другие функции в качестве аргумента. Такие функции называются функциями высшего порядка. Например, представим, что у нас есть анонимная функция, которая принимает два числа и возвращает булево значение.

Алгоритмические задачи

  • Привет, мир!
  • Развернуть строку
  • Чётные числа
  • Числа Фибоначчи

Все задачи

Как мы могли бы описать такое, например, в Kotlin:

Или в go:

Удобно, согласитесь? Это не только безопасный код, но и самодокументируемый, так как нам не приходится гадать, каких типов аргументы мы должны передать и что оттуда вернется. Можно ли такое повторить в php? Можно, повторяем:

Новые вакансии

  • Full stack PHP разработчик До 120000₽
  • Backend-разработчик (Symfony) 120000₽ — 150000₽
  • PHP-разработчик (Symfony) До 250000₽
  • IOS разработчик 100000₽ — 300000₽
  • PHP разработчик в международную компанию До 500000₽

Все вакансии
Разместить вакансию бесплатно

Многие могут возразить, что это же всего лишь комментарии, а не код. Но пока для человека это комментарии, для псалма – это метаинформация, которая помогает ему следить за тем, чтобы в эту функцию не передали анонимную функцию с другими аргументами. Можете убедиться в этом сами, открыв редактор псалма. Сейчас вы увидете там ошибку, потому что я намеренно первым аргументом функции сделал string. Замените его на int, чтобы убедиться, что все работает правильно.

Если вы хотите вернуть nullable булев тип, вам необходимо добавить знак вопроса перед типом. Точно так же, как мы это делаем на уровне самого языка:

После этого мы вольны вернуть null из функции, как это показано в примере. Тут я использовал аннотацию @psalm-param, а не просто @param, потому что phpdoc не поддерживает некоторые особенности синтаксиса псалма. Однако я советую всегда, даже для простых типов, использовать @psalm-param, это позволит в будущем подключить другой статический анализатор, например, phpstan, где есть такая же аннотация @phpstan-param. Так вы сможете избежать конфликта анализаторов, если вдруг phpstan не поймет синтаксис псалма, указанный в аннотациях @param, @return, и наоборот. Поехали дальше.

Что если сама анонимная функция должна быть nullable?

В данном случае мы окружили скобками наш callable, чтобы null стал частью типа именно нашей переменной $max, а не частью возвращаемого типа анонимной функции.

Типичные ошибки внедрения контроля качества

  1. Использовать неоднозначные формулировки в чек-листах. Это чревато тратой времени на разбирательства. Чтобы это исправить, добивайтесь максимально понятных, однозначных формулировок, опишите критерии к пункту.
  1. Скрывать чек-листы от тех сотрудников, кого проверяем. Из-за этого сотрудники не знают, что от них ожидают, и нарушения повторяются из раза в раз. Объясните команде критерии проверки. Сотрудник в любой момент должен иметь возможность видеть, где он ошибся.
  1. Увлекаться денежным штрафом. Если вы назначите слишком высокие штрафы, увеличится риск текучки персонала, также будет сложнее оценивать умных и проактивных сотрудников и сложнее нанимать профессионалов. Используйте штрафы, если другие методы невозможно внедрить. Иногда лучше уволить сотрудника, чем постоянно его штрафовать. Внедрите вместо штрафов в деньгах штрафные баллы.
  1. Не реагировать на частые ошибки. Из-за этого сотрудники привыкают делать неправильно. Чтобы этого избежать, проверяющему необходимо сообщить о таких ошибках руководителю и убедиться, что он довел информацию до сотрудников. А также сообщить в отдел обучения для актуализации обучающих курсов.

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

QA, QC и тестирование

Так в чем же разница между QA и тестированием и что такое Quality Control?

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

Можно оформить их соотношение в виде таблицы:

Таким образом, мы можем построить модель иерархии процессов обеспечения качества: Тестирование – часть QC. QC – часть QA.

Иными словами, Quality Assurance обеспечивает правильность и предсказуемость процесса, в то время как Quality Control предполагает контроль соблюдения требований. Тестирование же, в свою очередь, обеспечивает сбор статистических данных и внесение их в документы, созданные в рамках QC-процесса.

Если провести аналогию с процессом конструирования, скажем, велосипеда, то получим такую картину:

С помощью тестирования мы можем определить, работают ли все детали и сам велосипед в целом так, как мы ожидаем. Из правильных ли материалов он сделан, с применением нужных методик и инструментов или нет. То есть подразумевается, что тестируемый объект уже существует.
Задачей же QA является обеспечение соответствия всех этапов конструирования нашего велосипеда определенным стандартам качества, начиная с планирования и создания чертежей и заканчивая сборкой уже готового велосипеда

То есть качеству объекта внимание уделяется еще до создания самого объекта.

Контроль качества ≠ обеспечению качества

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

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

Как читать чужой код? Часть 1. Общие вопросы. Доработка чужого кода. Code review

Во всех вакансиях есть требование — умение читать чужой код. Но ни на одних курсах специально этому не учат.
Чтобы устранить это противоречие, пишу данную статью. Рассмотрю случаи, в которых нам необходимо разбирать чужой код, поймём, чей код мы пытаемся разобрать, зачем и, главное, как. В статье описан личный опыт длиною в 18 лет начиная с версии платформы 7.7. Статья будет большой, набираемся терпения). Статья содержит в себе описание сценариев разбора кода, т.е. набор шагов. В статье не получится показать это на практике. Для этого планирую сделать онлайн или оффлайн курс, где на примерах будет показан разбор незнакомого кода. Статья разбита на 4 публикации для удобства изучения.

Как выглядит PHP код?

PHP код располагается прямо внутри нашей HTML страницы: он может находится между тегов, внутри тегов, до первого тега на странице (<!DOCTYPE html>) и даже после закрывающегося тега html – абсолютно везде (главное не забыть поменять расширение файла с .html на .php). Именно поэтому он и называется встраиваемым языком программирования. Давайте рассмотрим всё на примере, возьмём наш макет из статьи о том, как создать веб-страницу и поместим в него PHP скрипт:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Как создать веб страницу?</title>
</head>
<body>
<?php
echo 'Наш первый ПХП скрипт работает!<br />';
?>
И здесь пишем любой интересующий нас текст.
</body>
</html>

У меня при открытии данной страницы вместо текста на русском языке получилось вот что:

Техдолг

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

Из-за техдолга я пишу плохой код и костыли. Следующий разработчик посмотрит на вот это вот всё, увидит косяки и допишет еще костыль: «Если сейчас еще подопру, ничего страшного не будет». Техдолг порождает костыли, теряется качество, что снова порождает костыли, а они растят техдолг еще больше.

Существует теория «разбитых окон». Если в здании появляется разбитое окно, и его не меняют, то через некоторое время появится второе разбитое окно, третье, граффити. Люди видят, что за зданием никто не следит и наказания за разбитые окна не следует. Так же и с кодом. Часто в legacy проектах код обрастает костылями, потому что условные Пети и Васи видят костыли и думают: «Ничего страшного, подопру, не я первый». Поэтому в нормальных компаниях техдолгу уделяют достаточно времени — либо берут квоту, либо технический спринт, который решит вопрос

Если вы лид, или как-то влияете на процессы построения спринтов и список задач, которые берутся в работу, уделите внимание техдолгу — это важно

Инструменты совместимости браузера

14) Призрачная лаборатория

Ghostlabs предлагает синхронизированное тестирование щелчков, прокруток, перезагрузок и форм ввода на всех ваших подключенных устройствах. Он использует превосходный встроенный инспектор, чтобы быстро разобраться в любой проблеме. Он подключается к выходным данным DOM или JavaScript на любом устройстве и эффективно исправляет код. Он доступен как для Mac OS X, так и для Windows без необходимости установки. Чтобы отслеживать изменения файлов с помощью сервера Ghostlab, вы можете интегрировать страницы из вашего локального каталога, вашего локального хоста, установленного Apache, или любого другого сервера.

Скачать Ghostlab

15) Лаборатория соуса

Это ведущая облачная платформа для тестирования веб-приложений и мобильных приложений. Он позволяет запускать тесты в облаке на более чем 260 различных браузерных платформах и устройствах. Виртуальная машина не настраивается и не требует обслуживания. Имея доступ к текущим точкам останова, вы можете легко взять под контроль систему, чтобы вручную исследовать проблему. С помощью Sauce Lab вы можете перечислить недавно запущенные тесты в хронологическом порядке с информацией о времени выполнения, платформе тестирования, сборке и о том, прошли они или нет.

Скачать SauceLab

16) Браузерный стек

С помощью стека браузера можно проводить тестирование браузера на базе настольных компьютеров и мобильных устройств. Он основан на облаке, поэтому не требует установки, а предустановленные инструменты разработчика полезны для быстрого кроссбраузерного тестирования и отладки. С помощью browser-stack вы можете настроить комплексную среду тестирования с поддержкой прокси, брандмауэров и Active Directory. Он поддерживает Opera Mobile, Android, Windows (XP, 7 и 8), iOS, снежный барс OSX, лев и горный лев и так далее. Стек браузера позволяет удаленно тестировать ваши страницы.

Скачать BrowserStack

Дженерики

Дженерик-тип – это инструмент обобщенного программирования, который позволяет работать с различными типами.

Возьмем популярный пример – Stack – и на его примере посмотрим, как это работает:

Сначала мы вводим некоторый тип T, который нам пока неизвестен. Используем этот T как тип данных наших элементов в методах add() и last(). В момент создания объекта мы должны указать конкретный тип нашего T с помощью такого синтаксиса:

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

Таким образом, наш стек может хранить как строки, так и числа, объекты и массивы. А чтобы убедиться, что это работает, загляните в редактор псалма.

Другой пример использования дженерика:

В данном случае у нас есть некоторый контейнер, который умеет по полному имени класса (который пока что обозначим как T) вернуть объект. Таким образом мы можем получить любой T, который контейнер по его имени найдет у себя в зависимостях. Чтобы оценить всю мощь дженериков, попрактикуйтесь на простых задачах, а также почитайте документацию псалма.

Также в этом коде есть одна важная особенность: нам не нужно указывать в аннотации к нашему $result тип дженерика, так как этот тип берется из аргумента метода get.

Что такое качество кода?

Естественно, вы хотите, чтобы ваш код
был качественным (кто ж не хочет?). Но
для этого нужно сначала определиться
с тем, что следует понимать под словом
«качество».

Быстрый поиск в Google выдает множество
результатов с определениями качества
кода. И, как выясняется, этот термин
разные люди понимают по-разному.

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

  • он делает то, что должен делать,
  • он не имеет дефектов и проблем,
  • его легко читать, поддерживать и
    расширять.

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

Какие виды тестирования существуют

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

Вообще, у тестирования есть философия, которая строится на том, что в любой программе по определению есть ошибки и найти их все невозможно. А если вы почему-то не нашли ошибку, значит, просто плохо искали. Удачный тест для тестировщика — тот, при котором нашли баг. А если всё нормально работало, значит, тест неудачный и свою задачу не выполняет.

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

Есть несколько видов тестирования:

История развития профессии

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

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

Для чего нужен PHP начинающему программисту

С помощью одного только языка разметки HTML, который вы можете изучить в нашем бесплатном курсе HTML для начинающих, любой желающий может научиться создавать простейшие сайты, например, одностраничные лендинги или сайты-визитки. Однако, если вы захотите создать более сложный сайт хотя бы с несколькими десятками страниц, вскоре вы столкнетесь с проблемами. Например, если вы захотите добавить в меню сайта ещё один элемент, придётся изменять каждую HTML-страницу, производя одни и те же действия — только в таком случае этот пункт меню появится на всех страницах сайта. Кроме того, если вы захотите отредактировать текст какой-нибудь статьи, вам придется открывать исходный код странички в редакторе кода и менять его, а после этого ещё и загрузить обновленный вариант страницы на хостинг. Согласитесь, это не самый удобный вариант.

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

Кроме того, можно сделать для всех страниц сайта одну единственную страницу на PHP — что-то вроде шаблона, в который нужно будет подставлять только разный текст, в зависимости от того, по какому адресу на сайте сейчас находится посетитель. А тексты статей будут храниться отдельно — например, в базе данных. Если мы захотим изменить текст какой-нибудь статьи или добавить новый материал на сайте, мы можем создать ещё одну PHP-страничку, которая будет заниматься именно этим. Это позволит управлять материалами сайта прямо в браузере, хоть с телефона, из любой точки мира (где есть интернет, разумеется).

Crucible

Онлайн-приложение для ревью кода, поиска проблем, обсуждения изменений в отдельных ветках, шеринга данных и т.п. Crucible не бесплатный сервис. Есть две версии — для небольших команд и для корпораций. В первом случае нужно один раз заплатить $10, после чего становятся доступными безлимитные репозитории для 5 пользователей. Корпоративная версия стоит $1100, покупатель получает возможность открыть безлимитный репозиторий для 10 пользователей. Есть демо-доступ на 30 дней.

Основные функции:

  • Совместная работа как 2-3 программистов, так и больших групп разработчиков.
  • Возможность ревью кода как до, так и после внесения изменений.
  • Совместимость с SVN, Perforce и CVS.

Эффективность статического анализа

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

Использование AppСhecker позволяет существенно упростить и сократить затраты на ревизию кода при разработке программ, а также повысить качество кода и сократить количество ошибок и уязвимостей еще на этапе проектирования, что также позитивно скажется на затратах на доработку и поддержку выпускаемого ПО.

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

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

Рис. 3. Общий вид рабочего экрана AppChecker

Как уже упоминалось, работа анализатора во многом близка работе компилятора. И для того чтобы провести качественный анализ, требуются те же действия, которые выполняет система сборки: проанализировать зависимости в проекте, распознать и «подключить» библиотечные функции и т. д., что может потребовать дополнительных настроек процесса анализа. В сравнении с другими статическими анализаторами, AppСhecker предоставляет пользователям бо?льшую гибкость в настройке: он понятен простым пользователям, а опытные разработчики смогут интегрировать его в процесс сборки любой сложности.

Важной составляющей безопасности кода является применение проверенных сторонних компонентов — библиотек или готовых программ с открытым исходным кодом. Их можно проверить, сообщая авторам о найденных уязвимостях и создавая базу уязвимостей open-source библиотек

Это особенно актуально для поддерживаемых анализатором AppСhecker интерпретируемых языков PHP, Javascript, в которых программы хранятся в виде исходных текстов.

Репозиторий

Обсудим сообщения коммитов. На картинке примеры реальных сообщений, которые я видел в разных проектах. Как считаете, какие из них информативны?

Сообщения коммитов

Я пишу в WebStorm и люблю его. В нем можно настроить подсветку номеров задач, переход при клике в Task Tracker — это круто. Если кто-то не использует WebStorm — самое время, так как с ним сообщения коммитов получаются качественными. Что такое качественный месседж коммита? Это коммит, в котором есть номер задачи и короткое, но ёмкое изложение сути изменений«сделал новый модуль», «добавил кнопку», «добавил фичу, где создается компонент», а не безликое «добавил фичу». При просмотре коммитов будет понятно, где добавили компонент, а где исправили баг. Еще в сообщениях коммитов обязательно указание типа измененийfeature, bugfix, чтобы было понятно, в рамках чего происходили изменения.

Gitflow

Про Gitflow расскажу коротко. Подробное описание в переводе статьи Vincent Driessen. Gitflow одна из самых популярных и очень удачных моделей ведения репозитория, в которой есть основные ветки — develop, master, preprod, prod, и временные ветки: feature, bug, release. Когда мы начинаем задачу — отводим feature-ветку от develop-ветки. После прохождения код-ревью на feature-ветке вливаем ее обратно в develop. Под конец собираем релизы из develop и релизимся в master.

Инструменты

Linters — обязательный инструмент в каждом проекте. В линтерах много готовых конфигов, но можно писать свои правила. Если у вас есть свои правила, то линтер должен линтить эти правила — вам нужно будет написать правила для своего Code style. Полезные ссылки по линтерам:

  • github.com/dustinspecker/awesome-eslint
  • eslint.org
  • github.com/reid/node-jslint
  • palantir.github.io/tslint/

Инструмент легко встраивается в Jenkins. Наши ребята встроили достаточно быстро. Скорее всего, интегрируется и в другие системы, но мы не пробовали. SonarJS еще проверяет код на code smells. Если честно, я не знаю, делают ли так обычные линтеры.

Форматеры или стилизаторы — это инструмент, который форматирует код по конфигу, например, Prettier. Можно настроить на pre-push hook, и получить единый стиль кода в репозитории. Петя из нашей команды может поставить 500 пробелов, или вообще не писать точку с запятой — в репозитории все будет лежать чистенько и красиво.

Хотел рассказать историю, которая произошла с нами. Мы внедрили Prettier в проект, в котором написано много задач, и решили не прогонять через него весь проект, а только кусочки кода с фичами. Нам казалось, что постепенно так мы выплывем и не испортим историю коммитов: в аннотации будет видно, кто правил последний. Это было плохое решение. Когда мы делали задачку и pull request, и меняли пару строк, то Prettier форматировал весь файл, а когда смотрели pull request — вот же, всего две строки! Это забирало кучу времени на код-ревью. Поэтому если хотите внедрить Prettier — прогоняйте весь проект.

Есть еще инструмент — error tracking в runtime. Например, вы выложили приложение в прод, по нему ходят пользователи. Если где-то сломалась консоль или упал сетевой запрос — мы можем это отследить. Error tracking показывает шаги пользователей по DOM-дереву, поддерживает фильтры, имеет гибкую настройку классификации ошибок и много всего. Я сам пользовался Sentry, могу рекомендовать TrackJS и точно знаю, что есть еще ресурсы.

Но от платных решений вроде Sentry, можно отказаться. Почему? Давайте сначала посмотрим, что такое Sentry. Это список ошибок.

Это детализация ошибки.

Здесь можно посмотреть устройство пользователя, ОС, браузер и сделать выводы: «Ага, сделали фильтр по iOS, и видим, что там есть такой баг, а в Android нет — наверное, проблема связана с iOS».

В Sentry есть StackTrace — тоже можно посмотреть, если нужно.

Мы отказались от Sentry. В скрипте сбора ошибок мало строк, а все остальное — это визуализация: графики и чарты. Сами ошибки собираются достаточно просто, скрипт небольшой, поэтому мы подумали: «Зачем нам платить деньги, когда мы можем написать свое?». Написали — оказалось возможно. У нас нет крутых графиков и красоты, но зато решение рабочее. По моему опыту, если не хочется платить деньги — можно «покурить» скрипт сбора ошибок и написать свою обертку.

Ключевые выводы

  1. Существует семь базовых инструментов качества и семь новых инструментов качества. 
  2. Семь базовых инструментов качества направлены на решение проблем, связанных в основном с качеством продукции или качеством технологических процессов. 
  3. Базовые инструменты качества базируются на анализе числовых данных.
  4. Новые инструменты качества направление на решение вопросов и проблем путем анализа вербальных данных. 
  5. Основными данными для анализа новыми инструментами качества являются мнения, точки зрения или идеи группы людей. В связи с этим данные инструменты принято также называть инструментами управления. 

Практически все вышеперечисленные инструменты так или иначе относятся к концепции управления Lean SixSig­ma.

Заключение

Не оставляйте «разбитые окна» (неудачные конструкции, неверные решения или некачественный текст программы) без внимания. Как только их обнаружите, чините сразу. Если нет времени на надлежащий ремонт, забейте окно досками. Наверняка вы сможете закомментировать ошибочный фрагмент или вывести на экран сообщение «В стадии разработки», или использовать фиктивные данные. Необходимо предпринять хотя бы малейшее действие, чтобы предотвратить дальнейшее разрушение, и показать, что вы контролируете ситуацию.Мы видели, как безошибочные, функциональные системы быстро портились, как только окна начали разбиваться. Существуют и другие факторы, которые вносят свой вклад в порчу программ, и мы коснемся некоторых из них далее, но небрежность ускоряет порчу быстрее, чем любой другой фактор.Вы можете подумать, что ни у кого не будет времени обойти «разбитые окна» проекта и отремонтировать их. Если вы продолжаете думать подобным образом, тогда вам лучше спланировать приобретение мусорного контейнера или переехать в другой район города. Не давайте энтропии победить себя.попробуйте ееPVS-Studio

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
Люкс-хост
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: