Система обучается путём построения статистической модели имеющегося массива кода открытых проектов, опубликованных в GitHub и подобных публичных репозиториях. На стадии обучения система определяет типовые шаблоны построения конструкций в коде и строит синтаксическое дерево связей между этими шаблонами, отражающее поток выполнения кода в программе. В итоге формируется эталонное дерево принятия решений, объединяющее опыт разработки всех проанализированных исходных текстов. Для проверяемого кода выполняется похожий процесс определения шаблонов, которые сверяются с эталонным деревом принятия решений. Большие расхождения с соседними ветвями свидетельствуют о наличии аномалии в проверяемом шаблоне.

В качестве примера возможностей ControlFlag разработчиками был проведён анализ исходных текстов проектов OpenSSH и cURL:
- В OpenSSL были выявлены аномальные конструкции «(s1 == NULL) ∧ (s2 == NULL)» и «(s1 == NULL) | (s2 == NULL)» , не соответствующие обычно используемому шаблону «(s1 == NULL) || (s2 == NULL)». В коде также были выявлены аномалии в выражениях «(-2 == rv)» (минус был опечаткой) и «BIO_puts(bp, «:») ‹= 0)» (в контексте проверки успешного завершения функции должно было быть «== 0»).
- В cURL выявлена незамеченная статическими анализаторами ошибка при использовании элемента структуры «s-›keepon», который имел числовой тип, но сравнивался с булевым значением TRUE.
Из особенностей версии ControlFlag 1.0 отмечается полная поддержка типовых шаблонов для языка Си и возможность выявления аномалий в условных выражениях «if». Например, при анализе фрагмента кода «if (x = 7) y = x;» система определит, что обычно в операторе «if» для сравнения числовых значений используется конструкция «переменная == число», поэтому с большой вероятностью указание «переменная = число» в выражении «if» вызвано опечаткой. В комплекте предоставляется сценарий, позволяющий загрузить имеющиеся в GitHub репозитории на языке Си и использовать их для построения модели. Также доступны уже готовые модели, позволяющие сразу приступить к проверке кода.
Источник: http://www.opennet.ru/opennews/art.shtml?num=56187