ГОСТР 53195.5—2010
Описание: язык программирования должен быть полностью и однозначно определен. Язык должен быть
ориентирован на пользователя или задачу, а не на процессор или платформу. Широко используемые языки
программирования или их подмножества должны быть предпочтительнее языков специального применения.
Языки программирования также должны обеспечивать:
- блоковую структуру организации программ:
- проверку времени трансляции:
- проверку типа и границы массива во время выполнения программы.
Язык программирования должен обеспечивать:
- использование небольших и управляемых программных модулей:
- ограничение доступа к данным в конкретных программных модулях:
- определение поддиапазонов переменных:
- любые другие виды конструкций, ограничивающих ошибки.
Если действия системы по обеспечению безопасности зависят от ограничений реального времени, то язык
программирования должен обеспечивать также обработку исключений и/или прерываний.
Желательно, чтобы язык программирования обеспечивался соответствующим транслятором, подходящи
ми библиотеками с заранее созданными программными модулями, отладчиком и инструментами для управле
ния и разработки.
В настоящее время еще не ясно, будут ли объектно-ориентированные языки программирования предпоч
тительнее других общепринятых языков.
К свойствам, которые усложняют верификацию и поэтому должны быть исключены, относятся:
- безусловные переходы (за исключением вызовов подпрограмм);
- рекурсии;
- указатели, динамически распределяемые области памяти или любые типы динамических переменных
или обьектов;
- обработка прерываний на уровне исходного кода;
- множественность входов или выходов в циклах, блоках или подпрограммах;
- инициализация или декларация неявных переменных;
- вариантные записи и эквивалентность:
- процедурные параметры.
Языки программирования низкого уровня, в частности ассемблеры, обладают недостатками, связанными
с их жесткой ориентацией на процессор машины или на определенную платформу.
Желательным свойством языка программирования является его пригодность к созданию программ, вы
полнение которых предсказуемо. Если используется подходящий конкретный язык программирования, то в нем
должно существовать подмножество, которое гарантирует, что выполнение программы предсказуемо. Это под
множество не может быть (в общем случае) статически определено, несмотря на то что многие статические
ограничения помогают гарантировать предсказуемое выполнение. Обычно это может потребовать демонстра
цию того, что индексы массива находятся в установленных пределах и что числовое переполнение не может
возникнуть, и т. п.
Рекомендации по применению некоторых языков программирования приведены в таблице В.З. Обозначе
ния рангов применимости языков программирования следующие:
КР (HR) — крайне рекомендуемый для данного уровня полноты безопасности. Если его не используют,
то на этапе планирования должно быть дано подробное обоснование отказа от его применения, согласованное
с экспертом:
Р (R) — рекомендуемый для данного уровня полноты безопасности. Степень обязательности его приме
нения ниже, чем в случае рекомендации КР (HR);
- — отсутствие рекомендаций по применению или неприменению;
HP (NR) — нерекомендуемый к применению для данного уровня полноты безопасности. Если его применя
ют. то на стадии планирования должно быть приведено подробное обоснование его применения, согласованное
с экспертом.
Т а б л и ц а В.З — Рекомендации по применению языков программирования
языка программирования
Наименование, обозначение
Ранг применимости языка дпя
SIL1SL2Stt.3SIL4
1ADA
КР (HR)КР (HR)
P(R)
P(R)
2 ADA с подмножеством
КР (HR)КР (HR)
КР (HR)KP (HR)
3 MODULA-2
КР (HR)КР (HR)
P(R>
P(R)
4 MODULA с подмножеством
КР (HR)КР (HR)
KP (HR)KP (HR)
55