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.

Author: Aditya Sehgal, 2009-07-09

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ę.

 9
Author: Trent,
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.

 10
Author: Norman Ramsey,
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.

 6
Author: BCS,
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.

 4
Author: Eike,
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 .

 2
Author: plinth,
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.

Http://dev.eiffel.com

 2
Author: clemahieu,
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
 0
Author: Koubi,
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