Dlaczego testy oprogramowania nie chronią przed błędami?

Analiza statyczna kodu może wykryć błędy współbieżności

Pytanie brzmi więc: jak można efektywnie wykrywać takie błędy? Zdaniem prof. Dona Sannella, zajmującego się naukami komputerowymi na Uniwersytecie w Edynburgu, rozwiązaniem jest statyczna analiza kodu na etapie jego tworzenia. Narzędzia do analizy statycznej badają kod, nie wykonując go i nie wykorzystując danych, ale weryfikują wszelkie możliwe ich ścieżki, aby wykryć niespójności.

"Na przykład kompilator wykonuje prostą analizę statyczną, szukając podstawowych błędów, np. próby dzielenia litery przez liczbę. Natomiast specjalizowane narzędzia analizy statycznej służą do dużo bardziej skomplikowanych zadań" wyjaśnia prof. Don Sannella.

Zobacz również:

  • Wszystkie problemy macOS 14.4 - lepiej nie aktualizować Maców

Takie narzędzia są stosowane od około dziesięciu lat. Ich dostawcami są m.in. IBM lub HP, ale też mniejsze firmy jak WhiteHat Security czy Veracode. Większość z nich została stworzona jednak raczej w celu wykrywania luk w systemach bezpieczeństwa, np. przepełnień bufora lub wstrzyknięć kodu SQL, a nie błędów związanych ze współbieżnością.

Contemplate, firma, którą utworzył prof. Don Sannella, opracowuje inne rozwiązanie: narzędzie do analizy statycznej oprogramowania Java tzw. ThreadSafe, służące do wykrywania błędów we współbieżnym programowaniu. Ma ono pozwolić na wyszukiwanie niespójności, które obecnie wydają się być niewykrywalne.

ThreadSafe koncentruje się na Javie ze względu na dużą popularność tego języka. Oprócz tego język Java od samego początku był tworzony dla celów programowania współbieżnego.

Narzędzie ma być zintegrowane z oprogramowaniem Eclipse. Docelowo ma działać już podczas pisania programu, na podobnej zasadzie jak funkcje sprawdzania pisowni. Standardowy raport ThreadSafe będzie alarmować o niespójnie zsynchronizowanej zmiennej, która może wskazywać na wyścig. Bo blokada lub synchronizacja są sposobem na ochronę przed tego typu błędami. Ma też informować o zablokowaniu zmiennej, co może wskazywać na potencjalne problemy. Na tej podstawie programista może sam sprawdzić, czy zapomniał zablokować zmienną i zdecydować czy musi wprowadzić zmiany do kodu, czy też jest to coś zupełnie bez znaczenia – wyjaśnia prof. Don Sannella.

Wykrycie błędu nic nie da, jeśli nie można go usunąć

Chociaż narzędzia analizy statycznej pozwalają na wykrycie błędów we współbieżnym programowaniu i problemów z bezpieczeństwem już na etapie pracy dewelopera, są stosowane rzadziej niż można by sądzić. Przyczyną nie są koszty, lecz to, że informują o zbyt dużej, niemożliwej do ogarnięcia liczbie potencjalnych problemów. Często trzeba analizować setki, a nawet tysiące ostrzeżeń przypisując im odpowiednie priorytety.

Chris Wysopal, dyrektor ds. technologii w firmie Veracode, szacuje, że tylko 40% programistów korzysta z analizy statycznej. A ci, którzy to robią, nie wykorzystują pełnego potencjału takich narzędzi. W sposób efektywny i skuteczny narzędzi analizy statycznej używa w rzeczywistości zaledwie około 10% deweloperów.

To dlatego, że takie narzędzia są dobrym rozwiązaniem do wykrywania błędów, ale nie do ich naprawiania. Bo informacja o dużej liczbie potencjalnych błędów prowadzi do tego, że wiele nagromadzonych problemów musi długo czekać na rozstrzygnięcie czy mają istotne znaczenie. Wyzwaniem jest więc to, aby opracować narzędzia, które będą w stanie automatycznie naprawiać większość błędów.


TOP 200