В процессе кодирования ПО на основании архитектуры ПО и требований нижнего уровня создают исходный код.
Разработчик должен разработать и зарегистрировать исходный код ПО, соответствующий каждому модулю ПО в проекте ЭКПО. Реализация ПО должна включать в себя, если это применимо, кодирование машинных команд и определение данных, создание базы данных, заполнение базы данных и других файлов данных значениями данных, а также другие работы, необходимые для реализации проекта. Если для кодирования поставляемого ПО предполагается использовать язык программирования, отличный от указанного в контракте, разработчик должен получить одобрение заказчика на использование этого языка.
7.3.1 Цели процесса кодирования ПО
Цели процесса кодирования ПО состоят в том, чтобы разработать исходный код, который должен быть прослеживаемым, верифицируемым, непротиворечивым и корректно реализующим требования нижнего уровня.
7.3.2 Состав работ, выполняемых в процессе кодирования ПО
Входными данными процесса кодирования ПО являются требования нижнего уровня, архитектура ПО, План разработки ПО и стандарты кодирования ПО. Когда указанные в плане критерии перехода удовлетворены, может быть осуществлен первичный или повторный переход к процессу кодирования ПО. Исходный код, полученный при выполнении этого процесса, базируется на архитектуре ПО и требованиях нижнего уровня. Результат этого процесса — исходный код (12.19) и объектный код. Процесс кодирования ПО является завершенным, когда реализованы все его цели и цели интегральных процессов, связанных с ним. Требования для этого процесса следующие:
— исходный код должен реализовать требования нижнего уровня и соответствовать архитектуре ПО;
— исходный код должен соответствовать стандартам кодирования ПО;
— исходный код должен быть трассируемым к описанию проекта;
— для неадекватных или некорректных входных данных, обнаруженных при выполнении процесса кодирования ПО, необходимо обеспечить обратную связь с процессами определения требований к ПО, проектирования ПО или планирования ПО для исследования или исправления.
7.4 Процесс интеграции
Объектный компьютер, исходный код и объектный код, полученные в процессе кодирования ПО, используют при редактировании связей и загрузке с целью создать интегрированную систему.
7.4.1 Цели процесса интеграции
Цели процесса интеграции состоят в получении интегрированной системы.
7.4.2 Состав работ, выполняемых в процессе интеграции
После того как указанные в Плане разработки ПО критерии перехода будут удовлетворены, может быть осуществлен первичный или повторный переход к процессу интеграции. Входными данными процесса интеграции являются описание архитектуры ПО из процесса проектирования ПО, а также исходный и объектный код из процесса кодирования ПО.
Выходной результат процесса интеграции — исполняемый объектный код, описанный в 12.20, и информация о редактировании связей и загрузке. Процесс интеграции является завершенным, когда удовлетворены его цели и цели интегральных процессов, связанных с ним. Требования для этого процесса:
— исполняемый объектный код должен быть генерирован на основе исходного кода и информации о редактировании связей и загрузке;
— ПО должно быть загружено в объектный компьютер для интеграции аппаратных средств и ПО;
— для неадекватных или некорректных входных данных, обнаруженных в процессе интеграции, необходимо обеспечить обратную связь с процессами определения требований к ПО, проектирования ПО, кодирования ПО или планирования ПО для исследования или исправления.
7.4.3 Дополнительные задачи интеграции
Далее рассмотрены задачи, связанные с отключенным кодом и заплатами в ПО. Управляющая система или оборудование могут быть предназначены для включения нескольких вариантов конфигураций, не все из которых предназначены для использования в каждом приложении. Это может привести к появлению отключенного кода, который может быть не выполнен, или данных, которые могут быть не использованы. Такой код отличается от мертвого кода, который определен в разделе 3 и объяснен в 8.4.4. Требования для отключенного кода и заплат следующие:
— должно быть приведено доказательство того, что отключенный код заблокирован для среды, где его использование не предусмотрено. Непреднамеренную активацию отключенного кода, возникающую в аварийных ситуациях системы, следует рассматривать также как непреднамеренную активацию обычного активизированного кода;
— должны быть использованы методы работы с отключенным кодом в соответствии с планами ПО;
— нельзя использовать заплаты в ПО, предназначенном для поставки в сертифицируемый объект, для выполнения изменения в требованиях или архитектуре, или изменений, оказавшихся необходимыми в результате работ процесса верификации ПО. Заплаты следует использовать в ограниченных случаях, например, чтобы устранить замеченные неточности среды программирования, типа обнаружения ошибки компилятора и др.;
— при использовании заплаты необходимо подтвердить, что процесс управления конфигурацией ПО может эффективно прослеживать эту заплату; провести регрессионный анализ для доказательства того, что включение заплаты удовлетворяет всем требованиям к ПО, разработанному с помощью обычных методов; обосновать использование заплаты в Итоговом документе разработки ПО.
7.5 Трассируемость
Требования трассируем ости включают в себя обеспечение соответствия:
— между системными требованиями и требованиями к ПО, чтобы гарантировать полноту реализации системных требований и видимость производных требований;
— между требованиями нижнего уровня и требованиями верхнего уровня, чтобы гарантировать полноту реализации требований верхнего уровня и видимость производных требований и архитектурных решений, принятых при выполнении процесса проектирования ПО;
— между исходным кодом и требованиями нижнего уровня, чтобы верифицировать отсутствие неописанного исходного кода и полноту реализации требований нижнего уровня.
8 Процесс верификации ПО
Верификация ПО обеспечивает техническую оценку всех средств разработки ПО, в том числе и результатов верификации ПО. Верификацию ПО выполняют в соответствии с Планом верификации ПО (12.3) и Планом квалификационного тестирования ПО (12.4), которые разрабатывают в процессе планирования ПО.
Таблицы А.З — А.7 содержат резюме целей и результатов верификации в зависимости от уровня ПО.
Примечание — Чем ниже уровень ПО, тем меньше внимания уделяют:
— верификации требований нижнего уровня;
— верификации архитектуры ПО;
— полноте покрытия тестами;
— контролю процедур верификации;
— независимости работ процесса верификации ПО;
— перекрытию работ процесса верификации ПО, т. е. выполнению различных верификационных работ, каждая из которых обнаруживает ошибки одного и того же класса;
— тестированию отказоустойчивости;
— верификационным работам, обнаруживающим ошибки, которые оказывают лишь косвенное влияние на результаты разработки, например отклонение от стандартов разработки ПО.
8.1 Цели верификации ПО
Назначение верификации ПО состоит в том, чтобы обнаружить и зарегистрировать ошибки, которые могли быть внесены в ПО во время его разработки (устранение ошибок является задачей разработки ПО). Основное назначение верификации ПО — проверить что:
— системные требования, предназначенные для программной реализации, были должным образом переработаны в требования верхнего уровня к ПО, которые удовлетворяют этим системным требованиям;
— требования верхнего уровня были переработаны в архитектуру ПО и требования нижнего уровня, которые удовлетворяют требованиям верхнего уровня; если разработано несколько уровней требований к ПО между требованиями верхнего уровня и требованиями нижнего уровня, то каждый последующий уровень требований разработан так, чтобы удовлетворять требованиям более высокого уровня;
— архитектура ПО и требования нижнего уровня должным образом преобразованы в исходный код, удовлетворяющий им;
— исполняемый объектный код удовлетворяет требованиям к ПО;
— инструментальные средства, используемые для выполнения указанных работ, являются технически корректными и полными для заданного уровня ПО.
8.2 Состав работ, выполняемых в процессе верификации ПО
Цели верификации ПО должны быть достигнуты посредством выполнения комбинации просмотров, анализов, разработки тестовых наборов и процедур и последующего выполнения этих тестовых процедур. Просмотры и анализы обеспечивают оценку точности, полноты и верифицируем ости требований к ПО, архитектуры ПО и исходного кода. Разработка тестовых наборов должна обеспечивать дальнейшую оценку внутренней непротиворечивости и полноты требований. Выполнение тестовых процедур обеспечивает демонстрацию соответствия требованиям.
Входная информация для процесса верификации ПО включает в себя системные требования, требования к ПО, описание архитектуры, данные о трассируемости, исходный код, исполняемый объектный код, План верификации ПО, План квалификационного тестирования ПО.
Выходные результаты верификации ПО должны быть включены в документы «Процедуры верификации ПО» (12.21), «Результаты верификации ПО» (12.23), «Описание квалификационного тестирования ПО» (12.22), «Отчет о квалификационном тестировании ПО» (12.24).
8.3 Просмотры и анализы ПО
Просмотры и анализы ПО применяют к результатам процессов разработки и верификации ПО. Различия между просмотрами и анализами заключаются в том, что анализ дает воспроизводимое доказательство, а просмотр предоставляет качественную (экспертную) оценку. Просмотр может включать в себя инспекцию выходных результатов указанных процессов, использующую контрольные листы или другие подобные средства. Анализ может заключаться в детальном исследовании функциональности, эффективности и безопасности компонентов ПО, а также их связи с другими компонентами системы или с оборудованием.
8.3.1 Просмотры и анализы требований верхнего уровня
Цель этих просмотров и анализов — обнаружить и зарегистрировать ошибки, которые могли быть внесены в процессе разработки требований к ПО. Данные просмотры и анализы должны подтвердить, что требования верхнего уровня удовлетворяют следующим целям:
а) согласованность с системными требованиями: гарантировать, что функции системы, которые должно выполнять ПО, определены, что требования по функциональности, эффективности и требования, связанные с безопасностью системы, удовлетворены в требованиях верхнего уровня к ПО и что правильно определены производные требования и обоснована их необходимость;
б) точность и непротиворечивость: гарантировать, что каждое требование верхнего уровня является точным, однозначным и достаточно детализированным и что требования не противоречат друг другу;
в) совместимость с объектным компьютером: гарантировать, что не существует никаких противоречий между требованиями верхнего уровня и возможностями аппаратных/программных средств объектного вычислителя, особенно такими, как время реакции системы и аппаратура ввода/вывода;
г) верифицируемость: гарантировать, что каждое требование верхнего уровня может быть верифицировано;
д) соответствие стандартам: гарантировать, что процесс разработки требований к ПО полностью соответствует стандартам на разработку требований и обоснованы любые отклонения от данных стандартов;
е) трассируемость: гарантировать, что функциональные системные требования, требования по эффективности и требования к безопасности системы, предназначенные для программной реализации, были включены в требования верхнего уровня;
ж) алгоритмические аспекты: гарантировать точность и корректность поведения предложенных алгоритмов, особенно в областях отсутствия непрерывности.
8.3.2 Просмотры и анализы архитектуры ПО
Цель этих просмотров и анализов — обнаружить и зарегистрировать ошибки, которые могли быть внесены во время разработки архитектуры ПО. Данные просмотры и анализы должны подтвердить, что архитектура ПО соответствует следующим требованиям:
а) согласованность с требованиями верхнего уровня: гарантировать, что архитектура ПО не находится в противоречии с требованиями верхнего уровня, особенно те функции, которые гарантируют целостность системы, например схемы разбиения;
б) непротиворечивость: гарантировать, что существует корректная связь между компонентами архитектуры ПО, осуществляемая через потоки данных и поток управления;
в) совместимость с объектным компьютером: гарантировать, что не существует никаких противоречий между архитектурой ПО и программно-аппаратными возможностями объектного компьютера, особенно такими, как инициализация, асинхронные операции, синхронизация и прерывания;
г) верифицируемость: гарантировать, что архитектура ПО может быть верифицирована, например не существует неограниченных рекурсивных алгоритмов;
д) соответствие стандартам: гарантировать, что процесс проектирования ПО полностью соответствовал стандартам на процесс проектирования ПО и отклонения от этих стандартов обоснованы, особенно ограничения сложности и использования конструкций проекта, которые не согласуются с задачами безопасности системы;
е) целостность разбиения: гарантировать, что будут предотвращены или изолированы любые нарушения в декомпозиции.
8.3.3 Просмотры и анализы требований нижнего уровня
Цель этих просмотров и анализов — обнаружить и зарегистрировать ошибки, которые могли быть внесены в процессе проектирования ПО. Эти просмотры и анализы должны подтвердить, что требования нижнего уровня удовлетворяют следующим целям:
а) согласованность с требованиями верхнего уровня: гарантировать, что требования нижнего уровня к ПО удовлетворяют требованиям верхнего уровня к ПО, что формируемые требования правильно определены и обоснована их необходимость;
б) точность и непротиворечивость: гарантировать, что каждое требование нижнего уровня является точным, однозначным и достаточно детализированным и что требования нижнего уровня не противоречат друг другу;
в) совместимость с объектным компьютером: гарантировать, что не существует никаких противоречий между требованиями к ПО и возможностями аппаратных и программных средств объектного компьютера, особенно по использованию ресурсов (таких, как загрузка шины, время реакции системы и аппаратуры ввода/вывода);
г) верифицируемость: гарантировать, что каждое требование нижнего уровня может быть верифицировано;
д) соответствие стандартам: гарантировать, что процесс проектирования ПО полностью соответствует стандартам на процесс проектирования ПО и что отклонения от этих стандартов обоснованы;
е) трассируемость: гарантировать, что требования верхнего уровня и производные требования были реализованы в требованиях нижнего уровня;
ж) алгоритмические аспекты: гарантировать точность и корректность поведения предложенных алгоритмов, особенно в областях отсутствия непрерывности.
8.3.4 Просмотры и анализы исходного кода
Цель этих просмотров и анализов — выявление и регистрация ошибок, которые могли быть внесены в процессе кодирования ПО. Эти просмотры и анализы подтверждают, что выходные результаты кодирования являются точными, полными и могут быть верифицированы. Прежде всего проверяют корректность кода по отношению к требованиям к ПО и архитектуре ПО и соответствие стандартам на кодирование. Эти просмотры и анализы обычно ограничиваются исходным кодом. На данном этапе необходимо показать:
а) согласованность с требованиями нижнего уровня: гарантировать, что исходный код является корректным, полным и соответствует требованиям нижнего уровня, а также то, что исходный код не содержит неописанных функций;
б) согласованность с архитектурой ПО: гарантировать, что исходный код соответствует потоку данных и потоку управления, которые определены архитектурой ПО;
в) верифицируемость: гарантировать, что исходный код не содержит операторов и структур, которые не могут быть верифицированы, и что код не подвергался изменениям в целях тестирования;
г) соответствие стандартам: гарантировать, что процесс разработки кода ПО полностью соответствует стандартам кодирования ПО и отклонения от этих стандартов обоснованы, особенно в случаях ограничения сложности и использования конструкций кода, предназначенных для удовлетворения целей безопасности системы (сложность в данном контексте — степень связности программных компонентов, уровень вложенности управляющих структур и сложность логических или числовых выражений); этот анализ также должен гарантировать, что отклонения от стандартов оправданы;
д) трассируемость: гарантировать, что требования нижнего уровня к ПО были воплощены в исходный код;
е) точность и непротиворечивость: гарантировать правильность и непротиворечивость исходного кода, включая реализацию стеков, переполнение и разрешающую способность для арифметики с фиксированной точкой, конкуренцию ресурсов, синхронизацию выполнения самых сложных случаев, обработку особых ситуаций, использование неинициализированных переменных или констант, неиспользуемые переменные или константы и нарушения целостности данных из-за конфликтов прерываний или задач.
8.3.5 Просмотры и анализы выходных результатов процесса интеграции
Цель этих просмотров и анализов — гарантировать, что результаты процесса интеграции ЭКПО являются полными и корректными. Это может быть выполнено путем детального исследования информации о редактировании связей, загрузке и картах памяти. Должны быть проконтролированы и исключены:
— неправильные аппаратные адреса;
— перекрытия памяти;
— отсутствующие компоненты ПО.
8.3.6 Просмотры и анализы тестовых вариантов, процедур и результатов
Цель этих просмотров и анализов — гарантировать, что тестирование кода было разработано и выполнено точно и полностью. Должны быть рассмотрены следующие вопросы:
а) тестовые варианты: верификация тестовых вариантов представлена в 8.4.4;
б) тестовые процедуры: проверить, что тестовые варианты правильно представлены в процедурах тестирования и ожидаемых результатах;
в) результаты тестирования: гарантировать, что результаты тестирования корректны и что расхождения между фактическими и ожидаемыми результатами объяснимы.