12

Właśnie zostałem wprowadzony w termin "krojenie programu". To ma doskonały sens, że ktoś chciałby takiej funkcjonalności, ale czy istnieje w dowolnym miejscu?Jakie narzędzia do krojenia programów istnieją?

Termin ma teraz 20 lat i widzę, że jest wiele publikacji, artykułów naukowych itp. Ale gdzie są rzeczywiste narzędzia? Czy ludzie faktycznie stosują tę koncepcję w praktyce, czy tylko studiują ją akademicką?

Co tam jest i jakie języki?

Edycja: Domyślam się, czego szukam, a nagrodę za zaakceptowaną, jest odniesieniem do jakiejś publikacji/organizacji/etc, która jest szczególnie ukierunkowana na programowanie i utrzymuje listę narzędzi/technik/itp.

Odpowiedz

8

[Edycja] (w REPONSE OP zmienionej pytanie)

że już po literaturze dość dawna. Nie sądzę, żeby istniało centrum "podziału programu", które ma listę takich, jakich oczekujesz. Większość skonstruowanych programów stanowiły pewnego rodzaju eksperyment uniwersytecki (oznacza, że ​​nie działały one w produkcji i nie są dostępne do celów praktycznych). Możesz dowiedzieć się o nich, wyszukując stronę scholar.google.com z hasłem "zgadnij program"; Podejrzewam, że już to wiesz. "Wielcy", myślę, że już tu macie.

Ta ankieta jest nieco stara, ale wykonana przez gwiezdnego badacza: http://www.cse.buffalo.edu/LRG/CSE605/Papers/slicing-survey-tip.pdf. Ten jest nowszy: http://dl.acm.org/citation.cfm?id=1050865.

CodeSurfer to komercyjne narzędzie do wykonywania statycznego krojenia w programach C. Uważam, że również obsługują C++. Znaczącym plusem niedostępnym z innymi narzędziami jest interfejs do interaktywnego przeglądania wycinków kodu.

Indus jest uniwersyteckim narzędziem badawczym do wykonywania statycznego krojenia kodu na Javie. Nie jestem pewien, czy to wciąż jest pod aktywnym rozwojem.

Wydaje się, że istnieje wiele "dynamicznych" narzędzi krojonych programów dla Javy tworzonych przez uniwersytety. Żadna z nich nie jest aktywnie rozwijana lub używana, o której wiem.

Moja firma oferuje pakiet narzędzi do projektowania oprogramowania DMS, który zawiera ogólne narzędzia do kontroli programu i analizy przepływu danych, w tym tworzenie niestandardowych krajalnic kodu. DMS został użyty do tworzenia wycinków dużych programów C oraz programów sterowania procesami przemysłowymi. (Podaję link, ale ludzie wydają się go nienawidzić, kiedy to robię).

6

Model Frama-C platform, który jest poświęcony analizie kodu C, ma pełnoprawną interprocedurę slicing plugin. Zobacz na przykład this page, gdzie użytkownik używa tej wtyczki, aby uprościć program, który analizował.

1

Spójrz na Wala dla Java. WALA zawiera krajalnicę, opartą na kontekstowej tabulacji osiągalności na wykresie zależności systemu.

2

Proszę spojrzeć na Giri.

Dynamiczne krojenie programów to technika, dzięki której można precyzyjnie określić, które instrukcje wpływały na konkretną wartość podczas pojedynczego wykonywania programu. Giri implementuje dynamiczne cięcie w tył w kompilatorze LLVM.

Ten projekt opracował po raz pierwszy Swarup Kumar Sahoo, John Criswell oraz dr Vikram S.Adve od UIUC. Został wybrany przez Google Summer of Code (GSoC) 2013, w ramach swojego projektu parasolowego LLVM. Mingliang Liu z Uniwersytetu Tsinghua dołączył, by ulepszyć Giriego w czerwcu 2013 r. Jest to projekt ciągły, a prośby o przyciągnięcie są bardzo cenione.

Powiązane problemy