Jednostka 4 / 12

Przegląd kodu, refaktoryzacja i dług techniczny

Zyski:

  • Możliwość wykorzystania sztucznej inteligencji jako drugiego oka podczas przeglądu kodu pod kątem czytelności, logiki i bezpieczeństwa
  • Możliwość planowania etapów refaktoryzacji ze wsparciem AI bez zakłócania zachowania złożonego kodu
  • Możliwość weryfikacji przeglądu i edycji rekomendacji AI za pomocą testów i porównania kontroli wersji

W inżynierii oprogramowania kod jest czytany znacznie częściej, niż jest zapisywany. Linia kodu jest zapisywana raz, ale w ciągu miesięcy jest czytana, modyfikowana i budowana dziesiątki razy. Dlatego właśnie przegląd kodu (przeglądanie cudzego lub własnego kodu pod kątem logiki, czytelności i bezpieczeństwa) i refaktoryzacja (poprawianie struktury kodu bez zmiany jego zachowania) są w centrum inżynierii. Sztuczna inteligencja staje się potężnym „drugim okiem” w przypadku tych dwóch zadań: szybko sugeruje czytelność, wskazuje przeoczone kwestie logiki i bezpieczeństwa oraz dzieli dużą refaktoryzację na mniejsze, bezpieczne kroki. Istnieje jednak najważniejsza zasada: refaktoryzacja nie powinna zmieniać zachowania, a jedyną rzeczą, która to gwarantuje, jest testowanie.

W tej części zobaczymy, jak używać sztucznej inteligencji w uporządkowany sposób do przeglądu kodu, jak naprawiać złożony kod bez zakłócania jego zachowania i jak zarządzać długiem technicznym (szybkie, ale kosztowne decyzje dotyczące kodu).

Koncepcje: Dług techniczny: Decyzje podjęte dzisiaj w celu zapewnienia szybkości, które utrudniają konserwację w przyszłości. Zapach kodu: wzorce, które same w sobie nie są błędami, ale wskazują na problemy (zbyt długie funkcje, powtarzalny kod). Regresja: gdy zmiana psuje coś, co wcześniej działało.

Wykorzystanie sztucznej inteligencji w przeglądzie kodu strukturalnego

Kiedy czas jest ograniczony, należy skoncentrować się na kwestiach największego ryzyka. Automatyczny formatyzator radzi sobie z problemami formatowania, takimi jak wcięcia i odstępy; Musisz poświęcić ludzką uwagę logice, bezpieczeństwu i zachowaniom w sytuacjach brzegowych. Przeglądając sztuczną inteligencję, poproś o listę priorytetów, a nie o zwykły zalew recenzji.

  1. Podaj zakres. Jaki kod, co zrobić, w jakim kontekście to działa.
  2. Określ oś priorytetową. Po pierwsze dokładność i bezpieczeństwo, po drugie czytelność.
  3. Poproś o konkretną korektę. „Dlaczego problem” i „zalecane rozwiązanie” dla każdego ustalenia.
  4. Weryfikujesz ustalenia. Sztuczna inteligencja generuje również fałszywe alarmy; Zweryfikuj każde ustalenie pod kątem kodu i testów.

Ustrukturyzowany monit przeglądu: „Zbadaj następującą funkcję jak starszy inżynier. Ułóż ustalenia w kolejności ważności i oznacz je następującymi tagami: [KRYTYCZNY] logika/bezpieczeństwo, [ŚREDNI] przypadek/wydajność, [NISKI] czytelność/nazwa. Dla każdego ustalenia: po co pytać, konkretna sugestia poprawki. NIE POMIJAJ problemów z formatowaniem/wcięciami, automatyczne narzędzie sobie z tym poradzi. Kod: [kod]”

Monit przeglądu skupionego na bezpieczeństwie: „Przejrzyj ten kod wyłącznie ze względów bezpieczeństwa: brak sprawdzania poprawności danych wejściowych, ryzyko wstrzyknięcia, brak kontroli autoryzacji, wyciek poufnych informacji, niepewne ustawienia domyślne. Dodaj przykładowy scenariusz ataku do każdego wyniku. Jeśli nie ma problemu z bezpieczeństwem, wyraźnie napisz: „Nie znalazłem żadnych krytycznych problemów z bezpieczeństwem”. Kod: [kod]”

Uwaga: samo to, że sztuczna inteligencja mówi „nie ma problemu”, nie jest dowodem na to, że problemu nie ma. Sztuczna inteligencja może dawać fałszywe wyniki negatywne; może ominąć prawdziwy problem bezpieczeństwa. Przegląd AI uzupełnia, a nie zastępuje, przegląd ręczny i testy bezpieczeństwa. W kodzie krytycznym dla bezpieczeństwa ostatnie słowo należy do kompetentnego inżyniera.

Refaktoryzacja zachowana w testach

Złota zasada refaktoryzacji: najpierw przetestuj, później zmień. Przed naprawieniem kodu powinny zostać przeprowadzone testy blokujące bieżące zachowanie, aby od razu wiedzieć, czy zmiana coś zepsuje. Nie łam kolejności podczas refaktoryzacji AI.

  1. Poddaj obecne zachowanie testowi. W przeciwnym razie poproś sztuczną inteligencję o wykonanie „testu charakterystyki” (testu, który rejestruje obecne zachowanie takim, jakie jest).
  2. Napraw to małymi krokami. Testowanie musi pozostać ekologiczne na każdym kroku.
  3. Uruchom go po każdym kroku. Wcześnie wykryj regresję.

Monit dotyczący planu bezpiecznej refaktoryzacji: „Następująca 60-liniowa funkcja robi za dużo i jest trudna do odczytania. Chcę ją zrefaktoryzować BEZ zmiany jej zachowania. Najpierw: wypisz przypadki testowe, których potrzebuję, aby zablokować bieżące zachowanie. Następnie: podziel refaktoryzację na małe kroki, z których każdy można wykonać, gdy testy są zielone. Nie pisz jeszcze kodu, najpierw podaj plan. Kod: [kod]”

Słaba podpowiedź/silna podpowiedź

SŁABY: „Ulepsz ten kod”. (Wynik: nie jest jasne, co poprawić; sztuczna inteligencja wprowadza dowolne zmiany, może po cichu zmienić zachowanie.) STRONG: „Przeanalizuj tę funkcję obliczania płatności, aby była czytelna. OGRANICZENIE: zachowanie musi pozostać dokładnie takie samo, zwracane wartości nie mogą się zmieniać. Podziel długą funkcję na znaczące funkcje użytkowe, zwiększając magiczne liczby do nazwanych stałych. Wypisz zmiany element po elemencie i wyjaśnij DLACZEGO każdy element nie zmienia zachowania. Kod: [kod]”

Potężny monit wyraźnie stwierdza, że „zachowanie musi pozostać takie samo” i wskazuje, co należy poprawić. Bez tego ograniczenia sztuczna inteligencja może zmienić logikę w imię „ulepszenia” i spowodować cichą regresję.

Zarządzanie długiem technicznym

Podejście

W krótkim okresie

na dłuższą metę

ignorując dług

szybki postęp

Paraliż konserwacyjny, spowolnienie zespołu

napisz wszystko od nowa

Rozwój funkcji stałych

Niepewny zwrot, wysokie ryzyko

Zmierzona, chroniona testami refaktoryzacja

niewielkie spowolnienie

Zrównoważona prędkość

Najzdrowszy sposób to trzeci sposób: uwidocznij dług (zapisz go na liście), zacznij od miejsca, w którym najbardziej boli i sprawdzaj każdą naprawę. Sztuczna inteligencja jest dobrą pomocą w identyfikowaniu i ustalaniu priorytetów pozycji dłużnych, ale to, który dług spłacić, jest decyzją biznesową.

Mini etui

Przypadek 1 – Cicha regresja. Programista mówi sztucznej inteligencji, aby „uprościła tę funkcję”; Sztuczna inteligencja błędnie tłumaczy warunek i kalkulacja zwrotu jest zepsuta. Ponieważ nie ma testów, błąd pojawia się po 3 tygodniach od reklamacji klienta. Zespół wykonuje tę samą pracę, pisząc najpierw test charakterystyki i wychwytując błąd przy pierwszym uruchomieniu, wyświetlając czerwony test.

Przypadek 2 – Przydatne drugie oko. Podczas przeglądu kodu AI zdaje sobie sprawę, że autoryzacja użytkownika jest sprawdzana tylko w interfejsie, a nie na serwerze. Jest to luka związana z nieautoryzowanym dostępem. Inżynier dodaje sprawdzanie autoryzacji po stronie serwera; Inspekcja AI zapobiega rzeczywistemu incydentowi związanemu z bezpieczeństwem.

Przypadek 3 – Fałszywie dodatni. AI mówi „ta zmienna nigdy nie jest używana, usuń ją”; Jest on jednak używany pośrednio poprzez zmienny mechanizm odbicia. Jeśli inżynier nie zweryfikował sugestii w oparciu o test, zostałaby ona usunięta i wystąpił błąd w czasie wykonywania. Każde odkrycie AI musi zostać potwierdzone przed wdrożeniem.

Typowe błędy

  • Refaktoryzacja bez testowania. Nie pozostało już nic, co zapewniłoby zachowanie zachowania.
  • Stosowanie ustaleń AI bez ich sprawdzania. Zdarzają się zarówno wyniki fałszywie dodatnie, jak i fałszywie ujemne.
  • Marnowanie czasu ludzkiego na problemy z formatem. Koncentrowanie się na zadaniach, które można rozwiązać za pomocą zautomatyzowanych narzędzi, przyćmiewa realne ryzyko.
  • Biorąc odpowiedź „Nie ma problemu” jako gwarancję. Sztuczna inteligencja może ominąć lukę; wymagana jest weryfikacja przez człowieka.
  • Próbuję spłacić cały dług na raz. Większe przeróbki są ryzykowne; Preferowane są stopnie mierzone i zabezpieczone testami.

Podsumowując

Przegląd kodu i refaktoryzacja określają trwałość kodu. Sztuczna inteligencja to potężny generator planów i drugiego oka: dostarczający ustalenia z priorytetami, scenariusze bezpieczeństwa i plany refaktoryzacji małych kroków. Jednak refaktoryzacja nie powinna zmieniać zachowania i tylko testowanie to gwarantuje. Zweryfikuj każde odkrycie AI pod kątem kodu i testów; Nie traktuj odpowiedzi „nie ma problemu” jako dowodu. Uwidocznij dług techniczny i spłacaj go w wyważonych, chronionych testami krokach.

Zadanie aplikacji

Weź linię 40-70, nieco złożoną funkcję, którą posiadasz (lub wygeneruj AI). Najpierw postępuj zgodnie z monitami przeglądu strukturalnego i posortuj wnioski jako [KRYTYCZNE]/[ŚREDNIE]/[NISKIE]; Ręcznie zweryfikuj co najmniej jedno ustalenie względem kodu. Następnie, po wyświetleniu monitu dotyczącego planu bezpiecznej refaktoryzacji, najpierw wygeneruj i uruchom testy charakteryzujące, a następnie zastosuj refaktoryzację małymi krokami i sprawdź, czy testy pozostają zielone na każdym kroku.

lista kontrolna

  • [ ] Ustrukturyzowałem recenzję za pomocą tagów priorytetu (krytyczny/średni/niski).
  • [ ] Sprawdziłem co najmniej jedno odkrycie AI w oparciu o kod/test.
  • [ ] Przetestowałem bieżące zachowanie przed refaktoryzacją.
  • [ ] Zmiany wprowadzałem małymi krokami i na każdym kroku przeprowadzałem testy.
  • [ ] W znaku zachęty określiłem ograniczenie „Zachowanie musi pozostać takie samo”.
  • [ ] Potwierdzam, że ustalenia dotyczące bezpieczeństwa wymagają potwierdzenia przez człowieka.