N. | JSF®+ + Определение | Polyspace® Реализация |
---|---|---|
1 | Любая одна функция (или метод) будет содержать не более 200 логических исходных строк кода (L-SLOC). | Сообщение в файле отчета:
|
3 | Все функции должны иметь число цикломатической сложности 20 или менее. | Сообщение в файле отчета:
|
N. | Определение JSF++ | Реализация Polyspace |
---|---|---|
8 | Весь код должен соответствовать стандарту ISO/IEC 14882:2002 (E) C++. | Сообщает о сообщении об ошибке компиляции |
9 | Будут использоваться только символы, указанные в основном исходном наборе символов C++. | |
11 | Триграфы не будут использоваться. | |
12 | Следующие диграфы не будут использоваться: <% , %> , <: , :> , %: , %:%: . | Сообщение в файле отчета: Следующий диграф не будет использоваться: Сообщает диграф. Если для уровня правил задано значение warning, диграф будет разрешен, даже если он не поддерживается в |
13 | Многобайтовые символы и широкие строковые литералы использоваться не будут. | Создание отчетов о L'c' , L"string" , и использование wchar_t . |
14 | Буквальные суффиксы должны использовать заглавные, а не строчные буквы. | |
15 | Предусматриваются средства для проверки во время выполнения (оборонительное программирование). | Выполнено с проверками программного обеспечения. |
N. | Определение JSF++ | Реализация Polyspace |
---|---|---|
17 | Индикатор ошибки | errno не следует использовать в качестве макроса или глобальной связи с внешним редактированием «C». |
18 | Макрос | offsetof не следует использовать в качестве макроса или глобальной связи с внешним редактированием «C». |
19 |
| setlocale и localeconv не следует использовать в качестве макроса или глобальной связи с внешним редактированием «C». |
20 | The | setjmp и longjmp не следует использовать в качестве макроса или глобальной связи с внешним редактированием «C». |
21 | Средства обработки сигналов | signal и raise не следует использовать в качестве макроса или глобальной связи с внешним редактированием «C». |
22 | Библиотека ввода/вывода | все стандартные функции <stdio.h> не следует использовать в качестве макроса или глобальной связи с внешним редактированием «C». |
23 | Библиотека функционирует | atof , atoi и atol не следует использовать в качестве макроса или глобальной связи с внешним редактированием «C». |
24 | Библиотека функционирует | abort , exit , getenv и system не следует использовать в качестве макроса или глобальной связи с внешним редактированием «C». |
25 | Функции обработки времени библиотечных | clock , difftime , mktime , asctime , ctime , gmtime , localtime и strftime не следует использовать в качестве макроса или глобальной связи с внешним редактированием «C». |
N. | Определение JSF++ | Реализация Polyspace |
---|---|---|
26 | Должны использоваться только следующие директивы препроцессора: #ifndef , #define , #endif , #include . | |
27 |
| Обнаруживает шаблоны #if !defined , #pragma once , #ifdef , и отсутствующие #define . |
28 | The #ifndef и #endif директивы препроцессора будут использоваться только как определено в AV Rule 27, чтобы предотвратить несколько включений одного и того же заголовочного файла. | Обнаруживает любое использование, которое не соответствует AV-правилу 27. Принимая, что 35/27 не нарушается, сообщает только #ifndef . |
29 | The #define директива препроцессора не должна использоваться для создания встроенных макросов. Вместо этого должны использоваться встроенные функции. | Правило разделено на две части: определение макрофункции (29.def) и вызов макрофункции (29.use). Сообщения в файле отчета:
|
30 | The #define директива препроцессора не должна использоваться для определения постоянных значений. Вместо этого, const квалификатор должен применяться к объявлениям переменных для задания постоянных значений. | Отчеты #define простых констант. |
31 | The #define директива препроцессора будет использоваться только как часть метода для предотвращения нескольких включений одного и того же заголовочного файла. | Обнаруживает использование #define которые не используются для защиты от множественного включения, принимая, что правила 35 и 27 не нарушаются. |
32 | The #include директива препроцессора будет использоваться только для включения файлов заголовков (* .h). |
N. | Определение JSF++ | Реализация Polyspace |
---|---|---|
33 | The #include директива должна использовать <filename.h> обозначение для включения заголовочных файлов. | |
35 | Заголовочный файл будет содержать механизм, который предотвращает несколько включений себя. | |
39 | Заголовочные файлы (*.h ) не будет содержать определений переменных, отличных от const, или определений функций. | Сообщает определения глобальных переменных/функции в заголовке. |
N. | Определение JSF++ | Реализация Polyspace |
---|---|---|
40 | Каждый файл реализации должен включать файлы заголовков, которые однозначно определяют встроенные функции, типы и используемые шаблоны. | Сообщает, когда тип, шаблон или встроенная функция заданы в исходном файле. Bug Finder и Code Prover по-разному проверяют это правило кодирования. Анализы могут привести к различным результатам. |
41 | Исходные линии будут храниться не более 120 символов. | |
42 | Каждый оператор выражения будет находиться в отдельной линии. | Отчеты, когда два последовательных оператора выражения находятся в одной линии (если только операторы не являются частью определения макроса). |
43 | Следует избегать вкладок. | |
44 | Все отступы будут состоять по крайней мере из двух пространств и будут непротиворечивыми в одном исходном файле. | Сообщает, когда отступление оператора не по крайней мере на два пробела больше, чем содержащийся в нем оператор. Не сообщает о плохом отступе между открывающими скобками, следующими за операторами if/else, do/while, for и while. NB: в финальном релизе он примет любое отступление |
46 | Заданные пользователем идентификаторы (внутренний и внешний) не будут полагаться на значимость более 64 символов. | Эта проверка деактивируется в Polyspace по умолчанию при анализе You Code. Смотрите Checkers Deactivated in Polyspace как You Code Default Analysis (Polyspace Bug Finder Access). |
47 | Идентификаторы не начнутся с символа подчеркивания '_ '. | |
48 | Идентификаторы не будут отличаться:
| Проверяется независимо от возможностей. Не проверяется между макросами и другими идентификаторами. Сообщения в файле отчета:
|
50 | Первое слово имени класса, структуры, пространства имен, перечисления или типа, созданное с помощью | Сообщения в файле отчета:
Bug Finder и Code Prover по-разному проверяют это правило кодирования. Анализы могут привести к различным результатам. |
51 | Все буквы, содержащиеся в именах функций и переменных, будут полностью составлены из строчных букв. | Сообщения в файле отчета:
|
52 | Идентификаторы постоянных значений и значений перечислителя должны быть строчными. | Сообщения в файле отчета:
|
53 | Заголовочные файлы всегда будут иметь расширение имени файла ".h ". |
|
53.1 | Следующие последовательности символов не должны отображаться в именах заголовочных файлов: ' , \ , /* , // , или " . | |
54 | Файлы реализации всегда будут иметь расширение имени файла. «cpp». | Не чувствительный к регистру, если вы задаете опцию -dos . |
57 | Публичные, защищенные и частные разделы класса будут объявлены в таком порядке. | |
58 | При объявлении и определении функций с более чем двумя параметрами начальная круглая скобка и первый аргумент будут записаны в ту же линию, что и имя функции. Каждый дополнительный аргумент будет записан в отдельную линию (с закрывающей круглой скобкой непосредственно после последнего аргумента). | Обнаруживает, что два параметра находятся не в одной линии, Первый параметр должен быть в той же линии, что и имя функции. Не проверяет наличие закрывающих круглых скобок. |
59 | Операторы, образующие тело если, иначе, в то время как, сделать... в то время как или для оператора всегда заключаются в скобки, даже если скобки образуют пустой блок. | Сообщения в файле отчета:
|
60 | Скобки ("{} "), который окружает блок, будет помещен в один столбец, на отдельные линии непосредственно до и после блока. | Определяет, что скобки блока оператора должны быть в тех же столбцах. |
61 | Скобки ("{} "), который заключает блок, не будет иметь ничего другого в линии, кроме комментариев. | |
62 | Оператор dereference «*» и адрес оператора «&» будут непосредственно связаны со спецификатором типа. | Сообщает, когда существует пространство между типом и «*» «&» для переменных, параметров и объявления полей. |
63 | Пространства не будут использоваться ни вокруг. «» или «- >», ни между унарными операторами и операторами. | Сообщает, когда следующие символы не подключены непосредственно к пустому пространству:
Обратите внимание, что о нарушении будет сообщено для. «», используемого в определении с плавающей/двойной точкой. |
N. | Определение JSF++ | Реализация Polyspace |
---|---|---|
67 | Общие и защищенные данные должны использоваться только в структурах, а не в классах. | |
68 | Ненужные неявно сгенерированные функции представителей должны быть явно запрещены. | Сообщает, что конструктор по умолчанию, оператор назначения, конструктор копирования или деструктор не объявлены. |
71.1 | Виртуальные функции класса не должны вызываться ни от его деструктора, ни от любого из его конструкторов. | Сообщает, когда конструктор или деструктор непосредственно вызывает виртуальную функцию. |
74 | Инициализация нестатических членов класса будет выполнена через список инициализации представителя, а не путем назначения в теле конструктора. | Все данные должны быть инициализированы в списке инициализации, за исключением массива. Не сообщает, что назначение существует в Сообщение в файле отчета: Инициализация нестатических членов класса " |
75 | Представители списка инициализации должны быть указаны в том порядке, в котором они объявлены в классе. | |
76 | Конструктор копирования и оператор назначения должны быть объявлены для классов, содержащих указатели на элементы данных или нетривиальные деструкторы. | Сообщения в файле отчета:
Bug Finder и Code Prover по-разному проверяют это правило кодирования. Анализы могут привести к различным результатам. |
77.1 | Определение функции представителя не должно содержать аргументов по умолчанию, которые генерируют сигнатуру, идентичную сигнатуре неявно объявленного конструктора копии для соответствующего класса/структуры. | Не сообщает, когда существует явный конструктор копирования. |
78 | Все базовые классы с виртуальной функцией должны определять виртуальный деструктор. | |
79 | Все ресурсы, полученные классом, освобождаются деструктором класса. | Сообщает, что количество «новых» вызовов в конструкторе больше, чем количество «удалить» вызовов в деструкторе.
Примечание Нарушение возникает, даже если «new» сделано в «if/else».
|
81 | Оператор назначения должен правильно обрабатывать самоопределение | Отчеты, когда тело назначения копирования не начинается с " Нарушение не возникает, если пустой Нарушение возникает, когда |
82 | Оператор назначения возвращает ссылку на *this . | Следующие операторы должны вернуться
Не сообщает, когда возврат не существует. Нет специального сообщения, если тип не совпадает. Сообщения в файле отчета:
|
83 | Оператор назначения должен назначить все представители данных и основ, которые влияют на инвариант класса (элемент данных, представляющий кэш, например, не должен быть скопирован). | Сообщает, когда назначение копирования не присваивает всех представителей данных. В производном классе он также сообщает, когда назначение копирования не вызывает наследуемые назначения копирования. |
88 | Многократное наследование допускается только в следующей ограниченной форме: n интерфейсы плюс m частные реализации, плюс, самое большее, одна защищенная реализация. | Сообщения в файле отчета:
|
88.1 | Виртуальная основа с учетом состояния должна быть явно объявлена в каждом производном классе, который обращается к нему. | |
89 | Базовый класс не должен быть одновременно виртуальным и невиртуальным в одной иерархии. | |
94 | Унаследованная невиртуальная функция не должна быть переопределена в производном классе. | Не сообщает о деструкторе. Сообщение в файле отчета: Наследуемая невиртуальная функция |
95 | Унаследованный параметр по умолчанию никогда не будет переопределен. | |
96 | Массивы не должны обрабатываться полиморфно. | Сообщает арифметику указателя и массив, такие как доступ к выражениям, остроконечный тип которых используется в качестве базового класса. |
97 | Массивы не должны использоваться в интерфейсе. | Только для предотвращения распада массива в указатель. Не проверен на частных методах |
97.1 | Ни операнд оператора равенства (== или != ) должен быть указателем на функцию виртуального представителя. | Отчеты == и != на указатель представителя функцию полиморфных классов (не может статически определить, является ли она виртуальной или нет), кроме тех случаев, когда один аргумент является нулевой константой. |
N. | Определение JSF++ | Реализация Polyspace |
---|---|---|
98 | Каждое нелокальное имя, кроме main() , должно быть помещено в некоторое пространство имен. | Bug Finder и Code Prover по-разному проверяют это правило кодирования. Анализы могут привести к различным результатам. |
99 | Пространства имен не будут вложены глубиной более двух уровней. |
N. | Определение JSF++ | Реализация Polyspace |
---|---|---|
104 | Специализация шаблона декларируется до ее использования. | Сообщает фактическое сообщение об ошибке компиляции. |
N. | Определение JSF++ | Реализация Polyspace |
---|---|---|
107 | Функции должны всегда объявляться в возможностях файла. | |
108 | Функции с переменным количеством аргументов не должны использоваться. | |
109 | Определение функции не должно помещаться в спецификацию класса, если функция не предназначена для встраивания. | Сообщает, когда «inline» не находится в определении функции представителя внутри определения класса. |
110 | Функции с более чем 7 аргументами не будут использоваться. | |
111 | Функция не должна возвращать указатель или ссылку на нестатический локальный объект. | Обнаружены простые случаи без эффекта псевдонима. |
113 | Функции будут иметь одну выходную точку. | Отчеты сначала возвращаются, или один раз на функцию. |
114 | Все точки выхода функций возврата стоимости должны быть через операторы возврата. | |
116 | Маленькие аргументы конкретного типа (два или три слова в размере) должны передаваться по значению, если изменения, внесенные в формальные параметры, не должны отражаться в функции вызова. | Сообщите о ссылках на постоянные параметры с sizeof <= 2 * sizeof(int) . Не сообщает для copy-constructor. |
117 | Аргументы должны передаваться по ссылке, если значения NULL невозможны:
| Шашка помечает параметр, переданный указателем, если параметр не сравнивается с Шашка не поднимает нарушения:
|
119 | Функции не должны вызываться, прямо или косвенно (т.е. рекурсия не допускается). | Чекер сообщает о каждой функции, которая вызывает себя, прямо или косвенно. Даже если несколько функций участвуют в одном цикле рекурсии, каждая функция сообщается индивидуально. Общее количество циклов рекурсии можно вычислить с помощью метрики сложности кода |
121 | Кандидатами для встроенных функций должны считаться только функции с 1 или 2 операторами. | Сообщает о встроенных функциях с более чем 2 операторами. |
122 | Тривиальные функции доступа и мутатора должны быть встроены. | Чекер использует следующие критерии, чтобы определить, является ли метод тривиальным:
Проверка сообщает о тривиальных методах доступа и мутатора, определенных вне их классов без Проверка не помечает методы шаблона или виртуальные методы. |
N. | Определение JSF++ | Реализация Polyspace |
---|---|---|
126 | Только действительные комментарии стиля C++ (// ) должны использоваться. | |
127 | Код, который не используется (комментируется), должен быть удален. | Чекер использует внутреннюю эвристику, чтобы обнаружить закомментированный код. Для образца такие символы, как Шашка не помечает следующие комментарии, даже если они содержат код:
Чекер считает, что эти комментарии предназначены для целей документации или были внесены преднамеренно с некоторой дальновидностью. |
133 | Каждый исходный файл будет документироваться вступительным комментарием, который содержит информацию о имени файла, его содержимом и любой необходимой для программы информацией (например, юридические операторов, информацию об авторских правах и т.д.). | Сообщает, что файл не начинается с двух строк с комментариями. Примечание.Это правило нельзя аннотировать в исходном коде. |
N. | Определение JSF++ | Реализация Polyspace |
---|---|---|
135 | Идентификаторы во внутренних возможностях не должны использовать то же имя, что и идентификаторы во внешних возможностях, и поэтому скрывать этот идентификатор. | Bug Finder и Code Prover по-разному проверяют это правило кодирования. Анализы могут привести к различным результатам. |
136 | Заявления должны находиться в наименьших допустимых возможностях. | Сообщает, когда:
Примечание
|
137 | Все объявления в области файлов должны быть статическими, где это возможно. | Начиная с R2021a, эта проверка возникает на объявлениях нестатических объектов, которые вы используете только в одном файле. Чекер поднимается, даже если вы анализируете одиночный файл. Проверка не возникает на объявлениях объектов, которые остаются неиспользованными, таких как:
Эта проверка деактивируется в Polyspace по умолчанию при анализе You Code. Смотрите Checkers Deactivated in Polyspace как You Code Default Analysis (Polyspace Bug Finder Access). |
138 | Идентификаторы не должны одновременно иметь как внутреннее так и внешнее редактирование в одном модуле перевода. | |
139 | Внешние объекты не будут объявлены в нескольких файлах. | Сообщает обо всех повторяющихся объявлениях в модуле перевода. Сообщает, что локализация объявления отличается во всех модулях перевода. Эта проверка деактивируется в Polyspace по умолчанию при анализе You Code. Смотрите Checkers Deactivated in Polyspace как You Code Default Analysis (Polyspace Bug Finder Access). |
140 | Спецификатор класса памяти регистров не должен использоваться. | |
141 | Класс, структура или перечисление не будут объявлены в определении его типа. |
N. | Определение JSF++ | Реализация Polyspace |
---|---|---|
142 | Все переменные должны быть инициализированы перед использованием. | Выполнено с Неинициализированными проверками переменных в программном обеспечении. |
144 | Скобки должны использоваться для указания и соответствия структуры в ненулевой инициализации массивов и структур. | Это охватывает частичную инициализацию. |
145 | В списке перечислителей '= 'конструкция не может использоваться для явной инициализации представителей, отличных от первого, если только все элементы не инициализированы явным образом. | Генерирует один отчет для списка перечислителей. |
N. | Определение JSF++ | Реализация Polyspace |
---|---|---|
147 | Базовые битовые представления чисел с плавающей точкой ни в коем случае не должны использоваться программистом. | Отчеты по слепкам с плавающими указателями (кроме void* ). |
148 | Перечисляемые типы должны использоваться вместо целых типов (и констант) для выбора из ограниченной серии вариантов. | Сообщает, когда в коммутаторах используются не перечисляемые типы. |
N. | Определение JSF++ | Реализация Polyspace |
---|---|---|
149 | Восьмиугольные константы (кроме нуля) не должны использоваться. | |
150 | Шестнадцатеричные константы будут представлены с помощью всех заглавных букв. | |
151 | Числовые значения в коде использоваться не будут; вместо этого будут использоваться символические значения. | Сообщает о прямых числовых константах (кроме целого числа/числа с плавающей точкой значения Bug Finder и Code Prover по-разному проверяют это правило кодирования. Анализы могут привести к различным результатам. |
151.1 | Строковый литерал не должен быть изменен. | Флажки проверки правил присваивают строковые литералы:
|
N. | Определение JSF++ | Реализация Polyspace |
---|---|---|
152 | В линии не допускается использование нескольких объявлений переменных. | Сообщает, что два последовательных оператора объявления находятся в одной линии (если только операторы не являются частью определения макроса). |
N. | Определение JSF++ | Реализация Polyspace |
---|---|---|
153 | Объединения не должны использоваться. | |
154 | Битовые поля должны иметь только беззнаковые интегральные или перечисляемые типы. | |
156 | Все представители структуры (или класса) должны быть названы и доступны только через их имена. | Сообщает безымянные битовые поля (неназванные поля не разрешены). |
N. | Определение JSF++ | Реализация Polyspace |
---|---|---|
157 | Операнд правой руки && или || оператор не должен содержать побочных эффектов. | Принимает, что правило 159 не нарушено. Сообщения в файле отчета:
|
158 | Операнды логического | Сообщения в файле отчета:
Исключение для: |
159 | Операторы | Сообщения в файле отчета:
|
160 | Выражение назначения используется только в качестве выражения в операторе выражения. | Только простое назначение, не += , ++ , и т.д. |
162 | Подписанные и неподписанные значения не должны смешиваться в арифметических или сравнительных операциях. | |
163 | Не допускается использование беззнаковой арифметики. | |
164 | Операнд правой руки оператора сдвига должен находиться между нулем и на единицу меньше ширины в битах левого операнда (включительно). | |
164.1 | Левый операнд оператора правой смены не должен иметь отрицательного значения. | Обнаруживает постоянные случаи + . Найдено программным обеспечением для динамических кейсов. |
165 | Оператор унарного минуса не применяется к беззнаковому выражению. | |
166 | The sizeof оператор не будет использоваться для выражений, содержащих побочные эффекты. | |
168 | Оператор запятыми не должен использоваться. |
N. | Определение JSF++ | Реализация Polyspace |
---|---|---|
169 | Указатели на указатели следует избегать, когда это возможно. | Сообщает о указателях второго уровня, кроме аргументов основного. |
170 | Не допускается использование более 2 уровней опосредования указателя. | Отчеты только по переменным/параметрам. |
171 | Реляционные операторы не должны применяться к типам указателей, за исключением тех случаев, когда оба операнда имеют одинаковый тип и указывают на:
| Сообщает, когда реляционный оператор используется для типов указателей (отклонения). |
173 | Адрес объекта с автоматическим хранением не должен быть присвоен объекту, сохраняющемуся после прекращения существования объекта. | |
174 | Указатель null не должен использоваться без ссылок. | Выполнено с программным обеспечением проверки. |
175 | Указатель не должен сравниваться с NULL или быть назначенным NULL ; используйте обычные 0 вместо этого. | Сообщает об использовании NULL макрос в контекстах указателей. |
176 | A | Отчеты не typedef указатели на функции или указатели на представителя функции для типов переменных, полей, параметров. Возвращает тип функции, приведение и спецификацию исключения. |
N. | Определение JSF++ | Реализация Polyspace |
---|---|---|
177 | Следует избегать пользовательских функций преобразования. | Сообщает пользовательскую функцию преобразования, неявный конструктор с одним параметром или значение по умолчанию для других (даже неопределенные таковые). Не сообщает о copy-конструкторе. Дополнительное сообщение для случая конструктора: Этот конструктор должен быть помечен как «явный». |
178 | Литье вниз (отливка от основы до производного класса) допускается только с помощью одного из следующих механизмов:
| Сообщает явное литье вниз, dynamic_cast включено. (Паттер Visitor не имеет специального случая.) |
179 | Указатель на виртуальный базовый класс не должен преобразовываться в указатель на производный класс. | Сообщает об этом конкретном приведении вниз. Позволяет dynamic_cast. |
180 | Неявное преобразование, которое может привести к потере информации, не должно использоваться. | Сообщает о следующих неявных отливках:
Не сообщает для приведения к Bug Finder и Code Prover по-разному проверяют это правило кодирования. Анализы могут привести к различным результатам. |
181 | Избыточные явные отливки не будут использоваться. | Отчеты бесполезный актерский состав: cast T to T . Приведения к эквивалентным typedefs также сообщаются. |
182 | Отливка типов от любого типа к указателям или от указателей не должна использоваться. | Не сообщает, когда применяется правило 181. |
184 | Числа с плавающей точкой не должны преобразовываться в целые числа, если такое преобразование не является заданным алгоритмическим требованием или необходимым для оборудования интерфейса. | Отчеты float->int преобразования. Не сообщает о неявных таковых. |
185 | Стили C++ (const_cast , reinterpret_cast , и static_cast ) должны использоваться вместо традиционных отливок в стиле С. |
N. | Определение JSF++ | Реализация Polyspace |
---|---|---|
186 | Не должно быть недостижимого кода. | Сделано с серыми проверками в программном обеспечении. Bug Finder и Code Prover по-разному проверяют это правило кодирования. Анализы могут привести к различным результатам. |
187 | Все операторы без нуля потенциально должны иметь побочный эффект. | |
188 | Метки не будут использоваться, кроме как в операторах switch. | |
189 | The goto оператор не должно использоваться. | |
190 | The continue оператор не должно использоваться. | |
191 | The break оператор не должен использоваться (кроме как для прекращения использования оператора switch). | |
192 | Все if , else if конструкции будут содержать либо окончательное else пункт или комментарий, указывающий, почему окончательное else пункт не является необходимым. | else if должен содержать else пункт. |
193 | Каждый непустой case пункт в операторе switch должен быть завершен break оператор. | |
194 | Все switch операторы, которые не намерены проверять на каждое значение перечисления, должны содержать окончательное default пункт. | Отчеты только для отсутствующих default . |
195 | A switch выражение не будет представлять логическое значение. | |
196 | Каждый switch оператор будет иметь как минимум два случая и потенциальный default . | |
197 | Переменные с плавающей точкой не должны использоваться в качестве счетчиков цикла. | Принимает параметр 1 цикла. |
198 | Выражение инициализации в for цикл не будет выполнять никаких действий, кроме инициализации значения одной for параметр цикла. | Сообщает, если loop параметр не может быть определен. Предполагает, что правило 200 не нарушено. The loop variable параметр принимается как переменная. |
199 | Выражение с шагом в for цикл не будет выполнять никаких действий, кроме изменения параметра одного цикла на следующее значение для цикла. | Принимает параметр 1 цикла (Правило 198), с типом, отличным от класса. Правило 200 не должно нарушаться, чтобы об этом правиле сообщалось. |
200 | Ядро инициализирует или увеличивает выражения в for циклы не будут использоваться; a while вместо этого будет использоваться цикл. | |
201 | Числовые переменные, используемые в цикле for для подсчета итерации, не должны изменяться в теле цикла. | Принимает 1 параметр цикла (AV правило 198), и никакие псевдонимы не записываются. |
N. | Определение JSF++ | Реализация Polyspace |
---|---|---|
202 | Переменные с плавающей точкой не должны проверяться на точное равенство или неравенство. | Сообщает только о прямом равенстве/неравенстве. Проверка выполнена для всех выражений. |
203 | Оценка выражений не должна приводить к переполнению/подтоку. | Выполнено с проверками переполнения в программном обеспечении. |
204 | Одна операция с побочными эффектами должна использоваться только в следующих контекстах:
| Сообщает, когда:
|
204.1 | Значение выражения должно быть тем же самым в любом порядке оценки, который позволяет стандарт. | Сообщает, когда:
Примечание Операции чтения и записи, такие как++, рассматриваются только как запись. |
205 | Недопустимое ключевое слово не должно использоваться, если нет прямого взаимодействия с оборудованием. | Сообщает, используется ли изменчивое ключевое слово. |
N. | Определение JSF++ | Реализация Polyspace |
---|---|---|
206 | Выделение/изъятие из/в свободное хранилище (кучу) не должно происходить после инициализации. | Сообщает о вызовах функций библиотеки C: malloc / calloc / realloc / free и все new/delete операторов в функциях или методах. |
N. | Определение JSF++ | Реализация Polyspace |
---|---|---|
208 | Исключения C++ не должны использоваться. | Отчеты try , catch , throw spec , и throw . |
N. | Определение JSF++ | Реализация Polyspace |
---|---|---|
209 | Основные типы | Позволяет использовать только основные типы через прямые typedefs . |
213 | Никакая зависимость не должна быть помещена в выражениях в правилах приоритета оператора C++, ниже арифметических операторов. | Сообщает, что двоичная операция имеет один операнд, который не имеет круглых скобок и является операцией с низким уровнем приоритета. Сообщает побитовые и сдвигает операторы, которые используются без круглых скобок и аргументов бинарной операции. |
215 | Арифметика указателя не будет использоваться. | Отчеты: Позволяет |
N. | Определение JSF++ |
---|---|
2 | Не должно быть никакого самомодифицирующего кода. |
N. | Определение JSF++ |
---|---|
4 | Чтобы нарушить правило «should», разработчик должен получить следующее одобрение:
|
5 | Чтобы нарушить правило «завещание» или «должен», разработчик должен получить следующие разрешения:
|
6 | Каждое отклонение от правила «должен» должно быть задокументировано в файле, содержащем отклонение. Отклонения от этого правила не допускаются, несмотря на правило 5 AV. |
7 | Утверждение не требуется для отклонения от правила «должен» или «будет», которое соответствует исключению, указанному в этом правиле. |
N. | Определение JSF++ |
---|---|
10 | Значения типов символов будут ограничены определенным и документированным подмножеством ISO 10646 1. |
N. | Определение JSF++ |
---|---|
16 | С критическим для безопасности кодом (например, SEAL 1) должны использоваться только библиотеки DO-178B уровня А [15] или SEAL 1 C/C + +. |
N. | Определение JSF++ |
---|---|
34 | Заголовочные файлы должны содержать только логически связанные объявления. |
36 | Зависимости компиляции должны быть минимизированы, когда это возможно. |
37 | Файлы заголовка (include) должны включать только те файлы заголовка, которые требуются для их успешной компиляции. Файлы, которые используются только связанным файлом .cpp, должны помещаться в файл .cpp, а не в файл .h. |
38 | Объявления классов, доступ к которым осуществляется только через указатели (*) или ссылки (&), должны предоставляться прямыми заголовками, которые содержат только прямое объявление. |
N. | Определение JSF++ |
---|---|
45 | Все слова в идентификаторе будут разделены символом «_». |
49 | Все аббревиатуры в идентификаторе будут состоять из заглавных букв. |
55 | Имя файла заголовка должно отражать логическую сущность, для которого он предоставляет объявления. |
56 | Имя файла реализации должно отражать логическую сущность, для которого он предоставляет определения, и иметь расширение. «cpp» (это имя обычно будет идентично файлу заголовка, который предоставляет соответствующие объявления). Иногда для данная логическая сущность требуется более одного файла .cpp. В этих случаях следует добавить суффикс, чтобы отразить логическую дифференциацию. |
N. | Определение JSF++ |
---|---|
64 | Интерфейс класса должен быть полным и минимальным. |
65 | Структура должна использоваться, чтобы смоделировать сущность, который не требует инварианта. |
66 | Класс должен использоваться, чтобы смоделировать сущность, который поддерживает инвариант. |
69 | Функция представителя, которая не влияет на состояние объекта (его переменные образцы), будет объявлена const. Представители функции должны быть const по умолчанию. Только когда существует ясная, явная причина, должен быть опущен модификатор const на представителя функциях. |
70 | У класса будут друзья, только когда функция или объект требует доступа к частным элементам класса, но не может быть представителем класса по логическим причинам или причинам эффективности. |
70.1 | Объект не должен использоваться ненадлежащим образом до начала его жизни или после окончания его жизни. |
71 | Вызовы видимой извне операции объекта, кроме его конструкторов, не допускаются до тех пор, пока объект не будет полностью инициализирован. |
72 | Инвариант для класса должен быть:
|
73 | Ненужные конструкторы по умолчанию не должны быть определены. |
77 | Конструктор копирования должен скопировать все представители данных и основ, которые влияют на инвариант класса (элемент данных, представляющий кэш, например, не должен быть скопирован). |
80 | Операторы копирования и назначения по умолчанию будут использоваться для классов, когда эти операторы предлагают разумную семантику. |
84 | Перегрузка операторов будет использоваться экономно и обычным способом. |
85 | Когда два оператора являются противоположными (такими как = = и! =), оба будут определены, а один будет определен в терминах другого. |
86 | Конкретные типы должны использоваться для представления простых независимых концепций. |
87 | Иерархии должны основываться на абстрактных классах. |
90 | Широко используемые интерфейсы должны быть минимальными, общими и абстрактными. |
91 | Публичное наследование будет использоваться для реализации отношений «is-a». |
92 | Подтип (публично выведенные классы) будет соответствовать следующим рекомендациям в отношении всех классов, участвующих в полиморфном присвоении различных образцов подкласса одной и той же переменной или параметру во время выполнения системы:
Другими словами, методы подкласса должны ожидать меньше и доставлять больше, чем методы базового класса, которые они переопределяют. Это правило подразумевает, что подтипы будут соответствовать Принципу Замещения Лискова. |
93 | отношения «имеет-а» или «реализовано-реализовано-в-терминах» будут моделироваться членством или непопулярным наследованием. |
N. | Определение JSF++ |
---|---|
100 | Элементы из пространства имен должны быть выбраны следующим образом:
|
N. | Определение JSF++ |
---|---|
101 | Шаблоны должны быть рассмотрены следующим образом:
|
102 | Испытания шаблона должны быть созданы, чтобы охватить все фактические экземпляры шаблона. |
103 | Проверки ограничений должны применяться к аргументам шаблона. |
105 | Зависимость определения шаблона от контекстов экземпляра должна быть минимизирована. |
106 | При необходимости должны быть сделаны специализации для типов указателей. |
N. | Определение JSF++ |
---|---|
112 | Значения возврата функций не должны затенять владение ресурсами. |
115 | Если функция возвращает информацию об ошибке, эта информация об ошибке будет проверена. |
118 | Аргументы должны передаваться через указатели, если возможны значения NULL:
|
120 | Перегруженные операции или методы должны образовывать семейства, которые используют ту же семантику, имеют то же имя, ту же цель и которые дифференцируются формальными параметрами. |
123 | Количество функций доступа и мутатора должно быть сведено к минимуму. |
124 | Должны быть встроены функции тривиальной переадресации. |
125 | Следует избегать ненужных временных объектов. |
N. | Определение JSF++ |
---|---|
128 | Комментарии, которые не допускаются к документированию действий или источников (например, таблиц, рисунков, абзацев и т.д.) вне документируемого файла. |
129 | Комментарии в файлах заголовков должны описывать внешне видимое поведение задокументированных функций или классов. |
130 | Цель каждой строки исполняемого кода должна объясняться комментарием, хотя один комментарий может описать более чем одну строку кода. |
131 | Следует избегать в комментариях того, что лучше заявлено в коде (т.е. не просто повторять то, что есть в коде). |
132 | Каждое объявление переменной, typedef, значение перечисления и представитель структуры будут замечены. |
134 | Допущения (ограничения), сделанные функциями, должны быть задокументированы в преамбуле функции. |
N. | Определение JSF++ |
---|---|
143 | Переменные не будут введены, пока их можно будет инициализировать значимыми значениями. (См. также AV Rule 136, AV Rule 142 и AV Rule 73, касающиеся возможностей, инициализации перед использованием и конструкторов по умолчанию соответственно.) |
N. | Определение JSF++ |
---|---|
146 | Реализации с плавающей точкой должны соответствовать определенному стандарту с плавающей точкой. Стандартом, который будет использоваться, является ANSI®/ IEEE® Стд 754 [1]. |
N. | Определение JSF++ |
---|---|
155 | Битовые поля не будут использоваться для упаковки данных в слово с единственной целью экономии пространства. |
N. | Определение JSF++ |
---|---|
167 | Реализация целочисленного деления в выбранном компиляторе определяется, документируется и учитывается. |
N. | Определение JSF++ |
---|---|
183 | Необходимо принять все возможные меры, чтобы избежать отливки типа. |
N. | Определение JSF++ |
---|---|
204 | Одна операция с побочными эффектами должна использоваться только в следующих контекстах:
|
N. | Определение JSF++ |
---|---|
207 | Следует избегать использования неинкапсулированных глобальных данных. |
N. | Определение JSF++ |
---|---|
210 | Алгоритмы не должны делать допущения относительно того, как данные представлены в памяти (например, большой энд по сравнению с маленьким эндом, упорядоченное расположение подобъектов базового класса в производных классах, нестатическое упорядоченное расположение представителей данных между спецификаторами доступа и т.д.). |
210.1 | Алгоритмы не должны делать допущения относительно порядка распределения нестатических представителей данных, разделенных спецификатором доступа. |
211 | Алгоритмы не должны принимать, что шорты, ints, lons, floats, double или длинные double начинаются по конкретным адресам. |
212 | Функционирование подземного или переливного потока не должно зависеть каким-либо особым образом. |
214 | Принимая, что нелокальные статические объекты, в отдельных модулях преобразования, инициализированы в специальном порядке не должны быть сделаны. |
N. | Определение JSF++ |
---|---|
216 | Программисты не должны пытаться преждевременно оптимизировать код. |
N. | Определение JSF++ |
---|---|
217 | Ошибки во время компиляции и во время соединения должны быть предпочтительнее, чем ошибки времени выполнения. |
218 | Уровни предупреждений компилятора будут установлены в соответствии с политиками проекта. |
N. | Определение JSF++ |
---|---|
219 | Все тесты, применяемые к интерфейсу базового класса, должны применяться также ко всем производным интерфейсам классов. Если производный класс представляет более сильные постконденсации/инварианты, то новые постконденсации/инварианты должны быть заменены в производных классовых тестах. |
220 | Алгоритмы структурного покрытия должны применяться к сглаженным классам. |
221 | Структурное покрытие класса в пределах иерархии наследования, содержащей виртуальные функции, должно включать проверку каждого возможного разрешения для каждого набора идентичных полиморфных ссылок. |