SpecaFlow - оптимизация и ускорение

Всем привет!

Эти полторы недели были плодотворными: провёл серию тестов и испытаний, оптимизировал обвязку (harness) SpecaFlow и устранил ошибки и конфликты инструмента. Рассказываю по порядку, что изменилось и чего это стоило.

Сначала — цифры. Чтобы сравнение было честным, я прогнал одну и ту же фичу на одной и той же модели в прошлой версии и в новой. Весь цикл от спецификации до ретро: 204 минуты против 212. Модель сделала на четверть меньше шагов: 222 круга против 297 и 335 вызовов инструментов против 450. Самое приятное — реализация прошла без единого запроса разрешения на команды, а раньше их было двадцать.

Оптимизация контекста. Раньше каждая фаза получала документы фичи целиком. Теперь фаза получает полностью только тот документ, который правит, а из остальных — нужные ей разделы. Вырезанное не теряется: вместо него стоит адрес, и модель дочитает его, если понадобится. Пакет документов стал меньше от 15 до 35 процентов. Попутно учел, что провайдер отдаёт до 90 % промпта из кэша, и SpecaFlow теперь это видит: в статистике видно, сколько прочитано на самом деле и сколько стоил прогон.

Сложности, которые пришлось разбирать. Самое интересное в такой работе — искать, почему модель ведёт себя странно. Почти всегда причина не в модели, а в том, что ей недосказали или сказали противоречиво. Несколько примеров:

- Фаза тестов раз за разом падала на проверке «сервер останавливается по Ctrl+C». Оказалось, что SpecaFlow, запущенный в фоне, передавал командам игнорирование этого сигнала. Код проекта был верен, ломался инструмент. - Длинный вывод команды обрезался с конца, и модель не видела итог прогона тестов. Она начинала писать самодельные счётчики. Теперь видны и начало, и конец. - Временные файлы пробных скриптов стучались в системную папку /tmp, и каждый такой шаг останавливал прогон ради разрешения от разработчика. Теперь они ложатся в служебный каталог внутри проекта и вычищаются автоматически при завершении фазы. - Прогон мог упереться в предел контекстного окна модели, а оборванный ответ портил всю историю разговора. Теперь ответ запрашивается в пределах оставшегося места.

Усиление промптов.

Целиком перечитал все инструкции для модели. Реализовал системныйблок pipeline и каждая фаза теперь знает, что было до неё, кто прочтёт её результат и что проверит гейт в конце. Отказов на гейтах стало заметно меньше потому что модели рассказли о соседях.

Так как SpecaFlow вырос из идеи SDD хорошо реализованной в известном всем spec-kit, но давно идёт своей дорогой, то некоторые решения предка не просто устарели, они стали мешать, и я от них отказался.

Интерфейс.

- Вкладка «Замысел» и новый опросник на 75 вопросов. Бывшие Drafts (черновики) теперь называются Concept (Концепт). Теперь План проекта собирается только после опросника, а слои строятся в фиксированном порядке: инфраструктура → бэкенд → дизайн → фронтенд. - Карточка разрешения показывает, зачем модель запускает команду, саму команду и её переменные. - Полоса фаз теперь показывает желтой точкой, где стоит фича и какой шаг следующий. - Финализация больше не спотыкается о сопутствующие изменения в git, а учитывает их и забирает с собой в коммит.

Самообучение. Ретро поумнел. Уроки проекта адресуются конкретно той фазе, которая может их выполнить.

Демо-версия 0.12.10 уже в группе: https://t.me/specaflow https://specaflow.com/

SpecaFlow - оптимизация и ускорение | Сетка — социальная сеть от hh.ru SpecaFlow - оптимизация и ускорение | Сетка — социальная сеть от hh.ru SpecaFlow - оптимизация и ускорение | Сетка — социальная сеть от hh.ru SpecaFlow - оптимизация и ускорение | Сетка — социальная сеть от hh.ru