2012-01-27 18 views
7

Czy istnieje narzędzie do analizy statycznej, które automatycznie sprawdza warunki wyścigu w projektach Java? Najlepiej jeden wspierający Eclipse, Spring i Hibernate. DziękiCzy istnieje narzędzie do analizy statycznej, które automatycznie sprawdza warunki wyścigu w projektach Java?

EDYCJA: Może nie potrzebuję narzędzia do analizy statycznej, ale może narzędzie, które uruchamia wątki java (przynajmniej JUnit) z inną losową prędkością, a także może odtworzyć ten sam profil prędkości pod debuggerem. Tak więc pomocny byłby prawie każdy sposób wykrywania warunków wyścigu.

+2

proszę dać ludziom kredyt dla ich wysiłku, aby pomóc i [zaakceptować odpowiedź] (http : //meta.stackexchange.com/a/5235/160062) na twoich poprzednich pytaniach. Nie zaakceptowałeś jednej odpowiedzi. – oers

Odpowiedz

6

JLint może być używany do wykrywania warunków wyścigu. IBM's ConTest jest przeznaczony do testowania problemów związanych z współbieżnością, więc spójrz na to również.

+0

Witryna JLint nie wygląda poważnie. Czy mógłbyś prosić mnie, że sam go wypróbowałeś i czy to działa dobrze? – user1081596

+2

JLINT jest jednym z najlepszych @ user1081596. Nie pomijaj książki przy okładce :) –

+2

JLint jest tak samo poważny, jak nazwa "user1081596";) Żarty na bok, jedyny powód, dla którego "nie wygląda poważnie", to dlatego, że koleś nie zawracał sobie głowy stroną internetową i nie hostuję go pod java.net lub sourceforge ... – Gepsens

1

Analiza statyczna to dobra rzecz, bez wątpienia. Ale czy mogę zasugerować, by nie było tak statyczne JPF?

+1

Byłoby miło, gdyby JPF był nieco łatwiejszy w użyciu. –

+0

Dokumentacja mówi, że JPF sprawdza zakleszczenia, ale czy sprawdza warunki wyścigu? – user1081596

+0

@ user1081596 Tak, to robi. –

1

Jeśli używasz programu Eclipse, możesz użyć kodu FindBugs, aby sprawdzić kod. Jeśli chcesz, możesz uruchomić go również z poziomu wiersza poleceń lub interfejsu Swing.

0

Nie korzystałem z produktu osobiście, ale pomyślałem o Corensic Jinx kiedy napisałeś, że szukasz "narzędzia, które uruchamia wątki Java (przynajmniej JUnit) z różną prędkością losową". Zgodnie ze stroną opisu produktów firmy Corensic, Jinx obserwuje operacje gwintowania na macierzystym poziomie wątków systemu operacyjnego i "dynamicznie buduje zestaw potencjalnych przeplotów (tj. Alternatywne ewentualności lub scenariusze wykonania, które będą występować w niektórych przyszłych warunkach), które są najbardziej prawdopodobne. spowodować błędy współbieżności i szybko przetestować te ścieżki wykonania na problemy z współbieżnością powierzchni, w tym zakleszczenia, warunki wyścigu i naruszenia atomowości. "

Może to być zbyt niski poziom dla aplikacji w całości Java, ale Corensic claims do obsługi aplikacji Java i Microsoft .NET.

Zobacz Using Jinx with Java

1

Coverity Analiza statyczna dla Javy flagi warunkach wyścigowych, a także ewentualnych naruszeń zakleszczeń i niepodzielność.

Dodatkowo Coverity zawiera produkt analizy dynamicznej, który służy do testowania własnych testów i raportowania potencjalnych warunków wyścigu i zakleszczeń. Zauważ, że uruchamianie go w testach jednostkowych zwykle nie jest skuteczne, ponieważ ich logika jest zwykle prostsza niż typy interakcji, które złożona aplikacja będzie miała w produkcji, a bardziej efektywne jest przeprowadzanie analizy dynamicznej przy użyciu stresu, testów obciążeniowych lub nawet testowania ad hoc.

Nota prawna: Kiedyś pracowałem dla Coverity.

0

AppDynamics to narzędzie, które jest dołączane do maszyny JVM i dostarcza informacji o wykorzystaniu pamięci przez poszczególne wątki.

0

Opracowałem narzędzie o nazwie http://vmlens.com, które może wykrywać wyścigi danych, w szczególności wyścigi danych zapisu/zapisu. Szuka pól pamięci, do których można uzyskać dostęp z różnych wątków bez synchronizacji.

Nie jest to narzędzie analizy statycznej, ale raczej dynamiczne. Aby wykryć wyścig danych do lokalizacji pamięci musi być dostęp przynajmniej przez dwa różne wątki.

Pozdrowienia Thomas

3

ThreadSafe (http://www.contemplateltd.com/threadsafe, darmowe badania są dostępne) robi dokładnie to pytanie prosi, obejmującego również Java współbieżności wady inne niż warunkach wyścigowych. Zobacz te InfoQ article, aby znaleźć przykłady błędów współbieżności znalezionych w aplikacjach Open Source, w tym Apache JMeter i K9Mail. Aby uzyskać opinię użytkownika, patrz Ivan Senic's blog.

(Disclosure. THREADSAFE to narzędzie komercyjne i jestem współzałożycielem kontemplować, firma, która produkuje ją)

+0

Czy wątek jest porzucony? Najnowsza wersja pochodzi z 20 marca 2015 r. – Nadar

Powiązane problemy