Pieter Edelman
27 February 2012

Met de Supertest-omgeving van het Amsterdamse Ace kunnen halfgeleiderbedrijven, compilerontwikkelaars en eindklanten controleren of hun C/C++-compilers naar behoren werken. De nieuwste versie, Rembrandt genaamd, breidt het pakket aan tests nog eens flink uit en introduceert de mogelijkheid om de geproduceerde binaire interfaces te testen.

Gewapend met uitgebreide testsuites zorgt de professionele softwareontwikkelaar ervoor dat zijn code doet wat hij moet doen en min of meer vrij is van bugs. De impliciete aanname daarbij is altijd dat het onderliggende platform correct werkt. Maar wie garandeert dat eigenlijk?

Nou, onder meer Ace Associated Compiler Experts doet dat. Het Amsterdamse bureau is een van de weinige bedrijven in de wereld met een product voor het testen van compilers. In de nieuwe versie – codenaam Rembrandt – van zijn Supertest-suite voegt Ace veertienhonderd nieuwe handgeschreven cases toe aan het pakket voor onder meer C99-libraryfuncties, complexe types en compileroptimalisaties, plus vijfhonderd tests voor de C++ Standard Library. Daarnaast kan de test voortaan de binaire interface van gecompileerde code controleren.

De tool wordt ingezet door verschillende typen klanten, legt Marco Roodzant van Ace uit. ’In eerste instantie zijn dat de compilerontwikkelaars bij toolbedrijven of bij chipfabrikanten. Maar dit soort ondernemingen hebben vaak ook aparte testgroepen, dat is een andere categorie. Een compilerontwikkelaar wil gelijk weten of een bepaalde feature werkt, een testgroep wil voor het product de deur uit gaat juist álles testen.‘

Supertest kan aan beide wensen tegemoetkomen. Het pakket bestaat aan de ene kant uit een berg testcases in C en C++ en aan de andere kant uit een raamwerk met gebruikersomgeving voor uitvoering en analyse. Gebruikers kunnen kiezen om alleen bepaalde tests of testgroepen uit te voeren. De omgeving is ook te scripten en daardoor op te nemen in de standaard ontwikkelflow. Voor chipmakers is het bijvoorbeeld vrij gebruikelijk om via de GCC-compiler mee te liften op de ontwikkelingen van de opensourcegemeenschap. In de praktijk blijken hier nog wel eens bugs in te zitten. Verder bevat Supertest generatoren voor nieuwe testcases. ’Voor DSP-optimalisaties zie je bijvoorbeeld dat gebruikers hier speciale testsuites voor genereren‘, vertelt Roodzant.

Supertest kan verder overweg met crosscompilers en de geproduceerde binary‘s op een apart target draaien en analyseren, al dan niet parallel. ’In de praktijk komt dat met echte chips eigenlijk nooit voor, die zijn tegenwoordig snel genoeg. Maar simulatoren kunnen wel zo traag zijn dat het loont om er meerdere naast elkaar te zetten‘, aldus Roodzant.

Er is ook nog een derde categorie van klanten, zegt Roodzant: ’De kopers van compilers. Met name in de applicatiekritieke gebieden zoals lucht- en ruimtevaart, automotive en defensie hebben ze daar door schade en schande geleerd dat compilers fouten kunnen bevatten. Vroeger gebruikten dit soort klanten Supertest vooral om de kwaliteit te waarborgen, tegenwoordig gaat het niet alleen om kwaliteit maar ook om de verantwoordelijkheid naar interne processen. Eigenlijk is dat nu een vierde categorie.‘

Lastige producten

Ace begon bijna dertig jaar geleden met de ontwikkeling van het pakket voor zijn eigen compilers, maar zette het al snel als los product in de markt. Samen met het Canadese softwarebedrijf HCR ging het vervolgens aan de slag met een omgeving voor conformancetests, die controleren of de compiler op de juiste manier met de taalstandaarden omgaat. Die twee producten zijn vervolgens samengevoegd en door Ace als Supertest in de markt gezet. De software kan vandaag de dag testen op vier verschillende smaken: Iso 9899:1990 C, Iso 9899:1999 C99, Iso 14882 C++ en Iso TR 18037 Embedded C Extension. De suite voert zowel positieve (doet het wat het zou moeten doen?) als negatieve tests (gaat er fout wat er fout moet gaan?) uit.

In de Rembrandt-release – een knipoog naar het oud-Hollandse meesterschap – breidt Ace het pakket uit met de application binary interface (Abi). Compilers hebben zo hun eigen ideeën rond het aanroepen van functies in gecompileerde software, bijvoorbeeld over hoe variabelen op de stack worden gezet. Met bijvoorbeeld bibliotheken van derden kan er daarom onduidelijkheid ontstaan. De Abi legt vast hoe dit soort onderlinge aanroepen er uit horen te zien. ’Dit hebben we op verzoek van onze klanten toegevoegd‘, zegt Roodzant. ’We zijn hier een een paar jaar geleden al mee begonnen. Toen vonden we er direct al heel veel fouten mee.‘

Daarnaast is ook de testcasegenerator uitgebreid zodat deze meer combinaties kan testen. ’De plus- of vermenigvuldig-operators doen het meestal wel, maar bij een compiler is juist de combinatie interessant‘, weet Roodzant. ’Compilers zijn heel lastige producten. Daar worden allerlei optimalisaties en transformaties in gedaan die elkaar tegenwerken.‘

Supertest is beschikbaar via een corporate-licentie of via licenties voor een enkele site. ’Bij de safety-critical-bedrijven is het geen issue om te investeren in validatie van de compiler. Bij chipbedrijven merken we dat ze weliswaar heel veel geld uitgeven voor de verificatie van hun IC-design, maar vervolgens niet veel willen betalen voor Supertest. Ook toolontwikkelaars bezuinigen op dit soort uitgaven. Dus wij hebben het vrij simpel gemaakt: voor dertigduizend euro krijg je een perpetual license voor een enkele site, voor zesduizend euro krijg je ook nog maintenance-updates en een supportcontract.‘