ИИ пишет код всё быстрее, но как доказать, что ему действительно можно доверять?

LLM уже умеют быстро генерировать функции, создавать проекты и даже выполнять сложный рефакторинг кода.

Но одна проблема остаётся: если код выглядит разумно и работает, это ещё не значит, что он корректен во всех случаях.

В этом и заключается риск программирования с помощью ИИ, который легко упустить из виду.

Если функция прошла тесты, это лишь означает, что она нормально работает на уже проверенных входных данных. Настоящие ошибки могут скрываться в нестандартных входных данных, граничных условиях и сложных сочетаниях состояний.

Как же ещё повысить надёжность?

Одно из важных направлений — формальная верификация (Formal Verification).

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

Разницу между этими подходами можно представить так:

* Тестирование: проверка выбранных сценариев на наличие проблем.
* Формальная верификация: попытка строго доказать корректность в отношении конкретно заданных свойств.

Разумеется, формальная верификация не всесильна. Доказательство применимо только к чётко заданным спецификациям, допущениям и области проверки. Если требования сами по себе некорректны или модель верификации не охватывает реальные условия, риски всё равно могут сохраниться.

В идеальном рабочем процессе кодирующего агента будущего ИИ должен генерировать код, затем автоматизированные инструменты верификации — проверять ключевые свойства, а при обнаружении проблем агент — исправлять их и запускать проверку снова.

Это особенно важно для финансовых систем, компиляторов, операционных систем и критически важного программного обеспечения, где цена ошибки может быть очень высокой.

ИИ отвечает за ускорение разработки, а механизмы верификации — за обеспечение корректности. Надёжное программирование с помощью ИИ должно не только показывать, как быстро пишется код, но и объяснять, почему ему можно доверять.