2012-08-16 17 views
5

Jestem zainteresowany, aby wiedzieć, czy istnieje już podejście, które ma kod metody Java jako wejście i określa funkcję koszt takiego kodu (liczbę pętli, IFS/elses, I/O i inne wspólne rzeczy). Mam na myśli nie dokładny koszt w ms, ale niektóre ogólne koszty, które ten kod może powodować. Chodzi o to, że chcę być w stanie zastosować dowolną metodę, którą pisze użytkownik, aby powiedzieć, jaki może być koszt takiej metody (oczywiście nie biorąc pod uwagę pewnych cech, takich jak JVM itp.).Czy istnieje sposób określenia ogólnej funkcji kosztu arbitralnej metody java?

+1

oferty to pytanie z głębokim problemem w analizie statycznej i w ogóle rozwiązania będą więc zbliżone mogą nie naprawdę działa przypadków Ci zależy (czytaj, analiza statyczna jest trudne). Jeśli podasz trochę więcej informacji na temat * dlaczego * tego chcesz, możesz uzyskać bardziej szczegółowe odpowiedzi na temat narzędzi, z których możesz skorzystać. –

+0

Wiele super-coolowych algorytmów wymaga raczej wyrafinowanych technik, aby udowodnić swoją asymptotyczną złożoność. Wykonanie go z samego kodu jest niemożliwe ze względów praktycznych. –

Odpowiedz

5

ja nie wiem, czy takie narzędzie istnieje, ale wątpię, zarówno jego wykonalność i jego użyteczność:

  • dla wykonalności takiego narzędzia w ogólnym przypadku spojrzeć na Halting problem, który jest istotną częścią tego, o co prosisz i udowodniono, że jest to undecidable.

  • Dla użyteczność takiego narzędzia, wierzę, że analiza statyczna kodu na własną rękę jest bezużyteczny, ponieważ znaczna część wydajności systemu zależy od jego wzorców użycia, to znaczy na jego wejściu.

    Istnieje powód, że nawet systemy testowania wydajności w runtime nie są proste; to samo oprogramowanie może być zadziwiająco szybkie w niektórych przypadkach i oszałamiająco wolne w innych.

Powiedział, że istnieją several tools for code complexity analysis, ale te wskaźniki koncentrują się na złożoności strukturalnej, która odnosi się bardziej do jakości i konserwacji niż wydajność.

1

Dla liczby pętli, jeśli/elses można zatrudnić Złożoność cykliczna metrykę. Istnieją narzędzia do jego obliczenia. Na przykład: JavaNCSS. Jeśli chodzi o inne rzeczy, powinieneś zdecydować, co Cię najbardziej interesuje. Istnieje wiele software metrics, a niektóre z nich mogą być odpowiednie dla Ciebie. Jeśli nie, możesz wymyślić swoje i wdrożyć je. Powiedzmy, PMD - inne popularne narzędzie do zbierania różnych wskaźników - pozwala pisać własne reguły.

Jeżeli chcesz automatycznie przewidzieć wykonanie kodu to jesteś pecha. Powody są wskazywane przez thkala, inne obejmują kompilację JVM JIT i optymalizacje runtime. Twoi najlepsi przyjaciele to profilowanie, (automatyczne) testowanie wydajności i analiza algorytmów. Analiza statyczna może pokazać pewne problemy z wydajnością, takie jak łączenie ciągów lub przydzielanie obiektów w pętli. Współczesne IDE są w stanie to zrobić. Jednak wydajność zależy głównie od algorytmów i architektury, więc trudno będzie uzyskać wiele ulepszeń na drodze analizy statycznej.

+0

Dzięki chłopaki! Tak, wiem, że strukturalna złożoność nie da mi prawdziwych kosztów, ale chcę zacząć od tego, a następnie zobaczyć, co jeszcze muszę wziąć pod uwagę. Przeanalizuję te linki i zobaczę, co mogę zrobić. – kepha

Powiązane problemy