ГОСТ Р МЭК 61508-7—2012
Продолжение таблицы
Требования и рекомендации
М Э К 61508-3
Указания стандартов кодирования
Верифицируемость и тестиру
емость:
- способствовать верифика
ции и тестированию (7.4.4.13);
- способствовать обнаруже
нию ошибок при проектиро
вании или программировании
(7.4.4.10):
- формальная верификация
(таблица А.5-Э);
- формальное доказательство
(таблица А.9-1)
- окружения для «критических» библиотечных функций для проверки
пред/постусловий;
- стимулы для того, чтобы использовать функции языка, которые могут
выразить ограничения на использование определенных элементов данных
или функций (например констант);
- для инструментов, поддерживающих верификацию: правила выполнения
ограничений для выбранных инструментов (если это не вредит более суще
ственным цепям);
- ограниченное использование рекурсии (таблица В. 1-6) и другие формы
циклических зависимостей.
(См. также модульный подход.)
Статическая верификация со
ответствия специфицирован
ному проекту (7.9.2.12)
Указания по кодированию для реализации специфицированных в проекте
концепций или ограничений. Например:
- указания по кодированию циклов с гарантируемым максимальным значени
ем времени цикла (таблица А.2-1За);
- указания по кодированию архитектуры с временным распределением (та
блица А.2-1ЗЬ):
- указания по кодированию архитектуры, управляемой событиями, с гаранти
руемым максимальным временем ответа (таблица А.2-1Зс);
- циклы со статически определенным максимальным числом итераций
(за исключением бесконечного цикла, предусмотренного в проекте);
- указания по кодированию статического распределения ресурсов (табли
ца А.2-14) и предотвращение динамических объектов (таблица В.1-2):
- указания по кодированию статической синхронизации доступа к совместно
используемым ресурсам (таблицаА.2-15);
- указания по кодированию, по соблюдению ограничений на использование
прерываний (таблица В.1-4);
- указания по кодированию, чтобы не использовать динамические перемен
ные (таблица В.1-За);
- проверка установки динамических переменных в неавтономном режиме
(таблица В.1-ЗЬ);
указания по кодированию, чтобы гарантировать совместимость с другими
используемыми языками программирования (7.4.4.10).
Указания, способствующие отслеживаемости проекта
Подмножество языков (табли
ца А.3-3):
- запрет опасных функций
языка (7.4.4.13):
- использование только
определенных функций языка
(7.4.4.10):
- структурное программирова
ние (таблица А.4-6).
- строго типизированный язык
программирования (табли
ца А.3-2);
- отсутствие автоматического
преобразования типов (табли
ца В.1-8)
Исключение функций языка, приводящих к неструктурированным проектам.
Например:
- ограниченное использование указателей (таблица В.1-5),
- ограниченное использование рекурсии (таблица В. 1-6).
- ограниченное использование объединений подобных в С:
- ограниченное использование исключений, подобных в Ada или C++.
- неиспользование неструктурированного потока управления в программах
на языках высокого уровня (таблица В. 1-7).
- одна точка входа/одна точка выхода в подпрограммах и функциях (табли
ца В.9-5):
- неиспользование автоматического преобразования типов;
- ограниченное использование побочных эффектов, сигнатур функций (на
пример статических переменных).
Не допускать побочные эффекты в оценке условий и во всех формах утверж
дений.
Ограниченное или только документально оформленное использование
специфичных для компилятора функций.
Ограниченное использование конструкций языка, которые могут ввести в за
блуждение.
Должны применяться правила, когда эти возможности языка тем не менее
используются
41