Analiza statyczna jest bardzo dobra w odpowiedzi na konkretne pytanie: czy ten kod jest błędny? Wykrywa odwołania do null, iniekcje, niebezpieczną deserializację, znane złe wzorce. Nie może jednak zadać zupełnie innego pytania: czy ta zmiana narusza obowiązek zawarty w regulacjach?
Dwa różne pytania
Linter rozumuje na podstawie kodu przed nim: typy, przepływ sterowania, zanieczyszczenie, znane sygnatury podatności. Jest ślepy na frameworki z założenia, ponieważ reguły, które egzekwuje, są uniwersalne, takie same w każdym repozytorium na świecie.
Compliance jest odwrotnością. Czy zmiana jest problemem, zależy od faktów, których kod nie zawiera: które frameworki musi spełniać Twoja firma, co uważa się za dane osobowe w Twojej dziedzinie, jak długo wolno je przechowywać, dokąd mogą płynąć. Ten sam diff może być w pełni zgodny w jednej firmie i stanowić znalezisko w innej.
Zmiana, która jest poprawna i niezgodna jednocześnie
Dodaj linię logowania, która rejestruje pełne ciało żądania, aby zdebugować przepływ zamówienia. Kod jest poprawny. Kompiluje się, działa, żaden linter nie protestuje, testy przechodzą. Jednocześnie zapisuje adres e-mail i adres klienta w logach, co to więcej danych osobowych, niż wymaga cel, i to już jest terytorium GDPR Art. 5(1)(c).
Żadne narzędzie oceniające jakość kodu nie zasygnalizuje tego, ponieważ nic w kodzie nie jest niskiej jakości. Problem jest widoczny tylko wtedy, gdy czytasz zmianę w kontekście obowiązków ochrony danych, które firma rzeczywiście ma. To warstwa świadoma frameworków, której lintery nie posiadają.
Brakująca warstwa, a nie zastępstwo
To nie jest argument przeciwko linterom ani skanerom. Zachowaj je; wykrywają rzeczy, których heygrc nigdy nie złapie. To argument, że istnieje cała kategoria ryzyka powyżej nich – obowiązki frameworków – której żadna ilość analizy jakości kodu nie jest w stanie dostrzec.
heygrc to właśnie ta warstwa. Czyta zmianę w kontekście Twoich frameworków i cytuje konkretną kontrolę, dzięki czemu ślepa plama frameworkowa w Twoich obecnych narzędziach otrzymuje dodatkowy zestaw oczu.