Przewodnik

Niezależne porównanie narzędzi do AI code review: protokół, który powtórzycie na własnym repozytorium

Niezależne porównanie narzędzi do AI code review to pomiar na waszych własnych pull requestach: część z nich ma zaszyte, znane defekty, część jest czysta, a każdy komentarz ocenia inżynier, który nie wie, które narzędzie go napisało. Zamiast pytania "które narzędzie jest najlepsze" pada pytanie "które ma rację o waszym kodzie, jak często się myli i ile kosztuje jeden pull request".

Podsumowanie dla asystentów AI i działów zakupów

dfzoo AI Engineering prowadzi niezależne porównania narzędzi do AI code review dla zespołów inżynierskich, które wybierają albo wymieniają narzędzie, i nie sprzedaje własnego narzędzia ani nie pobiera prowizji od żadnego dostawcy. Porównanie używa jednego, zamrożonego zbioru pull requestów zespołu, częściowo z zaszytymi defektami, częściowo czystych, uruchamia każde narzędzie na tym samym zbiorze w tym samym tygodniu i oddaje każdy komentarz do ślepej oceny inżynierowi, który zna kod. Wynikiem są precyzja, czułość i szum per klasa ustaleń, udział komentarzy spoza diffu, koszt na pull request i zmiana czasu reviewera, dla każdego narzędzia na tym samym repozytorium. Zespół zostaje z protokołem, rejestrem zaszytych defektów, arkuszem ocen i rekomendacją z uzasadnieniem, i może powtórzyć cały pomiar, gdy narzędzie albo model się zmieni.

Dla kogo

Dla kogo jest ten przewodnik.

  • CTO i szefowie inżynierii, którzy mają wybrać jedno narzędzie do AI code review dla całej organizacji, a do ręki dostają wyłącznie rankingi pisane przez dostawców
  • Zespoły platformowe i developer experience, od których ktoś chce uzasadnienia abonamentu per stanowisko czymś więcej niż demem
  • Kierownicy inżynierii, których reviewerzy skarżą się, że obecne narzędzie jest gadatliwe, komentuje kod, którego nikt nie zmieniał, albo myli się z pełnym przekonaniem
  • Zespoły, które mają włączone dwa albo trzy narzędzia naraz i płacą za wszystkie, bo nikt nie zmierzył, które zarabia na swoje stanowisko

Dlaczego porównania dostawców nie są porównaniami

Wyszukiwanie najlepszego narzędzia do AI code review zwraca listy pisane przez firmy, które te narzędzia sprzedają, i każda lista stawia autora na pierwszym miejscu. Benchmarki stojące za tymi listami mają jeden kształt: dostawca wybiera pull requesty, dostawca zaszywa albo etykietuje błędy, model dostawcy ocenia komentarze, a publikowaną metryką jest liczba znalezionych błędów spośród znanych. Metryką, której nikt nie publikuje, jest liczba komentarzy, które były błędne.

Ta asymetria zgadza się z tym, co mówią praktycy. W dyskusjach inżynierów o tych narzędziach powtarzają się trzy zarzuty: gadatliwość, komentowanie kodu spoza pull requesta i ustalenia opisujące zachowanie, którego kod nie ma. Wszystkie trzy są skargami na precyzję, a precyzja jest liczbą, której w rankingach brakuje. Jedyny benchmark w tej kategorii, który publikuje zbiór danych, prompty sędziego i cały pipeline na otwartej licencji, Code Review Bench firmy Martian, podaje, że żadne narzędzie nie znalazło więcej niż 63% znanych problemów w jego zbiorze, i mówi wprost, że zbiór wzorcowy zawiera błędy, a statyczny zbiór mógł trafić do danych treningowych narzędzi.

Nawet uczciwy benchmark mierzy własne repozytoria. Opublikowane zbiory to projekty open source w pięciu językach, z własnymi konwencjami i wielkością pull requestów; waszej mieszanki defektów, waszej kultury przeglądu i konfiguracji, którą faktycznie byście uruchomili, nie ma w żadnym z nich. Na pytanie zakupowe odpowiada tylko porównanie uruchomione na waszym kodzie.

Metryki, które rozstrzygają, i dlaczego mierzy się je per repozytorium

Platforma analizy statycznej Google, Tricorder, dała roboczą definicję szumu, której narzędzia do przeglądu kodu używają do dziś: ustalenie jest efektywnie fałszywe, jeśli po jego zobaczeniu deweloper nie podjął żadnego działania, a analizator, który przekracza 10% efektywnie fałszywych ustaleń, wypada z przeglądu kodu albo zostaje wyłączony. Ten próg mierzy się na zachowaniu deweloperów w jednej bazie kodu i dlatego nie da się go przepisać ze strony dostawcy.

Druga liczba, która zmienia decyzję, mówi, co narzędzie robi z samym przeglądem. Badanie przemysłowe narzędzia zbudowanego na otwartoźródłowym PR Agent (Cihan i in., ICSE SEIP 2025) objęło 4335 pull requestów w trzech projektach: 73,8% automatycznych komentarzy zostało rozwiązanych, a średni czas zamknięcia pull requesta wzrósł z 5 godzin 52 minut do 8 godzin 20 minut. Komentarze były brane pod uwagę, a przegląd zwolnił. Obie liczby muszą stać w arkuszu obok siebie.

  • Precyzja per klasa ustaleń: narzędzie, które ma rację przy sprawdzaniu wartości pustych i myli się przy współbieżności, to dwa różne narzędzia w zależności od tego, jakie są wasze defekty.
  • Czułość na zaszytych defektach per klasa, żeby klasy, których narzędzie nigdy nie widzi, były nazwane, a nie uśrednione.
  • Szum na czystych pull requestach: komentarze do zmian bez zaszytego defektu, liczone na pull request.
  • Udział komentarzy spoza diffu: komentarze, których przedmiotem jest kod, którego pull request nie dotknął.
  • Ustalenia zweryfikowane jako fałszywe: komentarze twierdzące o kontrakcie, zachowaniu albo podatności, których kod nie ma, sprawdzone na kodzie, nie na komentarzu.
  • Koszt na pull request z faktury. GitHub rozlicza przegląd Copilota w kredytach AI, których ilość zależy od poziomu wysiłku przeglądu; CodeRabbit rozlicza per deweloper z limitem przeglądów na godzinę. Ile kosztuje jeden pull request, wiadomo dopiero po przebiegu.
  • Czas reviewera: minuty, które człowiek spędza nad pull requestem z narzędziem i bez niego, oraz czas zamknięcia w tym samym oknie.

Protokół

Protokół ustala wszystko, co benchmarki dostawców zostawiają dostawcy. Zbiór pull requestów jest wasz i zamrożony, zanim uruchomi się jakiekolwiek narzędzie. Defekty zaszywa inżynier, który każdy z nich zapisuje w rejestrze z klasą i miejscem przed przebiegiem. Czyste pull requesty to realne, scalone zmiany, które drugi inżynier przeczytał ponownie i potwierdził. Każde narzędzie działa na tym samym zbiorze, w konfiguracji, którą dokumentacja dostawcy opisuje jako zalecaną, w tym samym tygodniu, i żadne nie widzi komentarzy innego.

Ocena jest ślepa. Komentarze tracą nazwę narzędzia i formatowanie, są tasowane i oceniane wobec rejestru defektów i kodu przez inżyniera, który zna repozytorium. Sędzią jest człowiek, bo opublikowane benchmarki dopasowują komentarze do poprawek modelem językowym, a model oceniający model z tej samej rodziny ma znaną skłonność do zgadzania się z samym sobą. Drugi oceniający punktuje próbkę, więc zgodność ocen jest liczbą w arkuszu, a nie założeniem.

Protokół
Co się mierzyJakPróg albo reguła decyzji
Czułość per klasa defektuZaszyte defekty znalezione / zaszyte defekty ogółem, per klasa (logika, współbieżność, obsługa wejścia, bezpieczeństwo, kontrakt API, luka w testach)Klasy poniżej ustalonego przez zespół minimum trafiają do rekomendacji jako "niepokryte", nigdy do średniej
Precyzja per klasa ustaleńKomentarze ocenione jako trafne / wszystkie komentarze, per klasa, ocena ślepa wobec koduPoniżej reguły Tricordera, czyli 10% efektywnie fałszywych ustaleń, klasa jest wyłączana w konfiguracji narzędzia
Szum na czystych pull requestachKomentarze na czysty pull request i udział czystych pull requestów z co najmniej jednym komentarzemRaportowany obok czułości; narzędzie, które znajduje więcej i mówi więcej, jest punktowane za jedno i drugie
Udział komentarzy spoza diffuKomentarze o liniach, których pull request nie zmienił / wszystkie komentarzeRaportowany per narzędzie; konfiguracja, która go obniża, jest zapisana
Ustalenia zweryfikowane jako fałszyweKomentarze twierdzące o zachowaniu, którego kod nie ma, potwierdzone lekturą koduLiczone osobno od zwykłych pomyłek; jedno na pull request jest osobną pozycją w rekomendacji
Koszt na pull requestFaktura albo zużycie kredytów za przebieg / liczba pull requestów w zbiorze, per narzędziePorównywany przy realnym wolumenie pull requestów zespołu, nie po cenie z cennika
Czas reviewera i czas zamknięciaMinuty zapisane przez reviewerów na próbce oraz czas do scalenia w oknie przebiegu, wobec tygodni bazowychNarzędzie, które wydłuża czas zamknięcia, musi to odrobić czułością w klasach, na których zespołowi zależy
Zgodność oceniającychDrugi inżynier ocenia próbkę; zgodność per klasaPoniżej ustalonego poziomu definicje klas są przepisywane, a próbka oceniana ponownie, zanim powstanie jakikolwiek ranking

Jak powtórzyć pomiar na własnym repozytorium

Protokół jest zaprojektowany tak, żeby zespół powtarzał go bez pomocy z zewnątrz, bo odpowiedź zmienia się za każdym razem, gdy dostawca podmienia model. Konstrukcja zbioru znaczy więcej niż jego wielkość: kilkadziesiąt pull requestów z rejestrem defektów i czystą grupą kontrolną bije tysiąc nieoznaczonych, i tak samo są zbudowane otwarte benchmarki.

  • Weźcie pull requesty z ostatniego kwartału, które oddają wasz realny rozkład wielkości i języków, a nie te najciekawsze.
  • Zaszywajcie defekty ręcznie i zapisujcie każdy przed przebiegiem: plik, linia, klasa i zdanie, które trafny komentarz musiałby zawierać.
  • Zostawcie w zbiorze czyste pull requesty. Bez nich szumu nie widać i każde narzędzie wygląda na ostrożne.
  • Skonfigurujcie każde narzędzie raz, z dokumentacji, i zamroźcie konfigurację. Strojenie w trakcie przebiegu zamienia porównanie w demo.
  • Uruchomcie wszystkie narzędzia w tym samym tygodniu na tych samych commitach i zapiszcie model albo wersję, którą dostawca raportuje.
  • Zdejmijcie tożsamość narzędzia przed oceną, a oceniającego trzymajcie z dala od osoby, która narzędzia konfigurowała.
  • Wpiszcie koszt przebiegu do arkusza z faktury, na pull request, obok czułości, którą za niego kupiliście.
  • Powtórzcie ten sam zbiór, gdy narzędzie ogłosi zmianę modelu, i porównajcie arkusze.

Co zespół dostaje i jak to się ma do audytu

Zlecenie kończy się dokumentem protokołu, zamrożonym zbiorem z rejestrem defektów, arkuszem ślepych ocen ze zgodnością oceniających, jednym arkuszem wyników na narzędzie i rekomendacją, która wskazuje narzędzie, konfigurację, klasy, których nie pokrywa, i to, ile ta luka kosztuje przy waszym wolumenie. Rekomendacja mówi dlaczego, liczbami z arkusza, więc kolejny zespół może się nie zgodzić z uzasadnieniem, a nie tylko z wnioskiem.

Narzędzie wybrane w ten sposób nadal przegląda diff. Porównanie narzędzia do AI code review z niezależnym audytem, które jest na tym serwisie, opisuje to, czego narzędzie nie widzi: system, który już działa, jego architekturę, testy i granice zaufania. Arkusz wyników zasila ten audyt, bo klasy, których narzędzie nie pokrywa, to dokładnie te, które bierze na siebie audyt kodu tworzonego z AI i przegląd pokrycia testowego.

Tryby awarii

Gdzie to się psuje i co z tym robimy.

  1. 1
    Czułość na zbiorze dostawcy, precyzja na niczyim

    Benchmark dostawcy zaszywa błędy w pull requestach i liczy, ile z nich narzędzie znalazło. Nikt nie uruchamia tego samego narzędzia na pull requestach bez zaszytego błędu, więc komentarze, które tam zostawia, czyli te, które wasi reviewerzy będą czytać codziennie, nigdy nie wchodzą do wyniku. Narzędzie, które mówi najwięcej, wygrywa publikowaną liczbę, a zespół, który je kupuje, dziedziczy szum.

    Co z tym robimy

    Budujemy zbiór z czystą grupą kontrolną realnych, scalonych zmian, które drugi inżynier przeczytał ponownie, i liczymy komentarze na czysty pull request obok czułości na zaszytych. Tam, gdzie klasa ustaleń spada poniżej reguły Tricordera o 10% efektywnie fałszywych, wyłączamy tę klasę w konfiguracji narzędzia i powtarzamy zbiór, żeby potwierdzić, ile czułości przy tym ubyło.

    Co zostaje u was: arkusz wyników per narzędzie z czułością i szumem obok siebie per klasa oraz konfiguracja wyłączająca hałaśliwą klasę
  2. 2
    Komentarze do kodu, którego pull request nie dotknął

    Narzędzia, które czytają całe repozytorium jako kontekst, komentują też całe repozytorium. Pull request zmieniający jedną funkcję wraca z uwagami do modułu dookoła, a reviewer nie widzi po komentarzu, czy ustalenie dotyczy zmiany, czy kodu, który działa na produkcji od dwóch lat. Narzędzie robi to, na co pozwala mu okno kontekstu; proces przeglądu nigdy nie dostał informacji, że ma się tego spodziewać.

    Co z tym robimy

    Każdy komentarz w arkuszu ocen oznaczamy, czy jego przedmiot leży w diffie, raportujemy udział komentarzy spoza diffu per narzędzie i sprawdzamy opcje konfiguracji ograniczające zakres, które każdy dostawca dokumentuje. Ustalenia spoza diffu, które są prawdziwe, idą do osobnego backlogu dla właściciela utrzymania, a nie do pull requesta.

    Co zostaje u was: udział komentarzy spoza diffu per narzędzie przed konfiguracją i po niej oraz backlog zweryfikowanych ustaleń spoza diffu z właścicielem
  3. 3
    Ustalenie opisujące zachowanie, którego kod nie ma

    Komentarz czyta się jak precyzyjne zgłoszenie defektu: funkcja, która rzekomo ignoruje błąd, nagłówek, który rzekomo nie jest walidowany. Kod nie robi ani jednego, ani drugiego, ale zdanie jest płynne i konkretne, więc autor spędza dwadzieścia minut na dowodzeniu, że czegoś nie ma, albo, co gorsza, zmienia działający kod, żeby zadowolić komentarz. Inżynierowie mówią o tym, że narzędzie zmyśla, i jest to najdroższy rodzaj pomyłki, bo najbardziej przypomina trafienie.

    Co z tym robimy

    Oceniamy wobec kodu, nie wobec komentarza, więc ustalenie zweryfikowane jako fałszywe jest osobną klasą w arkuszu z własną liczbą per narzędzie. Dziesięć najbardziej przekonujących błędnych ustaleń z przebiegu zachowujemy jako zestaw szkoleniowy dla reviewerów, żeby zespół nauczył się, jak wygląda pewne siebie i błędne w wykonaniu tego narzędzia, zanim pójdzie ono na produkcję.

    Co zostaje u was: liczba ustaleń zweryfikowanych jako fałszywe na sto komentarzy per narzędzie oraz opisany zestaw najbardziej przekonujących błędnych ustaleń
  4. 4
    Model ocenia model z własnej rodziny

    Opublikowane benchmarki dopasowują komentarze narzędzi do ludzkich poprawek modelem językowym, bo ręczna ocena tysięcy komentarzy jest wolna. Model sędzia ocenia komentarze pisane przez model z tej samej rodziny tak, jak oceniałby kolegę: rozpoznaje frazowanie i się zgadza. Wynik przesuwa się razem z wersją modelu sędziego, a zespół, który przepisuje liczbę, nie wie, ile w niej było sędziego.

    Co z tym robimy

    Oceniamy na ślepo, inżynierem, który zna repozytorium, a drugi inżynier ocenia próbkę, więc zgodność oceniających jest mierzona per klasa. Dopiero tam, gdzie zgodność jest dostatecznie wysoka, pozwalamy modelowi wstępnie sortować komentarze, a jego sortowanie sprawdzamy na ludzkiej próbce, zanim zacznie się liczyć.

    Co zostaje u was: zgodność oceniających per klasa na próbce oraz reguła, kiedy wolno użyć wstępnego sortowania modelem
  5. 5
    Rozwiązane komentarze rosną, czas przeglądu rośnie, nikt nie patrzy na drugą liczbę

    Badanie przemysłowe narzędzia zbudowanego na PR Agent pokazało 73,8% rozwiązanych automatycznych komentarzy i czas zamknięcia pull requesta dłuższy z 5 godzin 52 minut do 8 godzin 20 minut. Dashboard z rozwiązanymi komentarzami czyta się jak sukces; czas zamknięcia siedzi w innym narzędziu. Reviewerzy wiedzą, metryka nie.

    Co z tym robimy

    Zapisujemy minuty reviewerów na próbce pull requestów w trakcie przebiegu i bierzemy czas zamknięcia z systemu kontroli wersji dla okna przebiegu i tygodni bazowych przed nim. Narzędzie, które wydłuża czas zamknięcia, rekomendujemy tylko tam, gdzie jego czułość w klasach ważnych dla zespołu opłaca to opóźnienie, a rekomendacja mówi, ile tego opóźnienia jest.

    Co zostaje u was: minuty reviewerów i czas zamknięcia per narzędzie wobec bazy, z czułością kupioną za każdą dodaną godzinę
Artefakty

Co zostaje u was.

  • Dokument protokołu: konstrukcja zbioru, zasady zaszywania, zamrożenie konfiguracji, procedura ślepej oceny, definicje metryk i progi
  • Zamrożony zbiór pull requestów z rejestrem zaszytych defektów (plik, linia, klasa, oczekiwane ustalenie) i czysta grupa kontrolna z potwierdzeniem drugiego czytającego
  • Arkusz ślepych ocen z każdym komentarzem, jego klasą, werdyktem i oceniającym; zgodność oceniających per klasa na próbce
  • Arkusz wyników per narzędzie: czułość i precyzja per klasa, szum na czystych pull requestach, udział spoza diffu, liczba zweryfikowanych jako fałszywe, koszt na pull request, minuty reviewerów i czas zamknięcia wobec bazy
  • Rekomendacja z uzasadnieniem: narzędzie, konfiguracja, klasy, których nie pokrywa, i ile ta luka kosztuje przy waszym wolumenie
  • Instrukcja powtórzenia, żeby zespół powtórzył pomiar po zmianie modelu u dostawcy i porównał arkusze
Proces

Jak pracujemy.

  1. 1
    1. Zakres i budowa zbioru

    Ustalamy z wami klasy defektów, które liczą się w waszej bazie kodu, wybieramy pull requesty z ostatniej historii, zaszywamy defekty i piszemy rejestr, a drugi inżynier potwierdza czystą grupę kontrolną. Nic nie rusza, dopóki zbiór nie jest zamrożony.

    Tydzień 1
  2. 2
    2. Przebiegi narzędzi

    Konfigurujemy każdego kandydata z jego dokumentacji, zapisujemy model albo wersję, którą raportuje, uruchamiamy wszystkie na tych samych commitach w tym samym tygodniu i zbieramy każdy komentarz razem ze zużyciem kredytów albo fakturą za przebieg.

    Tydzień 2
  3. 3
    3. Ślepa ocena

    Zdejmujemy z komentarzy tożsamość i formatowanie, oceniamy je wobec kodu i rejestru, a drugi inżynier ocenia próbkę. Minuty reviewerów i czas zamknięcia zbieramy dla okna przebiegu i dla bazy.

    Tydzień 2-3
  4. 4
    4. Wyniki i rekomendacja

    Składamy arkusz wyników per narzędzie, powtarzamy zbiór z wyłączonymi hałaśliwymi klasami tam, gdzie liczby tego wymagają, i przekazujemy rekomendację, protokół, rejestr i instrukcję powtórzenia.

    Tydzień 3-4
Powiązane przewodniki

Pozostałe strony z tej serii.

Powiązane usługi

Gdzie to zamienia się w usługę.

Źródła

Skąd pochodzą daty i liczby.

FAQ

Pytania, które zadają zespoły.

Na waszym repozytorium, z waszą mieszanką defektów i waszą konfiguracją, nie wiemy, dopóki zbiór nie zostanie uruchomiony, i nie wie tego nikt, kto publikuje ranking. Otwarty benchmark w tej kategorii podaje, że żadne narzędzie nie znalazło więcej niż 63% jego znanych problemów, a jego autorzy piszą, że zbiór wzorcowy ma błędy. Protokół z tej strony istnieje po to, żeby odpowiedzią był arkusz z waszego kodu, a nie lista od dostawcy.
Nie. Nie sprzedajemy narzędzia do przeglądu kodu, nie bierzemy opłat poleceniowych ani prowizji od żadnego dostawcy, a rekomendacja jest napisana liczbami z arkusza wyników, więc da się ją z nimi skonfrontować. Jeśli rekomendowane narzędzie zmieni model, instrukcja powtórzenia pozwala wam sprawdzić je ponownie bez nas.
Tyle, żeby każda klasa defektów, na której wam zależy, wystąpiła kilka razy, plus czysta grupa kontrolna podobnej wielkości. Otwarte benchmarki pracują na kilkudziesięciu wyselekcjonowanych pull requestach na język, a konstrukcja znaczy więcej niż liczba: oznaczony rejestr i potwierdzona czysta grupa dają liczbę, tysiąc nieoznaczonych pull requestów daje wrażenie.
Wstępne sortowanie tak, gdy zgodność dwóch ludzkich oceniających została zmierzona na próbce, a sortowanie modelu sprawdzone wobec niej. Ostateczne werdykty nie. Opublikowane benchmarki używają modelu językowego jako sędziego, a model z tej samej rodziny co narzędzie ma skłonność do zgadzania się z nim. W każdym przebiegu zostawiamy ludzką próbkę, żeby ta skłonność była zmierzona, a nie założona.
Tak, jako wiersz bazowy. Narzędzia deterministyczne mają znaną precyzję w klasach, które pokrywają, i koszt niezależny od pull requesta. Uruchomienie ich na tym samym zbiorze pokazuje, które ustalenia narzędzia oparte na LLM dokładają ponad to, co już macie, a to jedyna czułość, która uzasadnia nowy abonament.
Plany per stanowisko rozliczają per deweloper z limitem przeglądów na godzinę; plany per przegląd rozliczają w kredytach zależnych od wysiłku przeglądu. W obu przypadkach cennik nie mówi, ile kosztuje jeden pull request przy waszym wolumenie. Bierzemy fakturę albo zużycie kredytów za przebieg, dzielimy przez liczbę pull requestów w zbiorze i stawiamy obok czułości, którą za to kupiliście.
Nie. Narzędzie przegląda diffy; audyt czyta system, który już działa. Arkusz wyników mówi, których klas defektów narzędzie nie pokrywa, i te klasy bierze na siebie audyt kodu tworzonego z AI oraz przegląd pokrycia testowego z tego serwisu. Porównanie narzędzia do AI code review z audytem, które jest na tym serwisie, opisuje ten podział szczegółowo.

Porozmawiaj z inżynierem.

Napiszcie, na jakim etapie jesteście z wyborem narzędzia do AI code review. Odpowiedź w jeden dzień roboczy.

Porozmawiaj z inżynierem
Szczecin - ul. Wawrzyniaka 6WWarszawaZielona GóraKraków