2013-08-19 24 views
10

Używamy Klocwork jako narzędzia do analizy statycznej.Czy kiedykolwiek porównywałeś narzędzia do analizy statycznej Klocwork i Findbugs?

Klokowanie jest narzędziem komercyjnym i ma wiele zalet, ale ma również ograniczenia, takie jak fałszywe alarmy.

Zastanawiam się, kto kiedykolwiek porównywał Klocwork z innymi narzędziami typu open source, takimi jak Findbugs.

Ogólnie rzecz biorąc, narzędzia handlowe są bardziej niezawodne niż narzędzia Open Source.

Ale myślę, że Klocwork ma również kilka wiarygodnych problemów w określonych domenach biznesowych, takich jak Android.

Czy można powiedzieć, że Klokwork ma przewagę nad innymi narzędziami open source, zwłaszcza Findbugs w aspektach fałszywych trafień i fałszywych negatywów?

+0

Głosowanie za blisko jako zbyt szerokie. –

Odpowiedz

19

Dokonałem porównania między komercyjnymi i opensourceowymi narzędziami analizy kodu statycznego (SCAT) kilka lat wstecz. Klocwork był jednym z nich. Krótko mówiąc, wynik był taki, że w środowisku Java komercyjne narzędzia nie zapewniały (dodatkowej) wartości niezbędnej do uzasadnienia ich ceny. W liczbie znalezionych błędów findbugs był znacznie lepszy niż jakiekolwiek z tych narzędzi. Tylko pokrycie wykryło kilka błędów, których nie znaleziono na żadnym innym narzędziu i które miały najniższy poziom (FPR). Z drugiej strony, pokrowiec nie wykrył wielu błędów znalezionych przez findbugi - tak więc dla nas wszystkie narzędzia nie uzasadniały zaangażowanych pieniędzy. I jeśli skonfigurowany w prawo, findbugs zapewnia również bardzo niski FPR. W nowszej wersji coverity zawierał możliwość zintegrowania findbugów z ich rozwiązaniem. Mhmmmmm, dlaczego to zrobili? :-)

Istnieją jednak scenariusze np. kiedy używasz innych języków programowania lub scentralizowanych skanów językowych (np. twoja baza zawiera inne języki programowania (takie jak C, C++, C# ...)) lub potrzebujesz dodatkowych funkcjonalności dostarczanych przez te narzędzia - wtedy warto byłoby szukać w komercyjne narzędzia. Ale możesz sam zdecydować, ponieważ każde rozwiązanie można przetestować. Wejdź na ich stronę internetową i pobierz/poproś o próbę i spróbuj sam (może w międzyczasie wszystko się zmieniło?).

Sprawdziłem następujące narzędzia:

komercyjne:

  1. Coverity
  2. Klocwork
  3. Parasoft
  4. Cast

OpenSource:

Więc w końcu co zrobiliśmy? Zainstalowaliśmy darmowy sonar server, który łączy w sobie wiele narzędzi, takich jak findbugs, pmd, checkstyle, cobertura i tym podobne. Dzięki temu otrzymaliśmy bezpłatne rozwiązanie, które pod wieloma względami jest lepsze niż dostępne komercyjne narzędzia. A gdybym musiał iść komercyjną trasą, prawdopodobnie przyjrzałbym się uważnie (i nigdy więcej nie spojrzę na CAST).

[Aktualizacja] chodzi o twoje pytanie o wydajność - findbugs jest w stanie skanować ogromne codebases bez problemu (jeśli wystąpią problemy następnie umieszczać je w findbugs mailing list i będą ci pomóc). Pamiętam, że wtedy findbugs był również jednym z najszybszych narzędzi. Pokrycia na przykład potrzebne prawie 2 h do końca, podczas gdy findbugs został zrobiony w mniej niż 10 minut. Inne narzędzia, w których pomiędzy tymi liczbami.

Jeśli chodzi o skanowanie kodu C i C++, można spojrzeć na Splint i cppcheck. Są też inne wątki omawiające ten temat. Ale jak wspomniano, ponieważ findbugs jest tylko dla java i chcesz wykryć problemy językowe między programami, komercyjne narzędzia mogą mieć przewagę. W końcu, ponieważ findbugs jest bezpłatny - wystarczy uruchomić go w bazie kodu i sprawdzić, co się stanie - Twój projekt może z niego skorzystać! Następnie napraw znalezione błędy, a następnie wykonaj próbę z niektórymi komercyjnymi narzędziami - i w zależności od ilości znalezionych błędów i ceny, jaką zapłacisz, wyciągnij własne wnioski. Aby dać ci przykład: Jedno z narzędzi kosztuje "Linie kodu"/podzielone przez 10 (w $). Ale może się zdarzyć, że w danym przypadku można uzyskać zniżkę ;-)

[Aktualizacja II] jakieś ciekawe master thesis omawiania tego tematu. Główną częścią jest temat "findbugs", ale wspomina również o klockwork i coverity.

+1

Wielkie dzięki. twoja odpowiedź jest bardzo pomocna. Mam jeszcze jedno pytanie. Właściwie to muszę zrobić analizę statyczną dla pełnych kodów źródłowych Androida, które zawierają java, c i C++. Według ciebie Findbugs ma ograniczenia w zakresie objęcia innych języków. Jeśli chodzi o ograniczenia, zastanawiam się również, czy Findbugs może zawierać duże kody źródłowe, takie jak Android AOSP (java: 10 milionów LOC, c/C++: 5 milionów LOC), a nie tylko jedna aplikacja na Androida. – 500004dolkong

+0

Twoja odpowiedź i porady są dla mnie bardzo imponujące i pomocne. Wielkie dzięki.^^ – 500004dolkong

+0

Twoja odpowiedź była dobrym punktem odniesienia. W twoim doświadczeniu jakie są współczynniki fałszywych trafień w porównaniu do fałszywych negatywów w tych apartamentach. Dziękuję Ci. –