Knowledge Transfer

Ethickfox kb page with all notes


Project maintained by ethickfox Hosted on GitHub Pages — Theme by mattgraham

Code quality

Identifying and estimating code quality requires you to consider two aspects of code: what it does and how it looks.

Charaсteristics of Structural Code Quality

94.png

Establishing Coding Standards

By incorporating coding standards, your team takes steps to:

Coding standards usually consist of three major elements: style guides, code principles, and project-specific code conventions. Each of these three parts includes key pieces of information that impact the success of a project.

Implementing Automated Code Analysis

Automated code analysis is a tool for achieving structural code quality and enforcing coding standards. It analyzes the program code against a predefined set of rules and best practices via a fully automated process.

SonarQube (formerly Sonar) is an open source platform for continuous inspection of code quality that delivers one of the best static code analyzers on the market for Java, C#, C/C++, and many other languages.

SonarQube provides very deep code analysis, allowing it to calculate and manage the value of technical debt. In addition to SonarQube, there are other useful tools for automated code analysis.

Code Quality Metrics

Сode quality metrics are a set of software metrics that help developers better understand the code they're writing. You can use code metrics to figure out issues in code promptly. Throughout the development process, you and your team can detect potential hazards, assess the present state of the project, and track progress. The following quality metrics will help with this:

Naming Coding Elements

Length Rules

Grammar Rules

Методы

Общее

Параметры

Побочные эффекты

Общие принципы

PMD

Checkstyle

Метрики качества кода

Название Определение Метрика Tool
Цикломатическая сложность Число линейно независимых путей в секции кода. >10 - refactor SonarQube
Отсутствие согласованности в методах Мера связанности между методами и переменными экземпляра класса: количество методов, которые не обращаются к определенному полю данных / всем полям данных в классе. Высокий cohesion (и соответственно низкий LCOM) - хорошая организация класса
Связь между объектами Число классов, имеющих связь с данным. Меньше - лучше MetricsReloaded IntelliJ plugin
Code coverage Процент кода вызываемого в тестоах Больше - лучше SonarQube
Unit test success percentage Процент успешно пройденных юнит-тестов. Должно быть 100% SonarQube
Duplicate code percentage Процент задвоения кода во всём коде приложения. Меньше - лучше SonarQube
Technical debt Места, которые реализованы в крткосрочной перспективе, но требуют реализации с помощью лучшего решения Меньше - лучше SonarQube
Comment density строки комментариев / (строки кода + строки комментариев) * 100. Меньше - лучше SonarQube
Static code rules compliance Число, которое показывает, в какой степени используются практики чистого кода Больше - лучше SonarQube

Code smells

Дублирование кода - использование одинаковых структур кода в разных местах. Решение

Большой класс - класс реализует слишком большую функциональность.

Длинный метод - если есть необходимость что-то прокомментировать - это нужно вынести в отдельный метод.

Длинный список параметров - можно инкапсулировать часть параметров в одном объекте

Завистливые данные - метод обращается к данным другого объекта чаще, чем к своим. Чтобы исправить, надо хранить данные  и методы использующие эти данные в одном месте.

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

Комментарии - в большинстве случаев они нужны чтобы скрыть плохой код.

Ревью кода

Анализ (инспекция) кода с целью выявить ошибки, недочеты, расхождения в стиле написания кода, в соответствии написанного кода и поставленной задачи.

Зачем нужен?

Как проводится?