Analiza przetwarzania kodu źródłowego Javy i ogólnie kodu.

0

Witam wszystkich programistów.
W związku z realizowaną przeze mnie pracą dotyczącą wykrywania podobieństw w kodach źródłowych Javy, chciałbym zapytać lub skorzystać z wiedzy osób, które w tej materii miały coś do czynienia. Konkretnie chodzi mi o statyczną analizę kodu, czyli o wyekstrahowanie znaczących części tego kodu, pozbycie się wszelkich znaków białych itd itp. Zastosowaniu mogły by podlegać informacje wygenerowane na podstawie kodu i przedstawione jako abstrakcyjne drzewa syntaktyczne (AST). W tej sytuacji można by zastosować pluginy generujące te informacje (tzn pluginy AST) i wtedy te informacje analizować, bądź też podjąć się analizy "surowego" pliku z kodem. Wtedy w przypadku programu będzie miało miejsce kilkukrotnie, albo musi być jakoś rzeczowo zespolone jako całościowo analizowany program.
Zwracam się więc do osób, które mogłyby mi wskazać kierunek działań, mają doświadczenie w tym temacie, robili coś z analizy kody itd. Program będę pisał pod NetBeans'em więc jeśli, ktoś może pomóc i nawiązać rzeczowo do tematu.
Pozdrawiam

0

Nawiązując jeszcze do mojego postu powyżej. Istnieje coś takiego jak odległość dwóch plików tekstowych (czytaj. plików kodów źródłowych). Mianowicie chodzi o ilość operacji, które wykonać trzeba aby jeden plik tekstowy przekształcić w drugi. Chodzi o termin "odległości plików", dla których miarą odległości jest własnie ilość operacji. Jeżeli istnieje osoba, która miała doświadczenie w tej materii bardzo proszę o kontakt.
Pozdrawiam

0

Był chyba niedawno podobny temat. Wspominałem tam o łańcuchach Markowa i deus się do mnie przypieprzał :P

0

Witaj,
przyznaję, że tylko pobieżnie zerknąłem w ten termin. Z pełnym szacunkiem, ale nie do końca rozumiem w jaki sposób mogłoby to być zastosowane. Dla mnie to dwa tematy z innych bajek. Jeżeli się mylę, to oświeć mnie proszę, ale tekst w postaci, że coś proponowałeś niewiele mi mówi.
Pozdrawiam

0

Słuchałem kiedyś, tzn przysłuchiwałem się rozmowie organizatorów na Olimpiadzie Informatycznej o sposobie wykrywania plagiatów. Pamiętam właśnie te łańcuchy Markowa. Generalnie moja intuicja jest taka, że skoro łańcuch Markowa definiuje prawdopodobieństwo przejścia z jakiegoś stanu do innego pod wpływem jakiejś danej to można go użyć do wykrywania stylu pisania kodu, nawet jeżeli ktoś lekko podmieni słowa kluczowe czy konstrukcje składniowe.

0

Hmmm... z tym to ciężka sprawa, bo może po jakichś mega obliczeniach wynikałoby pewne prawdopodobieństwo. Z tym, że mówiąc szczerze to raczej ma być "surowe" i konkretne zdefiniowanie podobieństwa i określenie go jakąś wartością liczbową. Z prawdopodobieństwem ciężko było by coś ustalić.

0

Odległość edycyjna liczona przez różnego rodzaju *diffy, jest słabym współczynnikiem podobieństwa. Zmiana nazw klas, pól i metod jest prosta i szybka z pomocą jakiegoś IDE, a zwiększa odległość edycyjną wielokrotnie. Podobnie zmiana forów na while (i odwrotnie), refaktoryzacje polegające na wyodrębnianiu części klas, zamiana switchów na drabinki ifów (i odwrotnie), lekkie zamiany kolejności instrukcji, zmiana miejsc deklaracji zmiennych, wstawianie zbędnych instrukcji itp

0

Dokładnie o to chodzi. Z tym, że nie do końca się z Tobą zgodzę. Sama zmiana nazw zmiennych, typów danych, kolejności metod w klasie itd nie do końca powinna być brana pod uwagę. Tzn, w tym sensie że stanowić powinna mały procent w końcowej ocenie podobieństwa. Bardziej istotny będzie przepływ sterowania pomiędzy składowymi programu. Ale to będzie druga część oceny. Użycie tej samej ilości danych określonego typu nie może mówić o podobieństwie jeśli cała koncepcja operacji w programie wykonana jest w odmienny sposób.

0

Odległość edycyjną już wykluczyliśmy. Co więc zostaje? Jeśli chcesz dokonać rozkładu kodu, to aby uodpornić się na zmiany kolejności niezależnych instrukcji musiałbyś stworzyć graf (DAG konkretnie), a nie drzewo. W grupie instrukcji, które nie są od siebie zależne, nie może być relacji ojciec-syn.

W zasadzie problem wydaje się być skomplikowany i to mocno. Ja bym spróbował zaprząc do tego te łańcuchy Markowa.

http://4programmers.net/Forum/Off-Topic/98761-program_antyplagiatowy_do_kodow_zrodlowych_programow_wasze_opinie?hl=%C5%82a%C5%84cuchy%20markowa
Wirtualny Poeta

1 użytkowników online, w tym zalogowanych: 0, gości: 1