Код-ревью в пайплайне
Конечно, захотелось автоматизировать всё. И мы это сделали)
Начали с автоматизации код-ревью в пайплайне. Это работало на локальных моделях, и качество в целом было приемлемым.
У такого ревью есть ограничение: бот видит только дифф. Ему сложно судить о проекте в целом, когда за пределами изменений остаются бизнес-логика, связи между компонентами и проверки в других местах.
При этом он подсвечивает вещи, которые легко упустить глазом. Например, переполнение. Вот короткий пример на Go:
timeoutMs := int32(3000)
timeout := time.Duration(timeoutMs * 1_000_000)
Ожидаем таймаут в три секунды, а получаем отрицательную длительность: `-1.294967296s`. Умножение выполняется в `int32`, и результат в этот тип уже не помещается. Приведение к `time.Duration` происходит после переполнения.
На ревью взгляд легко цепляется за `time.Duration`, и проблема с промежуточным вычислением остаётся незамеченной.
Даже с ограниченным контекстом такой бот оказался полезен: он обращает внимание на подозрительное место, а дальше уже можно разобраться, есть ли там реальная проблема.