Przypadki testowe kompilatora czyli jak przetestować kompilator
Kompilatory jak wszystkie programy, byĹ 'yby rĂłwnieĹź podatne na bĹ' Ä ™ dy, bĹ ' Ä ™ dy logiczne.
W Jaki Sposób można zweryfikować wyjście generowane przez kompilator. Zazwyczaj moje pytanie brzmi (są)
Jak sprawdzić poprawność wygenerowanego kodu maszynowego?
Jak zapewnić, że wygenerowany kod maszynowy jest zgodny ze specyfikacją języka.
Czy to ma sens, aby po prostu wybrać projekt open source (w C, jeśli ktoś jest również pisanie kompilatora w C) aby skompilować go za pomocą "kompilatora". Również w tym przypadku, jak ocenić, że kompilator zachowuje się zgodnie z oczekiwaniami.
Czy istnieją jakieś formalne przypadki testowe (Literatura) dostarczone przez Komitet Standardów językowych, które kompilator "zgodny z językiem" musi spełnić?
-
Jakie są pewne "daj spokój" , że problem w programie skompilowanym przez kompilator jest błędem kompilatora, a nie błędem programu.
- wszelkie przykłady, w których mainstream Kompilatory się mylą i źle kompilują kod?
Linki do jakiejkolwiek literatury byłyby mile widziane.
7 answers
Istnieje kilka zestawów testowych kompilatora. Poszczęściło nam się używać zestawu testów Plum Hall dla kompilatora C. Składa się z dużego zestawu kodu C napisanego specjalnie w celu sprawdzenia zgodności ze standardem językowym. Sprawdza, czy kompilator potrafi obsługiwać składnię języka i semantykę.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-09 16:19:40
Dobre Pakiety testowe dla prawdziwych języków są drogie w tworzeniu i utrzymaniu. Nie bez powodu zestaw testowy Plum Hall, który jest standardem branżowym dla ANSI C, jest tak cholernie drogi.
Tłumaczenie George ' a Neculi Walidacja tłumaczenia jest genialnym pomysłem, ale i dość kosztownym w realizacji.
Jedyną rzeczą, która jest tania i łatwa jest to: utrzymanie zestawu testów regresyjnych i za każdym razem, gdy naprawisz błąd w kompilatorze, umieść odpowiedni test w swoim regresja . W przypadku kompilatorów to niewiarygodne, jak łatwo jest ponownie wprowadzać ten sam błąd w kółko. Zdyscyplinowane dodatki do pakietu regresji zapobiegną temu i nie kosztują wiele.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-10 04:35:13
Ogólną praktyką jest tworzenie dużego zestawu małych programów, z których każdy demonstruje jeden aspekt kompilatora. Będą to zarówno programy, które kompilują, jak i te, które nie powinny. ogólne ASM wychodzący z zaplecza nie jest sprawdzany, ale raczej program jest uruchomiony i jego wyjście sprawdzone. Co do tego, jak upewnić się, że w testowych przypadkach nie ma błędów: zrób je małe, jak w 5-10 liniach każdy.
Te zestawy testów mogą być bardzo duże, jak w setkach do tysięcy testów (dla przykład: Nieaktualny zestaw testów dla języka programowania D ) i zazwyczaj zawiera jeden lub więcej przypadków testowych dla każdego zgłoszonego błędu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-09 17:46:33
Za pomysł skompilowania dużego projektu open source:
Możesz wziąć projekt, który sam ma zestaw testów. Następnie kompilujesz projekt i jego zestaw testów i sprawdzasz, czy testy przeszły pomyślnie. Aby zweryfikować te wyniki, należy skompilować project and test suite za pomocą innego kompilatora i uruchomić testy ponownie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-12 19:50:19
Było wcześniejsze pytanie związane z tym dla C , ale sprowadza się to do starannie napisanego zestawu testów kompilatora.
Jeśli chodzi o to, że Kompilatory źle odczytują kod, to w mojej karierze zawodowej dość często to robię, dzięki. Zdarza się to coraz rzadziej, ale w tym tygodniu znalazłem błąd w kompilatorach MS C++ kierujących CLI .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:17:10
Kompilator Eiffla jest open source i posiada obszerną bibliotekę przypadków testowych i wewnętrznych umów projektowych.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-09 18:28:51
GCC ma dość duży zestaw testów ( https://gcc.gnu.org/onlinedocs/gccint/Testsuites.html#Testsuites ). jest on dostępny w SCM: https://github.com/gcc-mirror/gcc/tree/master/gcc/testsuite
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-07 10:00:47