Подмножества цели качества программного обеспечения (C++)

Подмножество SQO 1 – прямое влияние на селективность

Следующий набор правил кодирования MISRA® C ++ будет обычно улучшать количество бездоказательных результатов в Polyspace® Code Prover™.

MISRA правило C++

Описание

2-10-2Идентификаторы, объявленные во внутреннем осциллографе, не должны скрывать идентификатор, объявленный во внешнем осциллографе.
3-1-3Когда массив будет объявлен, его размер должен или быть утвержден явным образом или задан неявно инициализацией.
3-3-2Одно Правило Определения не должно быть нарушено.
3-9-3Базовые битные представления значений с плавающей точкой не должны использоваться.
5-0-15Индексация массива должна быть единственной формой адресной арифметики с указателями.
5-0-18>,> =, <<= не буду применен к объектам типа указателя, кроме того, где они указывают на тот же массив.
5-0-19Объявление объектов должно содержать не больше, чем два уровня косвенности указателя.
5-2-8Объект с целочисленным типом или указателем, чтобы освободить тип не должен быть преобразован в объект с типом указателя.
5-2-9Бросок не должен преобразовывать тип указателя в целочисленный тип.
6-2-2Выражения с плавающей точкой не должны быть прямо или косвенно протестированы на равенство или неравенство.
6-5-1Цикл for должен содержать один счетчик цикла, который не должен иметь типа с плавающей точкой.
6-5-2Если счетчик цикла не будет изменен - или ++, то в условии счетчик цикла должен только использоваться в качестве операнда к <=, <> или> =.
6-5-3Счетчик цикла не должен быть изменен в условии или операторе.
6-5-4Счетчик цикла должен быть изменен одним из: - ++, - =n, или + =n; где n остается постоянным на время цикла.
6-6-1Любая метка, на которую ссылается оператор перехода, должна быть объявлена в том же блоке, или в блоке, заключающем оператор перехода.
6-6-2Оператор перехода должен перейти к метке, объявленной позже в том же теле функции.
6-6-4Для любого оператора цикла должен быть не больше, чем один оператор завершения, или оператор перехода использовал завершение цикла for.
6-6-5Функция должна иметь одну точку выхода в конце функции.
7-5-1Функция не должна возвращать ссылку или указатель на автоматическую переменную (включая параметры), заданный в функции.
7-5-2Адрес объекта с автоматическим хранением не должен быть присвоен другому объекту, который может сохраниться после того, как первый объект прекратил существование.
7-5-4Функции не должны вызывать себя, ни один прямо или косвенно.
8-4-1Функции не должны быть заданы с помощью обозначения замещающего знака.
9-5-1Объединения не должны использоваться.
10-1-2Базовый класс должен только быть объявлен виртуальный, если он будет использоваться в ромбовидной иерархии.
10-1-3Доступный базовый класс не должен быть и виртуальным и невиртуальным в той же иерархии.
10-3-1Должно быть не больше, чем одно определение каждой виртуальной функции на каждом пути через иерархию наследования.
10-3-2Каждая переопределяющая виртуальная функция должна быть объявлена с виртуальным ключевым словом.
10-3-3Виртуальная функция должна только быть заменена чистой виртуальной функцией, если она будет самостоятельно объявлена как чистая виртуальная.
15-0-3Управление не должно быть передано в попытку или блок выгоды с помощью goto или оператора switch.
15-1-3Пустой бросок (бросок;) буду только использоваться в составном операторе обработчика выгоды.
15-3-3Обработчики реализации функционального блока попытки конструктора класса или деструктора не должны ссылаться на нестатических участников от этого класса или его основ.
15-3-5Исключение типа класса должно всегда отлавливаться ссылкой.
15-3-6Где несколько обработчиков обеспечиваются в одном операторе try-catch или функциональном блоке попытки для производного класса, и некоторые или все его основы, обработчики должны быть упорядочены наиболее выведенные базовому классу.
15-3-7Где несколько обработчиков обеспечиваются в одном операторе try-catch или функциональном блоке попытки, любой замещающий знак (вместилище), обработчик должен произойти в последний раз.
15-4-1Если функция будет объявлена со спецификацией исключения, то все объявления той же функции (в других модулях перевода) должны быть объявлены с тем же набором идентификаторов типов.
15-5-1Деструктор класса не должен выходить за исключением.
15-5-2Где объявление функции включает спецификацию исключения, функция должна только быть способна к выдаванию исключения обозначенного типа (типов).
18-4-1Динамическое выделение памяти кучи не должно использоваться.

Подмножество SQO 2 – косвенное влияние на селективность

Хорошие методы проекта обычно приводят к меньшему количеству сложности кода, которая может улучшить количество бездоказательных результатов в Polyspace Code Prover. Следующий набор кодирования правил может помочь обратиться к проблемам проекта в вашем коде. Опция SQO-subset2 проверяет правила в SQO-subset1 и SQO-subset2.

MISRA правило C++

Описание

2-10-2Идентификаторы, объявленные во внутреннем осциллографе, не должны скрывать идентификатор, объявленный во внешнем осциллографе.
3-1-3Когда массив будет объявлен, его размер должен или быть утвержден явным образом или задан неявно инициализацией.
3-3-2Если функция будет иметь внутреннюю связь затем, то все переобъявления должны включать статический спецификатор класса памяти.
3-4-1Идентификатор, который, как объявляют, был объектом или типом, должен быть задан в блоке, который минимизирует его видимость.
3-9-2определения типов, которые указывают на размер и со знаком, должны использоваться вместо основных числовых типов.
3-9-3Базовые битные представления значений с плавающей точкой не должны использоваться.
4-5-1Выражения с типом bool не должны использоваться в качестве операндов к встроенным операторам кроме оператора присваивания =, логические операторы &&, ||!, операторы равенства == и! =, унарное & оператор и условный оператор.
5-0-1Значение выражения должно быть тем же самым согласно любому порядку оценки, которую разрешает стандарт.
5-0-2Ограниченная зависимость должна быть помещена в правила приоритета оператора C++ в выражениях.
5-0-7Не должно быть никаких явных интегральных плаванием преобразований cvalue выражения.
5-0-8Явное интегральное или преобразование с плавающей точкой не должно увеличивать размер базового типа cvalue выражения.
5-0-9Явное интегральное преобразование не должно изменять со знаком из базового типа cvalue выражения.
5-0-10Если побитовые операторы ~ и <<будут применены к операнду с базовым типом символьного или короткого целого без знака без знака, результат должен быть сразу брошен к базовому типу операнда.
5-0-13Условие оператора "if" и условие оператора цикла должны иметь тип bool
5-0-15Индексация массива должна быть единственной формой адресной арифметики с указателями.
5-0-18>,> =, <<= не буду применен к объектам типа указателя, кроме того, где они указывают на тот же массив.
5-0-19Объявление объектов должно содержать не больше, чем два уровня косвенности указателя.
5-2-1Каждый операнд логического && или || должен быть постфиксом - выражение.
5-2-2Указатель на виртуальный базовый класс должен только быть брошен к указателю на производный класс посредством dynamic_cast.
5-2-5Бросок не должен удалять const или энергозависимую проверку от типа указателя или ссылки.
5-2-6Бросок не должен преобразовывать указатель на функцию ни к какому другому типу указателя, включая указатель на функциональный тип.
5-2-7Объект с типом указателя не должен быть преобразован в несвязанный тип указателя, ни один прямо или косвенно.
5-2-8Объект с целочисленным типом или указателем, чтобы освободить тип не должен быть преобразован в объект с типом указателя.
5-2-9Бросок не должен преобразовывать тип указателя в целочисленный тип.
5-2-11Оператор запятой, && оператор и || оператор не должен быть перегружен.
5-3-2Оператор унарный минус не должен быть применен к выражению, базовый тип которого без знака.
5-3-3Унарное & оператор не должны быть перегружены.
5-18-1Оператор запятой не должен использоваться.
6-2-1Операторы присваивания не должны использоваться в подвыражениях.
6-2-2Выражения с плавающей точкой не должны быть прямо или косвенно протестированы на равенство или неравенство.
6-3-1Оператор, формирующий тело переключателя, в то время как, делает..., в то время как или для оператора будет составной оператор.
6-4-2Все, если... еще, если построения должны быть отключены с выражением else.
6-4-6Итоговый пункт оператора switch должен быть пунктом по умолчанию.
6-5-1Цикл for должен содержать один счетчик цикла, который не должен иметь типа с плавающей точкой.
6-5-2Если счетчик цикла не будет изменен - или ++, то в условии счетчик цикла должен только использоваться в качестве операнда к <=, <> или> =.
6-5-3Счетчик цикла не должен быть изменен в условии или операторе.
6-5-4Счетчик цикла должен быть изменен одним из: - ++, - =n, или + =n; где n остается постоянным на время цикла.
6-6-1Любая метка, на которую ссылается оператор перехода, должна быть объявлена в том же блоке, или в блоке, заключающем оператор перехода.
6-6-2Оператор перехода должен перейти к метке, объявленной позже в том же теле функции.
6-6-4Для любого оператора цикла должен быть не больше, чем один оператор завершения, или оператор перехода использовал завершение цикла for.
6-6-5Функция должна иметь одну точку выхода в конце функции.
7-5-1Функция не должна возвращать ссылку или указатель на автоматическую переменную (включая параметры), заданный в функции.
7-5-2Адрес объекта с автоматическим хранением не должен быть присвоен другому объекту, который может сохраниться после того, как первый объект прекратил существование.
7-5-4Функции не должны вызывать себя, ни один прямо или косвенно.
8-4-1Функции не должны быть заданы с помощью обозначения замещающего знака.
8-4-3Все выходные пути от функции с не - пустой тип возврата должны иметь явный оператор возврата с выражением.
8-4-4Функциональный идентификатор должен или использоваться, чтобы вызвать функцию, или этим нужно предшествовать &.
8-5-2Фигурные скобки должны использоваться, чтобы указать и совпадать со структурой в не - нулевая инициализация массивов и структур.
8-5-3В списке перечислителей = построение не должно использоваться, чтобы явным образом инициализировать участников кроме первого, если все элементы не будут явным образом инициализированы.
9-5-1Объединения не должны использоваться.
10-1-2Базовый класс должен только быть объявлен виртуальный, если он будет использоваться в ромбовидной иерархии.
10-1-3Доступный базовый класс не должен быть и виртуальным и невиртуальным в той же иерархии.
10-3-1Должно быть не больше, чем одно определение каждой виртуальной функции на каждом пути через иерархию наследования.
10-3-2Каждая переопределяющая виртуальная функция должна быть объявлена с виртуальным ключевым словом.
10-3-3Виртуальная функция должна только быть заменена чистой виртуальной функцией, если она будет самостоятельно объявлена как чистая виртуальная.
11-0-1Членские данные в не - типы классов POD должны быть частными.
12-1-1Динамический тип объекта не должен использоваться от тела его конструктора или деструктора.
12-8-2Оператор присваивания копии должен быть объявлен защищенный или частный в абстрактном классе.
15-0-3Управление не должно быть передано в попытку или блок выгоды с помощью goto или оператора switch.
15-1-3Пустой бросок (бросок;) буду только использоваться в составном операторе обработчика выгоды.
15-3-3Обработчики реализации функционального блока попытки конструктора класса или деструктора не должны ссылаться на нестатических участников от этого класса или его основ.
15-3-5Исключение типа класса должно всегда отлавливаться ссылкой.
15-3-6Где несколько обработчиков обеспечиваются в одном операторе try-catch или функциональном блоке попытки для производного класса, и некоторые или все его основы, обработчики должны быть упорядочены наиболее выведенные базовому классу.
15-3-7Где несколько обработчиков обеспечиваются в одном операторе try-catch или функциональном блоке попытки, любой замещающий знак (вместилище), обработчик должен произойти в последний раз.
15-4-1Если функция будет объявлена со спецификацией исключения, то все объявления той же функции (в других модулях перевода) должны быть объявлены с тем же набором идентификаторов типов.
15-5-1Деструктор класса не должен выходить за исключением.
15-5-2Где объявление функции включает спецификацию исключения, функция должна только быть способна к выдаванию исключения обозначенного типа (типов).
16-0-5Аргументы к подобному функции макросу не должны содержать лексемы, которые похожи на предварительную обработку директив.
16-0-6В определении подобного функции макроса каждый экземпляр параметра должен быть заключен в круглые скобки, если это не будет использоваться в качестве операнда # или ##.
16-0-7Неопределенные макро-идентификаторы не должны использоваться в #if или #elif директивах препроцессору, за исключением операндов к заданному оператору.
16-2-2Макросы C++ должны только использоваться для: включайте защиту, введите спецификаторы или спецификаторы класса памяти.
16-3-1Должно быть самое большее одно вхождение # или ## операторов в одном макроопределении.
18-4-1Динамическое выделение памяти кучи не должно использоваться.

Смотрите также

Похожие темы