Целевые подмножества качества программного обеспечения (AC AGC)

Правила в SQO-Subset1

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

Номер правила

Описание

5.2

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

8.11

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

8.12

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

11.2

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

11.3

Приведение не должно выполняться между типом указателя и интегральным типом.

12.12

Базовые битовые представления значений с плавающей точкой не должны использоваться.

14.7

Функция должна иметь одну точку выхода в конце функции.

16.1

Функции не должны определяться переменным числом аргументов.

16.2

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

17.3

>, > =, <, < = не применяется к типам указателей, кроме тех случаев, когда они указывают на один и тот же массив.

17.6

Адрес объекта с автоматическим хранением не должен быть присвоен объекту, который может сохраняться после прекращения существования объекта.

18.4

Объединения не должны использоваться.

Для получения дополнительной информации об этих правилах смотрите MISRA AC AGC Guidelines for the Application of MISRA-C:2004 in the Context of Automatic Code Generation.

Правила в SQO-Subset2

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

Номер правила

Описание

5.2

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

6.3

вместо основных типов следует использовать шрифты, указывающие на размер и сигнальность

8.7

Объекты должны быть определены в возможности, если они доступны только из одной функции

8.11

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

8.12

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

9.3

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

11.1

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

11.2

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

11.3

Приведение не должно выполняться между типом указателя и интегральным типом.

11.5

Литье типов от любого типа к или от указателей не должно использоваться

12.2

Значение выражения должно быть тем же самым в любом порядке оценки, который разрешает стандарт

12.9

Оператор унарного минуса не применяется к выражению, базовый тип которого не подписан

12.10

Оператор запятыми не должен использоваться

12.12

Базовые битовые представления значений с плавающей точкой не должны использоваться.

14.7

Функция должна иметь одну точку выхода в конце функции.

16.1

Функции не должны определяться переменным числом аргументов.

16.2

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

16.3

Идентификаторы должны быть даны для всех параметров в объявлении прототипа функции

16.8

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

16.9

Идентификатор функции должен использоваться только с предыдущим &, или со списком параметров в круглых скобках, который может быть пустым

17.3

>, > =, <, < = не применяется к типам указателей, кроме тех случаев, когда они указывают на один и тот же массив.

17.6

Адрес объекта с автоматическим хранением не должен быть присвоен объекту, который может сохраняться после прекращения существования объекта.

18.4

Объединения не должны использоваться.

19.9

Аргументы в функциональный макрос не должны содержать лексемы, которые выглядят как директивы предварительной обработки

19.10

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

19.11

Все идентификаторы макросов в директивах препроцессора должны быть определены перед использованием, кроме директивы # ifdef и # ifndef предпроцессора и оператора defined ()

19.12

Должно быть не более одного вхождения операторов предпроцессора # или # # в одном определении макроса.

20.3

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

Примечание

Программное обеспечение Polyspace не проверяет MISRA® правило 20.3 непосредственно.

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

int my_system_library_call(int in) {assert (in>1); if random \
return -1 else return 0; }

Для получения дополнительной информации об этих правилах смотрите MISRA AC AGC Guidelines for the Application of MISRA-C:2004 in the Context of Automatic Code Generation.

См. также

Похожие темы