1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/yingmingzongyu-SonarQube-docs

В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
04-自动翻译Sonar规则实践.md 16 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 25.11.2024 20:43 3f80f98

Практика применения правил Sonar

Исследование веб-интерфейса

api/rules/search?languages=java&ps=500&p=1 поиск всех java-правил

{
    "total": 1838,
    "p": 1,
    "ps": 1,
    "rules": [
        {
            "key": "squid:S2589",
            "repo": "squid",
            "name": "Булевы выражения не должны быть избыточными",
            "createdAt": "2019-05-02T19:14:49+0800",
            "htmlDesc": "<p>Если булево выражение не меняет оценку условия, то оно совершенно излишне и может быть удалено. Если оно избыточно, потому что не соответствует намерению программиста, то это ошибка, и выражение должно быть исправлено.</p>\n<h2>Пример кода, не соответствующего требованиям</h2>\n<pre>\na = true;\nif (a) { // Не соответствует требованиям\ndoSomething();\n}\n\nif (b && a) { // Не соответствует требованиям; «a» всегда «true»\ndoSomething();\n}\n\nif (c || !a) { // Не соответствует требованиям; «!a» всегда «false»\ndoSomething();\n}</pre>\n<h2>Соответствующее решение</h2>\n<pre>\na = true;\nif (foo(a)) {\ndoSomething();\n}\n\nif (b) {\ndoSomething();\n}\n\nif (c) {\ndoSee();\n}</pre>\n<h2>См.</h2>\n<ul>\n<li> MISRA C:2004, 13.7 — Булевы операции, результаты которых инвариантны, не допускаются.</li>\n<li> MISRA C:2012, 14.3 — Управляющие выражения не должны быть инвариантными.</li>\n<li><a href=\"http://cwe.mitre.org/data/definitions/571\">MITRE, CWE-571</a> — Выражение всегда истинно.</li>\n<li><a href=\"http://cwe.mitre.org/data/definitions/570\">MITRE, CWE-570</a> — Выражение всегда ложно.</li>\n<li><a href=\"http://cwe.mitre.org/data/definitions/489\">MITRE, CWE-489</a> — Оставшийся код отладки.</li>\n<li><a href=\"https://www.securecoding.cert.org/confluence/x/NYA5\">CERT, MSC12-C.</a> — Обнаружение и удаление кода, который не имеет эффекта или никогда не выполняется.</li>\n</ul>",
            "mdDesc": "<p>Если булевое выражение не меняет оценку условия, то оно совершенно излишне и может быть удалено. Если оно избыточно, потому что не соответствует намерению программиста, то это ошибка, и выражение должно быть исправлено.</p>\n<h2>Пример кода, не соответствующего требованиям</h2>\n<pre>\na = true;\nif (a) { // Не соответствует требованиям\ndoSomething();\n}\n\nif (b && a) { // Не соответствует требованиям; «a» всегда «true»\ndoSomething();\n}\n\nif (c || !a) { // Не соответствует требованиям; «!a» всегда «false»\ndoSomething();\n}</pre>\n<h2>Соответствующее решение</h2>\n<pre>\na = true;\nif (foo(a)) {\ndoSomething();\n}\n\nif (b) {\ndoSomething();\n}\n\nif (c) {\ndosee();\n}</pre>\n<h2>См.</h2>\n<ul>\n<li> MISRA C:2004, 13.7 — Булевы операции, результаты которых инвариантны, не допускаются.</li>\n<li> MISRA C:2012, 14.3 — Управляющие выражения не должны быть инвариантными.</li>\n<li><a href=\"http://cwe.mitre.org/data/definitions/571\">MITRE, CWE-571</a> — Выражение всегда истинно.</li>\n<li><a href=\"http://cwe.mitre.org/data/definitions/570\">MITRE, CWE-570</a> — Выражение всегда ложно.</li>\n<li><a href=\"http://cwe.mitre.org/data/definitions/489\">MITRE, CWE-489</a> — Оставшийся код отладки.</li>\n<li><a href=\"https://www.securecoding.cert.org/confluence/x/NYA5\">CERT, MSC12-C.</a> — Обнаружение и удаление кода, который не имеет эффекта или никогда не выполняется.</li>\n</ul>",
            "severity": "MAJOR",
            "status": "READY",
            "isTemplate": false,
            "tags": [],
            "sysTags": ["based-on-misra", "cert", "cwe", "misra", "redundant"],
            "lang": "java",
            "params": [],
            "defaultDebtRemFnType": "CONSTANT_ISSUE",
            "defaultDebtRemFnOffset": "10min",
            "debtOverloaded": false,
            "remFnType": "CONSTANT_ISSUE",
            "remFnBaseEffort": "10min",
            "remFnOverloaded": false,
            "type": "CODE_SMELL"
        }
    ]
}

api/qualityprofiles/search?language=java&qualityProfile=java1 информация о качестве профиля java1

Ответ: К сожалению, без доступа к изображению невозможно предоставить точный перевод. Однако, исходя из контекста, можно предположить, что в ответе содержится информация о профиле качества Java1. Это может включать в себя описание целей, задач, принципов и методов обеспечения качества программного обеспечения, разработанного на языке Java. API/rules/search?activation=true&qprofile=AWtqxGzkP99GHtfoWcir java1 качество правила

{
    "total": 546,
    "p": 1,
    "ps": 1,
    "rules": [
        {
            "key": "squid:S2589",
            "repo": "squid",
            "name": "Булевы выражения не должны быть избыточными",
            "createdAt": "2019-05-02T19:14:49+0800",
            "htmlDesc": "<p>Если булево выражение не изменяет оценку условия, то оно совершенно излишне и может быть удалено. Если оно избыточно, потому что не соответствует намерениям программиста, то это ошибка, и выражение должно быть исправлено.</p>\n<h2>Пример несоответствующего кода</h2>\n<pre>\na = true;\nif (a) { // Не соответствует\ndoSomething();\n}\n\nif (b && a) { // Не соответствует; «a» всегда «true»\ndoSomething();\n}\n\nif (c || !a) { // Не соответствует; «!a» всегда «false»\ndoSomething();\n}</pre>\n<h2>Соответствующее решение</h2>\n<pre>\na = true;\nif (foo(a)) {\ndoSomething();\n}\n\nif (b) {\ndoSomething();\n}\n\nif (c) {\ndoSomething();\n}</pre>\n<h2>См.</h2>\n<ul>\n<li>MISRA C:2004, 13.7 — Булевы операции, результаты которых инвариантны, не допускаются.</li>\n<li>MISRA C:2012, 14.3 — Управляющие выражения не должны быть инвариантными.</li>\n<li><a href=\"http://cwe.mitre.org/data/definitions/571\">MITRE, CWE-571</a> — Выражение всегда истинно.</li>\n<li><a href=\"http://cwe.mitre.org/data/definitions/570\">MITRE, CWE-570</a> — Выражение всегда ложно.</li>\n<li><a href=\"http://cwe.mitre.org/data/definitions/489\">MITRE, CWE-489</a> — Оставшийся отладочный код.</li>\n<li><a href=\"https://www.securecoding.cert.org/confluence/x/NYA5\">CERT, MSC12-C.</a> — Обнаружение и удаление кода, который не имеет эффекта или никогда не выполняется.</li>\n</ul>",
            "mdDesc": "<p>Если булевое выражение не изменяет оценку условия, то оно совершенно излишне и может быть удалено. Если оно избыточно, потому что не соответствует намерениям программиста, то это ошибка, и выражение должно быть исправлено.</p>\n<h2>Пример несоответствующего кода</h2>\n<pre>\na = true;\nif (a) { // Не соответствует\ndoSomething();\n}\n\nif (b && a) { // Не соответствует; «a» всегда «true»\ndoSomething();\n}\n\nif (c || !a) { // Не соответствует; «!a» всегда «false»\ndoSomething();\n}</pre>\n<h2>Соответствующее решение</h2>\n<pre>\na = true;\nif (foo(a)) {\ndoSomething();\n}\n\nif (b) {\ndoSomething();\n}\n\nif (c) {\ndoSomething();\n}</pre>\n<h2>См.</h2>\n<ul>\n<li>MISRA C:2004, 13.7 — Булевы операции, результаты которых инвариантны, не допускаются.</li>\n<li>MISRA C:2012, 14.3 — Управляющие выражения не должны быть инвариантными.</li>\n<li><a href=\"http://cwe.mitre.org/data/definitions/571\">MITRE, CWE-571</a> — Выражение всегда истинно.</li>\n<li><a href=\"http://cwe.mitre.org/data/definitions/570\">MITRE, CWE-570</a> — Выражение всегда ложно.</li>\n<li><a href=\"http://cwe.mitre.org/data/definitions/489\">MITRE, CWE-489</a> — Оставшийся отладочный код.</li>\n<li><a href=\"https://www.securecoding.cert.org/confluence/x/NYA5\">CERT, MSC12-C.</a> — Обнаружение и удаление кода, который не имеет эффекта или никогда не выполняется.</li>\n</ul>",
            "severity": "MAJOR",
            "status": "READY",
            "isTemplate": false,
            "tags": [],
            "sysTags": ["based-on-misra", "cert", "cwe", "misra", "redundant"],
            "lang": "java",
            "langName": "Java",
            "params": []
        }
    ],
    "actions": {
        "create": true
    }
}

*Примечание: в тексте запроса присутствуют фрагменты на языке Markdown, которые были переведены в HTML.* ```
defaultDebtRemFnType: "CONSTANT_ISSUE",
defaultDebtRemFnOffset: "10min",
debtOverloaded: false,
debtRemFnType: "CONSTAНТ_ISSUЕ",
debtRemFnOffset: "10min",

defaultRemFnType: "CONSTANT_ISSUE",
defaultRemFnBaseEffort: "10min",
remFnType: "CONSTANT_ISSUE",
remFnBaseEffort: "10min",
remFnOverloaded: false,
type: "CODE_SMELL"
}
]
}

Это похоже на язык Python.

Примечание: в ответе сохранены оригинальные форматирование и синтаксис запроса. ## Содержание перевода правил

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

  2. В сервлетах не должно быть изменяемых полей экземпляра. По контракту, контейнер сервлетов создаёт экземпляр каждого сервлета, а затем прикрепляет отдельный поток к каждому новому входящему HTTP-запросу для обработки запроса. Таким образом, все потоки совместно используют экземпляр сервлета и, расширяя его, совместно используют поля экземпляров. Чтобы избежать недоразумений и неожиданного поведения во время выполнения, все поля сервлетов должны быть статическими и/или окончательными или просто удалены. Аналогичное ограничение существует в Struts 1.X для org.apache.struts.action.Action.

  3. Следует избегать использования конструкций «default». 1. «last», switch может содержать предложение по умолчанию, для этого есть несколько причин: обработка неожиданных значений, чтобы показать, что все случаи были учтены правильно. Из соображений читаемости кода рекомендуется помещать предложение default в конце оператора switch. Если предложение default не является последним случаем в операторе switch, это правило вызовет проблемы.

  4. «3», «Не следует использовать „Optional“ для параметров». Авторы языка Java прямо заявляют, что Optional следует использовать только как возвращаемый тип, как способ передачи метода, который может возвращать значение или не возвращать его. Для этого он очень полезен, но использование Optional на входной стороне увеличивает объём работы, которую необходимо выполнить в методе, и не добавляет реальной ценности. При использовании параметров Optional у вас есть два возможных входных значения: null и not-null, а становится три: null, non-null-without-value и non-null-with-value. Кроме того, можно использовать перегрузку для передачи информации о том, что некоторые параметры являются необязательными, и нет причин иметь необязательные параметры. Это правило также проверяет Guava Optional, поскольку он был вдохновлён JDK Optional. Хотя в некоторых аспектах (сериализация, предложение использовать в качестве элементов коллекции) они различаются, использование его в качестве типа параметра приведёт к тем же проблемам, что и JDK Optional.

  5. «4», Блоки кода, выполняемые условно, должны быть доступны. Условные выражения, которые всегда равны true или false, могут привести к мёртвому коду. Такой код всегда ошибочен и не должен использоваться в продакшене.

  6. «5», Переопределения должны соответствовать методам родительского класса в синхронизации. Когда синхронизация метода @Overrides сама по себе не синхронизирована, результатом может быть неправильная синхронизация, потому что вызывающий объект полагается на безопасность потоков обещания родительского класса.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/yingmingzongyu-SonarQube-docs.git
git@api.gitlife.ru:oschina-mirror/yingmingzongyu-SonarQube-docs.git
oschina-mirror
yingmingzongyu-SonarQube-docs
yingmingzongyu-SonarQube-docs
master