Согласно РД НДВ для оценки программного обеспечение на наличие НДВ осуществляется ряд проверок (их число изменяется в зависимости от уровня классификации). Часть из них может быть выполнена только вручную – т.н. путем экспертного анализа. Многие же возможно автоматизировать – это серьезно ускоряет процесс проведения сертификационных испытаний.
Основные проверки, которые проводятся с помощью программных средств, следующие:
- Контроль полноты и отсутствия избыточности исходных текстов
- Контроль соответствия исходных текстов ПО его объектному (загрузочному) коду
- Контроль связей функциональных объектов по управлению
- Контроль связей функциональных объектов по информации
- Контроль информационных объектов
- Контроль наличия заданных конструкций в исходных текстах
- Формирование перечня маршрутов выполнения функциональных объектов
- Анализ критических маршрутов выполнения функциональных объектов
- Анализ алгоритма работы функциональных объектов на основе блок-схем, диаграмм и т. п., построенных по исходным текстам контролируемого ПО
- Контроль выполнения функциональных объектов
- Сопоставление фактических маршрутов выполнения функциональных объектов и маршрутов, построенных в процессе проведения статического анализа
Остальные проверки осуществляются преимущественно путем экспертного анализа.
1.Контроль полноты и отсутствия избыточности исходных текстов
Данное требование подразумевает следующие проверки:
1.1.Контроль полноты исходных текстов на уровне файлов
Контроль осуществляется путем экспертного анализа – эксперт сравнивает список файлов, представленных в документации со списком файлов, предоставленных к проверке. В случае отсутствия хотя бы одного файла в предоставленных к проверке, данное требование считается не выполненным.
1.2.Контроль полноты исходных текстов на уровне функциональных объектов
Контроль осуществляется путем компиляции исходных текстов программ, в случае неудачной компиляции из-за отсутствующих функциональных объектов, данное требование считается не выполненным.
1.3.Контроль отсутствия избыточности на уровне файлов
Контроль осуществляется путем экспертного анализа – эксперт сравнивает список файлов, представленных в документации со списком файлов, предоставленных к проверке. В случае наличия хотя бы одного файла, при исключении которого компиляция или работы программы будет нарушена, в представленных к проверке исходных текстах, при условии отсутствия данного файла в документации, данное требование считается не выполненным.
1.4.Контроль отсутствия избыточности на уровне функциональных объектов
Контроль осуществляется экспертом с помощью программных средств, которые выявляют возможно избыточные функциональные объекты (неиспользуемые функции, конструкторы, деструкторы и т.д.). Затем обнаруженные функциональных объекты исключаются из исходных кодов, и проводится компиляция. В случае успешной компиляции исходных текстов, данное требование считается невыполненным.
Данные проверки проводятся с помощью компиляторов и дополнительного программного средства для осуществления проверки по пункту 1.4. В качестве дополнительного программного средства используется в том числе SOCK CodeHealer, отдельный пост будет посвящен этому средству.
2.Контроль соответствия исходных текстов ПО его объектному (загрузочному) коду
Данная проверка заключается в компиляции исходных текстов программ и сравнению полученных объектных (загрузочных) кодов с аналогичными, предоставленными с дистрибутивом проверяемого ПО. В качестве программных средств для осуществления данной проверки используется компилятор и программа подсчета контрольных сумм и сравнения файлов. Существует сертифицированное средство ФИКС, скорее всего небольшая заметка будет по этому поводу.
3.Контроль связей функциональных объектов по управлению
Данная проверка заключается в построении графа взаимодействия функциональных объектов по управлению (граф вызова функций). Проверка может быть выполнена экспертом без привлечения дополнительных программных средств, однако объем исходных текстов и количество функциональных объектов в современных ПО достаточно велико. Существует ряд средств для разных языков программирования, в том числе мною будет рассмотрены средства для языков C++ и Delphi.
4.Контроль связей функциональных объектов по информации
Данная проверка заключается в построении графа взаимодействия функциональных объектов по информации (граф передачи переменных между функциями и использованию глобальных переменных внутри функций). Используются аналогичные п.3 программные средства.
5.Контроль информационных объектов
Данная проверка заключается в построении перечня информационных объектов (все переменные, кроме локальных, не передаваемых в другие функциональные объекты). Используются аналогичные п.3 программные средства.
6.Контроль наличия заданных конструкций в исходных текстах
Данная проверка заключается в поиске заданных конструкций в исходных текстах ПО.
7.Формирование перечня маршрутов выполнения функциональных объектов
Данная проверка заключается в построении графа маршрутов выполнения функциональных объектов, основываясь на графе связей функциональных объектов по управлению. Используются аналогичные п.3 программные средства.
8.Анализ критических маршрутов выполнения функциональных объектов
Данная проверка осуществляется с помощью экспертного анализа и заключается в статическом логическом анализе критических маршрутов выполнения функциональных объектов. Критическими считаются те части общего маршрута, в котором используются функциональные объекты с обнаруженными заданными конструкциями в ходе проверки по п. 6. Дополнительных программных средств эксперту не требуется.
9.Анализ алгоритма работы функциональных объектов на основе блок-схем, диаграмм и т. п., построенных по исходным текстам контролируемого ПО
Данная проверка подразумевает построения блок-схем алгоритмов работы контролируемого ПО и их последующий анализ. В большинстве случаев эта проверка выполняется только формально. Существует ряд специальных программных средств для построения блок-схем алгоритмов, например средство CodeVisual2Flowchart.
10.Контроль выполнения функциональных объектов
Данная проверка относится к динамическому анализу и заключается во внедрении в исходные тексты контролируемого ПО специальных маркеров запуска функциональных объектов. После внедрения маркеров из исходных текстов собираются объектные (загрузочные) коды и проводится полное тестирование пользовательского интерфейса. Во время тестирования интерфейса информация от маркеров записывается в файл отчета и в дальнейшем используется в проверке по п. 11. В роли маркеров, чаще всего, выступает функция WinAPI OutputDebugString, её внедрение может производиться экспертом вручную, однако из-за больших объемов исходных кодов и количества функциональных объектов данная работа требует использования дополнительных программных средств. К сожалению, найти такие средства я не смог, поэтому в нашей лаборатории были разработаны скрипты для расставления OutputDebugString в исходные тексты на языках Delphi и C++, позднее я выложу эти скрипты.
11.Сопоставление фактических маршрутов выполнения функциональных объектов и маршрутов, построенных в процессе проведения статического анализа
Данная проверка заключается в сравнении маршрута выполнения функциональных объектов, построенных в процессе проведения статического анализа (п. 7), и маршрутов, выявленных с помощью маркеров при динамическом анализе (п. 10). В случае расхождения маршрутов, степень несоответствия и критичности определяется экспертом.

Здравствуйте. Интересуют программы для пунктов 3,4 и 7. Не могли бы вы подсказать?
Для п. 7 – http://magir-blog.ru/archives/50
Для п. 3, 4 – это АИСТ-С, Understanding for C++ – для c/c++, PascalAnalyzer – для Delphi